廈門市同安區(qū)建設(shè)局公開網(wǎng)站網(wǎng)站優(yōu)化軟件
家庭收支記賬軟件
- 實現(xiàn)基本功能(先使用面向過程,后面改成面向?qū)ο?
- 項目代碼實現(xiàn)改進(jìn)
- 面向過程源碼
- 面向?qū)ο笤创a
- utils包中
- main包中
實現(xiàn)基本功能(先使用面向過程,后面改成面向?qū)ο?
編寫文件TestMyAccount.go完成基本功能
- 功能一:先完成可以顯示主菜單,并且可以退出
- 功能二:完成可以顯示明細(xì)和登記收入的功能
- 功能三:完成登記支出的功能
項目代碼實現(xiàn)改進(jìn)
1,用戶輸入4退出時,給出提示“你確定要退出嗎y/n”,必須輸入正確的y/n,否則循環(huán)輸入指令,知道輸入y或者n
2,當(dāng)沒有任何收支明細(xì)時,提示"當(dāng)前沒有收支明細(xì)…"
3,在支出時,判斷余額是否夠,并給出相應(yīng)的提示
4,將面向過程的代碼修改成面向?qū)ο蟮姆椒?#xff0c;編寫myFamilyAccount.go,并使用testMyFanillyAccount.go去完成測試
面向過程源碼
package main
import ("fmt"
)func main() {//聲明一個變量,保存接受用戶輸入的選項key := ""//聲明一個變量,控制是否退出for循環(huán)loop := true//定義賬戶的金額balance := 10000.0//每次收支的金額money := 0.0//每次收支的說明note := ""//定義一個變量,記錄是否有收支行為flag := false//收支的詳情使用字符串來記錄//當(dāng)有收支的時候,只需要對details進(jìn)行拼接處理details := "收支\t賬戶余額\t收支金額\t說 明"//循環(huán)顯示菜單for{fmt.Println("\n--------------------家庭收支記賬軟件------------------")fmt.Println(" 1 收支明細(xì)")fmt.Println(" 2 登記收入")fmt.Println(" 3 登記支出")fmt.Println(" 4 退出軟件")fmt.Println(" 請選擇(1-4):")fmt.Scanln(&key) switch key {case "1":fmt.Println("-----------------當(dāng)前收支明細(xì)記錄----------------")if flag {fmt.Println(details)} else {fmt.Println("你的卡里沒錢錢,存一筆吧")}case "2":fmt.Println("本次收入的金額:")fmt.Scanln(&money)balance += money //修改賬戶余額fmt.Println("本次收入說明:")fmt.Scanln(¬e)//將這個收入的情況,拼接到details//收入 11000 10000 血汗錢details += fmt.Sprintf("\n收入\t%v\t%v\t%v", balance, money, note)flag = truecase "3":fmt.Println("本次支出的金額:")fmt.Scanln(&money)//這里做一個必要的判斷if money > balance {fmt.Println("余額不足")break}balance -= moneyfmt.Println("本次支出的說明:")fmt.Scanln(¬e)details += fmt.Sprintf("\n支出\t%v\t%v\t%v", balance, money, note)flag = truecase "4":fmt.Println("你確定要退出嗎? y/n")choice := ""for {fmt.Scanln(&choice)if choice == "y" || choice == "n" {break}fmt.Println("你的輸入有誤,請重新輸入 y/n")}if choice == "y" {loop = false}default :fmt.Println("請輸入正確的選項")}if !loop {break}}fmt.Println("你退出了家庭記賬軟件的使用")}
面向?qū)ο笤创a
思路:
把記賬軟件的功能,封裝到一個結(jié)構(gòu)體中,然后調(diào)用該結(jié)構(gòu)體的方法,來實現(xiàn)記賬,顯示明細(xì)
再通過在main方法中,創(chuàng)建一個結(jié)構(gòu)體FamilyAccount實例,實現(xiàn)記賬即可
utils包中
package utils
import ("fmt"
)type FamilyAccount struct {//聲明必須的字段//聲明一個字段,保存接受用戶輸入的選項key string//聲明一個字段,控制是否退出for循環(huán)loop bool//定義賬戶的金額balance float64//每次收支的金額money float64//每次收支的說明note string//定義一個變量,記錄是否有收支行為flag bool//收支的詳情使用字符串來記錄//當(dāng)有收支的時候,只需要對details進(jìn)行拼接處理details string
}//編寫一個工廠模式的構(gòu)造方法,返回一個*FanilyAccount實例
func NewFamilyAccount() *FamilyAccount {return &FamilyAccount{key :"",loop : true,balance : 10000.0,money: 0.0,note : "",flag :false,details : "收支\t賬戶余額\t收支金額\t說 明"}
}//將顯示明細(xì)寫成一個方法
func (this *FamilyAccount) showDetails() {fmt.Println("-----------------當(dāng)前收支明細(xì)記錄----------------")if this.flag {fmt.Println(this.details)} else {fmt.Println("你的卡里沒錢錢,存一筆吧")}
}//將登記收入寫成一個方法
func (this *FamilyAccount) income() {fmt.Println("本次收入的金額:")fmt.Scanln(&this.money)this.balance += this.money //修改賬戶余額fmt.Println("本次收入說明:")fmt.Scanln(&this.note)//將這個收入的情況,拼接到details//收入 11000 10000 血汗錢this.details += fmt.Sprintf("\n收入\t%v\t%v\t%v", this.balance, this.money, this.note)flag = true
}//將支出寫成一個方法
func (this *FamilyAccount) pay() {fmt.Println("本次支出的金額:")fmt.Scanln(&this.money)//這里做一個必要的判斷if this.money > this.balance {fmt.Println("余額不足")//break}this.balance -= this.moneyfmt.Println("本次支出的說明:")fmt.Scanln(&this.note)this.details += fmt.Sprintf("\n支出\t%v\t%v\t%v", this.balance, this.money, this.note)this.flag = true
}//將退出寫成一個方法
func (this *FamilyAccount) exit() {fmt.Println("你確定要退出嗎? y/n")choice := ""for {fmt.Scanln(&choice)if choice == "y" || choice == "n" {break}fmt.Println("你的輸入有誤,請重新輸入 y/n")}if choice == "y" {this.loop = false}}//給該結(jié)構(gòu)體綁定相應(yīng)的方法
//顯示主菜單
func (this *FamilyAccount) MainMenu() {for{fmt.Println("\n--------------------家庭收支記賬軟件------------------")fmt.Println(" 1 收支明細(xì)")fmt.Println(" 2 登記收入")fmt.Println(" 3 登記支出")fmt.Println(" 4 退出軟件")fmt.Println(" 請選擇(1-4):")fmt.Scanln(&this.key) switch this.key {case "1":this.showDetails()case "2":this.income()case "3":this.pay()case "4":this.exit()default :fmt.Println("請輸入正確的選項")}if !this.loop {break}fmt.Println("你退出了家庭記賬軟件的使用")}
}
main包中
package main
import ("go_code/Familycount/main"
)func main(){utils.NewFamilyAccount().MainMenu()
}