GO版本家庭记账系统
面向过程
package TestMyAccount
import (
"fmt"
)
//1.先完成可以显示主菜单,并可以退出
// 2.完成显示明细功能
// 3.完成登记收入功能
// 4.完成登记支出功能
// 显示主菜单
//思路分析 :打印显示 输入4 退出系统
func Show()string{
//用户操作
key:=""
// 账户余额
blance:=10000.0
//每次收支的金额
money:=0.0
// 每次收支说明
note :=""
// 收支详情
details :="状态\t收支金额\t总金额\t说明"
//确定退出
var is_out string
for;;{
fmt.Println("\n——————家庭记账收支系统———————")
fmt.Println("\t1.收支明细")
fmt.Println("\t2.登记收入")
fmt.Println("\t3.登记支出")
fmt.Println("\t4.退 出\n")
fmt.Println("\t请选择(1-4):")
fmt.Scanln(&key)
switch key{
case "1":
fmt.Println("显示收支明细")
//思路
// 1.需要显示明细 定义details string 记录
// 2.定义 余额(balance) 每次收支的 金额(money) 每次收支的说明(note)
// 提示添加信息优化
if details == "状态\t收支金额\t总金额\t说明"{
fmt.Println("你还没有收支信息,请添加")
}else{
fmt.Println(details)
}
case "2":
fmt.Println("登记收入")
fmt.Println("收入金额:")
fmt.Scanln(&money)
//账户余额添加处理
blance += money
fmt.Println("收入说明:")
fmt.Scanln(¬e)
//将信息拼接到details
details +=fmt.Sprintf("\n收入\t%v\t\t%v\t%v",money,blance,note)
case "3":
fmt.Println("登记支出")
//思路分析
// 登记收入基础上进行变化
//余额不足的处理
fmt.Println("支出金额:")
fmt.Scanln(&money)
if money >blance{
fmt.Println("余额不足,当前余额:",money)
break //退出switch
}
//账户余额添加处理
blance -= money
fmt.Println("支出说明:")
fmt.Scanln(¬e)
//将信息拼接到details
details +=fmt.Sprintf("\n支出\t%v\t\t%v\t%v",money,blance,note)
// case "1","2","3":
// showInOut(key)
case "4":
//优化体验 确定退出操作
fmt.Println("确定退出?y/n")
fmt.Scanln(&is_out)
if is_out =="y"{
fmt.Println("退出了该系统")
return ""
}else if is_out == "n"{
break
}
default:
fmt.Println("请输入正确的选项")
}
}
}
package main
import (
"TestMyAccount"
"fmt"
)
func main(){
_=TestMyAccount.Show()
-------------------------------------------------------------------------------------------
面向对象
package OopToShow
import (
"fmt"
)
//面向对象 写的 家庭收支系统
//思路:把功能封装到结构体方法中 调用结构体方法 来记账 显示明细
type FamilyAccount struct{
// 账户余额
blance float64
//每次收支的金额
money float64
// 每次收支说明
note string
// 收支详情
// details :="状态\t收支金额\t总金额\t说明"
}
func NewFamilAccount(blance float64,money float64,note string)*FamilyAccount{
return &FamilyAccount{
blance:blance,
money:money,
note:note,
}
}
func (this *FamilyAccount)ShowMenu()string{
var key string
fmt.Println("\n——————家庭记账收支系统———————")
fmt.Println("\t1.收支明细")
fmt.Println("\t2.登记收入")
fmt.Println("\t3.登记支出")
fmt.Println("\t4.退 出\n")
fmt.Println("\t请选择(1-4):")
fmt.Scanln(&key)
return key
}
//功能部分封装 多个方法
func (this *FamilyAccount)GetKeyChooseMode1(details *string){
fmt.Println("显示收支明细")
//思路
// 1.需要显示明细 定义details string 记录
// 2.定义 余额(balance) 每次收支的 金额(money) 每次收支的说明(note)
// 提示添加信息优化
if *details == "状态\t收支金额\t总金额\t说明"{
fmt.Println("你还没有收支信息,请添加")
}else{
fmt.Println(*details)
}
}
func (this *FamilyAccount)GetKeyChooseMode2(details *string){
fmt.Println("登记收入")
fmt.Println("收入金额:")
fmt.Scanln(&this.money)
//账户余额添加处理
this.blance += this.money
fmt.Println("收入说明:")
fmt.Scanln(&this.note)
//将信息拼接到details
*details +=fmt.Sprintf("\n收入\t%v\t\t%v\t%v",this.money,this.blance,this.note)
}
func (this *FamilyAccount)GetKeyChooseMode3(details *string){
fmt.Println("登记支出")
//思路分析
// 登记收入基础上进行变化
//余额不足的处理
fmt.Println("支出金额:")
fmt.Scanln(&this.money)
if this.money >this.blance{
fmt.Println("余额不足,当前余额:",this.money)
}else{
//账户余额添加处理
this.blance -= this.money
fmt.Println("支出说明:")
fmt.Scanln(&this.note)
//将信息拼接到details
*details +=fmt.Sprintf("\n支出\t%v\t\t%v\t%v",this.money,this.blance,this.note)
}
}
func (this *FamilyAccount)GetKeyChooseMode4()string{
var is_out string
// 优化体验 确定退出操作
fmt.Println("确定退出?y/n")
fmt.Scanln(&is_out)
if is_out == "y"{
fmt.Println("退出了该系统")
}
return is_out
}
package main
import (
"OopToShow"
"fmt"
)
func main(){
FamilyAccount1:=OopToShow.NewFamilAccount(10000.0,0,"")
details := "状态\t收支金额\t总金额\t说明"
str :=""
for;;{
key:=FamilyAccount1.ShowMenu()
if key == "1"{
FamilyAccount1.GetKeyChooseMode1(&details)
}else if key =="2"{
FamilyAccount1.GetKeyChooseMode2(&details)
}else if key =="3"{
FamilyAccount1.GetKeyChooseMode3(&details)
}else if key =="4"{
str =FamilyAccount1.GetKeyChooseMode4()
}else{
fmt.Println("请输入正确的选项")
}
if str =="y"{
break
}
}
}