REMINDER-APP-PYTHON
REMINDER-APP-PYTHON
class Reminder:
"""
Represents a single reminder with details like title, description, and time.
"""
def __init__(self, title, description, remind_at, repeat_interval=None):
self.title = title
self.description = description
self.remind_at = remind_at
self.repeat_interval = repeat_interval # in seconds, None if no repeat
self.completed = False
def to_dict(self):
return {
"title": self.title,
"description": self.description,
"remind_at": self.remind_at.strftime("%Y-%m-%d %H:%M:%S"),
"repeat_interval": self.repeat_interval,
"completed": self.completed
}
@staticmethod
def from_dict(data):
remind_at = datetime.strptime(data["remind_at"], "%Y-%m-%d %H:%M:%S")
return Reminder(
title=data["title"],
description=data["description"],
remind_at=remind_at,
repeat_interval=data["repeat_interval"],
)
def __str__(self):
repeat_info = f"Repeats every {self.repeat_interval} seconds" if
self.repeat_interval else "One-time reminder"
return (f"Title: {self.title}\n"
f"Description: {self.description}\n"
f"Remind At: {self.remind_at}\n"
f"Status: {'Completed' if self.completed else 'Pending'}\n"
f"{repeat_info}\n")
class ReminderManager:
"""
Manages multiple reminders, including scheduling, saving, and loading.
"""
def __init__(self):
self.reminders = []
self.running = True
def list_reminders(self):
if not self.reminders:
print("No reminders to display.")
else:
for idx, reminder in enumerate(self.reminders, start=1):
print(f"--- Reminder {idx} ---")
print(reminder)
def check_and_trigger_reminders(self):
"""
Continuously checks and triggers reminders when their time arrives.
"""
while self.running:
now = datetime.now()
for reminder in self.reminders:
if not reminder.completed and now >= reminder.remind_at:
print(f"\nReminder Triggered: {reminder.title}\nDescription:
{reminder.description}\nTime: {reminder.remind_at}\n")
reminder.completed = True
if reminder.repeat_interval:
reminder.remind_at +=
timedelta(seconds=reminder.repeat_interval)
reminder.completed = False
time.sleep(1)
def stop(self):
self.running = False
class ReminderApp:
"""
Provides a user interface to interact with the ReminderManager.
"""
def __init__(self):
self.manager = ReminderManager()
self.checker_thread =
threading.Thread(target=self.manager.check_and_trigger_reminders, daemon=True)
self.checker_thread.start()
def display_menu(self):
print("\n--- Reminder App Menu ---")
print("1. Add a New Reminder")
print("2. List All Reminders")
print("3. Delete a Reminder")
print("4. Save Reminders to File")
print("5. Load Reminders from File")
print("6. Exit")
def get_reminder_details(self):
title = input("Enter the title of the reminder: ").strip()
description = input("Enter the description: ").strip()
remind_at_str = input("Enter the reminder time (YYYY-MM-DD HH:MM:SS):
").strip()
repeat_choice = input("Do you want this reminder to repeat? (yes/no):
").strip().lower()
repeat_interval = None
if repeat_choice == "yes":
repeat_interval = int(input("Enter the repeat interval in seconds:
").strip())
def run(self):
print("Welcome to the Reminder App!")
while True:
self.display_menu()
choice = input("Enter your choice: ").strip()
if choice == "1":
print("\n--- Add a New Reminder ---")
try:
reminder = self.get_reminder_details()
self.manager.add_reminder(reminder)
except ValueError:
print("Invalid date format. Please try again.")
else:
print("Invalid choice. Please try again.")
if __name__ == "__main__":
app = ReminderApp()
app.run()