小说阅读器

小说阅读器



启动模块bin/start.py

 1 import os
 2 import sys
 3
 4 BASE_PATH=os.path.dirname(os.path.dirname(__file__))
 5 sys.path.append(BASE_PATH)
 6
 7
 8 from core import src
 9
10 if __name__== ‘__main__‘:
11     src.run()


核心代码模块core/src.py

  1 from db import db_handler as db
  2 from lib import common
  3
  4
  5 login_user = None
  6
  7
  8
  9
 10 def register():
 11     ‘‘‘
 12     注册功能
 13     :return:
 14     ‘‘‘
 15     while True:
 16         inp_name = input(‘输入用户名‘).strip()
 17         name, psd, remind = db.getinfo(inp_name)
 18         if inp_name in name:
 19             print(‘用户已存在‘)
 20         password = input(‘输入密码‘)
 21         re_psd = input(‘再次输入密码‘)
 22         if password == re_psd:
 23             db.save_reg(inp_name, password)
 24             print(‘注册成功‘)
 25             break
 26         else:
 27             print(‘两次密码不一致,请重新输入‘)
 28
 29
 30
 31 def login():
 32     ‘‘‘
 33     登录功能
 34     :return:
 35     ‘‘‘
 36     while True:
 37         inp_name = input(‘输入用户名‘)
 38         name, psd, remind = db.getinfo(inp_name)
 39         if inp_name not in name:
 40             print(‘用户名不存在,请先注册‘)
 41             continue
 42         password = input(‘输入密码‘).strip()
 43         if password == psd:
 44             global login_user
 45             login_user = inp_name
 46             print(‘登录成功,亲爱的{}用户‘.format(login_user))
 47             break
 48         else:
 49             print(‘账号密码错误‘)
 50
 51
 52
 53 @common.log
 54 @common.auth
 55 def add_credit():
 56     ‘‘‘
 57     充值功能
 58     :return:
 59     ‘‘‘
 60     print(‘欢迎使用充值功能,亲爱的{}用户‘.format(login_user))
 61     while True:
 62         amount = input(‘输入充值金额‘)
 63         if not amount.isdigit():
 64             print(‘请输入数字‘)
 65             continue
 66         comf = input(‘确定要充值{}元吗,按Y/y确认,按R/r‘.format(amount))
 67         if comf == ‘R‘ or comf == ‘r‘:
 68             continue
 69         if comf == ‘Y‘ or comf == ‘y‘:
 70             name, psd, remind = db.getinfo(login_user)
 71             remind=int(remind)
 72             old_data = ‘{}:{}:{}‘.format(name, psd, remind)
 73             remind += int(amount)
 74             new_data = ‘{}:{}:{}‘.format(name, psd, remind)
 75             db.update(old_data, new_data)
 76             print(‘已成功充值{}‘.format(amount))
 77             break
 78         return amount
 79
 80
 81 @common.log
 82 @common.auth
 83 def reader():
 84     ‘‘‘
 85     小说功能
 86     :return:
 87     ‘‘‘
 88     book_dic=db.get_book()
 89     if not book_dic:
 90         print(‘库存没有小说了‘)
 91         return
 92     while True:
 93         print(‘‘‘
 94             === 欢迎来到阅读小说功能主页 ===
 95                     0 玄幻武侠
 96                     1 都市爱情
 97                     2 高效养猪36技
 98             ============ end ============
 99             ‘‘‘)
