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中不存在继承,方法重 ...
随机推荐
- map文件分析
1.MAP文件基本概念 段(section):描述映像文件的代码和数据块 RO:Read-Only的缩写,包括RO-data(只读数据)和RO-code(代码) RW:Read-Write的缩写,主要 ...
- 【Java并发基础】加锁机制解决原子性问题
前言 原子性指一个或多个操作在CPU执行的过程不被中断的特性.前面提到原子性问题产生的源头是线程切换,而线程切换依赖于CPU中断.于是得出,禁用CPU中断就可以禁止线程切换从而解决原子性问题.但是这种 ...
- restframework 视图
重要知识点 as_view()获取的是view方法名,当url配版成功,执行view方法 一.逻辑封装(mixins, generics) path('author/', views.AuthorVi ...
- C++中虚析构的作用
为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用. 基本概念: 析构函数是用来回收对象的: 虚析构函数是析构函数的一种: 基类是一类对象共有属性的抽象.比如,猫和狗都是动物,都会 ...
- 机器学习笔记P1(李宏毅2019)
该博客将介绍机器学习课程by李宏毅的前两个章节:概述和回归. 视屏链接1-Introduction 视屏链接2-Regression 该课程将要介绍的内容如下所示: 从最左上角开始看: Regress ...
- oc---instancetype和id的异同
[instancetype和id的异同] 相同点:都可以作为方法的返回类型. 不同点: (1)instancetype可以返回方法所在类相同类型的对象,id只能返回未知类型的对象: (2)instan ...
- qq机器人 python实现 自动回复
我以前写的代码我现在贴在了下面,下面的连接是我自己的博客,有问题希望大家提出来,一起进步...我以前试过,没啥问题.可以实现聊天. https://realwuxiong.github.io/blog ...
- Shell重定向与exec
前言 首先我们需要知道exec是什么,exec是linux下面一个创建进程的方法,详情请参考:https://www.cnblogs.com/guge-94/p/11016176.html 重定向 概 ...
- Spring注解开发系列VII --- Servlet3.0
Servlet3.0简介 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用 ...
- 集合详解之 Map
集合详解之 Map + 面试题 集合有两个大接口:Collection 和 Map,本文重点来讲解集合中另一个常用的集合类型 Map. 以下是 Map 的继承关系图: Map 简介 Map 常用的实现 ...