Go语言 家庭收支软件面向对象完善

文章介绍了如何使用Go语言将记账功能封装到一个名为FamilyAccount的结构体中,通过结构体的方法实现记账和显示明细。在结构体中声明了必要的字段如账户余额、收支金额等,并编写了显示收支明细的方法。此外,还提到了工厂模式的运用,用于创建结构体实例并初始化字段。在main函数中调用结构体的方法执行程序,但遇到了一些运行错误,如非法操作和初始值设置问题。
摘要由CSDN通过智能技术生成
  • 思路分析

把记账软件的功能,封装到一个结构体中,然后通过调用该结构体的方法,来实现记账显示明细。结构体的名字为FamilyAccount。

②通过在 main 方法中,创建一个结构体FamilyAccount 实例,实现记账即可。

  • 代码实现

①代码不需要重写,只需要重写组织一下。首先在familyAccount.go中定义一个FamilyAccount结构体,在结构体中声明一些必要的字段,这些字段就是原main函数中的变量,但需要稍加修改

key string
//声明一个变量,控制是否退出for循环
loop bool
//定义账户余额
balance float64
//每次收支金额
money float64
//每次收之说明
note string
//定义一个变量,记录是否有收支的行为
flag bool
//收支的详细情况用字符串来记录,当有收支时只需将details进行拼接处理
details string

然后我们要做的就是给该结构体绑定相应的方法,首先是显示主菜单功能MainMenu,然后在该方法中将case后的相应操作封装到函数中去,再通过绑定的结构体比变量调用该方法

func (this *FamilyAccount) showDetails(){
	fmt.Println("-----------------当前收支明细记录-----------------")
	if flag {
	fmt.Println(details)
	}else{
	fmt.Println("当前没有收支明细...来一笔吧!")
	}
}

case "1":
	this.showDetails()

剩下的操作类似,需要注意的是之前在main函数中定义的变量现在声明在结构体中,我们想要使用需要通过绑定的结构体变量调用,即所有在结构体中声明的变量前都要加一个this.。且在pay方法中的break语句需要进行修改,因为之前该语句在switch结构中,根据go语言switch语句的特性,执行完case后的语句自动跳出,我们只需将break语句注释掉即可

        为了以防出现结构体首字母小写的情况下,我们编写一个工厂模式的方法,返回一个*FamilyAccount实例,在以往案例中结构体里声明的字段初始值是在main函数中给定的,在此案例中我们可以在返回实例的时候赋初始值

//编写一个工厂模式的方法,返回一个*FamilyAccount实例
func NewFamilyAccount() *FamilyAccount {
	return *FamilyAccount {
		key : "",
		loop : false,
		balance : 10000.0,
		money : 0.0,
		note : "",
		flag : false,
		details : "收支\t账户金额\t收支金额\t说    明",
	}
}

②在main.go中创建一个FamilyAccount结构体的指针实例,然后再调用MainMenu方法

utils.NewFamilyAccount().MainMenu()

运行后报错:invalid operation: cannot indirect FamilyAccount{…} (value of type FamilyAccount)经检查代码后发现是因为返回FamilyAccount地址时将&错写成*,运行后出现执行1-4任意操作后都退出程序的情况,检查代码后发现是错将loop的初值置为了false

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值