100         cmd=input(‘输入你想阅读的小说种类编号‘).strip()
101         if cmd not in book_dic:
102             print(‘请正确输入编号‘)
103         second_dic =book_dic[cmd]
104         for num,booklist in second_dic.item():
105             name,price=booklist
106             print(‘小说编号[{}],小说名《{}》,小说价格[{}]‘.format(num,name,price))
107         while True:
108             cmd = input(‘输入你想购买的小说编号‘)
109             if cmd not in second_dic:
110                 print(‘请正确输入编号‘)
111                 continue
112             if cmd in second_dic:
113                 name=second_dic[cmd][0]
114                 price=second_dic[cmd][1]
115                 cmd = input(‘当前选择的小说名为: 《{name}》,商品单价为: [{price}], 请输入Y/y购买:‘.format(name,price)).strip()
116                 if cmd == ‘Y‘ or cmd==‘y‘:
117                     name,psd,remind = db.getinfo(login_user)
118                     remind=int(remind)
119                     if remind<int(price):
120                         price(‘余额不足,请先充值‘)
121                         break
122                     old_data = ‘{}:{}:{}‘.format(name, psd, remind)
123                     remind -= int(price)
124                     new_data = ‘{}:{}:{}‘.format(name, psd, remind)
125                     db.update(old_data, new_data)
126                     print(‘购买成功,请欣赏内容‘)
127                     fictiondata=db.show(name)
128                     print(‘‘‘
129                     -------开始阅读--------
130                     {}
131                     ‘‘‘.format(fictiondata))
132
133
134
135 def logout():
136     ‘‘‘
137     登出功能
138     :return:
139     ‘‘‘
140     global login_user
141     login_user=None
142
143
144 #运行菜单
145 func_dic={
146 ‘0‘:[‘注册‘,register],
147 ‘1‘:[‘登录‘,login],
148 ‘2‘:[‘充值‘,add_credit],
149 ‘3‘:[‘小说‘,reader],
150 ‘4‘:[‘登出‘,logout],
151 }
152
153 def run():
154     while True:
155         print(‘‘‘
156                 ~~~~~~~欢迎来到小说世界~~~~~~~
157                         0 账号注册
158                         1 账号登录
159                         2 充值功能
160                         3 阅读小说
161                         4 登出
162                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
163                 ‘‘‘)
164         cmd= input(‘请输入功能编号,按4退出‘).strip()
165         if cmd ==‘4‘:
166             logout()
167             break
168         if cmd not in func_dic:
169             print(‘请正确输入功能编号‘)
170             continue
171         func_dic[cmd][1]()
172
173 run()


数据库操作模块db/db_handler.py

 1 from conf import settings
 2 import os
 3
 4
 5 def getinfo(username):
 6     ‘‘‘
 7     取出文件中用户的数据
 8     :param username:
 9     :return:
10     ‘‘‘
11     with open(settings.DB_TXT_PATH, ‘rt‘, encoding=‘utf-8‘)as f:
12         for line in f:
13             if username in line:
14                 name, psd, remind = line.strip().split(‘:‘)
15                 return name, psd, remind
16
17
18 def save_reg(name, psd, balance=0):
19     ‘‘‘
20     存注册用户的数据
21     :param name:
22     :param psd:
23     :param balance:
24     :return:
25     ‘‘‘
26     with open(settings.DB_TXT_PATH, ‘at‘, encoding=‘utf-8‘)as f:
27         f.write(‘{}:{}:{}‘.format(name, psd, balance))
28
29
30
31 def update(old_data, new_data):
32     ‘‘‘
33     更新用户数据
34     :param old_data:
35     :param new_data:
36     :return:
37     ‘‘‘
38     with open(settings.DB_TXT_PATH, ‘rt‘, encoding=‘utf-8‘)as rf:
39         alldata = rf.read()
40         alldata = alldata.replace(old_data, new_data)
41         with open(‘db.txt.swap‘, ‘wt‘, encoding=‘utf-8‘)as wf:
42             wf.write(alldata)
43     os.rename(‘db.txt.swap‘, settings.DB_TXT_PATH)
44
45
46 def get_book():
47     ‘‘‘
48     获取小说数据
49     :return:
50     ‘‘‘
51     with open(settings.STORY_PATH,‘rt‘,encoding=‘utf-8‘)as f:
52         book_dic=eval(f.read())
53         return book_dic
54
55
56 def show(bookname):
57     ‘‘‘
58     查看小说
59     :param bookname:
60     :return:
61     ‘‘‘
62     book_path = os.path.join(settings.BOOK_DIR, bookname)
63     with open(book_path,‘rt‘,encoding=‘utf-8‘)as f:
64         data=f.read()
65     return data

公共模块(装饰器)lib/common.py

 1 from conf import settings
 2 import time
 3 from core.src import login_user
 4 from core.src import login
 5
 6 def auth(func):
 7     ‘‘‘
 8     认证装饰器
 9     :param func:
10     :return:
11     ‘‘‘
12     def wrapper(*args, **kwargs):
13         if login_user:
14             res = func(*args, **kwargs)
15             return res
16         else:
17             print(‘请先登录再使用功能‘)
18             login()
19
20     return wrapper
21
22
23
24 def log(func):
25     ‘‘‘
26     记录日志装饰器
27     :param func:
28     :return:
29     ‘‘‘
30     def wrapper(*args, **kwargs):
31         res = func(*args, **kwargs)
32         now_time = time.strftime(‘%Y-%m-%d %X‘)
33         log_data = ‘{} {} {} {}‘.format(now_time, login_user, func.__name__, res)
34         with open(‘time.log‘, ‘ab‘)as logf:
35             logf.write(log_data.encode(‘utf-8‘))
36
37         return res
38
39     return wrapper

配置模块conf/settings.py

import os

# 获取项目根目录reader_sys根目录
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.txt文件目录路径
STORY_PATH = os.path.join(DB_PATH, ‘story_class.txt‘)

# 小说存放目录
BOOK_DIR = os.path.join(DB_PATH, ‘book‘)

# 日志文件的路径
LOG_PATH = os.path.join(BASE_PATH, ‘log‘, ‘user.log‘)


面条形式的一个文件下的小说阅读程序实现1.更新了小说阅读模块2.重写了用户存取数据的方式:将字典模式改为函数功能,方便之后规范化放入数据库操作模块中3.独立了登录模块,将认证功能装饰器简化

import os
import time

login_user = None

# common模块
# 认证装饰器
def auth(func):
    def wrapper(*args, **kwargs):
        if login_user:
            res = func(*args, **kwargs)
            return res
        else:
            print(‘请先登录再使用功能‘)
            login()

    return wrapper

# 记录日志装饰器
def log(func):
    def wrapper(*args, **kwargs):
        res = func(*args, **kwargs)
        now_time = time.strftime(‘%Y-%m-%d %X‘)
        log_data = ‘{} {} {} {}‘.format(now_time, login_user, func.__name__, res)
        with open(‘time.log‘, ‘ab‘)as logf:
            logf.write(log_data.encode(‘utf-8‘))

        return res

    return wrapper

# 数据库模块
# 取数据
def getinfo(username):
    with open(‘db.txt‘, ‘rt‘, encoding=‘utf-8‘)as f:
        for line in f:
            if username in line:
                name, psd, remind = line.strip().split(‘:‘)
                return name, psd, remind

# 存注册数据
def save_reg(name, psd, balance=0):
    with open(‘db.txt‘, ‘at‘, encoding=‘utf-8‘)as f:
        f.write(‘{}:{}:{}‘.format(name, psd, balance))

# 更新数据
def update(old_data, new_data):
    with open(‘db.txt‘, ‘rt‘, encoding=‘utf-8‘)as rf:
        alldata = rf.read()
        alldata = alldata.replace(old_data, new_data)
        with open(‘db.txt.swap‘, ‘wt‘, encoding=‘utf-8‘)as wf:
            wf.write(alldata)
    os.rename(‘db.txt.swap‘, ‘db.txt‘)

# 注册功能

