一 主菜单设计
效果展示:
思路分析:直接输出即可,使用一个变量来记录用户的输入
key := "" // 记录用户输入
fmt.Println("-----------小金鱼记账软件-----------")
fmt.Println(" 1.收支明细记录")
fmt.Println(" 2.新增输入记录")
fmt.Println(" 3.新增支出记录记录")
fmt.Println(" 4.退出本软件")
fmt.Println("请选择1-4:")
fmt.Scanln(&key)
二 完成明细记录功能
效果展示:
思路分析:使用Sprintf()函数完成拼接,将每条记录的变量拼接到记录中,当用户输入数字为1时,输出该条记录。
// 收支详情
detail := "收支\t账户金额\t收支金额\t说 明"
fmt.Println("-----------当前收支明细记录-----------")
fmt.Println(detail)
三 完成收入记录和支出记录功能
效果展示:
思路分析:两个功能的实现思路类似,我们需要设置几个变量接收用户输入的金额和说明数据,并更新总余额的数值以及明细记录的内容。
// 账户余额
balance := 0.00
// 每次收支的金额
money := 0.00
// 每次收支的说明
note := ""
// 更新收入记录
fmt.Println("收入金额记录:")
fmt.Scanln(&money)
balance += money
fmt.Println("收入说明")
fmt.Scanln(¬e)
detail += fmt.Sprintf("\n收入\t %v \t%v \t%v", balance, money, note)
fmt.Println("记录成功!")
// 更新支出记录
fmt.Println("支出金额记录:")
fmt.Scanln(&money)
if money > balance {
fmt.Println("余额不足")
break
}
balance -= money
fmt.Println("支出说明")
fmt.Scanln(¬e)
detail += fmt.Sprintf("\n支出\t %v \t%v \t%v", balance, money, note)
fmt.Println("记录成功!")
四 完成退出程序功能
效果展示:
思路分析:
使用一个变量记录当前状态,当变量为false时即可退出循环。同时,我们需要一个变量来接收用户输入的值,如果用户输入n则不退出,输入为y则确认退出,退出系统。如果用户输入了其他非法值则弹出相应提示信息。
fmt.Println("确定要退出吗?y/n")
choice := ""
for {
fmt.Scanln(&choice)
if choice == "y" || choice == "n" {
break
}
fmt.Println("输入有误,请检查 y/n")
}
if choice == "y" {
loop = false
}
五 代码整合与优化
1.将主程序放入一个for循环中,除非用户主动退出程序,否则每个功能完成后均返回主菜单,供用户进行下一步操作。
if !loop {
break
}
2.使用switch语句判断用户选择,并根据用户选择进行相应的功能,注意要对非法值进行提示(default)。
switch key {
case "1":
case "2":
case "3":
case "4":
default:
fmt.Println("请输入1-4中的一个数字")
}
3.代码整合
package main
import "fmt"
func main() {
// 记录用户输入
key := ""
// 记录是否退出程序
loop := true
// 账户余额
balance := 0.00
// 每次收支的金额
money := 0.00
// 每次收支的说明
note := ""
// 收支详情
detail := "收支\t账户金额\t收支金额\t说 明"
// 显示主菜单
for {
fmt.Println("-----------小金鱼记账软件-----------")
fmt.Println(" 1.收支明细记录")
fmt.Println(" 2.新增输入记录")
fmt.Println(" 3.新增支出记录记录")
fmt.Println(" 4.退出本软件")
fmt.Println("请选择1-4:")
fmt.Scanln(&key)
switch key {
case "1":
fmt.Println("-----------当前收支明细记录-----------")
fmt.Println(detail)
case "2":
fmt.Println("收入金额记录:")
fmt.Scanln(&money)
balance += money
fmt.Println("收入说明")
fmt.Scanln(¬e)
detail += fmt.Sprintf("\n收入\t %v \t%v \t%v", balance, money, note)
fmt.Println("记录成功!")
case "3":
fmt.Println("支出金额记录:")
fmt.Scanln(&money)
if money > balance {
fmt.Println("余额不足")
break
}
balance -= money
fmt.Println("支出说明")
fmt.Scanln(¬e)
detail += fmt.Sprintf("\n支出\t %v \t%v \t%v", balance, money, note)
fmt.Println("记录成功!")
case "4":
fmt.Println("确定要退出吗?y/n")
choice := ""
for {
fmt.Scanln(&choice)
if choice == "y" || choice == "n" {
break
}
fmt.Println("输入有误,请检查 y/n")
}
if choice == "y" {
loop = false
}
default:
fmt.Println("请输入1-4中的一个数字")
}
if !loop {
break
}
}
fmt.Println("退出成功!")
}