家庭收支记账软件

  • 实现基本功能(先使用面向过程,后面改成面向对象)
    • 项目代码实现改进
  • 面向过程源码
  • 面向对象源码
    • 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()
}

golang项目----家庭收支记账软件相关推荐

  1. GO学习项目---家庭收支记账软件

    主菜单功能实现: func (f *FamilyAccount) MainMenu() {for {fmt.Println("-----------家庭收支记账软件-----------&q ...

  2. 3.项目一(家庭收支记账软件)

    家庭收支记账软件 项目一:家庭收支记账软件 1. 项目演示 2. Utility工具类的说明 Utility工具类提供了一系列的方法,方便我们从控制台获取相关数据: 用户的选择(1-4):readMe ...

  3. Go 小项目1 - 家庭收支记账软件

    Go 小项目1 - 家庭收支记账软件 一)需求 1)模拟实现基于文本界面的<家庭记账软件> 2)该软件能够记录家庭的收入.支出,并能够打印收支明细表 二)编码 1)功能 1.完成主菜单的编 ...

  4. Java项目:家庭收支记账软件

    目录 前言 一.任务要求 二.实现代码 总结 前言 最近花了一个星期看了JAVA经典书籍<Java核心技术卷I>,囫囵吞枣般看完,领略了其中大概内容,花时间看视频巩固一下,就去b站看了尚硅 ...

  5. Java项目一(案例):家庭收支记账软件

    Java项目一(案例):家庭收支记账软件 项目概述 软件功能 项目说明 涉及Java知识点 软件需求说明 程序代码示例 FamilyAccount.class文件 自定义Utility.class工具 ...

  6. [go学习笔记.第十一章.项目案例] 1.家庭收支记账软件项目

    一.基本介绍 1.项目开发流程说明 2.项目需求说明 目标: 模拟实现一个基于文本界面的<<家庭记账软件>> 掌握初步的编程技巧和调试技巧 主要涉及以下知识点 : (1).局部 ...

  7. go 家庭收支记账软件

    项目开发流程 项目需求说明 模拟实现基于文本界面的<家庭记账软件> 该软件能够记录家庭的收入.支出,并能够打印收支明细表 项目的界面 -------------家庭收支记账软件------ ...

  8. Java实现家庭收支记账软件

    题目来自于尚硅谷基础项目1,其中没有使用项目提供的现成的方法 测试类 package test;import face.MainInterFace; import code.*; public cla ...

  9. 案例一,家庭收支记账软件

    1.项目要求: • 模拟实现一个基于文本界面的<家庭记账软件> • 掌握初步的编程技巧和调试技巧 • 主要涉及以下知识点: >变量的定义 > 基本数据类型的使用 > 循环 ...

最新文章

  1. OSPF中第一类外部路由和第二类外部路由的区别
  2. Bootstrap fileinput.js,最好用的文件上传组件
  3. 全球及中国抗菌溶液行业深度调研与前景研究建议报告2022年
  4. php中写alter,MySQL之alter语句用法总结
  5. TCP/PI参考模型(应用层、传输层、网际层、网络接口层)、五层参考模型(应用层、传输层、网络层、数据链路层、物理层)、OSI与TCP/IP参考模型比较...
  6. jQuery 学习笔记 事件委派
  7. 推荐一款接口自动化测试数据提取神器 JSonPath
  8. ExecuteNonQuery(),ExecuteScalar(),ExecuteReader的相关用法
  9. 利用pandas处理二级office的Excel试题(一)
  10. visual studio 总是和搜狗输入法冲突
  11. 国密标准Ukey在Web登录认证流程
  12. 【机器学习】PAC 学习理论
  13. 鸡啄米教程之VS2010/MFC编程入门教程之目录和总结
  14. setTimeout的隐藏小知识
  15. 项目管理工具dhtmlxGantt甘特图入门教程(八):数据加载(二)
  16. vray物理相机具体参数
  17. CCTV-5在线直播 视频网 关注体育赛
  18. iOS实现绘画文字动画
  19. 微信小程序--------商品物流跟踪模板
  20. 【信管1.16】安全(三)信息系统安全

热门文章

  1. 开心_小段子(笑笑更健康)
  2. LIN ldf文件配置
  3. 科技查新的新颖性是指什么?
  4. 计算机应用基础模块2word2010,国开计算机应用基础模块2Word2010文字处理系统客观题答案...
  5. 华为OD机试 - 密室逃生游戏(Python)
  6. 这些个辞职申请,在下佩服至极
  7. 语音识别技术在米家、HomeKit和智汀等智能家居中的应用
  8. cocos2d-x中CCScale9Sprite的另一种实现
  9. 【嵌入式Android开发学习攻略】手把手教你循序渐进的学习
  10. python单机小游戏大全手机版宫殿_用Python实现童年小游戏俄罗斯方块!别说还挺好玩!...