使用GO实现尚硅谷家庭记账系统
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.txtmain.go
使用GO实现尚硅谷家庭记账系统相关推荐
- [附源码]JAVA毕业设计家庭记账系统(系统+LW)
[附源码]JAVA毕业设计家庭记账系统(系统+LW) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(In ...
- java计算机毕业设计家庭记账系统源程序+mysql+系统+lw文档+远程调试
java计算机毕业设计家庭记账系统源程序+mysql+系统+lw文档+远程调试 java计算机毕业设计家庭记账系统源程序+mysql+系统+lw文档+远程调试 本源码技术栈: 项目架构:B/S架构 开 ...
- 尚硅谷 家庭收支记账软件
这个是没有文件储存的,过几天再写一个有文件储存的练练手. 需求说明: 主菜单类: public class FamilyAccount {public static void main(String[ ...
- JAVA毕设项目家庭记账系统(java+VUE+Mybatis+Maven+Mysql)
项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
- 尚硅谷商城购物系统 安卓App
这是我在网上购买的安卓商城项目的视频以及资料, 大约有2.5G左右,那么如果有想要试一试的小伙伴可以在下方评论留言 我会不定时回复通过百度云发给需要的人,当然也欢迎想和我交流学习的同学,虽然我现在学的 ...
- 基于SpringBoot的家庭记账管理系统的设计与实现
摘 要 随着社会的发展,社会的方方面面都在利用信息化时代的优势.互联网的优势和普及使得各种系统的开发成为必需. 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和m ...
- Go入门案列1:实现一个家庭收支记账系统
项目来源: b站尚硅谷go教学 使用 通过Create方法来创建myFamilyAccount变量(创建时设置的name和pwd相当于默认密码) ,再直接调用该变量的 MainMeau方法即可,可参照 ...
- (尚硅谷项目代码)java基础----家庭记事本
小记:跟着尚硅谷的老师学了三天的java基础,学习完家庭记事本之后自己动手打了一遍代码,其中Utility是一些用到的方法,已经事先给出,放在Utility.java文件中,只需要在FamilyAcc ...
- PHP家庭账单系统,PHP+SQLite 多用户记账系统.家庭在线记账理财PHP管理系统.
PHP+SQLite 多用户记账系统.家庭在线记账理财PHP管理系统. 特别说明 目前版本,其中一个函数文件content.php源码没有开放,后续处理好了再考虑开放,所以目前这个文件是加密状态. 将 ...
- 基于java家庭理财记账系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
基于java家庭理财记账系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java家庭理财记账系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技术栈: ...
最新文章
- 训练时间和参数量百倍降低,直接使用标签进行预测,性能竟超GNN
- java centos7_centos7.0安装java环境
- xamarin textview 滚动_微软测试 Win10 Chromium/Edge CPU 优化和滚动新效果
- 【转载】Eclipse vs IDEA快捷键对比大全(win系统)
- 【Flink】Flink 运行 实时修改消费组offset
- 虚拟机linux gedit,Linux系统中把gedit改造成TextMate的方法
- CentOS 6.6 安装 Node.js
- springboot 多线程_从零开始到架构,800页Java+并发+容器+多线程+高并发+Spring+SpringBoot源码...
- python unittest用法
- 机械工程人工智能_机械工程中的人工智能
- vfp报表纸张设置_谈VFP9的自定义纸张的设计!
- mq 的Publish/Subscribe 模式
- 猫云bootcdn.cn
- 企业向SDN和NFV转型的最大阻碍是CXO们?
- 查看电脑支持的最大内存数。
- 基于物理的渲染PBR(一):pbr的基础理论和推导
- SQL Server数据库T-SQL学习
- static定义静态方法
- EditText设置只允许输入文字、拼音、数字
- 【机械】基于matlab模拟打桩机运动学仿真附matlab代码
热门文章
- 教程:简单十步,在 iTunes 申请 App Store 退款
- openstack常用命令
- 自然语言处理面试基础
- cython安装ubuntu_Cython安装与使用入门
- 企业微信之发送应用消息案例
- 机器学习练习 6 - Support Vector Machines(支持向量机)
- 电脑可以连接网络,但是无Internet访问权限问题排查
- ios越狱python插件_人生苦短,我用Python – 越狱后如何在IOS设备上玩Python编程,2018-07-11 – 算法网...
- selenium+chromedriver自动打开谷歌进行搜索
- 基于Vue3和Nestjs的网上匿名聊天网站的实现