微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 = 
    }
}

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