ساخت برنامه مدیریت تقویم با پایتون: پروژه‌ای خلاقانه و کاربردی

ساخت برنامه مدیریت تقویم با پایتون: پروژه‌ای خلاقانه و کاربردی

در دنیای پرشتاب امروز، مدیریت زمان و برنامه‌ریزی دقیق از اهمیت ویژه‌ای برخوردار است. یک برنامه تقویم کارآمد می‌تواند به ما در سازماندهی وظایف، یادآوری قرار ملاقات‌ها و افزایش بهره‌وری کمک کند. در این مقاله، به بررسی گام به گام ساخت یک برنامه مدیریت تقویم ساده اما کاربردی با استفاده از زبان برنامه‌نویسی پایتون می‌پردازیم. این پروژه، یک تمرین عالی برای تقویت مهارت‌های برنامه‌نویسی و آشنایی با مفاهیم کلیدی مانند کار با تاریخ و زمان، ذخیره‌سازی داده‌ها و طراحی رابط کاربری است.

پیش‌نیازها

برای شروع این پروژه، به موارد زیر نیاز دارید:

  • نصب پایتون: اطمینان حاصل کنید که پایتون بر روی سیستم شما نصب شده است.
  • آشنایی با مبانی پایتون: درک مفاهیم اولیه مانند متغیرها، حلقه‌ها، شرط‌ها و توابع ضروری است.
  • آشنایی با ماژول‌های datetime و calendar: این ماژول‌ها برای کار با تاریخ و زمان در پایتون استفاده می‌شوند.

طراحی برنامه

قبل از شروع کدنویسی، بهتر است یک طرح کلی از برنامه خود داشته باشیم. برنامه ما باید قابلیت‌های زیر را داشته باشد:

  • نمایش تقویم ماهانه: نمایش روزهای هفته و تاریخ‌ها به صورت یک تقویم.
  • اضافه کردن رویداد: امکان اضافه کردن رویداد به یک تاریخ خاص با عنوان و توضیحات.
  • نمایش رویدادها: نمایش رویدادهای موجود برای یک تاریخ مشخص.
  • حذف رویداد: امکان حذف رویدادهای موجود.
  • ذخیره‌سازی داده‌ها: ذخیره‌سازی رویدادها در یک فایل برای حفظ اطلاعات بین اجراهای مختلف برنامه.

پیاده‌سازی برنامه

اکنون به پیاده‌سازی برنامه می‌پردازیم. ابتدا، ماژول‌های مورد نیاز را وارد می‌کنیم:

import datetime
import calendar
import json

سپس، یک تابع برای نمایش تقویم ماهانه تعریف می‌کنیم:

def show_calendar(year, month):
    cal = calendar.monthcalendar(year, month)
    print(calendar.month_name[month], year)
    print("Mo Tu We Th Fr Sa Su")
    for week in cal:
        for day in week:
            if day == 0:
                print("   ", end=" ")
            else:
                print(f"{day:2d}", end=" ")
        print()

این تابع با استفاده از ماژول calendar، تقویم ماهانه را نمایش می‌دهد. پارامترهای year و month به ترتیب سال و ماه مورد نظر را دریافت می‌کنند.

در ادامه، یک تابع برای اضافه کردن رویداد تعریف می‌کنیم:

def add_event(year, month, day, title, description):
    event = {
        "title": title,
        "description": description
    }
    date_str = f"{year}-{month:02d}-{day:02d}"
    if date_str not in events:
        events[date_str] = []
    events[date_str].append(event)
    save_events()

این تابع یک رویداد جدید را به تقویم اضافه می‌کند. پارامترهای year، month، day، title و description به ترتیب سال، ماه، روز، عنوان و توضیحات رویداد را دریافت می‌کنند. رویدادها در یک دیکشنری به نام events ذخیره می‌شوند که کلید آن تاریخ رویداد و مقدار آن لیستی از رویدادهای مربوط به آن تاریخ است.

تابع save_events برای ذخیره رویدادها در یک فایل JSON استفاده می‌شود:

def save_events():
    with open("events.json", "w") as f:
        json.dump(events, f)

این تابع رویدادها را در فایلی به نام events.json ذخیره می‌کند. از ماژول json برای تبدیل دیکشنری events به فرمت JSON استفاده می‌شود.

تابع load_events برای بارگیری رویدادها از فایل JSON استفاده می‌شود:

def load_events():
    try:
        with open("events.json", "r") as f:
            return json.load(f)
    except FileNotFoundError:
        return {}

