python 银行系统
目前代码只写到这 主要部分已经实现 功能部分展现
首先我们需要五个类
用户类 : 成员属性 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 银行系统的更多相关文章
- python实战案例--银行系统
stay hungry, stay foolish.求知若饥,虚心若愚. 今天和大家分享一个python的实战案例,很多人在学习过程中都希望通过一些案例来试一下,也给自己一点动力.那么下面介绍一下这次 ...
- python实现银行系统模拟程序
银行系统模拟程序 关注公众号"轻松学编程"了解更多. 1.概述 使用面向对象思想模拟一个简单的银行系统,具备的功能:管理员登录/注销.用户开户.登录.找回密码.挂失.改密.查询 ...
- 源码篇:Python 实战案例----银行系统
import time import random import pickle import os class Card(object): def __init__(self, cardId, car ...
- python之进程与线程
什么是操作系统 可能很多人都会说,我们平时装的windows7 windows10都是操作系统,没错,他们都是操作系统.还有没有其他的? 想想我们使用的手机,Google公司的Androi ...
- Python之路,Day9, 进程、线程、协程篇
本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...
- python之路-Day10
操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 ...
- python 自动化之路 day 09 进程、线程、协程篇
本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...
- Python之路,Day17 - 分分钟做个BBS论坛
Python之路,Day17 - 分分钟做个BBS论坛 本节内容: 项目:开发一个简单的BBS论坛 需求: 整体参考"抽屉新热榜" + "虎嗅网" 实现不同 ...
- Day9 - Python 多线程、进程
Python之路,Day9, 进程.线程.协程篇 本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线 ...
随机推荐
- SQL Server Management Studio 2012 键盘快捷键(转)
无论是对于DBA还是Developer,键盘快捷键都是很常用的,动动键盘可比鼠标快多了,不过SQL Server 2012对SSMS(SQL Server Management Studio)中的快捷 ...
- Java学习---Excel读写操作
1.1.1. 简介 Apache POI 使用Apache POI 完成Excel读写操作 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API ...
- LVS跨网段DR模式并使用ldirectord实现RS高可用性
DR模型的工作过程: Client向VIP发起请求,请求被路由器接收到,转发给不同网段的Director的VIP,Director再通过私有网络转给RS服务器,RS服务器处理请求并通过自身配置的VIP ...
- 深入剖析php执行原理(4):函数的调用
本章开始研究php中函数的调用和执行,先来看函数调用语句是如何被编译的. 我们前面的章节弄明白了函数体会被编译生成哪些zend_op指令,本章会研究函数调用语句会生成哪些zend_op指,等后面的章节 ...
- Vim常用命令记录
(本文仅记录了Vim常用的按键功能和操作,用于备忘和查阅.若为Vim小白,建议先通过列出的参考资源获得对Vim更全面的了解.Vi 是几乎所有Linux发行版都支持的文字编辑工具,也是许多Linux下工 ...
- 我的第一个 Servlet
简单记录一下我从头写一个 Servlet 的过程. 我安装的是 Tomcat 7 版本,在 Ubuntu 18.04 上运行,IDE 为 Intellij IDEA. 首先创建一个 Java Web ...
- Nginx学习之从零搭建静态资源网站
前言 在某学习网站学习了nginx的安装和使用,以此文记录. 环境准备 安装在VMWare下的Centos虚拟机.由于我这是新装的虚拟机.所以很多插件都没有,这里干脆一次性安装上. wget ...
- hbase性能调优(1)
hbase性能调优 标签: hbase 性能调优 | 发表时间:2014-05-17 15:10 | 作者:无尘道长 分享到: 出处:http://www.iteye.com 一.服务端调优 1.参数 ...
- PAT——1054. 求平均值
本题的基本要求非常简单:给定N个实数,计算它们的平均值.但复杂的是有些输入数据可能是非法的.一个“合法”的输入是[-1000,1000]区间内的实数,并且最多精确到小数点后2位.当你计算平均值的时候, ...
- [LuoguP1221]最多因子数
[Luogu1221]最多因子数(Link) 求区间[L,R]内约数个数最多的数和它的约数个数. 这个题吧,乍一看确实不是很难,然后稍微一想,嗯,是个傻*题.这是唯一感受,不要问我为什么. 首先我们定 ...