开发书籍阅读进度管理程序,录入书籍名称,页数,记录每日阅读页数,自动计算剩余阅读时间,支持阅读提醒,帮用户养成阅读习惯,高效读完书籍。
2026/6/3 14:28:57 网站建设 项目流程

1. 实际应用场景与痛点

场景

很多人在学习或自我提升时,会购买或借阅大量书籍,但往往因为缺乏系统管理,导致:

- 不知道自己读到了哪里

- 无法预估完成时间

- 容易中断阅读计划

- 没有提醒机制,容易忘记坚持

痛点

1. 进度不透明:没有直观的进度条或剩余页数统计。

2. 时间不可控:无法根据每日阅读量预测完成时间。

3. 缺乏提醒:容易因忙碌而中断阅读。

4. 数据分散:阅读记录可能记在纸上或不同 App 中,难以统一分析。

2. 核心逻辑讲解

1. 书籍信息录入

- 书名、总页数、每日目标页数(可选)

2. 每日阅读记录

- 输入当天阅读的页数,更新已读页数

3. 剩余页数 & 预计完成时间

- 剩余页数 = 总页数 - 已读页数

- 预计天数 = 剩余页数 / 每日目标页数

4. 阅读提醒

- 每天固定时间检查是否完成当日目标

5. 数据持久化

- 使用 JSON 文件存储书籍列表和阅读记录

6. 交互方式

- 命令行界面(CLI)实现增删改查

3. 项目结构

book_reading_tracker/

├── main.py # 主程序入口

├── book_manager.py # 书籍管理核心逻辑

├── reminder.py # 阅读提醒模块

├── data/ # 数据存储目录

│ └── books.json # 书籍数据

├── README.md # 项目说明

└── USAGE.md # 使用说明

4. 核心代码

"book_manager.py"

import json

import os

from datetime import datetime

DATA_FILE = "data/books.json"

class BookManager:

def __init__(self):

os.makedirs("data", exist_ok=True)

self.books = self.load_books()

def load_books(self):

if os.path.exists(DATA_FILE):

with open(DATA_FILE, "r", encoding="utf-8") as f:

return json.load(f)

return []

def save_books(self):

with open(DATA_FILE, "w", encoding="utf-8") as f:

json.dump(self.books, f, ensure_ascii=False, indent=4)

def add_book(self, title, total_pages, daily_goal=10):

book = {

"title": title,

"total_pages": total_pages,

"read_pages": 0,

"daily_goal": daily_goal,

"history": [] # {date: YYYY-MM-DD, pages: X}

}

self.books.append(book)

self.save_books()

def record_reading(self, index, pages):

if 0 <= index < len(self.books):

book = self.books[index]

book["read_pages"] += pages

today = datetime.now().strftime("%Y-%m-%d")

book["history"].append({"date": today, "pages": pages})

self.save_books()

return True

return False

def get_progress(self, index):

if 0 <= index < len(self.books):

book = self.books[index]

remaining = book["total_pages"] - book["read_pages"]

days_left = remaining / book["daily_goal"] if book["daily_goal"] > 0 else float('inf')

return {

"title": book["title"],

"read": book["read_pages"],

"total": book["total_pages"],

"remaining": remaining,

"days_left": round(days_left, 1)

}

return None

def list_books(self):

return [b["title"] for b in self.books]

"reminder.py"

import schedule

import time

from book_manager import BookManager

def check_reminder():

bm = BookManager()

for i, book in enumerate(bm.books):

progress = bm.get_progress(i)

if progress and progress["remaining"] > 0:

print(f"📖 提醒: 《{progress['title']}》还剩 {progress['remaining']} 页,预计 {progress['days_left']} 天完成。")

def start_reminder(hour=20, minute=0):

schedule.every().day.at(f"{hour:02d}:{minute:02d}").do(check_reminder)

print("⏰ 阅读提醒已启动...")

while True:

