赞
踩
目录
上机练习5的作业我昨天就写完了,但是因为它是今天的作业,我就今天发咯。
- # atm 机模拟器:使用 main 入口,结合函数与列表等实现
- # 核心数据如下
- # data=[{'id':'1001','passwd':'123456','bat':'1000'},
- # {'id':'1002','passwd':'123456','bat':'2000'},
- # {'id':'1003','passwd':'123456','bat':'3000'},
- # {'id':'1004','passwd':'123456','bat':'4000'}]
- # ---------- 欢迎使用 ATM 机 ----------
- # 请输入账号:1002
- # 请输入密码:123
- # 账号或密码错误
- # ---------- 欢迎使用 ATM 机 ----------
- # 请输入账号:1002
- # 请输入密码:123456
- # 登录成功,请进行下列操作:
- # ----------操作页面----------
- # 1.存款
- # 2.取款
- # 3.查询余额
- # 4.转账
- # 5.退出
- # ----------------------------
- # 请输入操作选项:3
- # 您当前的可用余额为:2000
- # ----------操作页面----------
- # 1.存款
- # 2.取款
- # 3.查询余额
- # 4.转账
- # 5.退出
- # ----------------------------
- # 请输入操作选项:1
- # 请输入存款金额:2000
- # 您已成功存款 2000,您当前的余额为:4000
- # ----------操作页面----------
- # 1.存款
- # 2.取款# 3.查询余额
- # 4.转账
- # 5.退出
- # ----------------------------
- # 请输入操作选项:2
- # 请输入取款金额:5000
- # 您的余额不足!
- # ----------操作页面----------
- # 1.存款
- # 2.取款
- # 3.查询余额
- # 4.转账
- # 5.退出
- # ----------------------------
- # 请输入操作选项:2
- # 请输入取款金额:200
- # 您已成功取款 200,您当前余额为:3800
- # ----------操作页面----------
- # 1.存款
- # 2.取款
- # 3.查询余额
- # 4.转账
- # 5.退出
- # ----------------------------
- # 请输入操作选项:4
- # 请输入收款账号:1003
- # 请输入转账金额:200
- # 您已成功转账 200,您当前余额为:3600
- # 注:判断收款账号不能是自己,判断账号是否存在,判断自己余额是否够转账
- # ----------操作页面----------
- # 1.存款
- # 2.取款
- # 3.查询余额
- # 4.转账
- # 5.退出
- # ----------------------------
- # 请输入操作选项:5
- # 请问是否退出? y/n:y
- # 已成功退出,请取回您的银行卡
- # ----------------------------
- # 请输入操作选项:6
- # 输入错误data=[{'id':'1001','passwd':'123456','bat':'1000'},
- {'id':'1002','passwd':'123456','bat':'2000'},
- {'id':'1003','passwd':'123456','bat':'3000'},
- {'id':'1004','passwd':'123456','bat':'4000'}]
- # 登录
- def login():
- errorcount=0
- while 1:
- print("---------- 欢迎使用 ATM 机 ----------")
- id=input("请输入账号:")
- passwd=input("请输入密码:")
- for i in data:
- if id==i['id'] and passwd==i['passwd']:
- print("登录成功,请进行下列操作:")
- return id
- errorcount+=1
- if 7-errorcount<=0:
- print("密码错误次数过多,请稍后再试")
- return None
- else :
- print(f"账号或密码错误,你还有{7-errorcount}次机会")
- pass
- # 取钱
- def DrawMoney(id):
- money=int(input("请输入取款金额:"))
- if money<=0:
- print("取款金额不正确!")
- else:
- for i in data:
- if id==i['id']:
- if int(i['bat'])<money:
- print("您的余额不足!")
- break
- else:
- i['bat']=str(int(i['bat'])-money)
- print(f"您已成功取款{money},您当前余额为:
- {i['bat']}")
- break
- pass
- # 存钱
- def SaveMoney(id):
- money=int(input("请输入存款金额:"))
- if money<=0:print("存款金额不正确!")
- else:
- for i in data:
- if id==i['id']:
- i['bat']=str(int(i['bat'])+money)
- print(f"您已成功存款{money},您当前的余额为:
- {i['bat']}")
- break
- pass
- # 查询余额
- def CheckMoney(id):
- for i in data:
- if id==i['id']:
- print(f"您当前的可用余额为:{i['bat']}")
- break
- pass
- #转账
- def GiveMoney(id):
- give_id=input("请输入收款账号:")
- if give_id==id:
- print("收款账号不能是自己!")
- else:
- for i in data:
- if give_id==i['id']:
- money=int(input("请输入转账金额:"))
- if money<=0:
- print("转账金额不正确!")
- return
- else:
- for j in data:
- if id==j['id']:
- if int(j['bat'])<money:
- print("您的余额不足!")
- return
- else:
- i['bat']=str(int(i['bat'])+money
- )
- j['bat']=str(int(j['bat'])-money
- )
- print(f"您已成功转账{money},您当前
- 余额为:{j['bat']}")
- return
- print("账号不存在!")pass
- #操作界面
- def Operation(id):
- if id==None:
- return
- while 1:
- op=int(input("""----------操作页面----------
- 1.存款
- 2.取款
- 3.查询余额
- 4.转账
- 5.退出
- ----------------------------
- 请输入操作选项:"""))
- if op==1:
- SaveMoney(id)
- elif op==2:
- DrawMoney(id)
- elif op==3:
- CheckMoney(id)
- elif op==4:
- GiveMoney(id)
- elif op==5:
- QuiteATM=input("请问是否退出? y/n:")
- if QuiteATM=="y":
- print("已成功退出,请取回您的银行卡")
- return
- else:
- continue
- else:
- print("输入错误")
- pass
- if __name__=="__main__":
- id=login()
- Operation(id)
- # 1.修改 atm 取款机数据为持久化永久存储,csv 读取实现(分别使用函数实
- 现读和取),使
- # 用异常处理 atm 取款机读取 csv 时判断文件是否存在,如果文件不存在提示"
- 没有文件使用
- # 原数据"
- # 2.使用异常在 atm 取款机的项目中存款函数中:
- # 如果输入的存款金额不是整数则提示:请输入整数;
- # 如果输入的存款金额不是 100 的倍数或者是负数则提示:请输入 100 的倍数
- 的正整数
- import csv
- data=[]
- # 存入 csv 文件
- def write_csv():
- with open('/root/atmdata.csv','w',encoding='UTF-8') as
- sdata:
- savedata=csv.DictWriter(sdata,fieldnames=['id','passwd',
- 'bat'])
- savedata.writeheader()
- savedata.writerows(data)
- sdata.close()
- # 读取 csv 文件
- def read_csv():
- try:
- with open('/root/atmdata.csv','r',encoding='UTF-8') as
- fdata:
- datadict=csv.DictReader(fdata)
- data.clear()
- for i in datadict:
- data.append(i)
- fdata.close()
- except FileNotFoundError:
- print("没有文件使用原数据")# 注销账号
- def DropMyCounter(id):
- DropConfirm=input("确认一下该账户的密码:")
- for i in data:
- if id==i['id'] and DropConfirm==i['passwd']:
- data.remove(i)
- print("注销成功!")
- write_csv()
- return
- print("密码不正确!")
- pass
- # 注册账号
- def Register():
- try:
- id=input("请输入您的账号:")
- passwd=input("请输入您的密码:")
- if id in [i['id'] for i in data]:
- raise Exception("账号已存在!")
- if len(id)<4 or len(passwd)<6:
- raise Exception("账号 id 不能小于 4 位,密码不能小于 6 位!
- ")
- data.append({'id':id,'passwd':passwd,'bat':'0'})
- print("注册成功!")
- write_csv()
- except Exception as e:
- print("注册失败!",e)
- pass
- # 登录界面
- def login():
- errorcount=0
- while 1:
- print("---------- 欢迎使用 ATM 机 ----------")
- RegisterOrLogin=input("请选择登录或注册(R 注册,L 登录,Q 退
- 出):")
- if RegisterOrLogin=="R":
- Register()
- continue
- elif RegisterOrLogin=="L":
- id=input("请输入账号:")
- passwd=input("请输入密码:")
- for i in data:
- if id==i['id'] and passwd==i['passwd']:
- print("登录成功,请进行下列操作:")return id
- errorcount+=1
- if 7-errorcount<=0:
- print("密码错误次数过多,请稍后再试")
- return None
- else :
- print(f"账号或密码错误,你还有{7-errorcount}次机会
- ")
- elif RegisterOrLogin=="Q":
- return None
- else:
- print("输入错误,请重新输入")
- pass
- # 取钱
- def DrawMoney(id):
- try:
- money=int(input("请输入取款金额:"))
- if money<=0:
- print("取款金额不正确!")
- else:
- for i in data:
- if id==i['id']:
- if int(i['bat'])<money:
- print("您的余额不足!")
- break
- else:
- i['bat']=str(int(i['bat'])-money)
- print(f"您已成功取款{money},您当前余额为:
- {i['bat']}")
- write_csv()
- break
- except ValueError:
- print("请输入整数!")
- except Exception as e:
- print("其它错误,请联系管理员!",e)
- pass
- # 存钱
- def SaveMoney(id):
- try:
- money=int(input("请输入存款金额:"))
- if money%100!=0 or money<=0:
- print("存款金额不正确!请输入 100 的倍数的正整数!")else:
- for i in data:
- if id==i['id']:
- i['bat']=str(int(i['bat'])+money)
- print(f"您已成功存款{money},您当前的余额为:
- {i['bat']}")
- write_csv()
- break
- except ValueError:
- print("请输入整数!")
- except Exception as e:
- print("其它错误,请联系管理员!",e)
- pass
- # 查询余额
- def CheckMoney(id):
- for i in data:
- if id==i['id']:
- print(f"您当前的可用余额为:{i['bat']}")
- break
- pass
- #转账
- def GiveMoney(id):
- give_id=input("请输入收款账号:")
- if give_id==id:
- print("收款账号不能是自己!")
- else:
- for i in data:
- if give_id==i['id']:
- try:
- money=int(input("请输入转账金额:"))
- if money<=0:
- print("转账金额不正确!")
- return
- else:
- for j in data:
- if id==j['id']:
- if int(j['bat'])<money:
- print("您的余额不足!")
- return
- else:
- i['bat']=str(int(i['bat'])+m
- oney)j['bat']=str(int(j['bat'])-m
- oney)
- print(f"您已成功转账{money},
- 您当前余额为:{j['bat']}")
- write_csv()
- return
- except ValueError:
- print("请输入整数!")
- return
- except Exception as e:
- print("其它错误,请联系管理员!",e)
- return
- print("账号不存在!")
- pass
- #操作界面
- def Operation(id):
- if id==None:
- return
- while 1:
- op=input("""----------操作页面----------
- 1.存款
- 2.取款
- 3.查询余额
- 4.转账
- 5.退出
- 6.注销账号
- ----------------------------
- 请输入操作选项:""")
- if op=='1':
- SaveMoney(id)
- elif op=='2':
- DrawMoney(id)
- elif op=='3':
- CheckMoney(id)
- elif op=='4':
- GiveMoney(id)
- elif op=='5':
- QuiteATM=input("请问是否退出? y/n:")
- if QuiteATM=="y":
- print("已成功退出,请取回您的银行卡")
- return
- else:
- continueelif op=='6':
- DropMyCounter(id)
- return
- else:
- print("输入错误")
- pass
- if __name__=="__main__":
- read_csv()
- id=login()
- Operation(id)
- # 3.将内容“诚挚邀请您来参加本次宴会”追加到“邀请函.txt”文件末尾。
- # 4.读取邀请函的内容。
- with open('/root/python/邀请函.txt', 'a', encoding='UTF-8') as f:
- f.write("诚挚邀请您来参加本次宴会\n")
- f.close()
- with open('/root/python/邀请函.txt', 'r', encoding='UTF-8') as f:
- data=f.read()
- print(data)
- f.close()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。