python面向对象实现简易银行管理员页面系统

'''银行管理员页面系统设计:card 类: cardId  password  moneyuser 类:  username  phone   id  cards[]银行的工作人员:  账号  密码   登录    展现管理系统所有功能Bank类:开户取钱存钱转账销户查账解锁...'''
import pickle
import random# 银行卡
import time#card 类
class Card:def __init__(self, cardid, password, money):self.cardid = cardidself.password = passwordself.money = moneyself.cardlock = Falsedef __str__(self):return '卡号:{},余额:{}'.format(self.cardid, self.money)# 创建用户类
class User:def __init__(self, uid, name, phone, card):  # 此时的card,而是一个card对象self.uid = uidself.name = nameself.phone = phoneself.card = carddef __str__(self):return '用户名:{},联系方式:{}'.format(self.name, self.phone)#创建银行工作人员类
class BankWorker:__login_name = 'admina'__password = 'icbc111'def printWelcomePage(self):print('----------------------------')print('      欢迎使用ICBC管理系统        ')print('----------------------------')def workerLogin(self):login_name = input('输入账户名:')password = input('输入密码:')if self.__login_name != login_name:print('账户名输入有误!')return -1if self.__password != password:print('密码输入有误!')return -1print('登录成功,加载中....')time.sleep(2)return 0def bankFunction(self):s = '''
功能如下:1.  开户     2.  取钱      3.  存钱4.  转账     5.  销户      6.  查账7.  解锁     8.  改密      9.  修改信息10. 退出'''print(s)# 创建Bank类class Bank:def __init__(self, users):self.users = usersdef create_user(self):# uid, name, phone, carduid = input('输入身份证号码:')name = input('输入姓名:')phone = input('输入手机号码:')# 对card 进行操作# 产生卡号cardid = self.generate_cardid()# 输入密码password = input('请输入密码:')repassword = input('再次输入密码:')if password and repassword:if password == repassword:print('密码设置成功!')else:print('两次密码不一致!')return -1else:print('必须输入密码!')return -1# moneymoney = 0card = Card(cardid, password, money)user = User(uid, name, phone, card)# 通过字典将卡号与用户进行绑定self.users[cardid] = userprint('恭喜{}开户成功!卡号是:{}'.format(name,cardid))def generate_cardid(self):no = '62'for i in range(3):n = random.randint(0, 9)no += str(n)return nodef save_money(self):islogin, user = self.user_login()if not islogin:return -1# 输入存款金额money = int(input('验证成功!请输入存款金额:'))# 存钱成功if money <= 0:print('存款金额必须大于0,存款失败!')return -1user.card.money += moneyprint('您成功存款:{},账户余额是:{}'.format(money, user.card.money))def withdraw_money(self):islogin, user = self.user_login()if not islogin:return -1## 输入取款金额money = int(input('验证成功!请输入取款金额:'))if money <= 0:print('取款金额必须要大于0!取款失败!')return -1if money > user.card.money:print('卡中余额不足,取款失败!')return -1user.card.money -= moneyprint('您成功取款:{},账户余额是:{}'.format(money, user.card.money))def transfer_accounts(self):islogin, user = self.user_login()if not islogin:return -1# 输入转账金额money = int(input('验证成功!请输入转账金额:'))if money < 0 or money > user.card.money:print("金额输入有误或者账户金额不足,转账失败!")return -1cardid = input('输入收款人的卡号:')other_user = self.users.get(cardid)# 有没有这个卡号对应用户if not other_user:print('不存在此卡号,转账失败!')return -1# 如果有这个用户,此卡是否被锁定if other_user.card.cardlock:print('该卡已经锁定,无法完成转账')return -1print('转账中请稍后.....')user.card.money -= moneyother_user.card.money += moneytime.sleep(1)print('成功转账:{},卡中余额是:{}'.format(money, user.card.money))def user_login(self):cardid = input('输入银行卡号:')user = self.users.get(cardid, None)# 有没有这个卡号对应用户if not user:print('不存在此卡号,存款失败!')return False, user# 如果有这个用户,此卡是否被锁定if user.card.cardlock:print('该卡已经锁定,请解锁...')return False, user# 如果没有锁定则需要输入密码,如果密码输入错误三次则锁定此卡r = self.check_password(user.card.password)if not r:# 锁定账户print('密码连续3次输入错误,此卡锁定!')return False, userreturn True, userdef check_password(self, password):for i in range(3):pwd = input('输入登录密码:')if pwd == password:return Truereturn Falsedef update_password(self):islogin, user = self.user_login()if not islogin:return -1# 修改密码new_pwd = input('输入新密码:')renew_pwd = input('再次输入新密码:')if not new_pwd or not renew_pwd:print('密码不能为空,修改密码失败!')return -1if new_pwd != renew_pwd:print('密码不一致,修改密码失败!!')return -1user.card.password = new_pwdprint('修改密码成功!')def update_msg(self):islogin, user = self.user_login()if not islogin:return -1# 修改手机号new_phone = input('输入新密码:')renew_phone= input('再次输入新密码:')if not new_phone or not renew_phone:print('手机号不能为空,修改失败!')return -1if new_phone != renew_phone:print('输入不一致,修改失败!!')return -1user.card.phone = new_phoneprint('修改手机号成功!')def del_user(self):islogin, user = self.user_login()if not islogin:return -1answer = input('确认要注销用户吗?(yes/no)')if answer == 'yes':del self.users[user.card.cardid]time.sleep(1)print('账户注销成功!')def select_user(self):islogin, user = self.user_login()if not islogin:return -1print(user)print('卡号:{}的账户金额是:{}'.format(user.card.cardid, user.card.money))def unlock_user(self):cardid = input('输入银行卡号:')user = self.users.get(cardid, None)# 有没有这个卡号对应用户if not user:print('不存在此卡号,存款失败!')return -1uid = input('输入身份证号码:')if user.uid != uid:print('无效的身份证号码!解锁失败!')return -1user.card.cardlock = Falseprint('解锁成功!')# 入口
def main():# 1. 创建银行工作人员类bworker = BankWorker()# 2.加载欢迎页面bworker.printWelcomePage()# 3.登录r = bworker.workerLogin()if r == -1:return -1# 加载数据库中的数据:# with open('users.txt', 'rb') as rs:#     users = pickle.load(rs)users = {}# print(users)
# 516237458697000bank = Bank(users)while True:bworker.bankFunction()choice = input('请选择功能:')if choice == '1':print('----------开户----------')bank.create_user()elif choice == '2':# 取钱print('----------取钱----------')bank.withdraw_money()elif choice == '3':# 存钱print('----------存钱----------')bank.save_money()elif choice == '4':# 转账print('----------转账----------')bank.transfer_accounts()elif choice == '5':print('----------销户----------')bank.del_user()elif choice == '6':print('----------查账----------')bank.select_user()elif choice == '7':print('----------解锁----------')bank.unlock_user()elif choice == '8':print('----------改密----------')bank.update_password()elif choice == '9':print('----------修改手机号----------')bank.update_msg()elif choice == '10':# 退出answer = input('是否确定退出?(yes/no)')if answer.lower() == 'yes':print('退出中.......')time.sleep(2)with open('users.txt', 'wb') as ws:pickle.dump(bank.users, ws)print('退出完成!')breakif __name__ == '__main__':main()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单子模式

