golang家庭收支记账软件---面向对象
main
package main import "github.com/项目-家庭收支记账软件/面向对象/utils" func main() { utils.NewFamilyAccount().MainMenu() }
familyAccount
package utils import "fmt" type FamilyAccount struct { //声明一个变量,保存接受用户输入的选项 key string //声明一个变量,控制是否退出for循环 loop bool //定义账户余额 balance float64 //每次收支的金额 money float64 //每次收支说明 note string //定义一个变量作为标识符,记录是否有收支的行为 flag bool //收支的详情使用字符串来记录 //当有收支时,只需要对details进行拼接处理即可 details string } //编写工厂模式的构造方法,返回一个FamilyAccounts实例 func NewFamilyAccount() *FamilyAccount { return &FamilyAccount{ key: "", loop: true, balance: 10000.00, money: 0.0, note: "", flag: false, details: "", } } //将显示明细写成一个方法 func (admit *FamilyAccount) showDetails() { fmt.Println("--------------当前收支明细记录--------------") if admit.flag { fmt.Println(admit.details) } else { fmt.Println("还没有收支记录哦,先记一笔账吧~") } } //将登记收入写成一个方法 func (admit *FamilyAccount) inCome() { fmt.Println("--------------当前登记收入记录--------------") fmt.Println("本次收入金额: ") fmt.Scanln(&admit.money) admit.balance = admit.balance + admit.money fmt.Println("本次收入说明: ") fmt.Scanln(&admit.note) //将收入情况拼接到details变量 admit.details = admit.details + fmt.Sprintf("\n收入\t%v\t\t%v\t\t%v", admit.balance, admit.money, admit.note) admit.flag = true } //将登记支出写成一个方法 func (admit *FamilyAccount) pay() { fmt.Println("--------------当前登记支出记录--------------") fmt.Println("本次支出金额: ") fmt.Scanln(&admit.money) //做一个余额判断 if admit.money > admit.balance { fmt.Println("余额不足") return } admit.balance = admit.balance - admit.money fmt.Println("本次支出说明: ") fmt.Scanln(&admit.note) //将支出情况拼接到details变量 admit.details = admit.details + fmt.Sprintf("\n支出\t%v\t\t%v\t\t%v", admit.balance, admit.money, admit.note) admit.flag = true } //将退出软件写成一个方法 func (admit *FamilyAccount) exit() { fmt.Println("你确定要退出吗y/n") //定义一个确定变量 choice := "" for { fmt.Scanln(&choice) if choice == "y" || choice == "n" { break } fmt.Println("你的输入有误,请重新输入") } if choice == "y" { admit.loop = false } } //给该结构体绑定相应的方法 //显示主菜单 func (admit *FamilyAccount) MainMenu() { for { fmt.Println("\n--------------家庭收支记账软件--------------") fmt.Println(" 1.收支明细") fmt.Println(" 2.登记收入") fmt.Println(" 3.登记支出") fmt.Println(" 4.退出软件") fmt.Println("请选择(1-4): ") fmt.Scanln(&admit.key) switch admit.key { case "1": admit.showDetails() case "2": admit.inCome() case "3": admit.pay() case "4": admit.exit() default: fmt.Println("请输入正确选项...") } if !admit.loop { break } } }