Íme egy komplex, objektumorientált Python-példa: egy CLI (parancssori) alapú Feladatkezelő (To-Do) alkalmazás, amely bemutatja az osztályok, a fájlkezelés (JSON), a kivételkezelés és a moduláris felépítés gyakorlati használatát.
----------------
import json
import os
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_completed(self):
self.completed = True
def __str__(self):
status = "[x]" if self.completed else "[ ]"
return f"{status} {self.title} - {self.description} (Határidő: {self.due_date})"
class TaskManager:
def __init__(self, filename="tasks.json"):
self.filename = filename
self.tasks = []
self.load_tasks()
def add_task(self, title, description, due_date):
task = Task(title, description, due_date)
self.tasks.append(task)
print(f"✅ Feladat hozzáadva: '{title}'")
def complete_task(self, index):
try:
self.tasks[index].mark_completed()
print(f"🎉 Feladat teljesítve: {self.tasks[index].title}")
except IndexError:
print("❌ Érvénytelen feladat azonosító!")
def show_tasks(self):
if not self.tasks:
print("📭 Nincs jelenleg feladat.")
return
for idx, task in enumerate(self.tasks):
print(f"{idx + 1}. {task}")
def save_tasks(self):
with open(self.filename, 'w', encoding='utf-8') as file:
data = [vars(task) for task in self.tasks]
json.dump(data, file, ensure_ascii=False, indent=4)
print("💾 Feladatok mentve.")
def load_tasks(self):
if not os.path.exists(self.filename):
return
try:
with open(self.filename, 'r', encoding='utf-8') as file:
data = json.load(file)
for item in data:
task = Task(item['title'], item['description'], item['due_date'])
task.completed = item['completed']
self.tasks.append(task)
except json.JSONDecodeError:
print("⚠️ A mentési fájl sérült, új lista létrehozva.")
def main():
manager = TaskManager()
while True:
print("\n--- MENÜ ---")
print("1. Feladatok listázása")
print("2. Új feladat hozzáadása")
print("3. Feladat teljesítése")
print("4. Mentés és Kilépés")
choice = input("Válassz egy opciót (1-4): ")
if choice == '1':
manager.show_tasks()
elif choice == '2':
title = input("Cím: ")
desc = input("Leírás: ")
due = input("Határidő (pl. 2026-07-15): ")
manager.add_task(title, desc, due)
elif choice == '3':
manager.show_tasks()
try:
idx = int(input("A teljesíteni kívánt feladat száma: ")) - 1
manager.complete_task(idx)
except ValueError:
print("❌ Kérlek számot adj meg!")
elif choice == '4':
manager.save_tasks()
print("👋 Viszlát!")
break
else:
print("❌ Érvénytelen választás, próbáld újra.")
if __name__ == "__main__":
main()
----------------
--- MENÜ ---
1. Feladatok listázása
2. Új feladat hozzáadása
3. Feladat teljesítése
4. Mentés és Kilépés
Válassz egy opciót (1-4): 1
📭 Nincs jelenleg feladat.
--- MENÜ ---
1. Feladatok listázása
2. Új feladat hozzáadása
3. Feladat teljesítése
4. Mentés és Kilépés
Válassz egy opciót (1-4): 3
📭 Nincs jelenleg feladat.
A teljesíteni kívánt feladat száma: 1
❌ Érvénytelen feladat azonosító!
--- MENÜ ---
1. Feladatok listázása
2. Új feladat hozzáadása
3. Feladat teljesítése
4. Mentés és Kilépés
Válassz egy opciót (1-4): 2
Nincsenek megjegyzések:
Megjegyzés küldése