面向对象之-------------------永不停机的ATM
import os
class Account:
def __init__(self, username, password, money=0):
self.username = username
self.password = password
self.money = money class ATM:
def __init__(self):
self.acc = None # 账户信息. 当登陆成功之后。 self。acc = 当前登陆的账户 def regist(self):
print("欢迎来到注册环节")
username = input("请输入你要注册用户名:")
password = input("请输入你要注册密码:") f = open("atm.txt", mode="r", encoding="utf-8")
for line in f:
if line.strip().split("$$")[0] == username: # 用户名重复了
print("对不起, 用户名重复了")
return acc = Account(username, password)
# 把账户信息写入到文件中
f = open("atm.txt", mode="a", encoding="utf-8")
f.write(acc.username+"$$" + acc.password+"$$"+str(acc.money)+"\n")
f.flush()
f.close()
print("注册成功!!!!") def login(self):
print("欢迎进入登陆环节!!")
username = input("请输入你要注册用户名:")
password = input("请输入你要注册密码:")
f = open("atm.txt", mode="r", encoding="utf-8")
for line in f:
if line.strip().split("$$")[0] == username and line.strip().split("$$")[1] == password: # 用户名重复了
print("登陆成功")
# 把登陆成功的账户放在atm中
self.acc = Account(line.strip().split("$$")[0], line.strip().split("$$")[1], int(line.strip().split("$$")[2]))
break
else:
print('登陆失败!!!!') def write_to_file(self):
# 把当前账户里的信息写入到atm.txt
with open("atm.txt", mode="r", encoding="utf-8") as f1, \
open("atm.txt_副本", mode="w", encoding="utf-8") as f2:
for line in f1:
# 找到当前登陆的账户
if line.strip().split("$$")[0] == self.acc.username:
line = self.acc.username + "$$" + self.acc.password + "$$" + str(self.acc.money) + "\n"
f2.write(line)
os.remove("atm.txt")
os.rename("atm.txt_副本", "atm.txt") def cun(self):
if self.acc ==None:
print("还没有登陆呢, 请登陆")
return
print("进入存钱环节")
money = int(input("请输入你要存的钱数:"))
self.acc.money += money # 存钱了
self.write_to_file()
print("存钱成功") def qu(self):
if self.acc ==None:
print("还没有登陆呢, 请登陆")
return
print("进入取钱环节")
money = int(input("请输入你要取的钱数:"))
if self.acc.money < money:
print("余额不足")
return
self.acc.money -= money
self.write_to_file()
print("取钱成功.") def huikuan(self):
if self.acc ==None:
print("还没有登陆呢, 请登陆")
return
print("进入汇款环节!")
target = input("请告诉我对方账号:")
if target == self.acc.username :
print("自己不能汇款给自己")
return f = open("atm.txt", mode="r", encoding="utf-8")
for line in f:
if line.strip().split("$$")[0] == target: # 找到了我要汇款的账号
break
else:
print("对不起。 账号不存在")
return
f.close()
# 汇款
money = int(input("请输入你要汇款的钱数:"))
if self.acc.money < money:
print("余额不足")
return
else: # 钱够。 账户也对
# 先给对方账号加钱
with open("atm.txt", mode="r", encoding="utf-8") as f1, \
open("atm.txt_副本", mode="w", encoding="utf-8") as f2:
for line in f1:
if line.strip().split("$$")[0] == target: # 找到了我要汇款的账号
line = line.strip().split("$$")[0] + "$$" + line.strip().split("$$")[1] + "$$" + str(int(line.strip().split("$$")[2]) + money) + "\n"
f2.write(line)
os.remove("atm.txt")
os.rename("atm.txt_副本", "atm.txt")
# 自己账号减钱
self.acc.money -= money
self.write_to_file()
print("汇款成功!") def chaxun(self):
if self.acc ==None:
print("还没有登陆呢, 请登陆")
return
print("您的余额是:%s" % self.acc.money) def run(self):
menu = ("注册", "登陆", "存钱", "取钱", "汇款", "查询余额", "退出")
while 1:
for i, m in enumerate(menu, 1):
print(i, m)
m = input("请输入你要执行的菜单:")
if m == "":
self.regist()
elif m == '':
self.login()
elif m == '':
self.cun()
elif m == '':
self.qu()
elif m == "":
self.huikuan()
elif m == "":
self.chaxun()
elif m == "":
self.acc = None#永不停机的ATM ATM().run() # 程序的入口
面向对象之-------------------永不停机的ATM的更多相关文章
- 【Akka】Actor模型探索
Akka是什么 Akka就是为了改变编写高容错性和强可扩展性的并发程序而生的.通过使用Actor模型我们提升了抽象级别,为构建正确的可扩展并发应用提供了一个更好的平台.在容错性方面我们採取了" ...
- Akka初步介绍
Akka可能很多人都没有用过,也不知道是什么,但如果说起Scala或Spark就有很多人都听说过或使用过 ,这里简单说下三者的关系Akka是使用Scala开发的,Spark中使用了Akka作为其消息的 ...
- 百行go代码构建p2p聊天室
百行go代码构建p2p聊天室 百行go代码构建p2p聊天室 1. 上手使用 2. whisper 原理 3. 源码解读 3.1 参数说明 3.1 连接主节点 3.2 我的标识 3.2 配置我的节点 3 ...
- web3js learning
使用console.log(web3.version.api);来查看了web3的版本是0.20.1, 参考文档在:https://github.com/ethereum/wiki/wiki/Java ...
- 超计算(Hyper computation)模型
超计算(Hyper computation)模型 作者:Xyan Xcllet链接:https://www.zhihu.com/question/21579465/answer/106995708来源 ...
- Druid学习之路 (一)Druid初识
作者:Syn良子 出处:https://www.cnblogs.com/cssdongl/p/9588079.html 转载请注明出处 最近在学习和使用Druid.觉得一些章节有必要按照自己的理解翻译 ...
- 以太坊系列之十八: 百行go代码构建p2p聊天室
百行go代码构建p2p聊天室 百行go代码构建p2p聊天室 1. 上手使用 2. whisper 原理 3. 源码解读 3.1 参数说明 3.1 连接主节点 3.2 我的标识 3.2 配置我的节点 3 ...
- SEER见证人操作指南
SEER的见证人设计 共识方式 在区块生产者的产生方式上,SEER采取了PoS的共识方式,用户通过智能合约抵押自己持有的SEER竞选主力见证人(区块生产者). 对于SEER区块链来说,制约区块链TPS ...
- windows开机自启动的django服务
做了一个django项目,想部署在win10的笔记本电脑上,可以开机后台自动启动.找了很多的方法.最后成功了. 参考了这个博主的内容. https://blog.csdn.net/qq_3595961 ...
随机推荐
- tortoisesvn 本项目的忽略项
https://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-propertypage.html Adding and Editing Pr ...
- transient关键字的理解
谈到这个transient这个关键字,我们应该会立马想到序列化这个过程:什么是序列化?什么又是反序列化呢?序列化就是将对象转化内成二进制,而反序列化就是就二进制文件转换成对象的过程.一旦变量使用了tr ...
- 设置MySQL允许外网访问(转)
设置MySQL允许外网访问 1.修改配置文件sudo vim /etc/mysql/my.cnf把bind-address参数的值改成你的内/外网IP或0.0.0.0,或者直接注释掉这行. 2.登 ...
- Sequelize框架:
1.安装mysql支持: npm install mysql --save-dev 2.安装sequelize npm install sequelize --save-dev 3.创建ORM对象 v ...
- repeater的command事件用法
当Repeater里面循环控件时就会用到command, 是Repeater控件的原生事件用法 Repeater里面如果循环控件,控件的ID是会被改变的 repeater.itemcommand+= ...
- mac 彻底卸载Paragon NTFS
之前安装了paragon NTFS,试用期过了就卸载了,但是每天还是会提示“试用期已到期”,看着很烦. 百度了一下,发现网上的版本可能比较老了,和我的情况不太一样,但道理应该是一样的. 彻底删除方法: ...
- gearman安装问题总结
解决configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers. yum ...
- tee 可以看见输出并将其写入到一个文件中
如下使用tee命令在屏幕上看见输出并同样写入到日志文件my.log中: [root@localhost home]# top |tee my.log tee可以保证你同时在屏幕上看到top的 ...
- 关于const指针的误解
转自 http://blog.csdn.net/yingxunren/article/details/3968800 const char*, char const*, char*const的区别问题 ...
- poj3171 Cleaning Shifts
传送门 题目大意 有一个大区间和n个小区间,每个小区间都有一个代价,求最少付出多少代价可以使得小区间完全覆盖大区间. 分析为了方便起见我们先将s变为2,其它的位置都对应更改以便后期处理.我们考虑以t1 ...