完成
This commit is contained in:
133
golang-learning/10-projects/01-calculator/main.go
Normal file
133
golang-learning/10-projects/01-calculator/main.go
Normal file
@@ -0,0 +1,133 @@
|
||||
/*
|
||||
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()
|
||||
}
|
Reference in New Issue
Block a user