Skip to content

Repo for prosjekt i faget TDT4145 Datamodellering og databasesystemer

Notifications You must be signed in to change notification settings

emillub/TDT4145_Datamodellering_og_databasesystemer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Innlevering 2 - Gruppe 115

Laget av: Emil Lunde-Bakke August Damm Lindbæk Mauritz Hardersen Skogøy


Dette dokumenter har som hensikt å gi en beskrivelse av innlevert prosjekt, dokumentere endringer i modellen fra innlevering 1 og gi en manual på hvordan man skal kjøre de forskjellige brukerhistoriene gitt i oppgaveteksten.

Innlevert mappe inneholder to mapper, en readME og den tomme databasefilen. Mappene heter filer og txt, som inneholder henholdsvis koden som utfører brukerhistoriene og initierer databasen, og utdelte txt-filer som brukes til å initiere solgte billetter.

Forutsetninger

For at man skal kunne kjøre dette prosjektet forutsetter det at leser har en grunnleggende forståelse av kodespråket python og hvordan man skal kjøre et pythonscript. Vi forutsetter at man kjører programmet enten gjennom terminalvinduet eller gjennom vscode. Applikasjonen vår gjør API kall for å hente informasjon fra nettsiden til Trønderlag Teater, så leser må ha internett-tilgang for å kunne kjøre programmet. For å holde koden ryddig har vi skrevet SQL-statementene i brukerhistorier 4-7 i bunnen av filen .filer/brukerhistorier/sql_utils.py linje 64-113.

Kjøreoppskrift

Før man kan kjøre programmet er det viktig at man har to python-pakker installert. Dette er request-modulen og sqlite3-modulen. Disse er nødvendige for henholdsvis å kunne gjøre http-kall og for å kunne kommunisere med databasen. Etter man har installert python kan man kjøre kommandoene under får å installere modulene i enten terminal-vinduet eller i integrert terminal i VS code.

Pip install sqlite3 Pip install requests

Når du har installert disse har du to alternativer for å kjøre brukerhistoriene; gjennom terminalvindu eller gjennom vscode

Terminal-vindu

Når du har åpnet terminalviduet må du navigere deg fram til bunnen av prosjektet. Det er viktig at du 'unzip'-er prosjektfilen for at du skal kunne navigere deg til bunnen av prosjektet. Naviger deg så fram til bunnen av prosjektet. Du er i bunnen når filplasseringen viser at du har følgende mapper tilgjengelige i directoriet ditt:

  • filer
  • txt
  • README.md
  • teater.db

Fra her kan man kjøre følgende kommando for å kjøre python scriptene som gjennomfører brukerhistoriene:

python .\filer\brukerhistorier\bh1.py eller eventuelt python3 .\filer\brukerhistorier\bh1.py (bytt retning på skråstrekene for Mac)

Slik kan man kjøre gjennom brukerhistorie 1-7 ved å endre tallet før .py deklarasjonen til hvaenn man ønsker mellom 1 og 7. Vi anbefaler at man kjører 1 og 2 først for å initiere databasen. Hvis du ønsker å endre input til programmene, kan du åpne brukerhistorie-filene i et tekst-redigerings-program og endre på de oppgitte variablene for å få annen output. Husk å lagre endringene før du kjører filen på nytt.

VScode

For å kjøre prosjektet i VScode trenger man også å pakke ut prosjektet på samme måte som om man kjører det i terminalvinduet. Åpne så prosjektet i VScode med root-folder der hvor du ser følgende mapper i prosjektet:

  • filer
  • txt
  • README.md
  • teater.db

Derfra kan du åpne filene og kjøre koden ved å trykke på "kjør" knappen oppe til høyre i VScode. Programmene skal kjøre og output skal vises i den integrerte terminalen i VScode. Her kan man også endre på de oppgitte feltene i brukerhistorie-filene for å få forskjellig output ut fra hva man ønsker å se.

Output fra brukerhistorier

Under finner dere hva forventet output fra de forskjellige brukerhistoriene skal være gitt en spesifisert input.

BH1

Ingen output - skal kun initiere database

BH2

Ingen output - leser av og setter inn solgte billetter i databasen fra filene gitt i txt-mappen

BH3

Når du kjører programmet skal du få opp trinnvis følgende spørsmål:

La oss lage en kundeprofil til deg!	
Hva heter du? Mauritz
Hva er tlf. nr ditt? 49234
Hva er adressen din? Hern
Det er 17 rader med 9 ledige stoler
[0] : ('Balkong', 1)
[1] : ('Balkong', 2)
[2] : ('Balkong', 3)
[3] : ('Balkong', 4)
[4] : ('Galleri', 1)
[5] : ('Galleri', 2)
[6] : ('Galleri', 3)
[7] : ('Parkett', 1)
[8] : ('Parkett', 2)
[9] : ('Parkett', 3)
[10] : ('Parkett', 4)
[11] : ('Parkett', 5)
[12] : ('Parkett', 6)
[13] : ('Parkett', 7)
[14] : ('Parkett', 8)
[15] : ('Parkett', 9)
[16] : ('Parkett', 10)

