Uppgiftsbeskrivning:

Du ska planera och genomföra ett eget program som visar att du behärskar objektorienterad programmering, filhantering, och minst ett av följande:

  • GUI (tkinter)
  • API (anropa och hantera data från ett externt API)

Utöver att skapa programmet ska du också använda modellering och designverktyg för att planera din lösning.


Programmet ska innehålla:

  • Minst två egna klasser med attribut och metoder
  • Tillämpning av filhantering (JSON, CSV eller databas)
  • Tillämpning av programlogik, felhantering och strukturering
  • Tillämpning av god kodstandard (PEP8, namn, indrag, kommentarer)
  • Minst en av följande: GUI med tkinter eller användning av ett API
  • Dokumentation i form av kommentarer och docstrings

Modellering & planering – innan programmering

Du ska planera ditt program med följande verktyg:

  • Användningsfall (beskriv användarens interaktion med systemet)
  • Flödesdiagram (visa hur programmet fungerar steg för steg)
  • Klassdiagram (UML) (visa hur dina klasser är kopplade)
  • Pseudokod för viktiga funktioner (t.ex. inloggning, sökning, beräkning)

Du lämnar in:

  1. Programfiler (.py, ev. filer/databaser/API-dokumentation)
  2. Planeringsdokumentation:
    • Användningsfall
    • Flödesdiagram
    • Klassdiagram
    • Pseudokod
  3. README/reflektion
  4. Presentation (skärminspelning eller muntligt)

5 färdiga projektspår (med skiss)

1) Bibliotek/Spelotek – låna/returnera

Idé: Hantera böcker eller spel: lägga till, låna ut, returnera, söka.
Täcker: OOP ✅ Fil (JSON/CSV/SQLite) ✅ GUI (tkinter) ✅
Klasser (minst två):

  • Item (title, author_or_studio, year, is_available) + metoder: borrow(), give_back()
  • Member (name, member_id, borrowed_items) + borrow_item(item), return_item(item)
  • (ev. Library som orkestrerar listor och sök)
    Lagring: items.json, members.json (eller library.db med SQLite).
    GUI: Tkinter-listor för sök/filtrering, knappar “Låna”, “Lämna tillbaka”.
    Use case (exempel): “Som medlem vill jag söka efter titel och låna om den är ledig.”
    Flöde (kort): Start → ladda JSON → visa lista → välj item → borrow() → spara JSON → uppdatera vy.
    Stretch goals: förseningsavgifter, exportera CSV-rapport, inloggning per elev.

2) Budget/Utgiftsapp + valutakurs-API

Idé: Spåra utgifter per kategori och visa budgetstatus.
Täcker: OOP ✅ Fil ✅ API ✅ (valutakurser för att normalisera SEK/€/$)
Klasser:

  • Transaction (amount, currency, category, date, note)
  • Budget (category_limits dict, methods: add(tx), total_by_category(), remaining(category))
  • ExchangeService (hämtar rates från API, cachar i rates.json)
    Lagring: transactions.csv eller transactions.json + rates.json.
    GUI: filtrera på kategori/datum, diagram-light (t.ex. textbaserat i första version).
    Use case: “Som användare vill jag lägga till en transaktion och se om jag överskrider min matbudget.”
    Stretch goals: grafer (tkinter canvas), månadsvy, kvitto-bild (endast filväg, inga bild-API).

3) Flashcards med enkel “spaced repetition”

Idé: Plugga ord/begrepp: kort med fråga/svar, schema som väljer vilket kort du ska se.
Täcker: OOP ✅ Fil ✅ GUI ✅
Klasser:

  • Card (front, back, score/last_reviewed)
  • Deck (lista av Card, add_card, pick_next())
  • (ev. Scheduler som styr repetition)
    Lagring: deck.json (lista med kort och metadata).
    GUI: Visa “front”, knapp “Reveal”, knappar “Easy/Hard” → uppdatera score, spara.
    Use case: “Som elev vill jag träna 10 min och få de svåra korten oftare.”
    Stretch goals: import/export CSV, flera deck, statistik.

