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

首先我们需要五个类

用户类  : 成员属性 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. SQL Server Management Studio 2012 键盘快捷键(转)

    无论是对于DBA还是Developer,键盘快捷键都是很常用的,动动键盘可比鼠标快多了,不过SQL Server 2012对SSMS(SQL Server Management Studio)中的快捷 ...

  2. Java学习---Excel读写操作

    1.1.1. 简介 Apache POI 使用Apache POI 完成Excel读写操作 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API ...

  3. LVS跨网段DR模式并使用ldirectord实现RS高可用性

    DR模型的工作过程: Client向VIP发起请求,请求被路由器接收到,转发给不同网段的Director的VIP,Director再通过私有网络转给RS服务器,RS服务器处理请求并通过自身配置的VIP ...

  4. 深入剖析php执行原理(4):函数的调用

    本章开始研究php中函数的调用和执行,先来看函数调用语句是如何被编译的. 我们前面的章节弄明白了函数体会被编译生成哪些zend_op指令,本章会研究函数调用语句会生成哪些zend_op指,等后面的章节 ...

  5. Vim常用命令记录

    (本文仅记录了Vim常用的按键功能和操作,用于备忘和查阅.若为Vim小白,建议先通过列出的参考资源获得对Vim更全面的了解.Vi 是几乎所有Linux发行版都支持的文字编辑工具,也是许多Linux下工 ...

  6. 我的第一个 Servlet

    简单记录一下我从头写一个 Servlet 的过程. 我安装的是 Tomcat 7 版本,在 Ubuntu 18.04 上运行,IDE 为 Intellij IDEA. 首先创建一个 Java Web ...

  7. Nginx学习之从零搭建静态资源网站

    前言   在某学习网站学习了nginx的安装和使用,以此文记录. 环境准备   安装在VMWare下的Centos虚拟机.由于我这是新装的虚拟机.所以很多插件都没有,这里干脆一次性安装上. wget ...

  8. hbase性能调优(1)

    hbase性能调优 标签: hbase 性能调优 | 发表时间:2014-05-17 15:10 | 作者:无尘道长 分享到: 出处:http://www.iteye.com 一.服务端调优 1.参数 ...

  9. PAT——1054. 求平均值

    本题的基本要求非常简单:给定N个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个“合法”的输入是[-1000,1000]区间内的实数,并且最多精确到小数点后2位.当你计算平均值的时候, ...

  10. [LuoguP1221]最多因子数

    [Luogu1221]最多因子数(Link) 求区间[L,R]内约数个数最多的数和它的约数个数. 这个题吧,乍一看确实不是很难,然后稍微一想,嗯,是个傻*题.这是唯一感受,不要问我为什么. 首先我们定 ...