python实现银行实战系统

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

运行结果:

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

(0)

相关推荐

  • python银行系统实现源码

    本文实例为大家分享了python实现银行系统的具体代码,供大家参考,具体内容如下 1.admin.py 定义管理员信息和主界面显示 #!/usr/bin/env python # coding:UTF-8 """ @version: python3.x @author:曹新健 @contact: 617349013@qq.com @software: PyCharm @file: admin.py @time: 2018/9/11 10:14 ""&quo

  • Python3 适合初学者学习的银行账户登录系统实例

    一.所用知识点: 1. for循环与if判断的结合 2. %s占位符的使用 3. 辅助标志的使用(标志位) 4. break的使用 二.代码示例: ''' 银行登录系统 ''' uname = "bob" passwd = 123 judgment = 0 choice = 2 for i in range(3): username = input("请输入用户名:") password = int(input("请输入密码:")) if use

  • python实现简单银行管理系统

    本文为大家分享了python银行管理系统的具体代码,供大家参考,具体内容如下 自己写的练手小程序,练习面向对象的概念,代码中都有注释,刚学的同学也可以很容易看懂(需要自己用pickle模块新建一个database.txt文件,用来存储用户数据信息). # atm.py # 各种操作类 import random from card import Card from user import User import time class ATM(object): # 初始化 def __init__

  • python实现银行管理系统

    python实现银行管理系统,供大家参考,具体内容如下 有的地方用的方法的比较复杂,主要是为回顾更多的知识 test1用来存类和函数 #test1.py import random #用来随机产生卡号 import pickle #序列化,用来存放和取出产生的用户数据 import os #产生文件 import re #正则表达式,用来判断身份证和手机号,其他地方也可以使用 class Card: def __init__(self,cardId,password,money=0): self

  • Python实现的银行系统模拟程序完整案例

    本文实例讲述了Python实现的银行系统模拟程序.分享给大家供大家参考,具体如下: 银行系统模拟程序 1.概述 ​ 使用面向对象思想模拟一个简单的银行系统,具备的功能:管理员登录/注销.用户开户.登录.找回密码.挂失.改密.查询.存取款.转账等功能. ​ 编程语言:python. 2.目的 ​ 通过这个编程练习,可以熟悉运用面向对象的思想来解决实际问题,其中用到的知识点有类的封装.正则表达式.模块等. 3.体会 ​ 在编写这个程序时,实际上的业务逻辑还是要考虑的,比如修改密码时需要输入手机号.身

  • Python实现银行账户资金交易管理系统

    用类和对象实现一个银行账户的资金交易管理, 包括存款.取款和打印交易详情, 交易详情中包含每次交易的时间.存款或者取款的金额.每次交易后的余额. 如: 下面按照要求定义一个账户 Account 类.账户 Account 类的属性: 1. 当前账户金额                               money 2. 当前账户交易日志                        account_logs 账户 Account 类的方法: 1. 存钱                  

  • Python银行系统实战源码

    本文实例为大家分享了Python银行系统的具体代码,供大家参考,具体内容如下 import time import random import pickle import os class Card(object): def __init__(self, cardId, cardPasswd, cardMoney): self.cardId = cardId self.cardPasswd = cardPasswd self.cardMony = cardMoney self.cardLock

  • python实现银行实战系统

    本文实例为大家分享了python实现银行实战系统的具体代码,供大家参考,具体内容如下 先附上源代码: │ admin.py                         管理员界面 │ alluser.txt                        保存用户信息 │ atm.py                             银行的各部分操作方法(存钱取钱等等) │ card.py                            定义卡的类 │ main.py      

  • python实现银行账户系统

    Python编写一个简易银行账户系统,供大家参考,具体内容如下 文章中主要涉及的方法是Python中的open(filename, 'r')以读的方式打开文件open(filename, 'w')以写的方式打开文件我们用for * in *读取文件中的数据或者写入文件数据 用dict(eval(list2))方法来把字符串转化为字典. 详细代码如下 import math import re def main(): # 主函数 select = True while (select): menu

  • python mysql项目实战及框架搭建过程

    前言 python+mysql.connector,demo实战 框架搭建 说实话,其实没有使用到框架,只是用了, python+mysql.connector模块 首先在开始虚拟环境: (vega-j-vI5SDr) (vega) D:\test\python-mysql\python-mysql\vega>pip install mysql.connector Processing c:\users\administrator\appdata\local\pip\cache\wheels\7

  • python网络爬虫实战

    目录 一.概述 二.原理 三.爬虫分类 1.传统爬虫 2.聚焦爬虫 3.通用网络爬虫(全网爬虫) 四.网页抓取策略 1.宽度优先搜索: 2.深度优先搜索: 3.最佳优先搜索: 4.反向链接数策略: 5.Partial PageRank策略: 五.网页抓取的方法 1.分布式爬虫 现在比较流行的分布式爬虫: 2.Java爬虫 3.非Java爬虫 六.项目实战 1.抓取指定网页 抓取某网首页 2.抓取包含关键词网页 3.下载贴吧中图片 4.股票数据抓取 六.结语 一.概述 网络爬虫(Web crawl

  • Python深度学习实战PyQt5信号与槽的连接

    目录 1. 信号与槽(Signals and slots) 1.1 信号与槽的原理 1.2 信号发送者与槽的接收者 2. QtDesigner 建立信号与槽的连接 2.1 信号与槽的连接:不同的发送者与接收者,槽函数为控件的内置函数 QtDesigner 设置信号/槽的连接的操作步骤如下: 2.2 信号与槽的连接:不同的发送者与接收者,槽函数为自定义函数 QtDesigner 设置信号/槽的连接的操作步骤如下: 2.3 信号与槽的连接:相同的发送者与接收者,槽函数为控件的内置函数 2.4 信号与

  • Python深度学习实战PyQt5安装与环境配置过程详解

    目录 1. PyQt5 图形界面开发工具 1.1 从 CLI 到 GUI 1.2 PyQt5 开发工具 2. 安装 PyQt5 和 QtTools pip 安装 PyQt5 pip 安装 QtTools 3. QtDesigner 和 PyUIC 的环境配置 3.1 在 PyCharm 添加 Create Tools 3.2 添加 QtDesigner 工具 3.3 添加 PyUIC 工具 4. QtDesigner 和 PyUIC 的快速入门 4.1 QtDesigner 的启动和入门 新建一

  • Python人脸检测实战之疲劳检测

    目录 使用 OpenCV 构建犯困检测器 测试疲劳检测器 今天我们实现疲劳检测. 如果眼睛已经闭上了一段时间,我们会认为他们开始打瞌睡并发出警报来唤醒他们并引起他们的注意.我们测试一段视频来展示效果.同时代码中保留开启摄像头的的代码,取消注释即可使用. 使用 OpenCV 构建犯困检测器 要开始我们的实现,打开一个新文件,将其命名为 detect_drowsiness.py ,并插入以下代码: # import the necessary packages from scipy.spatial

  • Python文件操作实战案例之用户登录

    目录 一.前言 二.案例:用户登录 1.案例分析 2.程序设计 2.1 main() 2.2 c_flag() 2.3 init() 2.4 print_login_menu() 2.5 user_select() 2.6 root_login() 2.7 user_register() 2.8 user_login() 3.功能演示 总结 一.前言 在上一小节,我们介绍了文件的基本操作以及数据交换的格式,为了巩固我们上一节文件操作的知识. 在这里我们做一个最基本的案例:用户登录 二.案例:用户

随机推荐