def register():
    while True:
        inp_name = input(‘输入用户名‘).strip()
        name, psd, remind = getinfo(inp_name)
        if inp_name in name:
            print(‘用户已存在‘)
        password = input(‘输入密码‘)
        re_psd = input(‘再次输入密码‘)
        if password == re_psd:
            save_reg(inp_name, password)
            print(‘注册成功‘)
            break
        else:
            print(‘两次密码不一致,请重新输入‘)

# 登录功能
def login():
    while True:
        inp_name = input(‘输入用户名‘)
        name, psd, remind = getinfo(inp_name)
        if inp_name not in name:
            print(‘用户名不存在,请先注册‘)
            continue
        password = input(‘输入密码‘).strip()
        if password == psd:
            global login_user
            login_user = inp_name
            print(‘登录成功,亲爱的{}用户‘.format(login_user))
            break
        else:
            print(‘账号密码错误‘)

# 充值功能
@log
@auth
def add_credit():
    print(‘欢迎使用充值功能,亲爱的{}用户‘.format(login_user))
    while True:
        amount = input(‘输入充值金额‘)
        if not amount.isdigit():
            print(‘请输入数字‘)
            continue
        comf = input(‘确定要充值{}元吗,按Y/y确认,按R/r‘.format(amount))
        if comf == ‘R‘ or comf == ‘r‘:
            continue
        if comf == ‘Y‘ or comf == ‘y‘:
            name, psd, remind = getinfo(login_user)
            remind=int(remind)
            old_data = ‘{}:{}:{}‘.format(name, psd, remind)
            remind += int(amount)
            new_data = ‘{}:{}:{}‘.format(name, psd, remind)
            update(old_data, new_data)
            print(‘已成功充值{}‘.format(amount))
            break
        return amount
#获取小说数据
def get_book():
    with open(‘story_class.txt‘,‘rt‘,encoding=‘utf-8‘)as f:
        book_dic=eval(f.read())
        return story_dic
#查看小说
def show(bookname):
    with open(‘‘,‘rt‘,encoding=‘utf-8‘)as f:
        data=f.read()
    return data

# 小说功能
@log
@auth
def reader():
    book_dic=get_book()
    if not book_dic:
        print(‘库存没有小说了‘)
        return
    while True:
        print(‘‘‘
            === 欢迎来到阅读小说功能主页 ===
                    0 玄幻武侠
                    1 都市爱情
                    2 高效养猪36技
            ============ end ============
            ‘‘‘)
        cmd=input(‘输入你想阅读的小说种类编号‘).strip()
        if cmd not in book_dic:
            print(‘请正确输入编号‘)
        second_dic =book_dic[cmd]
        for num,booklist in second_dic.item():
            name,price=booklist
            print(‘小说编号[{}],小说名《{}》,小说价格[{}]‘.format(num,name,price))
        while True:
            cmd = input(‘输入你想购买的小说编号‘)
            if cmd not in second_dic:
                print(‘请正确输入编号‘)
                continue
            if cmd in second_dic:
                name=second_dic[cmd][0]
                price=second_dic[cmd][1]
                cmd = input(‘当前选择的小说名为: 《{name}》,商品单价为: [{price}], 请输入Y/y购买:‘.format(name,price)).strip()
                if cmd == ‘Y‘ or cmd==‘y‘:
                    name,psd,remind = getinfo(login_user)
                    remind=int(remind)
                    if remind<int(price):
                        price(‘余额不足,请先充值‘)
                        break
                    old_data = ‘{}:{}:{}‘.format(name, psd, remind)
                    remind -= int(price)
                    new_data = ‘{}:{}:{}‘.format(name, psd, remind)
                    update(old_data, new_data)
                    print(‘购买成功,请欣赏内容‘)
                    fictiondata=show(name)
                    print(‘‘‘
                    -------开始阅读--------
                    {}
                    ‘‘‘.format(fictiondata))

