53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
# 第 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()
|