首先是具体的目录结构:

其中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实战--家庭收支记账软件(面向对象)的更多相关文章

  1. golang实战--家庭收支记账软件(面向过程)

    1.开发流程 2.目标 模拟实现一个基于文本界面的(家庭记账软件) : 初步掌握编程技巧和调试技巧: 主要包含以下知识点:局部变量和基本数据类型.循环语句.分支语句.简单屏幕格式输出.面向对象编程: ...

  2. Java项目之家庭收支记账软件

    模拟实现基于文本界面的家庭记账软件,该软件能够记录家庭的收入支出,并能够打印收支明细表. 项目采用分级菜单方式.主菜单如下: 假设家庭起始的生活基本金为10000元. 每次登记收入(菜单2)后,收入的 ...

  3. go-家庭收支记账软件例子

    家庭收支记账软件项目 项目需求说明 1) 模拟实现基于文本界面的<家庭记账软件> 2) 该软件能够记录家庭的收入.支出,并能够打印收支明细表 项目的界面 看代码效果 项目代码实现 实现基本 ...

  4. 61 C项目------家庭收支软件

    1,目标: ①模拟实现一个基于文本界面的<家庭收支软件> ②涉及知识点 局部变量和基本数据类型 循环语句 分支语句 简单的屏幕输出格式控制 2,需求说明: ①模拟实现基于文本界面的< ...

  5. android软件简约记账app开发day09-主页面模块,收支记账信息的展示

    android软件简约记账app开发day09-主页面模块,收支记账信息的展示 我们第一天已经绘制了记账条目的界面,也在主界面设置了LietView来展示记账条目,今天来实现记账后再主界面的展示效果 ...

  6. java使用dbutils工具类实现小程序 管家婆记账软件

    1.所需创建的包和 jar包 2.创建表结构  #生成一些表数据 ,,'交通银行','2016-03-02','家庭聚餐'); ,,'现金','2016-03-15','开工资了'); ,,'现金', ...

  7. 从记账软件看工具类APP的存量运营之道

    随着移动互联网的发展,APP的种类越来越多,一些工具类 APP 增长乏力,难以实现长期增长.只有提高用户留存时间,实现流量变现,才能在激烈的市场竞争中持续发展. 工具类APP的特点: 替代性很强: 用 ...

  8. “随手记”APP与已经发布的记账软件“鲨鱼记账”的差距

    我们使用并观察了“鲨鱼记账”APP,发现,我们的软件真的还有很多不足的地方.就功能这方面来说:“鲨鱼记账”APP有更多的收入.支出分类:就界面来说:“鲨鱼记账”APP有比我们优美太多的页面和背景.但是 ...

  9. MVC实战之排球计分软件(深入了解面向对象编程)

    在此篇博客之前,我已经写了一个实战系列的博客,虽然不太成熟但是相对比较实用,在这篇博客我将继续使用mvc编程此软件. 此篇博客会在一定的时间内完成,此次完成的软件的一个需求是提供给运动员的使用.我将在 ...

随机推荐

  1. SQLite安装及使用教程

    SQLite是一款轻型的嵌入式关系数据库,轻量级,效率高,操作起来也特别方便 我们今天来讲解一下SQLite的安装和一些基本操作 SQLite下载 如果是64位机,下载下面的两个解压就好 在dos界面 ...

  2. php time() 和 $_SERVER['REQUEST_TIME']

    time() 和 $_SERVER['REQUEST_TIME']效率 结果:(其中之一) 结论: time() : 执行时间在0.10 - 0.30 之间 $_SERVER['REQUEST_TIM ...

  3. 史上最全的用Python操控手机APP攻略!建议收藏!

    ​最近经常看到用Python操作手机APP的项目,例如抖音.闲鱼之类的,看完后发现这些项目无一例外需要部署ADB环境.至于什么是ADB,很多大神都讲过,只是写得比较专业,我等菜鸟看完还是云里雾里. ​ ...

  4. 1+x 证书 Web 前端开发中级理论考试(试卷 6 )

    1+x 证书 Web 前端开发中级理论考试(试卷 6 ) 官方QQ群 1+x 证书 web 前端开发初级对应课程分析 http://blog.zh66.club/index.php/archives/ ...

  5. 【VM配置】配置主机名称、网卡和yum源配置

    一,.配置主机名 为了对主机能进行分区,除了要有ip地址外还需要主机名,主机之间可以通过这个类似域名的名称来相互访问.linux系统中主机名配置文件一般在/etc/hostname文件中.另外我们也可 ...

  6. 持续集成(CI):API自动化+Jenkins定时构建

    一.系统管理 1.管理监控配置 系统管理>>系统设置>>管理监控配置 2.设置接收测试报告的邮箱 系统管理>>系统设置>>配置Extended E-ma ...

  7. springboot实践1

    环境安装 安装jdk 推荐安装jkd1.8+,我使用的是mac,假设已经安装好homebrew,则jdk的安装指令是: brew install java 在 ~/zshrc ,添加两行 export ...

  8. 前端之移动端库和框架bootstrap

    学习移动端场景下的js事件:制作移动端特效常用的js库:介绍移动端常用开发框架Bootstrap:介绍动态样式语言less.sass.stylus的基本使用. 移动端js事件 移动端的操作方式和PC端 ...

  9. .net core程序强制以管理员权限启动

    当我们编写windows程序的时候,很多时候需要程序默认以管理员权限运行,以前在.net 程序中直接新建一个app.manifest,设置requestedExecutionLevel 节点即可 &l ...

  10. 关于 SONY WF1000XM3 在 Windows 10 下蓝牙连接只有 Handfree 没有 Stereo 模式

    应该是驱动适配问题,目前粗暴的解决方案貌似下载安装一个 Intel APTX 驱动就可以了: https://www.dell.com/support/home/cn/zh/cndhs1/driver ...