首先是具体的目录结构:

其中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. 开发SSO单点登录需要注意的问题

      一.单点登录系统开发需要注意的问题     1.单点登录系统需要支持jsonp请求?    单点登录系统主要是向其他系统提供用户身份验证服务,因此需要提供对外接口,而外部系统通过接口访问时,必然涉 ...

  2. sql server pivot

    SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[YearSalary]( [year] [int] NULL, ...

  3. wpf 当DataGrid列模版是ComboBox时,显示信息

    ​ 实际工作中,有时DataGrid控件某一列显示数据是从Enum集合里面选择出来的,那这时候设置列模版为ComboBox就能满足需求.而关于显示的实际内容,直接是Enum的string()返回值可能 ...

  4. HTTP Error 500.35 - ANCM Multiple In-Process Applications in same Process

    vs2019   win10 情况:报错 HTTP Error 500.35 - ANCM Multiple In-Process Applications in same Process 微软官方解 ...

  5. vue-列表动画

    实现列表动画 li { border: 1px dashed #999; margin: 5px; line-height: 35px; padding-left: 5px; font-size: 1 ...

  6. Flask笔记:RESTful

    RESTful是用于前台和后端进行通信的一种规范或者说一种风格,采用的是HTTP和HTTPS协议,数据传输的格式使用的都是JSON,而不是XML.通常,RESTful的URL中只有名词,没有动词,而且 ...

  7. java基础第十五篇之IO流和递归算法

    FileInputStream : 输入流 int available() : 一次读取所有的字节数 read() : 将文件上的字节读取到内存的数组中 FileOutputStream : 输出流 ...

  8. 移动应用性能测试剖析以及PerfDog与其他工具的对比分析11.22

    商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 导语: 在IT.互联网及游戏行业,软件测试都是一个重要且不可或缺的过程,测试是软件生命周期中的一个重要阶段,是软件质量保证的关键步骤.目 ...

  9. GBT22239-2008-等保1.0三级要求

    第三级基本要求 7.1 技术要求 7.1.1 物理安全 7.1.1.1 物理位置的选择(G3) 本项要求包括: a)   机房和办公场地应选择在具有防震.防风和防雨等能力的建筑内: b)   机房场地 ...

  10. iOS 应用程序启动时要做什么

    当您的应用程序启动(无论是在前台或后台),使用您的应用程序委托application:willFinishLaunchingWithOptions:和application:didFinishLaun ...