系统具有以下功能:
1、开户(open)
2、查询(search)
3、取款(withdraw)
4、存款(deposit)
5、转账(transfer)
6、改密(changepwd)
7、冻结账户(lock)
8、解冻账户(unlock)
9、补卡(replace)
10、销户(close)
0、退出(exit)
我们对整个系统进行分析,可以得到如下几个类
1、用户-User类;
属性:name、IDcard、phone、card
2、卡-Card类:
属性:cardID、cardPassword、cardMoney
3、atm机-ATM类:
属性:用户-卡号
方法:系统所需每个功能的实现
4、系统界面类-view:
属性:系统登录账号、系统登录密码
方法:登录界面、功能界面、登录判断
5、Main函数
对整个系统进行整体调控
代码如下:
'''
主函数
'''
from view import View
from atm import ATM
import pickle
import os
import time
def main():
# 界面对象
view = View()
# 管理员开机
view.printAdminview()
if view.adminOption():
return -1
#取款机对象
filePath = os.path.join(os.getcwd(), "allUsers.txt")
f =open(filePath,"rb")
allUsers = pickle.load(f)
print("***************")
print(allUsers)
atm = ATM(allUsers)
while True:
view.printsysFunctionView()
#等待用户操作
option =input("请选择所需业务:")
#开户
if option =="1":
#print("开户")
atm.createUser()
#查询
elif option=="2":
atm.searchUserInfo()
#取款
elif option=="3":
atm.withDrawals()
# 存款
elif option=="4":
atm.deposit()
# 转账
elif option=="5":
atm.transfromMoney()
# 修改密码
elif option=="6":
atm.changePwd()
# 锁定
elif option=="7":
atm.lock()
# 解锁
elif option=="8":
atm.unlock()
# 补卡
elif option=="9":
atm.replace()
# 销户
elif option=="10":
atm.logoutUserInfo()
# 退出
elif option == "0":
q =input("确定退出系统吗? y/n")
if q == "y":
#将用户信息储存数据保存
atm.saveUserInfo()
return False
time.sleep(1)
if __name__=="__main__":
main()
'''
界面
'''
import time
class View(object):
admin ="lc"
password = "123"
#登录界面
def printAdminview(self):
print("*****************************************")
print("* *")
print("* *")
print("* 欢迎登录银行自助银行系统 *")
print("* *")
print("* *")
print("*****************************************")
#功能界面
def printsysFunctionView(self):
print("********************************************")
print("* 1、开户(open) 2、查询(search) *")
print("* 3、取款(withdraw) 4、存款(deposit) *")
print("* 5、转账(transfer) 6、改密(changepwd) *")
print("* 7、冻结账户(lock) 8、解冻账户(unlock) *")
print("* 9、补卡(replace) 10、销户(close) *")
print("* 0、退出(exit) *")
print("********************************************")
#判断函数
def adminOption(self):
# 判断账号
inputAdmin = input("请输入管理员账号:")
if self.admin != inputAdmin:
print("账号输入有误!!")
return -1
# 判断密码
inputPwd = input("请输入管理员密码:")
if self.password != inputPwd:
print("密码错误!")
return -1
print("登录成功,请稍后....")
time.sleep(2)
return 0
'''
card类
'''
class Card(object):
def __init__(self,cardId,cardPwd,cardMoney):
self.cardId = cardId
self.cardPwd = cardPwd
self.cardMoney = cardMoney
self.cardLock = False
'''
user类
'''
class User(object):
def __init__(self,name,idCard,phone,card):
self.name = name
self.idCard = idCard
self.phone = phone
self.card = card
'''
ATM类
'''
from card import Card
from user import User
import os
import random
import pickle
class ATM(object):
def __init__(self,allUsers):
self.allUsers=allUsers #卡号-用户
#开户
def createUser(self):
#目标:向用户字典中添加一对键值对(卡号-用户)
name = input("请输入您的姓名:")
idCard = input("输入您的身份证号码:")
phone = input("请输入您的电话号码:")
prestoreMoney =int(input("请输入预存款金额:"))
if prestoreMoney < 0:
print("预存款金额有误!开户失败...")
return -1
onePwd = input("请设置密码:")
if not self.checkPwd(onePwd):
print("密码输入错误!开户失败....")
return 1
#用户信息
cardStr=self.randomCard()
card =Card(cardStr,onePwd,prestoreMoney)
user = User(name, idCard, phone,card)
#存到字典
self.allUsers[cardStr] = user
print("开户成功!请记住您的卡号(%s)...."%(cardStr))
#信息判断
def userInfoJudg(self):
cardNum = input("请输入您的卡号:")
# 验证该卡号是否存在
user = self.allUsers.get(cardNum)
if not user:
print("该卡号不存在")
return False
if user.card.cardLock:
print("该卡已经被锁定!如需使用其他功能,请解锁")
return False
# 验证密码
if not self.checkPwd(user.card.cardPwd):
user.card.cardLock = True
print("密码三次输入错误!该卡已被锁定!请解锁后再试.....")
return False
return user
#查询信息
def searchUserInfo(self):
judg=self.userInfoJudg()
if judg:
print("账号:%s 余额:%d"%(judg.card.cardId,judg.card.cardMoney))
#取款
def withDrawals(self):
judg = self.userInfoJudg()
money = int(input("请输入取款金额:"))
if money > judg.card.cardMoney:
print("余额不足!!取款失败!")
return -1
if money < 0:
print("输入金额错误!!请重试")
return -1
#取款
judg.card.cardMoney -=money
print("取款成功,剩余余额:%d"%(judg.card.cardMoney))
#存款
def deposit(self):
judg = self.userInfoJudg()
money = int(input("请输入存款金额:"))
print("当前金额为:%d,存入%d" % (judg.card.cardMoney, money))
#存款
judg.card.cardMoney += money
print("存款成功,当前余额为%d"%(judg.card.cardMoney))
#转账
def transfromMoney(self):
judg = self.userInfoJudg()
tCard = input("请输入您要转账的卡号:")
if not tCard:
print("该卡号不存在")
return False
tUser = self.allUsers.get(tCard)
if tUser.card.cardLock:
print("该卡已经被锁定!无法转账!")
return False
tMoney = int(input("请输入转账金额:"))
inquire = input("确认转账吗?y/n")
if inquire == "y":
if tMoney > judg.card.cardMoney:
print("卡内余额不足,转账失败")
if tMoney < 0:
print("输入金额错误")
#转账
judg.card.cardMoney -=tMoney
tUser.card.cardMoney +=tMoney
print("转账成功,请稍后查询到账信息....")
#修改密码
def changePwd(self):
judg = self.userInfoJudg()
tempIdCard = input("请输入您的身份证号码:")
if tempIdCard != judg.idCard:
print("身份证输入错误!请重试...")
return -1
newPwd = input("请输入新密码")
newPwd2 = input("请再次输入")
if newPwd == newPwd2:
judg.card.cardPwd = newPwd2
print("密码修改成功,请牢记您的新密码")
else:
print("两次输入密码不一致,请重试!")
return -1
#锁定
def lock(self):
judg = self.userInfoJudg()
tempIdCard = input("请输入您的身份证号码:")
if tempIdCard != judg.idCard:
print("身份证输入错误!锁定失败...")
return -1
#锁定
judg.card.cardLock =True
print("锁定成功")
#解锁
def unlock(self):
cardNum = input("请输入您的卡号:")
# 验证该卡号是否存在
user = self.allUsers.get(cardNum)
if not user:
print("该卡号不存在")
return -1
if not user.card.cardLock:
print("此卡没有被锁定,无需解锁!")
return -1
# 验证密码
if not self.checkPwd(user.card.cardPwd):
print("密码输入错误!解锁失败.....")
return -1
tempIdCard = input("请输入您的身份证号码:")
if tempIdCard != user.idCard:
print("身份证输入错误!解锁失败...")
return -1
#解锁
user.card.cardLock = False
print("解锁成功")
#补卡
def replace(self):
judg = self.userInfoJudg()
ask = input("请确认您的账号,是否继续操作?y/n")
if ask=="y":
name = input("请输入您的姓名:")
idCard = input("输入您的身份证号码:")
phone = input("请输入您的电话号码:")
onePwd = input("请设置密码:")
if not self.checkPwd(onePwd):
print("密码输入错误!开户失败....")
return 1
# 用户信息
cardStr = self.randomCard()
ask2 = input("是否将所有金额转至新卡,该操作不可逆?y/n")
if ask2 == "y":
newMoney = judg.card.cardMoney
judg.card.cardMoney = 0
else:
print("操作取消!")
return -1
card = Card(cardStr, onePwd, newMoney)
user = User(name, idCard, phone, card)
# 存到字典
self.allUsers[cardStr] = user
print("补卡成功!请记住您的新卡号(%s)...." % (cardStr))
else:
print("操作取消!")
#销户
def logoutUserInfo(self):
judg = self.userInfoJudg()
tempIdCard = input("请输入您的身份证号码:")
if tempIdCard != judg.idCard:
print("身份证输入错误!锁定失败...")
return -1
kCard = judg.card.cardId
ask3 = input("您确认要注销账户吗?此操作不可逆 y/n")
if ask3 == "y":
self.allUsers.pop(kCard)
print("账户已注销!")
else:
print("操作取消")
#验证密码
def checkPwd(self,realPwd):
for i in range(3):
tempPwd = input("请输入密码:")
if tempPwd == realPwd:
return True
return False
#生成卡号:
def randomCard(self):
while True:
str =""
for i in range(6):
# 随机生成一个数字
ch = chr(random.randrange(ord('0'), ord('9') + 1))
str += ch
#判断是否重复
if not self.allUsers.get(str):
return str
#用户信息存储到库
def saveUserInfo(self):
filePath = os.path.join(os.getcwd(),"allUsers.txt")
f =open(filePath,"wb")
pickle.dump(self.allUsers,f)
f.close()
信息存入文件中,每次打开系统时,从文件中读取用户卡号信息。
第一次登入系统时,可以先自己在文件中放入测试数据,否则读取不到文件中的内容
或者可以第一次登入时先不读取文件,自己设定一个字典存入数据,然后将字典数据存入文件中再读取。