golang-练习ATM --面向对象实现
package utils import (
"fmt"
"strings"
) type StructAtm struct {
action int
loop bool
save_money int
money int
draw_money int
} func NewStructAtm() *StructAtm {
return &StructAtm{
action : 0,
loop :true,
save_money :0,
money :0,
draw_money :0,
}
} func (this *StructAtm) find(){
fmt.Printf("余额为:%d \n",this.money)
}
func (this *StructAtm) save(){
fmt.Println("请输入存款金额:")
//fmt.Scanf("%d\n",&save_money) //使用scanf必须加\n不然会打印两次
fmt.Scanln(&this.save_money)
fmt.Println(this.save_money)
this.money += this.save_money
fmt.Printf("存款金额%d,存款成功\n",this.save_money)
}
func (this *StructAtm) draw(){
fmt.Println("请输入具体取款金额:")
fmt.Scanln(&this.draw_money)
if this.draw_money <= this.money{
this.money -= this.draw_money
fmt.Printf("成功取款,余额为:%d\n",this.money)
}else {
fmt.Println("余额不足")
}
}
func (this *StructAtm) shoping(){
shop_goods := make(map[string]int)
goods_list := make([]string,0)
var goodName string
var shopmany int
if len(shop_goods)==0 {
this.add_goods(&shop_goods)
}
fmt.Println(shop_goods)
this.shop_car(goodName ,&goods_list)
for i:=0 ; i<len(goods_list);i++{
v,_ :=shop_goods[goods_list[i]]
shopmany += v
}
if this.money < shopmany{
fmt.Println("购物失败,余额不足,请及时充值")
}else{
this.money -= shopmany
}
} func (this *StructAtm) add_goods(g *map[string]int) {
for{
var(
name string
price int
)
fmt.Println("输入新增的商品名称,按Q退出:")
fmt.Scanln(&name)
if strings.ToUpper(name)=="Q"{
break
}
fmt.Println("输入该商品价格:")
fmt.Scanln(&price)
(*g)[name]= price
}
}
func (this *StructAtm) shop_car(gn string,gl *[]string) {
for{
fmt.Println("输入要购买的商品(Q退出):")
fmt.Scanln(&gn)
if gn =="Q" {
break
}
*gl = append(*gl,gn)
}
}
func (this *StructAtm) manager() {
fmt.Println("-----欢迎登陆中国银行-----")
fmt.Println("\t1:查询余额")
fmt.Println("\t2:存款")
fmt.Println("\t3:取款")
fmt.Println("\t4:购物")
fmt.Println("\t5:退出")
fmt.Println("请输入你的操作:")
fmt.Scanln(&this.action)
switch this.action {
case 1:
this.find()
case 2:
this.save()
case 3:
this.draw()
case 4:
this.shoping()
case 5:
this.loop = false
default:
fmt.Println("输入有误,请输入1-4之间的数字")
}
} func (this *StructAtm) MainMenu() {
for {
this.manager()
if this.loop == false{
fmt.Println("----欢迎使用,再见----")
break
}
}
}
package main import (
"fmt"
"go_dev/structAtm/utils"
) func main() {
fmt.Println("面向对象ATM练习")
utils.NewStructAtm().MainMenu()
}
golang-练习ATM --面向对象实现的更多相关文章
- Golang 中的 面向对象: 方法, 类, 方法继承, 接口, 多态的简单描述与实现
前言: Golang 相似与C语言, 基础语法与C基本一致,除了广受争议的 左花括号 必须与代码同行的问题, 别的基本差不多; 学会了C, 基本上万变不离其宗, 现在的高级语言身上都能看到C的影子; ...
- Golang通脉之面向对象
面向对象的三大特征: 封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式 继承:使得子类具有父类的属性和方法或者重新定义.追加属性和方法等 多态:不同对象中同种行为的不同实现方式 Go并不是一个纯 ...
- [Go] Golang中的面向对象
struct interface 就可以实现面向对象中的继承,封装,多态 继承的演示:Tsh类型继承People类型,并且使用People类型的方法 多态的演示Tsh类型实现了接口Student,实现 ...
- golang面向对象和interface接口
一. golang面向对象介绍 1.golang也支持面向对象编程,但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.2.golang没有类(class),golang语言的结合体(struc ...
- golang 面向对象编程
概述 Golang语言的面向对象与c++,py等语言有所不同,是由于Golang不支持继承:与上述支持聚合和继承的面向对象的语言不同,Golang只支持聚合(也叫做组合)和嵌入.聚合和嵌入的区别: t ...
- Golang笔记(二)面向对象的设计
Golang笔记(二)面向对象的设计 Golang本质还是面向过程的语言,但它实现了一些OOP的特性,包括抽象.封装.继承和多态. 抽象和封装 Golang和C语言一样以struct为数据结构核心,不 ...
- Golang中类面向对象特性
一.类型方法的实例成员复制与类型方法的实例成员引用 在Go中可以类似Java等面向对象语言一定为某个对象定义方法,但是Go中并没有类的存在,可以不严格的将Go中的struct类型理解为面向对象中的 ...
- golang之面向对象编程
1.Golang语言面向对象编程说明 1)Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.所以我们说Golang支持面向对象编程特性是比较准确的. ...
- Golang的面向对象编程【结构体、方法、继承、接口】
Golang也支持面向对象编程.但与以前学过传统的面向对象编程语言有区别.1)Golang没有类class,Go语言的结构体struct和类class有相似的特性.2)Golang中不存在继承,方法重 ...
随机推荐
- ReactNative: 自定义ReactNative API组件
一.简介 在前面介绍了很多ReactNative中UI组件和API组件,这些都是Facebook团队封装好的基础组件,开发者可以直接使用.然而,在实际的开发过程中,面对复杂的需求,此时原生的Nativ ...
- aliPayPlus 科普使用
本文出自APICloud官方论坛, 感谢论坛版主City7的分享. 首先到 https://open.alipay.com/platform/manageHome.htm 申请应用上线 支付宝网关:这 ...
- ELK学习实验018:filebeat收集docker日志
Filebeat收集Docker日志 1 安装docker [root@node4 ~]# yum install -y yum-utils device-mapper-persistent-data ...
- 人生中的第一篇OI博客及博客规划
这是笔者第一次在博客园里发表文章,也同样是第一次来写关于OI的一些想法,此篇的主题是想总体对日后的博客有具体的规划. 首先,笔者创办博客并发表观点于看法的目的是记录自己对于题目或竞赛的观念,主要以题解 ...
- MySQL 相关规约(v1.0) (转)
0)前言 a. 基本规约 [强制]表存储引擎必须使用InnoDB(针对主库一般是强制要求的) [强制]表字符集默认使用utf8,必要时候使用utf8mb4(个人踩坑:emoji表情存储问题)•说明:• ...
- Isx个人第4次作业—Alpha项目测试
标题 内容 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience 这个作业要求在哪里 https:// ...
- java线程基础梳理
java线程 概述 进程:运行时概念,运行的应用程序,进程间不能共享内存 线程:应用程序内并发执行的代码段,可以共享堆内存和方法区内存,而栈内存是独立的. 并发理解:在单核机器上,从微观角度来看,一段 ...
- Django设置session过期时间
settings.py #session 设置 SESSION_COOKIE_AGE = 60 * 10 # 设置过期时间10分钟,默认为两周 SESSION_SAVE_EVERY_REQUEST = ...
- c语言秋季作业3
本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 作业链接 我在这个课程的目标是 运用C语言编程解决一些简单的数学问题 这个作业在那个具体方面帮助我实现目标 学习if else ...
- Java错误:找不到类文件或者未加载主类
使用java命令执行.class文件时,java只会查找环境变量CLASSPATH中的目录,并会不查找当前目录,所以只要把当前目录”."加入到CLASSPATH中就可以了.