• 小说阅读


    目录:

    readsys/
    ├── bin
    │   ├── __init__.py
    │   └── start.py
    ├── conf
    │   ├── __init__.py
    │   └── setting.py
    ├── core
    │   ├── __init__.py
    │   └── src.py
    ├── db
    │   ├── access.log
    │   ├── db_handle.py
    │   ├── db.txt
    │   ├── fictions
    │   │   ├── __init__.py
    │   │   ├── 344272214347213227347232204345246273345255220344270216345244247350215211345216237347232204346225205344272213.txt
    │   │   ├── 344273244344272272347276236350200273347232204347210261.txt
    │   │   ├── 345200232345244251345261240347213227350256260.txt
    │   │   ├── 346262231351233225350213261351233204350275254.txt
    │   │   ├── 35125323034622521034520527334721425236346212200-344270212.txt
    │   │   └── 35125323034622521034520527334721425236346212200-344270213.txt
    │   ├── __init__.py
    │   └── story_class.txt
    ├── __init__.py
    ├── lib
    │   ├── common.py
    │   ├── __init__.py
    └── log
        ├── __init__.py
        └── user.log
    import os,sys
    
    dir=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(dir)
    
    from core import src
    
    
    if __name__ == '__main__':
        src.run()
    start.py
    import os
    
    #主目录
    base_dir=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    #数据库文件目录
    db_dir=os.path.join(base_dir,"db")
    
    #db文件路径
    db_path=os.path.join(db_dir,"db.txt")
    db_path_swap=os.path.join(db_dir,".db.txt.swap")
    
    #story_class.txt路径
    story_path=os.path.join(db_dir,"story_class.txt")
    
    #书籍目录
    book_dir=os.path.join(db_dir,"fictions")
    setting.py
    from db import db_handle
    from lib import common
    
    data_info={
        "name":None,
        "data":None,
    }
    
    #用户注册
    def register():
        flag=True
        while flag:
            add_name=input("请输入注册的用户名:>>>").strip()
            #如果用户输入b返回程序初始界面
            if add_name == "b":
                break
            #加载用户信息,查看库中是否已存在注册的用户
            user_data=db_handle.load_data(add_name)
            if user_data:
                print("输入的用户名,已被注册,请重新输入")
                continue
            add_passwd=input("请输入密码:>>>").strip()
            re_add_passwd=input("请再次输入密码").strip()
            if add_passwd == re_add_passwd:
                data=str({"name":add_name,"passwd":add_passwd,"balance":0})
                db_handle.save(data)
                print("用户[{}]注册成功".format(add_name))
                break
            else:
                print("两次密码输入不一致,请重新输入")
    
    #用户登录
    def user_login():
        flag = True
        while flag:
            inp_name=input("请输入用户名:>>>").strip()
            user_data = db_handle.load_data(inp_name)
            if user_data:
                count=0
                while count < 3:
                    inp_pwd=input("请输入密码:>>>").strip()
                    if user_data["passwd"] == inp_pwd:
                        data_info["name"]=inp_name
                        data_info["data"]=user_data
                        print("用户[{}]登录成功".format(inp_name))
                        flag=False
                        break
                    else:
                        print("密码输入错误,请重新输入")
                else:
                    print("输错三次,退出程序")
                    exit()
            else:
                print("输入的用户名不存在,请重新输入。")
    
    
    #充值功能
    @common.auth
    def rechange():
        flag=True
        while flag:
            rechange_money=input("请输入充值金额:>>>").strip()
            if rechange_money.isdigit():
                rechange_money=int(rechange_money)
                user_data=data_info["data"]
                user_data["balance"] += rechange_money
                db_handle.dump_data(data_info["name"],user_data)
                print("用户[{}]成功充值{}元".format(data_info["name"],rechange_money))
                break
            else:
                print("请输入数字。。。")
    
    #阅读小说功能
    @common.auth
    def reads():
        flag=True
        while flag:
            print('''
    ----------小说阅读程序主页面----------
    0.  玄幻武侠
    1.  都市爱情
    2.  高效养猪36技
    q.  退出
    b.  返回上一层
    --------------end---------------
            ''')
            #加载小说类型以及书籍名称的字典
            story_dic=db_handle.story_info()
            chooice=input("请输入小说类型编号:>>>").strip()
            if chooice == "b":
                break
            if chooice == "q":
                exit()
            if chooice in story_dic:
                for i in story_dic[chooice]:
                    print("小说编号[{}],小说名称<{}>,小说价格[{}]".format(i,story_dic[chooice][i][0],story_dic[chooice][i][1]))
                while flag:
                    chooice1=input("请输入选择的小说编号:b返回上一层,q退出>>>").strip()
                    book_name=story_dic[chooice][chooice1][0]
                    book_price=int(story_dic[chooice][chooice1][1])
                    if chooice1 == "b":
                        break
                    if chooice1 == "q":
                        exit()
                    if chooice1 in story_dic[chooice]:
                        chooice2=input("是否确认购买:Y/N,y/n").strip()
                        if chooice2 == "y" or chooice2 == "Y":
                            #查看余额是否够买书
                            #加载用户信息
                            user_data=data_info["data"]
                            if user_data["balance"] < book_price:
                                print("尊敬的用户,您的余额不足以购买此书。。")
                                break
                            user_data["balance"]-=book_price
                            db_handle.dump_data(data_info["name"],user_data)
                            print("购买成功,自动显示书籍信息~")
                            book_data=db_handle.read_book_info(book_name)
                            print('''
    ----------{}小说内容----------
    {}
    --------------end-------------
            '''.format(book_name,book_data))
                            break
                        elif chooice2 == "n" or chooice2 == "N":
                            break
                        else:
                            print("请输入Y/N,y/n")
    
            else:
                print("输入的小说类型编号不存在,请重新输入。")
    
    #退出程序
    def logout():
        chooice=input("确认退出Y/N,y/n:>>>").strip()
        if chooice == "Y" or chooice == "y":
            exit()
        elif chooice == "N" or chooice == "n":
            pass
        else:
            print("请输入Y/N,y/n")
    
    
    func_dic={
        "0":register,
        "1":user_login,
        "2":rechange,
        "3":reads,
        "4":logout,
    }
    
    
    #主运行程序
    def run():
        flag=True
        while flag:
            print('''
    ----------小说阅读程序----------
    0.  注册
    1.  登录
    2.  充值
    3.  阅读小说
    4.  退出
    --------------end---------------
            ''')
            chooice=input("请输入功能id:>>>").strip()
            if chooice in func_dic:
                func_dic[chooice]()
            else:
                print("输入的功能id不存在。")
    src.py
    from conf import setting
    
    import os
    
    #读取用户信息
    def load_data(user_name):
        with open(setting.db_path,"r",encoding="utf-8") as f:
            for line in f:
                if user_name in line:
                    user_data=eval(line)
                    return user_data
    
    #更新用户信息
    def dump_data(name,user_data):
        with open(setting.db_path, "r", encoding="utf-8") as f, 
            open(setting.db_path_swap, "w", encoding="utf-8") as fw:
            for line in f:
                if name in line:
                    line=str(user_data)
                fw.write("{}".format(line))
        os.remove(setting.db_path)
        os.rename(setting.db_path_swap,setting.db_path)
    
    #存储注册用户信息
    def save(user_data):
        with open(setting.db_path,"a",encoding="utf-8") as f:
            f.write("{}
    ".format(user_data))
    
    #加载书籍信息字典
    def story_info():
        with open(setting.story_path,"r",encoding="utf-8") as f:
            story_dic=f.read()
        return eval(story_dic)
    
    #购买成功,打印书籍信息
    def read_book_info(book_name):
        book_path=os.path.join(setting.book_dir,book_name)
        with open(book_path,"r",encoding="utf-8") as f:
            book_data=f.read()
            return book_data
    db_handle.py
    {"name":"zhangsan","passwd":"123","balance":200,}
    {"name":"lisi","passwd":"123","balance":200,}
    {'name': 'egon', 'passwd': '123', 'balance': 152222}
    {"name":"alex","passwd":"123","balance":455365,}
    {'name': 'lxx', 'passwd': '123', 'balance': 19945}
    db.txt
    def auth(func):
        from core import src
        def inner(*args,**kwargs):
            if src.data_info["name"]:
                res=func(*args,**kwargs)
                return res
            else:
                print("还没有登录,请先登录。。。")
                src.user_login()
                res = func(*args, **kwargs)
                return res
        return inner
    common.py
  • 相关阅读:
    Win7 IIS FTP
    (转)Windows平台下git中文乱码的问题
    (转)如何在MySql中记录SQL日志(例如Sql Server Profiler)
    (转)Mysql 使用
    Xcode 快捷键
    (转)xcode 4.2 新建工程模板详解
    解决apache的the requested operation has failed
    ANDROID 获取SD卡剩余容量
    (转)struct tm 的应用 了解strtok应用
    (转)Ubuntu建立PHP服务器(apache+php+mysql)
  • 原文地址:https://www.cnblogs.com/baicai37/p/12591087.html
Copyright © 2020-2023  润新知