Golang 实现小案例 - 记账

182 阅读3分钟

0. 前言

这个小案例将会用到go的很多基本概念,涉及的内容挺多的,项目虽小,五脏俱全,能完整做完,学到的知识应该不少。

需求:记录家庭的收入、支出,并能够打印收支明细表

一个简单的界面,我们把主要放到后台go的逻辑上面

image.png

1. 退出

我们冲最简单的功能开始开发,第一个来写退出,这个肯定是最容易写的,直接上代码、、

package main
import (
    "fmt"
)

func main(){
    //声明一个变量,保存接收用户输入的选项
    key := ""
    //声明一个变量,控制是否退出for
    loop := true
    //显示这个主菜单
    for{
        fmt.Print1n("-------收支记账------")
        fmt.Println("1收支明细")
        fmt.Println("2登记收入")
        fmt.Println("3登记支出")
        fmt.Println("4退出软件")
        fmt.Print("请选择(1-4):")
        
        switch key
            case "1":
                fmt.Print.1n(”---------当前收支明细记录----------)
            case "2":
                fmt.Print.1n(”---------登记----------)
            case "3":
                fmt.Print.1n(”---------支出----------)
            case "4":
                loop = false
            default:
                fmt.println("请输入正确选项")
     }
     
     if !loop{
         break
     }
     
     fmt.println("已退出")
}
  

2. 显示明细和登记收入

第二个完成可以显示明细和登记收入的功能。

思路:

  • 因为需要显示明细,我们定义一个变量details string来记录
  • 还需要定义变量来记录余额(balance)、每次收支的金额(money),每次收支的说明(note)
func main(){
    //声明一个变量,保存接收用户输入的选项
    key := ""
    //声明一个变量,控制是否退出for
    loop := true
    //定义账户的余额[]
    ba1ance:= 10000.0
    //每次收支的金额
    money := 0.0
    //每次收支的说明
    note := ""
}  

3. 改进代码

  • 用户输入4退出时,给出提示"你确定要退出吗?y",必须输入正确的yn,否则循环输入指令,直到输入y或者n
  • 当没有任何收支明细时,提示"当前没有收支明细…来一笔吧!"
  • 在支出时,判断余额是否够,并给出相应的提示
  • 将面向过程的代码修改成面向对象的方法,编写myFamilyAccount.go,并使用testMyFamilyAccount.go去完成测试

思路分析: 把记账软件的功能,封装到一个结构体中,然后调用该结构体的方法,来实现记账,显示明细。结构体的名字FamilyAccount.在通过在main方法中,创建一个结构体FamilyAccount实例,实现记账即可.

package main
import (
    "fmt"
)

type FamilyAccount struct{

    //声明必须的字段.
    //声明一个字段,保存接收用户输入的选项
    key s
    string
    //声明一个字段,控制是否退出or
    loop bool
    //定义账户的余额门
    balance float64
    //每次收支的金额
    money float64
    //每次收支的说明
    note string
    //定义个字段,记录是否有收支的行为
    flag bool
    //收支的详情使用字符串来记录
    //当有收支时,只需要对details进行拼接处理即可
    details string
}

//编写要给工厂模式的构造方法,返回一个*FamilyAccount实例
func NewFamilyAccount()*FamilyAccount{
    return &FamilyAccount
    key:",
    loop true,
    balance:10000.0.
    money 0.0,
    note:""
    flag false 
}

//将退出系统写成一个方法,和*FamilyAccount绑定
func (this *FamilyAccount)exit(){
    fmt.Println("你确定要退出吗?yn")
    choice :"
    for{
        fmt.Scanln(&choice)
        if choice -"y"choice -"n"
        break
        fmt.Println("你的输入有误,请重新输入yn")
    }
    
    if choice ="y"{
        this.loop false
    }
    
}

到这,简单的一个案例就完成了,希望对你有帮助。

本文正在参加技术专题18期-聊聊Go语言框架