package test; class aceing { /** param args */ private static aceing ace; public aceing() { super(); System.out.println("aceing类中的无参构造器调用了"); } public static aceing getAceing() { if(ace null) { ace new aceing(); } return ace; }} pack…

《塑造互联网思维的企业》一一第4章 全球商务向社会化媒体的转变

第4章 全球商务向社会化媒体的转变 塑造互联网思维的企业社会化媒体在发达国家的广泛采用已是我们所熟知的&#xff0c;它在社会和全球文化产生的大范围变革中至关重要。为了完全了解其中的原因&#xff0c;有必要探究一下那些推动社会化商务的复杂且相互关联的因素的共同影响…

大数据之SparkSQL简介及DataFrame的使用

目录前言&#xff1a;1、Spark SQL1.1、Spark SQL概述1.2、DataFrames1.3、DataFrame常用操作 总结&#xff1a; 目录 前言&#xff1a; 本文主要介绍下SparkSQL以及SparkSQL的简单使用。这里只是做了一个非常简单的介绍&#xff0c;后续工作中如果有用到相关的知识&#xff…

python的各种推导式(列表推导式、字典推导式、集合推导式)

python的各种推导式&#xff08;列表推导式、字典推导式、集合推导式&#xff09; 推导式comprehensions&#xff08;又称解析式&#xff09;&#xff0c;是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。 共有三种推导&#xff0c;在Pyt…

原生js实现jquery库中选择器的功能(jquery库封装一)

今天是2017.1.1&#xff0c;新的一天&#xff0c;新的一年&#xff0c;新的一年里继续夯实基础知识&#xff0c;在工作中多些项目&#xff0c;多思考&#xff0c;多总结&#xff0c;前端是不断更新&#xff0c;在更新的过程中也是发现乐趣和挑战自我的过程&#xff0c;希望年轻…

Ubantu下使用vi时,方向键变字母输出、退格键无法删除字符的解决办法

目录前言&#xff1a;一、编辑/etc/vim/vimrc.tiny二、安装vim full版本三、添加”.vimrc”文件 目录 前言&#xff1a; 最近由于要玩TensorFlow&#xff0c;所以把尘封已久的Ubantu给打开了&#xff0c;不过配置网络的时候&#xff0c;算是一团糟&#xff0c;出现了在插入模…

《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述

本节书摘来自华章计算机《Python爬虫开发与项目实战》一书中的第3章&#xff0c;第3.1节&#xff0c;作者&#xff1a;范传辉著&#xff0c;更多章节内容可以访问云栖社区“华章计算机”公众号查看 第3章 初识网络爬虫 从本章开始&#xff0c;将正式涉及Python爬虫的开发。本章…

【python】解决:TypeError: can't send non-None value to a just-started generator

