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编程此软件. 此篇博客会在一定的时间内完成,此次完成的软件的一个需求是提供给运动员的使用.我将在 ...
随机推荐
- React: React脚手架
一.简言 React开发目前已经非常流行,对于如何实现对React项目的管理和维护,React生态圈出现了大量可用的开发工具,例如Browserify.Gulp.Grunt.webpack等.其中,w ...
- jsp模板
<%String path = request.getContextPath();String basePath = request.getScheme()+"://"+re ...
- C# 异或
遗忘的东西. 真的是很少用呀. 操作符为^ 简单来说就是相同为假(0),不同为真(1). 给一个小小的例子(密文) class Program { static void Main(string[] ...
- jquery 全选样例
代码: $(function(){ $("#checkAllOld").click(function() { $("input[id^='box_old_']" ...
- 前端之jquery1
jquery介绍 jQuery是目前使用最广泛的javascript函数库.据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库.微软公司甚至把jQuery作为他们的官方库. ...
- Windows Server 2012 R2更新(KB2919355)
必须按以下顺序安装这些KB:clearcompressionflag.exe,KB2919355,KB2932046,KB2959977,KB2937592,KB2938439和KB2934018. ...
- Spring Boot 中如何定制 Banner
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- JavaWeb之JSP & EL & JSTL
JSP & EL & JSTL JSP Java Server Page 什么是JSP 从用户角度看,就是一个网页.从程序员角度看,就是一个Java类,它继承Servlet,所以可以说 ...
- HTTP 压测工具wrk简介
前段时间项目压测,看到开发命令行下使用这个命令进行压测非常简洁.方便,萌发了学习的兴趣,这里仅做简单介绍. 安装 wrk支持大多数UNIX系统,不支持Windows.需要操作系统支持LuaJIT和Op ...
- xml解析-jaxp遍历结点
jaxp遍历结点 把xml中所有的结点都打印出来 // 遍历结点把所有元素名称打印出来 / 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * * 4.得 ...