新手ATM取款系统

学了面向对象后,自己又写了个ATM取款系统,每个人的思路都不一样,仅供参考!
下面是建的几个包
userp是用户类,adminp是管理员及界面类,cardp是银行卡类,main是主函数,operation是ATM类,放着各种操作,同级包之间用相对导包的方式导入,使得代码更安全,然后在上一级使用run接口直接调用main类,使得用户看不到内层的具体逻辑!
废话不多说,直接上代码。
user在这里插入图片描述
userp类

class User():
    def __init__(self,name,userid,phone,card):
        self.name = name
        self.userid = userid
        self.phone = phone
        self.card = card

adminp类

import time
class View():
    admin = 'admin666'
    password = 'wozuishuai'

    def print_view01(self):
        print('*'*29)
        print('{}欢迎光临我最帅银行系统{}'.format('-'*5,'-'*5))
        print('*'*29)

    def print_view02(self):
        print('-'*31)
        print('{}{}1.注册  2.查询{}{}'.format('|','-'*8,'-'*8,'|'))
        print('{}{}3.存钱  4.取钱{}{}'.format('|','-'*8,'-'*8,'|'))
        print('{}{}5.转账  6.改密{}{}'.format('|','-'*8,'-'*8,'|'))
        print('{}{}7.锁卡  8.解卡{}{}'.format('|','-'*8,'-'*8,'|'))
        print('{}{}9.补卡  0.退出{}{}'.format('|','-'*8,'-'*8,'|'))
        print('-'*31)

    def adminLogin(self):
        adminInput = input('请输入人管理员账户:')
        if adminInput != self.admin:
            print('管理员账户输入错误...')
            return False
        passwordInput = input('请输入管理员密码:')
        if passwordInput != self.password:
            print('密码输入错误...')
            return False
        else:
            print('登陆成功!页面加载中...')
            time.sleep(1.5)
            return True

cardp类

class Card():
    def __init__(self,cardid,cardpassword,money):
        self.cardid = cardid
        self.cardpassword = cardpassword
        self.money = money
        self.cardLock = False

operation类,自己没有对密码,手机号和身份证进行位数进行判断,想加的小伙伴可自行根据逻辑添加,也可采用我上一篇图书馆里面的密码判断,就是麻烦了点…

from .cardp import Card
from .userp import User
import time,random