在一个生成器函数未启动之前&#xff0c;是不能传递数值进去。必须先传递一个None进去或者调用一次next(g)方法&#xff0c;才能进行传值操作 def product(c):# c.send(None)for i in range(5):print("生产者产生数据%d"%i)r c.send(str(i))print("消费者消费了…

Shell脚本与vi编辑器:vi启动与退出、工作模式、命令大全

Vi简介 Vi是一种广泛存在于各种UNIX和Linux系统中的文本编辑程序。Vi不是排版程序&#xff0c;只是一个纯粹的文本编辑程序。Vi是全屏幕文本编辑器&#xff0c;它没有菜单&#xff0c;只有命令。Vi不是基于窗口的&#xff0c;所以&#xff0c;这个多用途编辑程序可以用于在任何…

windows环境下,如何在Pycharm下安装TensorFlow环境

文章目录目录前言&#xff1a;1.安装Anaconda2.安装Tensorflow3.其他问题4.在pycharm中使用tensorflow目录 前言&#xff1a; 最近由于工作需要要使用TensorFlow&#xff0c;所以只能狂补相关的知识。本来博主打算在Ubantu上玩&#xff0c;但是由于一些原因还是放弃了这个想法…

python面向对象实现简易银行管理员页面系统【导入自定义模块】

main.py 人 类名&#xff1a;Person 属性&#xff1a;姓名 身份证号 电话 卡 行为&#xff1a;卡 类名&#xff1a;Card 属性&#xff1a;卡号 密码 余额 行为&#xff1a;银行 类名&#xff1a;Bank 属性&#xff1a;用户列表 提款机提款机 类名&#xff1a;ATM 属性&#xf…

[转] dpkg-deb命令

点击此处阅读原文 软件包管理 dpkg-deb命令是Debian Linux下的软件包管理工具&#xff0c;它可以对软件包执行打包和解包操作以及提供软件包信息。 语法dpkg-deb(选项)(参数) 选项-c&#xff1a;显示软件包中的文件列表&#xff1b; -e&#xff1a;将主控信息解压&#xff1b;…

《Effective Debugging:软件和系统调试的66个有效方法》一第5条:在能够正常运作的系统与发生故障的系统之间寻找差别...

本节书摘来自华章出版社《Effective Debugging&#xff1a;软件和系统调试的66个有效方法》一书中的第1章&#xff0c;第1.5节&#xff0c;作&#xff3b;希&#xff3d;迪欧米迪斯斯宾奈里斯&#xff08;Diomidis Spinellis&#xff09;&#xff0c;更多章节内容可以访问云栖社…

如何安装多个Python版本以及在Pycharm中切换Python版本

目录前言&#xff1a; 首先要切换不同的版本&#xff0c;你必须先下载不同的Python版本&#xff0c;整个步骤如下所示&#xff1a;1、下载Python2.7x和Python3.5x版本2、安装Python2.7x和Python3.5x版本3、配置环境变量&#xff0c;分别添加如下至path路径4、只修改Python27&am…

【python】逻辑运算符总结

# 逻辑运算符 &#xff1a;构造复杂条件 # 优先级 not > and > or # 逻辑与 and 并且、同时 import random# a random.randint(1,5) # if a > 1 and a < 3_流程控制: # print("true") # else: # print("false") # 可以转换为假&#…

C#中out和ref之间的区别【转】

首先&#xff1a;两者都是按地址传递的&#xff0c;使用后都将改变原来参数的数值。 其次&#xff1a;ref可以把参数的数值传递进函数&#xff0c;但是out是要把参数清空&#xff0c;就是说你无法把一个数值从out传递进去的&#xff0c;out进去后&#xff0c;参数的数值为空&am…

如何打开.ipynb文件

最近碰到文件名后缀为.ipynb文件&#xff0c;起初没太在意这种文件格式&#xff0c;用Notepad打开之后看到也是类似于JSON格式的信息&#xff0c;以为也是为其他的一些文件服务的&#xff08;类似于配置一些HTML文件的配置文件&#xff09;。但是后来才发现这也是一种文本表示形…

《CCNP TSHOOT 300-135认证考试指南》——2.9节凭记忆完成表格和列表

本节书摘来自异步社区《CCNP TSHOOT 300-135认证考试指南》一书中的第2章&#xff0c;第2.9节凭记忆完成表格和列表&#xff0c;作者 【加】Raymond Lacoste , 【美】Kevin Wallace&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 2.9 凭记忆完成表格和列表CC…

将f2fs文件系统到磁盘

1 用git下载f2fs文件系统tools的源代码。下载地址如下&#xff1a;http://git.kernel.org/cgit/linux/kernel/git/jaegeuk/f2fs-tools.git 具体的操作如下&#xff1a;git clone git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git 通过以…

【python】list append()和extend()区别

list append() ---》添加一个对象整体 extend() ----》添加迭代的对象 append() 添加单一元素在末尾 my_list [geeks, for] my_list.append(geeks) print(my_list) output: [geeks, for, geeks]添加一个list后&#xff0c;也是只添加一个list对象 my_list [geeks, for…