golang家庭收支记账软件---面向对象

1|0main

1
2
3
4
5
6
7
8
package main
 
import "github.com/项目-家庭收支记账软件/面向对象/utils"
 
func main() {
 
    utils.NewFamilyAccount().MainMenu()
}

2|0familyAccount

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package utils
 
import "fmt"
 
type FamilyAccount struct {
    //声明一个变量,保存接受用户输入的选项
    key string
    //声明一个变量,控制是否退出for循环
    loop bool
    //定义账户余额
    balance float64
    //每次收支的金额
    money float64
    //每次收支说明
    note string
    //定义一个变量作为标识符,记录是否有收支的行为
    flag bool
    //收支的详情使用字符串来记录
    //当有收支时,只需要对details进行拼接处理即可
    details string
}
 
//编写工厂模式的构造方法,返回一个FamilyAccounts实例
func NewFamilyAccount() *FamilyAccount {
    return &FamilyAccount{
        key:     "",
        loop:    true,
        balance: 10000.00,
        money:   0.0,
        note:    "",
        flag:    false,
        details: "",
    }
}
 
//将显示明细写成一个方法
func (admit *FamilyAccount) showDetails() {
    fmt.Println("--------------当前收支明细记录--------------")
    if admit.flag {
        fmt.Println(admit.details)
    } else {
        fmt.Println("还没有收支记录哦,先记一笔账吧~")
    }
}
 
//将登记收入写成一个方法
func (admit *FamilyAccount) inCome() {
    fmt.Println("--------------当前登记收入记录--------------")
    fmt.Println("本次收入金额: ")
    fmt.Scanln(&admit.money)
    admit.balance = admit.balance + admit.money
    fmt.Println("本次收入说明: ")
    fmt.Scanln(&admit.note)
    //将收入情况拼接到details变量
    admit.details = admit.details + fmt.Sprintf("\n收入\t%v\t\t%v\t\t%v", admit.balance, admit.money, admit.note)
    admit.flag = true
}
 
//将登记支出写成一个方法
func (admit *FamilyAccount) pay() {
    fmt.Println("--------------当前登记支出记录--------------")
    fmt.Println("本次支出金额: ")
    fmt.Scanln(&admit.money)
    //做一个余额判断
    if admit.money > admit.balance {
        fmt.Println("余额不足")
        return
    }
    admit.balance = admit.balance - admit.money
    fmt.Println("本次支出说明: ")
    fmt.Scanln(&admit.note)
    //将支出情况拼接到details变量
    admit.details = admit.details + fmt.Sprintf("\n支出\t%v\t\t%v\t\t%v", admit.balance, admit.money, admit.note)
    admit.flag = true
}
 
//将退出软件写成一个方法
func (admit *FamilyAccount) exit() {
    fmt.Println("你确定要退出吗y/n")
    //定义一个确定变量
    choice := ""
    for {
        fmt.Scanln(&choice)
        if choice == "y" || choice == "n" {
            break
        }
        fmt.Println("你的输入有误,请重新输入")
    }
    if choice == "y" {
        admit.loop = false
    }
}
 
//给该结构体绑定相应的方法
//显示主菜单
func (admit *FamilyAccount) MainMenu() {
 
    for {
        fmt.Println("\n--------------家庭收支记账软件--------------")
        fmt.Println("                 1.收支明细")
        fmt.Println("                 2.登记收入")
        fmt.Println("                 3.登记支出")
        fmt.Println("                 4.退出软件")
        fmt.Println("请选择(1-4): ")
 
        fmt.Scanln(&admit.key)
        switch admit.key {
        case "1":
            admit.showDetails()
        case "2":
            admit.inCome()
        case "3":
            admit.pay()
        case "4":
            admit.exit()
        default:
            fmt.Println("请输入正确选项...")
        }
        if !admit.loop {
            break
        }
    }
 
}

  


__EOF__

本文作者StarGazer
本文链接https://www.cnblogs.com/PatrickStarGazer/p/15991951.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Star_Gazer  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示