Velg en rad ved å skrive inn tallet til venstre for raden: 16

Skriver du inn inputen spesifisert til venstre for hver rad, settes 9 billetter av typen Ordinær inn i databasen for den gitte raden. Antallet billetter kan endres ved å endre variabelen antallBilletter i bh3.py.

BH4

Kjører du bh4.py uten modifikasjoner skal du få denne outputen.

TeaterStykke: Kongsemnene || SolgteBilletter: 65
TeaterStykke: Størst av alt er kjærligheten || SolgteBilletter: 36

Programmet er satt til å skrive ut forestillinger for dato: 2024-02-03, men dette kan endres på ved en kode-editor. Da kan du endre på følgende felt for å se forstillinger for andre dager. Det er viktig at du velger en dag hvor det faktisk er satt opp en forestilling (se oppgavebeskrivelsen) for å få output. Dette er linje 10 i bh4.py

# Her kan man endre dato for å se hvilke forestillinger som er satt opp.
dato = "2024-02-03"

BH5

Under følger output hvis man kjører bh5.py. Den skal ikke ta noen input.

TeaterStykke: Kongsemnene || Skuespiller: Arturo Scotti || Rolle: Haakon Haakonssønn
TeaterStykke: Kongsemnene || Skuespiller: Emil Olafsson || Rolle: Jatgeir Skald
TeaterStykke: Kongsemnene || Skuespiller: Emil Olafsson || Rolle: Dagfinn Bonde
TeaterStykke: Kongsemnene || Skuespiller: Emma Caroline Deichmann || Rolle: Sigrid (Skules søster)
TeaterStykke: Kongsemnene || Skuespiller: Emma Caroline Deichmann || Rolle: Ingebjørg
TeaterStykke: Kongsemnene || Skuespiller: Fabian Heidelberg Lunde || Rolle: Baard Bratte
TeaterStykke: Kongsemnene || Skuespiller: Fabian Heidelberg Lunde || Rolle: Trønder
TeaterStykke: Kongsemnene || Skuespiller: Hans Petter Nilsen || Rolle: Skule jarl
TeaterStykke: Kongsemnene || Skuespiller: Ingunn Beate Strige Øyen || Rolle: Inga fra Vartejg (Haakons mor)
TeaterStykke: Kongsemnene || Skuespiller: Isak Holmen Sørensen || Rolle: Paal Flida
TeaterStykke: Kongsemnene || Skuespiller: Isak Holmen Sørensen || Rolle: Trønder
TeaterStykke: Kongsemnene || Skuespiller: Madeleine Brandtzæg Nilsen || Rolle: Fru Ragnhild (Skules hustru)
TeaterStykke: Kongsemnene || Skuespiller: Per Bogstad Gulliksen || Rolle: Gregorius Jonssønn
TeaterStykke: Kongsemnene || Skuespiller: Snorre Ryen Tøndel || Rolle: Peter (prest og Ingebjørgs sønn)
TeaterStykke: Kongsemnene || Skuespiller: Synnøve Fossum Eriksen || Rolle: Margrete (Skules datter)
TeaterStykke: Kongsemnene || Skuespiller: Thomas Jensen Takyi || Rolle: Biskop Nikolas
TeaterStykke: Størst av alt er kjærligheten || Skuespiller: Jo Saberniak || Rolle: Jo Saberniak
TeaterStykke: Størst av alt er kjærligheten || Skuespiller: Marte M. Steinholt || Rolle: Marte M. Steinholt
TeaterStykke: Størst av alt er kjærligheten || Skuespiller: Natalie Grøndahl Tangen || Rolle: Natalie Grøndahl Tangen
TeaterStykke: Størst av alt er kjærligheten || Skuespiller: Sunniva Du Mond Nordal || Rolle: Sunniva Du Mond Nordal
TeaterStykke: Størst av alt er kjærligheten || Skuespiller: Tor Ivar Hagen || Rolle: Tor Ivar Hagen
TeaterStykke: Størst av alt er kjærligheten || Skuespiller: Trond-Ove Skrødal || Rolle: Trond-Ove Skrødal
TeaterStykke: Størst av alt er kjærligheten || Skuespiller: Åsmund Flaten || Rolle: Åsmund Flaten

Vår SQL query finnes som oppgitt under seksjonen Forutsetninger i sql_utils.py, men er for enkelthets skyld gjengitt her:

SELECT DISTINCT TS.Navn, Ansatt.Navn, R.Navn 
from Ansatt
JOIN HarRolle AS HR ON HR.AnsattID = Ansatt.AnsattID
JOIN Rolle AS R USING(RolleID)
JOIN RolleIAkt AS RIA USING (RolleID)
JOIN TeaterStykke AS TS USING (TeaterStykkeID)
ORDER BY TS.Navn, Ansatt.Navn

BH6

Under følger output fra BH6.py.

