python实现银行实战系统


Posted in Python onFebruary 26, 2020

本文实例为大家分享了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中修改这个allUserstxt文件,否则会产生无法启动程序的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,完成了

运行结果:

python实现银行实战系统

更多学习资料请关注专题《管理系统开发》。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的彩票机选器实例
Jun 17 Python
Django日志模块logging的配置详解
Feb 14 Python
Python对List中的元素排序的方法
Apr 01 Python
解决python3 urllib 链接中有中文的问题
Jul 16 Python
python利用dlib获取人脸的68个landmark
Nov 27 Python
python将三维数组展开成二维数组的实现
Nov 30 Python
python3中numpy函数tile的用法详解
Dec 04 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
Apr 24 Python
解决pycharm安装第三方库失败的问题
May 09 Python
SpringBoot首页设置解析(推荐)
Feb 11 Python
Matplotlib animation模块实现动态图
Feb 25 Python
pytorch fine-tune 预训练的模型操作
Jun 03 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
Feb 26 #Python
python序列类型种类详解
Feb 26 #Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
Feb 26 #Python
Python中if有多个条件处理方法
Feb 26 #Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
Feb 26 #Python
Python处理PDF与CDF实例
Feb 26 #Python
用Python绘制漫步图实例讲解
Feb 26 #Python
You might like
php in_array 函数使用说明与in_array需要注意的地方说明
2010/04/13 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
PHP写的简单数字验证码实例
2017/05/23 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
详解PHP实现支付宝小程序用户授权的工具类
2018/12/25 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
javascript innerHTML、outerHTML、innerText、outerText的区别
2008/11/24 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
jquery结婚电子请柬特效源码分享
2015/08/21 Javascript
javascript中使用未定义变量或值的情况分析
2016/07/19 Javascript
jquery表单提交带错误信息提示效果
2017/03/09 Javascript
node.js实现微信JS-API封装接口的示例代码
2017/09/06 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
2018/04/04 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
2018/10/14 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
vue.js实现左边导航切换右边内容
2019/10/21 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
node.js通过url读取文件
2020/10/16 Javascript
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
matplotlib实现区域颜色填充
2019/03/18 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
就业推荐自我鉴定
2013/10/06 职场文书
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
社区维稳工作方案
2014/06/06 职场文书
家长通知书家长意见
2015/06/03 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书
南阳市白酒市场的调查报告
2019/11/08 职场文书
Nginx的反向代理实例详解
2021/03/31 Servers
Golang流模式之grpc的四种数据流
2022/04/13 Golang
分享很少见很有用的SQL功能CORRESPONDING
2022/08/05 MySQL