schedule.run_pending()

time.sleep(60)

"main.py"

from book_manager import BookManager

from reminder import start_reminder

import threading

def menu():

bm = BookManager()

while True:

print("\n=== 书籍阅读进度管理器 ===")

print("1. 添加书籍")

print("2. 记录今日阅读")

print("3. 查看进度")

print("4. 列出所有书籍")

print("5. 启动阅读提醒")

print("0. 退出")

choice = input("请选择操作: ").strip()

if choice == "1":

title = input("书名: ")

total = int(input("总页数: "))

goal = int(input("每日目标页数 (默认10): ") or "10")

bm.add_book(title, total, goal)

print("✅ 添加成功")

elif choice == "2":

titles = bm.list_books()

for idx, t in enumerate(titles):

print(f"{idx}. {t}")

idx = int(input("选择书籍编号: "))

pages = int(input("今日阅读页数: "))

if bm.record_reading(idx, pages):

print("✅ 记录成功")

else:

print("❌ 编号错误")

elif choice == "3":

titles = bm.list_books()

for idx, t in enumerate(titles):

print(f"{idx}. {t}")

idx = int(input("选择书籍编号: "))

prog = bm.get_progress(idx)

if prog:

print(f"\n《{prog['title']}》")

print(f"已读: {prog['read']}/{prog['total']}")

print(f"剩余: {prog['remaining']} 页")

print(f"预计还需: {prog['days_left']} 天")

else:

print("❌ 编号错误")

elif choice == "4":

titles = bm.list_books()

for t in titles:

print(f"- {t}")

elif choice == "5":

hour = int(input("提醒小时 (0-23, 默认20): ") or "20")

minute = int(input("提醒分钟 (0-59, 默认0): ") or "0")

t = threading.Thread(target=start_reminder, args=(hour, minute), daemon=True)

t.start()

print("⏰ 提醒线程已启动,主程序可继续操作。")

elif choice == "0":

break

else:

print("无效选择")

if __name__ == "__main__":

menu()

5. README.md

# 📚 书籍阅读进度管理器

一个用 Python 编写的 CLI 工具,帮助你记录阅读进度、预测完成时间,并通过提醒养成阅读习惯。

## 功能

- 添加书籍(书名、总页数、每日目标)

- 记录每日阅读页数

- 自动计算剩余页数和预计完成时间

- 阅读提醒(定时检查)

- 数据持久化(JSON)

## 安装

bash

git clone "https://github.com/yourname/book_reading_tracker.git" (https://github.com/yourname/book_reading_tracker.git)

cd book_reading_tracker

pip install schedule

## 运行

bash

python main.py

6. USAGE.md

# 使用说明

1. 首次运行选择 `1` 添加书籍。

2. 每天阅读后选择 `2` 记录页数。

3. 选择 `3` 查看进度。

4. 选择 `5` 设置每日提醒时间。

5. 数据保存在 `data/books.json`,可手动备份。

7. 核心知识点卡片

知识点 说明

JSON 数据持久化 使用

"json.dump" 和

"json.load" 实现简单数据存储

模块化设计 将功能拆分为

"book_manager" 和

"reminder" 模块

命令行交互 通过

"input" 和

"print" 实现 CLI

定时任务 使用

"schedule" 库实现每日提醒

多线程 用

"threading" 让提醒在后台运行

进度计算 剩余页数 / 每日目标 = 预计天数

8. 总结

这个程序解决了阅读进度不透明、时间不可控、缺乏提醒三大痛点,通过简单的 CLI 和 JSON 存储,让用户轻松管理多本书的阅读计划。

它适合作为个人效率工具,也可以扩展为 Web 或移动端应用。

核心思想是数据驱动 + 自动化提醒,帮助用户养成持续阅读的习惯。

如果你需要,还可以把这个项目打包成可执行文件(

".exe")或者做成带图形界面的版本(Tkinter/PyQt)。

利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询