ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

day28 ATM小程序

2020-08-12 08:00:16  阅读:236  来源: 互联网

标签:day28 self ATM 程序 dict user print data card


# 在单入口模式下进行

 

# 卡类模块

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

  

# 人类模块

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

  

# 初始化视图模块

import time

class View():

    def login():
        name = input("请输入管理员的账户:")
        pwd = input("请输入管理员密码:")
        if name == "1" and pwd == "1":
            View.welcome_view()
            time.sleep(0.2)
            View.operation_view()
            return True
        else:
            print("管理员账号或密码不正确")

    def welcome_view():
        print("*******************************************")
        print("*                                         *")
        print("*                                         *")
        print("*         Welcome To OldBoy Bank          *")
        print("*                                         *")
        print("*                                         *")
        print("*******************************************")

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

  

 

# 操作类模块


import os,pickle,re,time,random
from .card import Card
from .person import Person

class Operation():

    # 初始化读取数据
    def __init__(self):
        self.read_user()
        self.resd_userid()
    def read_user(self):
        # 卡号:用户信息
        if os.path.exists("user.txt"):
            with open("user.txt",mode="rb") as f1:
                self.user_dict = pickle.load(f1)
        else:self.user_dict = {}
    def resd_userid(self):

        # 身份证号:卡号
        if os.path.exists("userid.txt"):
            with open("userid.txt",mode="rb") as f2:
                self.userid_dict = pickle.load(f2)
        else:self.userid_dict = {}
    # 开户
    def register(self):
        print(self.user_dict)
        print(self.userid_dict)
        name = self.name_func()
        # 获取身份证号
        userid = self.uesrid_func()
        # 获取手机号
        phone = self.phone_func()
        # 获取密码
        password = self.pwd_func()
        # 获取卡号
        cardid = self.quth_code()
        c = Card(cardid, password, 10)
        p = Person(name, userid, phone, c)
        self.save()
        print("恭喜{}开卡成功,卡号为:{},余额为:{}".format(name,cardid,c.money))

        self.user_dict[cardid] = p
        self.userid_dict[userid] = cardid

    def name_func(self):
        while True:
            data = input("请输入用户名:")
            res = re.findall(r"\W",data)
            if not res :
                if data.strip() and (not (" " in data)):
                    return data
                else:print("存在非法字符")
            else:
                print("存在非法字符")
    def uesrid_func(self):
        while True:
            data = input("请输入身份证号:")
            if re.search("[1-9]\d{5}(?:19\d{2}|20[0-2][0-9])(?:0[1-9]|1[0-2])(?:0[1-9]|[1-2]\d|3[01])\d{3}[\dx]",data):
                if data not in self.userid_dict:
                    return data
                else:print("该身份证号在我行已办理过银行卡")
            else:
                print("身份证号不符")
    def phone_func(self):
        while True:
            data = input("请输入手机号:")
            if re.search("0?(13|14|15|17|18|19)[0-9]{9}",data):
                return data
            else:
                print("手机号不符")
    def pwd_func(self):
        while True:
            data1 = input("请输入新的密码(六位):")
            if len(data1) == 6 :
                res = re.search(r"^[\da-zA-Z\_]{6}$",data1)
                if res:
                    data2 = input("请再次确认密码:")
                    if data1 == data2:
                        return data2
                    else:
                        print("俩次密码不一致,请重新输入!")
                else:print("存在非法字符")
            else:print("输入错误!")
    def quth_code(self):
        while True:
            code = str(random.randrange(100000, 1000000))
            if code not in self.user_dict:
                return code

    # 公共方法,查看卡号有没有被锁,核对密码
    def name_pwd(self,data):
        if data in self.user_dict:
            if not(self.user_dict[data].card.islock):
                n = 0
                while n <= 2:
                    pwd = input("请输入密码:")
                    if self.user_dict[data].card.password == pwd :
                        return True
                    elif n == 2 :
                        self.user_dict[data].card.islock = True
                        print("错误次数太多,此卡号已被锁定")
                        sign = False
                        return sign
                    else:
                        n += 1
                        print("密码错误")
            else:print("卡号已被锁定,请联系管理员")
        else:
            print("卡号不存在")
            return False
    # 查询
    def query(self):
        while True :
            data = input("请输入卡号(返回上一层请按1):")
            if data == "1" : break
            if self.name_pwd(data):
                if not(self.user_dict[data].card.islock):
                    self.save()
                    print("您的余额为:{}".format(self.user_dict[data].card.money))
                    break
                else:print("卡号已被锁定")
    # 充值
    def save_money(self):
        sign = True
        while sign :
            data = input("请输入卡号(返回上一层请按1):")
            if data == "1" : break
            while True:
                rmb = input("请输入充值人民币数量:")
                if rmb.isdecimal():
                    self.user_dict[data].card.money += int(rmb)
                    self.save()
                    print("您的卡号:{},充值成功:{}元,余额为:{}".format(self.user_dict[data].card.cardid,rmb, self.user_dict[data].card.money))
                    sign = False
                    break
                else:
                    print("输入有误,请重新输入")
    # 取钱
    def get_money(self):
        sign = True
        while sign :
            data = input("请输入卡号(返回上一层请按1):")
            if data == "1" : break
            if self.name_pwd(data):
                if not(self.user_dict[data].card.islock):
                    while True:
                        rmb = input("请输入取出人民币数量:")
                        if rmb.isdecimal():
                            if self.user_dict[data].card.money >= int(rmb):
                                self.user_dict[data].card.money -= int(rmb)
                                self.save()
                                print("您的卡号:{},取款成功:{}元,余额为:{}".format(self.user_dict[data].card.cardid,rmb, self.user_dict[data].card.money))

                                sign = False
                                break
                            else:
                                print("余额不足")
                        else:
                            print("输入有误,请重新输入")
                else:print("卡号已被锁定")
    # 转账
    def trans_money(self):
        sign = True
        while sign :
            data = input("请输入卡号(返回上一层请按1):")
            if data == "1" : break
            if self.name_pwd(data):
                if not (self.user_dict[data].card.islock):
                    while sign:
                        cd = input("请输入转账人卡号:")
                        if self.user_dict[data].card.cardid == cd:
                            print("不能给自己转账的哦")
                            continue
                        elif cd in self.user_dict:
                            rmb = input("请输入转账人民币数量:")
                            if self.user_dict[data].card.money >= int(rmb):
                                self.user_dict[data].card.money -= int(rmb)
                                self.user_dict[cd].card.money += int(rmb)
                                self.save()
                                print("您的卡号:{},给{}的卡号:{}转账{}元成功,您的余额为:{}".format(self.user_dict[data].card.cardid,self.user_dict[cd].name,self.user_dict[cd].card.cardid,rmb, self.user_dict[data].card.money))

                                break
                            else:print("余额不足")
                        else:
                            data = input("转账人卡号不存在,返回请按1,继续请按任意键!")
                            if data == "1" :
                                sign = False

                else:print("卡号已被锁定")
    # 修改密码
    def change_pwd(self):
        sign = True
        while sign :
            data = input("请输入卡号(返回上一层请按1):")
            if data == "1" :
                sign = False
                break
            if self.name_pwd(data):
                if not(self.user_dict[data].card.islock):
                    while True:
                        choice = input("通过何种方式来修改密码\n1:身份证号码  2:密码")
                        if choice == "1":
                            sfz = input("请输入身份证号码来修改密码:")
                            if self.user_dict[data].userid == sfz:
                                res = self.pwd_func()
                                self.user_dict[data].card.password = res
                                self.save()
                                print("您的卡号{}修改密码成功,请退出保存后重新登录!".format(self.user_dict[data].card.cardid))

                                sign = False
                                break
                            else:
                                print("身份证号码错误")
                        elif choice == "2":
                            pwd = input("请输入卡密码来修改密码:")
                            if self.user_dict[data].card.password == pwd:
                                res = self.pwd_func()
                                self.user_dict[data].card.password = res
                                self.save()
                                print("您的卡号{}修改密码成功,请退出保存后重新登录!".format(self.user_dict[data].card.cardid))
                                sign = False
                                break
                        else:print("输入有误,重新选择!")
                else:print("卡号已被锁定")
    # 锁卡
    def lock(self):
        sign = True
        while sign:
            data = input("请输入卡号(返回上一层请按1):")
            if data == "1":
                sign = False
                break
            elif data in self.user_dict:
                if self.user_dict[data].card.islock:print("此卡已冻结!")
                elif not(self.user_dict[data].card.islock):
                    while True:
                        num = input("通过何种方式来冻结卡片\n1:身份证号码  2:密码")
                        if num == "1":
                            sfz = input("请输入身份证号码来冻结卡片:")
                            if self.user_dict[data].userid == sfz:
                                self.user_dict[data].card.islock = True
                                self.save()
                                print("您的卡号{}冻结成功,请退出保存后继续操作!".format(self.user_dict[data].card.cardid))
                                sign = False
                                break
                            else:
                                print("身份证号码错误")
                        elif num == "2":
                            pwd = input("请输入卡密码来冻结卡片:")
                            if self.user_dict[data].card.password == pwd:
                                self.user_dict[data].card.islock = True
                                self.save()
                                print("您的卡号{}冻结成功,请退出保存后继续操作!".format(self.user_dict[data].card.cardid))

                                sign = False
                                break
                        else:
                            print("输入有误,重新选择!")
            else:
                print("输入有误,重新选择!")
    # 解卡
    def unlock(self):
        sign = True
        while sign :
            data = input("请输入卡号(返回上一层请按1):")
            if data == "1" :break
            elif data in self.user_dict:
                if not(self.user_dict[data].card.islock):print("此卡并没有冻结!")
                elif self.user_dict[data].card.islock:
                    while True:
                        num = input("通过何种方式来解锁卡片\n1:身份证号码  2:密码")
                        if num == "1":
                            sfz = input("请输入身份证号码来解锁卡片:")
                            if self.user_dict[data].userid == sfz:
                                self.user_dict[data].card.islock = False
                                self.save()
                                print("您的卡号{}解冻成功,请退出保存后重新登录!".format(self.user_dict[data].card.cardid))

                                sign = False
                                break
                            else:
                                print("身份证号码错误")
                        elif num == "2":
                            pwd = input("请输入卡密码来解锁卡片:")
                            if self.user_dict[data].card.password == pwd:
                                self.user_dict[data].card.islock = False
                                self.save()
                                print("您的卡号{}解冻成功,请退出保存后重新登录!".format(self.user_dict[data].card.cardid))

                                sign = False
                                break
                        else:print("输入有误,重新选择!")
            else:print("输入有误,重新选择!")
    # 补卡
    def new_card (self):
        while True:
            sfz = input("请输入身份证号码来补卡(返回上一层请按1):")
            if sfz == "1": break
            if sfz in self.userid_dict:
                old_cardid = self.userid_dict[sfz]
                new_cardid = self.quth_code()

                self.user_dict[new_cardid] = self.user_dict[old_cardid]

                self.userid_dict[sfz] = new_cardid
                self.user_dict.pop(old_cardid)
                self.save()
                print("补卡成功,新的卡号为{}".format(new_cardid))
                break
            else:
                print("身份证号码错误,请重新输入")
    # 保存退出
    def save(self):
        self.jindutiao()
        print()
        with open("user.txt",mode="wb") as f1:
            pickle.dump(self.user_dict,f1)

        with open("userid.txt",mode="wb") as f2:
            pickle.dump(self.userid_dict,f2)
    # 进度条
    def jindutiao(self):
        n = 0
        print("请稍后......")
        while n <= 50:
            time.sleep(0.01)
            print("\r[%-50s]%2d%%" % ("*" * n, 2 * n), end="")
            n += 1

  

 

# 主程序模块


from package.view import View
from package.card import Card
from package.person import Person
from package.operation import Operation

class Main:
    @staticmethod
    def run():
        if View.login():
            o = Operation()
            while True:
                num = input("请选择需要办理的业务:")
                if num == "1" :
                    o.register()
                elif num == "2" :
                    o.query()
                elif num == "3" :
                    o.save_money()
                elif num == "4" :
                    o.get_money()
                elif num == "5":
                    o.trans_money()
                elif num == "6":
                    o.change_pwd()
                elif num == "7":
                    o.lock()
                elif num == "8":
                    o.unlock()
                elif num == "9":
                    o.new_card()
                elif num == "0":
                    o.save()
                    break

if __name__ == "__main__" :
    Main.run()

  

标签:day28,self,ATM,程序,dict,user,print,data,card
来源: https://www.cnblogs.com/zhoulangshunxinyangfan/p/13488529.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有