小说阅读

目录:

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
│   │   ├── \344\272\214\347\213\227\347\232\204\345\246\273\345\255\220\344\270\216\345\244\247\350\215\211\345\216\237\347\232\204\346\225\205\344\272\213.txt
│   │   ├── \344\273\244\344\272\272\347\276\236\350\200\273\347\232\204\347\210\261.txt
│   │   ├── \345\200\232\345\244\251\345\261\240\347\213\227\350\256\260.txt
│   │   ├── \346\262\231\351\233\225\350\213\261\351\233\204\350\275\254.txt
│   │   ├── \351\253\230\346\225\210\345\205\273\347\214\25236\346\212\200-\344\270\212.txt
│   │   └── \351\253\230\346\225\210\345\205\273\347\214\25236\346\212\200-\344\270\213.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("{}\n".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

猜你喜欢

转载自www.cnblogs.com/baicai37/p/12591087.html
今日推荐