#登出功能
def logout():
global login_user
login_user=None
#运行菜单
func_dic={
‘0‘:[‘注册‘,register],
‘1‘:[‘登录‘,login],
‘2‘:[‘充值‘,add_credit],
‘3‘:[‘小说‘,reader],
‘4‘:[‘登出‘,logout],
}
def run():
while True:
print(‘‘‘
        ~~~~~~~欢迎来到小说世界~~~~~~~
                0 账号注册
                1 账号登录
                2 充值功能
                3 阅读小说
                4 登出
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        ‘‘‘)
        cmd= input(‘请输入功能编号,按4退出‘).strip()
        if cmd ==‘4‘:
            logout()
            break
        if cmd not in func_dic:
            print(‘请正确输入功能编号‘)
            continue
        func_dic[cmd][1]()
run()

 
# 编写小说阅读程序实现下属功能# # 一:程序运行开始时显示#     0 账号注册#     1 充值功能#     2 阅读小说### # 二: 针对文件db.txt,内容格式为:"用户名:密码:金额",完成下述功能# 2.1、账号注册# 2.2、充值功能## # 三:文件story_class.txt存放类别与小说文件路径,如下,读出来后可用eval反解出字典# {"0":{"0":["倚天屠狗记.txt",3],"1":["沙雕英雄转.txt",10]},"1":{"0":["令人羞耻的爱.txt",6],"1":["二狗的妻子与大草原的故事.txt",5]},}## 3.1、用户登录成功后显示如下内容,根据用户选择,显示对应品类的小说编号、小说名字、以及小说的价格# """# 0 玄幻武侠# 1 都市爱情# 2 高效养猪36技# """## 3.2、用户输入具体的小说编号,提示是否付费,用户输入y确定后,扣费并显示小说内容,如果余额不足则提示余额不足## # 四:为功能2.2、3.1、3.2编写认证功能装饰器,要求必须登录后才能执行操作## # 五:为功能2.2、3.2编写记录日志的装饰器,日志格式为:"时间 用户名 操作(充值or消费) 金额"#### # 附加:# # 可以拓展作者模块,作者可以上传自己的作品##

import time

userstatus = {‘username‘: None}

def auth(func):
    ‘‘‘
    认证功能装饰器
    :return:
    ‘‘‘

    def wrapper(*args, **kwargs):
        if userstatus[‘username‘] is None:
            inp_name = input(‘输入用户名‘)
            inp_psd = input(‘输入密码‘)
            with open(‘db.txt‘, ‘rt‘, encoding=‘utf-8‘)as rf:
                userinfo = {}
                for line in rf:
                    name, psd, remind = line.strip().split(‘:‘)
                    userinfo[name] = [psd, int(remind)]
                if inp_name not in userinfo:
                    print(‘用户不存在‘)
                    return
                if inp_name in userinfo and userinfo[inp_name][0]==inp_psd:
                    print(‘登录成功,亲爱的{}用户‘.format(inp_name))
                    userstatus[‘username‘]=inp_name
                    res=func(*args, **kwargs)
                    return res
                else:
                    print(‘账号密码错误‘)
                    return
        else:
            res = func(*args, **kwargs)
            return res
    return wrapper

def record_log(func):
    ‘‘‘
    日志记录功能装饰器
    :return:
    ‘‘‘

    def wrapper(*args, **kwargs):
        res = func(*args, **kwargs)
        with open(‘record.log‘, ‘ab‘)as log_f:
            op_time = time.time()
            amount = func.amount
            log_f.write(‘{} {} {} {}\n‘.format(op_time, userstatus[‘username‘], func.__name__, amount).encode(‘utf-8‘))
        return res

    return wrapper

