面向对象之-------------------永不停机的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 ...
随机推荐
- 剑指offer 04_替换字符串中的空格
#include <stdio.h> void ReplaceBlank(char string[],int length){ if(string == NULL || length == ...
- 重命名File
File completeFile = new File(mFilePath + mFileName); if (completeFile.exists()) { File fileWithSuffi ...
- JAVA基础知识总结6(面向对象特征之一:多态)
多 态:函数本身就具备多态性,某一种事物有不同的具体的体现. 体现:父类引用或者接口的引用指向了自己的子类对象. Animal a = new Cat(); 多态的好处:提高了程序的扩展性. 多态的弊 ...
- 全文检索技术---Lucene
1 Lucene介绍 1.1 什么是Lucene Lucene是apache下的一个开源的全文检索引擎工具包.它为软件开发人员提供一个简单易用的工具包(类库),以方便的在目标系统中实现 ...
- ROS探索总结(一)——ROS简介
转自古-月 ROS探索总结(一)——ROS简介 一.历史 随着机器人领域的快速发展和复杂化,代码的复用性和模块化的需求原来越强烈,而已有的开源机器人系统又不能很好的适应需求.2010年Willow G ...
- Struts2框架06 ValueStack
原文地址:点击前往 1 什么是ValueStack 称为值栈,Struts提供的共享数据的数据结构 2 为什么要使用ValueStack 从控制器向浏览器传递数据 存储与请求相关的对象信息(sessi ...
- R: 绘图 barplot
问题:barplot 18.5.16 怎么绘制 barplot,用两种方式:基础绘图 & ggplot2解决方案: 基础绘图 barplot(height, width = 1, space ...
- HTML中关于url、scr、href的区别
URL是什么 URL:Uniform Resource Locators(统一资源定位器)的简写,Web浏览器通过URL从Web服务器请求页面. url不是属性,src和href是属性,src用于替换 ...
- Tomact和XML配置文件
1 Http协议2 Tomcat服务器3 编写xml4 通过DTD约束编写指定格式的XML 5 通过Schema约束编写指定格式的XML6 使用D0M4J解析xml================== ...
- PHP中 Include 与 Require之间的区别
*引入机制 如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找.如果在 include_path 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工 ...