'''
卡card:
属性:卡号 密码 余额 是否锁定
行为:
管理员:admin
属性:账号 密码
行为:登录
ATM机:atm
属性:保存所有信息的表
行为:登录页面 开户 查询 存储 取款 转账 改密 锁定 解锁 销户 退出
用户:user
属性:姓名 身份证 电话 卡
行为:
'''
from admin import Admin
from atm import ATM
import time
if __name__ == '__main__':
ad=Admin('jxk',123)
isSuf=ad.landUI()
if isSuf==True:
atm=ATM()
time.sleep(2)
while True:
atm.printUI()
key=input('请输入选项:')
if key=='1':
atm.kaihu()
elif key=='2':
atm.chaxun()
elif key == '3':
atm.qukuan()
elif key=='4':
atm.cunkuan()
elif key == '5':
atm.zhuanzhang()
elif key == '6':
atm.gaimi()
elif key == '7':
atm.suoding()
elif key == '8':
atm.jiesuo()
elif key=='9':
atm.xiaohu()
else:
atm.tuichu()
from card import Card
from user import User
import random
class ATM:
def __init__(self):
self.user_dic={}
def printUI(self):
print("************************************")
print("* 开户(1) 查询(2) *")
print("* 取款(3) 存款(4) *")
print("* 转账(5) 改密(6) *")
print("* 锁定(7) 解锁(8) *")
print("* 销户(9) 退出(t) *")
print("************************************")
def kaihu(self):
name = input('请输入你的用户名:')
IDnum = input('请输入你的身份证:')
phonenum = input('请输入你的手机号')
money = int(input('请输入你的预存款金额,不低于10块钱:'))
if money >= 10:
password = input('请设置你的密码:')
password_again = input('请再次设置你的密码:')
if password == password_again:
kaihu_num = ''
i = 1
while i <= 6:
a = str(random.randint(0, 9))
kaihu_num += a
i += 1
c = Card(kaihu_num, password, money)
u = User(name, phonenum, IDnum, c)
self.user_dic[kaihu_num] = u
print('开户成功,卡号为:%s' % kaihu_num)
else:
print('前后密码不一样,开户失败')
else:
print('余额不足,开户失败')
def chaxun(self):
cardnum=input('请输入你的卡号')
u=self.user_dic.get(cardnum)
if u!=None:
if u.card.isLock!=True:
for i in range(3):
mima = input('请输入你的密码')
if mima == u.card.passwd:
print('卡号:%s 持卡人:%s 余额:%d'%(u.card.cardNum,u.name,u.card.yu))
break
else:
print('密码错误,查询失败')
else:
print('机会用完,卡被锁定')
u.card.isLock=True
else:
print('卡被锁定,请解锁')
else:
print('卡号不存在,查询失败')
def qukuan(self):
'''
1.输入卡号,检测是否有卡
2.检测是否锁定
3.输入密码 检测密码是否正确
4.输入取款金额,判断是否大于余额
5.扣钱 打印余额
:return:
'''
cardnum=input('请输入卡号:')
u=self.user_dic.get(cardnum)
if u==None:
print('没有此卡,取款失败')
return False
if u.card.isLock==True:
print('卡被锁定,请去解锁')
return False
for i in range(3):
mima = input('请输入密码:')
if mima != u.card.passwd:
print('密码错误,取款失败')
else:
break
else:
print('三次机会用完,卡已锁定,请去解锁')
u.card.isLock=True
return False
money=int(input('请输入取款金额:'))
if money>u.card.yu:
print('余额不足,取款失败')
return False
u.card.yu-=money
print('取款成功,卡%s的余额为%d'%(u.card.cardNum,u.card.yu))
def cunkuan(self):
cardnum = input('请输入卡号:')
u = self.user_dic.get(cardnum)
if u == None:
print('没有此卡,存款失败')
return False
if u.card.isLock == True:
print('卡被锁定,请去解锁')
return False
for i in range(3):
mima = input('请输入密码:')
if mima != u.card.passwd:
print('密码错误,存款失败')
else:
break
else:
print('三次机会用完,卡已锁定,请去解锁')
u.card.isLock = True
return False
money=int(input('请输入你的存款金额:'))
u.card.yu+=money
print('存款成功,卡%s的余额为%d' % (u.card.cardNum, u.card.yu))
def zhuanzhang(self):
cardnum = input('请输入你的卡号:')
u = self.user_dic.get(cardnum)
if u == None:
print('没有此卡,转账失败')
return False
if u.card.isLock == True:
print('卡被锁定,请去解锁')
return False
for i in range(3):
mima = input('请输入密码:')
if mima != u.card.passwd:
print('密码错误,转账失败')
else:
break
else:
print('三次机会用完,卡已锁定,请去解锁')
u.card.isLock = True
return False
other_cardnum=input('请输入对方卡号:')
other_u=self.user_dic.get(other_cardnum)
if other_u==None:
print('没有此卡,转账失败')
return False
print('请确实收款人信息:')
print('卡号:%s 持卡人:%s 身份证:%s'%(other_cardnum,other_u.name,other_u.ID))
money=int(input('请输入转账金额:'))
if money>u.card.yu:
print('余额不足,转账失败')
return False
u.card.yu-=money
other_u.card.yu+=money
print('转账成功,本卡内余额还剩:%d'%(u.card.yu))
def gaimi(self):
cardnum = input('请输入卡号:')
u = self.user_dic.get(cardnum)
if u == None:
print('没有此卡,取款改密失败')
return False
if u.card.isLock == True:
print('卡被锁定,请去解锁')
return False
for i in range(3):
mima = input('请输入密码:')
if mima != u.card.passwd:
print('密码错误,改密失败')
else:
break
else:
print('三次机会用完,卡已锁定,请去解锁')
u.card.isLock = True
return False
print('请输入你的名字和身份证号码')
name=input('名字:')
id=input('身份证号码:')
if name!=u.name or id!=u.ID:
print('身份信息不匹配,改密失败')
return False
mima1=input('请输入新密码:')
mima2=input('请再次输入密码:')
if mima1!=mima2:
print('前后密码不一致,改密失败')
return False
print('改密成功')
u.card.passwd=mima1
def suoding(self):
cardnum = input('请输入卡号:')
u = self.user_dic.get(cardnum)
if u == None:
print('没有此卡,锁定失败')
return False
print('锁定需要确认个人信息')
name=input('姓名:')
phone=input('手机号:')
if name!=u.name or phone!=u.phone:
print('信息不匹配,锁定失败')
return False
print('锁定成功,该卡不能操作,使用请解锁')
u.card.isLock=True
def jiesuo(self):
cardnum = input('请输入卡号:')
u = self.user_dic.get(cardnum)
if u == None:
print('没有此卡,解锁失败')
return False
print('解锁需要确认个人信息')
name = input('姓名:')
phone = input('手机号:')
if name != u.name or phone != u.phone:
print('信息不匹配,解锁失败')
return False
print('解锁成功,该卡可以正常使用')
u.card.isLock = False
def xiaohu(self):
cardnum=input('请输入你的卡号:')
u=self.user_dic.get(cardnum)
if u==None:
print('卡号不存在,销户失败')
return False
if u.card.isLock==True:
print('卡被锁定,请去解锁')
return False
for i in range(3):
mima = input('请输入密码:')
if mima != u.card.passwd:
print('密码错误,销户失败')
else:
break
else:
print('三次机会用完,卡已锁定,请去解锁')
u.card.isLock=True
return False
print('销户需要你的全部个人信息,请输入')
name=input('姓名:')
id=input('身份证号:')
phone=input('电话:')
if name!=u.name or id!=u.ID or phone!=u.phone:
print('信息确实错误,销户失败')
return False
print('当前卡内余额为%d,销户后余额将捐献给慈善机构'%u.card.yu)
isY=input('是否确认销户,按n取消,其他任意键确认')
if isY=='n':
print('已取消销户操作')
return False
self.user_dic.pop(cardnum)
print('销户成功')
def tuichu(self):
print('退出成功,请收好你的磁卡.....')
exit()
class User:
def __init__(self,name,phone,ID,card):
self.name=name
self.phone=phone
self.ID=ID
self.card=card
四、管理员类(admin)
class Admin:
def __init__(self,name,passwd):
self.name=name
self.passwd=passwd
def landUI(self):
print("---------------------欢迎来到XXX银行------------------------")
name = input("请输入管理员账号:")
passwd = int(input("请输入管理员密码:"))
if name == self.name and passwd == self.passwd:
print("!!!!登陆成功!!!!请稍后。。。。")
return True
else:
print("账号或密码错误,登陆失败")
五、卡类(card)
'''
卡:Card
属性:卡号、密码、余额、是否锁定(True锁定了False未锁定)
行为:
'''
class Card:
def __init__(self,cardNum,passwd,yu):
self.cardNum=cardNum
self.passwd=passwd
self.yu=yu
self.isLock=False