2026. június 26., péntek

Feladatkezelő menü

Í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