go学习 day223 家庭记账软件
面向过程
package main
import "fmt"
func main() {
// 声明一个变量,保存用户的输入
key := ""
// 声明一个变量,查看是否退出程序
var status bool = true
// 账户余额
var balance float64 = 100000.0
// 每次收支金额
var money float64
// 每次收支说明
var note string
// 收支详情使用字符串记录 当有收支时只需要拼接即可
var details string = "收支\t\t账户金额\t\t收支金额\t\t说 明"
// 记录是否支付
flag := false
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":
if flag {
fmt.Println("-------------------------当前账户的收支明细---------------------")
fmt.Println(details)
} else {
fmt.Println("还没有支出或收入,快来一笔吧!!!")
}
case "2":
fmt.Println("本次收入金额: ")
fmt.Scanln(&money)
balance += money
fmt.Println("收入说明: ")
fmt.Scanln(¬e)
// 将收入情况,拼接到details变量
details += fmt.Sprintf("\n收入\t\t%v\t\t%v\t\t\t%v",balance,money,note)
flag = true
case "3":
fmt.Println("本次支出金额: ")
fmt.Scanln(&money)
if money > balance {
fmt.Println("余额不足。。。")
break
}
balance -= money
fmt.Println("支出说明: ")
fmt.Scanln(¬e)
details += fmt.Sprintf("\n支出\t\t%v\t\t%v\t\t\t%v",balance,money,note)
flag = true
case "4":
var tmp = ""
fmt.Println("你确定要退出吗?(y/n)")
for {
fmt.Scanln(&tmp)
if tmp == "y" || tmp == "n" {
break
}
fmt.Println("你输入的有误,请重新输入(y/n)")
}
if tmp == "y" {
status = false
}
default:
fmt.Println("请输入正确的数。。。")
}
if status == false {
fmt.Println("你退出了家庭记账软件的使用。。。。")
break
}
}
fmt.Println(" ")
}
面向对象
package utils
import "fmt"
type FamilyAccount struct {
key string
// 声明一个变量,查看是否退出程序
status bool
// 账户余额
balance float64
// 每次收支金额
money float64
// 每次收支说明
note string
// 收支详情使用字符串记录 当有收支时只需要拼接即可
details string
// 记录是否支付
flag bool
}
// 编写给工厂模式的构造方法,返回一个*FamilyAccount实例
func NewFamilyAccount() *FamilyAccount {
return &FamilyAccount{
key: "",
status: true,
balance: 10000.0,
money: 0.0,
note: "",
flag: false,
details: "收支\t\t账户金额\t\t收支金额\t\t说 明",
}
}
// 显示明细方法
func (f *FamilyAccount) ShowDetails() {
if f.flag {
fmt.Println("-------------------------当前账户的收支明细---------------------")
fmt.Println(f.details)
} else {
fmt.Println("还没有支出或收入,快来一笔吧!!!")
}
}
// 登记收入方法
func (f *FamilyAccount) Income() {
fmt.Println("本次收入金额: ")
fmt.Scanln(&f.money)
f.balance += f.money
fmt.Println("收入说明: ")
fmt.Scanln(&f.note)
// 将收入情况,拼接到details变量
f.details += fmt.Sprintf("\n收入\t\t%v\t\t%v\t\t\t%v",f.balance,f.money,f.note)
f.flag = true
}
// 登记支出方法
func (f *FamilyAccount) Pay() {
fmt.Println("本次支出金额: ")
fmt.Scanln(&f.money)
if f.money > f.balance {
fmt.Println("余额不足。。。")
//return
}
f.balance -= f.money
fmt.Println("支出说明: ")
fmt.Scanln(&f.note)
f.details += fmt.Sprintf("\n支出\t\t%v\t\t%v\t\t\t%v",f.balance,f.money,f.note)
f.flag = true
}
// 退出方法
func (f *FamilyAccount) Logout() {
var tmp = ""
fmt.Println("你确定要退出吗?(y/n)")
for {
fmt.Scanln(&tmp)
if tmp == "y" || tmp == "n" {
break
}
fmt.Println("你输入的有误,请重新输入(y/n)")
}
if tmp == "y" {
f.status = false
}
}
// 给该结构体绑定相应的方法
// 显示主菜单
func (f *FamilyAccount) MainEenu() {
for {
fmt.Println("\n------------------------家庭收支记账软件-------------------------")
fmt.Println(" 1 收支明细")
fmt.Println(" 2 登记收入")
fmt.Println(" 3 登记支出")
fmt.Println(" 4 退 出")
fmt.Println("请选择(1-4): ")
fmt.Scanln(&f.key)
switch f.key {
case "1":
f.ShowDetails()
case "2":
f.Income()
case "3":
f.Pay()
case "4":
f.Logout()
default:
fmt.Println("请输入正确的数。。。")
}
if f.status == false {
fmt.Println("你退出了家庭记账软件的使用。。。。")
break
}
}
}
在main函数调用
package main
import "day233/utils"
func main() {
utils.NewFamilyAccount().MainEenu()
}
本文来自博客园,作者:六月OvO,转载请注明原文链接:https://www.cnblogs.com/chenlifan/p/17254894.html