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远程登录代码
Apr 29 Python
Python中用于检查英文字母大写的isupper()方法
May 19 Python
python中os模块详解
Oct 14 Python
Python使用回溯法子集树模板解决迷宫问题示例
Sep 01 Python
python3.6连接MySQL和表的创建与删除实例代码
Dec 28 Python
python最小生成树kruskal与prim算法详解
Jan 17 Python
python实现知乎高颜值图片爬取
Aug 12 Python
Python IDE环境之 新版Pycharm安装详细教程
Mar 05 Python
Python virtualenv虚拟环境实现过程解析
Apr 18 Python
Python发送邮件实现基础解析
Aug 14 Python
Python lambda表达式原理及用法解析
Aug 18 Python
Numpy(Pandas)删除全为零的列的方法
Sep 11 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
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
利用谷歌 Translate API制作自己的翻译脚本
2014/06/04 PHP
php中静态类与静态变量用法的区别分析
2015/01/15 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
2020/06/28 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
laravel 错误处理,接口错误返回json代码
2019/10/25 PHP
js跑马灯代码(自写)
2013/04/17 Javascript
Json实现异步请求提交评论无需跳转其他页面
2014/10/11 Javascript
javascript控制台详解
2015/06/25 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
关于原生js中bind函数的简单实现
2016/08/10 Javascript
JavaScript实现256色转灰度图
2017/02/22 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
javascript实现点击星星小游戏
2019/12/24 Javascript
vue 项目引入echarts 添加点击事件操作
2020/09/09 Javascript
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
python最长回文串算法
2018/06/04 Python
Flask-Mail用法实例分析
2018/07/21 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
HEMA英国:荷兰原创设计
2018/08/28 全球购物
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
入党思想汇报怎么写
2014/04/03 职场文书
聘任证明怎么写
2015/03/02 职场文书
《中彩那天》教学反思
2016/02/24 职场文书
分析设计模式之模板方法Java实现
2021/06/23 Java/Android
警用民用对讲机找不同
2022/02/18 无线电
基于redis+lua进行限流的方法
2022/07/23 Redis