python实现简单银行管理系统
作者:喜欢海呀 发布时间:2021-01-24 17:59:28
标签:python,银行,管理系统
本文为大家分享了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()
更多学习资料请关注专题《管理系统开发》。
来源:https://blog.csdn.net/qq_25046261/article/details/78302547
0
投稿
猜你喜欢
- PHP屏蔽蜘蛛访问代码代码:常用搜索引擎名与 HTTP_USER_AGENT对应值百度baiduspider谷歌googlebot搜狗sog
- javascript中要判断一个变量是否为array通常是比较困难的,因为var a = [];alert(t
- 钟馗之眼是一个强大的搜索引擎,不同于百度谷歌,它主要收集网络中的主机,服务等信息,国内互联网安全厂商知道创宇开放了他们的海量数据库,对之前沉
- 前言相信看到这个题目,可能大家都觉得是一个老生常谈的月经topic了。一直以来其实把握一个“值传递”基本上就能理解各种情况了,不过最近遇到了
- 引言经过函数学习之后我们会发现函数不被调用是不会直接执行的,我们在之前的函数调用之后发现运行的结果都是函数体内print()打印出来的结果,
- 一 概念介绍Index Condition Pushdown (ICP)是MySQL 5.6 版本中的新特性,是一种在存储引擎层使用索引过滤
- 目录一、pyecharts绘制词云图WordCloud.add()方法简介二、绘制词云图对应轮廓按diamond显示三、对应完整代码如下所示
- 方法一:f = open("foo.txt") &
- 准备我测试使用的Python版本为2.7.10,如果你的版本是Python3.5的话,这里就不太适合了。 使用Speech API原理我们的
- 解决方法:1。 改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql
- 前几天在一本书上看到一篇可以利用字典破解zip文件密码的文章,觉得比较有意思于是研究了一番,在这里分享一下原理主要是利用python里自带的
- ajax的优缺点AJAX使用Javascript技术向服务器发送异步请求AJAX无须刷新整个页面因为服务器响应内容不再是整个页面,而是页面中
- 组合字面量组合字面量是最直接方式初始化Go对象,假设定义了Book类型,使用字面量初始化代码如下:type Book struct { &n
- go install编译并安装代码包,对于库,会生成目标库文件,并且放置到GOPATH/pgk目录下。对于可执文件,会生成目标可执行文件,并
- 系统模块import os系统模块用于对系统进行操作。常用方法os模块的常用方法有数十种之多,本文中只选出最常用的几种,其余的还有权限操作、
- 获取标签内容使用element.attribute()方法获取dom元素的内容,如:dr = driver.find_element_by_
- SnowNLP是国人开发的python类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库
- 项目需求,可以用复选框勾选项目进行提交,如下表<table class="layui-table" lay-dat
- 本文实例为大家分享了python rsync服务器之间文件夹同步的具体代码,供大家参考,具体内容如下About rsync配置两
- 1提取 PDF 内容# pip install PyPDF2 安装 PyPDF2import PyPDF2from PyPDF2