DDR爱好者之家 Design By 杰米
本文为大家分享了python银行管理系统的具体代码,供大家参考,具体内容如下
自己写的练手小程序,练习面向对象的概念,代码中都有注释,刚学的同学也可以很容易看懂(需要自己用pickle模块新建一个database.txt文件,用来存储用户数据信息)。
# atm.py
# 各种操作类
import random
from card import Card
from user import User
import time
class ATM(object):
# 初始化
def __init__(self, allUsersInfo):
# 将所有用户信息传递过来,以便后续操作
self.allUsersInfo = allUsersInfo # 卡号 :用户
# 确认密码
def checkPwd(self, realPwd):
myList = [3, 2, 1, 0]
for i in myList:
# 如果密码输入错误超过三次
if i == 0:
return False
rePass = input('请再次输入密码:')
if realPwd == rePass:
return True
elif (i - 1) != 0:
print('输入错误,你还有%d次输入的机会!' % (i - 1))
# 随机生成开户卡号
def randomId(self):
while True:
# 存储卡号
str = ''
# 随机生成6位卡号
for i in range(6):
ch = chr(random.randrange(ord('0'), ord('9') + 1))
str += ch
# 判断卡号是否重复
if not self.allUsersInfo.get(str):
return str
# 开卡操作
def createUser(self):
try:
name = input('请输入姓名:') # 用户姓名
idCard = input('请输入身份证号码:') # 用户身份证号
phone = input('请输入电话号码:') # 用户的电话号码
preMoney = int(input('请输入预存金额:')) # 用户的预存金额
# 预存金额少于0则开户失败
if preMoney < 0:
print('预存金额有误,开户失败!')
return -1
# 设置密码
onePwd = input('请输入密码:') # 第一次密码
twoPwd = self.checkPwd(onePwd)
if not twoPwd:
print('确认密码错误,开户失败!')
return -1
# 以上全部完成,则开户所需的信息准备齐全,开户成功
# 系统生成开户卡号
# 生成卡号
cardStr = self.randomId()
# 创建一个卡的实例,用于存储卡的信息
card = Card(cardStr, onePwd, preMoney)
# 创建一个用户实例,用于存储用户的信息
user = User(name, idCard, phone, card)
# 按 卡号 : 用户信息 键值对的形式存入字典中
self.allUsersInfo[cardStr] = user
# 提示用户,已经开户成功
time.sleep(1)
print('开户成功,请牢记卡号({})...'.format(cardStr))
except Exception as e:
print('抱歉,系统出现故障,暂时无法操作!')
return
# 判断卡号是否存在
def isExistence(self, cardStrInp):
# 卡号不存在,直接退回到选项界面
if self.allUsersInfo.get(cardStrInp):
return True
# 卡号不存在的情况下
else:
print('卡号不存在!')
return False
# 做查询等操作时,输入密码
def secretOption(self, cardStrInp):
myList = [3, 2, 1, 0]
for i in myList:
# 如果密码输入错误超过三次
if i == 0:
return False
passInp = input('请输入密码:')
if passInp == self.allUsersInfo[cardStrInp].cardInfo.cardPwd:
return True
elif (i - 1) != 0:
print('输入错误,你还有%d次输入的机会!' % (i - 1))
# 查询用户信息
def searchUserInfo(self):
cardStrInp = input('请输入卡号:') # 用户想要查询的卡号
# 判断卡号的状态
isExist = self.isExistence(cardStrInp)
# 卡号存在
if isExist:
# 是否被锁定
if not self.allUsersInfo[cardStrInp].cardInfo.isLock:
# 输入密码并判断
# 密码正确则输出余额
if self.secretOption(cardStrInp):
print('账号:%s 余额:%d' % (cardStrInp, self.allUsersInfo[cardStrInp].cardInfo.cardMoney))
return 0
# 密码错误则锁定卡号
else:
print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
self.allUsersInfo[cardStrInp].cardInfo.isLock = True
return -1
else:
print('该卡号已被锁定,请先解锁!')
return -1
# 取钱
def getMoney(self):
cardStrInp = input('请输入卡号:')
isExist = self.isExistence(cardStrInp)
# print(isExist)
# 如果卡号存在
if isExist:
# 如果没被锁定
if not self.allUsersInfo[cardStrInp].cardInfo.isLock:
# 如果密码正确
if self.secretOption(cardStrInp):
getMoney = int(input('请输入取款金额:'))
# 如果取款金额超出余额
if getMoney > self.allUsersInfo[cardStrInp].cardInfo.cardMoney:
print('余额不足,取款失败!')
return -1
# 余额足够的情况,取款成功
else:
self.allUsersInfo[cardStrInp].cardInfo.cardMoney -= getMoney
print('取款成功,卡上余额:%d' % self.allUsersInfo[cardStrInp].cardInfo.cardMoney)
return 0
else:
print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
self.allUsersInfo[cardStrInp].cardInfo.isLock = True
return -1
else:
print('该卡号已被锁定,请先解锁!')
return -1
# 存钱
def saveMoney(self):
cardStrInp = input('请输入卡号:')
isExist = self.isExistence(cardStrInp)
if isExist:
# 如果没被锁定
if not self.allUsersInfo[cardStrInp].cardInfo.isLock:
# 如果密码正确
if self.secretOption(cardStrInp):
saveMoney = int(input('请输入存款金额:'))
if saveMoney <= 0:
print('无效的存款金额!')
return -1
else:
# 存款成功
self.allUsersInfo[cardStrInp].cardInfo.cardMoney += saveMoney
print('存款成功,卡内余额为%d!' % self.allUsersInfo[cardStrInp].cardInfo.cardMoney)
else:
print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
self.allUsersInfo[cardStrInp].cardInfo.isLock = True
return -1
else:
print('该卡号已被锁定,请先解锁!')
return -1
# 转账
def transMoney(self):
cardInp = input('请输入卡号:')
isExist = self.isExistence(cardInp)
# 卡号存在
if isExist:
# 没被锁定
if not self.allUsersInfo[cardInp].cardInfo.isLock:
# 密码正确
if self.secretOption(cardInp):
transCardInp = input('请输入要转账的卡号:')
isExistTrans = self.isExistence(transCardInp)
# 要转账的卡号存在
if isExistTrans:
# 要转账的卡号没被锁定
if not self.allUsersInfo[transCardInp].cardInfo.isLock:
# 要转账的卡号不是自己的卡号
if transCardInp != cardInp:
transMoneyInp = int(input('请输入要转账的金额:'))
# 判断转账金额是否大于卡内余额
if transMoneyInp > self.allUsersInfo[cardInp].cardInfo.cardMoney:
print('余额不足,转账失败!')
return -1
else:
self.allUsersInfo[cardInp].cardInfo.cardMoney -= transMoneyInp
self.allUsersInfo[transCardInp].cardInfo.cardMoney += transMoneyInp
print('转账成功,卡内余额为%d!' % self.allUsersInfo[cardInp].cardInfo.cardMoney)
else:
print('无法转入自己的账户!')
return -1
else:
print('对方卡号已被锁定,无法转账,请先解锁!')
return -1
else:
print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
self.allUsersInfo[cardInp].cardInfo.isLock = True
return -1
else:
print('该卡号已被锁定,请先解锁!')
return -1
# 改密
def changePwd(self):
cardStrInp = input('请输入卡号:')
isExist = self.isExistence(cardStrInp)
if isExist:
# 如果没被锁定
if not self.allUsersInfo[cardStrInp].cardInfo.isLock:
# 如果密码正确
if self.secretOption(cardStrInp):
# 输入修改后的密码
changePwd = input('请输入新密码:')
# 不允许新密码和旧密码相同
if changePwd != self.allUsersInfo[cardStrInp].cardInfo.cardPwd:
myList = [3, 2, 1, 0]
for i in myList:
# 如果密码输入错误超过三次
if i == 0:
print('确认密码错误次数超过3次,修改密码失败!')
return -1
passInp = input('请确认新密码:')
# 如果新密码确认成功,则修改密码
if passInp == changePwd:
print('密码修改成功!')
self.allUsersInfo[cardStrInp].cardInfo.cardPwd = changePwd
return 0
elif (i - 1) != 0:
print('输入错误,你还有%d次输入的机会!' % (i - 1))
# 新密码和旧密码相同,不允许修改,提示并退出
else:
print('新密码不允许和旧密码相同!')
return -1
# 密码不正确
else:
print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
self.allUsersInfo[cardStrInp].cardInfo.isLock = True
return -1
else:
print('该卡号已被锁定,请先解锁!')
return -1
# 解锁
def unlockUser(self):
cardStrInp = input('请输入卡号:')
isExist = self.isExistence(cardStrInp)
# 存在
if isExist:
# 被锁定
if self.allUsersInfo[cardStrInp].cardInfo.isLock:
# 如果密码正确
if self.secretOption(cardStrInp):
# 输入身份证号信息做确认
idCardInp = input('请输入身份证号:')
# 身份证号信息匹配
if idCardInp == self.allUsersInfo[cardStrInp].idCard:
# 解锁成功
print('解锁成功!')
self.allUsersInfo[cardStrInp].cardInfo.isLock = False
return 0
else:
print('身份证号信息不匹配,解锁失败!')
return -1
# 密码不正确
else:
print('密码输出错误,解锁失败!')
return -1
else:
print('该卡号未被锁定,无需解锁!')
return -1
# card.py # 卡类 class Card(object): def __init__(self, cardStr, cardPwd, cardMoney): self.cardStr = cardStr # 卡号 self.cardPwd = cardPwd # 卡密 self.cardMoney = cardMoney # 卡中余额 self.isLock = False # 卡号是否被锁
# main.py
# 主函数
from view import View
import pickle
from atm import ATM
import time
def main():
# 定义管理员对象
admin = View()
# 管理员登录界面
admin.printAdminView()
# 如果管理员账号、密码输入错误则退出
if admin.adminOption():
return -1
# 读取存储在文件中的所有用户的信息
file = open('database.txt', 'rb')
allUsersInfo = pickle.load(file) # 将所有用户信息存储到 allUsersInfo中去
file.close() # 关闭文件
# 打印所有用户信息,以便验证
print('*' * 10)
print('usersInfo:', allUsersInfo)
# 创建atm实例,并将所有用户信息传递过去,进行初始化
atm = ATM(allUsersInfo)
# 循环进行操作选项
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.transMoney()
elif option == "6": # 改密码操作
atm.changePwd()
elif option == "7": # 解锁操作
atm.unlockUser()
# 以下操作暂时未写
# elif option == "q": # 退出操作
# # atm.quitSys()
# print('退出')
# elif option == "9": # 补卡操作
# print("补卡")
#
# elif option == "0": # 销户操作
# print("销户")
elif option == "8": # 退出系统
return 0
# 如果用户输入的不是上述操作
else:
print('无效的操作选项!')
return -1
# 将新信息写入文件
# 将当前系统中的用户信息保存到文件中
f = open('database.txt', "wb")
pickle.dump(allUsersInfo, f)
f.close()
if __name__ == '__main__':
main()
# user.py # 用户信息类 class User(object): def __init__(self, name, idCard, phone, cardInfo): self.name = name # 用户姓名 self.idCard = idCard # 用户身份证号 self.phone = phone # 用户的手机号码 self.cardInfo = cardInfo # 用户的卡的信息(卡号、密码、余额)
# view.py
# 视图类
import time
class View(object):
admin = '1'
pwd = '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 inputAdmin != self.admin:
print('账号错误!')
return -1
inputPwd = input('请输入管理员密码:')
if inputPwd != self.pwd:
print('密码错误!')
return -1
# 管理员账号和密码全部正确
print('操作成功,请稍后...')
time.sleep(2)
return 0
# view = View()
# view.printAdminView()
# view.adminOption()
# view.printSysFunctionView()
更多学习资料请关注专题《管理系统开发》。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
2025年11月02日
2025年11月02日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]