Inlämningsuppgift
Inlämningsuppgift 4 – Skapa ett digitalt bibliotekssystem
Bygg ett modulärt Pythonprogram som sparar, söker och tar bort böcker i en SQLite-databas.
Uppgift
Du ska skapa ett bibliotekssystem där användaren kan:
- Lägga till en ny bok med titel och författare.
- Söka efter böcker via titel eller författare.
- Visa alla böcker.
- Ta bort en bok genom att ange bokens ID.
- Behålla informationen när programmet avslutas och startas igen.
Syfte
Uppgiften ska visa att du kan kombinera:
- SQLite och SQL-frågor
- undantagshantering med
try/except - moduler och funktioner
- validering, kodstandard och tydlig programstruktur.
Tekniska krav
- Skapa en databasfil, till exempel
bibliotek.db. - Skapa tabellen
bockermed kolumnernaid,titelochforfattare. - Använd
sqlite3och parameteriserade SQL-frågor för all inmatad data. - Förhindra att samma kombination av titel och författare sparas flera gånger.
- Dela upp programmet i minst två moduler, exempelvis
databas.pyochmain.py. - Implementera en meny med fem val i
main.py. - Fånga databasfel med
sqlite3.Error. - Se till att varje databasanslutning stängs, även om ett fel uppstår.
- Skriv läsbar och kommenterad kod som följer kodstandard.
Repetera innan du börjar
- Kap 3.7 - egna moduler och import.
- Kap 4.3 - kodstandard och struktur.
- Kap 4.5 - använda SQLite-databaser.
Viktiga principer
Skicka aldrig användarens text direkt in i en SQL-sträng. Använd platshållaren ? och
skicka värdena separat:
cursor.execute(
"SELECT * FROM bocker WHERE titel LIKE ? OR forfattare LIKE ?",
(f"%{sokord}%", f"%{sokord}%")
)
Fånga specifika databasfel och stäng anslutningen med finally eller en
with-sats:
conn = None
try:
conn = sqlite3.connect(DB_FIL)
# Kör SQL-frågan här.
except sqlite3.Error as error:
print("Databasfel:", error)
finally:
if conn:
conn.close()
Validering och fel som ska hanteras
- Tom titel eller författare ska inte sparas.
- En identisk kombination av titel och författare ska inte sparas två gånger.
- Tom sökning ska ge ett tydligt meddelande i stället för att visa alla böcker.
- Ett okänt eller ogiltigt ID vid borttagning ska ge ett tydligt meddelande.
- En tom databas ska hanteras utan att programmet kraschar.
- Databasfel ska fångas så att användaren får ett begripligt felmeddelande.
Exempel på meny
1. Lägg till bok
2. Sök bok
3. Visa alla böcker
4. Ta bort bok
5. Avsluta
Checklista inför inlämning
- Programmet kan köras utan fel.
- Koden är uppdelad i minst två moduler.
- Databasen och tabellen skapas automatiskt om de saknas.
- SQL används för att spara, söka, läsa och ta bort data.
- Databasfel och felaktig inmatning hanteras.
- Samma bok kan inte sparas flera gånger.
- En bok kan tas bort via sitt ID.
- Böckerna finns kvar efter att programmet har startats om.
Testfall
| Test | Indata | Förväntat resultat |
|---|---|---|
| Lägg till bok | Project Hail Mary, Andy Weir | Boken sparas i databasen och får ett ID. |
| Tom titel | Titel: "", Författare: Andy Weir | Ett felmeddelande visas och boken sparas inte. |
| Dubblett | Samma titel och författare läggs till två gånger | Den andra posten sparas inte och ett tydligt meddelande visas. |
| Sök bok | Sökord: Project | Matchande bok visas. |
| Tom sökning | Sökord: "" | Programmet ber användaren skriva ett sökord. |
| Ta bort bok | ID för en bok som finns | Rätt bok tas bort från databasen. |
| Ogiltigt ID | Ett okänt ID eller text i stället för ett tal | Ett tydligt meddelande visas och programmet fortsätter. |
| Beständig lagring | Lägg till en bok och starta om programmet | Boken finns fortfarande kvar efter omstarten. |
Tips på struktur
Låt databas.py innehålla funktioner som skapar tabellen, lägger till, söker, visar och
tar bort böcker. Låt main.py innehålla menyn, kontrollera användarens val och anropa
funktionerna från databas.py. Bygg och testa en funktion i taget.
Det här ska lämnas in
main.py.databas.py.- Eventuell databasfil om läraren vill kontrollera sparad data.
- En kort beskrivning av testfallen och modulindelningen som en trippelciterad kommentar
(
''' ... ''') i början avmain.py.