# 第 2-9 课完整示例:多文件任务管理程序入口 # # 直接运行本文件会创建当前课程目录下的 task_data/tasks.json。 # 该文件是练习数据,已通过 .gitignore 排除,不会被提交到 Git。 from pathlib import Path from task_service import add_task, build_task_report, complete_task, generate_pending_tasks from task_store import load_tasks, save_tasks LESSON_DIR = Path(__file__).parent DATA_FILE = LESSON_DIR / "task_data" / "tasks.json" def print_task(task: dict[str, object]) -> None: """按统一格式输出一条任务。""" status_text = "已完成" if task["completed"] else "未完成" print(f"[{task['id']}] {task['title']}|优先级:{task['priority']}|状态:{status_text}") def main() -> None: """按照读取、修改、保存和汇总的顺序运行完整示例。""" tasks = load_tasks(DATA_FILE) print(f"读取到 {len(tasks)} 条已有任务。") try: first_task = add_task(tasks, "整理本课学习笔记", "高") second_task = add_task(tasks, "运行任务管理程序", "中") except ValueError as error: # 本示例会传入合法标题;这里演示业务错误的安全处理方式。 print(f"添加任务失败:{error}") return complete_task(tasks, int(first_task["id"])) save_tasks(DATA_FILE, tasks) print("\n本次新增的任务:") print_task(first_task) print_task(second_task) print("\n未完成任务:") for task in generate_pending_tasks(tasks): print_task(task) report = build_task_report(tasks) print("\n任务汇总:") print(f"全部:{report['total']} 条,已完成:{report['completed']} 条,未完成:{report['pending']} 条。") if __name__ == "__main__": main()