人
类名: Person
属性: 姓名 身份证号 电话号 卡
行为:
卡
类名: Card
属性: 卡号 密码 余额
行为:
银行 主程序
类名: Bank
属性:
行为: 用户列表 提款机
提款机
类名: ATM
属性: 用户字典
行为: 开户 查询 取款 存储 转账 改密 锁定 解锁 补卡 销户
管理员界面
类名: Admin
属性:
行为: 管理员界面 管理员验证 系统功能界面
管理员界面:管理员登录后才能进行其他操作
"""
******************************************************
*
*
* 欢迎进入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("退出该系统!")
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:31
class User(object):
def __init__(self, name, idNum, phone, card):
self.name = name
self.idNum = idNum
self.phone = phone
self.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:55
class Cards(object):
def __init__(self, cardId, cardPasswd, cardMoney):
self.cardId = cardId
self.cardPasswd = cardPasswd
self.cardMoney = cardMoney
self.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:38
import time
import pickle
import os
class 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 False
inputPasswd = 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)
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 os
def main():
# 管理员对象
admin = Admin()
# 管理员开机
admin.printAdminView()
if not admin.adminVerify():
return False
absPath = 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 True
time.sleep(2)
if __name__ == '__main__':
main()
class ATM(object):
def __init__(self, allUsers):
self.allUsers = allUsers
def creatUser(self):
pass
def searchUserInfo(self):
pass
def getMoney(self):
pass
def saveMoney(self):
pass
def transferMoney(self):
pass
def changePasswd(self):
pass
def lockUser(self):
pass
def unLockUser(self):
pass
def newCard(self):
pass
def killUser(self):
pass
def checkPasswd(self, realPasswd):
pass
def randomCardId(self):
pass
由于很多操作前都需要验证卡号,是否锁定,密码是否输入正确
所以添加了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:38
from cards import Cards
from users import User
import random
class 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 False
originPasswd = 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] = user
print("开户成功!您的卡号为%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 False
if money <= 0:
print("输入错误,取款失败!")
return False
user.card.cardMoney -= money
print("取款成功,当前余额为%.2f" %user.card.cardMoney)
# 存款
def saveMoney(self):
flag, user = self.verify("存款")
if flag:
money = float(input("请输入存款金额: "))
if money <= 0:
print("输入错误,存款失败!")
return False
user.card.cardMoney += money
print("存款成功,当前余额为%.2f" % user.card.cardMoney)
# 转账
def transferMoney(self):
flag, user = self.verify("转账")
if flag:
money = float(input("请输入转账金额: "))
if money > user.card.cardMoney:
print("余额不足!")
return False
if money <= 0:
print("输入错误,转账失败!")
return False
transferCardId = input("请输入您要转账的卡号: ")
transferUser = self.allUsers.get(transferCardId)
if not transferUser:
print("该卡号不存在,转账失败!")
return False
user.card.cardMoney -= money
transferUser.card.cardMoney += money
print("转账成功,当前余额为%.2f" % user.card.cardMoney)
# 该密
def changePasswd(self):
flag, user = self.verify("改密")
if flag:
updatePassword = input("请输入您要更改的密码: ")
verifyPassword = input("请再次输入密码: ")
if updatePassword == verifyPassword:
user.card.cardPasswd = updatePassword
return True
else:
print("俩次密码不相同,改密失败!")
return False
# 锁定
def lockUser(self):
flag, user = self.verify("锁定")
if flag:
tempIdNum = input("请输入您的身份证号: ")
if tempIdNum != user.idNum:
print("身份证输入错误,锁定失败")
return False
user.card.cardLock = True
print("锁定成功")
# 解锁
def unLockUser(self):
cardId = input("请输入您的卡号: ")
# 验证该卡号是否存在
user = self.allUsers.get(cardId)
if not user:
print("该卡号不存在,解锁失败!")
return False
if not user.card.cardLock:
print("此卡没有被锁定,无需解锁!")
return False
if not self.checkPasswd(user.card.cardPasswd):
print("密码输入错误,解锁失败!")
return False
tempIdNum = input("请输入您的身份证号: ")
if tempIdNum != user.idNum:
print("身份证输入错误,锁定失败")
return False
user.card.cardLock = False
print("解锁成功!")
def newCard(self):
pass
# 注销
def killUser(self):
flag, user = self.verify("销户")
if flag:
tempIdNum = input("请输入您的身份证号: ")
if tempIdNum != user.idNum:
print("身份证输入错误,销户失败")
return False
del self.allUsers[cardId]
print("销户成功")
# 改密
def checkPasswd(self, realPasswd):
# 三次输入密码错误将会锁定
for i in range(3):
tempPasswd = input("请输入密码: ")
if tempPasswd == realPasswd:
return True
return 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()返回指定键的值,如果值不在字典中返回默认值Non
if 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 = True
return False,user
return True,user
注: 开户或者销户要输入q退出后才保存
管理员登录
开户
查询
卡号错误或密码错误的情况
退出系统
输入All查看其他用户信息
销户
该系统由五个部分组成
admin.py
atm.py
cards.py
main.py
users.py
通过此次学习,了解了类的优点与使用,加强了对分散知识的总结,其次要细心,分步进行才可以逐步求精,先总体后部分才能写的全面些,有些写的不足还请多多指教