界面显示

实现思路
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("请输入正确的选项......")}}}