面向对象模拟简单ATM

import random,time


class Card:
    def __init__(self,cardnum,password,money,islock=False):
        self.cardnum = cardnum
        self.password = password
        self.money = money
        self.islock = islock


class User:
    def __init__(self,name,idcard,phonenum,card):
        self.name = name
        self.idcard = idcard
        self.phonenum = phonenum
        self.card = card


class ATM:

    userDict = {}
    islogin = False

    @staticmethod
    def welcome():
        print('''
           **********************
           *                    *
           *  welcome to bank   *
           *                    *
           **********************
           ''')

    @staticmethod
    def select():
        print('''
           **********************
           *  1.登录   2.注册    *
           *  3.查询   4.取款    *
           *  5.存款   6.转账    *
           *  7.改密   8.锁卡    *
           *  9.解锁   0.退出    *
           **********************
           ''')
        num = input("请选择服务项目:")
        return num

    @staticmethod
    def getcardnum():
        cardnum = ""
        for x in range(6):
            cardnum += str(random.randrange(0,10))
        return cardnum

    @classmethod
    def openUser(cls):
        name = input("请输入您的姓名:")
        idcard = input("请输入您的身份证号码:")
        phonenum = input("请输入您的电话号码:")
        psd = input("请设置您的密码:")
        psd2 = input("请确认您的密码:")
        if psd == psd2:
            mon = int(input("请输入您的预存余额:"))
            if mon>0:
                print("注册中。。。")
                time.sleep(1)
                cardnum = cls.getcardnum()
                card = Card(cardnum,psd,mon)
                user = User(name,idcard,phonenum,card)
                cls.userDict[cardnum] = user
                print("注册成功,您的卡号为%s"%cardnum)
            else:
                print("预存余额非法,开卡失败...")
        else:
            print("密码错误,开卡失败...")


    @classmethod
    def login(cls):
        cardnum = input("请输入您的卡号:")
        if cls.userDict.get(cardnum).card.islock == False:
            user = cls.userDict.get(cardnum)
            if user:
                psd = input("请输入您的密码:")
                if psd == user.card.password:
                    print("登录中。。。")
                    time.sleep(1)
                    cls.islogin = cardnum
                    print("恭喜你,登录成功!!!")
                else:
                    print("密码错误,登录失败。。。")
            else:
                print("卡号不存在,请查证后登录。。。")
        else:
            print('此卡已被锁定,请解锁后登陆')


    @classmethod
    def search(cls):
        if cls.islogin:
            print("查询中。。。")
            time.sleep(1)
            print("您当前的余额为%d"%(cls.userDict.get(cls.islogin).card.money))

        else:
            print("请登录后查询")

    @classmethod
    def getoutMoney(cls):
        if cls.islogin:
            mon = int(input('请输入取款金额:'))
            if cls.userDict.get(cls.islogin).card.money >= mon and mon >0:
                print('取款中。。。')
                time.sleep(1)
                cls.userDict.get(cls.islogin).card.money -= mon
                print('取款成功,取款金额为%d,您当前余额为%d'%\
                      (mon,cls.userDict.get(cls.islogin).card.money))
            elif mon < 0:
                print('取款金额非法')
            else:
                print('余额不足')
        else:
            print('请先登录')
    @classmethod
    def inputMoney(cls):
        if cls.islogin:
            mon = int(input('请输入存款金额:'))
            if mon > 0 and mon < 20000:
                print('存款中。。。')
                time.sleep(1)
                cls.userDict.get(cls.islogin).card.money += mon
                print('存款成功,存款金额为%d,您当前余额为%d' %\
                      (mon, cls.userDict.get(cls.islogin).card.money))
            elif mon < 0:
                print('存款金额非法')
            else:
                print('存款金额过大,请到前台进行存款')
        else:
            print('请先登录')
    @classmethod
    def changePsd(cls):
        if cls.islogin:
            newpsd1 = input('请输入更改后的密码:')
            newpsd2 = input('请确认更改后的密码:')
            if newpsd1 == newpsd2:
                print('更改密码中...')
                time.sleep(1)
                cls.userDict.get(cls.islogin).card.password = newpsd1
                print('密码更改成功,当前密码为:%s'%newpsd1)
            else:
                print('密码更改错误!!!')
        else:
            print('请先登录')

    @classmethod
    def transMoney(cls):
        if cls.islogin:
            newcardnum = input('请输入你要转入的卡号:')
            keyList = cls.userDict.keys()
            if newcardnum in keyList:
                mon = int(input('请输入你要转入的金额:'))
                if mon>0 and mon <= cls.userDict.get(cls.islogin).card.money:
                    print('正在转账...')
                    time.sleep(1)
                    cls.userDict.get(cls.islogin).card.money -= mon
                    cls.userDict.get(newcardnum).card.money += mon
                    print('转账成功,你当前余额为:%d' %\
                          cls.userDict.get(cls.islogin).card.money)
                elif mon<0:
                    print('输入金额非法')
                else:
                    print('余额不足,请存款后进行转账')
            else:
                print('此卡号不存在,请核实后进行转账')
        else:
            print('请先登录')


    @classmethod
    def lockcard(cls):
        cardnum = input('请输入你要锁定的卡号:')
        cardnumList = cls.userDict.keys()
        if cardnum in cardnumList:
            if cls.userDict.get(cardnum).card.islock == False:
                psd = input('请输入密码:')
                if cls.userDict.get(cardnum).card.password == psd:
                    print('正在锁卡。。。')
                    time.sleep(1)
                    cls.userDict.get(cardnum).card.islock = True
                    cls.islogin = False
                    print('锁卡成功!!!')
                else:
                    print('密码错误,请确认密码后操作')
            else:
                print('此卡已被锁定')
        else:
            print('此卡号不存在,请查询后操作')

    @classmethod
    def unlockcard(cls):
        cardnum = input('请输入你要解锁的卡号:')
        cardnumList = cls.userDict.keys()
        if cardnum in cardnumList:
            if cls.userDict.get(cardnum).card.islock:
                psd = input('请输入密码:')
                if psd == cls.userDict.get(cardnum).card.password:
                    print('解锁中。。。')
                    time.sleep(1)
                    cls.userDict.get(cardnum).card.islock = False
                    print('解锁成功!!!')
                else:
                    print('密码错误,请确认密码后操作')
            else:
                print('此卡号未被锁定')
        else:
            print('此卡号不存在,请查证后操作')

if __name__ == '__main__':
    atm = ATM()
    atm.welcome()
    while True:
        time.sleep(1)
        print('已注册用户信息:',atm.userDict)
        num = atm.select()
        if   num == "1":
            atm.login()
        elif num == "2":
            atm.openUser()
        elif num == "3":
            atm.search()
        elif num == '4':
            atm.getoutMoney()
        elif num == '5':
            atm.inputMoney()
        elif num == '6':
            atm.transMoney()
        elif num == '7':
            atm.changePsd()
        elif num == '8':
            atm.lockcard()
        elif num == '9':
            atm.unlockcard()
        elif num == "0":
            print("正在退出。。。")
            time.sleep(1)
            print('欢迎下次光临!!!')
            break
        else:
            time.sleep(1)
            print("选择有误请重新选择...")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值