Go入门案列1:实现一个家庭收支记账系统

项目来源:

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("你退出了家庭记账软件的使用!")
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值