• 3.29小说阅读器


    start:

    from core import src
    import os
    import sys
    #将项目根目录添加到sys.path中 即添加环境变量?
    dir = os.path.dirname(os.path.dirname(__file__))
    sys.path.append(dir)
    if __name__ == '__main__':
    src.run()

    settings:
    #先获取根目录
    import os
    #获取项目reader根目录
    BASE_PATH=os.path.dirname(os.path.dirname(__file__))
    #获取DB目录(这一块不懂复习模块)
    DB_PATH=os.path.join(BASE_PATH, 'db')
    # 进入db.txt
    db_txt_path = os.path.join(DB_PATH, 'db.txt')
    #story_class路径
    STORY_PATH=os.path.join(DB_PATH, 'story_class')
    #小说存放目录
    FICTION_DIR=os.path.join(DB_PATH, 'fictions')
    #日志存放路径
    LOG_PATH=os.path.join(BASE_PATH, 'log', 'log.txt')

    src:
    from db import db_hanlder
    from lib import common
    import time
    login_user=None

    #注册
    def register():
    print('注册功能执行中')
    #先确认用户是否存在(涉及查看数据在注册之前)
    while True:
    username=input("请输入用户名:").strip()
    user_data=db_hanlder.select(username)
    if user_data:
    print('用户名已存在')
    continue
    password=input("请输入用户名密码:").strip()
    re_password=input("请确认用户名密码:").strip()
    #判断密码是否一样
    if password==re_password:
    db_hanlder.save(username,password)
    print(f'用户{username}注册成功')
    break
    else:
    print('请重新输入:')
    continue
    #登录
    def login():
    print('登录功能执行中')
    while True:
    username = input("请输入用户名:").strip()
    user_data = db_hanlder.select(username)
    if not user_data:
    print('当前用户不存在,请重新输入')
    continue
    password = input("请输入用户名密码:").strip()
    # 判断密码是否和账号里密码一样
    if password == user_data[1]:
    #记录到日志
    global login_user
    login_user = username
    print(f'用户{username}登录成功')
    break
    else:
    print('请重新输入:')
    continue


    #充值
    @common.login_auth
    def recharge():
    while True:
    balance=input('请输入充值金额:').strip()
    if not balance.isdigit():
    print('输入有误')
    else:
    balance=int(balance)
    user,pwd,bal=db_hanlder.select(login_user)
    old_data=f'{user}:{pwd}:{bal}'
    bal=int(bal)
    bal+=balance
    new_data=f'{user}:{pwd}:{bal}'
    db_hanlder.update(old_data,new_data)
    print(f'当前用户:【{login_user}】充值金额【{balance}】元!')
    #记录时间
    now_time=time.strftime('%Y-%m-%d %X')
    log_data=f'时间:{now_time} 用户名:{login_user} 充值金额:{balance}'
    common.append_log(log_data)
    break

    #阅读
    @common.login_auth
    def reader():
    story_dic=db_hanlder.get_all_story()
    if not story_dic:
    print('没有小说')
    return

    while True:
    print('''
    ====欢迎来到阅读小说功能主页====
    0 玄幻武侠
    1 都市爱情
    2 高效养猪36天
    =============END==============
    ''')
    choice1=input("请输入编号:").strip()
    if choice1 not in story_dic:
    print("输入有误")
    continue
    #获取小说类型所有小说
    fiction_dic=story_dic.get(choice1)
    #打印当前小说,让用户选择
    for number,fiction_list in fiction_dic.items():
    name,price=fiction_list
    print(f'小说编号{number} 小说名字{name} 小说价格{price}')
    while True:
    choice2=input("请输入想买的小说")
    if choice2 not in fiction_dic:
    print("输入有误")
    continue
    name,price=fiction_dic.get(choice2)
    choice3=input(f'当前小说名为{name} ,价格为{price}元,请输入y确认购买,b退出程序:').strip()
    if choice3 == 'b':
    exit()
    if choice3 == 'y':
    username, password, balance = db_hanlder.select(login_user)
    balance = int(balance)
    price=int(price)
    if balance<price:
    print('没钱快滚')
    break
    else:
    old_data=f'{username}:{password}:{balance}'
    new_data=f'{username}:{password}:{balance}'
    balance-=price
    db_hanlder.update(old_data,new_data)
    print('购买成功')
    ficton_data=db_hanlder.show_fiction_data(name)
    print(f'''
    =====小说内容如下=====
    {ficton_data}
    ''')
    now_time = time.strftime('%Y-%m-%d %X')
    log_data = f'时间:{now_time} 用户名:{login_user} 充值金额:{balance}'
    common. append_log(log_data)

    break

    fuc_dic={
    '0':register,
    '1':login,
    '2':recharge,
    '3':reader,

    }


    def run():
    while True:
    print('''
    =====小说阅读器=====
    0 账号注册
    1 账号登录
    2 充值功能
    3 阅读小说
    =======END=========
    ''')

    choice=input('请输入编号(输入q退出):').strip()
    if choice=='q':
    break
    #判断用户是否在编号
    if choice not in fuc_dic:
    print('当前输入有误!')
    continue
    else:
    fuc_dic.get[choice]()
    db_hanlder:
    from conf import settings
    import os
    import os
    #查看数据
    def save(username,password,balance=0):
    with open(settings.db_txt_path,'a',encoding='utf-8')as f1:
    f1.write(f'{username}:{password}:{balance} ')
    def select(username):
    with open(settings.db_txt_path,'r',encoding='utf-8')as f:
    #先读出内容
    for line in f:
    if username in f.read():
    user_data=line.strip().split(':')
    return user_data

    def update(old_data,new_data):
    new_path=os.path.join(settings.DB_PATH,'new.txt')
    with open(settings.db_txt_path,'r+',encoding='utf-8') as r_f,
    open(new_path,'w',encoding='utf-8')as w_f:
    #替换数据
    all_user_data=r_f.read()
    all_user_data=all_user_data.replace(old_data,new_data)
    #将数据放入新文件
    w_f.write(all_user_data)
    #最后修改新文件
    os.rename(new_path,settings.db_txt_path)

    #查看所有小说数据
    def get_all_story():
    with open(settings.STORY_PATH,'r',encoding='utf-8') as f:
    story_dic=eval(f.read())
    return story_dic


    #查看单本小说
    def show_fiction_data(fiction_name):
    fiction_path=os.path.join(settings.FICTION_DIR,fiction_name)
    with open(settings.FICTION_DIR,'r',encoding='utf-8') as f:
    fiction_data=f.read()
    return fiction_data
    common:
    from conf import settings
    def login_auth(func):
    from core import src
    def inner(*args,**kwargs):
    if src.login_user:
    res=func(*args,**kwargs)
    return res
    else:
    print('没登录,没权享受权利')
    src.login()
    return inner

    def append_log(log_data):
    with open(settings.LOG_PATH, 'a', encoding='utf-8') as f:
    f.write(log_data + ' ')



  • 相关阅读:
    调用打印预览问题
    html2canvas+Canvas2Image分享海报功能踩坑
    SQL Server – Show/Hide Results Pane in Management Studio 2012
    jQuery
    Sap PI 接口配置
    WebService 错误解决记录
    线程
    HTML和CSS
    C#高编
    MVC3
  • 原文地址:https://www.cnblogs.com/lijunc/p/12595103.html
Copyright © 2020-2023  润新知