加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang实战--家庭收支记账软件(面向对象)

发布时间:2020-12-16 09:17:38 所属栏目:大数据 来源:网络整理
导读:首先是具体的目录结构: 其中myAccount.go中调用utils包中的函数;utils.go实现记账软件的一些相应的功能; myAccount.go package mainimport ( " fmt " go_code/project_5/utils " )func main() { fmt.Println( 这个是面向对象的方法完成的 ) utils.NewFami

首先是具体的目录结构:

其中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.0n  收入 t金额tt  明细tt说明给结构体定义相应的方法
显示菜单
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%vtt  %vtt%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%vtt  %vtt%v
    }
}

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读