首先是具体的目录结构:
其中myAccount.go中调用utils包中的函数;utils.go实现记账软件的一些相应的功能;
myAccount.go
package mainimport ( "fmt" go_code/project_5/utils")func main() { fmt.Println(这个是面向对象的方法完成的) utils.NewFamilyAccount().MainMenu()}
utils.go
package utilsimport type familyAccount struct { //声明一些常用的字段 申明一个字段,保存输入的选择 key string 申明一个字段判断是否退出循环 loop bool 定义账户的余额 balance float64 每次收支的金额 money float64 每次收支的说明 note 收支的详情,使用字符串来记录 details 定义一个字段记录是否有收支行为 flag bool}func NewFamilyAccount() *familyAccount { return &familyAccount{ key: "",loop: false10000.00.0\n 收入 \t金额\t\t 明细\t\t说明给结构体定义相应的方法显示菜单func (f *familyAccount) MainMenu() { for { fmt.Println(----------------------家庭收支软件-----------------------) fmt.Println( 1.收支明细 2.登记收入 3.登记支出 4.退出软件) print(请选择(1-4):) fmt.Scanln(&f.key) switch f.key { case 1: f.ShowDetails() 2: f.Income() 3: f.Outcome() 4: f.logout() default: fmt.Println(请输入正确的选项) } if f.loop { break } }}func (f *familyAccount) ShowDetails() { f.flag { fmt.Println(----------------------当前收支明细-----------------------) fmt.Println(f.details) } else当前没有收支明细,来一笔吧) }}func (f *familyAccount) Income() { fmt.Println(本次收入金额:) fmt.Scanln(&f.money) f.balance += f.money fmt.Println(本次收入说明:f.note) f.details += fmt.Sprintf(\n 收入 \t%v\t\t %v\t\t%vtrue}func (f *familyAccount) Outcome() { fmt.Println(本次支出金额:f.money) if f.money > f.balance { fmt.Println(余额不足!!!) break } { f.balance -= f.money fmt.Println(f.note) f.details += fmt.Sprintf(\n 支出 \t%v\t\t %v\t\t%v }}func (f *familyAccount) logout() { fmt.Println(你确定要退出吗?y/n) choice := "" { fmt.Scanln(&choice) if choice == y" || choice == n { } fmt.Println(您的输入有误!!请重新输入!) } { f.loop = }}
对上一节面向过程的收支软件的改进。
首先要将一些相干的变量存储到结构体中,然后用一个工厂方法进行初始化,最后将相应的功能封装成方法;
总结以上是内存溢出为你收集整理的golang实战--家庭收支记账软件(面向对象)全部内容,希望文章能够帮你解决golang实战--家庭收支记账软件(面向对象)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)