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\信号量 将线 ...
随机推荐
- Emacs快捷键(较全)
C = Control M = Meta = Alt | Esc Del = Backspace 基本快捷键(Basic) C-x C-f "find"文件, 即在缓冲区打开/新建 ...
- JavaScript学习---JavaScript基础知识
JavaScript的引入方式 JavaScript的引入方式: 1.直接在script里面写: 2.使用<script src="JS的文件位置"> {#1 直接编写 ...
- Bearer Token的加密解密规则(OAuth中间件)
在OAuthBearerAuthenticationMiddleware中使用Microsoft.Owin.Security.DataHandler. SecureDataFormat<TDat ...
- 延期年金(deferred annuity)
含义:推迟m个时期后才开始付款的年金. 延期年金现值为 二.永续年金(Perpetuity) 永续年金:无限期支付下去的年金. 为期末付永续年金(perpetuity-immediate)的现值 表示 ...
- Kendo 计算字段
var Product = kendo.data.Model.define({ fields: { "quantity": { type: "number" } ...
- java中形参的可变参数的定义(如String... args) .
如果有下面的一个笔试题: 已知我们有如下的调用关系 logIt(”log message 1 “); logIt(”log message2”, " log message3”); logI ...
- 【转】iphone 输入/输出流异步读写数据
原文:iphone 输入/输出流异步读写数据 分类: iphone2012-05-30 14:50 2484人阅读 评论(1) 收藏 举报 iphoneattributesinterfacepaths ...
- Word 2019 for mac更新喽!
新的Word2019添加了许多的新功能,提供了新的文档处理方式,如改进的数字笔功能.焦点模式.学习工具和翻译,为用户提供了用于创建专业而优雅的高效文档工具,帮助用户节省时间,并得到优雅美观的结果,有效 ...
- Scrum培训小体会
公司组织Scrum培训. 虽然是针对ScrumMaster这个角色的培训,但更多是基于对Scrum这个敏捷开发实践方法的了解. 回来也有一些感想,记录下来.以后在工作实践中,继续探索.实践.体验.感悟 ...
- docker-8-本地镜像发布到阿里云
镜像的生成方法 1.前面的DockerFile 2.从容器创建一个新的镜像 docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]] 将本地镜像推送到阿里云 ...