目前代码只写到这 主要部分已经实现 功能部分展现

首先我们需要五个类

用户类  : 成员属性 name  id  以及 card

卡类: 成员属性 卡号  密码  余额   锁

界面类:   管理员界面 用户操作界面

银行类 : 操作功能

ATM: 实现功能

用户类:

class User():    
def __init__(self, name, IDnum, card): #传入名字,id, 以及card
self.name = name
self.IDnum = IDnum
self.card = card

卡类:

class Card():                       
def __init__(self, cardid, money, passwd,): #传入卡号 余额 密码
self.cardid = cardid
self.money = money
self.passwd = passwd
self.lock = False #卡在刚创建时候默认无锁

界面类:

import time

class Admin():
passaccount = "1"
passwrad = "1" def printadmin_view(self): #管理员界面以及管理员输入账号密码
        print("**********************************************************")
print("* *")
print("* *")
print("* 欢迎使用银行 *")
print("* *")
print("* *")
print("* *")
print("**********************************************************")
intaccount = input("请输入账号:") #管理员操作验证密码
if intaccount != self.passaccount:
print('账号输入有误')
return -1
intpasswrad = input("请输入密码:")
if intpasswrad != self.passwrad:
print('密码输入有误')
return -1
print('欢迎')
time.sleep(2)
return 0 def printuser_view(self): #用户操作时候的界面
print("***********************************************************")
print("* *")
print("* 开户(open) 查询(search) *")
print("* 改密(change) 锁定(locking) *")
print("* 存钱(deposit) 取钱(withdraw) *")
print("* 转账(transfer) 补卡(ressiue) *")
print("* 解锁(unlocking) 销卡(destory) *")
print("* *")
print("***********************************************************")

银行类:

from admin import Admin  # 导入我们自己写入的界面类以及ATM类
from atm import ATM
import pickle
def main():
admin1 = Admin()
atm = ATM()
if admin1.printadmin_view():
return -1
while True:
admin1.printuser_view()
i = input("请输入你想进行的操作:\n 输入'quit'退出")
if i == 'quit':
atm.quit()
return -1
elif i == 'open':
atm.open_account()
elif i == 'search':
atm.search_account()
elif i == 'locking':
atm.locking_account()
elif i == 'unlocking':
atm.unlocking_account() if __name__ == '__main__':
main()

ATM:

import random,pickle
from user import User #导入我们自己写的卡类以及用户类
from card import Card
class ATM():
def __init__(self):
self.all_users = {} #准备空字典存储用户信息
self.fp = open("alluser.txt", 'r+b') #打开文件存储 字节流 写入时候将覆盖 所以下面将会读出文件内容保存在字典中
try:
self.all_users = pickle.load(self.fp) #捕捉异常 当文件类容为空时pickle会报异常 没有异常的话将会从文件读取信息
except EOFError:
print("文件内容为空")
print(self.all_users)
def open_account(self): #开户功能
name = input("请输入你的名字:")        
IDnum = input("请输入你的ID:")
card_id = self.random_acount() #调用下面的卡号生成方法 生成卡号
passwd = input("请输入密码:")
passwd_rp = input("请重复密码:") if self.verify_passwd(passwd_rp,passwd)==-1: #调用方法如经过两次密码不对 重新输入三次不对退出操作
return -1 money = input("存入的金额:")
if int(money) < 0 : #判断存入金额是否大于0
print("金额有误,操作失败")
return -1
  
card = Card(card_id,money,passwd) #生成卡对象
user = User(name,IDnum,card)      #生成用户对象
self.all_users[card_id] = user     #存入字典 键为卡号 值为生成的用户对象
      print("开卡成功您的卡号是:%s"%card_id)

    def search_account(self):              #搜索功能  利用键值卡号 搜索到对应的用户
sch_card = input("请输入要查询的卡号:")
if not self.all_users.get(sch_card) : #判断卡号是否存在
print("输入的卡号错误")
sch_card = input("请重新输入:\n输入'q'退出:")
sch_user = self.all_users[sch_card]
intpass_wd = input("请输入密码:")
passwd = sch_user.card.passwd if self.verify_passwd(intpass_wd,passwd) == -1: #输错密码重复三次 否则退出操作(完善功能可以进行锁卡)
return -1 print("余额:{}".format(sch_user.card.money)) #输出余额
return 0 def change_pw(self):
pass def locking_account(self): #锁卡 也是输入卡号 为键值 搜索用户 得到用户信息
lock_card = input("请输入卡号:")
if self.whether_cardid(lock_card) == -1: #判断卡号是否存在
return -1
if self.all_users[lock_card].card.lock: #判断卡是否被锁 (完善功能后开户搜索都可以进行判断)
print("卡已经锁定")
return -1
lock_user = self.all_users[lock_card]
lock_passwd = input("请输入密码:") #输入密码 确认是否是本人操作
passwd = lock_user.card.passwd
if self.verify_passwd(lock_passwd,passwd) == -1: #输入密码错误重复密码
print("密码错误退出操作")
return -1
lock_user.card.lock = True #将卡对象的成员属性锁设为True 锁卡成功
print("此卡已被锁定")
return 0
def deposit_money(self):
pass def withdraw_money(self):
pass def transfer_money(self):
pass def ressiue_card(self):
pass def unlocking_account(self): #解锁
unlock_card = input("请输入卡号:")
if self.whether_cardid(unlock_card) == -1: 判断卡号是否存在 不存在退出操作
return -1
if not self.all_users[unlock_card].card.lock:
print("卡未被锁定")
return -1
unlock_user = self.all_users[unlock_card]
unlock_passwd = input("请输入密码:")
passwd = unlock_user.card.passwd
if self.verify_passwd(unlock_passwd,passwd) == -1: #输错密码时 重复密码
print("密码错误退出操作")
unlock_user.card.lock = False
print("卡已解锁")
def destory_account(self):
pass def quit(self):
pickle.dump(self.all_users, self.fp) #退出时将字典写进文件
self.fp.close() #关闭文件通道
def random_acount(self): #生成卡号
cardnum = ""
while True:
for i in range(6):
num = random.randint(0, 9)
cardnum += str(num)
if not self.all_users.get(cardnum):
return cardnum def verify_passwd(self, passwd_rp, passwd):# 输入错误时 验证密码
index = 2
while passwd_rp != passwd:
passwd_rp = input("密码输入错误请重新输入:")
print("%d次机会"%index)
print("机会使用完毕将操作失败")
index -= 1
if index == 0:
print("操作失败 退出操作")
return -1
return 0 def whether_cardid(self,card_id): #判断是否存在卡号
if self.all_users.get(card_id):
return 0
print("卡号不存在")
return -1 def main(): #测试代码
atm = ATM()
atm.locking_account()
atm.unlocking_account() if __name__ == '__main__':
main()

