You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

138 lines
5.8 KiB

6 months ago
from user import User
from card import Card
class ATM:
def __init__(self, alluser):
self.alluser = alluser
def randomiCardId(self):
import random
while True:
str_data = '' # 存储卡号
for i in range(6):
ch = chr(random.randrange(ord('0'), ord('9') + 1))
str_data += ch
if not self.alluser.get(str): # 判断卡号是否重复
return str_data
def creatUser(self):
name = input("请输入姓名:")
Uid = input("请输入身份证号:")
phone = input("请输入手机号:")
prestMoney = float(input("请输入预存金额:"))
if prestMoney <= 0:
print("预存款输入有误,开户失败")
return -1
oncePwd = input("请输入密码:")
passWord = input("请再次输入密码:")
if passWord != oncePwd:
print("两次密码输入不同......")
return -1
print("密码设置成功,请牢记密码: %s " % passWord)
cardId = self.randomiCardId()
card = Card(cardId, oncePwd, prestMoney) # 创建卡
user = User(name, Uid, phone, card) # 创建用户
self.alluser[cardId] = user # 存入用户字典
print("您的开户已完成,请牢记开户账号: %s" % cardId)
def checkpwg(self, realPwd):
for i in range(3):
psd2 = input("请输入密码:")
if realPwd == psd2:
return True
print("密码输错三次,系统自动退出......")
return False
def lockCard(self):
inptcardId = input("请输入您的卡号:")
user = self.alluser.get(inptcardId)
if not self.alluser.get(inptcardId):
print("此卡号不存在...锁定失败!")
return -1
if user.card.cardLock:
print("该卡已经被锁定,无需再次锁定!")
return -1
if not self.checkpwg(user.card.cardPwd): # 验证密码
print("密码错误...锁定失败!!")
return -1
user.card.cardLock = True
print("该卡被锁定成功!")
def searchUser(self, base=1):
if base == 2:
inptcardId = input("请输入转出主卡号:")
elif base == 3:
inptcardId = input("请输入转入卡号:")
elif base == 1:
inptcardId = input("请输入您的卡号:")
user = self.alluser.get(inptcardId)
# 如果卡号不存在,下面代码就会执行
if not self.alluser.get(inptcardId):
print("此卡号不存在...查询失败!")
return -1
if user.card.cardLock:
print("该用户已经被锁定...请解卡后使用!")
return -1
if not self.checkpwg(user.card.cardPwd): # 验证密码
print("密码错误过多...卡已经被锁定,请解卡后使用!")
user.card.cardLock = True
return -1
if not base == 3: #查询转入账户 不打印余额
print("账户: %s 余额: %.2f " % (user.card.cardId, user.card.money))
return user
def getMoney(self):
userTF = self.searchUser()
if userTF != -1:
if userTF.card.cardId != '':
inptMoney = float(input("请输入取款金额:"))
if inptMoney > float(userTF.card.money):
print("输入的金额大于余额,请先查询余额!")
return -1
userTF.card.money = float(userTF.card.money) - inptMoney
print("取款成功! 账户: %s 余额: %.2f " % (userTF.card.cardId, userTF.card.money))
else:
return -1
def saveMoney(self):
userTF = self.searchUser()
if userTF != -1:
if not userTF.card.cardLock == True:
if userTF.card.cardId != '':
inptMoney = float(input("请输入要存入得金额:"))
if inptMoney < 0:
print("请输入正确金额")
else:
userTF.card.money += inptMoney
print("存款成功! 账户: %s 余额: %.2f " %
(userTF.card.cardId, userTF.card.money))
else:
return -1
def transferMoney(self):
MasterTF = self.searchUser(base=2)
if (MasterTF == -1):
return -1
userTF = self.searchUser(base=3)
if (userTF == -1):
return -1
in_tr_Money = float(input("请输入转账金额:"))
if MasterTF.card.money >= in_tr_Money:
str = input("您确认要继续转账操作吗Y/N")
if str == "Y":
MasterTF.card.money -= in_tr_Money
print("转账成功! 账户: %s 余额: %.2f " %
(MasterTF.card.cardId, MasterTF.card.money))
else:
print("转账失败,中止了操作")
else:
print("转账失败,余额不足! 账户: %s 余额: %.2f " %
(MasterTF.card.cardId, MasterTF.card.money))
def unlockCard(self):
inptcardId = input("请输入您的卡号:")
user = self.alluser.get(inptcardId)
while 1:
if not self.alluser.get(inptcardId):
print("此卡号不存在...解锁失败!")
return -1
elif not user.card.cardLock:
print("该卡未被锁定,无需解锁!")
break
elif not self.checkpwg(user.card.cardPwd):
print("密码错误...解锁失败!!")
return -1
user.card.cardLock = False # 解锁
print("该卡 解锁 成功!")
break