python银行自动取款机系统详写

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: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)

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 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
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: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退出后才保存

6.截图

管理员登录
python银行自动取款机系统详写_第1张图片
开户
python银行自动取款机系统详写_第2张图片
查询
python银行自动取款机系统详写_第3张图片
卡号错误或密码错误的情况
python银行自动取款机系统详写_第4张图片
退出系统
python银行自动取款机系统详写_第5张图片
输入All查看其他用户信息
python银行自动取款机系统详写_第6张图片
销户
python银行自动取款机系统详写_第7张图片

7.总结

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

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

你可能感兴趣的:(python基础)