前言
这段时间主要研究了开发项目方面的思路和一些技巧,加深了我对go语言的理解 本次笔记主要记录一下我开发出来的一个家庭收支记录的一个小项目
家庭收支记录
1.项目介绍
此项目主要用于记录家庭在各方面的一个消费记录,对家庭的收支情况进行了一个更加细明化的统计,让我们能够一目了然的看清楚我们日常生活中的消费细明
2.项目分析
在开始写代码之前,对于这个项目,我们必须先要想好思路,一个良好的思路能够让我们在写代码的时候更加的明确。
对于这个项目,我想到的是最近我写的面向对象开发思路,我们可以先创建两个包,一个用来写一些结构体及其对应的方法,另一个主要就是通过调用第一个包下的方法或者函数来实现项目的要求
3.代码实现
1.首先创建两个包
2.我们可以再应以一个专门存储后续我们需要使用的结构体,后续我们想要使用什么变量直接往里面进行添加即可
成品展示
type bian struct{
num int
size string
zhangdan string
count int
shouzhi string
all float64
getput float64
shuomin string
fool bool
tongji string
}
还可以再使用一个工厂模式来将这个结构体可以让外界访问,顺便对此结构体进行初始化
func Family() *bian{
return &bian{
num:0,
size:"",
zhangdan:fmt.Sprintf("收支\t账户金额\t收支金额\t说明\n"),
count:-1,
shouzhi:"",
all:1000,
getput:0,
shuomin:"" ,
fool:true,
tongji:"",
}
}
3.通过使用对结构体的一个方法,将基本的框架构建好,即使用for循环,将目录循环打印,直到用户主动退出家庭收支记录这个项目为止,因此我们就有这个思路
随后再利用switch来进行判断用户输入的指令
4.接着我们只需要依次的通过对结构体的方法来对每一个指令的具体做法进行编写
输入1时:
func (b *bian) cha(){
if b.count ==-1{
fmt.Printf("\n目前还没有收支记录\n")
} else {
fmt.Println(b.zhangdan)
}
}
输入2时:
func (b *bian) shou(){
fmt.Println("——————收入——————")
fmt.Println("收入金额:")
fmt.Scanln(&b.getput)
fmt.Println("说明:")
fmt.Scanln(&b.shuomin)
b.shouzhi="收入"
b.all=b.all + b.getput
b.tongji=fmt.Sprintf("%v\t%v\t\t%v\t\t%v\n",b.shouzhi,b.all,b.getput,b.shuomin)
b.zhangdan = b.zhangdan + b.tongji
b.count=0
}
输入3时:
func (b *bian) zhi(){
fmt.Println("——————支出——————")
fmt.Println("支出金额:")
fmt.Scanln(&b.getput)
if b.getput>b.all{
fmt.Printf("\n您的余额不足,无法支出\n\n")
return
}
fmt.Println("说明:")
fmt.Scanln(&b.shuomin)
b.shouzhi="支出"
b.all=b.all - b.getput
b.tongji=fmt.Sprintf("%v\t%v\t\t%v\t\t%v\n",b.shouzhi,b.all,b.getput,b.shuomin)
b.zhangdan = b.zhangdan + b.tongji
b.count=0
}
输入4时:
func (b *bian) exit(){
for {
fmt.Println("\n您确定要退出该程序吗?y/n")
fmt.Scanln(&b.size)
if b.size == "y" || b.size == "Y" || b.size == "n" || b.size == "N"{
break
} else {
fmt.Printf("\n您输入有误,请重新输入\n\n")
}
}
if b.size == "y" || b.size == "Y" {
b.fool=false
}
}
这四个方法分别实现了查、收、支、退
4.最后,在main包下进行调用工厂函数即可,在使用它的Menu()方法即完成本项目