一、系统需求说明
本项目计划实现一个银行管理系统,包括开户、查询、取款、存款、转账、锁定、解锁和退出功能。
银行管理系统一览表
序号 |
模块 |
子模块 |
说明 |
1 |
菜单模块 |
显示菜单 |
验证管理员身份,显示功能菜单 |
2 |
开户模块 |
注册,生成银行卡 |
注册信息填写,随机生成6位数银行卡号码 |
3 |
查询模块 |
查询卡中余额 |
根据输入的银行卡号码和密码查询该卡余额 |
4 |
取款模块 |
取出卡内金额 |
验证后删除卡内对于的金额,模拟取款 |
5 |
存款模块 |
存入金额 |
验证后存入卡内对于的金额,模拟存款 |
6 |
验证模块 |
输错锁住卡号 |
创建三次密码错误的机会,输错三次直接锁定 |
7 |
转账模块 |
对两个账号进行金额调动 |
验证两个卡号是否存在,进行简单加减运算 |
8 |
锁定模块 |
人为锁定银行卡 |
验证卡号和密码后锁定该账户 |
9 |
解锁模块 |
解除银行卡锁定 |
验证卡号和密码之后解除锁定 |
10 |
退出模块 |
退出系统 |
输入Q,验证管理员身份后退出系统 |
二、系统设计
系统模块规划如下图所示:
三、代码展示
1. admin.py
构建一个管理员对象,同时加入功能菜单的显示内容。
class Admin:
adminU = '1' # 管理员账号
adpwd = '1' # 管理员密码
def printAdminView(self):
print("*" * 42)
print("*** ***")
print("*** ***")
print("*** 欢迎登录银行系统 ***")
print("*** ***")
print("*** ***")
print("*" * 42)
def printsysFunctionView(self):
print("*" * 42)
print("*** ***")
print("*** 1.开户(1) 2.查询(2) ***")
print("*** 3.取款(3) 4.存款(4) ***")
print("*** 5.转账(5) 6.锁定(6) ***")
print("*** 7.解锁(7) 退出(Q) ***")
print("*** ***")
print("*" * 42)
def adminOption(self):
addminInput = input("请输入管理员账户:")
if self.adminU != addminInput:
print("管理员账户输入错误......")
return -1
passwordInput = input("请输入密码:")
if self.adpwd != passwordInput:
print("输入密码有误......")
return -1
else:
print("操作成功,请稍后......")
return 0
2. card.py
构建银行卡对象。
class Card:
def __init__(self, cardId, cardPwd, money):
self.cardId = cardId
self.cardPwd = cardPwd
self.money = money
self.cardLock = False
3. user.py
构建用户对象。
class User:
def __init__(self, name, id, phone, card):
self.name = name
self.id = id
self.phone = phone
self.card = card
4. atm.py
实现开户、查询、取款、存款、转账、锁定、解锁和退出功能。
from user import User
from card import Card
import random
class ATM:
def __init__(self, alluser):
self.alluser = alluser
def randonmiCardId(self): # 随机生成开户卡号
while True:
str_data = '' # 存储卡号
for i in range(6): # 随机生成6位卡号
ch = chr(random.randrange(ord('0'), ord('9') + 1))
str_data += ch
if not self.alluser.get(str): # 判断卡号是否重复
return str_data
def creatUser(self):
# 目标想用户字典中添加一个键值对(卡号、用户对象)
name = input("请输入姓名:")
Uid = input("请输入身份证号:")
phone = input("请输入手机号:")
prestMoney = float(input("请输入预存金额:"))
if prestMoney <= 0:
print("预存款输入有误,开户失败")
return -1
oncePwd = input("请输入密码:")
passWord = input("请再次输入密码:")
if passWord != oncePwd:
print("两次密码输入不同......")
return -1
print("密码设置成功,请牢记密码: %s" %passWord)
cardId = self.randonmiCardId()
card = Card(cardId, oncePwd, prestMoney) # 创建卡
user = User(name, Uid, phone, card) # 创建用户
self.alluser[cardId] = user # 存入用户字典
print("您的开户已完成,请牢记开户账号:%s" %cardId)
def checkpwg(self, realPwd):
for i in range(3):
psd2 = input("请输入密码:")
if realPwd == psd2:
return True
print("密码输错三次,系统自动退出......")
return False
def lockCard(self):
inptcardId = input("请输入您的卡号:")
user = self.alluser.get(inptcardId)
if not self.alluser.get(inptcardId):
print("此卡号不存在...锁定失败!")
return -1
if user.card.cardLock:
print("该卡已经被锁定,无需再次锁定!")
return -1
if not self.checkpwg(user.card.cardPwd): # 验证密码
print("密码错误...锁定失败!!")
return -1
user.card.cardLock = True
print("该卡被锁定成功!")
def searchUser(self, base=1):
if base == 2:
inptcardId = input("请输入转出主卡号:")
elif base == 3:
inptcardId = input("请输入转入卡号:")
elif base == 1:
inptcardId = input("请输入您的卡号:")
user = self.alluser.get(inptcardId)
# 如果卡号不存在,下面代码就会执行
if not self.alluser.get(inptcardId):
print('此卡号不存在...查询失败!')
return -1
if user.card.cardLock:
print("该用户已经被锁定...请解卡后使用!")
return -1
if not self.checkpwg(user.card.cardPwd): # 验证密码
print("密码错误过多...卡已经被锁定,请解卡后使用!")
user.card.cardLock = True
return -1
if not base == 3: # 查询转如账户 不打印余额
print("账户:%s 余额:%.2f " % (user.card.cardId, user.card.money))
return user
def getMoney(self):
userTF = self.searchUser()
if userTF != -1:
if userTF.card.cardId != '':
inptMoney = float(input("请输入取款金额:"))
if inptMoney > int(userTF.card.money):
print("输入的金额大于余额,请先查询余额!")
return -1
userTF.card.money = float(userTF.card.money) - inptMoney
print("取款成功! 账户:%s 余额:%.2f" %(userTF.card.cardId,
userTF.card.money))
else:
return -1
def saveMoney(self):
userTF = self.searchUser()
if userTF != -1:
if not userTF.card.cardLock == True:
if userTF.card.cardId != '':
inptMoney = float(input("请输入要存入的金额:"))
if inptMoney < 0:
print("请输入正确金额")
else:
userTF.card.money += inptMoney
print("存款成功! 账户:%s 金额:%.2f " %(userTF.card.cardId,
userTF.card.money))
else:
return -1
def transferMoney(self):
MasterTF = self.searchUser(base=2)
if (MasterTF == -1):
return -1
userTF = self.searchUser(base=3)
if (userTF == -1):
return -1
in_tr_Money = float(input("请输入转账金额:"))
if MasterTF.card.money >= in_tr_Money:
str = input("您确定要继续转账操作吗(是/否)?")
if str.upper() == '是':
F1 = float(MasterTF.card.money)
F2 = float(userTF.card.money)
F1 -= in_tr_Money
F2 += in_tr_Money
print("转账成功! 账户:%s 金额:%.2f " % (MasterTF.card.cardId, F1))
else:
print("转账失败,中止了操作")
else:
print("转账失败,金额不足! 账户:%s 金额:%.2f " % (MasterTF.card.cardId,
MasterTF.card.money))
def unlockCard(self):
inptcardId = input("请输入您的卡号:")
user = self.alluser.get(inptcardId)
while 1:
if not self.alluser.get(inptcardId):
print("此卡号不存在...解锁失败!")
return -1
elif not user.card.cardLock:
print("该卡未被锁定,无需解锁!")
break
elif not self.checkpwg(user.card.cardPwd):
print("密码错误...解锁失败!!")
return -1
user.card.cardLock = False # 解锁
print("该卡 解锁 成功!")
break
4. bink.py
作为主方法调用其他类和方法。
from admin import Admin
from atm import ATM
import time
class HomePage:
def __init__(self):
self.allUserD = {} # 使用字典存储数据
self.atm = ATM(self.allUserD)
self.admin = Admin() # 管理员开机界面
def saveUser(self):
self.allUserD.update(self.atm.alluser)
print("数据存盘成功")
# 程序的入口
def main(self):
self.admin.printAdminView()
resL = self.admin.adminOption()
if not resL:
while True:
self.admin.printsysFunctionView()
option = input("请输入您的操作:")
if option not in ('1', '2', '3', '4', '5', '6', '7', 'S', 'Q', 'q'):
print("输入操作项有误,请仔细确认!")
time.sleep(1)
if option == '1': # 开户
self.atm.creatUser()
elif option == '2': # 查询
self.atm.searchUser()
elif option == '3': # 取款
self.atm.getMoney()
elif option == '4': # 存储
self.atm.saveMoney()
elif option == '5': # 转账
self.atm.transferMoney()
elif option == '6': # 锁定
self.atm.lockCard()
elif option == '7': # 解锁
self.atm.unlockCard()
elif option.upper() == "Q":
if not (self.admin.adminOption()):
self.saveUser()
print('退出系统')
return -1
if __name__ == '__main__':
homepage = HomePage()
homepage.main()
作业记录+1,溜了溜了。