golang实战--家庭收支记账软件(面向对象)
首先是具体的目录结构:
其中myAccount.go中调用utils包中的函数;utils.go实现记账软件的一些相应的功能;
myAccount.go
- package main
- import (
- "fmt"
- "go_code/project_5/utils"
- )
- func main() {
- fmt.Println("这个是面向对象的方法完成的")
- utils.NewFamilyAccount().MainMenu()
- }
utils.go
- package utils
- import "fmt"
- type familyAccount struct {
- //声明一些常用的字段
- //申明一个字段,保存输入的选择
- key string
- //申明一个字段判断是否退出循环
- loop bool
- //定义账户的余额
- balance float64
- //每次收支的金额
- money float64
- //每次收支的说明
- note string
- //收支的详情,使用字符串来记录
- details string
- //定义一个字段记录是否有收支行为
- flag bool
- }
- func NewFamilyAccount() *familyAccount {
- return &familyAccount{
- key: "",
- loop: false,
- balance: 10000.0,
- money: 0.0,
- note: "",
- flag: false,
- details: "\n 收入 \t金额\t\t 明细\t\t说明",
- }
- }
- //给结构体定义相应的方法
- //显示菜单
- func (f *familyAccount) MainMenu() {
- for {
- fmt.Println("----------------------家庭收支软件-----------------------")
- fmt.Println(" 1.收支明细")
- fmt.Println(" 2.登记收入")
- fmt.Println(" 3.登记支出")
- fmt.Println(" 4.退出软件")
- print("请选择(1-4):")
- fmt.Scanln(&f.key)
- switch f.key {
- case "":
- f.ShowDetails()
- case "":
- f.Income()
- case "":
- f.Outcome()
- case "":
- f.Logout()
- default:
- fmt.Println("请输入正确的选项")
- }
- if f.loop {
- break
- }
- }
- }
- func (f *familyAccount) ShowDetails() {
- if f.flag {
- fmt.Println("----------------------当前收支明细-----------------------")
- fmt.Println(f.details)
- } else {
- fmt.Println("当前没有收支明细,来一笔吧")
- }
- }
- func (f *familyAccount) Income() {
- fmt.Println("本次收入金额:")
- fmt.Scanln(&f.money)
- f.balance += f.money
- fmt.Println("本次收入说明:")
- fmt.Scanln(&f.note)
- f.details += fmt.Sprintf("\n 收入 \t%v\t\t %v\t\t%v", f.balance, f.money, f.note)
- f.flag = true
- }
- func (f *familyAccount) Outcome() {
- fmt.Println("本次支出金额:")
- fmt.Scanln(&f.money)
- if f.money > f.balance {
- fmt.Println("余额不足!!!")
- //break
- } else {
- f.balance -= f.money
- fmt.Println("本次收入说明:")
- fmt.Scanln(&f.note)
- f.details += fmt.Sprintf("\n 支出 \t%v\t\t %v\t\t%v", f.balance, f.money, f.note)
- f.flag = true
- }
- }
- func (f *familyAccount) Logout() {
- fmt.Println("你确定要退出吗?y/n")
- choice := ""
- for {
- fmt.Scanln(&choice)
- if choice == "y" || choice == "n" {
- break
- }
- fmt.Println("您的输入有误!!请重新输入!")
- }
- if choice == "y" {
- f.loop = true
- }
- }
对上一节面向过程的收支软件的改进。
首先要将一些相干的变量存储到结构体中,然后用一个工厂方法进行初始化,最后将相应的功能封装成方法;
golang实战--家庭收支记账软件(面向对象)的更多相关文章
- golang实战--家庭收支记账软件(面向过程)
1.开发流程 2.目标 模拟实现一个基于文本界面的(家庭记账软件) : 初步掌握编程技巧和调试技巧: 主要包含以下知识点:局部变量和基本数据类型.循环语句.分支语句.简单屏幕格式输出.面向对象编程: ...
- Java项目之家庭收支记账软件
模拟实现基于文本界面的家庭记账软件,该软件能够记录家庭的收入支出,并能够打印收支明细表. 项目采用分级菜单方式.主菜单如下: 假设家庭起始的生活基本金为10000元. 每次登记收入(菜单2)后,收入的 ...
- go-家庭收支记账软件例子
家庭收支记账软件项目 项目需求说明 1) 模拟实现基于文本界面的<家庭记账软件> 2) 该软件能够记录家庭的收入.支出,并能够打印收支明细表 项目的界面 看代码效果 项目代码实现 实现基本 ...
- 61 C项目------家庭收支软件
1,目标: ①模拟实现一个基于文本界面的<家庭收支软件> ②涉及知识点 局部变量和基本数据类型 循环语句 分支语句 简单的屏幕输出格式控制 2,需求说明: ①模拟实现基于文本界面的< ...
- android软件简约记账app开发day09-主页面模块,收支记账信息的展示
android软件简约记账app开发day09-主页面模块,收支记账信息的展示 我们第一天已经绘制了记账条目的界面,也在主界面设置了LietView来展示记账条目,今天来实现记账后再主界面的展示效果 ...
- java使用dbutils工具类实现小程序 管家婆记账软件
1.所需创建的包和 jar包 2.创建表结构 #生成一些表数据 ,,'交通银行','2016-03-02','家庭聚餐'); ,,'现金','2016-03-15','开工资了'); ,,'现金', ...
- 从记账软件看工具类APP的存量运营之道
随着移动互联网的发展,APP的种类越来越多,一些工具类 APP 增长乏力,难以实现长期增长.只有提高用户留存时间,实现流量变现,才能在激烈的市场竞争中持续发展. 工具类APP的特点: 替代性很强: 用 ...
- “随手记”APP与已经发布的记账软件“鲨鱼记账”的差距
我们使用并观察了“鲨鱼记账”APP,发现,我们的软件真的还有很多不足的地方.就功能这方面来说:“鲨鱼记账”APP有更多的收入.支出分类:就界面来说:“鲨鱼记账”APP有比我们优美太多的页面和背景.但是 ...
- MVC实战之排球计分软件(深入了解面向对象编程)
在此篇博客之前,我已经写了一个实战系列的博客,虽然不太成熟但是相对比较实用,在这篇博客我将继续使用mvc编程此软件. 此篇博客会在一定的时间内完成,此次完成的软件的一个需求是提供给运动员的使用.我将在 ...
随机推荐
- (四)初识NumPy(函数和图像的数组表示)
本章节主要介绍NumPy中的三个主要的函数,分别是随机函数.统计函数和梯度函数,以及一个较经典的用数组来表示图像的栗子!,希望大家能有新的收货,共同进步! 一.np.random的随机函数(1) ra ...
- Springboot 打包自带启动脚本
一直以来,我都是 gradlew build java -jar xxx.jar 来启动springboot项目的.今天突然发现,springboot自动封装了一个bootJar的任务脚本. demo ...
- jquery 全选样例
代码: $(function(){ $("#checkAllOld").click(function() { $("input[id^='box_old_']" ...
- C# 获取系统硬件可用信息
如何获取系统可用磁盘和可用内存? 1 获取磁盘信息 这个有自带的 DriveInfo 可以用. DriveInfo 类 (System.IO) | Microsoft Docs 2 获取内存信息 参考 ...
- python基础(3):变量、常量、注释、基本数据类型
1. 变量 变量:将运算的中间结果暂存到内存,以便后续程序调⽤. 可以直接运算,如下所示: print(3+5+6) print((3+5+6)*12) print(((3+5+6)*12)+3) p ...
- MySQL,必须掌握的6个知识点
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- ASP.Net MVC 路由及路由调试工具RouteDebug
一.路由规则 1.可以创建多条路由规则,每条路由的name属性不相同 2.路由规则有优先级,最上面的路由规则优先级越高 App_Start文件下的:RouteConfig.cs public stat ...
- Vue--过滤器、指令、插件
常用下载js的网址: https://www.bootcdn.cn/ https://www.jsdelivr.com/ 一.过滤器 vue 允许自定义过滤器,用于格式化一些常见文本(如日期等). 1 ...
- RiscV汇编介绍(1)-编译过程
从c/c++源文件,到可以执行文件,需要以下几个步骤: 预处理/编译 汇编 链接 下面我们以hello world程序为例,展示整个编译链接过程. 1. 编写hello.c代码 #include &l ...
- ubuntu下查看本机IP地址
在终端输入: ifconfig -a 即可得解.出来的结果inet后就是你的ip地址