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 XML RPC服务器端和客户端实例
Nov 22 Python
Python编程中的反模式实例分析
Dec 08 Python
Python和GO语言实现的消息摘要算法示例
Mar 10 Python
python如何使用unittest测试接口
Apr 04 Python
使用python实现简单五子棋游戏
Jun 18 Python
Python 中如何实现参数化测试的方法示例
Dec 10 Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 Python
python爬虫学习笔记之pyquery模块基本用法详解
Apr 09 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
Apr 21 Python
pycharm激活方法到2099年(激活流程)
Sep 22 Python
selenium自动化测试入门实战
Dec 21 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的宝库目录--PEAR
2006/10/09 PHP
生成php程序的php代码
2008/04/07 PHP
PHP cron中的批处理
2008/09/16 PHP
php ios推送(代码)
2013/07/01 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
2009/07/19 Javascript
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
jQuery中is()方法用法实例
2015/01/06 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
利用Angular2的Observables实现交互控制的方法
2018/12/27 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
python字符类型的一些方法小结
2016/05/16 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
python同步windows和linux文件
2019/08/29 Python
如何基于Python批量下载音乐
2019/11/11 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
Python3 集合set入门基础
2020/02/10 Python
在python image 中实现安装中文字体
2020/05/16 Python
eBay比利时购物网站:eBay.be
2019/08/09 全球购物
澳大利亚礼品篮网站:Macarthur Baskets
2019/10/14 全球购物
采购部岗位职责
2013/11/24 职场文书
六查六看剖析材料
2014/10/06 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
食品安全主题班会
2015/08/13 职场文书
幼儿园小班教育随笔
2015/08/14 职场文书
DBCA命令行搭建Oracle ADG的流程
2021/06/11 Oracle
Pillow图像处理库安装及使用
2022/04/12 Python