面向对象之-------------------永不停机的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 ...
随机推荐
- re 模块 常用正则表达式符号 最常用的匹配语法
常用正则表达式符号1 '.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 '^' 匹配字符开头,若指定flags MULTILINE, ...
- java中用正则表达式判断中文字符串中是否含有英文或者数字
public static boolean includingNUM(String str)throws Exception{ Pattern p = Pattern.compile(" ...
- cocos2d-js 定时器
1.scheduleUpdate 节点中有scheduleUpdate接口,通过这个接口,可以让游戏在每帧执行都执行update方法 var ScheduleUpdateLayer = cc.Laye ...
- opencv3.2加载图片
#include <opencv2/opencv.hpp>#include <iostream> using namespace cv;using namespace std; ...
- 数据结构_just_sort
问题描述 给定两个序列 a b,序列 a 原先是一个单调递增的正数序列,但是由于某些原因,使得序列乱序了,并且一些数丢失了(用 0 表示).经过数据恢复后,找到了正数序列 b ,且序列 a 中 0 的 ...
- Makefile的使用
Makefile 使用 一.实验说明 课程说明 在先前的课程中,我们已经学习了 gcc 和 gdb 的使用.本节课程中,我们将介绍 Makefile 的使用.Makefile带来的好处就是--&quo ...
- Samy Kamka、吴石黑客信息
Samy Kamka 10年前他就曾成功利用AJAX蠕虫攻击了当时最火的社交网站MySpace.com,2009年的Twitter蠕虫事件和2011年新浪微博蠕虫事件都沿袭了他当时的方法. 2005年 ...
- 2013蓝桥杯JavaA组T10 大臣的旅费(树的直径)
大臣的旅费 时间限制:1.0s 内存限制:256.0MB 问题描述 很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大 ...
- Web信息架构:设计大型网站(第3版) [美]Peter Morville 中文PDF扫描版
新版Web信息架构设计大型网站针对新技术做了全面更新——搭配新颖范例.全新场景及最佳实践信息——但是,其焦点依然放在基础原理上.其结构严谨,图文并貌,内容涵盖了信息架构基本原理和实践应用的方方面面. ...
- FineUI从iis6迁移到iis7.5上遇到的奇葩事情
前天把一台旧服务器上的windows2003+iis6上的fineui项目迁移到了win7+iis7上面来了,没有编译,直接以源码方式运行. 本来运行的好好的,昨天下午在上面用vs2010打开了一下看 ...