python实现银行实战系统
作者:qq_1471587327 发布时间:2023-04-14 18:55:19
本文实例为大家分享了python实现银行实战系统的具体代码,供大家参考,具体内容如下
先附上源代码:
│ admin.py 管理员界面
│ alluser.txt 保存用户信息
│ atm.py 银行的各部分操作方法(存钱取钱等等)
│ card.py 定义卡的类
│ main.py 主程序 while True
│ user.py 用户的类
main.py的源代码
"""
人
类名:User
属性:姓名 身份证号 电话号 卡
行为:
卡
类名:Card
属性:卡号 密码 余额
行为:
提款机
类名:ATM
属性:用户字典
行为:开户 查询 取款 存款 转账 改密 锁定 解密 补卡 销户 退出
管理员
类名:Admin
属性:
行为:管理员界面 管理员验证 系统功能界面
"""
import os
import pickle
import admin
from atm import ATM
def main():
# 管理员对象
admin1 = admin.Admin()
# 管理员开机
admin1.printAdminView()
if admin1.adminOption():
return -1
# 提款机对象
filepath = os.path.join(os.getcwd(), "alluser.txt")
f = open(filepath, "rb")
allUsers = pickle.load(f)
f.close()
atm = ATM(allUsers)
while True:
admin1.printFunctionView()
# 等待用户的操作
option = input("请输入您的操作:")
if option == "1" or option == "开户":
atm.creatUser()
elif option == "2" or option == "查询":
atm.searchUserInfo()
elif option == "3" or option == "取款":
atm.withdrawals()
elif option == "4" or option == "存款":
atm.saveMoney()
elif option == "5" or option == "转账":
atm.transferMoney()
elif option == "6" or option == "改密":
atm.changePasswd()
elif option == "7" or option == "锁定":
atm.lockUser()
elif option == "8" or option == "解锁":
atm.unlockUser()
elif option == "9" or option == "补卡":
atm.newCard()
elif option == "0" or option == "销户":
atm.killUser()
elif option == "t" or option == "退出":
if not admin1.adminOption():
# 将当前系统中的用户信息保存到文件中
f = open(filepath, "wb")
pickle.dump(atm.allUsers, f, 2)
f.close()
return -1
else:
print("指令错误,请重新输入!!")
admin.timeFlush()
if __name__ == '__main__':
main()
admin.py的源代码
import time
def timeFlush():
sum = 2 # 设置倒计时时间
timeflush = 0.25 # 设置屏幕刷新的间隔时间
for i in range(0, int(sum / timeflush)):
list = ["\\", "|", "/", "—"]
index = i % 4
print("\r操作成功!请稍等 {} ".format(list[index]), end="")
time.sleep(timeflush)
class Admin(object):
admin = "1"
passwd = "1"
def printAdminView(self):
print("*****************************************************************")
print("* *")
print("* *")
print("* 欢迎登录csdn银行 *")
print("* *")
print("* *")
print("*****************************************************************")
def printFunctionView(self):
print("\r*****************************************************************")
print("* 开 户(1) 查 询(2) *")
print("* 取 款(3) 存 款(4) *")
print("* 转 账(5) 改 密(6) *")
print("* 锁 定(7) 解 锁(8) *")
print("* 补 卡(9) 销 户(0) *")
print("* 退 出(t) *")
print("*******************************************************************")
def adminOption(self):
inputAdmin = input("请输入管理员账号:")
if self.admin != inputAdmin:
print("账号输入有误!!")
return -1
inputPasswd = input("请输入管理员密码:")
if self.passwd != inputPasswd:
print("密码输入有误!!")
return -1
# 能执行到这里说明账户密码正确!!
timeFlush()
return 0
user.py的源代码
class User(object):
def __init__(self, name, idCard, phone, card):
self.name = name
self.idCard = idCard
self.phone = phone
self.card = card
card.py的源代码
class Card(object):
def __init__(self, cardId, cardPasswd, cardMoney):
self.cardId = cardId
self.cardPasswd = cardPasswd
self.cardMoney = cardMoney
self.cardLock = False
atm.py的源代码
import random
from card import Card
from user import User
class ATM(object):
def __init__(self, allUsers):
self.allUsers = allUsers
# 开户
def creatUser(self):
# 向用户字典中添加一对键值对(卡号 -- 用户)
name = input("请输入您的姓名:")
idCard = input("请输入您的身份证号码:")
phone = input("请输入您的电话号码:")
prestoreMoney = int(input("请输入预存储金额:"))
if prestoreMoney < 0:
print("预存储金额有误!!开户失败")
return -1
onePasswd = 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("您的卡号是%s, 请牢记卡号!!" % cardId)
# 查询
def searchUserInfo(self):
cardNum = 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("密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!")
user.card.cardLock = True
return -1
print("账号:%s 余额:%d" % (user.card.cardId, user.card.cardMoney))
# 取款
def withdrawals(self):
cardNum = 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("密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!")
user.card.cardLock = True
return -1
# 进行到这一步说明卡号信息都正确,进行取款操作
theMoney = int(input("请输入您需要取款的金额:"))
if theMoney > user.card.cardMoney:
print("余额不足!!")
return -1
elif theMoney < 0:
print("您输入金额有误!!")
else:
user.card.cardMoney -= theMoney
print("取款成功!! 余额为:%d" % user.card.cardMoney)
# 存款
def saveMoney(self):
cardNum = 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("密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!")
user.card.cardLock = True
return -1
# 进行到这一步说明卡号信息都正确,进行存款操作
theMoney = int(input("请输入您需要存款的金额:"))
if theMoney < 0:
print("您输入金额有误!!")
else:
user.card.cardMoney += theMoney
print("存款成功!! 余额为:%d" % user.card.cardMoney)
# 转账
def transferMoney(self):
cardNum = 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("密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!")
user.card.cardLock = True
return -1
# 到这里说明卡号信息正确,进行转账操作
theOtherCardId = input("请输入您需要转账的卡号:")
# 验证是否存在该卡号
otheruser = self.allUsers.get(theOtherCardId)
if not otheruser:
print("该卡号不存在!!转账失败")
return -1
if otheruser.card.cardLock:
print("该卡已被锁定!!")
return -1
theOtherCardName = input("请输入您需要转账人的姓名:")
# 验证转账人的姓名是否正确
if otheruser.name != theOtherCardName:
print("转账人姓名输入错误")
return -1
print("您的账户为%s 您的余额为%d" % (user.card.cardId, user.card.cardMoney))
# 开始转账
theMoney = int(input("请输入您需要转账的金额:"))
if theMoney < 0:
print("您输入金额有误!!")
else:
user.card.cardMoney -= theMoney
otheruser.card.cardMoney += theMoney
print("转账成功!!您的余额为%d" % user.card.cardMoney)
return -1
# 改密
def changePasswd(self):
cardNum = 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("密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!")
user.card.cardLock = True
return -1
# 下面进行改密操作
newPasswd = input("请输入新密码:")
if newPasswd == user.card.cardPasswd:
print("新旧密码不能一致!!操作失败")
return -1
# 验证密码
if not self.checkPasswd(newPasswd):
print("密码输入错误!!")
return -1
user.card.cardPasswd = newPasswd
print("密码修改成功!!请牢记您的密码")
# 锁定
def lockUser(self):
cardNum = 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:
print("身份证输入错误!!锁定失败")
return -1
# 进行到这一步说明信息输入成功,锁定开始
user.card.cardLock = True
print("锁定成功")
# 解锁
def unlockUser(self):
cardNum = 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:
print("身份证输入错误!!锁定失败")
return -1
# 进行到这一步说明信息输入成功,解锁开始
user.card.cardLock = False
print("解锁成功")
# 补卡
def newCard(self):
cardNum = 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("密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!")
user.card.cardLock = True
return -1
CardName = input("请输入您的姓名:")
# 验证姓名是否正确
if user.name != CardName:
print("姓名输入错误!!")
return -1
useridCard = input("请输入您的身份证号码:")
# 验证身份证是否正确
if user.idCard != useridCard:
print("身份证号码输入错误!!")
return -1
# 进行到这一步说明信息都正确,下面进行补卡操作,只换卡号,其他信息都不换
newIdCard= self.randomCardId()
self.allUsers[newIdCard] = self.allUsers.pop(user.card.cardId)
user.card.cardId = newIdCard
print("您的新卡号为:%s 请牢记!!" % user.card.cardId)
# 销户
def killUser(self):
cardNum = 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("密码输入错误!!该卡已被锁定!!请解锁后在进行其他操作!")
user.card.cardLock = True
return -1
CardName = input("请输入您的姓名:")
# 验证姓名是否正确
if user.name != CardName:
print("姓名输入错误!!")
return -1
useridCard = input("请输入您的身份证号码:")
# 验证身份证是否正确
if user.idCard != useridCard:
print("身份证号码输入错误!!")
return -1
answer = input("请问您确定要销户吗?确定(1) 取消(2)")
if answer == "1" or answer == "确定":
del self.allUsers[cardNum]
print("已销户")
return -1
elif answer == "2" or answer == "取消":
print("取消成功!!")
return -1
else:
print("输入错误!!")
return -1
# 验证密码
def checkPasswd(self, realPasswd):
for i in range(3):
tempPasswd = 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 str
alluser.txt源代码
�}q X 123456qcuser
User
q)�q}q(X nameqX 1qX idCardqhX phoneqhX cardq ccard
Card
q
)�q }q (X cardIdq
hX
cardPasswdqhX cardMoneyqKX cardLockq�ububs.
因为运用pickle库,要持久化存储用户信息(字典),故打开读取写入会乱码,第一排中的123456是卡号,其他信息全部是1,不要试图pycharm中修改这个allUsers。txt文件,否则会产生无法启动程序的bug,这个笔者也不知道该如何改进乱码现象,希望读者能优化
如果遇到因为alluser.txt而无法运行的情况:请往下看:
因为pickle库的原因,开始我们是要读取这个文件的,读的到程序顺利,读不到程序凉凉,故我们必须要在alluser.txt里面有pickle库可以识别的源代码。如果您是在pycharm里面复制粘贴的因为alluser.txt代码,故pycharm会自动转化为utf-8或者其他
我们要先把alluser.txt删除,让pickle库先不读取,创建一个空字典,我们先开户,然后退出程序是会自动创建一个新的alluser.txt文件,会把我们刚刚创建好的用户信息全部保存在txt文件中,这样我们再恢复,达到持久化保存的目的
filepath = os.path.join(os.getcwd(), "alluser.txt")
# 把之前的给注释掉,不让程序读取
# f = open(filepath, "rb")
# allUsers = pickle.load(f)
# f.close()
# 创建一个新的空字典
allUsers = {}
atm = ATM(allUsers)
然后我们进行开户操作,最后退出,会自动创建一个全新的alluser.txt文件
filepath = os.path.join(os.getcwd(), "alluser.txt")
f = open(filepath, "rb")
allUsers = pickle.load(f)
f.close()
# 然后我们恢复它
# allUsers = {}
atm = ATM(allUsers)
ok,完成了
运行结果:
更多学习资料请关注专题《管理系统开发》。
来源:https://blog.csdn.net/qq_44168690/article/details/104435015


猜你喜欢
- Wake-On-LAN简称WOL,是一种电源管理功能;如果存在网络活动,则允许设备将操作系统从待机或休眠模式中唤醒。许多主板厂商支持IBM提
- 实现思路是用深度遍历,对图片进行二值化处理,先找到一个黑色像素,然后对这个像素的周围8个像素进行判断,如果没有访问过,就保存起来,然后最后这
- select UNIX_TIMESTAMP(ADDDATE(NOW(),INTERVAL -60 DAY))首先根据now()获得当前时间使
- 本文实例为大家分享了使用python的twisted框架编写一个简单的聊天室具体代码,供大家参考,具体内容如下下面是基本架构代码:# -*-
- 1、超时时间以下这些配置项单位都是秒,在mysql命令行中可以使用show global variables like '变量名
- 一、config.ini 配置文件[DATABASE]host = 192.1.1.1username = rootpassword = r
- 小编曾经有过这样的经历,就是在安装使用django框架时候,遇到了部分模块不能够使用,检查了很久,才发现是因为版本问题,需要重新编译安装一个
- 这篇文章主要介绍了python列表推导式操作解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以
- 我们知道PL/SQL程序中运行SQL语句是存在开销的,因为SQL语句是要提交给SQL引擎处理这种在PL/SQL引擎和SQL引擎之间的控制转移
- JavaScript中,可以使用delete操作符来删除对象中的property:var t = {a:42, b:26};console.
- 场景:主库DB:utf8字符集备库DB:gbk字符集需求:校验主备数据是否一致,并且修复校验过程:设置主库连接为utf8,设置备库连接为gb
- 什么是组播点对点连接可以处理很多通信需求,不过随着直接连接数的增加,在多对通信方之间传递相同的消息会变得越来越困难。单独地向各个接收方发送消
- 一、总结apply —— 应用在 dataFrame 上,用于对 row 或者 column 进行计算applymap —— 应用在 dat
- 写在前面在一些接口请求的场景中,我们希望携带的数据不希望是以明文的方式提交的,也就是需要对参数做一些混淆或者加密处理,后端拿到数据后再进行解
- 算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是指执行算法所需要的计算工作量; 而空间复杂度是指执行这个算法所需要的内存空间。
- 背景在爬取网站数据时,我们通常会遇到一些动态渲染页面的网站。传统的静态网站我们可以直接通过 requests.get() 函数获取页面源代码
- 环境:Ubuntu14.04,tensorflow=1.4(bazel源码安装),Anaconda python=3.6声明变量主要有两种方
- 如何在聊天室实现趣味答题并计分功能?这个创意确实很好,我们可用在聊天室框架中加入一隐含帧(5分钟刷新一次)的做法来实现这一功能。questi
- link(){var olink = getElementById("link");var text = olink.i
- 简介字符串序列用于表示和存储文本,python中字符串是不可变的,一旦声明,不能改变通常由单引号(' ),双引号(" ),