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 装饰器功能以及函数参数使用介绍
Jan 27 Python
浅析Python基础-流程控制
Mar 18 Python
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
python 链接和操作 memcache方法
Mar 04 Python
python下解压缩zip文件并删除文件的实例
Apr 24 Python
python代码 输入数字使其反向输出的方法
Dec 22 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
Dec 24 Python
Python一行代码实现快速排序的方法
Apr 30 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
Django的CVB实例详解
Feb 10 Python
Python yield生成器和return对比代码实例
Apr 20 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
Apr 14 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你的验证码安全码?
2007/01/02 PHP
php面向对象全攻略 (五) 封装性
2009/09/30 PHP
php语言流程控制中的主动与被动
2012/11/05 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
php倒计时出现-0情况的解决方法
2016/07/28 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
javascript倒计时功能实现代码
2012/06/07 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
jQuery中:animated选择器用法实例
2014/12/29 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
通过webpack引入第三方库的方法
2018/07/20 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
2021/01/11 Javascript
[47:26]完美世界DOTA2联赛 LBZS vs Forest 第二场 11.07
2020/11/09 DOTA
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
2018/03/19 Python
基于python实现聊天室程序
2018/07/27 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
python爬取天气数据的实例详解
2020/11/20 Python
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
浅析HTML5的WebSocket与服务器推送事件
2016/02/19 HTML / CSS
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
阿根廷票务网站:StubHub阿根廷
2018/04/13 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
西雅图电动自行车公司:Rad Power Bikes
2020/02/02 全球购物
什么是makefile? 如何编写makefile?
2012/08/08 面试题
英语专业学子个人的自我评价
2013/10/02 职场文书
研究生毕业鉴定
2014/01/29 职场文书
弘扬民族精神演讲稿
2014/05/07 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
顶岗实习协议书
2015/01/29 职场文书
2016年国庆节宣传标语
2015/11/25 职场文书
2016年党员岗位承诺书
2016/03/24 职场文书