實作練習-家庭收支小app
尚硅谷Golang課

實作練習-家庭收支小app

type MyMoney struct {
	key     string  //鍵入值
	note    string  //收支說明
	balance float64 //餘額
	money   float64 //收支
	flag    bool    //判斷是否有明細
	details string  //詳細
	loop    bool    //循環
}

//綁定方法
func (mm *MyMoney) MainMenu() {
	for {
		if !mm.loop {
			break
		}
		fmt.Println("\n-----------------家庭收支记账软件-----------------")
		fmt.Println("                  1 收支明细")
		fmt.Println("                  2 登记收入")
		fmt.Println("                  3 登记支出")
		fmt.Println("                  4 退出软件")
		fmt.Print("請選擇(1-4)...")
		fmt.Scanln(&mm.key)

		switch mm.key {
		case "1":
			mm.showDetails()
		case "2":
			mm.income()
		case "3":
			mm.outcome()
		case "4":
			mm.exit()
		default:
			fmt.Println("輸入錯誤,返回主選單")
		}
	}
}

func (mm *MyMoney) showDetails() {
	fmt.Println("\n-----------------收支明细-----------------")
	if mm.flag {
		fmt.Println(mm.details)
	} else {
		fmt.Println("當前沒有明細")
	}
}

func (mm *MyMoney) income() {
	fmt.Println("\n-----------------登记收入-----------------")
	fmt.Println("輸入收入金額...")
	fmt.Scanln(&mm.money)
	mm.balance += mm.money
	fmt.Println("輸入收入說明...")
	fmt.Scanln(&mm.note)
	mm.details += fmt.Sprintf("\n收入\t%v\t	%v\t	%v", mm.balance, mm.money, mm.note)
	mm.flag = true
}

func (mm *MyMoney) outcome() {
	fmt.Println("本次支出金额:")
	fmt.Scanln(&mm.money)
	//这里需要做一个必要的判断
	mm.balance -= mm.money
	fmt.Println("本次支出说明:")
	fmt.Scanln(&mm.note)
	mm.details += fmt.Sprintf("\n支出\t%v\t	%v\t	%v", mm.balance, mm.money, mm.note)
	mm.flag = true
}

func (mm *MyMoney) exit() {
	fmt.Println("確定使否退出?(Y/N)")
	choice := ""
	for {
		fmt.Scanln(&choice)
		if choice == "Y" || choice == "N" {
			break
		}
		fmt.Println("錯誤,確定使否退出?(Y/N)")
	}
	if choice == "Y" {
		fmt.Println("\n-----------------結束-----------------")
		mm.loop = false
	} else {
		mm.loop = true
	}
}

//工廠模式
func NewMyMoney() *MyMoney {
	return &MyMoney{
		key:     "",
		loop:    true,
		balance: 10000.0,
		money:   0.0,
		note:    "",
		flag:    false,
		details: "收支\t账户金额\t收支金额\t说 明",
	}
}

上次修改於 2021-08-01

此篇文章的評論功能已經停用。