Moment 10: Slutprojekt
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:
- Programfiler (.py, ev. filer/databaser/API-dokumentation)
- Planeringsdokumentation:
- Användningsfall
- Flödesdiagram
- Klassdiagram
- Pseudokod
- README/reflektion
- 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.
Librarysom orkestrerar listor och sök)
Lagring:items.json,members.json(ellerlibrary.dbmed 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 irates.json)
Lagring:transactions.csvellertransactions.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 avCard,add_card,pick_next())- (ev.
Schedulersom 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 cacharpokemon_cache.json)
Lagring: cache i JSON + sparade team iteams.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, cacharweather_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
- Recept- & inköpslista (GUI) – spara recept i JSON, generera inköpslista; API-tillägg: hämta bilder/”TheMealDB”.
- Studieresultat/Gradebook (GUI) –
Student,Course,Grade; exportera CSV; beräkna medel, varningsnivåer. - Träningslogg (GUI) –
Workout,Exercise; logga reps/sets; CSV/JSON; ev. API för BMI-info eller aktivitetstabeller. - To-do + Pomodoro (GUI) –
Task,Timer; spara JSON; statistik per vecka. - Filmbibliotek (API) – sök filmdata (OMDb), spara favoritlista i JSON; visa detaljer i tkinter.
- Vokabulär-tränare (API/GUI) – översättning via API eller egen ordlista i JSON; quiz-läge.
- Enkel chattlogger (GUI) – lokalt: spara meddelanden i CSV/JSON; “sök i gamla meddelanden”.
- Inventarie/Skolförråd (GUI) –
Item,Location; utlån/retur, streckkods-id (manuell sträng). - Musikspellista (API) – hämta metadata (iTunes Search API), spara listor i JSON, spela upp via systemets standard (ingen streaming-API).
- Resekalkylator (API) – REST Countries + väder; räkna budget; spara favoritrutter i JSON.
Bedömningsmatris (betygsgrundande)
| Bedömningsaspekt | E-nivå | C-nivå | A-nivå |
|---|---|---|---|
| Objektorientering | Klassen används | Tydlig användning av flera klasser | Genomtänkt design med arv eller struktur |
| Filhantering / API | Enkel användning av fil eller API | Spara/hämta data i JSON/CSV/SQLite eller API-data hanteras korrekt | Flera datakällor, mer komplex hantering |
| Struktur och kodstandard | Enkel struktur, vissa kommentarer | Tydlig struktur, bra namn, PEP8 följs | Mycket god struktur, konsekvent dokumentation |
| Logik och funktion | Grundläggande funktioner fungerar | Programmet är stabilt och täcker fler scenarier | Komplett program med extra funktionalitet och testning |
| Modellering och planering | Något underlag finns | Alla delar (flöde, klass, användning, pseudokod) är tydliga | Hög kvalitet, konsekvent kopplade till kod |
| Presentation och reflektion | Kort beskrivning | Reflekterar över arbete och val | Utförlig reflektion + bra presentation |