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 --面向对象实现的更多相关文章

  1. Golang 中的 面向对象: 方法, 类, 方法继承, 接口, 多态的简单描述与实现

    前言: Golang 相似与C语言, 基础语法与C基本一致,除了广受争议的 左花括号 必须与代码同行的问题, 别的基本差不多; 学会了C, 基本上万变不离其宗, 现在的高级语言身上都能看到C的影子; ...

  2. Golang通脉之面向对象

    面向对象的三大特征: 封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式 继承:使得子类具有父类的属性和方法或者重新定义.追加属性和方法等 多态:不同对象中同种行为的不同实现方式 Go并不是一个纯 ...

  3. [Go] Golang中的面向对象

    struct interface 就可以实现面向对象中的继承,封装,多态 继承的演示:Tsh类型继承People类型,并且使用People类型的方法 多态的演示Tsh类型实现了接口Student,实现 ...

  4. golang面向对象和interface接口

    一. golang面向对象介绍 1.golang也支持面向对象编程,但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.2.golang没有类(class),golang语言的结合体(struc ...

  5. golang 面向对象编程

    概述 Golang语言的面向对象与c++,py等语言有所不同,是由于Golang不支持继承:与上述支持聚合和继承的面向对象的语言不同,Golang只支持聚合(也叫做组合)和嵌入.聚合和嵌入的区别: t ...

  6. Golang笔记(二)面向对象的设计

    Golang笔记(二)面向对象的设计 Golang本质还是面向过程的语言,但它实现了一些OOP的特性,包括抽象.封装.继承和多态. 抽象和封装 Golang和C语言一样以struct为数据结构核心,不 ...

  7. Golang中类面向对象特性

    一.类型方法的实例成员复制与类型方法的实例成员引用   在Go中可以类似Java等面向对象语言一定为某个对象定义方法,但是Go中并没有类的存在,可以不严格的将Go中的struct类型理解为面向对象中的 ...

  8. golang之面向对象编程

    1.Golang语言面向对象编程说明 1)Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.所以我们说Golang支持面向对象编程特性是比较准确的. ...

  9. Golang的面向对象编程【结构体、方法、继承、接口】

    Golang也支持面向对象编程.但与以前学过传统的面向对象编程语言有区别.1)Golang没有类class,Go语言的结构体struct和类class有相似的特性.2)Golang中不存在继承,方法重 ...

随机推荐

  1. python实现浏览器打开指定url

    关键 webbrowser+time+os     import os,timeimport webbrowser url = 'http://www.baidu.com' webbrowser.op ...

  2. 【PCIE-2】---PCIE配置空间及访问方式简介

    对新手来说,第一步了解PCIE的相关基本概念,第二步了解PCIE配置空间,第三步深入研究PCIE设备枚举方式.本章主要总结第二步的PCIE配置空间 按照国际惯例,先提问题: 1. 什么是PCIE的配置 ...

  3. 史上最简单的vi教程,10分钟包教会

    从第一次接触vi/vim到现在已经十几年了,在这个过程中,来来回回,反反复复,学习vi很多次了. 虽然关于vi的使用,我还远未达到"专家"的水平,但对于vi的使用,我有话说. 1. ...

  4. .net Core Autofac稍微高级一点的方法

    前情摘要 前段时间写了autofac的注入但是每次都需要去修改startup这应该不是大家想要的. 至少不是我想要的. 网上有朋友说可以创建一个基础类来时间. 好了吹牛时间结束我们开始干点正事. 创建 ...

  5. 第二阶段冲刺个人任务——six

    今日任务: 搭建网络服务器,上传数据库及程序. 昨日成果: 合并程序(统计团队博客).

  6. set(待整理)

    set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值:另外,还 ...

  7. Object类、常用API_2

    主要内容 Object类 Date类 DateFormat类 Calendar类 System类 StringBuilder类 包装类 学习目标 -[ ] 能够说出Object类的特点 -[ ] 能够 ...

  8. shiro盐值加密并验证

    在数据表中存的密码不应该是123456,而应该是123456加密之后的字符串,而且还要求这个加密算法是不可逆的,即由加密后的字符串不能反推回来原来的密码,如果能反推回来那这个加密是没有意义的.著名的加 ...

  9. 共轭先验(conjugate prior)

    共轭是贝叶斯理论中的一个概念,一般共轭要说是一个先验分布与似然函数共轭: 那么就从贝叶斯理论中的先验概率,后验概率以及似然函数说起: 在概率论中有一个条件概率公式,有两个变量第一个是A,第二个是B , ...

  10. Docker(一):理解Docker镜像与容器

    一.镜像的概念 1.广泛镜像概念: 镜像是一种文件存储形式,是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在完全相同的副本即为镜像. 2.Docker镜像概念: 在Docker中镜像同样是一种完全 ...