134 lines
2.8 KiB
Go
134 lines
2.8 KiB
Go
/*
|
|
main.go - 计算器项目主程序
|
|
这是一个简单的命令行计算器,演示了 Go 语言的综合应用
|
|
*/
|
|
|
|
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"./calculator"
|
|
)
|
|
|
|
func main() {
|
|
// 创建计算器实例
|
|
calc := calculator.NewCalculator()
|
|
|
|
// 创建输入扫描器
|
|
scanner := bufio.NewScanner(os.Stdin)
|
|
|
|
// 显示欢迎信息
|
|
printWelcome()
|
|
|
|
// 主循环
|
|
for {
|
|
fmt.Print("> ")
|
|
|
|
// 读取用户输入
|
|
if !scanner.Scan() {
|
|
break
|
|
}
|
|
|
|
input := strings.TrimSpace(scanner.Text())
|
|
|
|
// 处理特殊命令
|
|
switch strings.ToLower(input) {
|
|
case "quit", "exit", "q":
|
|
fmt.Println("再见!")
|
|
return
|
|
case "help", "h":
|
|
printHelp()
|
|
continue
|
|
case "history":
|
|
printHistory(calc)
|
|
continue
|
|
case "clear":
|
|
calc.ClearHistory()
|
|
fmt.Println("历史记录已清空")
|
|
continue
|
|
case "":
|
|
continue
|
|
}
|
|
|
|
// 计算表达式
|
|
result, err := calc.Calculate(input)
|
|
if err != nil {
|
|
fmt.Printf("错误: %v\n", err)
|
|
continue
|
|
}
|
|
|
|
// 显示结果
|
|
fmt.Printf("结果: %g\n", result)
|
|
}
|
|
|
|
// 检查扫描器错误
|
|
if err := scanner.Err(); err != nil {
|
|
fmt.Printf("读取输入时发生错误: %v\n", err)
|
|
}
|
|
}
|
|
|
|
// printWelcome 显示欢迎信息
|
|
func printWelcome() {
|
|
fmt.Println("=== 欢迎使用 Go 计算器!===")
|
|
fmt.Println()
|
|
fmt.Println("支持的操作:")
|
|
fmt.Println(" • 基本运算: +, -, *, /")
|
|
fmt.Println(" • 括号运算: ( )")
|
|
fmt.Println(" • 浮点数计算")
|
|
fmt.Println()
|
|
fmt.Println("特殊命令:")
|
|
fmt.Println(" • help - 显示帮助信息")
|
|
fmt.Println(" • history - 查看计算历史")
|
|
fmt.Println(" • clear - 清空历史记录")
|
|
fmt.Println(" • quit - 退出程序")
|
|
fmt.Println()
|
|
fmt.Println("请输入数学表达式:")
|
|
}
|
|
|
|
// printHelp 显示帮助信息
|
|
func printHelp() {
|
|
fmt.Println()
|
|
fmt.Println("=== 帮助信息 ===")
|
|
fmt.Println()
|
|
fmt.Println("支持的运算符:")
|
|
fmt.Println(" + 加法 例: 2 + 3")
|
|
fmt.Println(" - 减法 例: 5 - 2")
|
|
fmt.Println(" * 乘法 例: 4 * 6")
|
|
fmt.Println(" / 除法 例: 8 / 2")
|
|
fmt.Println(" () 括号 例: (2 + 3) * 4")
|
|
fmt.Println()
|
|
fmt.Println("使用示例:")
|
|
fmt.Println(" 2 + 3")
|
|
fmt.Println(" 10 * (5 - 2)")
|
|
fmt.Println(" 15.5 / 3.1")
|
|
fmt.Println(" ((2 + 3) * 4) - 1")
|
|
fmt.Println()
|
|
fmt.Println("特殊命令:")
|
|
fmt.Println(" help - 显示此帮助信息")
|
|
fmt.Println(" history - 查看计算历史")
|
|
fmt.Println(" clear - 清空历史记录")
|
|
fmt.Println(" quit - 退出程序")
|
|
fmt.Println()
|
|
}
|
|
|
|
// printHistory 显示计算历史
|
|
func printHistory(calc calculator.Calculator) {
|
|
history := calc.GetHistory()
|
|
|
|
if len(history) == 0 {
|
|
fmt.Println("暂无计算历史")
|
|
return
|
|
}
|
|
|
|
fmt.Println()
|
|
fmt.Println("=== 计算历史 ===")
|
|
for i, record := range history {
|
|
fmt.Printf("%d. %s = %g\n", i+1, record.Expression, record.Result)
|
|
}
|
|
fmt.Println()
|
|
}
|