- 实际应用场景与痛点
场景
很多人在学习或自我提升时,会购买或借阅大量书籍,但往往因为缺乏系统管理,导致:
- 不知道自己读到了哪里
- 无法预估完成时间
- 容易中断阅读计划
- 没有提醒机制,容易忘记坚持
痛点
-
进度不透明:没有直观的进度条或剩余页数统计。
-
时间不可控:无法根据每日阅读量预测完成时间。
-
缺乏提醒:容易因忙碌而中断阅读。
-
数据分散:阅读记录可能记在纸上或不同 App 中,难以统一分析。
-
核心逻辑讲解
-
书籍信息录入
- 书名、总页数、每日目标页数(可选)
-
每日阅读记录
- 输入当天阅读的页数,更新已读页数
-
剩余页数 & 预计完成时间
- 剩余页数 = 总页数 - 已读页数
- 预计天数 = 剩余页数 / 每日目标页数
-
阅读提醒
- 每天固定时间检查是否完成当日目标
-
数据持久化
- 使用 JSON 文件存储书籍列表和阅读记录
-
交互方式
- 命令行界面(CLI)实现增删改查
-
项目结构
book_reading_tracker/ ├── main.py # 主程序入口 ├── book_manager.py # 书籍管理核心逻辑 ├── reminder.py # 阅读提醒模块 ├── data/ # 数据存储目录 │ └── books.json # 书籍数据 ├── README.md # 项目说明 └── USAGE.md # 使用说明
- 核心代码
"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()
- README.md
📚 书籍阅读进度管理器
一个用 Python 编写的 CLI 工具,帮助你记录阅读进度、预测完成时间,并通过提醒养成阅读习惯。
功能
- 添加书籍(书名、总页数、每日目标)
- 记录每日阅读页数
- 自动计算剩余页数和预计完成时间
- 阅读提醒(定时检查)
- 数据持久化(JSON)
安装
bash
git clone "github.com/yourname/bo…" (github.com/yourname/bo…)
cd book_reading_tracker
pip install schedule
运行
bash
python main.py
- USAGE.md
使用说明
-
首次运行选择
1添加书籍。 -
每天阅读后选择
2记录页数。 -
选择
3查看进度。 -
选择
5设置每日提醒时间。 -
数据保存在
data/books.json,可手动备份。 -
核心知识点卡片
知识点 说明 JSON 数据持久化 使用 "json.dump" 和 "json.load" 实现简单数据存储 模块化设计 将功能拆分为 "book_manager" 和 "reminder" 模块 命令行交互 通过 "input" 和 "print" 实现 CLI 定时任务 使用 "schedule" 库实现每日提醒 多线程 用 "threading" 让提醒在后台运行 进度计算 剩余页数 / 每日目标 = 预计天数
- 总结
这个程序解决了阅读进度不透明、时间不可控、缺乏提醒三大痛点,通过简单的 CLI 和 JSON 存储,让用户轻松管理多本书的阅读计划。
它适合作为个人效率工具,也可以扩展为 Web 或移动端应用。
核心思想是数据驱动 + 自动化提醒,帮助用户养成持续阅读的习惯。
如果你需要,还可以把这个项目打包成可执行文件( ".exe")或者做成带图形界面的版本(Tkinter/PyQt)。
利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!