4) Pokédex Team Builder (API: PokéAPI)

Idé: Bygga lag, se stats/typer, förenklad “super effective”-logik.
Täcker: OOP ✅ Fil ✅ API ✅
Klasser:

  • Pokemon (name, types, hp, attack, defense, …) + effective_against(other_type)
  • Team (members list, add(pokemon), total_power())
  • PokeApiClient (hämtar och cachar pokemon_cache.json)
    Lagring: cache i JSON + sparade team i teams.json.
    GUI: Sök ruta → lägg till i team → visa summary.
    Use case: “Som användare vill jag bygga ett 6-manna-team och se styrkor/svagheter.”
    Stretch goals: enkel “battle-simulator”, exportera lag till fil.

5) Weather + Outfit Advisor (API: väder)

Idé: Hämta väder för vald stad och föreslå klädsel utifrån temperatur/regn.
Täcker: OOP ✅ Fil ✅ API ✅
Klasser:

  • WeatherService (hämtar väder, cachar weather_cache.json)
  • OutfitRule (conditions → suggestion), WardrobeItem (name, min_temp, max_temp, rain_ok)
    Lagring: wardrobe.json (egna plagg/regler).
    GUI: Stad → “Hämta” → visar väder + textrekommendation.
    Use case: “Som användare vill jag snabbt se vad jag bör ha på mig idag.”
    Stretch goals: veckovy, spara favoritstäder, egen regel-editor.

10 snabba idéer

  1. Recept- & inköpslista (GUI) – spara recept i JSON, generera inköpslista; API-tillägg: hämta bilder/”TheMealDB”.
  2. Studieresultat/Gradebook (GUI) – Student, Course, Grade; exportera CSV; beräkna medel, varningsnivåer.
  3. Träningslogg (GUI) – Workout, Exercise; logga reps/sets; CSV/JSON; ev. API för BMI-info eller aktivitetstabeller.
  4. To-do + Pomodoro (GUI) – Task, Timer; spara JSON; statistik per vecka.
  5. Filmbibliotek (API) – sök filmdata (OMDb), spara favoritlista i JSON; visa detaljer i tkinter.
  6. Vokabulär-tränare (API/GUI) – översättning via API eller egen ordlista i JSON; quiz-läge.
  7. Enkel chattlogger (GUI) – lokalt: spara meddelanden i CSV/JSON; “sök i gamla meddelanden”.
  8. Inventarie/Skolförråd (GUI) – Item, Location; utlån/retur, streckkods-id (manuell sträng).
  9. Musikspellista (API) – hämta metadata (iTunes Search API), spara listor i JSON, spela upp via systemets standard (ingen streaming-API).
  10. Resekalkylator (API) – REST Countries + väder; räkna budget; spara favoritrutter i JSON.

Bedömningsmatris (betygsgrundande)

BedömningsaspektE-nivåC-nivåA-nivå
ObjektorienteringKlassen användsTydlig användning av flera klasserGenomtänkt design med arv eller struktur
Filhantering / APIEnkel användning av fil eller APISpara/hämta data i JSON/CSV/SQLite eller API-data hanteras korrektFlera datakällor, mer komplex hantering
Struktur och kodstandardEnkel struktur, vissa kommentarerTydlig struktur, bra namn, PEP8 följsMycket god struktur, konsekvent dokumentation
Logik och funktionGrundläggande funktioner fungerarProgrammet är stabilt och täcker fler scenarierKomplett program med extra funktionalitet och testning
Modellering och planeringNågot underlag finnsAlla delar (flöde, klass, användning, pseudokod) är tydligaHög kvalitet, konsekvent kopplade till kod
Presentation och reflektionKort beskrivningReflekterar över arbete och valUtförlig reflektion + bra presentation