b站尚硅谷go教学
通过Create方法来创建myFamilyAccount变量(创建时设置的name和pwd相当于默认密码) ,再直接调用该变量的
MainMeau方法即可,可参照如下
package main
import(
_"fmt"
"go_code/chapter09/project02/myFamilyAccount"
)
func main(){
account := myFamilyAccount.Create("小红","123456")
account.MainMeau()
}
package myFamilyAccount
import(
"fmt"
"time"
)
type myFamilyAccount struct{
balance float64//定义账户余额
money float64//定义收支金额
note string//定义每次收支说明
details string//完整的打印信息
name string //登录名
pwd string //登录密码
id int64
}
//工厂模式
func Create(name string,pwd string)myFamilyAccount{
return myFamilyAccount{
balance : 10000,
details : "收支\t\t账户金额\t\t收支金额\t\t说 明",
name : name,
pwd : pwd,
}
}
//登录
func (account *myFamilyAccount)login(){
username := ""
userpwd := ""
fmt.Print("请输入登录名:")
fmt.Scanln(&username)
fmt.Print("请输入登录密码:")
fmt.Scanln(&userpwd)
if username == (*account).name && userpwd == (*account).pwd{
(*account).id = time.Now().Unix()
} else {
(*account).id = -1
}
}
//收入
func (account *myFamilyAccount)showIn(){
fmt.Print("本次支出金额:")
fmt.Scanln(&(*account).money)
fmt.Print("本次支出说明:")
fmt.Scanln(&(*account).note)
(*account).balance += (*account).money
(*account).details += fmt.Sprintf("\n收入\t\t%v\t\t\t%v\t\t\t%v",(*account).balance,(*account).money,(*account).note)
}
//支出
func (account *myFamilyAccount)showOut(){
//你可以加上自己对金额的判断
fmt.Print("本次支出金额:")
fmt.Scanln(&(*account).money)
fmt.Print("本次支出说明:")
fmt.Scanln(&(*account).note)
(*account).balance -= (*account).money
(*account).details += fmt.Sprintf("\n支出\t\t%v\t\t\t%v\t\t\t%v",(*account).balance,(*account).money,(*account).note)
}
//转账
func (account *myFamilyAccount)transfer(){
fmt.Print("本次转出金额:")
fmt.Scanln(&(*account).money)
fmt.Print("本次转出说明:")
fmt.Scanln(&(*account).note)
(*account).balance -= (*account).money
(*account).details += fmt.Sprintf("\n转出\t\t%v\t\t\t%v\t\t\t%v",(*account).balance,(*account).money,(*account).note)
}
//打印信息
func (account *myFamilyAccount)showDetails(){
fmt.Println("-------------------------------收支明细-------------------------------")
if (*account).balance == 10000 && (*account).note == ""{
fmt.Println("\n当前没有收支明细,来一笔吧!")
} else {
fmt.Println((*account).details)
}
}
//程序退出
func (account *myFamilyAccount)exit() bool {
flag := ""
loop := true
for {
fmt.Print("你确定要退出吗?y/n\t")
fmt.Scanln(&flag)
if flag == "y"{
break
}else if flag == "n"{
loop = false
} else {
continue
}
break
}
return loop
}
//主窗口
func (account *myFamilyAccount) MainMeau(){
var mode int64
loop := false
for{
if (*account).id == 0 {
(*account).login()
if (*account).id < 0{
fmt.Println("登录名或密码错误,请重新尝试!")
(*account).id = 0
continue
}
fmt.Println("^_^欢迎来到尚尚家庭记账软件")
}
fmt.Println()
//打印展示台信息
fmt.Println("---------------------------家庭收支记账软件---------------------------")
fmt.Println(" 1、收支明细")
fmt.Println(" 2、登记收入")
fmt.Println(" 3、登记支出")
fmt.Println(" 4、登记转出")
fmt.Println(" 5、退 出")
fmt.Print("请输入【1-5】:")
fmt.Scanln(&mode)
switch mode{
case 1:
account.showDetails()
case 2:
account.showIn()
case 3:
account.showOut()
case 4:
account.transfer()
case 5:
loop = account.exit()
}
if loop {
break
}
}
fmt.Println("你退出了家庭记账软件的使用!")
}