#1:分析需要创立的对象
#需要类 :用户,卡,银行,提款机,管理员
'''
用户:
类明:User
属性:姓名 身份证号 电话号 卡
行为:
卡:
类目:Card
属性:卡号 密码 余额 锁定与否
银行:
类名:
属性:调用txt用户文件
提款机:
类目:ATM
属性:用户字典
行为:开户,查询,取款,存款,转账,改密,锁定,解锁,补卡,销户
管理员:
类名:Admin
属性:
行为:管理员界面 管理员登陆 系统功能界面
#2:创建所属对象
# 1:创建main()程序
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
#存储所有用户信息
#提款机对象
filepath=os.path.join(os.getcwd(),r'作业\银行系统实战\allusers.txt')
f=open(filepath,'rb')
allUsers=pickle.load(f)
atm=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.transferMoney()
elif option =='6':
#改密
atm.changePasswd()
elif option =='7':
#锁定
atm.lockUser()
elif option =='8':
#解锁
atm.unlockUser()
elif option =='9':
#补卡
atm.newCard()
elif option =='0':
#销户
atm.killUser()
elif option =='t':
#退出
if not admin.adminOption():
#将当前系统中的用户信息保存到文件中
filePath=os.path.join(os.getcwd(),r'作业\银行系统实战\allusers.txt')
print(filePath)
f=open(filePath,'wb')
pickle.dump(atm.allUsers,f)
f.close()
return -1
time.sleep(2)
if __name__=='__main__':
main()
#2:创建allusers.txt文档
#3:创建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):
printAdmin=input('请输入管理员账户:')
if self.admin!=printAdmin:
print('账号输入有误!!')
return -1 # return -1表示返回一个代数值,一般用在子函数结尾。按照程序开发的一般惯例,表示该函数失败
else:
printPasswd=input('请输入管理员密码:')
if Admin.passwd!=printPasswd:
print('密码输入有误!!')
return -1 #return -1表示返回一个代数值,一般用在子函数结尾。按照程序开发的一般惯例,表示该函数失败
#能执行到这里说明账号密码正确
print('操作成功!请稍后······')
time.sleep(2)
return 0 #return 0 表示函数正常结束
#4:创建card()对象
class Card(object):
def __init__(self,cardId,cardPasswd,cardMoney):
self.cardId=cardId
self.cardPasswd=cardPasswd
self.cardMoney=cardMoney
self.cardLock=False
#5:创建user()对象
class User(object):
def __init__(self,name,idCard,phone,card):
self.name=name
self.idCard=idCard
self.phone=phone
self.card=card
#6:创建atm()对象
from user import User
from card import Card
import random
class ATM(object):
def __init__(self,allUsers):
self.allUsers=allUsers #卡号对应用户
def createUser(self):
#想用户字典中添加键值对(卡号,对象)
name=input('请输入你的姓名:')
idCard=input('输入你的身份证号码:')
phone=input('请输入你的电话号码:')
prestoreMoney=eval(input('请输入预存款金额:'))
if prestoreMoney<0:
print('预存款输入有误!开户失败····')
return -1
onePasswd=eval(input('请设置密码:'))
#验证密码
if not self.checkPasswd(onePasswd):
print('密码输入错误!开户失败·····')
return -1
#所有信息全了
cardId=self.randomCardId()
card=Card(cardId,onePasswd,prestoreMoney)
user=User(name,idCard,phone,card)
#保存到字典
self.allUsers[cardId]=user
print('开户成功!请牢记卡号%d······'%(cardId))
def searchUserInfo(self):
user=self.checkCard()
if user==-1:
return -1
print('账号:%d 余额:%d '%(user.card.cardId,user.card.cardMoney))
def getMoney(self):
user=self.checkCard()
if user==-1:
return -1
money=int(input('请输入取款金额:'))
if money>user.card.cardMoney:
print('余额不足!!取款失败·····')
return -1
#取款
user.card.cardMoney-=money
print('取款成功!!余额为%d'%(user.card.cardMoney))
def saveMoney(self):
user=self.checkCard()
if user==-1:
return -1
money=int(input('请输入存款金额:'))
#存款
user.card.cardMoney+=money
print('存款成功!!余额为%d'%(user.card.cardMoney))
def transferMoney(self):
cardNum=int(input('请输入你的卡号:'))
#验证是否存在该卡号
user1=self.allUsers.get(cardNum)
if not user1:
print('该卡号不存在!!查询失败·····')
return -1
#判断是否锁定
if user1.card.cardLock==True:
print('该卡已被锁定!!请解锁后进行其他操作····')
return -1
#验证密码
if not self.checkPasswd(user1.card.cardPasswd):
print('密码输入错误!!该卡已被锁定!!请解锁后进行其他操作····')
user1.card.cardLock=True
return -1
cardOther=int(input('请输入你要转账的卡号:'))
user2=self.allUsers.get(cardOther)
if not user2:
print('该卡号不存在!!查询失败·····')
return -1
if user2.card.cardLock==True:
print('该卡已被锁定!!请通知收账人解锁后在进行转账操作····')
return -1
money=int(input('请输入你要转账的金额:'))
if money>user1.card.cardMoney:
print('你卡号的金额不足!!转账失败······')
return -1
user1.card.cardMoney-=money
user2.card.cardMoney+=money
print('转账成功!!!当前余额为%d'%(user1.card.cardMoney))
def changePasswd(self):
user=self.checkCard()
if user==-1:
return -1
onePasswd=eval(input('请输入你要设定的密码:'))
if onePasswd==user.card.cardPasswd:
print('新密码不能与旧密码相同!!改密失败·····')
return -1
if not self.checkPasswd(onePasswd):
print('密码不同!!改密失败····')
user.card.cardPasswd=onePasswd
print('改密成功!!请牢记密码%d'%(onePasswd))
def lockUser(self):
cardNum=int(input('请输入你的卡号:'))
#验证是否存在该卡号
user=self.allUsers.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:
return -1
#锁定
user.card.cardLock=True
print('锁定成功')
def unlockUser(self):
cardNum=int(input('请输入你的卡号:'))
#验证是否存在该卡号
user=self.allUsers.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:
return -1
#锁定
user.card.cardLock=False
print('解锁成功')
def newCard(self):
user=self.checkCard()
if user==-1:
return -1
cardId=self.randomCardId()
card=Card(cardId,user.card.cardPasswd,user.card.cardMoney)
print('你当前卡号为%d'%(cardId))
self.allUsers.pop(user.card.cardId)
def killUser(self):
user=self.checkCard()
if user==-1:
return -1
if user.card.cardMoney!=0:
print('你所要注销的卡中还有余额,余额为%d !!请取款或转账后在继续注销操作····'%(user.card.cardMoney))
return -1
boolean=input('是否注销卡号为%d的卡的全部 同意则输入yes,不同意则为no'%(user.card.cardId))
if boolean=='yes':
self.allUsers.pop(user.card.cardId)
print('注销成功!!!')
else:
print('注销失败!!!!')
#验证密码
def checkPasswd(self,realPasswd):
for i in range(3):
tempPasswd=int(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.allUsers.get(str):
return int(str)
def checkCard(self):
cardNum=int(input('请输入你的卡号:'))
#验证是否存在该卡号
user=self.allUsers.get(cardNum)
if not user:
print('该卡号不存在!!查询失败·····')
return -1
#判断是否锁定
if user.card.cardLock==True:
print('该卡已被锁定!!请解锁后进行其他操作····')
return -1
#验证密码
if not self.checkPasswd(user.card.cardPasswd):
print('密码输入错误!!该卡已被锁定!!请解锁后进行其他操作····')
user.card.cardLock=True
return -1
return user
#完成操作
#效果展示