📋 题目分析
✅ 简单介绍
这个任务扩展了之前的提醒程序,增加了新的功能:支持同一提醒的多次重复和跟踪每次提醒的激活与取消时间。程序的数据库也进行了拆分,分为三个部分:
- 提醒文本表(记录每个提醒的内容)
- 提醒激活表(记录每个提醒的激活时间)
- 提醒取消表(记录每个提醒的取消时间)
通过这种方式,用户可以重复设置同一提醒,同时可以追踪每次提醒的激活和取消情况。
💡 解题思路
核心任务拆解
🧩 1. load_database(reminders_file, active_file, dismissed_file)
功能:加载并存储提醒数据。
- 需要读取三个文件:
reminders_file
:存储提醒文本及其对应的 ID。active_file
:存储每次提醒的激活时间。dismissed_file
:存储每次提醒的取消时间。
- 将这些数据分别加载到
reminders_database
、reminders_active_database
、reminders_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>
来重新激活某个提醒。
📌 注意事项
- 时间的处理:
- 需要正确解析和比较 ISO 8601 时间格式,使用
datetime
模块来进行时间的处理。 - 比较提醒的激活时间和取消时间,决定该提醒是激活、已过还是未来提醒。
- 提醒的状态判断:
- 激活状态:只要提醒没有取消或已经过期,它就处于激活状态。
- 过去状态:当提醒的激活时间和取消时间都已经过去时,它就是过去的提醒。
- 未来状态:如果提醒的激活时间还没有到达,它就是未来的提醒。
- 数据的分离:
- 数据库被拆分为三部分:提醒文本、激活时间和取消时间。需要根据每个提醒的
reminder_id
在不同的表中查找数据。
- ID的管理:
- 每次新增提醒或修改提醒状态时,需要确保生成唯一且递增的
reminder_id
和entry_id
。
- 输入验证:
- 用户输入的命令应进行有效性检查,如确认提醒是否存在、是否输入了有效的时间等。
🧐 总结
本题在原有的提醒系统基础上增加了新的功能,支持相同提醒的重复创建和记录每次提醒的激活与取消时间。数据库被拆分为多个表格,每个表格记录不同的提醒信息(文本、激活时间、取消时间)。新功能包括重新激活取消的提醒以及历史记录管理。数据结构又全改了,但是上个的思路依然存在,我们问题不大,秒了。