def register():
    ‘‘‘
    注册功能
    :return:
    ‘‘‘
    with open(‘db.txt‘, ‘rt‘, encoding=‘utf-8‘)as rf:
        userinfo = {}
        for line in rf:
            name, psd, remind = line.strip().split(‘:‘)
            userinfo[name] = [psd, int(remind)]
        inp_name = input(‘输入注册名‘)
        inp_psd = input(‘输入密码‘)
        if inp_name in userinfo:
            print(‘用户名已存在‘)
            return
        re_psd = input(‘再次输入密码‘)
        if inp_psd == re_psd:
            print(‘注册成功‘)
            with open(‘db.txt‘, ‘at‘, encoding=‘utf-8‘)as af:
                af.write(‘{}:{}:0\n‘.format(inp_name, inp_psd))
        else:
            print(‘两次密码不一致‘)
            return

@record_log
@auth
def add_credit():
    ‘‘‘
    充值功能
    :return:
    ‘‘‘
    print(‘欢迎使用充值功能,亲爱的{}‘.format(userstatus[‘username‘]))
    with open(‘db.txt‘, ‘rt‘, encoding=‘utf-8‘)as rf:
        userinfo = {}
        for line in rf:
            name, psd, remind = line.strip().split(‘:‘)
            userinfo[name] = [psd, int(remind)]
        while True:
            amount = input(‘请输入充值的金额‘).strip()
            conf = input(‘确定要向{}用户充值{}吗,确定输入Y/y,退出N/n‘.format(userstatus[‘username‘], amount))
            if conf == ‘Y‘ or conf == ‘y‘:
                print(‘充值成功,已为您充值{}元‘.format(amount))
                userinfo[userstatus[‘username‘]][1] += int(amount)
                break
            elif conf == ‘N‘ or conf == ‘n‘:
                break
    with open(‘db.txt‘, ‘wt‘, encoding=‘utf-8‘)as wf:
        for name in userinfo:
            wf.write(‘{}:{}:{}\n‘.format(userinfo[name], userinfo[name][0], userinfo[name][1]))

@record_log
@auth
def read():
    ‘‘‘
    阅读小说功能
    :return:
    ‘‘‘
    pass

def logout():
    ‘‘‘
    登出
    :return:
    ‘‘‘
    userstatus[‘username‘] = None
    return

def menu():
    fuc_dic = {
        ‘0‘: (‘注册功能‘, register),
        ‘1‘: (‘充值功能‘, add_credit),
        ‘2‘: (‘阅读小说‘, read),
        ‘3‘: (‘登出‘,logout)
    }
    tag= True
    while tag:
        cmd = input(‘‘‘
        0 账号注册
        1 充值功能
        2 阅读小说
        3 登出
        ‘‘‘)
        int(cmd)
        if not cmd.isdigit():
            print(‘请输入数字‘)
        if cmd.isdigit():
            fuc_dic[cmd][1]()
            if cmd == 3:
                tag=False

menu()

原文地址:https://www.cnblogs.com/lucky-cat233/p/12596426.html

时间: 2024-11-09 03:16:40

小说阅读器的相关文章

《9秒小说阅读器》

<9秒小说阅读器>采用免费开源且跨平台的移动应用开发引擎CrossApp开发,是一款完全开源.免费.跨平台的手机小说下载阅读器,基于最宽松的MIT开源协议,所以开发者可以完全免费.毫无顾虑的使用<9秒小说阅读器>在任何商业行为中,也可直接改名后上线运营,官方会提供每天8小时的免费在线页面问答式服务,每个问题的反馈速度大概在30分钟左右,回复率90%.(可快速导出android版本.ios版本) <9秒小说阅读器>已制作了广告类,开发者只需要申请一个自己的展示广告,更改代

五款PC端小说阅读器 readbook、非常酷阅读器、iSilo、AlReader、haalireader

        本文主要推荐的是功能强大界面简单电脑(windows系统)单机使用的小说阅读器~以阅读TXT之流的主流类小说文件,只想要会联网会更新可以发评论发微博的朋友可以节省点时间,按ctrl+w吧~觉得想要单机软件的朋友请继续往下看~          这篇博文居然还在有人点击和回复,有点出乎我的意料,当初写这篇文章的本意是因为发现想搜一个简单实用的单机阅读器实在是困难重重,搜索结果总是被各大广告阅读器干扰,千辛万苦终于找到之后觉得应该分享一下以飨同好:虽然时间过去了蛮久,但从回复的朋友来

