【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

相关文章
|
7月前
|
Go 开发者
掌握Go语言:Go语言结构体,精准封装数据,高效管理实体对象(22)
掌握Go语言:Go语言结构体,精准封装数据,高效管理实体对象(22)
|
7月前
|
Java Go C++
Go面向对象是如何实现的?
【2月更文挑战第23天】
88 0
|
3月前
|
Shell Go API
Go语言grequests库并发请求的实战案例
Go语言grequests库并发请求的实战案例
|
1月前
|
安全 Go 开发者
代码之美:Go语言并发编程的优雅实现与案例分析
【10月更文挑战第28天】Go语言自2009年发布以来,凭借简洁的语法、高效的性能和原生的并发支持,赢得了众多开发者的青睐。本文通过两个案例,分别展示了如何使用goroutine和channel实现并发下载网页和构建并发Web服务器,深入探讨了Go语言并发编程的优雅实现。
35 2
|
6月前
|
Go
Go 中使用切片来实现动态数组的功能
Go 中使用切片来实现动态数组的功能
|
4月前
|
程序员 Go
Go 语言:面向对象还是非面向对象?揭开编程语言的本质
Go 语言:面向对象还是非面向对象?揭开编程语言的本质
|
4月前
|
算法 搜索推荐 Unix
快速指南: Go 1.19功能
快速指南: Go 1.19功能
|
4月前
|
存储 Java Go
Go从入门到放弃之结构体(面向对象)
Go从入门到放弃之结构体(面向对象)
|
6月前
|
存储 中间件 Go
在go语言服务中封装路由和示例
【6月更文挑战第23天】本文介绍golang后端按协议处理、中间件(一次性与每次请求执行)划分、以及服务架构Controller、Logic/Service、DAO/Repository和Routers划分。代码仓库在GitHub上提供。使用框架简化了交互和处理。后续章节深入探讨服务构建。
169 5
在go语言服务中封装路由和示例
|
4月前
|
编译器 Go
Go语言中的闭包:封装数据与功能的强大工具
Go语言中的闭包:封装数据与功能的强大工具