开发书籍阅读进度管理程序,录入书籍名称,页数,记录每日阅读页数,自动计算剩余阅读时间,支持阅读提醒,帮用户养成阅读习惯,高效读完书籍。

5 阅读4分钟
  1. 实际应用场景与痛点

场景

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

  • 不知道自己读到了哪里
  • 无法预估完成时间
  • 容易中断阅读计划
  • 没有提醒机制,容易忘记坚持

痛点

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

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

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

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

  5. 核心逻辑讲解

  6. 书籍信息录入

    • 书名、总页数、每日目标页数(可选)
  7. 每日阅读记录

    • 输入当天阅读的页数,更新已读页数
  8. 剩余页数 & 预计完成时间

    • 剩余页数 = 总页数 - 已读页数
    • 预计天数 = 剩余页数 / 每日目标页数
  9. 阅读提醒

    • 每天固定时间检查是否完成当日目标
  10. 数据持久化

    • 使用 JSON 文件存储书籍列表和阅读记录
  11. 交互方式

    • 命令行界面(CLI)实现增删改查
  12. 项目结构

book_reading_tracker/ ├── main.py # 主程序入口 ├── book_manager.py # 书籍管理核心逻辑 ├── reminder.py # 阅读提醒模块 ├── data/ # 数据存储目录 │ └── books.json # 书籍数据 ├── README.md # 项目说明 └── USAGE.md # 使用说明

  1. 核心代码

"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()

  1. 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

  1. USAGE.md

使用说明

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

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

  3. 选择 3 查看进度。

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

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

  6. 核心知识点卡片

知识点 说明 JSON 数据持久化 使用 "json.dump" 和 "json.load" 实现简单数据存储 模块化设计 将功能拆分为 "book_manager" 和 "reminder" 模块 命令行交互 通过 "input" 和 "print" 实现 CLI 定时任务 使用 "schedule" 库实现每日提醒 多线程 用 "threading" 让提醒在后台运行 进度计算 剩余页数 / 每日目标 = 预计天数

  1. 总结

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

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

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

如果你需要,还可以把这个项目打包成可执行文件( ".exe")或者做成带图形界面的版本(Tkinter/PyQt)。

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