说明:此次基于面向过程编程,后面改成面向对象。
开发流程:
一、项目需求:能够记录家庭收入、支出、并能够打印收支明细。
二、代码实现:
package main
import "fmt"
func main() {
//定义一个变量,保存用户输入的数据
key := ""
//定义一个变量,控制是否退出for循环
loop := true
//定义账户的余额:balance
balance := 10000.0
//定义收支的金额:money
money := 0.0
//定义收支的说明:note
note := ""
//定义记录是否有收支的行为的一个变量 :flag
flag := false
//收支的详情:details
//当有收支时,对details进行拼接处理
details := "详情\t账户金额\t收支金额\t说明"
for {
//显示主菜单
fmt.Println("\n-------------家庭收支记账软件-------------")
fmt.Println(" 1 收支明细")
fmt.Println(" 2 登记收入")
fmt.Println(" 3 登记支出")
fmt.Println(" 4 退出软件")
fmt.Println("请选择(1-4):")
//接收用户输入(1-4)
fmt.Scanln(&key)
//对用户输入进行判断
switch key {
case "1":
fmt.Println("-------------当前收支明细记录--------------")
//当有收支时,显示收支详情
if flag {
fmt.Println(details)
} else {
fmt.Println("暂时没有收支..")
}
case "2":
fmt.Println("---------------登记收入--------------------")
fmt.Println("本次收入金额:")
//用户输入收入金额
fmt.Scanln(&money)
//用户余额便发生变化
balance += money
fmt.Println("本次收入说明:")
//用户输入收入说明
fmt.Scanln(¬e)
//将收入情况拼接到details变量
details += fmt.Sprintf("\n收入\t%v\t%v\t%v", balance, money, note)
flag = true
case "3":
fmt.Println("---------------登记支出--------------------")
fmt.Println("本次支出金额:")
//用户输入支出金额
fmt.Scanln(&money)
//根据用户余额对支出的金额做出判断
if money > balance {
fmt.Println("你的余额不足,请重新输入...")
break
}
//支出后用户的余额便发生变化
balance -= money
fmt.Println("本次支出说明:")
fmt.Scanln(¬e)
//将支出情况拼接到details变量
details += fmt.Sprintf("\n支出\t%v\t%v\t%v", balance, money, note)
flag = true
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("请输入正确的选项")
}
//退出for循环
if !loop {
break
}
}
fmt.Println("你已经退出家庭记账软件的使用..")
}
项目页面如下:
下一篇:面向对象家庭记账软件
欢迎大家指正补充,感谢阅读。