ForestillingsNavn: Kongsemnene || Dato: 2024-02-03 || Antall solgte plasser: 65
ForestillingsNavn: Størst av alt er kjærligheten || Dato: 2024-02-03 || Antall solgte plasser: 36
ForestillingsNavn: Kongsemnene || Dato: 2024-02-01 || Antall solgte plasser: 0
ForestillingsNavn: Kongsemnene || Dato: 2024-02-02 || Antall solgte plasser: 0
ForestillingsNavn: Kongsemnene || Dato: 2024-02-05 || Antall solgte plasser: 0
ForestillingsNavn: Kongsemnene || Dato: 2024-02-06 || Antall solgte plasser: 0
ForestillingsNavn: Størst av alt er kjærligheten || Dato: 2024-02-06 || Antall solgte plasser: 0
ForestillingsNavn: Størst av alt er kjærligheten || Dato: 2024-02-07 || Antall solgte plasser: 0
ForestillingsNavn: Størst av alt er kjærligheten || Dato: 2024-02-12 || Antall solgte plasser: 0
ForestillingsNavn: Størst av alt er kjærligheten || Dato: 2024-02-13 || Antall solgte plasser: 0
ForestillingsNavn: Størst av alt er kjærligheten || Dato: 2024-02-14 || Antall solgte plasser: 0

Dette programmet skal ikke ta input og output skal være lignende over. Det kan være forskjell i siste tall på linje 2 avhengig av hvor mange ganger bh3.py kjører ettersom det oppdaterer kjøpte billetter.

SQL:

SELECT TS.navn AS ForestillingsNavn, O.dato AS Dato, COUNT(B.BillettID) AS AntallSolgtePlasser
FROM Oppsetning AS O
JOIN TeaterStykke  AS TS ON O.TeaterStykkeID = TS.TeaterStykkeID
LEFT JOIN Billett  AS B ON O.OppsetningID = B.OppsetningID
GROUP BY O.OppsetningID
ORDER BY AntallSolgtePlasser DESC;

BH7

Under er output fra BH7.py gitt.

Skuespiller: Jo Saberniak:
--------------------------
MedSkuespiller: Sunniva Du Mond Nordal || TeaterStykke: Størst av alt er kjærligheten
MedSkuespiller: Marte M. Steinholt || TeaterStykke: Størst av alt er kjærligheten
MedSkuespiller: Tor Ivar Hagen || TeaterStykke: Størst av alt er kjærligheten
MedSkuespiller: Trond-Ove Skrødal || TeaterStykke: Størst av alt er kjærligheten
MedSkuespiller: Natalie Grøndahl Tangen || TeaterStykke: Størst av alt er kjærligheten
MedSkuespiller: Åsmund Flaten || TeaterStykke: Størst av alt er kjærligheten

Denne outputen gjelder for skuespiller "Jo Saberniak" men dette kan endres på samme måte som for bh4, hvis man ønsker å se annen output. Da kan man endre på følgende felt i bh7.py filen:

# Her kan man endre skuespillernavn for å se medskuespillere og teaterstykke.
navn =  'Jo Saberniak'

Dette er linje 7 og 8 vist i bh7.py filen.

SQL:

SELECT DISTINCT sNavn, teaterstykkeNavn
FROM (RolleIAkt as ria2
JOIN(
SELECT ria.TeaterStykkeID, ria.Nummer
FROM ((SELECT AnsattID as SkuespillerID FROM Skuespiller) AS S
JOIN (SELECT Navn, AnsattID FROM Ansatt WHERE Navn = "{navn}" ) AS A ON (A.AnsattID = S.SkuespillerID)
NATURAL JOIN HarRolle as hr
NATURAL JOIN RolleIAkt as ria)) as ria1
ON ria1.TeaterStykkeID = ria2.TeaterStykkeID AND ria1.Nummer = ria2.Nummer) as aktid
NATURAL JOIN HarRolle as hr
NATURAL JOIN (SELECT Navn as sNavn, AnsattID FROM ansatt) as a
NATURAL JOIN (SELECT Navn as teaterstykkeNavn, TeaterStykkeID FROM TeaterStykke)
WHERE sNavn != "{navn}"

Bemerkninger

Vi har sett det hensiktsmessig å endre på enkelte aspekter med modellen vår for å gjøre den implementerbar i python- og SQL-kode. Under er det gitt en liste med endringer fra leveranse 1 som er gjort for å gjøre implementasjon mulig:

  • Vi har introdusert seteklasse for å gjøre salg av seter enklere å implementere i databasemodellen vår.
  • Akt-navn er ikke lengre unike ettersom man kan ha samme navn på flere akter i forskjellige teaterstykker.
  • Koblingstabellen 'VisesI' var unødvendig. Dette kommer av at oppgavebeskrivelsen oppgir at et stykke kun vises i en sal og dette er dermed lagt inn i konstanter.py

Det er også verdt å bemerke at informasjonen som ligger i konstanter.py er hentet fra oppgavetekst og teaterets nettsider. Vi har gjort det slik for å gjøre koden mer oversiktlig og gjøre det lettere å eventuelt gjøre endringer.

Kunsitg intelligens er ikke brukt for å generere kode, men minimalt brukt som verktøy for å debugge kode.

About

Repo for prosjekt i faget TDT4145 Datamodellering og databasesystemer

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages