Lazy loaded image
Task 8 - Remind Me Later
Words 1537Read Time 4 min
2025-4-27

📋 题目分析

✅ 简单介绍

这个任务扩展了之前的提醒程序,增加了新的功能:支持同一提醒的多次重复和跟踪每次提醒的激活与取消时间。程序的数据库也进行了拆分,分为三个部分:
  1. 提醒文本表(记录每个提醒的内容)
  1. 提醒激活表(记录每个提醒的激活时间)
  1. 提醒取消表(记录每个提醒的取消时间)
通过这种方式,用户可以重复设置同一提醒,同时可以追踪每次提醒的激活和取消情况。

💡 解题思路

核心任务拆解


🧩 1. load_database(reminders_file, active_file, dismissed_file)

功能:加载并存储提醒数据。
  • 需要读取三个文件:
    • reminders_file:存储提醒文本及其对应的 ID。
    • active_file:存储每次提醒的激活时间。
    • dismissed_file:存储每次提醒的取消时间。
  • 将这些数据分别加载到 reminders_databasereminders_active_databasereminders_dismissed_database 中。

🧩 2. get_active_reminders()

功能:返回当前所有激活的提醒。
  • 激活的标准:提醒在激活时间到达时,尚未被取消。
  • 如果某个提醒没有在 reminders_dismissed_database 中的条目,意味着它仍然处于激活状态。

🧩 3. get_past_reminders()

功能:返回所有已过的提醒。
  • 已过提醒的标准:提醒的激活时间和取消时间都已过。
  • 如果一个提醒没有在 reminders_dismissed_database 中的记录,其取消时间视为 1970-01-01 10:00:00(表示尚未取消)。

🧩 4. get_future_reminders()

功能:返回所有未来的提醒。
  • 未来提醒的标准:提醒的激活时间还未到达。
  • 如果没有取消记录,则视为还未被取消。

🧩 5. set_reminder(reminder_text, active_from)

功能:创建一个新的提醒。
  • reminder_text 是提醒内容,active_from 是激活时间。
  • 新提醒的 reminder_id 由当前数据库中最大 reminder_id + 1 来生成。
  • 创建提醒时,会将其激活时间记录在 reminders_active_database 中。

🧩 6. dismiss_reminder(reminder_id)

功能:取消指定的提醒。
  • 如果该提醒在 reminders_database 中存在,并且处于激活状态,则将其添加到 reminders_dismissed_database 中,记录其取消时间。

🧩 7. renew_reminder(reminder_id, active_from)

功能:将已取消或即将取消的提醒重新设置为激活。
  • 如果该提醒没有在 reminders_dismissed_database 中的记录,视为已激活状态。
  • 将其重新激活,并记录新的激活时间。

🧩 8. 交互模块(reminders.py

功能:与用户进行交互,允许用户查看、创建、取消、修改提醒。
  • 显示所有激活的提醒,用户可以输入命令来取消或重新激活提醒。
  • 支持命令 renew <ID> at <TIME> 来重新激活某个提醒。

📌 注意事项

  1. 时间的处理
      • 需要正确解析和比较 ISO 8601 时间格式,使用 datetime 模块来进行时间的处理。
      • 比较提醒的激活时间和取消时间,决定该提醒是激活、已过还是未来提醒。
  1. 提醒的状态判断
      • 激活状态:只要提醒没有取消或已经过期,它就处于激活状态。
      • 过去状态:当提醒的激活时间和取消时间都已经过去时,它就是过去的提醒。
      • 未来状态:如果提醒的激活时间还没有到达,它就是未来的提醒。
  1. 数据的分离
      • 数据库被拆分为三部分:提醒文本、激活时间和取消时间。需要根据每个提醒的 reminder_id 在不同的表中查找数据。
  1. ID的管理
      • 每次新增提醒或修改提醒状态时,需要确保生成唯一且递增的 reminder_identry_id
  1. 输入验证
      • 用户输入的命令应进行有效性检查,如确认提醒是否存在、是否输入了有效的时间等。

🧐 总结

本题在原有的提醒系统基础上增加了新的功能,支持相同提醒的重复创建和记录每次提醒的激活与取消时间。数据库被拆分为多个表格,每个表格记录不同的提醒信息(文本、激活时间、取消时间)。新功能包括重新激活取消的提醒以及历史记录管理。数据结构又全改了,但是上个的思路依然存在,我们问题不大,秒了。