#!/usr/bin/env python3 """ Personal Calendar - CLI приложение для управления событиями """ import sys from datetime import datetime from models import Event from storage import load_events, add_event, remove_event, get_events_by_date try: from prettytable import PrettyTable except ImportError: print("Ошибка: установите prettytable: pip install prettytable") sys.exit(1) def show_menu(): """Показывает главное меню""" print("\n" + "=" * 40) print(" 📅 PERSONAL CALENDAR") print("=" * 40) print("1. Добавить событие") print("2. Показать все события") print("3. Показать события на дату") print("4. Удалить событие") print("5. Выйти") print("=" * 40) def add_event_interactive(): """Интерактивное добавление события""" print("\n--- Добавление события ---") title = input("Название: ").strip() if not title: print("Ошибка: название не может быть пустым") return date = input("Дата (ГГГГ-ММ-ДД): ").strip() try: datetime.strptime(date, "%Y-%m-%d") except ValueError: print("Ошибка: неверный формат даты") return time = input("Время (ЧЧ:ММ) - необязательно: ").strip() description = input("Описание: ").strip() event = Event(title, date, time, description) add_event(event) print(f"✅ Событие добавлено: {event}") def show_all_events(): """Показывает все события в виде таблицы""" events = load_events() if not events: print("\n📭 Нет сохранённых событий") return table = PrettyTable() table.field_names = ["№", "Дата", "Время", "Название", "Описание"] table.align = "l" for i, event in enumerate(events, 1): table.add_row([ i, event.date, event.time if event.time else "-", event.title[:30], event.description[:40] if event.description else "-" ]) print("\n" + str(table)) def show_events_by_date(): """Показывает события на конкретную дату""" date = input("\nВведите дату (ГГГГ-ММ-ДД): ").strip() try: datetime.strptime(date, "%Y-%m-%d") except ValueError: print("Ошибка: неверный формат даты") return events = get_events_by_date(date) if not events: print(f"\n📭 Нет событий на {date}") return print(f"\n📅 События на {date}:") for i, event in enumerate(events, 1): print(f" {i}. {event}") def remove_event_interactive(): """Интерактивное удаление события""" show_all_events() events = load_events() if not events: return try: index = int(input("\nВведите номер события для удаления: ")) - 1 if remove_event(index): print("✅ Событие удалено") else: print("❌ Неверный номер") except ValueError: print("Ошибка: введите число") def main(): """Основная функция""" print("Добро пожаловать в Personal Calendar!") while True: show_menu() choice = input("\nВыберите действие (1-5): ").strip() if choice == "1": add_event_interactive() elif choice == "2": show_all_events() elif choice == "3": show_events_by_date() elif choice == "4": remove_event_interactive() elif choice == "5": print("\n👋 До свидания!") break else: print("❌ Неверный выбор. Попробуйте снова.") if __name__ == "__main__": main()