Go_家庭收支记账软件项目

家庭收支记账软件项目

项目开发流程说明

  • ERP项目、OA项目、CRM项目,使用界面原型方式进行开发
    项目开发流程

项目需求说明

  • 1、模拟实现基于文本界面的《家庭记账软件》
  • 2、该软件能够记录家庭的收入、支出,并能够打印收支明细表
  • 3、项目采用分级菜单方式。主菜单如下:
    项目界面

项目的界面

在这里插入图片描述
在这里插入图片描述

项目代码实现

  • 实现基本功能(先使用面向过程,然后后面改为面向对象)
  • 面向过程:
    • 编写文件TestMyAccount.go完成基本功能
    • 功能1:先完成可以显示主菜单,并且可以退出
      思路分析:根据给出的界面,完成主菜单的显示。当用户输入4时,就退出该程序
      走代码:
package main
import "fmt"


func main(){
	//声明一个变量,保存接收用户输入的选择
	key := ""
	//声明一个变量,控制是否退出for循环
	loop := true

	//根据界面可知:主菜单是循环显示的
	for{
		fmt.Println("-------------家庭收支记账软件-------------")
		fmt.Println("             1 收支明细")
		fmt.Println("             2 登记收入")
		fmt.Println("             3 登记支出")
		fmt.Println("             4 退出软件")
		fmt.Print("请选择(1-4):")

		fmt.Scanln(&key)

		switch key{
		case "1":
			fmt.Println("-----------当前收支明细记账------------")
		case "2":

		case "3":
			fmt.Println("登记支出......")
		case "4":
			loop = false
		default:
			fmt.Println("请输入正确的选项......")
		}
		if !loop{
			break
		}

	}
	fmt.Println("您退出了家庭记账软件的使用......")
}
    • 功能2:完成可以显示明细、登入收入的功能
      思路分析:因为需要显示明细,我们定义一个变量 details string来记录
      还需要定义变量来记录余额(balance)、每次收支的金额(money),每次收支的说明(note)
      相关代码实现:
      在这里插入图片描述
      在这里插入图片描述

    • 功能3:完成了登记支出的功能
      思路:登记支出的实现与登记收入差不多
      代码:
      在这里插入图片描述

项目代码改进

  • 用户输入4 退出时,给出提示“您确定要退出吗?y/n”,必须输入正确的y/n,否则循环输入指令,直到输入y或者n
    在这里插入图片描述

  • 当没有任何收支明细时,提示“当前没有收支明细…来一笔吧!”
    思想:新增一个标记,初始化为false,有支出或者收入时,赋值为true。
    在这里插入图片描述
    面向过程的完整代码

package main
import "fmt"


func main(){
	//声明一个变量,保存接收用户输入的选择
	key := ""
	//声明一个变量,控制是否退出for循环
	loop := true
	//定义明细记录中的相关变量,
	//details := "收支\t账户余额\t收支金额\t说  明"
	details := ""
	 balance := 10000.0
	 money := 0.0
	 note := ""
	 //定义一个变量,记录是否有收支的行为
	 flag := false
	//根据界面可知:主菜单是循环显示的
	for{
		fmt.Println("\n-------------家庭收支记账软件-------------")
		fmt.Println("             1 收支明细")
		fmt.Println("             2 登记收入")
		fmt.Println("             3 登记支出")
		fmt.Println("             4 退出软件")
		fmt.Print("请选择(1-4):")

		fmt.Scanln(&key)

		switch key{
		case "1":
			fmt.Println("\n-------------当前收支明细记录--------------")
			if flag{
				fmt.Println("收支\t账户余额\t收支金额\t说明")
				fmt.Println(details)
			}else{
				fmt.Println("当前没有收支明细,请打一笔吧")
			}
			
		case "2":
			fmt.Println("本次收入金额:")
			fmt.Scanln(&money)
			balance += money   //修改账户余额
			fmt.Println("本次收入说明:")
			fmt.Scanln(&note)
			//将收入情况,拼接到details变量  收入   11000   1000  红包

			details += fmt.Sprintf("\n收入\t%v\t\t%v\t\t%v", balance, money, note)
			flag = true
		case "3":
			fmt.Println("本次支出金额:")
			fmt.Scanln(&money)
			//这里需要做一个必要的判断
			if money > balance{
				fmt.Println("余额的金额不足")
				break
			}
			balance -= money   //修改账户余额
			fmt.Println("本次支出说明:")
			fmt.Scanln(&note)
			details += fmt.Sprintf("\n支出\t%v\t\t%v\t\t%v", balance, money, note)
			flag = true
		case "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("您退出了家庭记账软件的使用......")
}

  • 面向过程的代码修改成面向对象的方法,编写myFamilyAccount.go,并使用testMyFamilyAccount.go去完成测试。
  • 思路:
    • 把记账软件的功能,封装到一个结构体中,然后调用该结构体的方法,来实现记账,显示明细。结构体名字:FamilyAccount
    • 再通过在main方法中,创建一个结构体FamilyAccount实例,实现记账即可
    • 代码并不需要重写,只需要重新组织
    • familyaccount/main/main.go
      在这里插入图片描述
  • familyaccount/utils/familyAccount.go
package utils
import "fmt"

type FamilyAccount struct{
	key string
	loop bool
	balance float64
	money float64
	note string
	flag bool
	details string
}
//编写一个工厂模式的构造方法,返回一个*FamilyAccount实例
func NewFamilyAccount()*FamilyAccount{
	return &FamilyAccount{
		key : "",
		loop : true,
		balance : 10000,
		money : 0.0,
		note : "",
		flag : false,
		details : "", 
	}
}
//将显示明细写成一个方法
func(this *FamilyAccount)showDetails(){
	fmt.Println("\n-------------当前收支明细记录--------------")
	if this.flag{
		fmt.Println("收支\t账户余额\t收支金额\t说明")
		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   1000  红包

			this.details += fmt.Sprintf("\n收入\t%v\t\t%v\t\t%v", this.balance, this.money, this.note)
			this.flag = true
	
}
//将登记支出也写成一个方法
func(this *FamilyAccount)pay(){
	fmt.Println("本次支出金额:")
	fmt.Scanln(&this.money)
	//这里需要做一个必要的判断
	if this.money > this.balance{
		fmt.Println("余额的金额不足")
	}
	this.balance -= this.money   //修改账户余额
	fmt.Println("本次支出说明:")
	fmt.Scanln(&this.note)
	this.details += fmt.Sprintf("\n支出\t%v\t\t%v\t\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
	}
}
//给该结构体绑定相应的方法
//显示主菜单
func (this *FamilyAccount)MainMenu(){
	for{
		fmt.Println("\n-------------家庭收支记账软件-------------")
		fmt.Println("             1 收支明细")
		fmt.Println("             2 登记收入")
		fmt.Println("             3 登记支出")
		fmt.Println("             4 退出软件")
		fmt.Print("请选择(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
		}

	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值