1.确定对象与方法

  • 类名: Person
    属性: 姓名 身份证号 电话号 卡
    行为:


  • 类名: Card
    属性: 卡号 密码 余额
    行为:

  • 银行 主程序
    类名: Bank
    属性:
    行为: 用户列表 提款机

  • 提款机
    类名: ATM
    属性: 用户字典
    行为: 开户 查询 取款 存储 转账 改密 锁定 解锁 补卡 销户

  • 管理员界面
    类名: Admin
    属性:
    行为: 管理员界面 管理员验证 系统功能界面

2.构造界面与主函数

管理员界面:管理员登录后才能进行其他操作

 """*********************************************************             欢迎进入Minions的银行管理系统********************************************************"""

系统功能界面

 """*********************************************************       开户(1)          销户(0)*       锁定(7)          解锁(8)***                  退出(q)***       查询(2)          取款(3)*       存款(4)          转账(5)*       改密(6)          补卡(9)********************************************************"""

主程序的大致逻辑

while True:--打印功能界面--# 等待用户的操作option = input("请输入您的操作: ")if option == "1":print("开户")elif option == "2":print("查询")elif option == "3":print("取钱")elif option == "4":print("存钱")elif option == "5":print("转账")elif option == "6":print("改密")elif option == "7":print("加锁")elif option == "8":print("解锁")elif option == "9":print("补卡")elif option == "0":print("销户")elif option == "q":print("退出该系统!")
3.创建类并完成界面

users.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Author: Minions
# @Date: 2019-11-26 21:30:15
# @Last Modified by:  Minions
# @Last Modified time:  2019-11-26 22:55:31class User(object):def __init__(self, name, idNum, phone, card):self.name = nameself.idNum = idNumself.phone = phoneself.card = card

cards.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Author: Minions
# @Date: 2019-11-26 21:30:15
# @Last Modified by:  Minions
# @Last Modified time:  2019-11-26 22:40:55class Cards(object):def __init__(self, cardId, cardPasswd, cardMoney):self.cardId = cardIdself.cardPasswd = cardPasswdself.cardMoney = cardMoneyself.cardLock = False

admin.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Author: Minions
# @Date: 2019-11-26 21:30:15
# @Last Modified by:  Minions
# @Last Modified time:  2019-11-26 21:56:38import time
import pickle
import osclass Admin(object):admin = "136"passwd = "123"# 打印管理员界面def printAdminView(self):interface = \"""*********************************************************             欢迎进入Minions的银行管理系统********************************************************"""print(interface)# 打印系统功能界面def printSysFunctionView(self):interface = \"""*********************************************************       开户(1)          销户(0)*       锁定(7)          解锁(8)***                  退出(q)***       查询(2)          取款(3)*       存款(4)          转账(5)*       改密(6)          补卡(9)********************************************************"""print(interface)# 验证管理员账号密码def adminVerify(self):inputAdmin = input("请输入管理员账号: ")if self.admin != inputAdmin:print("账号输入有误! ")return FalseinputPasswd = input("请输入管理员密码: ")if self.passwd != inputPasswd:print("密码输入有误! ")return False# 账号密码正确print("操作成功!请稍后*******")time.sleep(2)return True# 由于存储数据是字节的方式,卡号容易忘记,所以添加了该方法 输入All可以查询所有用户信息def SearchAllUserMsg(self):absPath = os.getcwd()# 提款机对象filePath = os.path.join(absPath, "allusers.txt")fp = open(filePath, "rb")allUsers = pickle.load(fp)for user in allUsers:print("-"*60)print(">>>用户卡号为: %s<<< " %user)print(">>>用户身份证号为: %s<<< "%allUsers[user].idNum)print(">>>用户密码为: %s<<< " %allUsers[user].card.cardPasswd)
4.创建提款机的所有方法并完成main函数

main.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Author: Minions
# @Date: 2019-11-26 21:30:15
# @Last Modified by:  Minions
# @Last Modified time:  2019-11-27 14:38:48"""
pickle: 可将python中的任意数据类型转化成bytes并写入到文件中,同样也可以把文件中写好的bytes转换回我们python的数据,方便
"""
import time
from admin import Admin
from atm import ATM
import pickle
import osdef main():# 管理员对象admin = Admin()# 管理员开机admin.printAdminView()if not admin.adminVerify():return FalseabsPath = os.getcwd()# 提款机对象filePath = os.path.join(absPath, "allusers.txt") # 创建一个所有用户信息的表fp = open(filePath, "rb")allUsers = pickle.load(fp)atm = ATM(allUsers)while True:admin.printSysFunctionView()# 等待用户的操作option = input("请输入您的操作: ")if option == "1":atm.creatUser()elif option == "2":atm.searchUserInfo()elif option == "3":atm.getMoney()elif option == "4":atm.saveMoney()elif option == "5":atm.transferMoney()elif option == "6":atm.changePasswd()elif option == "7":atm.lockUser()elif option == "8":atm.unLockUser()elif option == "9":atm.newCard()elif option == "0":atm.killUser()elif option == "All":admin.SearchAllUserMsg()elif option == "q":if admin.adminVerify():print("已退出该系统!")# 将当前系统中的用户信息保存到文件中filePath = os.path.join(absPath, "allusers.txt")fp = open(filePath, "wb")pickle.dump(atm.allUsers,fp)fp.close()return Truetime.sleep(2)if __name__ == '__main__':main()
class ATM(object):def __init__(self, allUsers):self.allUsers = allUsersdef creatUser(self):passdef searchUserInfo(self):passdef getMoney(self):passdef saveMoney(self):passdef transferMoney(self):passdef changePasswd(self):passdef lockUser(self):passdef unLockUser(self):passdef newCard(self):passdef killUser(self):passdef checkPasswd(self, realPasswd):passdef randomCardId(self):pass
5.完成提款机的所有方法

由于很多操作前都需要验证卡号,是否锁定,密码是否输入正确
所以添加了verify()方法
atm.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Author: Minions
# @Date: 2019-11-26 21:30:15
# @Last Modified by:  Minions
# @Last Modified time:  2019-11-27 21:56:38from cards import Cards
from users import User
import randomclass ATM(object):def __init__(self, allUsers):self.allUsers = allUsers# 开户def creatUser(self):# destination: 向用户字典中添加一对键值对(卡号:用户)name = input("请输入您的姓名: ")idNum = input("请输入您的身份证号码: ")phone = input("请输入您的电话号码: ")preStoreMoney = float(input("请输入您的预存款: "))if preStoreMoney < 0:print("预存款输入有误,开户失败!")return FalseoriginPasswd = input("请输入您要设置的初始密码: ")# 验证密码if not self.checkPasswd(originPasswd):print("密码输入错误,开户失败!")return False# 所有需要的信息就完成了cardId = self.randomCardId()card = Cards(cardId, originPasswd, preStoreMoney)user = User(name, idNum, phone, card)# 存到字典self.allUsers[cardId] = userprint("开户成功!您的卡号为%s" %cardId)# 查询def searchUserInfo(self):flag,user = self.verify("查询")if flag:print("账号: %s      余额: %.2f" %(user.card.cardId, user.card.cardMoney))# 取款def getMoney(self):flag, user = self.verify("取款")if flag:money = float(input("请输入取款金额: "))if money > user.card.cardMoney:print("余额不足!")return Falseif money <= 0:print("输入错误,取款失败!")return Falseuser.card.cardMoney -= moneyprint("取款成功,当前余额为%.2f" %user.card.cardMoney)# 存款def saveMoney(self):flag, user = self.verify("存款")if flag:money = float(input("请输入存款金额: "))if money <= 0:print("输入错误,存款失败!")return Falseuser.card.cardMoney += moneyprint("存款成功,当前余额为%.2f" % user.card.cardMoney)# 转账def transferMoney(self):flag, user = self.verify("转账")if flag:money = float(input("请输入转账金额: "))if money > user.card.cardMoney:print("余额不足!")return Falseif money <= 0:print("输入错误,转账失败!")return FalsetransferCardId = input("请输入您要转账的卡号: ")transferUser = self.allUsers.get(transferCardId)if not transferUser:print("该卡号不存在,转账失败!")return Falseuser.card.cardMoney -= moneytransferUser.card.cardMoney += moneyprint("转账成功,当前余额为%.2f" % user.card.cardMoney)# 该密def changePasswd(self):flag, user = self.verify("改密")if flag:updatePassword = input("请输入您要更改的密码: ")verifyPassword = input("请再次输入密码: ")if updatePassword == verifyPassword:user.card.cardPasswd = updatePasswordreturn Trueelse:print("俩次密码不相同,改密失败!")return False# 锁定def lockUser(self):flag, user = self.verify("锁定")if flag:tempIdNum = input("请输入您的身份证号: ")if tempIdNum != user.idNum:print("身份证输入错误,锁定失败")return Falseuser.card.cardLock = Trueprint("锁定成功")# 解锁def unLockUser(self):cardId = input("请输入您的卡号: ")# 验证该卡号是否存在user = self.allUsers.get(cardId)if not user:print("该卡号不存在,解锁失败!")return Falseif not user.card.cardLock:print("此卡没有被锁定,无需解锁!")return Falseif not self.checkPasswd(user.card.cardPasswd):print("密码输入错误,解锁失败!")return FalsetempIdNum = input("请输入您的身份证号: ")if tempIdNum != user.idNum:print("身份证输入错误,锁定失败")return Falseuser.card.cardLock = Falseprint("解锁成功!")def newCard(self):pass# 注销def killUser(self):flag, user = self.verify("销户")if flag:tempIdNum = input("请输入您的身份证号: ")if tempIdNum != user.idNum:print("身份证输入错误,销户失败")return Falsedel self.allUsers[cardId]print("销户成功")# 改密def checkPasswd(self, realPasswd):# 三次输入密码错误将会锁定for i in range(3):tempPasswd = input("请输入密码: ")if tempPasswd == realPasswd:return Truereturn False# 随机生成不同六位卡号def randomCardId(self):while True:str = ""for i in range(6):ch = chr(random.randrange(ord('0'),ord('9')+1))str += ch# 判断是否重复,如果不重复返回str  get()返回指定键的值,如果值不在字典中返回默认值Nonif not self.allUsers.get(str):return str# 验证卡号,是否锁定,密码是否输入正确def verify(self,operation):cardId = input("请输入您的卡号: ")# 验证该卡号是否存在user = self.allUsers.get(cardId)if not user:print("该卡号不存在,%s失败!" %operation)return False,user# 判断是否被锁定if user.card.cardLock:print("该卡已被锁定,请解锁后才使用其他功能!")return False,user# 验证密码if not self.checkPasswd(user.card.cardPasswd):print("密码输入错误,该卡已被锁定,请解锁后才使用其他功能!")user.card.cardLock = Truereturn False,userreturn True,user

注: 开户或者销户要输入q退出后才保存

6.截图

管理员登录

开户

查询

卡号错误或密码错误的情况

退出系统

输入All查看其他用户信息

销户

7.总结

该系统由五个部分组成
admin.py
atm.py
cards.py
main.py
users.py

通过此次学习,了解了类的优点与使用,加强了对分散知识的总结,其次要细心,分步进行才可以逐步求精,先总体后部分才能写的全面些,有些写的不足还请多多指教

python银行自动取款机系统详写相关推荐

  1. python——银行自动提款机系统ATM

    目录 管理员类Admin() 管理员Admin类最终代码 人类Person Person类最终代码 信用卡类Card Card类最终代码 ATM类 ATM类最终代码 main()方法 main()方法 ...

  2. 基于JAVA控制台版本银行自动取款机

    这是我第一次写项目,感觉还行吧.不敢说很好. 项目要求: 实现银行自动取款机的以下基本操作功能:读卡.取款.存款.查询.(自动取款机中修改密码不作要求) 其他要求: 用户在账号密码正确进入主界面后,只 ...

  3. 基于JAVA控制台版本银行自动取款机(修改版)

    这是我第一次写项目所进行的修改之后的内容,感觉比之前写的通顺而且相比较更加容易理解. 项目要求: 实现银行自动取款机的以下基本操作功能:读卡.取款.存款.查询.(自动取款机中修改密码不作要求) 其他要 ...

  4. C语言ATM自动取款机系统项目的设计与开发

    文章目录 基于C语言的ATM自动取款机系统项目设计与开发 一.ATM自动取款机系统功能分析与介绍 二.开发ATM自动取款机系统的工具以及创建项目的过程 2.1.本项目使用Visual Studio 2 ...

  5. 画出ATM自动取款机系统相关图

    ATM自动取款机(automatic teller machine)是银行在银行营业大厅.超市.商业机构.机场.车站.码头和闹市区设置的一种小型机器,利用一张信用卡大小的胶卡上的磁带[或芯片卡上的芯片 ...

  6. Java语言实现 ATM 自动取款机系统

    ATM自动取款机 ​​​ 实现 ATM 自动取款机系统,本系统有如下功能: 1.登陆    用户通过输入卡号和密码登陆本系统,如果输入错误,提示错误并重新输入,连续三次错误吞卡. 2.取款    系统 ...

  7. 模拟atm取款机 php,C语言模拟ATM自动取款机系统

    C语言实验报告 题目名称:C语言模拟ATM自动取款机系统 一:问题描述: C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能: 代码实现的功能: 账号及密码输 ...

  8. 通过Java设计与实现ATM自动取款机系统

    设计一个ATM自动取款机系统. 要求如下:实现欢迎界面.登录.存款.取款.查询.修改密码功能. /** *@author Ben1002 *@version jdk1.8.0_131 */ packa ...

  9. 模拟银行自动终端系统

    本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 二. 项目功能要求: 项目开始运行显示主菜单为: 银行自助终端系统 ********************* ...

最新文章

  1. Linux上程序调试的基石(1)--ptrace
  2. android动态添加的页面怎么加功能_Android跳转应用安装页面
  3. LeetCode 593. 有效的正方形(数学)
  4. golang日志输出
  5. 论__AlertDialog自定义布局回调修改的正确方式
  6. Python基础技术点和常见错误
  7. 多线程中抛异常的这个面试题你会吗?
  8. makefile语法_Makefile的语法
  9. 问题六十八: 着色模型(shading model)(0)——《Ray Tracing from the Ground Up》代码的移植
  10. 计算机论文的字体要求,论文格式及字体大小要求(标准)
  11. avr单片机动态数码管c语言,AVR单片机8位数码管显示的程序实现(两种方法介绍)...
  12. mac 建 android 签名,mac android app 签名工具
  13. mysql安装出现change_mysql-5.msi安装出现change,repaire,or remove installation
  14. 怎样免费快速把PDF文件压缩到最小?
  15. 工作缺点和不足及措施_工作总结中的不足与改进该怎么写?
  16. 清默网络——CCIE考试经验与心得(1)
  17. libcurl模拟hi百度登陆
  18. 2010计算机试题答案,2010全国计算机等级考试试题与答案公布
  19. 硕士论文评阅意见的模板参考
  20. MBA案例分析(人员培训五)

热门文章

  1. 包包各部位名称图解_[原创]整理出的包包名称及各部位英语集
  2. 【历史上的今天】8 月 7 日:“哈佛马克一号”正式完成;Linux 权威诞生;信息论先驱出生
  3. 淘宝天猫如何导入数据包批量上传宝贝的方法
  4. 用计算机解锁ipad密码忘了怎么办,iPad密码忘记了怎么办_iPad密码忘记解锁办法-太平洋IT百科手机版...
  5. XSS Trap—XSS DNS防护的简单尝试
  6. Android ImageView到底怎么设置圆角图片?背景圆角?控件圆角?图片圆角?占位图圆角?
  7. i春秋-贝丝家族-flag{erhei_e8934_erUO}
  8. 李弘毅机器学习笔记:第十六章—无监督学习
  9. 一起做激光反光板(三)-EKF建图公式推导
  10. Oracle数据库之Collection干货