首先,银行管理系统通过账户来实现用户在银行中的一系列操作,而账户则分为用户个人信息User类和银行卡信息Card类
class Card:
def __init__(self,cardId,passwd,balance):
self.cardId = cardId
self.passwd = passwd
self.balance = balance
self.card_lock = False
class User:
def __init__(self,name,phone,Id,card):
self.name = name
self.phone = phone
self.Id = Id
self.card = card
主函数类,银行管理系统执行函数,进行银行管理一系列相关操作
BMS_Main,主函数类
from adminview import AdminView
from ATM import ATM
class BMS_Main:
def __init__(self):
self.allUser = {}
self.atm = ATM(self.allUser)
self.admin = AdminView()
def Save_Data(self):
self.allUser.update(self.atm.alluser) # 将用户信息存储
def operate(self):
self.admin.Login_Interface() # 进入管理员登录界面
ver = self.admin.Validata_Logon() # 验证管理员
if not ver: # 判断是否为管理员,是则进入操作页面
while True:
self.admin.Interface_View()
option = (input('请输入操作码:'))
if option == '1':
self.atm.Open_An_Account() # 调用 ATM类的开户操作
if option == '2':
self.atm.Query_Account() # 调用 ATM类的查询操作
if option == '3':
self.atm.Draw_Money() # 调用 ATM类的取款操作
if option == '4':
self.atm.Deposit_Money() # 调用 ATM类的存款操作
if option == '5':
self.atm.Transfer_Money() # 调用 ATM类的转账操作
if option == '6':
self.atm.Locking() # 调用 ATM类的锁定操作
if option == '7':
self.atm.Unlock() # 调用 ATM类的解锁操作
if option == '8':
self.Save_Data() # 退出管理系统
print('已退出')
return -1
if option not in ('1', '2', '3', '4', '5', '6', '7', '8'): # 防止误输入操作
print("操作有误,请重新输入")
if __name__ == '__main__':
system_page = BMS_Main()
system_page.operate()
定义构造函数:
class BMS_Main: def __init__(self): self.allUser = {} self.atm = ATM(self.allUser) self.admin = AdminView()
Self.alluser 用来存储账户信息
Self.atm 调用ATM类的账户信息赋给atm
Self.admin 调用adminview类的界面信息赋给admin
管理员界面和操作页面类:AdminView
class AdminView:
Admin_Acc = '123'
Admin_Pwd = '321'
# 欢迎界面
@staticmethod
def Login_Interface():
print('*******欢迎进入管理员系统*******')
# 管理员登录验证
def Validata_Logon(self):
Admin_Acc_Input = input('请输入管理员账户:')
if self.Admin_Acc != Admin_Acc_Input:
print("管理员账户输入错误!!")
return -1
Admin_Pwd_Input = input('请输入管理员密码:')
if self.Admin_Pwd != Admin_Pwd_Input:
print("管理员密码输入错误!!!")
return -1
print('登陆成功')
return 0
# 管理员登录后,进入银行账户操作系统
@staticmethod
def Interface_View():
print('开户【1】\t查询【2】\n取款【3】\t存款【4】\n转账【5】\t锁定【6】\n解锁【7】\t退出【8】')
进入主函数类的操作函数 operate(),首先调用adminview()中的login_Interface(0
进入管理员登录界面,然后,验证管理员,调用adminview()中的Validata_Logon()
验证成功,进入循环操作,用户输入操作码,执行相应操作
点击超链接即可跳转对应操作
Option = 1 开户操作 Option = 2 查询操作
Option = 3 取款操作 Option = 4 存款操作
Option= 5 转账操作 Option= 6 锁定操作
Option= 7 解锁操作
Option= 8,退出系统,调用函数Save_Data()保存,退出系统。
如果输入其他字符则提示 操作有误,请重新输入
ATM类
from Card import Card
from BankUser import User
import random
class ATM:
def __init__(self, alluser):
self.alluser = alluser
# 生成6位银行卡号
def Generate_Card_Id(self):
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
# 开户操作【1】
def Open_An_Account(self):
name = input('姓名:') # 账户基本信息录入
Id = input('证件号码:')
phone = input('电话号码:')
Advance_Deposit = int(input('预存款:'))
# 预存款不能<=0元
if Advance_Deposit <= 0:
print("预存款必须大于0元")
return -1
First_Pwd = input('设置密码:') # 设置账户密码
Second_pwd = input('确认密码:')
if First_Pwd != Second_pwd:
print("两次输入密码不一致")
return -1
print('创建密码成功')
Card_Id = self.Generate_Card_Id() # 调用生成的卡号
card = Card(Card_Id, First_Pwd, Advance_Deposit) # 银行卡信息
user = User(name, phone, Id, card) # 用户个人信息
self.alluser[Card_Id] = user # 存储账户信息
print('开户成功,您的卡号为{},密码为{},请牢记'.format(Card_Id, First_Pwd))
# 验证密码,如果输入三次都错误,自动退出登录
def Ve_Pwd(self, vfpwd):
for i in range(3):
intpwd = input('请输入您的账户密码:')
if vfpwd == intpwd:
return True
print("您已经三次输入错误,已退出!")
return False
# 查询操作【2】
def Query_Account(self, base=1):
if base == 1:
inputcardId = input('请输入您要查询的账户:')
if base == 2:
inputcardId = input('请输入您要转出的账户:')
if base == 3:
inputcardId = input('请输入您要转入的账户:')
user = self.alluser.get(inputcardId)
if not self.alluser.get(inputcardId): # 判断卡号是否匹配
print('卡号不存在!')
return -1
if user.card.card_lock: # 判断卡是否冻结
print('此账户已锁定,请解锁后继续使用!!')
return -1
if not self.Ve_Pwd(user.card.passwd): # 密码验证
print('您的账户已被锁定')
return -1
print('账户:{},余额:{}'.format(user.card.cardId, user.card.balance))
return user
# 取款操作【3】
def Draw_Money(self):
user = self.Query_Account()
if user != -1:
DrawMoney = float(input('请输入取款金额:'))
if DrawMoney >= user.card.balance:
print('余额不足!')
return -1
user.card.balance -= DrawMoney
print('取款成功!\n账户:{} ,余额:{}'.format(user.card.cardId, user.card.balance))
# 存款操作【4】
def Deposit_Money(self):
user = self.Query_Account()
if user == -1:
return -1
DepositMoney = float(input('请输入存款金额:'))
user.card.balance += DepositMoney
print('存款成功!\n账户:{} ,余额:{}'.format(user.card.cardId, user.card.balance))
# 转账操作【5】
def Transfer_Money(self):
TransferOut = self.Query_Account(base=2) # 转出账户
if TransferOut == -1:
return -1
TransferInto = self.Query_Account(base=3) # 转入账户
if TransferInto == -1:
return -1
TransferAmount = float(input('请输入转账金额:'))
if TransferOut.card.balance >= TransferAmount:
Tips = input('确认向{}转账吗?y/n'.format(TransferInto.card.cardId))
if Tips == 'y' or 'Y':
TransferOut.card.balance -= TransferAmount # 转出账户:转钱
TransferInto.card.balance += TransferAmount # 转入账户:收钱
print(
'转账成功!\n账户:{},余额:{}'.format(TransferOut.card.cardId, TransferOut.card.balance)
)
else:
print('操作已停止')
else:
print('余额不足,转账失败')
# 锁定操作【6】
def Locking(self):
Card_Into = input('请输入卡号:')
if not self.alluser.get(Card_Into):
print('卡号不存在!')
return -1
user = self.alluser.get(Card_Into)
if user.card.card_lock:
print('此卡已经被锁定!')
return -1
if not self.Ve_Pwd(user.card.passwd):
print('密码输入错误')
return -1
user.card.card_lock = True
print('锁定成功')
# 解锁操作【7】
def Unlock(self):
Card_Into = input('请输入卡号:')
user = self.alluser.get(Card_Into)
while 1:
if not self.alluser.get(Card_Into):
print('卡号不存在')
return -1
if not self.Ve_Pwd(user.card.passwd):
print("密码输入有误")
return -1
if not user.card.card_lock:
print('此卡未被锁定!')
break
user.card.card_lock = False
print('此卡解锁成功')
break
用户输入1时,执行开户操作,需要用户输入自己的个人信息,
并填入预存款(>0),设置账户密码之后,调用Generate_Card_Id()函数,
随机生成六位不重复卡号给用户,并且将账户信息存入all user{Card_Id:user }
用户输入2时,执行查询,查询操作在存取款、转账时都会用到,所
以,在定义查询函数时,设置一个默认值参数:base,当base=1时,输入查询
账户,从已经存储好的账户信息中找到对应的银行卡号,在查询过程中,需要
对银行卡号进行验证,如果卡号不存在或者卡号被冻结都会给函数返回值-1,
如果银行卡没有问题,则输入密码验证账户,这里通过密码验证函数Ve_Pwd()
进行密码验证,三次输入错误会被锁定账户,如果都没有问题,则输出账户和余
额,并返回user的值,以便后续存取款以及转账操作的使用。
用户输入3时,执行Draw_Money(),当用户取款时,首先应该输入取款账
户,这里则调用查询函数Query_Account(),如果user接收到是User信息
时,就会进行取款,当账户余额不足时输出余额不足,函数返回值-1,否则
提示取款成功。
当用户输入4时,执行函数Deposit_Money(),调用查询函数
Query_Account(),如果user接受值为-1时,则账户有问题,函数返回值-1
否则提示用户输入存款金额,存款成功。
用户输入5时,执行函数Transfer_Money(),此时,调用查询函数,
通过改变默认参数base的值,来实现转出和转入账户的输入,当接受到的
返回值为user时,输入转账金额,当转出用户余额足够时,询问用户是否确认,
输入Y:进行转账,输入n:停止操作
用户输入6时,执行函数Locking()进行锁定操作,输入卡号,调用
账户信息如果此卡的cardlock = True 的话,则会提示此卡已被锁定,函数返
回值-1,如果没有则调用密码验证函数Ve_Pwd(),密码验证成功,则提示 锁定
成功 。
用户输入7,调用解锁函数Unlock(),输入卡号,调用账户信息,
如果卡号没找到,则提示卡号不存在,否则输入账号密码,调用密码验证函
数Ve_Pwd(),当输入密码正确时,执行解锁操作,如果card_lock = False,
提示,此卡未被锁定,否则将card_lock = True改为 card_lock = false ,提示
解锁成功。