# 主程序运行

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. java序列化报错

    Main.javat mainsr &java.util.Collections$UnmodifiableList�%1�� L listq ~xr ,java.util.Collection ...

  2. Multicast Routing

    Multicasting Source S sends packets to multicast group G1 (and minimize the number of copies) Revers ...

  3. ICT测试点是干什么的, 怎么设置!

    简单理解:ICT类似如万用表,只是把表笔换成了测试针.那么问题就简单了,一颗普通的RLC元件,都必须有两个测试点才能够测试,当然同一个网络共用的节点用一个测试点就可以了. 详细描述: PCB设计时要看 ...

  4. java基本方法

    Java 方法 在前面几个章节中我们经常使用到 System.out.println(),那么它是什么呢? println() 是一个方法. System 是系统类. out 是标准输出对象. 这句话 ...

  5. Linux 文件压缩与解压相关

    tar [-cxtzjvfpPN] 文件与目录 .... 参数:-c :建立一个压缩文件的参数指令-x :解开一个压缩文件的参数指令 -t :查看压缩文件里面的文件 特别注意: c/x/t 同时只能存 ...

  6. HTML&CSS 问题

    1.子div使用浮动,父div高度自适应(个人感觉好用) 方法: css: <style> .clear{ clear:both} </style> html:在父div关闭之 ...

  7. ubuntu 18.04可以连接内网,无法连接外网

    手动增加网关后,又重新sudo apt-get upgrade,  提示/etc/resolvconf/resolv.conf.d更新时,选Y后,不用手动修改网关也可以连接外网了. 一切默认更新后,1 ...

  8. 集合Gk表示这样一堆数字,该集合内的数字有k个1

    问题描述 集合Gk表示这样一堆数字,该集合内的数字有k个1.比如,G1 = { 1, 10, 100, 1000, ...} G2 = {11, 110, 1110 }, ... , Gk { ... ...

  9. linux下pip错误 ImportError: No module named 'pip_internal'

    wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate sudo python get-pip.py

  10. linux操作之软件安装(一)

    rpm 包安装 RedHat Package Manager的缩写 , linux 的软件包可能存在依赖关系,比如某某依赖某某才能使用. 挂载一个光盘 mount -t auto /dev/cdrom ...