# 主程序运行

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:不太完善,蟹蟹评论的更多相关文章

  1. HttpDNS的坑以及一个针对安卓不太完善的测试方案

    背景:单位因为域名劫持(具体表象是某个地区的用户ping不通域名或者因为DNS解析的ip跨网段导致访问速度很慢)需要运维经常去定位,于是提出了httpDNS方案. 想法是美好的,现实是残酷的.没引入这 ...

  2. emouse思·睿—评论与观点整理之三

    虽说我主要做的硬件,平时的兴趣爱好比较关注移动互联网,混迹于虎嗅.爱范儿.雷锋网.36Kr.cnBeta.瘾科技.i黑马.TechWeb等这类科技以及创业媒体,遗憾的是系统的去写的并不多,好在还算充分 ...

  3. WP评论系统更换小结(转)

    第三方评论插件 多说 多说是一款追求极致体验的社会化评论框,可以用微博.QQ.人人.豆瓣等帐号登录并评论. 多说具备优质用户体验.速度和稳定性.社会化推荐.建站程序审核整合.垃圾评论过滤等特性. 自定 ...

  4. JavaScript OOP 之 this指向

    今天给大家分享一个JavaScript OOP中关于分辨this指向对象的小技巧,很实用呦! 我们先来看一段代码: 大家能判断出func();和obj.func();这两句的this指向吗? 首先,我 ...

  5. 还在繁琐的敲MVP接口和实现类吗,教你一秒搞定。

    只有程序员懒起来,才能提高开发效率 233333 在MVP的使用过程中,我们需要反复的去写各种MVP的接口和实现类, 实在是 太麻烦了!!所以抽时间撸了一款插件(只可用于Intellj IDEA 和 ...

  6. 手把手带你走进MVP +Dagger2 + DataBinding+ Rxjava+Retrofit 的世界

    0.0 Android开发现在的变化用一个词来形容就是 :翻天覆地 越来越多的项目使用了MVP + Rxjava+Retrofit +Dagger2 + DataBinding等等东西.. 但是这些东 ...

  7. PorterDuffXferMode不正确的真正原因PorterDuffXferMode深入试验)

    菜鸡wing遇敌PorterDuffXferMode,不料过于轻敌,应战吃力.随后与其大战三天三夜,三百余回合不分胜负.幸得 @咪咪控 相助,侥幸获胜. 关键字:PorterDuffXferMode ...

  8. 2018-2019-2 20165315《网络对抗技术》Exp2 后门原理与实践

    2018-2019-2 20165315<网络对抗技术>Exp2 后门原理与实践 一.实验任务 使用netcat获取主机操作Shell,cron启动 使用socat获取主机操作Shell, ...

  9. [2017BUAA软工助教]团队alpha得分总表

    一.累计得分 项目 介绍 采访 贡献分 功能 技术 α例会 α发布 α测试 α展示 α事后 合计 满分 10 10 10 10 10 50 10 10 150 10 280 hotcode5 10 9 ...

随机推荐

  1. 十八、IntelliJ IDEA 常用快捷键 之 Windows 版

    IntelliJ IDEA(简称 IDEA),是 Java 语言开发的集成环境,IDEA 在业界被公认为最好的 Java 开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE 支持.各类版本 ...

  2. Ajax全局加载框(Loading效果)的配置

    在Ajax进行后台数据请求的过程中,我们有时候会希望用户能知道页面后台还在做一些事情,这时候就需要给用户一个非常明确的提示,也就是我们所谓的进度条 废话完成~ 实现原理: Jquery可以对ajax进 ...

  3. qt+vs2005新建配置不自动加载Generated Files进工程(个人备份)

    工程右键Qt Project Settings 的Moc Directory路径删除 确定,再进入将删除路径加上

  4. plsql中特殊字符的处理

    --去除换行chr(10) update zhzl_address t set t.add_administration_num=replace(t.add_administration_num,ch ...

  5. 画布与SVG区别

  6. 对DataSet,DataRow,DateTable转换成相应的模型

            /// <summary>         /// DataRow 转成 模型         /// </summary>         /// <t ...

  7. linux系统快速安装宝塔

    宝塔面板分linux面板和windows面板,安装宝塔linux面板首先要访问宝塔官网查看对应版本进行选择 宝塔面板的安装需要注意的地方有: 1.纯净系统 2.确保是干净的操作系统,没有安装过其它环境 ...

  8. mysql的char,varchar,text,blob

    mysql的char,varchar,text,blob是几个有联系但是有有很大区别的字段类型,这算是mysql的基础吧,可是基础没有学好,恶补一下. 先简单的总结一下: char:定长,最大255个 ...

  9. 全志A64 QT移植

    1. 把编译工具 gcc-linaro-aarch64.tar.xz 添加到环境.bashrc 中 2. 下载 tslib-1.4.tar.gz ,libiconv-1.15.tar.gz ,qt-e ...

  10. 第6天 Java基础语法

    第6天 Java基础语法 今日内容介绍 自定义类 ArrayList集合 引用数据类型(类) 引用数据类型分类 提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类.Random类 ...