#银行自动提款机系统.py
import time
from admin import Admin
from atm import ATM
import pickle
import os
def main():
#界面对象
admin = Admin()
#管理员开机
admin.printAdminView()
if admin.adminOption():
return 1 #returnz之后就结束程序了,不执行下面的程序
absPath = os.getcwd()#获取当前文件所在的绝对路径
filepath = os.path.join(absPath, "allusers.txt")
f = open(filepath, "rb")
allUsers = pickle.load(f)
#提款机对象
atm = ATM(allUsers)
print(type(atm.allusers))
while True:
#登录成功打印系统功能界面
admin.printSysFunctionView()
#等待用户的操作
option = input("请输入您想办理的业务:")
if option == "1":
atm.createUser()
elif option == "2":
atm.searchUserInfo()
elif option == "3":
atm.getMoney()
elif option == "4":
atm.saveMoney()
elif option == "5":
atm.transfer()
elif option == "6":
atm.changePasswd()
elif option == "7":
atm.lockUser()
elif option == "8":
atm.unlockUser()
elif option == "9":
atm.newCard()
elif option == "10":
atm.killUser()
elif option == "t":
admin.printSysFunctionView()
elif option == "q":
if not admin.adminOption():
#将当前用户信息保存到文件中
f = open(filepath, "wb")
pickle.dump(atm.allusers, f)
f.close()
return 1
if __name__ == '__main__':
main()
#admin.py
import time
class Admin(object):
admin = "1"
passward = "1"
def printAdminView(self):
print("*******************************************************")
print("* *")
print("* *")
print("* 欢迎登陆史上最帅银行 *")
print("* *")
print("* *")
print("* *")
print("*******************************************************")
def printSysFunctionView(self):
print("*******************************************************")
print("* 开户(1) 查询(2) *")
print("* 取款(3) 存款(4) *")
print("* 转账(5) 改密(6) *")
print("* 锁定(7) 解锁(8) *")
print("* 补卡(9) 销户(10) *")
print("* *")
print("* 返回(t) *")
print("* 退出(q) *")
print("* *")
print("* *")
print("*******************************************************")
def adminOption(self):
inputAdmin = input("请输入管理员账号:")
if self.admin != inputAdmin:
print("账号输入有误!!")
return 1
inputPasswd = input("请输入管理员密码:")
if self.passward != inputPasswd:
print("密码输入有误!!")
return 1
#能执行到这里说明账号密码正确
print("操作成功!请稍后……")
time.sleep(2)
return 0
#atm.py
from card import Card
from user import User
import random
import time
class ATM(object):
def __init__(self, allUsers):
self.allusers = allUsers
def createUser(self):
#目标:向用户字典中添加一对键值对(卡号:用户)
name = input("请输入您的姓名:")
idCard = input("请输入您的身份证号码:")
phone = input("请输入您的电话号码:")
preMoney = int(input("请输入预存款金额:"))
if preMoney < 0:
print("预存款输入有误!!开户失败……")
return 1
onePasswd = input("请设置密码:")
#验证密码
if not self.checkPasswd(onePasswd):
print("密码输入错误!!开户失败……")
return 1
#所有需要的信息齐全了
cardStr = self.randomCardId()
card = Card(cardStr, onePasswd, preMoney)
user = User(name, idCard, phone, card)
#存到字典
self.allusers[cardStr] = user
print("开户成功!请牢记卡号(%s)……\n(系统将在 3 秒后自动返回!)" % (cardStr))
time.sleep(3)
#查询
def searchUserInfo(self):
cardNum = input("请输入您的卡号:")
user = self.allusers.get(cardNum)
if self.checkFunc(cardNum, user):
return 1
print("账号:%s 余额:%d\n(系统将在 5 秒后自动返回……)" % (user.card.cardId, user.card.cardMoney))
time.sleep(5)
#取款
def getMoney(self):
cardNum = input("请输入您的卡号:")
#验证是否存在卡号
user = self.allusers.get(cardNum)
if self.checkFunc(cardNum, user):
return 1
getNum = int(input("请输入取款金额:"))
user.card.cardMoney -= getNum
print("取款金额:%d 账户余额:%d 手续费:%d\n(系统将在 5 秒后自动返回……)" % (getNum, user.card.cardMoney, 0))
time.sleep(5)
#存款
def saveMoney(self):
cardNum = input("请输入您的卡号:")
#验证是否存在卡号
user = self.allusers.get(cardNum)
if self.checkFunc(cardNum, user):
return 1
getNum = int(input("请输入存款金额:"))
if getNum < 0:
print("输入有误!!取款失败……")
return 1
user.card.cardMoney += getNum
print("存款金额:%d 账户余额:%d 手续费:%d\n(系统将在 5 秒后自动返回……)" % (getNum, user.card.cardMoney, 0))
time.sleep(5)
#转账
def transfer(self):
cardNum = input("请输入您的卡号:")
#验证是否存在卡号
user = self.allusers.get(cardNum)
if self.checkFunc(cardNum, user):
return 1
tranNum = input("请输入转入账号:")
tranUser = self.allusers.get(tranNum)
if not tranUser:
print("该卡号不存在!!查询失败……")
return 1
#判断是否锁定
if tranUser.card.cardLock:
print("该卡已被锁定!!请解锁后重试……")
return 1
#验证密码
if not self.checkPasswd(tranUser.card.cardPasswd):
print("密码输入错误!!该卡已被锁定!!请解锁后重试……")
tranUser.card.cardLock = True
return 1
tranMoney = int(input("请输入转账金额:"))
if tranMoney > user.card.cardMoney:
print("余额不足!!转账失败……")
#开始转账
user.card.cardMoney -= tranMoney
tranUser.card.cardMoney += tranMoney
print("转账成功!转账金额:%d\n(系统将在 5 秒后自动返回……)" % (tranMoney))
time.sleep(5)
#改密
def changePasswd(self):
cardNum = input("请输入您的卡号:")
#验证是否存在卡号
user = self.allusers.get(cardNum)
if self.checkFunc(cardNum, user):
return 1
while True:
newPasswd = input("请输入新密码:")
defPasswd = input("请再次输入新密码:")
if newPasswd == defPasswd:
print("密码已确认!请稍候……")
time.sleep(2)
user.card.cardPasswd = newPasswd
return 1
#锁定
def lockUser(self):
cardNum = input("请输入您的卡号:")
#验证是否存在卡号
user = self.allusers.get(cardNum)
if not user:
print("该卡号不存在!!锁定失败……")
return 1
if user.card.cardLock:
print("该卡号已经锁定,请解锁后重试!!")
return 1
cardPasswd = input("请输入您的密码:")
if cardPasswd != user.card.cardPasswd:
print("密码输入有误!!锁定失败……")
return 1
cardId = input("请输入您的身份证号:")
if cardId != user.idCard:
print("身份证输入有误!!锁定失败……")
return 1
#锁定
user.card.cardLock = True
print("该卡号已锁定……\n(系统将在 5 秒后自动返回……)")
time.sleep(5)
#解锁
def unlockUser(self):
cardNum = input("请输入您的卡号:")
#验证是否存在卡号
user = self.allusers.get(cardNum)
if not user:
print("该卡号不存在!!查询失败……")
return 1
if not user.card.cardLock:
print("该卡号已经解锁,无需重复操作……")
return 1
cardPasswd = input("请输入您的密码:")
if cardPasswd != user.card.cardPasswd:
print("密码输入有误!!解锁失败……")
return 1
cardId = input("请输入您的身份证号:")
if cardId != user.idCard:
print("身份证输入有误!!解锁失败……")
return 1
#解锁
user.card.cardLock = False
print("该卡号已解锁……\n(系统将在 5 秒后自动返回……)")
time.sleep(5)
#补卡
def newCard(self):
cardNum = input("请输入您的卡号:")
#验证是否存在卡号
user = self.allusers.get(cardNum)
if self.checkFunc(cardNum, user):
return 1
newCard = self.randomCardId()
self.allusers.pop(cardNum)
self.allusers[newCard] = user
print("您的新卡号为:%s\n已为您将余额转存入该卡,请妥善保管!" % (newCard))
print("(系统将在 5 秒后自动返回……)")
time.sleep(5)
#销户
def killUser(self):
cardNum = input("请输入您的卡号:")
#验证是否存在卡号
user = self.allusers.get(cardNum)
if self.checkFunc(cardNum, user):
return 1
print("操作成功!请稍候……")
self.allusers.pop(cardNum)
time.sleep(2)
print("该卡号已注销……\n(系统将在 5 秒后自动返回……)")
time.sleep(5)
#验证密码
def checkPasswd(self, realPasswd):
for i in range(3):
tempPasswd = input("请输入密码:")
if tempPasswd == realPasswd:
return True
return False
#随机卡号六位数
def randomCardId(self):
while True:
stu = ""
for a in range(19):
ch = chr(random.randrange(ord("0"), ord("9") + 1))
stu += ch
#判断是否重复
if not self.allusers.get(stu):
return stu
def checkFunc(self, cardNum, user):
if cardNum == "t":
return 1
if not user:
print("该卡号不存在!!操作失败……")
return 1
#判断是否锁定
if user.card.cardLock:
print("该卡已被锁定!!请解锁后重试……")
return 1
#验证密码
if not self.checkPasswd(user.card.cardPasswd):
print("密码输入错误!!该卡已被锁定!!请解锁后重试……")
user.card.cardLock = True
return 1
#card.py
class Card(object):
def __init__(self, cardId, cardPasswd, cardMoney):
self.cardId = cardId
self.cardPasswd = cardPasswd
self.cardMoney = cardMoney
self.cardLock = False
#user.py
class User(object):
def __init__(self, name, idCard, phone, card):
self.name = name
self.idCard = idCard
self.phone = phone
self.card = card