界面显示
实现思路
GoLang 百行代码实现的小项目《家庭收支软件》是一个简单的家庭收支记账软件,可以通过命令行界面记录和显示收支明细。
在代码中,定义了两个结构体类型:record
(代表一条收支记录)和software
(代表记账软件):
-
record
结构体包含了记录的名称、金额、累计总额和描述字段:type record struct {name stringmoney float64total float64desc string }
-
software
结构体包含了记录列表:type software struct {records []recordtotal float64 }
主函数 main()
实例化了一个 software
对象,并提供了主菜单供用户选择不同的功能。根据用户输入的选择,调用相应的方法进行操作。具体来说:
printRecords()
方法打印所有的收支明细记录。inCome()
方法登记收入,用户输入收入金额和描述,并将记录添加到列表中。outCome()
方法登记支出,用户输入支出金额和描述,并将记录添加到列表中。
源码
package mainimport ("fmt"
)// 记录结构体
type record struct {name stringmoney float64total float64desc string
}type software struct {records []recordtotal float64
}func (s *software) printRecords() {fmt.Println("-------------------当前收支明细记录-----------------")fmt.Println(" 余额 收入/支出 金额 描述")for _, r := range s.records {m := fmt.Sprintf("%.2f", r.money)t := fmt.Sprintf("%.2f", r.total)fmt.Println(" " + t + " " + r.name + " " + m + " " + r.desc)}
}func (s *software) inCome() {r := record{name: "收入"}fmt.Println("登记收入:")fmt.Scanln(&r.money)s.total += r.moneyr.total = s.totalfmt.Println("描述:")fmt.Scanln(&r.desc)s.records = append(s.records, r)fmt.Println("添加记录成功")
}func (s *software) outCome() {r := record{name: "支出"}fmt.Println("登记支出:")fmt.Scanln(&r.money)s.total -= r.moneyr.total = s.totalfmt.Println("描述:")fmt.Scanln(&r.desc)s.records = append(s.records, r)fmt.Println("添加记录成功")
}func main() {//输入keykey := ""//初始化 software 及记录切片soft := software{}soft.records = make([]record, 0)//主菜单
a:for {fmt.Println("-------------------家庭收支记账软件-----------------")fmt.Println(" 1 收支明细")fmt.Println(" 2 登记收入")fmt.Println(" 3 登记支出")fmt.Println(" 4 退出软件")fmt.Println("请选择(1-4):")_, err := fmt.Scanln(&key)if err != nil {fmt.Println(err)}switch key {case "1":soft.printRecords()case "2":soft.inCome()case "3":soft.outCome()case "4":fmt.Println("退出软件")//跳出a标签break adefault:fmt.Println("请输入正确的选项......")}}}