当前位置: 首页 > news >正文

golang项目----家庭收支记账软件

家庭收支记账软件

    • 实现基本功能(先使用面向过程,后面改成面向对象)
      • 项目代码实现改进
    • 面向过程源码
    • 面向对象源码
      • utils包中
      • main包中

实现基本功能(先使用面向过程,后面改成面向对象)

编写文件TestMyAccount.go完成基本功能

  • 功能一:先完成可以显示主菜单,并且可以退出
  • 功能二:完成可以显示明细和登记收入的功能
  • 功能三:完成登记支出的功能

项目代码实现改进

1,用户输入4退出时,给出提示“你确定要退出吗y/n”,必须输入正确的y/n,否则循环输入指令,知道输入y或者n

2,当没有任何收支明细时,提示"当前没有收支明细…"

3,在支出时,判断余额是否够,并给出相应的提示

4,将面向过程的代码修改成面向对象的方法,编写myFamilyAccount.go,并使用testMyFanillyAccount.go去完成测试

面向过程源码

package main
import ("fmt"
)func main() {//声明一个变量,保存接受用户输入的选项key := ""//声明一个变量,控制是否退出for循环loop := true//定义账户的金额balance := 10000.0//每次收支的金额money := 0.0//每次收支的说明note := ""//定义一个变量,记录是否有收支行为flag := false//收支的详情使用字符串来记录//当有收支的时候,只需要对details进行拼接处理details := "收支\t账户余额\t收支金额\t说   明"//循环显示菜单for{fmt.Println("\n--------------------家庭收支记账软件------------------")fmt.Println("                      1 收支明细")fmt.Println("                      2 登记收入")fmt.Println("                      3 登记支出")fmt.Println("                      4 退出软件")fmt.Println("                      请选择(1-4):")fmt.Scanln(&key) switch key {case "1":fmt.Println("-----------------当前收支明细记录----------------")if flag {fmt.Println(details)} else {fmt.Println("你的卡里没钱钱,存一笔吧")}case "2":fmt.Println("本次收入的金额:")fmt.Scanln(&money)balance += money //修改账户余额fmt.Println("本次收入说明:")fmt.Scanln(&note)//将这个收入的情况,拼接到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(&note)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("你退出了家庭记账软件的使用")}

面向对象源码

思路:

把记账软件的功能,封装到一个结构体中,然后调用该结构体的方法,来实现记账,显示明细

再通过在main方法中,创建一个结构体FamilyAccount实例,实现记账即可

utils包中

package utils
import ("fmt"
)type FamilyAccount struct {//声明必须的字段//声明一个字段,保存接受用户输入的选项key string//声明一个字段,控制是否退出for循环loop bool//定义账户的金额balance float64//每次收支的金额money float64//每次收支的说明note string//定义一个变量,记录是否有收支行为flag bool//收支的详情使用字符串来记录//当有收支的时候,只需要对details进行拼接处理details string
}//编写一个工厂模式的构造方法,返回一个*FanilyAccount实例
func NewFamilyAccount() *FamilyAccount {return &FamilyAccount{key :"",loop : true,balance : 10000.0,money: 0.0,note : "",flag :false,details : "收支\t账户余额\t收支金额\t说   明"}
}//将显示明细写成一个方法
func (this *FamilyAccount) showDetails() {fmt.Println("-----------------当前收支明细记录----------------")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}}//给该结构体绑定相应的方法
//显示主菜单
func (this *FamilyAccount) MainMenu() {for{fmt.Println("\n--------------------家庭收支记账软件------------------")fmt.Println("                      1 收支明细")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()
}
http://www.lryc.cn/news/21049.html

相关文章:

  • 中国LNG市场投资机会研究
  • Elasticsearch:索引数据是如何完成的
  • 处理器管理
  • 跟着我从零开始入门FPGA(一周入门系列)第五
  • 【第42天】Arrays.sort 与 Collections.sort 应用 | 整形数组与集合的排序
  • LeetCode第334场周赛
  • 基于深度学习的三维重建网络PatchMatchNet(三):PatchMatchNet配置及代码主要运行流程
  • 【一天一门编程语言】设计一门编程语言,给出基础语法代码示例,SDK设计。
  • ubuntu 下 python 安装 venv
  • HTML#1快速入门
  • 【MySQL】事务隔离级别是怎么实现的?
  • JSP网上书店系统用myeclipse定制开发mysql数据库B/S模式java编程计算机网页
  • 配置 Haproxy 负载均衡群集
  • 计算机网络笔记 | 第一章:计算机网络概述(1.1-1.4小节知识点整理)
  • Flutter3引用原生播放器-Android篇
  • SerenityOS 操作系统类 Unix 操作系统
  • Bean作用域和生命周期
  • STM32笔记
  • 【论文阅读】基于LevelDB的分布式数据库研究
  • JavaScript高级 Iterator Generator
  • 数字IC手撕代码--乐鑫科技(次小值与次小值出现的次数)
  • JavaScript DOM和BOM
  • JUC并发编程(二)
  • Python控制CANoe使能TestCase
  • sql的执行顺序
  • java 8 中的实用技巧
  • 自学大数据的第一天
  • redis秒杀
  • JS学习第3天——Web APIs之DOM(什么是DOM,相关API【创建、增删改查、属性操作、事件操作API】)
  • 【MySQL】增删改操作(基础篇)