GO版本家庭记账系统

这篇博客介绍了如何使用Go语言分别以面向过程和面向对象的方式实现一个家庭记账系统。在面向过程的实现中,详细展示了主菜单、收支明细、登记收入和支出的功能。而在面向对象的实现中,通过创建`FamilyAccount`结构体,将功能封装到方法中,提高了代码的可读性和复用性。两种实现方式都有明确的用户交互流程,并包含了退出系统的确认操作。
摘要由CSDN通过智能技术生成

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(&note)

			//将信息拼接到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(&note)

			//将信息拼接到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
		}

}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值