
روز ۴۸ آموزش پایتون: پروژه مدیریت کارهای روزانه با JSON و کلاسها
در بسیاری از پروژههای واقعی نیاز داریم اطلاعات کاربران به شکل سازمانیافته ذخیره شود و بتوانیم آنها را بعداً بازیابی، ویرایش یا حذف کنیم. یکی از بهترین روشها برای ذخیرهسازی دادههای سبک و قابل حمل، استفاده از فرمت JSON است. در این پروژه بزرگ، هدف ایجاد برنامهای است که کاربران بتوانند کارهای روزانه خود را مدیریت کنند، آنها را به صورت کلاسهای پایتون مدلسازی کنند و دادهها در فایل JSON ذخیره شود تا در اجرای بعدی برنامه بتوان آنها را بازیابی کرد. این تمرین باعث میشود با مفاهیم پیشرفتهتر پایتون شامل کلاسها، توابع، مدیریت فایل و JSON به شکل عملی آشنا شوید و برنامهای کاملاً کاربردی برای مدیریت کارهای روزمره داشته باشید.
طراحی کلاس و ساختار پروژه
برای شروع پروژه ابتدا نیاز است یک کلاس Task تعریف کنیم که ویژگیهای اصلی هر کار شامل عنوان، توضیح، تاریخ انجام و وضعیت انجام را در خود نگه دارد. با استفاده از ویژگیها و متدهای کلاس، میتوانیم کنترل کاملی روی دادههای هر کار داشته باشیم. کلاسها باعث میشوند برنامه ما سازمانیافتهتر و مقیاسپذیرتر باشد و امکان افزودن قابلیتهای جدید مانند اولویتبندی یا دستهبندی کارها را فراهم میکند. نمونه تعریف کلاس ساده:
import json
from datetime import datetime
class Task:
def __init__(self, title, description, due_date):
self.title = title
self.description = description
self.due_date = due_date
self.completed = False
def mark_done(self):
self.completed = True
def to_dict(self):
return {
"title": self.title,
"description": self.description,
"due_date": self.due_date,
"completed": self.completed
}در این نمونه کلاس، متد to_dict امکان تبدیل هر شیء Task به دیکشنری را فراهم میکند تا بتوانیم آن را در JSON ذخیره کنیم. این روش استانداردی است که در پروژههای واقعی برای مدیریت دادهها استفاده میشود.
ذخیره و بازیابی دادهها با JSON
بعد از تعریف کلاس، نیاز داریم لیست کارها را در فایل JSON ذخیره و در صورت اجرای مجدد برنامه آنها را بازیابی کنیم. ماژول json پایتون امکان تبدیل دیکشنری به JSON و برعکس را فراهم میکند. نمونه ذخیرهسازی دادهها:
tasks = []
task1 = Task("Buy groceries", "Milk, Eggs, Bread", "2026-02-07")
tasks.append(task1)
with open("tasks.json", "w") as file:
json.dump([task.to_dict() for task in tasks], file, indent=4)در این مثال ابتدا یک Task ایجاد کرده و به لیست اضافه میکنیم. سپس با استفاده از json.dump لیست کارها را به فایل JSON مینویسیم. استفاده از indent=4 باعث میشود فایل خروجی خواناتر باشد و برای کاربران یا توسعهدهندگان دیگر قابل فهمتر شود.
افزودن امکانات مدیریت کارها
برای اینکه برنامه کاربردیتر شود، میتوانیم امکاناتی مانند افزودن کار جدید، حذف کار، علامتگذاری انجام شده و نمایش کارهای روزانه را اضافه کنیم. با تعریف توابعی که عملیات روی لیست کارها انجام میدهند و سپس ذخیرهسازی مجدد JSON، یک چرخه کامل مدیریت کارها ایجاد میشود. نمونه کد برای افزودن و علامتگذاری:
def add_task(tasks, title, description, due_date):
new_task = Task(title, description, due_date)
tasks.append(new_task)
save_tasks(tasks)
def mark_task_done(tasks, index):
if 0 <= index < len(tasks):
tasks[index].mark_done()
save_tasks(tasks)
def save_tasks(tasks):
with open("tasks.json", "w") as file:
json.dump([task.to_dict() for task in tasks], file, indent=4)با این توابع، کاربر میتواند به راحتی کار جدید اضافه کند، آن را به اتمام برساند و تغییرات به صورت خودکار در فایل ذخیره شوند. این الگو مشابه برنامههای واقعی مدیریت پروژه یا وظایف است.
خواندن و نمایش دادهها
برای مشاهده کارها، میتوانیم فایل JSON را بخوانیم و دادهها را به شکل منظم نمایش دهیم. با ترکیب توابع و کلاسها، این عملیات ساده و قابل فهم خواهد بود. نمونه نمایش کارها:
def load_tasks():
try:
with open("tasks.json", "r") as file:
tasks_data = json.load(file)
return [Task(**data) for data in tasks_data]
except FileNotFoundError:
return []
def show_tasks(tasks):
for i, task in enumerate(tasks):
status = "Done" if task.completed else "Pending"
print(f"{i+1}. {task.title} - {status} (Due: {task.due_date})")در این کد ابتدا فایل JSON خوانده شده و با استفاده از unpacking دادهها، اشیاء Task بازسازی میشوند. سپس هر کار با وضعیت انجام و تاریخ نمایش داده میشود. این روش خواناتر و کاربردیتر از نمایش خام JSON است و تجربه کاربری بهتری فراهم میکند.
جمعبندی پروژه
این پروژه بزرگ نمونهای کامل از ترکیب کلاسها، مدیریت فایل و JSON است. شما با طراحی کلاسها، تعریف متدهای کاربردی، ذخیرهسازی و بازیابی دادهها و مدیریت ورودی کاربر، برنامهای حرفهای برای مدیریت کارهای روزانه ایجاد کردید. مهارتهای کسب شده در این تمرین میتوانند پایهای برای پروژههای پیچیدهتر مانند برنامههای مدیریت پروژه، لیست خرید، دفترچه یادداشت و سایر اپلیکیشنهای مبتنی بر داده باشند. تمرین و توسعه این برنامه باعث میشود درک عمیقی از نحوه سازماندهی دادهها، استفاده از JSON و طراحی کلاسها در پایتون پیدا کنید.
