golang家庭收支记账软件---面向对象
1|0main
1 2 3 4 5 6 7 8 | package main import "github.com/项目-家庭收支记账软件/面向对象/utils" func main() { utils.NewFamilyAccount().MainMenu() } |
2|0familyAccount
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | 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 } } } |
__EOF__

本文作者:StarGazer
本文链接:https://www.cnblogs.com/PatrickStarGazer/p/15991951.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/PatrickStarGazer/p/15991951.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App