این تابع رویدادها را از فایل events.json بارگیری می‌کند. اگر فایل وجود نداشته باشد، یک دیکشنری خالی برگردانده می‌شود.

تابع show_events برای نمایش رویدادهای یک تاریخ خاص استفاده می‌شود:

def show_events(year, month, day):
    date_str = f"{year}-{month:02d}-{day:02d}"
    if date_str in events:
        print(f"Events for {year}-{month:02d}-{day:02d}:")
        for i, event in enumerate(events[date_str]):
            print(f"  {i+1}. {event['title']} - {event['description']}")
    else:
        print(f"No events for {year}-{month:02d}-{day:02d}.")

این تابع رویدادهای مربوط به یک تاریخ مشخص را نمایش می‌دهد. پارامترهای year، month و day به ترتیب سال، ماه و روز مورد نظر را دریافت می‌کنند.

تابع delete_event برای حذف یک رویداد خاص استفاده می‌شود:

def delete_event(year, month, day, event_index):
    date_str = f"{year}-{month:02d}-{day:02d}"
    if date_str in events:
        if 0 <= event_index < len(events[date_str]):
            del events[date_str][event_index]
            save_events()
            print("Event deleted successfully.")
        else:
            print("Invalid event index.")
    else:
        print("No events for this date.")

این تابع یک رویداد خاص را از تقویم حذف می‌کند. پارامترهای year، month، day و event_index به ترتیب سال، ماه، روز و اندیس رویداد مورد نظر را دریافت می‌کنند.

حلقه اصلی برنامه

اکنون، حلقه اصلی برنامه را پیاده‌سازی می‌کنیم:

if __name__ == "__main__":
    events = load_events()

    while True:
        print("nCalendar Program")
        print("1. Show Calendar")
        print("2. Add Event")
        print("3. Show Events")
        print("4. Delete Event")
        print("5. Exit")

        choice = input("Enter your choice: ")

        if choice == "1":
            year = int(input("Enter year: "))
            month = int(input("Enter month: "))
            show_calendar(year, month)
        elif choice == "2":
            year = int(input("Enter year: "))
            month = int(input("Enter month: "))
            day = int(input("Enter day: "))
            title = input("Enter event title: ")
            description = input("Enter event description: ")
            add_event(year, month, day, title, description)
        elif choice == "3":
            year = int(input("Enter year: "))
            month = int(input("Enter month: "))
            day = int(input("Enter day: "))
            show_events(year, month, day)
        elif choice == "4":
            year = int(input("Enter year: "))
            month = int(input("Enter month: "))
            day = int(input("Enter day: "))
            show_events(year, month, day)
            if events.get(f"{year}-{month:02d}-{day:02d}"):
                event_index = int(input("Enter the index of the event to delete: ")) - 1
                delete_event(year, month, day, event_index)
        elif choice == "5":
            break
        else:
            print("Invalid choice. Please try again.")

این حلقه اصلی برنامه، منویی را به کاربر نمایش می‌دهد که از طریق آن می‌تواند یکی از قابلیت‌های برنامه را انتخاب کند. برنامه تا زمانی که کاربر گزینه خروج را انتخاب نکند، به کار خود ادامه می‌دهد.

بهبود برنامه

برنامه ساخته شده یک نسخه ساده از یک برنامه مدیریت تقویم است. برای بهبود آن، می‌توانید قابلیت‌های زیر را اضافه کنید:

  • رابط کاربری گرافیکی (GUI): استفاده از کتابخانه‌هایی مانند Tkinter یا PyQt برای ایجاد یک رابط کاربری گرافیکی جذاب و کاربرپسند.
  • یادآوری رویدادها: ارسال اعلان به کاربر قبل از شروع رویداد.
  • همگام‌سازی با سرویس‌های تقویم آنلاین: امکان همگام‌سازی رویدادها با سرویس‌هایی مانند Google Calendar یا Outlook Calendar.
  • پشتیبانی از رویدادهای تکراری: امکان تعریف رویدادهایی که به صورت دوره‌ای تکرار می‌شوند.
  • جستجو در رویدادها: امکان جستجو در رویدادها بر اساس عنوان یا توضیحات.

این پروژه، یک نقطه شروع عالی برای یادگیری و تمرین برنامه‌نویسی پایتون است. با اضافه کردن قابلیت‌های جدید و بهبود رابط کاربری، می‌توانید یک برنامه مدیریت تقویم قدرتمند و کاربردی ایجاد کنید.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *