【实战项目】使用Python 写一份关于银行自动提款机系统【已完结】

您所在的位置:网站首页 工商银行自动取款机查询余额 【实战项目】使用Python 写一份关于银行自动提款机系统【已完结】

【实战项目】使用Python 写一份关于银行自动提款机系统【已完结】

2024-06-20 00:46| 来源: 网络整理| 查看: 265

写在前面:本章需要一定的python基础,以及项目开发的一点点经验。

目录

一、项目分析及功能描述

二、整个项目编写的思路

三、功能的实现

四、最后整个代码

一、项目分析及功能描述

由于是利用python进行编写,所以我们采用面对对象编程的思想对整个项目进行搭建框架。

按照银行取款机的框架,我们采用四个对象进行模拟银行取款系统。

 

对象一  取款机的显示界面和管理员登录——Admin

功能:

① 负责银行系统主界面的显示,这里由于使用的是控制台,所以以字符的形式显示主界面

② 拥有管理员登录和退出的操作,内置管理员账号和密码,与后面用户的对象区别开来。

 

对象二 取款机对象——ATM

功能:开户、查询账户余额、取款、存款、转账、修改密码、锁定卡号、解锁卡号、补卡、销户等功能

 

对象三 用户对象——User

功能:存放用户信息,包括用户的 用户真实姓名、用户身份证信息、用户电话号码以及用户持有卡的信息

 

对象四 卡对象——Card

功能:存放卡的信息和状态,有卡号、卡的密码、卡上余额以及卡的锁定状态

 

二、整个项目编写的思路

下面来到 模拟银行取款机运作的环节,也是我们对项目分析环节。

一个银行取款机的日常操作应该是:

开机管理员登录等待用户操作执行用户的各个操作,并保证每个操作的正确性管理员退出系统保存文件,关机

对于每个环节,在这里简单的进行功能分析

开机

这个环节需要 有载入开机界面、载入用户数据(allUsers,一个字典类型)操作。这个字典类型键应当存放卡号、值存放的是卡号所对应的用户信息,

管理员登录

这个环节需要 验证管理员信息是否正确,否则就会自动关机

等待用户操作

这个环节需要 一个用户操作功能的界面

执行用户的各个操作,并保证每个操作的正确性

这个环节对应 ATM对象的各个操作

管理员退出系统

对管理员信息进行再一次验证,然后关闭自动取款机

保存文件,关机

把当前的allUsers字典变量存储到当前文件夹下的txt文件,使得以后重新开机能够加载用户数据

 

三、功能的实现

这部分是按照各个对象进行写各自的功能模块。

对象一 —— Admin

在同一目录下 创建 admin.py 文件

功能目标:

① 显示取款机的界面

② 存储管理员账号和密码便于管理员登录

class Admin(object): Admin = "1" #管理员账号 passwd = "1" #管理员密码 def printAdminView(self): # 开机界面 print("********************正在进入取款机系统*************************") print("********************正在进入取款机系统*************************") print("********************正在进入取款机系统*************************") print("********************正在进入取款机系统*************************") print("********************正在进入取款机系统*************************") print("********************正在进入取款机系统*************************") print("********************正在进入取款机系统*************************") def sysFunctionView(self): # 用户操作功能界面以及管理员退出界面 print("***************************************************************") print("* 开户(1) 查询(2) *") print("* 取款(3) 存款(4) *") print("* 转账(5) 改密(6) *") print("* 锁定(7) 解锁(8) *") print("* 补卡(9) 销户(0) *") print("* 退出(t) *") print("* *") print("***************************************************************") def adminOption(self): # 管理员登录的一个判断操作 Input_Admin = input("请输入管理员账号:") if self.Admin != Input_Admin: print("你输入的账号不正确!") return -1 Input_passwd = input("请输入管理员密码:") if self.passwd !=Input_passwd: print("你输入的账号不正确!") return -1 print("以管理员身份操作系统") #time.sleep(2) return 0

 

对象二——ATM

在同一目录下创建atm.py 文件

功能目标:开户、查询账户余额、取款、存款、转账、修改密码、锁定卡号、解锁卡号、补卡、销户等功能

from card import Card from user import User import random class ATM(object): # 属性 def __init__(self, allUsers): self.allUsers = allUsers # 用户字典 # 方法:对应管理员界面的各个指令 def createUser(self): # 开户 # 目标:向用户字典中添加键值对(卡号【我们随机分配号码】-键对值-用户【用户内部编码】) # 提示:字典类型里面可以存放对象(所以是面对对象编程) name = input("请输入您的姓名:") idCard = input("请输入您的身份证号:") phone_number = input("请输入您的电话号码:") perstoreMoney = int(input("请输入预存款金额:")) if perstoreMoney < 0: print("预存款输入有误!开户失败") return -1 # 注意:对上面的输入应当有一个输入检测机制防止乱输入 # 设置密码 Passwd_once = input('请设置密码:') # 验证密码的一个方法 if not self.checkPasswd(Passwd_once): print('密码输入3次有误,开户失败') return -1 # 信息搜集结束 # 随机配置一个系统卡号 cardID = self.randomCardID() card = Card(cardID, Passwd_once, perstoreMoney) user = User(name, idCard, phone_number,card) # 存入字典 self.allUsers[cardID] = user print('请牢记卡号:',cardID) # 到此开户成功 print('开户成功') # 查询 def searchUserInfo(self): Want_CardID = input('请输入您要查询的卡号:') # 验证这个卡号是否存在 # 提取用户出来 user = self.allUsers.get(Want_CardID) if not user: print('该卡号不存在') return -1 # 判断是否锁定 if user.card.cardLock : print('该卡号已被锁定,请解锁后再进行操作') return -1 if not self.checkPasswd(user.card.card_passwd): print('密码输入错误,该卡被锁定,请解锁后再进行操作') user.card.cardLock = True return -1 # 验证成功返回卡号信息 print('卡号:%s 余额:%f'%(user.card.cardID, user.card.card_Money)) def getMoney(self): # 取款 Want_CardID = input('请输入您的卡号:') # 验证这个卡号是否存在 # 提取用户出来 user = self.allUsers.get(Want_CardID) if not user: print('该卡号不存在') return -1 # 判断是否锁定 if user.card.cardLock : print('该卡号已被锁定,请解锁后再进行操作') return -1 if not self.checkPasswd(user.card.card_passwd): print('密码输入错误,该卡被锁定,请解锁后再进行操作') user.card.cardLock = True return -1 # 判断取钱阶段 Money = int(input('请输入您想取钱的金额:')) if Money < 0: print('输入有误,返回主界面') return -1 if Money > user.card.card_Money: print('余额不足,取钱操作失败,返回主界面') return -1 # 这里成功取钱 print('取钱成功,取出金额',Money) user.card.card_Money -= Money print('账户余额:',user.card.card_Money) def saveMoney(self): # 存款 Want_CardID = input('请输入您的卡号:') # 验证这个卡号是否存在 # 提取用户出来 user = self.allUsers.get(Want_CardID) if not user: print('该卡号不存在') return -1 # 判断是否锁定 if user.card.cardLock : print('该卡号已被锁定,请解锁后再进行操作') return -1 if not self.checkPasswd(user.card.card_passwd): print('密码输入错误,该卡被锁定,请解锁后再进行操作') user.card.cardLock = True return -1 # 身份判断成功 Money = int(input('请输入您想存钱的金额:')) if Money < 0: print('输入有误,返回主界面') user.card.card_Money += Money print('存钱成功,账户余额:',user.card.card_Money) def transMoney(self): # 转账 Want_CardID = input('请输入您的卡号:') # 验证这个卡号是否存在 # 提取用户出来 user = self.allUsers.get(Want_CardID) if not user: print('该卡号不存在') return -1 # 判断是否锁定 if user.card.cardLock : print('该卡号已被锁定,请解锁后再进行操作') return -1 if not self.checkPasswd(user.card.card_passwd): print('密码输入错误,该卡被锁定,请解锁后再进行操作') user.card.cardLock = True return -1 # 身份判断成功 # 转账目标 goal_CardID = input('请输入你想转账的账号:') goal_user = self.allUsers.get(goal_CardID) if not goal_user: print('该卡号不存在') return -1 # 判断是否锁定 if goal_user.card.cardLock : print('该卡号已被锁定,请解锁后再进行操作') return -1 # 转账目标判断成功 # 开始转账 Money = int(input('请输入转账金额:')) if Money < 0: print('输入有误,返回主界面') if Money > user.card.card_Money: print('余额不足,取钱操作失败,返回主界面') return -1 user.card.card_Money -= Money goal_user.card.card_Money += Money print('转账成功,转账金额为:',Money) print('您的账户余额为:', user.card.card_Money) def changePasswd(self): # 改密 Want_CardID = input('请输入您的卡号:') # 验证这个卡号是否存在 # 提取用户出来 user = self.allUsers.get(Want_CardID) if not user: print('该卡号不存在') return -1 # 判断是否锁定 if user.card.cardLock : print('该卡号已被锁定,请解锁后再进行操作') return -1 if not self.checkPasswd(user.card.card_passwd): print('密码输入错误,该卡被锁定,请解锁后再进行操作') user.card.cardLock = True return -1 # 身份判断成功 new_passwd = input('请输入您的新密码:') print('请再次输入您的新密码') if not self.checkPasswd(new_passwd): print('三次输入输入失败,修改密码操作失败,返回主界面') return -1 print('修改密码成功') ser.card.card_passwd = new_passwd def lockUser(self): # 锁定 cardNum = input('请输入您的卡号:') # 验证这个卡号是否存在 # 提取用户出来 user = self.allUsers.get(Want_CardID) if not user: print('该卡号不存在') return -1 if user.card.cardLock : print('该卡号已被锁定,请解锁后再进行操作') return -1 if not self.checkPasswd(user.card.card_passwd): print('密码输入错误,锁定失败') return -1 tempIDcard = input('请输入您的身份证号进行验证:') if tempIDcard != user.idCard: print('身份证号输入有误,锁定失败!') return -1 # 到此锁定账号 user.card.cardLock = True print('账号已锁定') def unlockUser(self): # 解锁 cardNum = input('请输入您的卡号:') # 验证这个卡号是否存在 # 提取用户出来 user = self.allUsers.get(Want_CardID) if not user: print('该卡号不存在') return -1 if not user.card.cardLock : print('改卡号没有锁定,无需解锁,请继续其他操作') return -1 if not self.checkPasswd(user.card.card_passwd): print('密码输入错误,解锁失败') return -1 tempIDcard = input('请输入您的身份证号进行验证:') if tempIDcard != user.idCard: print('身份证号输入有误,解锁失败!') return -1 # 到此解锁账号 user.card.cardLock = False print('账号解锁成功') def newCard(self): # 补卡 Want_CardID = input('请输入您的卡号:') # 验证这个卡号是否存在 # 提取用户出来 user = self.allUsers.get(Want_CardID) if not user: print('该卡号不存在') return -1 # 判断是否锁定 if user.card.cardLock : print('该卡号已被锁定,请解锁后再进行操作') return -1 if not self.checkPasswd(user.card.card_passwd): print('密码输入错误,该卡被锁定,请解锁后再进行操作') user.card.cardLock = True return -1 # 身份判断成功 print('补卡申请已提交,请等候短信通知') def killUser(self): # 销户 Want_CardID = input('请输入您的卡号:') # 验证这个卡号是否存在 # 提取用户出来 user = self.allUsers.get(Want_CardID) if not user: print('该卡号不存在') return -1 # 判断是否锁定 if user.card.cardLock : print('该卡号已被锁定,请解锁后再进行操作') return -1 if not self.checkPasswd(user.card.card_passwd): print('密码输入错误,该卡被锁定,请解锁后再进行操作') user.card.cardLock = True return -1 # 身份判断成功 # 开始进行销户 del self.allUsers[Want_CardID] print('销户成功') def checkPasswd(self, realPasswd): # 验证密码的一个方法 for i in range(3): tempPasswd = input('尝试第%d次请输入密码:'%(i+1)) if tempPasswd == realPasswd: return True return False def randomCardID(self): # 随机生成一个卡号 while True: CardId = '' for i in range(6): ch = chr(random.randrange(ord('0'), ord('9')+1)) CardId = CardId + ch # 判断是否重复 if not self.allUsers.get(CardId): return CardId 对象三——User

