【GO】实现一个简单的案例:家庭记账功能,并使用面向对象的思想进行封装(1)

简介: 【GO】实现一个简单的案例:家庭记账功能,并使用面向对象的思想进行封装

案例需求

  • 实现一个简单的记账功能
  • 记录收支情况
  • 友好的退出

案例所包含的知识点

  • 变量的声明方式
  • 全局变量,局部变量
  • 标准输入与输出
  • 字符串格式化
  • 无限循环

案例初始代码

代码每一步操作都有注释,可以把代码直接复制运行

package main
import "fmt"
func main() {
  // 声明一个变量,保存用户输入的值
  key := ""
  // 声明一个变量是否退出循环
  loop := true
  // 定义账户余额
  balance := 1000.0
  // 每次收支的金额
  money := 0.0
  // 每次收支的说明
  note := ""
  // 收支的详情
  detaile := "收支\t 账户金额\t 收支余额\t 说    明"
  // 定义一个flag来判断是否有收支记录
  flag := false
  // 显示这个主菜单
  for {
    fmt.Println("-------------家庭收支记账软件-----------------")
    fmt.Println("        1.收支明细")
    fmt.Println("        2.登记收入")
    fmt.Println("        3.登记支出")
    fmt.Println("        4.退出软件")
    fmt.Print("请选择1-4: ")
    fmt.Scan(&key)
    switch key {
    case "1":
      fmt.Println("-------------当前收支明细记录-----------------")
      if flag {
        fmt.Println(detaile)
      } else {
        fmt.Println("还没有任何记录,快去记录吧!")
      }
    case "2":
      fmt.Println("本次收支金额:")
      fmt.Scan(&money)
      balance += money
      fmt.Println("本次收支说明")
      fmt.Scan(&note)
      detaile += fmt.Sprintf("\n收入 \t%v \t%v   \t%v\n", balance, money, note)
      flag = true
    case "3":
      fmt.Println("本次支出金额:")
      fmt.Scan(&money)
      // 对支出金额做一个判断
      if money > balance {
        fmt.Println("你的余额不够了,咔咔")
        break
      }
      // 从余额中减掉
      balance -= money
      fmt.Println("本次支出说明")
      fmt.Scan(&note)
      detaile += fmt.Sprintf("\n支出 \t%v \t%v   \t%v\n", balance, money, note)
      flag = true
    case "4":
      fmt.Println("你确定要退出吗? y/n")
      choice := ""
      for {
        fmt.Scan(&choice)
        if choice == "y" || choice == "n" {
          break
        }
        fmt.Println("你的输入有误,请重新输入 y/n")
      }
      if choice == "y" {
        loop = false
      }
    default:
      fmt.Println("请输入正确1的选项...")
    }
    if loop == false {
      break
    }
  }
  fmt.Println("你退出了记账软件")
}

演示案例

这就是简单的实现效果

image.png

image.png

相关文章
|
2月前
|
存储 消息中间件 大数据
Go语言在大数据处理中的实际应用与案例分析
【2月更文挑战第22天】本文深入探讨了Go语言在大数据处理中的实际应用,通过案例分析展示了Go语言在处理大数据时的优势和实践效果。文章首先介绍了大数据处理的挑战与需求,然后详细分析了Go语言在大数据处理中的适用性和核心技术,最后通过具体案例展示了Go语言在大数据处理中的实际应用。
|
2月前
|
负载均衡 算法 数据库连接
Go语言性能优化实践:案例分析与解决方案
【2月更文挑战第18天】本文将通过具体的案例分析,探讨Go语言性能优化的实践方法和解决方案。我们将分析几个典型的性能瓶颈问题,并详细介绍如何通过优化代码、调整并发模型、改进内存管理等方式来提升程序的性能。通过本文的学习,读者将能够掌握一些实用的Go语言性能优化技巧,为实际项目开发中的性能优化工作提供指导。
|
2月前
|
Go 开发者
掌握Go语言:Go语言结构体,精准封装数据,高效管理实体对象(22)
掌握Go语言:Go语言结构体,精准封装数据,高效管理实体对象(22)
|
2月前
|
Java Go C++
Go面向对象是如何实现的?
【2月更文挑战第23天】
45 0
|
2月前
|
JSON Go 数据格式
从1开始,扩展Go语言后端业务系统的RPC功能
从1开始,扩展Go语言后端业务系统的RPC功能
49 0
|
2月前
|
存储 Go
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
本文将探讨几个热门的 go 日志库如 logrus、zap 和官网的 slog,我将分析这些库的的关键设计元素,探讨它们是如何支持日志轮转与切割功能的配置。
176 0
Go 浅析主流日志库:从设计层学习如何集成日志轮转与切割功能
|
2月前
|
网络协议 Go Windows
Wireshark的Go 和Capture 功能都能做什么?
Wireshark的Go 和Capture 功能都能做什么?
|
9天前
|
Go
Go 中使用切片来实现动态数组的功能
Go 中使用切片来实现动态数组的功能
|
7天前
|
存储 中间件 Go
在go语言服务中封装路由和示例
【6月更文挑战第23天】本文介绍golang后端按协议处理、中间件(一次性与每次请求执行)划分、以及服务架构Controller、Logic/Service、DAO/Repository和Routers划分。代码仓库在GitHub上提供。使用框架简化了交互和处理。后续章节深入探讨服务构建。
105 5
在go语言服务中封装路由和示例
|
11天前
|
设计模式 算法 Java
go语言进阶篇——面向对象(一)
go语言进阶篇——面向对象(一)
go语言进阶篇——面向对象(一)