银行自助系统(凯哥sunck版!)面向对象

###主程序

自动提款系统

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




卡
类名:Card
属性:卡号,密码,余额
行为:管理员界面,系统功能界面


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


admin
类名:Admin
属性:用户字典
行为:管理员验证,系统功能界面



"""
from card import Card
from user import User
from admin import Admin
from atm import ATM
import time
import pickle
import os

def main():
    #管理员对象
    admin = Admin()
    #管理员开机
    admin.printAdminView()
    if admin.adminOption():
        return -1   #为什么 return -1 0 如何控制走向


    #提款机对象
    filepath = os.path.join(os.getcwd(), "alluser.txt")

    f = open(filepath,"rb")
    allUsers = pickle.load(f)  #长期化存储
    print("************")
    print(allUsers)

    atm = ATM(allUsers)






    while True:
        #等待用户的操作
        admin.printSysFunctionView()
        option = input("请输入您的操作:")
        if option == "1" :
            atm.creatUser()
        elif option == "2":
            atm.seachUserInfo()
        elif option == "3":
            atm.getMoney()
        elif option == "4":
            print("存款")
        elif option == "5":
            print("转账")
        elif option == "6":
            print("改密")
        elif option == "7" :
            atm.lockUser()
        elif option == "8":
            atm.unlock()
        elif option == "9":
            print("补卡")
        elif option == "0" :
            print("销户")
        elif option == "t":
           if not admin.adminOption():
               with open(filepath,"wb") as f:
                # 将当前系统中的用户信息保存到文件中
                   pickle.dump(atm.allUser,f)
               print(filepath)  #F:\python\第一阶段\银行\alluser.txt
               return -1

   

        time.sleep(2)



if __name__ == "__main__":
   main()
##ATM类
#atm
from card import Card
from user import User
import random


class ATM(object):
    def __init__(self,allUser):
        self.allUser = allUser  #卡号-用户


    #开户
    def creatUser(self):
        #目标:向用户字典中添加一队键值对(卡号-用户)
        name          = input("请输入您的姓名:")
        idCard        = input("请输入您的身份证号码:")
        phone         = input("请输入您的电话号码:")

        prestoreMoney = int(input("请输入预存款金额:"))
        if prestoreMoney < 0:
            print("预存款输入有误,开户失败...")
            return -1

        onePasswd = input("请设置密码:")
        #验证密码
        if not self.checkPasswd(onePasswd):
            print("密码输入错误!!!开户失败")
            return -1

        #所有需要的信息就全了
        cardID = self.randomCardId()

        cardStr = Card(cardID,onePasswd,prestoreMoney)
        user = User(name,idCard,phone,cardStr)
        #存到字典
        self.allUser[cardID] = user
        print("开户成功!!请牢记卡号",cardID,"!!")


    #查询
    def seachUserInfo(self):
        cardNum = input("请输入您的卡号:")
        #验证卡号是否存在该卡号
        user = self.allUser.get(cardNum)

        if not user:
            print("该卡号不存在...查询失败")
            return  -1
        #
        #判断是否锁定
        if user.card.cardLock:
            print("该卡已被锁定。。。请解锁后在进行其他操作...")
            return -1


        #验证密码
        if not self.checkPasswd(user.card.cardpasswd):
            print("密码输入有误!!该卡被锁定!请解锁后进行其他操作....")
            user.card.cardLock = True
            return -1
        print("卡号:%s  余额:%d"%(user.card.cardId,user.card.cardMoney))

    #取款
    def getMoney(self):
        cardNum = input("请输入您的卡号:")
        # 验证卡号是否存在该卡号
        user = self.allUser.get(cardNum)

        if not user:
            print("该卡号不存在...取款失败")
            return -1
        #
        # 判断是否锁定
        if user.card.cardLock:
            print("该卡已被锁定。。。请解锁后在进行其他操作...")
            return -1

        # 验证密码
        if not self.checkPasswd(user.card.cardpasswd):
            print("密码输入有误!!该卡被锁定!请解锁后进行其他操作...")
            user.card.cardLock = True
            return -1
        print("卡号:%s  余额:%d" % (user.card.cardId, user.card.cardMoney))

        #
        money = int(input("请输入取款金额:"))
        if money > user.card.cardMoney:
            print("余额不足!!取款失败....")
            return -1

        #取款
        user.card.cardMoney -= money
        print("取款成功....余额:%d"%(user.card.cardMoney))

    #存款
    def saveMoney(self):
        pass
    #转账
    def transferMoney(self):
        pass
    #改密
    def changePasswd(self):
        pass
    #锁定
    def lockUser(self):
        cardNum = input("请输入您的卡号:")
        # 验证卡号是否存在该卡号
        user = self.allUser.get(cardNum)
        if not user:
            print("该卡号不存在...锁定失败")
            return -1

        if user.card.cardLock:
            print("该卡已被锁定...请解锁后再操作...")
            return -1

        if not self.checkPasswd(user.card.cardpasswd):
            print("密码输入有误!!锁定失败...")
            return -1

        tempIDcard = input("请输入您的身份证号码:")
        if tempIDcard != user.idCard:
            print("身份证号输入有误!!锁定失败...")
            return  -1

        #锁它
        user.card.cardLock = True
        print("锁定成功.....")



    #解锁
    def unlock(self):
        cardNum = input("请输入您的卡号:")
        # 验证卡号是否存在该卡号
        user = self.allUser.get(cardNum)
        if not user:
            print("该卡号不存在...解锁失败")
            return -1

        if not user.card.cardLock:
            print("该卡未被锁定!!无需解锁....")
            return -1

        if not self.checkPasswd(user.card.cardpasswd):
            print("密码输入有误!!解锁失败...")
            return -1

        tempIDcard = input("请输入您的身份证号码:")
        if tempIDcard != user.idCard:
            print("身份证号输入有误!!解锁失败...")
            return -1

        #解锁
        user.card.cardLock = False
        print("解锁成功")


    #补卡
    def newCard(self):
        pass
    #销户
    def killUser(self):
        pass

    #验证密码
    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
            # 判断是否重复
            if not self.allUser.get(str):
                return str
        return str

##uesr类

#user
class  User(object):
    def __init__(self,name,idCard,phone,card):
        self.idCard = idCard
        self.phone = phone
        self.card = card
##card类
class  Card(object):
    def __init__(self,cardId,cardPasswd,cardMoney):
        self.cardId     = cardId
        self.cardMoney  = cardMoney
        self.cardpasswd = cardPasswd
        self.cardLock   = False
#admin类
import time


class Admin(object):

    admin = "1"
    passwd = "1"

    def printAdminView(self):
        print("****************************************************************")
        print("*                                                              *")
        print("*                                                              *")
        print("*                    欢迎登陆呱呱银行                          *")
        print("*                                                              *")
        print("*                                                              *")
        print("****************************************************************")


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


    def adminOption(self):
        inputAdmin = input("请输入管理员账号:")
        if self.admin != inputAdmin:
            print("账号输入有误!!")
            return -1
        inputPasswd = input("请输入管理员密码:")
        if self.passwd != inputPasswd:
            print("密码输入有误...")
            return -1
        time.sleep(2)
        # 能执行到这里说明账号密码正确
        print("操作成功!请稍后....")
        return 0




评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值