python模拟ATM系统
#!/usr/bin/env python#coding=utf8
import pickle
import sys
import time
import os
IOSTIME = '%Y-%m-%d %X'
Now = time.strftime(IOSTIME,time.localtime())
reload(sys)
sys.setdefaultencoding('utf-8')
##现在时间
def NOW():
global Now
Now = time.strftime(IOSTIME,time.localtime())
return Now
##读入数据
with open('banks_counts.pkl') as bank_infos:
UserInfos = pickle.load(bank_infos)
print UserInfos
##完成写入功能
def Write_DB():
with open('banks_counts.pkl','w') as New_bank_infos:
pickle.dump(UserInfos,New_bank_infos)
#for userinfo in UserInfos.keys():
# print UserInfos
##查询金额
def LookHow(HM):
print "现在时间是: %s,银行余额: %s RMB!" %(NOW(),HM)
#提现功能
def TakeCrash(HOW,WHO):
ShouXuFei = HOW * 0.01 #手续费为1/100
if (HOW + ShouXuFei) > WHO:
print "余额不足提取!"
else:
WHO = WHO - HOW- ShouXuFei
print "您要提取的金额为:%s,手续费: %s,余额为:%s RMB!" %(HOW,ShouXuFei,WHO)
with open(UserCard,'a+') as f:
f.write("%s:%s提款%s\n" %(NOW(),UserCard,HOW))
UserInfos = WHO
####转账功能
def ZhuangZ(From,TO,How):
print From,TO
if How > From:
print "%s 账号余额不足!" %How
else:
From = From - How
TO = TO + How
print "转出金额: %s RMB,余额为: %s RMB" %(How,From)
UserInfos = From
UserInfos = TO
with open(UserCard,"a+") as f1:
f1.write("%s:%s扣款%s,输出到:%s!\n" %(NOW(),UserCard,How,TO_Card))
with open(TO_Card,"a+") as f2:
f2.write("%s:%s收到来自%s的%s款!\n" %(NOW(),TO_Card,UserCard,How))
###还款功能
def AddMoney(HOW,WHO):
if HOW > 0:
print("确定还款:%s" %HOW)
UserInfos = UserInfos + HOW
with open(WHO,"a+") as f:
f.write("%s:还款%s\n" %(NOW(),HOW))
##流水查询
def Logs(WHO):
if os.path.isfile(os.path.join(os.getcwd(),WHO)):
with open(WHO,'r') as f:
for line in f.readlines():
else:
print("该账号还没有产生交易流水!")
##最后一次访问时间
def LastAccess(WHO):
UserInfos = NOW()
# Write_DB()
##密码修改
def ChgPwd(WHO,NewPass):
UserInfos = NewPass
print("密码修改成功!")
Contex = ["查询余额","转账","提现","流水","还款","修改密码","退出"]
ErrorCount = 0
while ErrorCount < 3 :
for userinfo in UserInfos.keys():
UserCard = raw_input("[输入quit|exit退出系统]请输入您的银行卡:").strip()
# if UserCard == 'quit':sys.exit("您选择退出!")
if UserCard == '':continue
elif UserCard == 'quit' or UserCard == 'exit':
sys.exit("您选择退出!")
elif UserCard not in UserInfos.keys():
print("您输入的银行卡不存在!")
continue
# else:
# print("您输入的有误!")
UserPwd = raw_input("[输入quit|exit退出系统]请输入您的密码:").strip()
ifUserPwd == 'quit' or UserPwd == "exit":
sys.exit("您选择退出!")
try:
ifUserInfos != '0':
print "%s 账号被锁定!" % UserCard
ErrorCount +=1
continue
except KeyError:
print "%s 账号不存在!" %UserCard
ErrorCount +=1
continue
iflen(UserPwd) == 0 or UserPwd !=UserInfos:
print "密码错误!"
ErrorCount +=1
continue
else:
print "%s 登录成功!您最后一次访问在: %s"%(UserCard,UserInfos)
LastAccess(UserCard) #登录成功,写入访问时间
while True:
print(("请选择你需要的服务:").center(90,"+"))
for i in range(len(Contex)):
print i,Contex.decode("utf-8"),'\t',
print("+" * 80 + '\n')
choice = raw_input("[按6或输入quit退出系统]请选择您的业务编号:")
if len(choice) == 0:continue
elif choice == 'quit' or int(choice) == 6 :
Write_DB()
print("您选择退出系统!")
break
elif int(choice) == 0:
LookHow(UserInfos)
elif int(choice) == 1:
TO_Card = raw_input("请输入对方银行卡:").strip()
if len(TO_Card) == 0 or TO_Card == UserInfos:
print "账号错误!"
continue
HowZ = raw_input("输入转账金额:").strip()
if len(HowZ) == 0:
print "转账金额不能为0!"
try:
UserInfos
except KeyError:
print "对方账号: %s 不存在!" % TO_Card
continue
else:
UserInfos = int(UserInfos)
ZhuangZ(UserInfos,UserInfos,int(HowZ))
elif int(choice) == 2:
HowTake = raw_input("请选择提取金额:")
HowTake = int(HowTake)
TakeCrash(HowTake,UserInfos)
Write_DB()
elif int(choice) == 4:
# print UserCard
HowAdd = int(raw_input("请输入您要还款的金额:"))
AddMoney(HowAdd,UserCard)
Write_DB()
elif int(choice) == 3:
Logs(UserCard)
elif int(choice) == 5:
NewPass = raw_input("请输入新的密码:")
NewPass2 = raw_input("请再输入一次新密码:")
if NewPass == NewPass2:
ChgPwd(UserCard,NewPass)
Write_DB()
else:
sys.exit("两次输入的密码不一致!退出密码修改!")
else:
print("你的账号已锁,请到柜台解锁!")
UserInfos = '1'
UserInfos = NOW()
Write_DB()
页:
[1]