银行系统ps:不太完善,蟹蟹评论
# 主程序运行 import time
from guanli import GuanLi
from atm import ATM
from user import User def main():
guanli = GuanLi()# 创建一个管理对象
guanli.welcome() # 欢迎界面
guanli.caozuo() # 管理员登陆验证
userinfo = User.load_user() # 加载已有用户信息
atm = ATM(userinfo=userinfo) # 创建操作对象
while True:
guanli.operation() # 管理菜单的操作方法
option = (input("请输入您的操作:")) # 等待用户操作
in_quit = False # 定义一个变量,记录是否退出操作
if option == "":
# print("开户")
atm.kaihu()
elif option == "":
# print("查询")
atm.chaxun()
elif option == "":
# print("取款")
atm.qukuan()
elif option == "":
# print("存款")
atm.cunkuan()
elif option == "":
# print("转账")
atm.zhuanzhang()
elif option == "":
# print("改密")
atm.gaimi()
elif option == "":
# print("锁定")
atm.suodin()
elif option == "":
# print("解锁")
atm.jiesuo()
elif option == "":
# print("销户")
atm.xiaohu()
elif option == "t":
in_quit = True
print("退出成功")
break
elif option == "":
print("查询所有用户信息")
atm.show()
else:
print("操作有误,请重新操作:")
time.sleep(2)
# 设置一个管理类ps:代码全程无英文,适合英语不好的新手看
import time
from atm import ATM
from user import User
class GuanLi(object):
admin = ""
passwd = ""
def welcome(self):
print("*" * 30)
print(" " * 5+"欢迎登陆使用银行管理系统")
print("*" * 30)
def caozuo(self):# 判断管理员账号正确
count = 0
while True:
inputAdmin = input("请输入管理员账号:")
inputPasswd = input("请输入管理员密码:")
if self.admin != inputAdmin or self.passwd != inputPasswd:
print("账号或密码输入有误!!")
count +=1
if count >= 3:
print("错误次数已达上限,锁定一小时,1小时后再试")
break
else:
continue
print("操作成功! 请稍后……")
time.sleep(3)
return 0
# 走到这里说明密码账号没错
def operation(self):
print("*******************************************")
print("* 开户(1) 查询(2) *")
print("* 取款(3) 存款(4) *")
print("* 转账(5) 改密(6) *")
print("* 锁定(7) 解锁(8) *")
print("* 查询所有用户信息(9) 销户(0) *")
print("* 退出(t) *")
print("********************************************")
#设置一个卡的类ps:密码隐藏不太会,哪位大神可评论区留言。蟹蟹
class Card(object):
def __init__(self,cid,pwd):
self.cid = cid # 卡号
self.pwd = pwd # 密码
self.money = 0 # 余额
self.is_lock = False # 是否锁定,默认不是
#设置一个用户类ps:包括用户信息
from os import path
import os
import pickle
class User(object):
def __init__(self, name, uid, card):
self.name = name # 用户名
self.uid = uid # 身份证
self.card = card # 银行卡
def __str__(self):
return ("姓名:{},身份证号:{},卡号:{}".format(self.name,self.uid,self.card.cid))
# 将用户对象保存到文件中
@staticmethod
def all_user(userinfo):
pathname = path.join(os.getcwd(),"userinfo.db")
with open(pathname, "wb") as fp:
pickle.dump(userinfo, fp)
# 从文件中加载数据重新转换为用户对象
@staticmethod
def load_user():
pathname = path.join(os.getcwd(), "userinfo.db")
if path.exists(pathname):
with open(pathname, "rb") as fp:
userinfo = pickle.load(fp)
return userinfo
else:
return {}
#设置一个辅助类
from random import randint
# 生成随机的银行卡号
class BankCard():
def get_cid(length=8):
cid = ""
for i in range(8):
cid += str(randint(0, 9))
return cid
# 创建一个ATM操作类
import time
import random
from card import Card
from helper import BankCard
from user import User
class ATM(object):
def __init__(self,userinfo):
self.userinfo = userinfo # 保存所有的用户信息
def kaihu(self): # 开户,目标是向用户列表中添加一对键值对(卡号:用户)
name = input("请输入您的姓名:")
uid = input("请输入身份证号:")
pwd = input("请输入密码:")
cid = BankCard.get_cid()
card = Card(cid, pwd)
user = User(name, uid, card)
print(user)
print("开户成功")
self.userinfo[cid] = user
User.all_user(self.userinfo)
def chaxun(self): # 查询
cid = input("请输入您的卡号")
user = self.userinfo.get(cid)
if user:
if user.card.is_lock:
print("该卡已锁定,请先解锁!")
return
else:
print("正在查询,请稍后")
time.sleep(1.5)
print("账户余额:¥{}元".format(user.card.money))
else:
print("无效的卡")
def qukuan(self): # 取款
cid = input("请输入您的卡号")
user = self.userinfo.get(cid)
if user.card.is_lock:
print("该卡已锁定,请先解锁!")
return
else:
money = (int(input("请输入您要取款的金额:")))
user.card.money -= money
User.all_user(self.userinfo)
print("取款成功")
def cunkuan(self): # 存款
count = 0
while True:
cid = input("请输入银行卡号:")
user = self.userinfo.get(cid)
if user:
if user.card.is_lock:
print("该卡已锁定,请先解锁!")
return
pwd = input("请输入您的银行卡密码:")
if pwd == user.card.pwd:
money = input("请输入您的存款金额:")
user.card.money+= int(money)
User.all_user(self.userinfo)
print("存钱成功")
break
elif count < 3:
print("密码错误")
count += 1
if count == 3:
user.card.is_lock = True
print("该卡被锁定,请本人携带身份证到柜台办理解锁")
user.all_user(self.userinfo)
break
else:
print("无效的卡")
def zhuanzhang(self): # 转账
count = 0
while count < 3:
cid = input("请输入您的卡号:")
user = self.userinfo.get(cid)
if user:
if user.card.is_lock:
print("该卡已锁定,请先解锁!")
return
else:
pwd = input("请输入您的密码:")
if pwd == user.card.pwd:
other_cid = input("请输入收款人的账户:")
other_user = self.userinfo.get(other_cid)
money = int(input("请输入转账的金额:"))
if user.card.money >= money:
other_user.card.money += money
user.card.money -= money
user.all_user(self.userinfo)
print("转账成功")
break
else:
print("密码错误,请重新输入:")
count += 1
continue
else:
print("无效的卡")
def gaimi(self): # 改密
cid = input("请输入您的卡号:")
user = self.userinfo.get(cid)
if user:
if user.card.is_lock:
print("该卡已锁定,请先解锁!")
return
else:
pwd = input("请输入您的银行卡原密码:")
count = 0
while True :
if pwd == user.card.pwd:
pwd = input("请输入您要修改的银行卡密码:")
pwd1= input("请再次输入您要修改的银行卡密码:")
if pwd == pwd1:
user.card.pwd = pwd
user.all_user(self.userinfo)
print("密码修改成功")
break
else:
print("两次密码输入不一致,请重新输入:")
continue
else:
print("原密码输入有误!")
count += 1
if count >= 3:
user.card.is_lock = True
print("该卡被锁定,请本人携带身份证到柜台办理解锁")
user.all_user(self.userinfo)
break
else:
print("剩余输入次数{}".format(3-count))
def suodin(self): # 锁定
cid = input("请输入您的卡号:")
user = self.userinfo.get(cid)
if user:
if user.card.is_lock:
print("该卡已被锁定!")
return
else:
user.card.is_lock = True
print("锁定成功!")
user.all_user(self.userinfo)
return
def jiesuo(self): # 解锁
cid = input("请输入您的卡号:")
user = self.userinfo.get(cid)
if user.card.is_lock:
uid = input("请出示您本人的身份证:")
if uid == user.uid:
user.card.is_lock = False
print("解锁成功")
else:
print("本银行暂不支持代解锁!!!")
def show(self): # 查询所有用户信息
for u in self.userinfo:
print(self.userinfo[u])
def xiaohu(self): # 销户
count = 0
while count < 3:
cid = input("请输入您的卡号")
user = self.userinfo.get(cid)
if user:
pwd = input("请输入您的密码:")
if pwd == user.card.pwd:
uid = input("请出示您的身份证:")
if uid == user.uid:
del self.userinfo[cid]
user.all_user(self.userinfo)
print("该账户已注销")
break
else:
print("暂不接受代理,ps:你丫逗我玩呢?")
else:
print("密码错误,请重新输入:")
count += 1
continue
else:
print("该卡已损坏")
银行系统ps:不太完善,蟹蟹评论的更多相关文章
- HttpDNS的坑以及一个针对安卓不太完善的测试方案
背景:单位因为域名劫持(具体表象是某个地区的用户ping不通域名或者因为DNS解析的ip跨网段导致访问速度很慢)需要运维经常去定位,于是提出了httpDNS方案. 想法是美好的,现实是残酷的.没引入这 ...
- emouse思·睿—评论与观点整理之三
虽说我主要做的硬件,平时的兴趣爱好比较关注移动互联网,混迹于虎嗅.爱范儿.雷锋网.36Kr.cnBeta.瘾科技.i黑马.TechWeb等这类科技以及创业媒体,遗憾的是系统的去写的并不多,好在还算充分 ...
- WP评论系统更换小结(转)
第三方评论插件 多说 多说是一款追求极致体验的社会化评论框,可以用微博.QQ.人人.豆瓣等帐号登录并评论. 多说具备优质用户体验.速度和稳定性.社会化推荐.建站程序审核整合.垃圾评论过滤等特性. 自定 ...
- JavaScript OOP 之 this指向
今天给大家分享一个JavaScript OOP中关于分辨this指向对象的小技巧,很实用呦! 我们先来看一段代码: 大家能判断出func();和obj.func();这两句的this指向吗? 首先,我 ...
- 还在繁琐的敲MVP接口和实现类吗,教你一秒搞定。
只有程序员懒起来,才能提高开发效率 233333 在MVP的使用过程中,我们需要反复的去写各种MVP的接口和实现类, 实在是 太麻烦了!!所以抽时间撸了一款插件(只可用于Intellj IDEA 和 ...
- 手把手带你走进MVP +Dagger2 + DataBinding+ Rxjava+Retrofit 的世界
0.0 Android开发现在的变化用一个词来形容就是 :翻天覆地 越来越多的项目使用了MVP + Rxjava+Retrofit +Dagger2 + DataBinding等等东西.. 但是这些东 ...
- PorterDuffXferMode不正确的真正原因PorterDuffXferMode深入试验)
菜鸡wing遇敌PorterDuffXferMode,不料过于轻敌,应战吃力.随后与其大战三天三夜,三百余回合不分胜负.幸得 @咪咪控 相助,侥幸获胜. 关键字:PorterDuffXferMode ...
- 2018-2019-2 20165315《网络对抗技术》Exp2 后门原理与实践
2018-2019-2 20165315<网络对抗技术>Exp2 后门原理与实践 一.实验任务 使用netcat获取主机操作Shell,cron启动 使用socat获取主机操作Shell, ...
- [2017BUAA软工助教]团队alpha得分总表
一.累计得分 项目 介绍 采访 贡献分 功能 技术 α例会 α发布 α测试 α展示 α事后 合计 满分 10 10 10 10 10 50 10 10 150 10 280 hotcode5 10 9 ...
随机推荐
- A Gentle Introduction to Transfer Learning for Deep Learning | 迁移学习
by Jason Brownlee on December 20, 2017 in Better Deep Learning Transfer learning is a machine learni ...
- PAT——1001 害死人不偿命的(3n+1)猜想 (15)
对给定的任一不超过1000的正整数n,简单地数一下,需要多少步(砍几下)才能得到n=1? 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值. 输出格式:输出从n计算到1需要的步数. 输入样例 ...
- nodejs中如何连接mysql
nodejs中如何连接mysql,下面给出一个小Demo. 第一步安装mysql模块npm install mysql 第二步导入mysql模块var mysql = require('mysql') ...
- 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)(Finchley版本)
转载请标明出处: 原文首发于:>https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f9-sleuth/ 本文出自方志朋的博客 这篇文章主 ...
- Reading Notes : 180214 计算机的总线结构
读书<计算机组成原理>,百度百科 基本上接触过计算机的人,都多少知道计算机的具体构成,但是真正能讲明白的却说了很多,本节将讲解一下计算机的基本硬件构成和一些基本信息,简单认识,以后再深入了 ...
- keepalived+haproxy 安装配置
1.安装配置keepalived 修改配置文件/etc/keepalived/keepalived.conf ! Configuration File for keepalived global_de ...
- 支付宝支付示例-python
项目演示: 1.输入金额 2.扫码支付: 3.支付完成: 具体操作步骤: 第一步:注册账号 https://openhome.alipay.com/platform/appDaily. ...
- OAuth2.0 与 oauth2-server 库的使用
作者:baiyi链接:https://www.jianshu.com/p/83b0f6d82d6c來源:简书 OAuth2.0 是关于授权的开放网络标准,它允许用户已第三方应用获取该用户在某一网站的私 ...
- [转]MySQL日期与时间戳常用函数
本文原文地址:https://www.cnblogs.com/jhy-ocean/p/5560857.html 平时比较常用的时间.字符串.时间戳之间的互相转换,虽然常用但是几乎每次使用时候都喜欢去搜 ...
- 壹度DIY_微信小程序组件_小程序插件开发
开源免费插件,diy特有的页面机制,搭配30+自定义组件,让你的站点每一个页面都可以完全自定义,可无缝对接任意小程序,如有疑问加入qq壹度小程序交流群:302866773:或wx:liu2417301 ...