main/main.go
package main
import (
"laurence/utils"
)
func main() {
//面向对象
familAccount := utils.NewFamilyAccount()
familAccount.MainMenu()
}
utils/familAccount.go
package utils
import "fmt"
type FamilAccount struct {
Option string `json:option`
Loop bool `json:loop`
Balance float64 `json:balance`
Money float64 `json:money`
Note string `json:note`
Flag bool `json:flag`
Detail string `json:detail`
}
//工厂模式返回一个指针给前端用
func NewFamilyAccount() *FamilAccount {
return &FamilAccount{
Option: "",
Loop: true,
Balance: 10000.00,
Money: 0.00,
Note: "",
Flag: false,
Detail: "收支 账号余额 收支金额 说明
",
}
}
func (familAccount *FamilAccount) showDetail() {
if familAccount.Flag {
fmt.Println(familAccount.Detail)
}else{
fmt.Println("暂无记录!!!!!!!!!!")
}
fmt.Println()
}
func (familAccount *FamilAccount) Income() {
fmt.Print("本次收入金额:")
fmt.Scanln(&familAccount.Money)
fmt.Print("本次收入说明:")
fmt.Scanln(&familAccount.Note)
familAccount.Balance += familAccount.Money
//格式化拼接
familAccount.Detail += fmt.Sprintf("收入 %v %v %v
",familAccount.Balance,familAccount.Money,familAccount.Note)
familAccount.Flag = true
}
func (familAccount *FamilAccount) Pay() {
fmt.Print("本次支出金额:")
fmt.Scanln(&familAccount.Money)
fmt.Print("本次支出说明:")
fmt.Scanln(&familAccount.Note)
if familAccount.Money > familAccount.Balance {
fmt.Print("尴尬,余额不足!!!!!!!!!!!!!!")
}
familAccount.Balance -= familAccount.Money
//格式化拼接
familAccount.Detail += fmt.Sprintf("支出 %v %v %v
",familAccount.Balance,familAccount.Money,familAccount.Note)
familAccount.Flag = true
}
func (familAccount *FamilAccount) Exit() {
fmt.Print("您确定要退出吗? y/n:")
choice := ""
for {
fmt.Scanln(&choice)
if choice == "y" || choice == "n" {
break
}
fmt.Print("输入有误,请重新输入:")
}
if choice == "y" {
familAccount.Loop = false
}
}
func (familAccount *FamilAccount) MainMenu() {
for {
fmt.Println("----------家庭收支记账明细------------")
fmt.Println(" 1 收支明细")
fmt.Println(" 2 登记收入")
fmt.Println(" 3 登记支出")
fmt.Println(" 4 退 出")
fmt.Println(" 请选择(1-4)")
fmt.Println("--------------------------------------")
fmt.Print("请选择您要操作的选项:")
fmt.Scanln(&familAccount.Option)
switch familAccount.Option {
case "1":
familAccount.showDetail()
case "2":
familAccount.Income()
case "3":
familAccount.Pay()
case "4":
familAccount.Exit()
default:
fmt.Println("输入有误,请重新选择:")
}
if !familAccount.Loop {
fmt.Println("欢迎下次光临,Goodbay!!!!!!!!!!!!")
break
}
}
}
//TODO
//验证是否登录
//完成转账功能