1. 先声明一个结构体

type Family struct {num          string  money        float64tomoney      float64togthermoney float64str          stringlood         bool  path         stringtimes        map[string]intagain        string
}

2.首先将结构体初始化,NewFamily()方法

func NewFamily() *Family {return &Family{money: 0,str:   "你好",lood:  false,path:  "Family/family.txt",}}

3.记载收入

这里使用的family.txt来记录收支情况,使用salay.txt来记录总共的工资

func (f *Family) Getsalay() {res1, err := ioutil.ReadFile("Family/salay.txt")if err != nil {fmt.Println(err)}float, err := strconv.ParseFloat(string(res1), 0)f.togthermoney = floatfmt.Println("请输入收入:")fmt.Scan(&f.money)f.togthermoney += f.moneyfmt.Println("请输入来源:")fmt.Scan(&f.str)fmt.Println("---------------------------------------------------------------------------------------------------------------------------")fmt.Println("|\t\t\t|时间|\t\t\t|金额|\t\t\t|来源|")fmt.Println("|", f.Times(), "\t\t", f.money, "\t\t", f.str, "|")fmt.Println("---------------------------------------------------------------------------------------------------------------------------")//读文件res, err := ioutil.ReadFile("Family/family.txt")if err != nil {fmt.Println(err)}stu := []byte(string(res) + "收入:" + f.Times() + "\t\t" + strconv.FormatFloat(f.money, 'f', 0, 64) + "\t\t" + f.str + "\t\t" + strconv.FormatFloat(f.togthermoney, 'f', 0, 64) + "\n")stu1 := []byte(strconv.FormatFloat(f.togthermoney, 'f', 0, 64))//写文件err1 := ioutil.WriteFile("Family/family.txt", stu, 0666)if err != nil {fmt.Println(err1)}//写salayerr2 := ioutil.WriteFile("Family/salay.txt", stu1, 0666)if err != nil {fmt.Println(err2)}}

4.支出

这里的 ioutil.ReadFile 方法已经被弃用了可以使用os模块 的方法读写文件

func (f *Family) Tosalay() {res1, err := ioutil.ReadFile("Family/salay.txt")if err != nil {fmt.Println(err)}float, err := strconv.ParseFloat(string(res1), 0)f.togthermoney = floatif err != nil {return}if err != nil {fmt.Println(err)}for {fmt.Println("请输入支出金额:")fmt.Scan(&f.tomoney)if f.tomoney > f.togthermoney {fmt.Print("您的支出超出储蓄,请重新输入,")} else {break}}fmt.Println("请输入去向:")fmt.Scan(&f.str)f.money -= f.tomoneyf.togthermoney -= f.tomoneyfmt.Println("---------------------------------------------------------------------------------------------------------------------------")fmt.Println("|\t\t\t|时间|\t\t\t|金额|\t\t\t|去向|")fmt.Println("|", f.Times(), "\t\t\t", f.money, "\t\t\t", f.str, "\t\t\t", f.togthermoney, "|")fmt.Println("---------------------------------------------------------------------------------------------------------------------------")//读文件res, err := ioutil.ReadFile("Family/family.txt")if err != nil {fmt.Println(err)}stu1 := []byte(strconv.FormatFloat(f.togthermoney, 'f', 0, 64))err2 := ioutil.WriteFile("Family/salay.txt", stu1, 0666)if err != nil {fmt.Println(err2)}stu := []byte(string(res) + "支出:" + f.Times() + "\t\t" + strconv.FormatFloat(f.tomoney, 'f', 0, 64) + "\t\t" + f.str + "\t\t" + strconv.FormatFloat(f.togthermoney, 'f', 0, 64) + "\n")//写文件err1 := ioutil.WriteFile("Family/family.txt", stu, 0666)if err != nil {fmt.Println(err1)}}

5.查看收支情况

这里是读写family.txt文件中的每次收支写入的记录

func (f *Family) looksalay() {fmt.Println("查看收支情况:")res, err := ioutil.ReadFile("Family/family.txt")if err != nil {fmt.Println(err)}fmt.Println(string(res))}

6.结余

读取写入salay.txt中的工资

func (f *Family) Toghtersalay() string {//读取salay存储的工资res1, err := ioutil.ReadFile("Family/salay.txt")if err != nil {fmt.Println(err)}return string(res1)
}

7.封装一个时间函数

这里是返回一个2022–11–23 xx:xx:xx格式的时间

// 封装时间函数
func (f *Family) Times() string {//January,一月;February,二月;March,三月;April,四月;May,五月;June,六月;July,七月;August,八月;September,九月;October,十月;November,十一月;December,十二月。f.times = map[string]int{"January":   1,"February":  2,"March":     3,"April":     4,"May":       5,"June":      6,"July":      7,"August":    8,"September": 9,"October":   10,"November":  11,"December":  12,}//匹配月份value, _ := f.times[time.Now().Month().String()]fmt.Println(strconv.Itoa(time.Now().Year()) + "--" + strconv.Itoa(value) + "--" + strconv.Itoa(time.Now().Day()) + "  " + strconv.Itoa(time.Now().Hour()) + ":" + strconv.Itoa(time.Now().Minute()) + ":" + strconv.Itoa(time.Now().Second()))return strconv.Itoa(time.Now().Year()) + "--" + strconv.Itoa(value) + "--" + strconv.Itoa(time.Now().Day()) + "  " + strconv.Itoa(time.Now().Hour()) + ":" + strconv.Itoa(time.Now().Minute()) + ":" + strconv.Itoa(time.Now().Second())}

8.判断时间是不是每月1号

是1号就先算出上月的结余写入,在写入新的月份。

// 判断是1号,结算收支
func (f *Family) Begin() {value, _ := f.times[time.Now().Month().String()]if time.Now().Day() == 1 {res, err := ioutil.ReadFile("Family/family.txt")if err != nil {fmt.Println(err)}stu := []byte(string(res) + "本月结余:" + f.Toghtersalay() + "\n" + strconv.Itoa(value) + "月" + "\n")ioutil.WriteFile("Family/family.txt", stu, 0644)}
}

9.退出

y/n退出

func (f *Family) breakmenu() {fmt.Println("请输入y/n确认退出:")fmt.Scan(&f.again)if f.again == "y" {f.lood = truefmt.Println("退出系统")}
}

10.主菜单

func (f *Family) Menu() {for {fmt.Println("-------------------------------------家庭记账系统---------------------------------------")fmt.Println("                                     1.查看收支")fmt.Println("                                     2.支出记载")fmt.Println("                                     3.收入记载")fmt.Println("                                     4.退出系统")fmt.Println("                                     5.每月结余")fmt.Println("----------------------------------------------------------------------------------------")f.Times()f.Begin()fmt.Print("请输入选项:")fmt.Scan(&f.num)switch f.num {case "1":f.looksalay()case "2":f.Tosalay()case "3":f.Getsalay()case "4":f.breakmenu()case "5":fmt.Println("结余:", f.Toghtersalay())default:fmt.Println("您的输入有误!请重新输入")}if f.lood == true {break}}}

11. 在main.go中调用

package mainimport ("goserve/Family"
)func main() {//在这先先实例化结构体然后调用函数Menu()Family.NewFamily().Menu()
}

目录结构

Family

| family.go
| salay.txt
| family.txt

main.go

使用GO实现尚硅谷家庭记账系统相关推荐

  1. [附源码]JAVA毕业设计家庭记账系统(系统+LW)

    [附源码]JAVA毕业设计家庭记账系统(系统+LW) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(In ...

  2. java计算机毕业设计家庭记账系统源程序+mysql+系统+lw文档+远程调试

    java计算机毕业设计家庭记账系统源程序+mysql+系统+lw文档+远程调试 java计算机毕业设计家庭记账系统源程序+mysql+系统+lw文档+远程调试 本源码技术栈: 项目架构:B/S架构 开 ...

  3. 尚硅谷 家庭收支记账软件

    这个是没有文件储存的,过几天再写一个有文件储存的练练手. 需求说明: 主菜单类: public class FamilyAccount {public static void main(String[ ...

  4. JAVA毕设项目家庭记账系统(java+VUE+Mybatis+Maven+Mysql)

    项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  5. 尚硅谷商城购物系统 安卓App

    这是我在网上购买的安卓商城项目的视频以及资料, 大约有2.5G左右,那么如果有想要试一试的小伙伴可以在下方评论留言 我会不定时回复通过百度云发给需要的人,当然也欢迎想和我交流学习的同学,虽然我现在学的 ...

  6. 基于SpringBoot的家庭记账管理系统的设计与实现

    摘  要 随着社会的发展,社会的方方面面都在利用信息化时代的优势.互联网的优势和普及使得各种系统的开发成为必需. 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和m ...

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

    项目来源: b站尚硅谷go教学 使用 通过Create方法来创建myFamilyAccount变量(创建时设置的name和pwd相当于默认密码) ,再直接调用该变量的 MainMeau方法即可,可参照 ...

  8. (尚硅谷项目代码)java基础----家庭记事本

    小记:跟着尚硅谷的老师学了三天的java基础,学习完家庭记事本之后自己动手打了一遍代码,其中Utility是一些用到的方法,已经事先给出,放在Utility.java文件中,只需要在FamilyAcc ...

  9. PHP家庭账单系统,PHP+SQLite 多用户记账系统.家庭在线记账理财PHP管理系统.

    PHP+SQLite 多用户记账系统.家庭在线记账理财PHP管理系统. 特别说明 目前版本,其中一个函数文件content.php源码没有开放,后续处理好了再考虑开放,所以目前这个文件是加密状态. 将 ...

  10. 基于java家庭理财记账系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java家庭理财记账系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java家庭理财记账系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技术栈: ...

最新文章

  1. 训练时间和参数量百倍降低,直接使用标签进行预测,性能竟超GNN
  2. java centos7_centos7.0安装java环境
  3. xamarin textview 滚动_微软测试 Win10 Chromium/Edge CPU 优化和滚动新效果
  4. 【转载】Eclipse vs IDEA快捷键对比大全(win系统)
  5. 【Flink】Flink 运行 实时修改消费组offset
  6. 虚拟机linux gedit,Linux系统中把gedit改造成TextMate的方法
  7. CentOS 6.6 安装 Node.js
  8. springboot 多线程_从零开始到架构,800页Java+并发+容器+多线程+高并发+Spring+SpringBoot源码...
  9. python unittest用法
  10. 机械工程人工智能_机械工程中的人工智能
  11. vfp报表纸张设置_谈VFP9的自定义纸张的设计!
  12. mq 的Publish/Subscribe 模式
  13. 猫云bootcdn.cn
  14. 企业向SDN和NFV转型的最大阻碍是CXO们?
  15. 查看电脑支持的最大内存数。
  16. 基于物理的渲染PBR(一):pbr的基础理论和推导
  17. SQL Server数据库T-SQL学习
  18. static定义静态方法
  19. EditText设置只允许输入文字、拼音、数字
  20. 【机械】基于matlab模拟打桩机运动学仿真附matlab代码

热门文章

  1. 教程:简单十步,在 iTunes 申请 App Store 退款
  2. openstack常用命令
  3. 自然语言处理面试基础
  4. cython安装ubuntu_Cython安装与使用入门
  5. 企业微信之发送应用消息案例
  6. 机器学习练习 6 - Support Vector Machines(支持向量机)
  7. 电脑可以连接网络,但是无Internet访问权限问题排查
  8. ios越狱python插件_人生苦短,我用Python – 越狱后如何在IOS设备上玩Python编程,2018-07-11 – 算法网...
  9. selenium+chromedriver自动打开谷歌进行搜索
  10. 基于Vue3和Nestjs的网上匿名聊天网站的实现