###主程序
自动提款系统
"""
人
类名:Person
属性:姓名 身份证号 电话号 卡
行为:
卡
类名:Card
属性:卡号,密码,余额
行为:管理员界面,系统功能界面
提款机
类名:ATM
属性:
行为:开户,查询,取款,存款,转账,改密,锁定,解锁,补卡,销户
admin
类名:Admin
属性:用户字典
行为:管理员验证,系统功能界面
"""
from card import Card
from user import User
from admin import Admin
from atm import ATM
import time
import pickle
import os
def main():
#管理员对象
admin = Admin()
#管理员开机
admin.printAdminView()
if admin.adminOption():
return -1 #为什么 return -1 0 如何控制走向
#提款机对象
filepath = os.path.join(os.getcwd(), "alluser.txt")
f = open(filepath,"rb")
allUsers = pickle.load(f) #长期化存储
print("************")
print(allUsers)
atm = ATM(allUsers)
while True:
#等待用户的操作
admin.printSysFunctionView()
option = input("请输入您的操作:")
if option == "1" :
atm.creatUser()
elif option == "2":
atm.seachUserInfo()
elif option == "3":
atm.getMoney()
elif option == "4":
print("存款")
elif option == "5":
print("转账")
elif option == "6":
print("改密")
elif option == "7" :
atm.lockUser()
elif option == "8":
atm.unlock()
elif option == "9":
print("补卡")
elif option == "0" :
print("销户")
elif option == "t":
if not admin.adminOption():
with open(filepath,"wb") as f:
# 将当前系统中的用户信息保存到文件中
pickle.dump(atm.allUser,f)
print(filepath) #F:\python\第一阶段\银行\alluser.txt
return -1
time.sleep(2)
if __name__ == "__main__":
main()
##ATM类
#atm
from card import Card
from user import User
import random
class ATM(object):
def __init__(self,allUser):
self.allUser = allUser #卡号-用户
#开户
def creatUser(self):
#目标:向用户字典中添加一队键值对(卡号-用户)
name = input("请输入您的姓名:")
idCard = input("请输入您的身份证号码:")
phone = input("请输入您的电话号码:")
prestoreMoney = int(input("请输入预存款金额:"))
if prestoreMoney < 0:
print("预存款输入有误,开户失败...")
return -1
onePasswd = input("请设置密码:")
#验证密码
if not self.checkPasswd(onePasswd):
print("密码输入错误!!!开户失败")
return -1
#所有需要的信息就全了
cardID = self.randomCardId()
cardStr = Card(cardID,onePasswd,prestoreMoney)
user = User(name,idCard,phone,cardStr)
#存到字典
self.allUser[cardID] = user
print("开户成功!!请牢记卡号",cardID,"!!")
#查询
def seachUserInfo(self):
cardNum = input("请输入您的卡号:")
#验证卡号是否存在该卡号
user = self.allUser.get(cardNum)
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
print("卡号:%s 余额:%d"%(user.card.cardId,user.card.cardMoney))
#取款
def getMoney(self):
cardNum = input("请输入您的卡号:")
# 验证卡号是否存在该卡号
user = self.allUser.get(cardNum)
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
print("卡号:%s 余额:%d" % (user.card.cardId, user.card.cardMoney))
#
money = int(input("请输入取款金额:"))
if money > user.card.cardMoney:
print("余额不足!!取款失败....")
return -1
#取款
user.card.cardMoney -= money
print("取款成功....余额:%d"%(user.card.cardMoney))
#存款
def saveMoney(self):
pass
#转账
def transferMoney(self):
pass
#改密
def changePasswd(self):
pass
#锁定
def lockUser(self):
cardNum = input("请输入您的卡号:")
# 验证卡号是否存在该卡号
user = self.allUser.get(cardNum)
if not user:
print("该卡号不存在...锁定失败")
return -1
if user.card.cardLock:
print("该卡已被锁定...请解锁后再操作...")
return -1
if not self.checkPasswd(user.card.cardpasswd):
print("密码输入有误!!锁定失败...")
return -1
tempIDcard = input("请输入您的身份证号码:")
if tempIDcard != user.idCard:
print("身份证号输入有误!!锁定失败...")
return -1
#锁它
user.card.cardLock = True
print("锁定成功.....")
#解锁
def unlock(self):
cardNum = input("请输入您的卡号:")
# 验证卡号是否存在该卡号
user = self.allUser.get(cardNum)
if not user:
print("该卡号不存在...解锁失败")
return -1
if not user.card.cardLock:
print("该卡未被锁定!!无需解锁....")
return -1
if not self.checkPasswd(user.card.cardpasswd):
print("密码输入有误!!解锁失败...")
return -1
tempIDcard = input("请输入您的身份证号码:")
if tempIDcard != user.idCard:
print("身份证号输入有误!!解锁失败...")
return -1
#解锁
user.card.cardLock = False
print("解锁成功")
#补卡
def newCard(self):
pass
#销户
def killUser(self):
pass
#验证密码
def checkPasswd(self,realPasswd):
for i in range(3):
tempPasswd = input("请输入密码:")
if tempPasswd == realPasswd:
return True
return False
#生成卡号
def randomCardId(self):
while True:
str = "" # 随机生成一个六位数
for i in range(6):
ch = chr(random.randrange(ord("0"),ord("9")+1))
str += ch
# 判断是否重复
if not self.allUser.get(str):
return str
return str
##uesr类
#user
class User(object):
def __init__(self,name,idCard,phone,card):
self.idCard = idCard
self.phone = phone
self.card = card
##card类
class Card(object):
def __init__(self,cardId,cardPasswd,cardMoney):
self.cardId = cardId
self.cardMoney = cardMoney
self.cardpasswd = cardPasswd
self.cardLock = False
#admin类
import time
class Admin(object):
admin = "1"
passwd = "1"
def printAdminView(self):
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) 销户(0) *")
print("* 退出(t) *")
print("****************************************************************")
def adminOption(self):
inputAdmin = input("请输入管理员账号:")
if self.admin != inputAdmin:
print("账号输入有误!!")
return -1
inputPasswd = input("请输入管理员密码:")
if self.passwd != inputPasswd:
print("密码输入有误...")
return -1
time.sleep(2)
# 能执行到这里说明账号密码正确
print("操作成功!请稍后....")
return 0