zoukankan      html  css  js  c++  java
  • python面向过程编程

    前面程序整合加自定义日志

    1.文件摆放

    ├── xxxx
    │   ├── src.py
    │   └── fil_mode.py
    │   └── data_time.py
    │   └── loading.py
    │   └── data_time.py
    │   └── logger.py
    

    2.运行文件

    1.run

    src.py

    # 导入需要用到的所有内置模块
    import logging
    import time
    import json
    import os
    from fil_mode import *
    from loading import *
    from data_time import *
    from logger import *
    
    #全局所需要用到的变量
    login_name = [None] #用全局可变的受局部影响
    goods_dict = {
        '0':['草泥马',100],
        '1':['《nick写真集》',1],
        '2':['奥特曼玩偶',50],
        '3':['钢铁侠真人套装',10000],
        '4':['《产品经理强哥自传》',188],
        '5':['《马叉虫是如何炼成的》',888],
        '6':['《YwY自传》',8888888888888]
    }
    user_car = dict()
    
    
    #功能模块
    #注册
    def register():
        print('33[1;34;46m		欢迎使用注册功能		33[0m')
        register_name_Ture = 0
        name_list = fil_info_name_list()
        while register_name_Ture==0:
            print('33[1;34;43m		请您输入注册账号		33[0m')
            print('33[1;34;43m		账号由全英文组成		33[0m')
            print('33[1;31;m输入Q退出程序	33[0m')
            register_name = input('请输入:').strip()
            if register_name == 'Q':
                loading()
                return False
            elif len(register_name.replace(' ','')) != len(register_name):
                print('33[1;31;m输入账号中有宫格请重新输入	33[0m')
                continue
            elif not register_name.isalpha():
                print('33[1;31;m输入账号不是由全英文组成请重新输入		33[0m')
                continue
            elif register_name in fil_info_name_list():
                print('33[1;31;m输入账号以存在请重新输入		33[0m')
            else:
                register_name_Ture =1
                print('33[1;34;43m		账号名已注册成功		33[0m')
                while True:
                    print('33[1;34;43m		请您输入注册密码		33[0m')
                    print('33[1;34;43m		账号由全数字组成		33[0m')
                    register_pwd = input('请输入:').strip()
                    if len(register_pwd.replace(' ', '')) != len(register_pwd):
                        print('33[1;31;m输入密码中有宫格请重新输入	33[0m')
                        continue
                    elif not register_pwd.isdigit():
                        print('33[1;31;m输入密码不是由全数字组成请重新输入		33[0m')
                        continue
                    else:
                        print('33[1;32;m		注册成功		33[0m')
                        register_info_dict = {'name':None,'pwd':None,'balance':0,'integral':0,'freeze':0}
                        register_info_dict['name'] = register_name
                        register_info_dict['pwd'] = register_pwd
                        fil_add_info_dict(register_info_dict)
                        print('注册成功')
                        loading()
                        break
        return True
    
    #登入
    def login():
        print('33[1;34;46m		欢迎使用登入功能	33[0m')
        name_list = fil_info_name_list()
        login_name_Ture = 0
        login_count =0
        if not name_list:
            print('33[1;31;m没有用户注册请先注册33[0m')
            loading()
    
            return False
        global login_name
        if not login_name[0]:
            while login_name_Ture == 0:
                print('33[1;34;43m		请您输入账号		33[0m')
                print('33[1;31;m输入Q退出程序	33[0m')
                login_username = input('请输入:').strip()
                if login_username == 'Q':
                    loading()
                    return False
                elif len(login_username.replace(' ', '')) != len(login_username):
                    print('33[1;31;m输入账号中有宫格请重新输入	33[0m')
                    continue
                elif not login_username.isalpha():
                    print('33[1;31;m输入账号不为全英文		33[0m')
                    continue
                elif not login_username in fil_info_name_list():
                    print('33[1;31;m输入账号不存在		33[0m')
                    continue
                else:
                    login_name_Ture = 1
                    print('33[1;34;43m		账号输入正确		33[0m')
                    while login_count < 5:
                        print(f'33[1;34;43m	你有{5-login_count}次机会输入密码		33[0m')
                        print('33[1;34;43m		请您输入密码		33[0m')
                        login_pwd = input('请输入:').strip()
                        if len(login_pwd.replace(' ', '')) != len(login_pwd):
                            print('33[1;31;m输入密码中有宫格请重新输入	33[0m')
                            login_count += 1
                            continue
                        elif not login_pwd.isdigit():
                            print('33[1;31;m输入密码不为全数字		33[0m')
                            login_count += 1
                            continue
                        else:
                            user_dict = fil_userinfo(login_username)
                            if user_dict['pwd'] != login_pwd:
                                print('33[1;31;m输入密码错误请重新输入		33[0m')
                                login_count += 1
                                continue
                            else:
                                if user_dict["freeze"] == 0:
                                    print('33[1;32;m		登入成功		33[0m')
                                    login_name[0] = login_username
                                    loading()
                                    logger_login(login_username)
                                    return True
                                else:
                                    print('33[1;31;m登入失败		33[0m')
                                    print(f'33[1;31;m账户{login_username}以被冻结		33[0m')
                                    loading()
    
                                    return False
                    fil_info_frzzez_amend(login_username,1)
                    print('33[1;31;m		登入失败		33[0m')
                    print(f'33[1;31;m{login_username}账号密码登入失败太多已被冻结33[0m')
                    loading()
    
                    return False
        while True:
            print(38 * '-')
            print("33[0;40;46m		欢迎使用登入功能			33[0m")
            print(f'账号{login_name[0]}已经登入')
            chiose = input('输入1当前账号退出并退出登入程序
    '
                           '输入2当前账号退出并重新登入程序
    '
                           '输入Q退出当前程序')
            print(38 * '-')
            if chiose == '1':
                logger_exit(login_name[0])
                login_name[0] = None
    
                return False
            elif chiose == '2':
                logger_exit(login_name[0])
                login_name[0] = None
                login()
                return
            elif chiose == 'Q':
                loading()
                return True
            else:
                print('33[1;31;m请正确输入')
    
    #充值
    def top_up():
        print('33[1;34;46m		欢迎使用充值功能	33[0m')
        name_list = fil_info_name_list()
        login_name_Ture = 0
        login_count =0
        if not name_list:
            print('33[1;31;m没有用户注册请先注册33[0m')
            loading()
            return False
        global login_name
        if not login_name[0]:
            print('33[1;31;m没有用户登入请先登入33[0m')
            loading()
            return False
        info_dict = fil_userinfo(login_name[0])
        print(f"33[1;32;m当前账户{login_name[0]}可用余额为{info_dict['balance']}元33[0m")
        while True :
            print('33[1;34;43m		请您输入充值的金额		33[0m')
            print('33[1;31;m输入Q退出程序	33[0m')
            balance = input('请输入:').strip()
            if balance == 'Q':
                loading()
                return False
            elif len(balance.replace(' ', '')) != len(balance):
                print('33[1;31;m输入金额中有宫格请重新输入	33[0m')
                continue
            elif not balance.isdigit():
                print('33[1;31;m输入金额不为全数字		33[0m')
                continue
            else:
                balance_int = int(balance)
                info_dict['balance'] += balance_int
                fil_info_balance_amend(login_name[0],info_dict['balance'])
                print(f'33[1;32;m充值成功33[0m')
                print(f"33[1;32;m当前账户{login_name[0]}可用余额为{info_dict['balance']}元33[0m")
                print('33[1;34;43m		是否继续充值		33[0m')
                print('33[1;31;m输入Q退出Y为继续	33[0m')
                while True:
                    chiose = input('请输入')
                    if chiose not in ['Q','Y']:
                        print(f'33[1;32;m请好好输入33[0m')
                    elif chiose == 'Q':
                        loading()
                        return False
                    else:
                        break
    
    #购物
    def shopping():
    
        a = '0'
        print('33[1;34;46m		欢迎使用购物功能	33[0m')
        name_list = fil_info_name_list()
        login_name_Ture = 0
        login_count =0
        if not name_list:
            print('33[1;31;m没有用户注册请先注册33[0m')
            loading()
            return False
        global login_name
        if not login_name[0]:
            print('33[1;31;m没有用户登入请先登入33[0m')
            loading()
            return False
        user_dict = fil_userinfo(login_name[0])
        balance = user_dict["balance"]
        while a == '0':
            print(38*'-')
            print("33[0;30;46m		输入0是草泥马100元				33[5m")
            print("33[0;30;46m		输入1是《nick写真集》1元			33[5m")
            print("33[0;30;46m		输入2是奥特曼玩偶50元 			33[5m")
            print("33[0;30;46m		输入3是钢铁侠真人套装10000元 	33[5m")
            print("33[0;30;46m		输入4是《产品经理强哥自传》18888元33[5m")
            print("33[0;30;46m		输入5是《马叉虫是如何炼成的》888元33[5m")
            print("33[0;30;46m		输入6是《YwY自传》8888888888888元33[5m")
            print("33[0;31;m输入q退出程序					33[5m")
            print(38 * '-')
            goods_chiose = input('请输入你要购买的商品')
            if goods_chiose=='q':
                loading()
                return
            elif goods_chiose not in goods_dict:
                print('请好好输入')
                continue
            else:
                a = '2'
            while True:
                goods_nums = input('请输入商品的数量')
                if not goods_nums.isdigit():
                    print('请输入数字')
                break
            goods = goods_dict[goods_chiose][0]
            price = goods_dict[goods_chiose][1]*int(goods_nums)
    
            #生成购物车
            global user_car
            if goods not in user_car:
                user_car[goods] = [goods_nums,price]
            else:
                user_car[goods][0] += goods_nums
                user_car[goods][1] += price
            print('33[1;32;m-'*50)
            date_time = data_time()
            print(f'您好{login_name[0]}:')
            print(f'当前日期{date_time}
    
    ')
            money = 0
            for user_car_info in user_car.items():
                print(f'{user_car_info[0]}{user_car_info[1][0]}个 合计{user_car_info[1][1]}元
    ')
                money += int(user_car_info[1][1])
            print(f'					一共{money}元')
            print('-' * 50)
            print('33[0m',end='')
            judge = 1
            while judge == 1:
                print(50 * '33[1;32;m-')
                jump = input('33[0m输入0结算
    '
                             '输入1继续购买
    '
                             '输入2清空购物车继续购买
    '
                             '输入3清空购物车退出
    '
                             '请输入您的选择
    '
                             '33[0m').strip()
                if jump not in ['0','1','2','3']:
                    print('请正确输入0,1,2,3中任意数字')
                    continue
                if jump == '1':
                    judge = 4  # 跳出功能选择
                    a = '0'  # 继续购买
                elif jump == '2':
                    user_car = dict()  # 清空购物车
                    judge = 4  # 跳出功能选择
                    a = '0'  # 继续购买
                elif jump == '3':
                    user_car = dict()
                    judge = 4  # 跳出功能选择
                    print("-" * 50)
                    print('33[1;42;m	欢迎下次光临	33[0m')
                elif jump == '0':
                    if  money > balance:
                        print('33[1;31;m余额不足33[0m')
                    else:
                        judge = 4  # 跳出功能选择
                        print("33[1;32;m-" * 50)
                        #打印内容
                        date_time = data_time()
                        money = 0
                        print(f'您好{login_name[0]}:')
                        print(f'当前日期{date_time}
    
    ')
                        for user_car_info in user_car.items():
                            print(f'{user_car_info[0]}{user_car_info[1][0]}个 合计{user_car_info[1][1]}元
    ')
                            money += int(user_car_info[1][1])
                        print(f'					一共{money}元')
                        print("-" * 50)
                        print('33[0m')
                        balance -= money
                        fil_info_balance_amend(login_name[0],balance)
                        print('33[1;42;m	欢迎下次光临	33[0m')
                        logger_shopping(login_name[0],user_car)
                        loading()
                        return
    
    #余额查询
    def balance_enquiry():
        print('33[1;34;46m		欢迎使用余额查询功能	33[0m')
        name_list = fil_info_name_list()
        login_name_Ture = 0
        login_count =0
        if not name_list:
            print('33[1;31;m没有用户注册请先注册33[0m')
            loading()
            return False
        global login_name
        if not login_name[0]:
            print('33[1;31;m没有用户登入请先登入33[0m')
            loading()
            return False
        info_dict = fil_userinfo(login_name[0])
        print(f"33[1;32;m当前账户{login_name[0]}可用余额为{info_dict['balance']}元33[0m")
        print('33[1;42;m5秒后返回主界面33[0m',end='')
        loading()
        time.sleep(4)
    
    #解冻
    def freeze():
        print('33[1;34;46m		欢迎使用账号解冻功能	33[0m')
        name_list = fil_info_name_list()
        login_name_Ture = 0
        login_count = 0
        if not name_list:
            print('33[1;31;m没有用户注册请先注册33[0m')
            loading()
            return False
        while True:
            print('33[1;34;43m		请您输入解冻账号		33[0m')
            print('33[1;31;m输入Q退出程序	33[0m')
            name = input('请输入:').strip()
            if name == 'Q':
                loading()
                return False
            elif len(name.replace(' ', '')) != len(name):
                print('33[1;31;m输入账号中有宫格请重新输入	33[0m')
                continue
            elif not name.isalpha():
                print('33[1;31;m输入账号不为全英文字母		33[0m')
                continue
            elif name not in name_list:
                print('33[1;31;m输入账号不存在		33[0m')
                continue
            else:
                user_dict = fil_userinfo(name)
                user_freeze = user_dict['freeze']
                user_pwd = user_dict['pwd']
                if user_freeze == 0:
                    print(f'33[1;31;m当前账户{name}未被冻结		33[0m')
                    loading()
                    return
                else:
                    while True:
                        print('-' * 50)
                        a = input('输入:杨大爷请帮我解冻
    请输入:')
                        if a != '杨大爷请帮我解冻':
                            print('33[1;31;m想解冻就好好输入33[0m')
                            continue
                        fil_info_frzzez_amend(name, 0)
                        print(f'33[1;32;m账号{name}解冻成功33[0m')
                        loading()
                        return
    
    #运行模块
    #功能列表
    msg_dict ={
        '1':login,
        '0':register,
        '2':top_up,
        '3':balance_enquiry,
        '4':shopping,
        '5':freeze,
        'q':'quit'
    }
    app_name_dict ={
        '1':'login',
        '0':'register',
        '2':'top_up',
        '3':'balance_enquiry',
        '4':'shopping',
        '5':'freeze'
    }
    #运行程序
    if __name__ == '__main__':
        logger_start('程序主界面')
        while True:
            print("33[0;31;44m		杨大爷超市欢迎您				33[5m")
            print("33[0;30;42m		输入0进入注册界面			33[5m")
            print("33[0;30;42m		输入1进入登入界面			33[5m")
            print("33[0;30;42m		输入2进入充值界面			33[5m")
            print("33[0;30;42m		输入3进入余额查询界面		33[5m")
            print("33[0;30;42m		输入4进入购物界面			33[5m")
            print("33[0;30;42m		输入5进入解冻界面			33[5m")
            print("33[0;30;42m		输入q退出程序 				33[5m")
            print(38 * '-')
            user_shopping_chiose = input('请输入你要选择的功能')
            if user_shopping_chiose not in msg_dict:
                print('请好好输入')
                continue
            elif user_shopping_chiose=='q':
                print('再见')
                logger_end('程序主界面')
                break
            else:
                logger_start(f'{app_name_dict[user_shopping_chiose]}')
                msg_dict[user_shopping_chiose]()
                logger_end(f'{app_name_dict[user_shopping_chiose]}')
    

    3.自定义辅助模块

    1.用于文件的读取和写入

    fil_mode.py

    import json
    import os
    def fil_add_info_dict(dict,fil='用户注册信息.txt'):
        info_dict = json.dumps(dict)
        with open(fil,'a',encoding='utf8') as fa :
            fa.write(f'{info_dict}
    ')
        return True
    
    def fil_info_name_list(fil='用户注册信息.txt'):
        name_list = list()
        with open(fil,'a+',encoding='utf-8') as fa :
            fa.seek(0)
            data = fa.read()
            if data:
                with open(fil,'r',encoding='utf-8') as fr :
                    for info_dict in fr:
                        info_dict = json.loads(info_dict)
                        name_list.append(info_dict.get('name'))
        return name_list
    
    def fil_info_balance_amend(name,balance,fil='用户注册信息.txt'):
        name_list = fil_info_name_list(fil)  #fil_info_name_list为用字典里面的所有名字生成的列表
        if name in name_list:
            with open(fil,'r',encoding='utf8') as fr,
                open('1.txt','w',encoding='utf8') as fw:
                for info_dict in fr:
                    info_dict = json.loads(info_dict)
                    if name == info_dict['name']:
                        info_dict['balance'] = balance
                    info_dict =json.dumps(info_dict)
                    fw.write(f'{info_dict}
    ')
                    fw.flush()
            os.remove(fil)
            os.rename('1.txt',fil)
    
    def fil_userinfo(name,fil='用户注册信息.txt'):
        with open(fil,'a+',encoding='utf8') as far:
            far.seek(0)
            for a in far:
                a = json.loads(a)
                if a['name'] == name:
                    info_dict = a
                    return info_dict
            return False
    
    def fil_info_frzzez_amend(name,freeze,fil='用户注册信息.txt'):
        name_list = fil_info_name_list(fil)  #fil_info_name_list为用字典里面的所有名字生成的列表
        if name in name_list:
            with open(fil,'r',encoding='utf8') as fr,
                open('1.txt','w',encoding='utf8') as fw:
                for info_dict in fr:
                    info_dict = json.loads(info_dict)
                    if name == info_dict['name']:
                        info_dict["freeze"] = freeze
                    info_dict =json.dumps(info_dict)
                    fw.write(f'{info_dict}
    ')
                    fw.flush()
            os.remove(fil)
            os.rename('1.txt',fil)
    

    2.用于子程序返回主界面来个延迟动画效果

    loading.py

    import time
    def  loading():
        txt = '返回主界面中loading'
        print(f'33[1;42;m{txt}33[0m',end='')
        for a in range(10):
            print(f'33[1;42;m.33[0m',end='')
            time.sleep(0.1)
        print('')
        return True
    

    3.用于记录时间

    data_time.py用于记录时间

    import time
    def data_time():
        return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    

    4.记录日志(这部分有点问题)

    logger.py

    import logging
    def logger_login(user):
        logger_login = logging.getLogger('user_login')
        fli_show = logging.FileHandler('user_login.log')
        logger_format = logging.Formatter('登入时间:%(asctime)s  %(levelname)s-用户:%(message)s',
                         datefmt='%Y-%m-%d %X' )
        fli_show.setFormatter(logger_format)
        logger_login.addHandler(fli_show)
        logger_login.setLevel(10)
        logger_login.info(user)
    
    
    def logger_exit(user):
        logger_login = logging.getLogger('user_login')
        fli_show = logging.FileHandler('user_login.log')
        logger_format = logging.Formatter('退出时间:%(asctime)s  %(levelname)s-用户:%(message)s',
                         datefmt='%Y-%m-%d %X' )
        fli_show.setFormatter(logger_format)
        logger_login.addHandler(fli_show)
        logger_login.setLevel(10)
        logger_login.info(user)
    
    def logger_start(app):
        logger_login = logging.getLogger('start')
        fli_show = logging.FileHandler('app.log')
        logger_format = logging.Formatter('%(message)s程序启动时间:%(asctime)s',
                         datefmt='%Y-%m-%d %X' )
        fli_show.setFormatter(logger_format)
        logger_login.addHandler(fli_show)
        logger_login.setLevel(10)
        logger_login.info(app)
    
    def logger_end(app):
        logger_login = logging.getLogger('end')
        fli_show = logging.FileHandler('app.log')
        logger_format = logging.Formatter('%(message)s程序关闭时间:%(asctime)s',
                         datefmt='%Y-%m-%d %X' )
        fli_show.setFormatter(logger_format)
        logger_login.addHandler(fli_show)
        logger_login.setLevel(10)
        logger_login.info(app)
    
    def logger_shopping(user,car):
        logger_login = logging.getLogger(user)
        fli_show = logging.FileHandler('user_shopping.log')
        logger_format = logging.Formatter('%(asctime)s  %(levelname)s-%(name)s:%(message)s',
                         datefmt='%Y-%m-%d %X' )
        fli_show.setFormatter(logger_format)
        logger_login.addHandler(fli_show)
        logger_login.setLevel(10)
        logger_login.info(car)
    
  • 相关阅读:
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 最大的元素距离
    Java 第十一届 蓝桥杯 省模拟赛 递增序列
    Java 第十一届 蓝桥杯 省模拟赛 递增序列
    Java 第十一届 蓝桥杯 省模拟赛 最大的元素距离
  • 原文地址:https://www.cnblogs.com/pythonywy/p/11006273.html
Copyright © 2011-2022 走看看