python 银行系统的更多相关文章

  1. python实战案例--银行系统

    stay hungry, stay foolish.求知若饥,虚心若愚. 今天和大家分享一个python的实战案例,很多人在学习过程中都希望通过一些案例来试一下,也给自己一点动力.那么下面介绍一下这次 ...

  2. python实现银行系统模拟程序

    银行系统模拟程序 关注公众号"轻松学编程"了解更多. 1.概述 ​ 使用面向对象思想模拟一个简单的银行系统,具备的功能:管理员登录/注销.用户开户.登录.找回密码.挂失.改密.查询 ...

  3. 源码篇:Python 实战案例----银行系统

    import time import random import pickle import os class Card(object): def __init__(self, cardId, car ...

  4. python之进程与线程

    什么是操作系统       可能很多人都会说,我们平时装的windows7 windows10都是操作系统,没错,他们都是操作系统.还有没有其他的? 想想我们使用的手机,Google公司的Androi ...

  5. Python之路,Day9, 进程、线程、协程篇

    本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...

  6. python之路-Day10

    操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 ...

  7. python 自动化之路 day 09 进程、线程、协程篇

    本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...

  8. Python之路,Day17 - 分分钟做个BBS论坛

    Python之路,Day17 - 分分钟做个BBS论坛   本节内容: 项目:开发一个简单的BBS论坛 需求: 整体参考"抽屉新热榜" + "虎嗅网" 实现不同 ...

  9. Day9 - Python 多线程、进程

    Python之路,Day9, 进程.线程.协程篇   本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线 ...

随机推荐

  1. 自动出题判分——c#学习实践

    1.程序功能自动出题—(程序随意给出10以内加减乘除)并且判断结果正确与否,正确打对勾,错误打错号. 2.设计界面: 3.代码: using System; using System.Collecti ...

  2. [转] Spark-Sql On YARN自动调整Executor数配置

    在所有的NodeManager中,修改yarn-site.xml,为yarn.nodemanager.aux-services添加spark_shuffle值,并设置yarn.nodemanager. ...

  3. weblogic之CVE-2016-0638反序列化分析

    此漏洞是基于CVE-2015-4852漏洞进行黑名单的绕过,CVE-2015-4852补丁主要应用在三个位置上 weblogic.rjvm.InboundMsgAbbrev.class :: Serv ...

  4. python反序列化

    import pickle import os class A(object): def __reduce__(self): a = """python -c 'impo ...

  5. jQuery中异步请求

    1.load方法 使用load()方法通过Ajax请求加载服务器中的数据,并把返回的数据放置到指定的元素中,它的调用格式为: $(selector).load(URL,data,callback); ...

  6. ValueError: Invalid leaf XXX

    Bug:ValueError: Invalid leaf XXX 无效的搜索条件——检查search函数中的domain表达式格式!是否少了括号! search(['user_id', '=', us ...

  7. Vue - 如何实现一个双向绑定

    JS - 如何实现一个类似 vue 的双向绑定 Github JS 实现代码 先来看一张图: 这张图我做个简要的描述: 首先创建一个实例对象,分别触发了 compile  解析指令 和 observe ...

  8. ArcSDE 数据迁移 Exception from HRESULT: 0x80041538问题及解决方案

    一.问题描述 1.采用gdb模板文件,在ArcSDE(数据服务器)中批量创建数据库表(数据迁移)时,用到接口ESRI.ArcGIS.Geodatabase.IGeoDBDataTransfer的方法T ...

  9. Genymotion集成到Eclipse

    在Eclipse中使用Genymotion Google的ADT中自带的模拟器速度太慢,可以使用Genymotion代替.关于Genymotion的安装方法,可以直接访问官网,需要注册账号,因为创建模 ...

  10. HDU 1069 Monkey and Banana(转换成LIS,做法很值得学习)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 Monkey and Banana Time Limit: 2000/1000 MS (Java ...