class ATM():
    def __init__(self,alluser,lockuser):
        self.alluser = alluser
        self.lockuser = lockuser

    # ---  判断密码输入是否正确 ----
    def check_pwd(self):
        cardidInput = input('请输入您的卡号:')
        if cardidInput in self.alluser:    #   如果卡号在用户字典中
            user = self.alluser[cardidInput]
            for i in range(3):
                cardpassword01 = input('请输入您的密码:')
                print('信息验证中...')
                time.sleep(1)
                if user.card.cardpassword == cardpassword01:
                    return user
            print('密码输错三次,此卡锁定中...')
            time.sleep(1.5)
            del self.alluser[cardidInput]   # 从用户字典中删除该用户
            self.lockuser[cardidInput] = user  #  将该用户添加到已锁定用户字典中
            print('此卡已锁定,请前往解卡系统解冻...')
            return False
        else:
            print('此卡号不存在,操作失败...')
            return False

  #  ----  开户注册 -----
    def register(self):
        name = input('请输入您的姓名:')
        userid = input('请输入您的身份证号(18位):')
        phone = input('请输入您的手机号(11位):')
        money = int(input('请输入您要预存的金额:'))
        if money < 0:
            print('输入金额有误,开户失败。')
            return False
        cardpassword = input('请输入您的密码:')
        # ---  验证两次密码是否相同  ---
        rpassword = input('请再次输入您的密码:')
        if cardpassword != rpassword:
                print('您两次输入的密码不一致,开户失败!')
                return False
        else:
            cardid = self.creatCard()    #  生成随机卡号
            card = Card(cardid,cardpassword,money)  # 创建卡实例对象
            user = User(name,userid,phone,card)   #  创建用户实例对象
            # ----  存入到字典中  ---
            self.alluser[card.cardid] = user
            print('开户成功,请牢记开户账号:{},开户密码:{}.'.format(cardid,cardpassword))
            print(self.alluser.keys())
            return True

  # ---  随机生成六位数卡号 ----
    def creatCard(self):
        while 1:
            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

    # ----- 查询  ------
    def query(self):
        user = self.check_pwd()
        if user:
            print('账户余额查询中,请稍后...')
            time.sleep(1)
            print('您的余额为:{}元.'.format(user.card.money))
            return True

    # ----- 存钱 -----
    def save_money(self):
        user = self.check_pwd()
        if user:
            savemoney = int(input('请输入需要存的金额:'))
            if savemoney < 0:
                print('金额输入错误,存款失败!')
                return False
            else:
                print('存款中,请稍后...')
                time.sleep(1.5)
                user.card.money += savemoney
                print('存款成功,您的余额为{}元.'.format(user.card.money))
                return True

    # ----- 取钱 ------
    def get_money(self):
        user = self.check_pwd()
        if user:
            getmoney = int(input('请输入取款金额:'))
            print('取款中,请稍后...')
            time.sleep(1.5)
            if 0 <= getmoney <= user.card.money:
                user.card.money -= getmoney
                print('取款成功!')
                print('您的余额为{}元.'.format(user.card.money))
            else:
                print('金额输入错误,取款失败!')
                return False

    # ----- 转账 ------
    def trans_noney(self):
        user = self.check_pwd()
        if user:
            transcardidInput = input('请输入收款人卡号:')
            print('收款人卡号验证中,请稍后...')
            time.sleep(1)
            if transcardidInput in self.alluser:
                user01 = self.alluser[transcardidInput]
                transmoney = int(input('请输入转账金额:'))
                print('转账中,请稍后...')
                time.sleep(1.5)
                if transmoney > user.card.money:
                    print('余额不足,转账失败!')
                    return False
                else:
                    user.card.money -= transmoney
                    user01.card.money += transmoney
                    print('转账成功,请及时通知收款人确认!')
                    print('您的余额为{}元.'.format(user.card.money))
                    return True
            else:
                print('收款人卡号不存在,转账失败!')
                return False

    # ----- 改密 ------
    def change_pwd(self):
        user = self.check_pwd()
        if user:
            newpassword01 = input('请输入新密码:')
            newpassword02 = input('请再次输入密码:')
            print('密码修改中...')
            time.sleep(1)
            if newpassword01 == newpassword02:
                user.card.cardpassword = newpassword01
                print('密码修改成功,请记好您的密码:{}!'.format(newpassword01))
                return True
            else:
                print('您两次输入的密码不一致,修改密码失败!')
                return False

    # ------ 锁卡 -----
    def lock(self):
        cardid01 = input('请输入您的卡号')
        if cardid01 in self.alluser:
            user = self.alluser[cardid01]
            userid01 = input('请输入您的身份证号:')
            print('信息验证中...')
            time.sleep(1)
            if userid01 == user.userid:
                print('此卡锁定中...')
                del self.alluser[user.card.cardid]
                self.lockuser[user.card.cardid] = user
                time.sleep(1.5)
                print('此卡已锁定,如需解冻请前往解冻系统解冻!')
                return True
            else:
                print('您的身份证号输入错误,锁卡失败!')
                return False
        else:
            print('此卡不存在或已被锁卡,锁卡失败!')
            return False

    # ------ 解卡 ------
    def unlock(self):
        cardid01 = input('请输入您的卡号:')
        if cardid01 in self.lockuser:
            user = self.lockuser[cardid01]
            userid01 = input('请输入您的身份证号:')
            print('信息验证中...')
            time.sleep(1)
            if userid01 == user.userid:
                print('此卡解冻中...')
                del self.lockuser[cardid01]
                self.alluser[cardid01] = user
                time.sleep(1.5)
                print('此卡解冻成功,请文明使用银行卡!')
                return True
            else:
                print('您输入的身份证号有误,解卡失败!')
                return False
        else:
            print('此卡未被冻结,解卡失败!')
            return False

    # ------ 补卡 -----
    def new_card(self):
        cardid01 = input('请输入您的卡号')
        if cardid01 in self.alluser:
            user = self.alluser[cardid01]
            userid01 = input('请输入您的身份证号:')
            print('信息验证中...')
            time.sleep(1)
            if userid01 == user.userid:
                print('卡号生成中...')
                time.sleep(1.5)
                res = self.creatCard()  # 重新生成卡号
                user.card.cardpassword = '123456'  # 初始化密码123456
                self.alluser[res] = user    # 用原来的user对象重新生成字典
                del self.alluser[cardid01]   #  将原来的词典删掉用于覆盖
                print('补卡成功,您的新卡号为{},初始密码为{}.'.format(res,'123456'))
                return True
            else:
                print('您的身份证号输入错误,补卡失败!')
                return False
        else:
            print('此卡号不存在,无需补办,如需是要用本系统服务,请前往注册系统注册!')
            return False

    # ------ 退出 ------
    def save(self):
        print('欢迎下次使用本系统!')
        print('退出登陆中...')
        time.sleep(1.5)

main类

from .adminp import View
from .operation import ATM
class Main():
    def run(self):
        view = View()   # 创建view实例对象
        view.print_view01()    # 打印主界面
        while True:
            if view.adminLogin():   # 管理员登陆
                break
        alluser = {}  # 创建正常用户字典
        lockuser = {}  # 创建被锁卡用户字典
        atm = ATM(alluser,lockuser)  # 创建ATM对象
        while 1:
            view.print_view02()  #  打印各种操作界面
            choice = input('请选择您的操作:')
            if choice == '1':
                atm.register()   # 注册
                continue
            elif choice == '2':
                atm.query()  #  查询余额
                continue
            elif choice == '3':
                atm.save_money()   # 存钱
                continue
            elif choice == '4':
                atm.get_money()   #  取钱
                continue
            elif choice == '5':
                atm.trans_noney()  #  转账
                continue
            elif choice == '6':
                atm.change_pwd()   # 改密
                continue
            elif choice == '7':
                atm.lock()   #  锁卡
                continue
            elif choice == '8':
                atm.unlock()   #  解卡
                continue
            elif choice == '9':
                atm.new_card()   #  补卡
                continue
            elif choice == '0':
                atm.save()  # 退出
                break
            else:
                print('指令输入错误,请重新输入!')
                continue


run函数调用

from opera.main import Main
m = Main()
if __name__ == '__main__':
    m.run()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值