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列表append和+的区别浅析
Feb 02 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
Nov 08 Python
python的re正则表达式实例代码
Jan 24 Python
python通过elixir包操作mysql数据库实例代码
Jan 31 Python
Django使用paginator插件实现翻页功能的实例
Oct 24 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 Python
在linux下实现 python 监控usb设备信号
Jul 03 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
Aug 19 Python
python图片二值化提高识别率代码实例
Aug 24 Python
tornado+celery的简单使用详解
Dec 21 Python
Jupyter Notebook打开任意文件夹操作
Apr 14 Python
通俗易懂了解Python装饰器原理
Sep 17 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 adodb连接不同数据库
2009/03/19 PHP
劣质的PHP代码简化
2010/02/08 PHP
迁移PHP版本到PHP7
2015/02/06 PHP
php微信公众平台配置接口开发程序
2016/09/22 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
2016/11/20 PHP
php基于dom实现的图书xml格式数据示例
2017/02/03 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
2014/10/10 Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
2015/03/03 Javascript
javascript省市级联功能实现方法实例详解
2015/10/20 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
AngularJS表单验证功能
2017/10/19 Javascript
基于vue.js 2.x的虚拟滚动条的示例代码
2018/01/23 Javascript
Node.js使用Angular简单示例
2018/05/11 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
python Django模板的使用方法(图文)
2013/11/04 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
python剪切视频与合并视频的实现
2020/03/03 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
2020/04/07 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
开发人员所需要知道的HTML5性能分析面面观
2012/07/05 HTML / CSS
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
Omio英国:搜索并比较便宜的巴士、火车和飞机
2019/08/27 全球购物
二手房购房意向书范本
2014/04/01 职场文书
三月学雷锋活动总结
2014/06/26 职场文书
2016年社区中秋节活动总结
2016/04/05 职场文书