在同一目录下创建user.py 文件

功能目标:用户真实姓名、用户身份证信息、用户电话号码 以及 用户持有卡的信息

class User(object): # 属性 def __init__(self, name, idCard, phone_number, card): self.name = name self.idCard = idCard self.phone_number = phone_number self.card = card 对象四——Card

在同一目录下创建card.py 文件

功能目标:保存卡号信息、卡号对应的密码信息、卡上余额以及卡的锁定状态

class Card(object): # 属性 def __init__(self, cardID, card_passwd, card_Money): self.cardID = cardID self.card_passwd = card_passwd self.card_Money = card_Money self.cardLock = False # 卡的锁定情况 四、最后整个代码

这里则是把上面功能全部整合一遍,按照自动提款机的运行流程进行执行任务。

由于是在notepad++上运行的,所以文件地址需要手动输入。

如果是其他IDE 可以利用os库下的这个命令自动获取txt的文件地址

filepath = os.path.join(os.path.cwd(), 'allUsers.txt')#保存文件的路径 from admin import Admin from atm import ATM import pickle import os def main(): # 开机界面 admin = Admin() #管理员开机 admin.printAdminView() if admin.adminOption(): print("登录失败") return -1 print("登录成功") # 存储所有用户的信息 # AllUser = {}# 放置一个 字典用来存储用户信息 # 这里可以传入 外置的一个文件夹 # 提款机对象 filepath = r' ' # 这里填写当前目录的地址 # 因为空的txt加载会失败,所以加一个错误异常的模块 try: f = open(filepath, 'rb') allUsers = pickle.load(f) f.close() except Exception as e: allUsers = {} print(allUsers) atm = ATM(allUsers) #初始化了一个类属性 # 登陆界面 while True: admin.sysFunctionView() option = input("请输入您所需要的操作:") if option == "1": print('开户') atm.createUser() elif option == "2": print('查询') atm.searchUserInfo() elif option == "3": #取款 print('取款') atm.getMoney() elif option == "4": #存款 print('存款') atm.saveMoney() elif option == "5": #转账 print('转账') atm.transMoney() elif option == "6": #改密 print('改密') atm.changePasswd() elif option == "7": #锁定 print('锁定') atm.lockUser() elif option == "8": #解锁 print('解锁') atm.unlockUser() elif option == "9": #补卡 print('补卡') atm.newCard() elif option == "0": #销户 print('销户') atm.killUser() elif option == "t": if not admin.adminOption(): f = open(filepath, 'wb') pickle.dump(atm.allUsers, f) f.close() print('已退出') return -1 if __name__ == "__main__": main()

 

 

 

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3