开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:收支软件-登记支出和完善退出】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/9714
收支软件-登记支出和完善退出
一、 功能3:完成登记支出的功能
1. 思路分析:
登记支出功能和登记收入的功能类似,做部分修改即可。
2. 走代码:
package main
import(
“fmt”
)
func main(){
//声明一个变量,保存接受用户输入的选项
key:=””
//声明一个变量,控制是否退出for
loop:=true
//定义账户的余额[初始的时候预设有10000元]
balance:=10000.0
//每次收支的金额
money:=0.0
//每次收支的说明
note:=””
//收支的详情,使用字符串来记录
//当有收支时,只需要对 details 进行拼接处理即可
details:=”收支\t 账户金额\t 收支金额\t 说明”
//显示这个主菜单
for{
fmt.Println(“\n-----家庭收支记账软件-----”)
fmt.Println(“1 收支明细”)
fmt.Println(“2 登记收入”)
fmt.Println(“3 登记支出”)
fmt.Println(“4 退出软件”)
fmt.Println(“请选择(1-4)”)
fmt.Scanln(&key)
switch key{
case”1”:
fmt.PrintIn(“-----当前收支记录-----”)
fmt.PrintIn(details)
case”2”:
fmt.PrintIn(“本次收入金额“)
fmt.Scanln(&money)
balance += money //修改账户余额
fmt.PrintIn(“本次收入说明“)
fmt.Scanln(¬e)
//将这个收入情况拼接到details变量
//收入 11000 1000 有人发红包
details += fmt.Sprintf(“收入\t%v\t%v\t%v“,balance,money,note)
case”3”:
fmt.PrintIn(“本次支出金额”)
fmt.ScanIn(&money)
//这里需要做一个必要的判断
if money > balance{
fmt.PrintIn(“余额的金额不足”)
break
}
balance -= money
fmt.PrintIn(“本次支出说明”)
fmt.ScanIn(¬e)
details += fmt.Sprintf(“支出\t%v\t%v\t%v“,balance,money,note)
case”4”:
loop=false
default:
fmt.PrintIn(“请输入正确的选项”)
}
if !loop{
break
}
}
fmt.PrintIn(“退出家庭记账软件的使用”)
}
二、 项目代码实现改进
1. 用户输入4退出时,给出提示”你确定要退出吗?y/n”,必须输入正确的 y/n,否则循环输入指令,直到输入 y 或者 n。
(1) 改进:
将
case”4”:
loop=false
改为
case”4”:
fmt.PrintIn(“你确定要退出吗?y/n“)
choice :=””
for{
fmt.ScanIn(&choice)
if choice == “y”|| choice == “n”{
break
}
fmt.PrintIn(“你的输入有误,请重新输入y/n”)
}
if choice == “y”{
loop=false
2. 当没有任何收支明细时,提示“当前没有收支明细...来一笔吧!”
3. 在支出时,判断余额是否够,并给出相应的提示。
4. 将面向过程的代码修改成面向对象的方法,编写 myFamilyAccount.go,并使用 testMyFamilyAccount.go 去完成测试。