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 

type familyAccount struct {
    //声明一些常用的字段
    申明一个字段,保存输入的选择
    key string
    申明一个字段判断是否退出循环
    loop bool
    定义账户的余额
    balance float64
    每次收支的金额
    money float64
    每次收支的说明
    note 收支的详情,使用字符串来记录
    details 定义一个字段记录是否有收支行为
    flag bool
}

func NewFamilyAccount() *familyAccount {
    return &familyAccount{
        key:     "",loop:    false10000.00.0\n  收入 \t金额\t\t  明细\t\t说明给结构体定义相应的方法
显示菜单
func (f *familyAccount) MainMenu() {
    for {
        fmt.Println(----------------------家庭收支软件-----------------------)
        fmt.Println(                      1.收支明细                      2.登记收入                      3.登记支出                      4.退出软件)
        print(请选择(1-4):)
        fmt.Scanln(&f.key)
        switch f.key {
        case 1:
            f.ShowDetails()
        2:
            f.Income()
        3:
            f.Outcome()
        4:
            f.Logout()
        default:
            fmt.Println(请输入正确的选项)
        }

        if f.loop {
            break
        }
    }
}

func (f *familyAccount) ShowDetails() {
     f.flag {
        fmt.Println(----------------------当前收支明细-----------------------)
        fmt.Println(f.details)
    } else当前没有收支明细,来一笔吧)
    }
}

func (f *familyAccount) Income() {
    fmt.Println(本次收入金额:)
    fmt.Scanln(&f.money)
    f.balance += f.money
    fmt.Println(本次收入说明:f.note)
    f.details += fmt.Sprintf(\n  收入 \t%v\t\t  %v\t\t%vtrue
}

func (f *familyAccount) Outcome() {
    fmt.Println(本次支出金额:f.money)
    if f.money > f.balance {
        fmt.Println(余额不足!!!)
        break
    }  {
        f.balance -= f.money
        fmt.Println(f.note)
        f.details += fmt.Sprintf(\n  支出 \t%v\t\t  %v\t\t%v
    }
}

func (f *familyAccount) Logout() {
    fmt.Println(你确定要退出吗?y/n)
    choice := ""
     {
        fmt.Scanln(&choice)
        if choice == y" || choice == n {
            
        }
        fmt.Println(您的输入有误!!请重新输入!)
    }
     {
        f.loop = 
    }
}

对上一节面向过程的收支软件的改进。

首先要将一些相干的变量存储到结构体中,然后用一个工厂方法进行初始化,最后将相应的功能封装成方法;

相关文章

类型转换 1、int转string 2、string转int 3、string转float ...
package main import s "strings" import...
类使用:实现一个people中有一个sayhi的方法调用功能,代码如...
html代码: beego代码:
1、读取文件信息: 2、读取文件夹下的所有文件: 3、写入文件...
配置环境:Windows7+推荐IDE:LiteIDEGO下载地址:http:...