读取本地HTML的小说阅读器应用源码项目

该源码是一个不错的读取本地HTML的小说阅读器,读取本地HTML的小说阅读器,并且源码也比较简单的,非常适合我们的新手朋友拿来学习,有兴趣的朋友研究下. 源码下载: http://code.662p.com/view/10134.html 详细说明:http://android.662p.com/thread-6191-1-1.html

基于Android小说阅读器滑动效果的一种实现

看过小说都知道小说阅读器翻页有好多种效果,比如仿真翻页,滑动翻页,等等.由于某种原因,突然想写一个简单点的滑动翻页效果.在这里写出来也没有什么意图,希望大家可以根据这个效果举一反三,写出其他的效果.图就不上了. 下面是代码:大家理解onTouch事件即可 package com.example.testscroll.view; import android.content.Context; import android.util.AttributeSet; import android.view

Java小项目之:小说阅读器

Java小项目之:小说阅读器 今天带来的java项目是一款阅读器,老少皆宜,适合练手. 代码展示: package com; import javax.swing.JOptionPane; public class Scroll { private int n; private int size; private Thread t; private static int def_speed = 1000; private static int up_speed = -500; private s

PDF小说阅读器软件哪个好之轻快PDF阅读器

无论是传统PC端电子书阅读还是手机移动端电子书阅读,都可以找到不少对应的软件.如何选择最适合阅读电子书的PDF阅读器呢,这也正是本期专题要讨论的地方,我们从数十款PDF阅读器当中选择了轻快系列PDF阅读器,并进行了详细的评测,帮助读者更好地了解为什么要选择这样一款阅读工具. 使用平台兼容性 轻快PDF阅读器提供了安卓.苹果和传统PC端软件,也就是说,无论你是手机用户还是PC用户都可以直接使用轻快PDF阅读器,非常省心.这三端在功能上差别并不大,所以我们本次就以PC端作为演示来点评下功能上的优势.

iOS - 小说阅读器分章节,支持正则分章节和按字数分章节

最近做了一个WIFI传书本地阅读功能,有所收获在这里记录下吧. 用户下载的书籍分为两种,一种是有章节格式的,比如 第一章,001章.等,这种可以用正则来直接分章节,还有绝大多数书籍是没有这种格式的,这种如果整本书来直接解析的话,对CPU要求比较大,可能会卡死闪退,所有手动分章节还是很有必要的,这种情况下我们采用按照两千字来分. 话不多说,开始吧. 1.WIFI传书把书传到APP沙盒里,这里我们采用的是 GCDWebServer ,很方便,这里就不做陈述了. 2.将沙盒里面的 .txt 文件转成

基于RxJava + Retrofit2 + Dagger2小说阅读器

项目基于RxJava + Retrofit2 + Dagger2,结合MVP模式开发,代码结构清晰.项目中的API均来自追书神器,纯属共享学习之用,不得用于商业!! 有任何疑问或建议可提issue或联系[email protected]. TODO [ ] txt阅读优化模拟翻书效果,提高分页速度以及分页准确性 [ ] 增加无翻页效果方式 [ ] epub阅读优化 截图 首页 阅读 书籍 社区   github:https://github.com/JustWayward/BookReader

安卓小项目【小说阅读器】

1,布局设置,LiearLayout 上中下三部分,其中小说主题内容部分为自定义view,比例是1:8:1 2,创建数据库表  两张表txt表和page表,两张表进行主外键关联 public class DBHelper extends SQLiteOpenHelper { public DBHelper(Context context) { super(context, "read.db", null, 1); } public DBHelper(Context context, S