Skip to content
Snippets Groups Projects
Commit a3a62b37 authored by Thea Helene Linnerud Foss's avatar Thea Helene Linnerud Foss
Browse files

FERDIIIIIG

parent a6a4ee84
No related branches found
No related tags found
No related merge requests found
# Databaseprosjekt - Del 2 # Databaseprosjekt - Del 2
## Beskrivelse av innlevering
Dette er besvarelsen til gruppe 220 for databaseprosjektet del 2, database over jernbanesystemet i Norge. Dette er besvarelsen til gruppe 220 for databaseprosjektet del 2, database over jernbanesystemet i Norge.
Databasen der all informasjonen er lagret ligger i denne mappen under navnet jernbanesystemdb.db, sammen med .sql-filen brukt for å initialisere databasen, et bilde med en revidert utgave av ER-modellen, samt en rekke python-filer. Vi har en tom databasefil der all informasjonen vil bli lagret i denne mappen under navnet jernbanesystemdb.db. For å initialisere denne og fylle databasen med den nødvendige startinformasjonen, MÅ python-filen initialisering.py kjøres først! Videre ligger også sql-filen i sin helhet, et bilde med en revidert utgave av ER-modellen, samt en rekke andre python-filer i samme mappe.
Vi har strukturert oppgaven slik at vi har en .py-fil for hver handling en bruker kan benytte seg av, altså: Vi har strukturert oppgaven slik at vi har en .py-fil for hver handling en bruker kan benytte seg av, altså:
- hentetogreiser.py håndterer at en bruker kan hente ut alle togreiser som er innom en gitt jernbanestasjon en gitt ukedag - hentetogreiser.py håndterer at en bruker kan hente ut alle togreiser som er innom en gitt jernbanestasjon en gitt ukedag
- sokeitogreiser.py håndterer at en bruker kan søke etter togreiser mellom to jernbanestasjoner fra et angitt tidspunkt og dato og inkluderer avreisene neste dag - sokeitogreiser.py håndterer at en bruker kan søke etter togreiser mellom to jernbanestasjoner fra et angitt tidspunkt og dato og inkluderer avreisene neste dag
...@@ -10,18 +12,19 @@ Vi har strukturert oppgaven slik at vi har en .py-fil for hver handling en bruke ...@@ -10,18 +12,19 @@ Vi har strukturert oppgaven slik at vi har en .py-fil for hver handling en bruke
- fremtidigkjop.py håndterer at en bruker kan hente ut denne kundens fremtidige kjøp - fremtidigkjop.py håndterer at en bruker kan hente ut denne kundens fremtidige kjøp
## Antagelser ## Antagelser
- I brukerhistorie D antar vi at klokkeslettet brukeren oppgir er avgangstid fra startstasjonen. I tillegg står det at "Alle ruter den samme dagen og den neste skal returneres, sortert på tid". Vi antar at dette gjelder fra og med det oppgitte tidspunktet. Eks. hvis brukeren søker etter tog som går fra og med kl 16, så skal ikke et tog som går klokken 13 samme dag returneres. - I brukerhistorie D antar vi at klokkeslettet brukeren oppgir er avgangstid fra startstasjonen. I tillegg står det at "Alle ruter den samme dagen og den neste skal returneres, sortert på tid". Vi antar at dette gjelder fra og med det oppgitte tidspunktet. Eks. hvis brukeren søker etter tog som går fra og med kl 16, så skal ikke et tog som går klokken 13 samme dag returneres. Men siden vi tolker det oppgitte tidspunktet for dagen som oppgis, skal alle ruter den neste dagen returneres.
-Delstrekninger må legger inn i tabellen i rekkefølgen toget passerer de for at koden skal fungere - Delstrekninger må legges inn i tabellen i rekkefølgen toget passerer de for at koden skal fungere
- I filen for billettkjøp antar vi at en kunde vet hvilken stasjon hen ønsker å starte/slutte turen på, og at hen ut i fra togrutens start- og endestasjon skjønner hvilken rute (togruteID) hen må ta.
- I billett.py har vi valgt å ikke validere om personen legger inn start- og endestasjon i riktig rekkefølge (altså kan hen legge inn Bodø som startstasjon og Trondheim som endestasjon selv om toget går andre veien). Valgte bort denne valideringen for å kunne fokusere mer på det som er relevant med tanke på pensum. Har derimot skrevet ut stasjonene på ruta i riktig rekkefølge, slik at brukeren skal forstå hvilke jernbanestasjoner hen kan velge.
## Endringer vi har gjort fra del 1 ## Endringer vi har gjort del 1
- Endrer datatypen til Dato i Kundeordre til string i stedet for integer - Endrer datatypen til Dato i Kundeordre til string i stedet for integer
- Endrer datatypen til Tid i Kundeordre til time i stedet for integer - Endrer datatypen til Tid i Kundeordre til time i stedet for integer
- Legger til start og endestasjon i Billett - Legger til start og endestasjon i Billett
- Fjernet NOT NULL restriksjon fra SeteNr og SengNr i Billett - Fjernet NOT NULL restriksjon fra SeteNr og SengNr i Billett
- Lagt til kodelinjen "INSERT INTO Sittevogn VALUES (2, 3, 4);" i sql-filen for å legge til den andre sittevognen til databasen
- Vi har endret entitetsklasse som heter VognType til å hete Vogn. Dette måtte vi gjøre for å klare å definere et unikt sete. Eks. hvis et tog besto av flere identiske vogner var det ikke mulig å skille setene fra hverandre. Vi har lagt til VognID som attributt for å løse dette. Ergo er en vogn bestemt av en VognID og VognTypeNavn. Vedlagt i mappen ligger en .png-fil med det nye ER-diagrammet under navnet "ER modell, revidert". - Vi har endret entitetsklasse som heter VognType til å hete Vogn. Dette måtte vi gjøre for å klare å definere et unikt sete. Eks. hvis et tog besto av flere identiske vogner var det ikke mulig å skille setene fra hverandre. Vi har lagt til VognID som attributt for å løse dette. Ergo er en vogn bestemt av en VognID og VognTypeNavn. Vedlagt i mappen ligger en .png-fil med det nye ER-diagrammet under navnet "ER modell, revidert".
## Kilder ## Kilder
https://stackoverflow.com/questions/12867140/python-mysqldb-get-the-result-of-fetchall-in-a-list https://stackoverflow.com/questions/12867140/python-mysqldb-get-the-result-of-fetchall-in-a-list
- Brukt til hvordan hente ut resultatene fra cursor.fetchall() til en liste - Brukt til inspirasjon for hvordan man kan hente ut resultatene fra cursor.fetchall() til en liste
\ No newline at end of file \ No newline at end of file
TODO:
- Registrerte kunder skal kunne finne ledige billetter for en oppgitt strekning
på en ønsket togrute og kjøpe de billettene hen ønsker. Denne funksjonaliteten skal programmeres.
○ Pass på at dere bare selger ledige plasser
DONE:
- For en stasjon som oppgis, skal bruker få ut alle togruter som er innom stasjonen en gitt ukedag. Denne funksjonaliteten skal programmeres.
- En bruker skal kunne registrere seg i kunderegisteret. Denne funksjonaliteten skal programmeres.
- Bruker skal kunne søke etter togruter som går mellom en startstasjon og en sluttstasjon,
med utgangspunkt i en dato og et klokkeslett.
Alle ruter den samme dagen og den neste skal returneres, sortert på tid.
Denne funksjonaliteten skal programmeres.
- For en bruker skal man kunne finne all informasjon om de kjøpene hen har gjort for fremtidige reiser.
Denne funksjonaliteten skal programmeres.
ENDRINGER FRA DEL 1 TIL DEL 2
- Endrer datatypen til Dato i Kundeordre til string i stedet for integer
- Endrer datatypen til Tid i Kundeordre til time i stedet for integer
- Legger til start og endestasjon i Billett
- Fjernet NOT NULL restriksjon fra SeteNr og SengNr i Billett
- Vi har endret entitetsklasse som heter VognType til å hete Vogn. Dette måtte vi gjøre for å klare å definere et unikt sete. Eks. hvis et tog besto av flere identiske vogner var det
ikke mulig å skille setene fra hverandre. Vi har lagt til VognID som attributt for å løse dette. Ergo er en vogn bestemt av en unik ID og VognTypeNavn. Vedlagt ligger det nye ER-diagramet
ANTAGELSER
- Punkt d) for brukerhistorie antar vi at klokkeslettet brukeren oppgir er avgangstid fra startstasjonen. I tillegg står det at "Alle ruter den samme dagen og den neste skal
returneres, sortert på tid". Vi tar en antagelse på at dette gjelder fra og med det oppgitte tidspunktet. Eks. hvis brukeren søker etter tog som går fra og med kl 16, så skal ikke et tog som går klokken 13
samme dag returneres.
Spør studass:
HELT GARANTERT FUNKER
- Kunderegistrering
- Hentetogruter
- Fremtidigkjop
IKKE FERDIG
- Billett: må fikse sånn at et sete blir FALSE og man får et annet sete (og for seng)
- Søkeitogreiser: feil med spørringer
billett - sete
For hver delstrekning mellom oppgitt start- og endestasjon, må vi sjekke om én billett er ledig. Bruke
en for-løkke elns til å gå gjennom seter i en vogn og sjekke om det er ledig eller opptatt (True/False) i hver delstrekning.
- Hvis man reiser fra eks. TRD S til Bodø, må man markere sete som opptatt på alle delstrekningene mellom stasjonene
- Bruke dictionary for hver delstrekning med boolske verdier hvor True = ledig
- Finne hvilke delstrekninger som gjelder for oppgitt start- og endestasjon
- Iterere gjennom dictionary-ene for å sjekke om et sete er ledig i alle delstrekninger som trengs
\ No newline at end of file
# Her programmerer vi billettkjøp
import sqlite3 import sqlite3
from datetime import date from datetime import date
from datetime import datetime as dt from datetime import datetime as dt
...@@ -8,9 +7,6 @@ cursor = con.cursor() ...@@ -8,9 +7,6 @@ cursor = con.cursor()
# Registrerte kunder skal kunne finne ledige billetter for en oppgitt strekning på en ønsket togrute # Registrerte kunder skal kunne finne ledige billetter for en oppgitt strekning på en ønsket togrute
# og kjøpe de billettene hen ønsker. # og kjøpe de billettene hen ønsker.
# Antar at en kunde vet hvilken stasjon hen ønsker å starte/slutte turen på, og at hen ut i fra togrutens start- og endestasjon
# skjønner hvilken rute hen må ta.
def billettkjop(): def billettkjop():
kundeNr = input("Oppgi ditt kundeNr: ") kundeNr = input("Oppgi ditt kundeNr: ")
cursor.execute("SELECT KundeNr FROM Kunde WHERE KundeNr = ?", (kundeNr,)) cursor.execute("SELECT KundeNr FROM Kunde WHERE KundeNr = ?", (kundeNr,))
...@@ -28,6 +24,17 @@ def billettkjop(): ...@@ -28,6 +24,17 @@ def billettkjop():
togruteID = input("Hvilken togrute vil du reise med? Oppgi TogruteID: ") togruteID = input("Hvilken togrute vil du reise med? Oppgi TogruteID: ")
while (sjekkeGyldigTogrute(togruteID) == False): while (sjekkeGyldigTogrute(togruteID) == False):
togruteID = input("Oppgitt togrute er ugyldig. Prøv på nytt: ") togruteID = input("Oppgitt togrute er ugyldig. Prøv på nytt: ")
# Finner alle stasjoner på rute
cursor.execute("SELECT JernbanestasjonNavn FROM Startstasjon WHERE TogruteID = ?", (togruteID,))
startstasjonPaaRute = [item[0] for item in cursor.fetchall()]
cursor.execute("SELECT JernbanestasjonNavn FROM Mellomstasjon WHERE TogruteID = ? ORDER BY Ankomsttid ASC", (togruteID,))
mellomstasjonerPaaRute = [item[0] for item in cursor.fetchall()]
cursor.execute("SELECT JernbanestasjonNavn FROM Endestasjon WHERE TogruteID = ?", (togruteID,))
endestasjonPaaRute = [item[0] for item in cursor.fetchall()]
stasjonerPaaRute = startstasjonPaaRute + mellomstasjonerPaaRute + endestasjonPaaRute
print("Dette er jernbanestasjonene i riktig rekkefølge på valgt togrute:", stasjonerPaaRute)
startstasjon = input("Hvilken jernbanestasjon skal reisen starte på?: ") startstasjon = input("Hvilken jernbanestasjon skal reisen starte på?: ")
while (sjekkeGyldigeJernbanestasjoner(startstasjon) == False): while (sjekkeGyldigeJernbanestasjoner(startstasjon) == False):
startstasjon = input("Oppgitt startstasjon er ugyldig. Prøv på nytt: ") startstasjon = input("Oppgitt startstasjon er ugyldig. Prøv på nytt: ")
...@@ -40,8 +47,12 @@ def billettkjop(): ...@@ -40,8 +47,12 @@ def billettkjop():
print("Ugyldig dato, skal være på formatet YYYY-MM-DD.") print("Ugyldig dato, skal være på formatet YYYY-MM-DD.")
reisedatoString = input("Hvilken dato er reisen? Format YYYY-MM-DD: ") reisedatoString = input("Hvilken dato er reisen? Format YYYY-MM-DD: ")
cursor.execute("SELECT Togforekomst.Dato FROM Togforekomst WHERE TogruteID = ?", (togruteID,))
gyldigeReisedatoer = [item[0] for item in cursor.fetchall()]
if (reisedatoString not in gyldigeReisedatoer):
print("Reisedatoen du har oppgitt er ikke en av de mulige reisedatoene, prøv igjen.")
return
reisedato = convertDato(reisedatoString) reisedato = convertDato(reisedatoString)
# MÅ BRUKE DATO TIL NOE
# Finner vognoppsettet til den valgte togruta # Finner vognoppsettet til den valgte togruta
cursor.execute("SELECT Togrute.VognoppsettID FROM Togrute WHERE TogruteID = ?", (togruteID,)) cursor.execute("SELECT Togrute.VognoppsettID FROM Togrute WHERE TogruteID = ?", (togruteID,))
...@@ -66,15 +77,6 @@ def billettkjop(): ...@@ -66,15 +77,6 @@ def billettkjop():
antallBilletter = antallSeteBilletter + antallSengeBilletter antallBilletter = antallSeteBilletter + antallSengeBilletter
# Finner alle stasjoner på rute
cursor.execute("SELECT JernbanestasjonNavn FROM Startstasjon WHERE TogruteID = ?", (togruteID,))
startstasjonPaaRute = [item[0] for item in cursor.fetchall()]
cursor.execute("SELECT JernbanestasjonNavn FROM Mellomstasjon WHERE TogruteID = ? ORDER BY Ankomsttid ASC", (togruteID,))
mellomstasjonerPaaRute = [item[0] for item in cursor.fetchall()]
cursor.execute("SELECT JernbanestasjonNavn FROM Endestasjon WHERE TogruteID = ?", (togruteID,))
endestasjonPaaRute = [item[0] for item in cursor.fetchall()]
stasjonerPaaRute = startstasjonPaaRute + mellomstasjonerPaaRute + endestasjonPaaRute
# Finner vognID til den valgte togruta # Finner vognID til den valgte togruta
cursor.execute("SELECT Vogn.VognID FROM Vogn INNER JOIN VognerIOppsett ON Vogn.VognID = VognerIOppsett.VognID WHERE VognoppsettID = ?", (vognoppsettID[0],)) cursor.execute("SELECT Vogn.VognID FROM Vogn INNER JOIN VognerIOppsett ON Vogn.VognID = VognerIOppsett.VognID WHERE VognoppsettID = ?", (vognoppsettID[0],))
vognIDer = [item[0] for item in cursor.fetchall()] vognIDer = [item[0] for item in cursor.fetchall()]
...@@ -83,7 +85,6 @@ def billettkjop(): ...@@ -83,7 +85,6 @@ def billettkjop():
cursor.execute("SELECT Sovevogn.VognID FROM Sovevogn") cursor.execute("SELECT Sovevogn.VognID FROM Sovevogn")
sovevognIDer = [item[0] for item in cursor.fetchall()] sovevognIDer = [item[0] for item in cursor.fetchall()]
dictMedAlleSeter = {} dictMedAlleSeter = {}
dictMedAlleSenger = {} dictMedAlleSenger = {}
for vognID in vognIDer: for vognID in vognIDer:
...@@ -97,7 +98,7 @@ def billettkjop(): ...@@ -97,7 +98,7 @@ def billettkjop():
antallSeterPerRad = int(antallStolraderOgAntallSeterPerRad[0][1]) antallSeterPerRad = int(antallStolraderOgAntallSeterPerRad[0][1])
antallSeterIVogn += (antallStolrader * antallSeterPerRad) antallSeterIVogn += (antallStolrader * antallSeterPerRad)
listeMedSeterIVogn = listerForSeter(togruteID, antallSeterIVogn) listeMedSeterIVogn = listerForSeter(togruteID, vognID, antallSeterIVogn, reisedato)
dictMedAlleSeter[vognID] = listeMedSeterIVogn dictMedAlleSeter[vognID] = listeMedSeterIVogn
elif vognID in sovevognIDer: elif vognID in sovevognIDer:
...@@ -109,17 +110,40 @@ def billettkjop(): ...@@ -109,17 +110,40 @@ def billettkjop():
antallSovekupeer = int(antallSovekupeertuple[0]) antallSovekupeer = int(antallSovekupeertuple[0])
antallSengerIVogn += (antallSovekupeer * 2) antallSengerIVogn += (antallSovekupeer * 2)
listeMedSengerIVogn = listerForSenger(antallSengerIVogn) listeMedSengerIVogn = listerForSenger(vognID, antallSengerIVogn, reisedato)
dictMedAlleSenger[vognID] = listeMedSengerIVogn dictMedAlleSenger[vognID] = listeMedSengerIVogn
if (antallSeteBilletter > 0):
antallSeterTotalt = 0
for value in dictMedAlleSeter.values():
antallSeterTotalt = (len(value[0]) * antallSittevogner)
if (antallSeteBilletter > antallSeterTotalt):
print("Du har bedt om flere sitteplasser enn det er sitteplasser på toget. Prøv på nytt.")
return
if (antallSengeBilletter > 0):
antallSengerTotalt = 0
for sengevogn in dictMedAlleSenger.values():
antallSengerTotalt += len(sengevogn)
antallSengerTotaltTotalt = antallSengerTotalt * antallSovevogner
if (antallSengeBilletter > antallSengerTotaltTotalt):
print("Du har bedt om flere sengeplasser enn det er sengeplasser på toget. Prøv på nytt.")
return
# Bruker indeksen til å finne ut hvor i lista over vi skal begynne å iterere for å finne alle delstrekninger vi skal innom # Bruker indeksen til å finne ut hvor i lista over vi skal begynne å iterere for å finne alle delstrekninger vi skal innom
indeksTilStartstasjon = stasjonerPaaRute.index(startstasjon) indeksTilStartstasjon = stasjonerPaaRute.index(startstasjon)
indeksTilEndestasjon = stasjonerPaaRute.index(endestasjon) indeksTilEndestasjon = stasjonerPaaRute.index(endestasjon)
if (antallSeteBilletter != 0): if (antallSeteBilletter != 0):
dictMedAlleSeter, tildeltSete, vognID, tildelteSeter = bestilleSeteBilletter(dictMedAlleSeter, antallSeteBilletter, indeksTilStartstasjon, indeksTilEndestasjon) dictMedAlleSeter, tildeltSete, vognIDSete, tildelteSeter = bestilleSeteBilletter(dictMedAlleSeter, antallSeteBilletter, indeksTilStartstasjon, indeksTilEndestasjon)
if (tildeltSete == None and tildelteSeter == []):
print("Det er ikke nok ledige plasser på toget. Prøv en annen dato.")
return
if (antallSengeBilletter != 0): if (antallSengeBilletter != 0):
dictMedAlleSenger, tildeltSeng, tildelteSenger = bestilleSengeBilletter(dictMedAlleSenger, antallSengeBilletter) dictMedAlleSenger, tildeltSeng, vognIDSeng, tildelteSenger = bestilleSengeBilletter(dictMedAlleSenger, antallSengeBilletter)
if (tildeltSeng == None and tildelteSenger == []):
print("Det er ikke nok ledige plasser på toget. Prøv en annen dato.")
return
cursor.execute("SELECT COUNT(OrdreNr) FROM Kundeordre") cursor.execute("SELECT COUNT(OrdreNr) FROM Kundeordre")
antallOrdre = cursor.fetchone() antallOrdre = cursor.fetchone()
...@@ -131,30 +155,30 @@ def billettkjop(): ...@@ -131,30 +155,30 @@ def billettkjop():
billettnr = incrementBillettnr() billettnr = incrementBillettnr()
if (antallSeteBilletter == 1): # Kun ett sete bestilt if (antallSeteBilletter == 1): # Kun ett sete bestilt
cursor.execute("INSERT INTO Billett VALUES (?, 'sete', ?, ?, ?, ?, Null, ?, ?)", (billettnr, reisedato, ordrenummer, vognID, tildeltSete, startstasjon, endestasjon)) cursor.execute("INSERT INTO Billett VALUES (?, 'sete', ?, ?, ?, ?, Null, ?, ?)", (billettnr, reisedato, ordrenummer, vognIDSete, tildeltSete, startstasjon, endestasjon))
con.commit() con.commit()
elif (antallSeteBilletter > 1): # Flere seter bestilt elif (antallSeteBilletter > 1): # Flere seter bestilt
for sete in tildelteSeter: for sete in tildelteSeter:
billettnr = incrementBillettnr() billettnr = incrementBillettnr()
cursor.execute("INSERT INTO Billett VALUES (?, 'sete', ?, ?, ?, ?, Null, ?, ?)", (billettnr, reisedato, ordrenummer, vognID, sete, startstasjon, endestasjon)) cursor.execute("INSERT INTO Billett VALUES (?, 'sete', ?, ?, ?, ?, Null, ?, ?)", (billettnr, reisedato, ordrenummer, vognIDSete, sete, startstasjon, endestasjon))
con.commit() con.commit()
if (antallSengeBilletter > 0): if (antallSengeBilletter > 0):
billettnr = incrementBillettnr() billettnr = incrementBillettnr()
if (tildeltSeng != None and tildelteSenger == []): # Kun en seng bestilt if (tildeltSeng != None and tildelteSenger == []): # Kun en seng bestilt
cursor.execute("INSERT INTO Billett VALUES (?, 'seng', ?, ?, ?, Null, ?, ?, ?)", (billettnr, reisedato, ordrenummer, vognID, tildeltSeng, startstasjon, endestasjon)) cursor.execute("INSERT INTO Billett VALUES (?, 'seng', ?, ?, ?, Null, ?, ?, ?)", (billettnr, reisedato, ordrenummer, vognIDSeng, tildeltSeng, startstasjon, endestasjon))
con.commit() con.commit()
elif (tildeltSeng != None and tildelteSenger != []): # Oddetall over 1 senger bestilt elif (tildeltSeng != None and tildelteSenger != []): # Oddetall over 1 senger bestilt
cursor.execute("INSERT INTO Billett VALUES (?, 'seng', ?, ?, ?, Null, ?, ?, ?)", (billettnr, reisedato, ordrenummer, vognID, tildeltSeng, startstasjon, endestasjon)) cursor.execute("INSERT INTO Billett VALUES (?, 'seng', ?, ?, ?, Null, ?, ?, ?)", (billettnr, reisedato, ordrenummer, vognIDSeng, tildeltSeng, startstasjon, endestasjon))
con.commit() con.commit()
for seng in tildelteSenger: for seng in tildelteSenger:
billettnr = incrementBillettnr() billettnr = incrementBillettnr()
cursor.execute("INSERT INTO Billett VALUES (?, 'seng', ?, ?, ?, Null, ?, ?, ?)", (billettnr, reisedato, ordrenummer, vognID, seng, startstasjon, endestasjon)) cursor.execute("INSERT INTO Billett VALUES (?, 'seng', ?, ?, ?, Null, ?, ?, ?)", (billettnr, reisedato, ordrenummer, vognIDSeng, seng, startstasjon, endestasjon))
con.commit() con.commit()
elif (tildeltSeng == None and tildelteSenger != []): # Partall senger bestilt elif (tildeltSeng == None and tildelteSenger != []): # Partall senger bestilt
for seng in tildelteSenger: for seng in tildelteSenger:
billettnr = incrementBillettnr() billettnr = incrementBillettnr()
cursor.execute("INSERT INTO Billett VALUES (?, 'seng', ?, ?, ?, Null, ?, ?, ?)", (billettnr, reisedato, ordrenummer, vognID, seng, startstasjon, endestasjon)) cursor.execute("INSERT INTO Billett VALUES (?, 'seng', ?, ?, ?, Null, ?, ?, ?)", (billettnr, reisedato, ordrenummer, vognIDSeng, seng, startstasjon, endestasjon))
con.commit() con.commit()
cursor.execute("""SELECT Billett.BillettID, Billett.Dato, Billett.VognID, Billett.SeteNr, Billett.SengNr, Billett.Startstasjon, Billett.Endestasjon cursor.execute("""SELECT Billett.BillettID, Billett.Dato, Billett.VognID, Billett.SeteNr, Billett.SengNr, Billett.Startstasjon, Billett.Endestasjon
...@@ -167,11 +191,6 @@ def billettkjop(): ...@@ -167,11 +191,6 @@ def billettkjop():
print(entry) print(entry)
# HJELPEFUNKSJONER # HJELPEFUNKSJONER
def sjekkeGyldigeJernbanestasjoner(jernbanestasjon): def sjekkeGyldigeJernbanestasjoner(jernbanestasjon):
cursor.execute("SELECT JernbanestasjonNavn FROM Jernbanestasjon") cursor.execute("SELECT JernbanestasjonNavn FROM Jernbanestasjon")
...@@ -223,11 +242,7 @@ def sjekkeAntallBilletter(type): ...@@ -223,11 +242,7 @@ def sjekkeAntallBilletter(type):
boolean = True boolean = True
return int(antallBilletter) return int(antallBilletter)
def sjekkeOmLedigeBilletter(antallBilletter, startstasjon, endestasjon): def listerForSeter(togruteID, vognID, antallSeterIVogn, reisedato):
# bruke dictionaries til å sjekke om det finnes noen ledige billetter
return
def listerForSeter(togruteID, antallSeter):
# Henter ut delstrekningene # Henter ut delstrekningene
cursor.execute("""SELECT Delstrekning.Startstasjon, Delstrekning.Endestasjon cursor.execute("""SELECT Delstrekning.Startstasjon, Delstrekning.Endestasjon
FROM Delstrekning join Togrute ON Delstrekning.BanestrekningNavn = Togrute.BanestrekningNavn FROM Delstrekning join Togrute ON Delstrekning.BanestrekningNavn = Togrute.BanestrekningNavn
...@@ -235,17 +250,64 @@ def listerForSeter(togruteID, antallSeter): ...@@ -235,17 +250,64 @@ def listerForSeter(togruteID, antallSeter):
delstrekninger = cursor.fetchall() delstrekninger = cursor.fetchall()
listeMedLister = [] listeMedLister = []
for delstrekning in delstrekninger: for _ in delstrekninger:
liste = [] liste = []
for i in range(antallSeter): for i in range(antallSeterIVogn):
liste.insert(i, True) liste.insert(i, True)
listeMedLister.append(liste) listeMedLister.append(liste)
# Henter ut tidligere billetter for å se hvilke seter som allerede er bestilt
cursor.execute("""SELECT Billett.VognID, Billett.SeteNr, Billett.Startstasjon, Billett.Endestasjon, Billett.Dato, Kundeordre.TogruteID
FROM Billett INNER JOIN Kundeordre ON Billett.OrdreNr = Kundeordre.OrdreNr
WHERE Billett.Type = 'sete'""")
billettinfo = cursor.fetchall()
cursor.execute("SELECT JernbanestasjonNavn FROM Startstasjon WHERE TogruteID = ?", (togruteID,))
startstasjonPaaRute = [item[0] for item in cursor.fetchall()]
cursor.execute("SELECT JernbanestasjonNavn FROM Mellomstasjon WHERE TogruteID = ? ORDER BY Ankomsttid ASC", (togruteID,))
mellomstasjonerPaaRute = [item[0] for item in cursor.fetchall()]
cursor.execute("SELECT JernbanestasjonNavn FROM Endestasjon WHERE TogruteID = ?", (togruteID,))
endestasjonPaaRute = [item[0] for item in cursor.fetchall()]
stasjonerPaaRute = startstasjonPaaRute + mellomstasjonerPaaRute + endestasjonPaaRute
print(stasjonerPaaRute)
# Setter tidligere bestilte seter til False
for entry in billettinfo:
vognIDIBillett = entry[0]
togruteIDIBillett = entry[5]
if (int(togruteID) == togruteIDIBillett and vognID == vognIDIBillett):
seteNrIBillett = entry[1]
startstasjon = entry[2]
endestasjon = entry[3]
reisedatoIBillett = entry[4]
indekstilstartstasjon = stasjonerPaaRute.index(startstasjon)
indekstilendestasjon = stasjonerPaaRute.index(endestasjon)
if (str(reisedato) == reisedatoIBillett):
if (seteNrIBillett != None):
seteNrIndeks = seteNrIBillett - 1
for i in range(indekstilstartstasjon, indekstilendestasjon):
innerList = listeMedLister[i]
innerList[seteNrIndeks] = False
return listeMedLister return listeMedLister
def listerForSenger(antallSenger): def listerForSenger(vognID, antallSenger, reisedato):
cursor.execute("SELECT Billett.VognID, Billett.SengNr, Billett.Dato FROM Billett WHERE Billett.Type = 'seng'")
billettinfo = cursor.fetchall()
liste = [] liste = []
for i in range(antallSenger): for i in range(antallSenger):
liste.insert(i, True) liste.insert(i, True)
for entry in billettinfo:
vognIDIBillett = entry[0]
if (vognID == vognIDIBillett):
sengNrIBillett = entry[1]
reisedatoIBillett = entry[2]
if (str(reisedato) == reisedatoIBillett):
if (sengNrIBillett != None):
sengNrIndeks = sengNrIBillett - 1
liste[sengNrIndeks] = False
return liste return liste
def hentElementer(liste, teller): def hentElementer(liste, teller):
...@@ -272,16 +334,17 @@ def bestilleSeteBilletter(dictMedAlleSeter, antallSeteBilletter, indeksTilStarts ...@@ -272,16 +334,17 @@ def bestilleSeteBilletter(dictMedAlleSeter, antallSeteBilletter, indeksTilStarts
tildeltSete = None tildeltSete = None
tildelteSeter = [] tildelteSeter = []
vognID = key
if antallSeteBilletter == 1: if antallSeteBilletter == 1:
tildeltSete = finneLedigSete(modifisertListeMedSeter) tildeltSete = finneLedigSete(modifisertListeMedSeter)
vognID = key
for i in range(indeksTilStartstasjon, indeksTilEndestasjon): for i in range(indeksTilStartstasjon, indeksTilEndestasjon):
indeksTilTildeltSete = tildeltSete - 1 indeksTilTildeltSete = tildeltSete - 1
listeMedSeterIVogn[i][indeksTilTildeltSete] = False listeMedSeterIVogn[i][indeksTilTildeltSete] = False
dictMedAlleSeter[key] = listeMedSeterIVogn dictMedAlleSeter[key] = listeMedSeterIVogn
elif antallSeteBilletter > 1: elif antallSeteBilletter > 1:
for _ in range(antallSeteBilletter): for _ in range(antallSeteBilletter):
tildelteSeter.append(finneLedigSete(modifisertListeMedSeter)) tildeltSete = finneLedigSete(modifisertListeMedSeter)
tildelteSeter.append(tildeltSete)
for i in range(indeksTilStartstasjon, indeksTilEndestasjon): for i in range(indeksTilStartstasjon, indeksTilEndestasjon):
indeksTilTildeltSete = tildeltSete - 1 indeksTilTildeltSete = tildeltSete - 1
listeMedSeterIVogn[i][indeksTilTildeltSete] = False listeMedSeterIVogn[i][indeksTilTildeltSete] = False
...@@ -300,6 +363,7 @@ def finneLedigSeng(listeMedSenger): ...@@ -300,6 +363,7 @@ def finneLedigSeng(listeMedSenger):
def bestilleSengeBilletter(dictMedAlleSenger, antallSengeBilletter): def bestilleSengeBilletter(dictMedAlleSenger, antallSengeBilletter):
for key in dictMedAlleSenger.keys(): for key in dictMedAlleSenger.keys():
vognID = key
listeMedSengerIVogn = dictMedAlleSenger.get(key) listeMedSengerIVogn = dictMedAlleSenger.get(key)
valgtSeng = None valgtSeng = None
listeMedSengNrBestilt = [] listeMedSengNrBestilt = []
...@@ -318,7 +382,7 @@ def bestilleSengeBilletter(dictMedAlleSenger, antallSengeBilletter): ...@@ -318,7 +382,7 @@ def bestilleSengeBilletter(dictMedAlleSenger, antallSengeBilletter):
# Oddetall antall senger # Oddetall antall senger
else: else:
if (antallSengeBilletter > 1): if (antallSengeBilletter > 1):
for _ in range((int(antallSengeBilletter-1/2)-1)): for _ in range((int((antallSengeBilletter-1)/2)-1)):
seng1 = finneLedigSeng(listeMedSengerIVogn) seng1 = finneLedigSeng(listeMedSengerIVogn)
seng2 = seng1 + 1 seng2 = seng1 + 1
listeMedSengNrBestilt.append(seng1) listeMedSengNrBestilt.append(seng1)
...@@ -326,11 +390,10 @@ def bestilleSengeBilletter(dictMedAlleSenger, antallSengeBilletter): ...@@ -326,11 +390,10 @@ def bestilleSengeBilletter(dictMedAlleSenger, antallSengeBilletter):
listeMedSengerIVogn[seng1-1] = False listeMedSengerIVogn[seng1-1] = False
listeMedSengerIVogn[seng2-1] = False listeMedSengerIVogn[seng2-1] = False
valgtSeng = finneLedigSeng(listeMedSengerIVogn) valgtSeng = finneLedigSeng(listeMedSengerIVogn)
listeMedSengNrBestilt.append(valgtSeng)
indeksTilSeng = valgtSeng - 1 indeksTilSeng = valgtSeng - 1
listeMedSengerIVogn[indeksTilSeng] = False listeMedSengerIVogn[indeksTilSeng] = False
dictMedAlleSenger[key] = listeMedSengerIVogn dictMedAlleSenger[key] = listeMedSengerIVogn
return dictMedAlleSenger, valgtSeng, listeMedSengNrBestilt return dictMedAlleSenger, valgtSeng, vognID, listeMedSengNrBestilt
def incrementBillettnr(): def incrementBillettnr():
cursor.execute("SELECT COUNT(BillettID) FROM Billett") cursor.execute("SELECT COUNT(BillettID) FROM Billett")
...@@ -340,5 +403,5 @@ def incrementBillettnr(): ...@@ -340,5 +403,5 @@ def incrementBillettnr():
billettkjop() billettkjop()
# con.commit() con.commit()
con.close() con.close()
\ No newline at end of file
import sqlite3
con = sqlite3.connect("jernbanesystemdb.db")
cursor = con.cursor()
try:
cursor.execute("""CREATE TABLE Banestrekning(BanestrekningNavn text NOT NULL, Fremdriftsenergi text NOT NULL, AntallDelstrekninger integer NOT NULL, Hovedretning text NOT NULL, OperatorNavn text NOT NULL, Startstasjon text NOT NULL, Endestasjon text NOT NULL,
PRIMARY KEY (BanestrekningNavn),
FOREIGN KEY(OperatorNavn) REFERENCES Operator(OperatorNavn)
ON UPDATE CASCADE
ON DELETE NO ACTION,
FOREIGN KEY(Startstasjon) REFERENCES Jernbanestasjon(JernbanestasjonNavn)
ON UPDATE CASCADE
ON DELETE NO ACTION,
FOREIGN KEY(Endestasjon) REFERENCES Jernbanestasjon(JernbanestasjonNavn)
ON UPDATE CASCADE
ON DELETE NO ACTION)""")
cursor.execute("""CREATE TABLE Delstrekning(DelstrekningID integer NOT NULL, Lengde integer NOT NULL, AntallSpor integer NOT NULL, BanestrekningNavn text NOT NULL, Startstasjon text NOT NULL, Endestasjon text NOT NULL,
PRIMARY KEY(DelstrekningID),
FOREIGN KEY(BanestrekningNavn) REFERENCES Banestrekning(BanestrekningNavn)
ON UPDATE CASCADE
ON DELETE NO ACTION,
FOREIGN KEY(Startstasjon) REFERENCES Jernbanestasjon(JernbanestasjonNavn)
ON UPDATE CASCADE
ON DELETE NO ACTION,
FOREIGN KEY(Endestasjon) REFERENCES Jernbanestasjon(JernbanestasjonNavn)
ON UPDATE CASCADE
ON DELETE NO ACTION)""")
cursor.execute("""CREATE TABLE Jernbanestasjon(JernbanestasjonNavn text NOT NULL, AntallHoydemeter integer NOT NULL,
PRIMARY KEY(JernbanestasjonNavn))""")
cursor.execute("""CREATE TABLE Togrute(TogruteID integer NOT NULL, BanestrekningNavn text NOT NULL, VognoppsettID integer NOT NULL, OperatorNavn text NOT NULL, Startstasjon text NOT NULL, Endestasjon text NOT NULL,
PRIMARY KEY(TogruteID),
FOREIGN KEY(BanestrekningNavn) REFERENCES Banestrekning(BanestrekningNavn)
ON UPDATE CASCADE
ON DELETE NO ACTION,
FOREIGN KEY(VognoppsettID) REFERENCES Vognoppsett(VognoppsettID)
ON UPDATE CASCADE
ON DELETE NO ACTION,
FOREIGN KEY(Startstasjon) REFERENCES Jernbanestasjon(JernbanestasjonNavn)
ON UPDATE CASCADE
ON DELETE NO ACTION,
FOREIGN KEY(Endestasjon) REFERENCES Jernbanestasjon(JernbanestasjonNavn)
ON UPDATE CASCADE
ON DELETE NO ACTION,
FOREIGN KEY(OperatorNavn) REFERENCES Operator(OperatorNavn)
ON UPDATE CASCADE
ON DELETE NO ACTION)""")
cursor.execute("""CREATE TABLE Togforekomst(TogruteID integer NOT NULL, Dag text NOT NULL, Dato date NOT NULL,
PRIMARY KEY(TogruteID, Dag),
FOREIGN KEY(TogruteID) REFERENCES Togrute(TogruteID)
ON UPDATE CASCADE
ON DELETE NO ACTION)""")
cursor.execute("""CREATE TABLE Startstasjon(JernbanestasjonNavn text NOT NULL, TogruteID integer NOT NULL, Avgangstid time NOT NULL,
PRIMARY KEY(JernbanestasjonNavn, TogruteID) ,
FOREIGN KEY(JernbanestasjonNavn) REFERENCES Jernbanestasjon(JernbanestasjonNavn)
ON UPDATE CASCADE
ON DELETE NO ACTION)""")
cursor.execute("""CREATE TABLE Endestasjon(JernbanestasjonNavn text NOT NULL, TogruteID integer NOT NULL, Ankomsttid time NOT NULL,
PRIMARY KEY(JernbanestasjonNavn, TogruteID),
FOREIGN KEY(JernbanestasjonNavn) REFERENCES Jernbanestasjon(JernbanestasjonNavn)
ON UPDATE CASCADE
ON DELETE NO ACTION)""")
cursor.execute("""CREATE TABLE Mellomstasjon(JernbanestasjonNavn text NOT NULL, TogruteID integer NOT NULL, Ankomsttid time NOT NULL, Avgangstid time NOT NULL,
PRIMARY KEY(JernbanestasjonNavn, TogruteID),
FOREIGN KEY(JernbanestasjonNavn) REFERENCES Jernbanestasjon(JernbanestasjonNavn)
ON UPDATE CASCADE
ON DELETE NO ACTION)""")
cursor.execute("""CREATE TABLE Operator(OperatorNavn text NOT NULL, AntallVogntyper integer NOT NULL,
PRIMARY KEY(OperatorNavn))""")
cursor.execute("""CREATE TABLE Kunde(KundeNr text NOT NULL, Navn text NOT NULL, Epostadresse text NOT NULL, Telefonnummer integer NOT NULL,
PRIMARY KEY(KundeNr))""")
cursor.execute("""CREATE TABLE Kundeordre(OrdreNr integer NOT NULL, Dato date NOT NULL, Tid time NOT NULL, AntallBilletter integer NOT NULL, TogruteID integer NOT NULL, KundeNr integer NOT NULL,
PRIMARY KEY(OrdreNr),
FOREIGN KEY(TogruteID) REFERENCES Togrute(TogruteID)
ON UPDATE CASCADE
ON DELETE NO ACTION,
FOREIGN KEY(KundeNr) REFERENCES Kunde(KundeNr)
ON UPDATE CASCADE
ON DELETE NO ACTION)""")
cursor.execute("""CREATE TABLE Vognoppsett(VognoppsettID integer NOT NULL, AntallSovevogner integer NOT NULL, AntallSittevogner integer NOT NULL,
PRIMARY KEY(VognoppsettID))""")
cursor.execute("""CREATE TABLE VognerIOppsett(VognID integer NOT NULL, VognoppsettID integer NOT NULL,
PRIMARY KEY(VognID, VognoppsettID),
FOREIGN KEY(VognID) REFERENCES Vogn(VognID)
ON UPDATE CASCADE
ON DELETE NO ACTION)""")
cursor.execute("""CREATE TABLE Vogn(VognID integer NOT NULL, VognTypeNavn text NOT NULL,
PRIMARY KEY(VognID))""")
cursor.execute("""CREATE TABLE Sittevogn(VognID integer NOT NULL, AntallStolrader integer NOT NULL, AntallSeterPerRad integer NOT NULL,
PRIMARY KEY(VognID))""")
cursor.execute("""CREATE TABLE Sovevogn(VognID integer NOT NULL, AntallSovekupeer integer NOT NULL,
PRIMARY KEY(VognID))""")
cursor.execute("""CREATE TABLE Sete(VognID integer NOT NULL, SeteNr integer NOT NULL,
PRIMARY KEY(VognID, SeteNr),
FOREIGN KEY(VognID) REFERENCES Vogn(VognID)
ON UPDATE CASCADE
ON DELETE NO ACTION)""")
cursor.execute("""CREATE TABLE Seng(VognID integer NOT NULL, Sengnr text NOT NULL,
PRIMARY KEY(VognID, SengNr),
FOREIGN KEY(VognID) REFERENCES Vogn(VognID)
ON UPDATE CASCADE
ON DELETE NO ACTION)""")
cursor.execute("""CREATE TABLE Billett(BillettID text NOT NULL, Type text NOT NULL, Dato text NOT NULL, OrdreNr integer NOT NULL, VognID integer NOT NULL, SeteNr integer, SengNr integer, Startstasjon text NOT NULL, Endestasjon text NOT NULL,
PRIMARY KEY(BillettID),
FOREIGN KEY(OrdreNr) REFERENCES KundeOrdre(OrdreNr)
ON UPDATE CASCADE
ON DELETE NO ACTION,
FOREIGN KEY(VognID, SeteNr) REFERENCES Sete(VognID, SeteNr)
ON UPDATE CASCADE
ON DELETE NO ACTION,
FOREIGN KEY(VognID, SengNr) REFERENCES Seng(VognID, SengNr)
ON UPDATE CASCADE
ON DELETE NO ACTION,
FOREIGN KEY(Startstasjon) REFERENCES Startstasjon(JernbanestasjonNavn)
ON UPDATE CASCADE
ON DELETE NO ACTION,
FOREIGN KEY(Endestasjon) REFERENCES Endestasjon(JernbanestasjonNavn)
ON UPDATE CASCADE
ON DELETE NO ACTION)""")
# Legge inn data i tabeller
cursor.execute("INSERT INTO Operator VALUES ('SJ', 2)")
# Definere banestrekning
cursor.execute("INSERT INTO Jernbanestasjon VALUES ('Trondheim S', 5.1)")
cursor.execute("INSERT INTO Jernbanestasjon VALUES ('Steinkjer', 3.6)")
cursor.execute("INSERT INTO Jernbanestasjon VALUES ('Mosjøen', 6.8)")
cursor.execute("INSERT INTO Jernbanestasjon VALUES ('Mo i Rana', 3.5)")
cursor.execute("INSERT INTO Jernbanestasjon VALUES ('Fauske', 34.0)")
cursor.execute("INSERT INTO Jernbanestasjon VALUES ('Bodø', 4.1)")
cursor.execute("INSERT INTO Banestrekning VALUES ('Nordlandsbanen', 'Diesel', 5, 'Nord', 'SJ', 'Trondheim S', 'Bodø')")
cursor.execute("INSERT INTO Delstrekning VALUES (1, 120, 2, 'Nordlandsbanen', 'Trondheim S', 'Steinkjer')")
cursor.execute("INSERT INTO Delstrekning VALUES (2, 280, 1, 'Nordlandsbanen', 'Steinkjer', 'Mosjøen')")
cursor.execute("INSERT INTO Delstrekning VALUES (3, 90, 1, 'Nordlandsbanen', 'Mosjøen', 'Mo i Rana')")
cursor.execute("INSERT INTO Delstrekning VALUES (4, 170, 1, 'Nordlandsbanen', 'Mo i Rana', 'Fauske')")
cursor.execute("INSERT INTO Delstrekning VALUES (5, 60, 1, 'Nordlandsbanen', 'Fauske', 'Bodø')")
# Dagtog fra Trondheim til Bodø
# Vognoppsett dagtog
cursor.execute("INSERT INTO Vogn VALUES (1, 'SJ-sittevogn-1')")
cursor.execute("INSERT INTO Vogn VALUES (2, 'SJ-sittevogn-1')")
cursor.execute("INSERT INTO Sittevogn VALUES (1, 3, 4)")
cursor.execute("INSERT INTO Sittevogn VALUES (2, 3, 4)")
cursor.execute("INSERT INTO Sete VALUES (1, 1)")
cursor.execute("INSERT INTO Sete VALUES (1, 2)")
cursor.execute("INSERT INTO Sete VALUES (1, 3)")
cursor.execute("INSERT INTO Sete VALUES (1, 4)")
cursor.execute("INSERT INTO Sete VALUES (1, 5)")
cursor.execute("INSERT INTO Sete VALUES (1, 6)")
cursor.execute("INSERT INTO Sete VALUES (1, 7)")
cursor.execute("INSERT INTO Sete VALUES (1, 8)")
cursor.execute("INSERT INTO Sete VALUES (1, 9)")
cursor.execute("INSERT INTO Sete VALUES (1, 10)")
cursor.execute("INSERT INTO Sete VALUES (1, 11)")
cursor.execute("INSERT INTO Sete VALUES (1, 12)")
cursor.execute("INSERT INTO Sete VALUES (2, 1)")
cursor.execute("INSERT INTO Sete VALUES (2, 2)")
cursor.execute("INSERT INTO Sete VALUES (2, 3)")
cursor.execute("INSERT INTO Sete VALUES (2, 4)")
cursor.execute("INSERT INTO Sete VALUES (2, 5)")
cursor.execute("INSERT INTO Sete VALUES (2, 6)")
cursor.execute("INSERT INTO Sete VALUES (2, 7)")
cursor.execute("INSERT INTO Sete VALUES (2, 8)")
cursor.execute("INSERT INTO Sete VALUES (2, 9)")
cursor.execute("INSERT INTO Sete VALUES (2, 10)")
cursor.execute("INSERT INTO Sete VALUES (2, 11)")
cursor.execute("INSERT INTO Sete VALUES (2, 12)")
cursor.execute("INSERT INTO Vognoppsett VALUES (1, 0, 2)")
cursor.execute("INSERT INTO VognerIOppsett VALUES (1, 1)")
cursor.execute("INSERT INTO VognerIOppsett VALUES (2, 1)")
# Togrutetabell
cursor.execute("INSERT INTO Togrute VALUES (1, 'Nordlandsbanen', 1, 'SJ', 'Trondheim S', 'Bodø')")
cursor.execute("INSERT INTO Togforekomst VALUES (1, 'Mandag', '2023-04-03')")
cursor.execute("INSERT INTO Togforekomst VALUES (1, 'Tirsdag', '2023-04-04')")
cursor.execute("INSERT INTO Togforekomst VALUES (1, 'Onsdag', '2023-04-05')")
cursor.execute("INSERT INTO Togforekomst VALUES (1, 'Torsdag', '2023-04-06')")
cursor.execute("INSERT INTO Togforekomst VALUES (1, 'Fredag', '2023-04-07')")
cursor.execute("INSERT INTO Startstasjon VALUES ('Trondheim S', 1, '07:49')")
cursor.execute("INSERT INTO Mellomstasjon VALUES ('Steinkjer', 1, '09:51', '09:51')")
cursor.execute("INSERT INTO Mellomstasjon VALUES ('Mosjøen', 1, '13:20', '13:20')")
cursor.execute("INSERT INTO Mellomstasjon VALUES ('Mo i Rana', 1, '14:31', '14:31')")
cursor.execute("INSERT INTO Mellomstasjon VALUES ('Fauske', 1, '16:49', '16:49')")
cursor.execute("INSERT INTO Endestasjon VALUES ('Bodø', 1, '17:34')")
# Nattog fra Trondheim til Bodø
# Vognoppsett nattog
cursor.execute("INSERT INTO Vogn VALUES (3, 'SJ-sovevogn-1')")
cursor.execute("INSERT INTO Sovevogn VALUES (3, 4)")
cursor.execute("INSERT INTO Seng VALUES (3, 1)")
cursor.execute("INSERT INTO Seng VALUES (3, 2)")
cursor.execute("INSERT INTO Seng VALUES (3, 3)")
cursor.execute("INSERT INTO Seng VALUES (3, 4)")
cursor.execute("INSERT INTO Seng VALUES (3, 5)")
cursor.execute("INSERT INTO Seng VALUES (3, 6)")
cursor.execute("INSERT INTO Seng VALUES (3, 7)")
cursor.execute("INSERT INTO Seng VALUES (3, 8)")
cursor.execute("INSERT INTO Vognoppsett VALUES (2, 1, 1)")
cursor.execute("INSERT INTO VognerIOppsett VALUES (1, 2)")
cursor.execute("INSERT INTO VognerIOppsett VALUES (3, 2)")
# Togrutetabell
cursor.execute("INSERT INTO Togrute VALUES (2, 'Nordlandsbanen', 2, 'SJ', 'Trondheim S', 'Bodø')")
cursor.execute("INSERT INTO Togforekomst VALUES (2, 'Mandag', '2023-04-03')")
cursor.execute("INSERT INTO Togforekomst VALUES (2, 'Tirsdag', '2023-04-04')")
cursor.execute("INSERT INTO Togforekomst VALUES (2, 'Onsdag', '2023-04-05')")
cursor.execute("INSERT INTO Togforekomst VALUES (2, 'Torsdag', '2023-04-06')")
cursor.execute("INSERT INTO Togforekomst VALUES (2, 'Fredag', '2023-04-07')")
cursor.execute("INSERT INTO Togforekomst VALUES (2, 'Lørdag', '2023-04-08')")
cursor.execute("INSERT INTO Togforekomst VALUES (2, 'Søndag', '2023-04-09')")
cursor.execute("INSERT INTO Startstasjon VALUES ('Trondheim S', 2, '23:05')")
cursor.execute("INSERT INTO Mellomstasjon VALUES ('Steinkjer', 2, '00:57', '00:57')")
cursor.execute("INSERT INTO Mellomstasjon VALUES ('Mosjøen', 2, '04:41', '04:41')")
cursor.execute("INSERT INTO Mellomstasjon VALUES ('Mo i Rana', 2, '05:55', '05:55')")
cursor.execute("INSERT INTO Mellomstasjon VALUES ('Fauske', 2, '08:19', '08:19')")
cursor.execute("INSERT INTO Endestasjon VALUES ('Bodø', 2, '09:05')")
# Morgentog fra Mo i Rana til Trondheim
# Vognoppsett morgentog
cursor.execute("INSERT INTO Vognoppsett VALUES (3, 0, 1)")
cursor.execute("INSERT INTO VognerIOppsett VALUES (1, 3)")
# Togrutetabell
cursor.execute("INSERT INTO Togrute VALUES (3, 'Nordlandsbanen', 3, 'SJ', 'Mo i Rana', 'Trondheim S')")
cursor.execute("INSERT INTO Togforekomst VALUES (3, 'Mandag', '2023-04-03')")
cursor.execute("INSERT INTO Togforekomst VALUES (3, 'Tirsdag', '2023-04-04')")
cursor.execute("INSERT INTO Togforekomst VALUES (3, 'Onsdag', '2023-04-05')")
cursor.execute("INSERT INTO Togforekomst VALUES (3, 'Torsdag', '2023-04-06')")
cursor.execute("INSERT INTO Togforekomst VALUES (3, 'Fredag', '2023-04-07')")
cursor.execute("INSERT INTO Startstasjon VALUES ('Mo i Rana', 3, '08:11')")
cursor.execute("INSERT INTO Mellomstasjon VALUES ('Mosjøen', 3, '09:14', '09:14')")
cursor.execute("INSERT INTO Mellomstasjon VALUES ('Steinkjer', 3, '12:31', '12:31')")
cursor.execute("INSERT INTO Endestasjon VALUES ('Trondheim S', 3, '14:13')")
print("Initialiseringen var vellykket.")
except:
print("Noe gikk galt.")
con.commit()
con.close()
\ No newline at end of file
No preview for this file type
...@@ -163,6 +163,7 @@ INSERT INTO Sete VALUES (2, 11); ...@@ -163,6 +163,7 @@ INSERT INTO Sete VALUES (2, 11);
INSERT INTO Sete VALUES (2, 12); INSERT INTO Sete VALUES (2, 12);
INSERT INTO Vognoppsett VALUES (1, 0, 2); INSERT INTO Vognoppsett VALUES (1, 0, 2);
INSERT INTO VognerIOppsett VALUES (1, 1); INSERT INTO VognerIOppsett VALUES (1, 1);
INSERT INTO VognerIOppsett VALUES (2, 1);
--Togrutetabell --Togrutetabell
INSERT INTO Togrute VALUES (1, "Nordlandsbanen", 1, "SJ", "Trondheim S", "Bodø"); INSERT INTO Togrute VALUES (1, "Nordlandsbanen", 1, "SJ", "Trondheim S", "Bodø");
INSERT INTO Togforekomst VALUES (1, "Mandag", "2023-04-03"); INSERT INTO Togforekomst VALUES (1, "Mandag", "2023-04-03");
......
# Her programmerer vi billettkjøp
import sqlite3
con = sqlite3.connect("jernbanesystemdb.db")
cursor = con.cursor()
# def hentElementer(liste, teller): # Lager liste med alle elementene med indeks lik "teller"
# return [item[teller] for item in liste]
indeksTilStartstasjon = 0
indeksTilEndestasjon = 5
listeMedSeter = [[True, False], [True, True], [True, True], [True, True], [True, True], [True, True]]
antallSeteBilletter = 1
def hentElementer(liste, teller):
# Lager liste med alle elementene med indeks lik "teller"
return [item[teller] for item in liste]
def finneLedigSete(listeMedSeter):
teller = 0
tildeltSete = None
for _ in range(len(listeMedSeter)):
elementer = hentElementer(listeMedSeter, teller)
if all(elementer):
tildeltSete = teller + 1
else:
teller += 1
return tildeltSete
# Modifisert liste, har bare med delstrekningene som gjelder
modifisertListeMedSeter = listeMedSeter[indeksTilStartstasjon:indeksTilEndestasjon+1]
# Setter sete som false på delstrekningen det blir brukt
if antallSeteBilletter == 1:
tildeltSete = finneLedigSete(modifisertListeMedSeter)
for i in range(indeksTilStartstasjon, indeksTilEndestasjon + 1):
indeksTilTildeltSete = tildeltSete - 1
listeMedSeter[i][indeksTilTildeltSete] = False
elif antallSeteBilletter > 1:
tildelteSeter = []
for _ in range(antallSeteBilletter):
tildeltSete = finneLedigSete(modifisertListeMedSeter)
tildelteSeter.append(tildeltSete)
for i in range(indeksTilStartstasjon, indeksTilEndestasjon + 1):
indeksTilTildeltSete = tildeltSete - 1
listeMedSeter[i][indeksTilTildeltSete] = False
print(listeMedSeter)
print(tildeltSete)
# def finneLedigSete():
# teller = 0
# tildeltSete = None
# for _ in range(len(modifisertListeMedSeter)):
# elementer = hentElementer(modifisertListeMedSeter, teller)
# if all(elementer):
# tildeltSete = teller + 1
# else:
# teller += 1
# return tildeltSete
con.close()
\ No newline at end of file
# import sqlite3
# import re
# from datetime import date
# from datetime import datetime as dt
# con = sqlite3.connect("jernbanesystemdb.db")
# cursor = con.cursor()
# print("Dette er en database for jernbanen i Norge. Hva vil du gjøre?")
# print("a = Finne togruter som er innom en jernbanestasjon")
# print("b = Søke etter togrute mellom startstasjon og endestasjon og kjøpe billett")
# print("c = Registrere deg som ny kunde")
# print("d = Hente kjøpshistorikk")
# valg = input("Skriv inn veiledende bokstav: ")
# def funksjonA():
# # Henter JernbanestasjonNavn fra DB og sjekker samtidig at det er en gyldig input
# jernbanestasjon = input("Hvilken jernbanestasjon er du ute etter? ")
# while (sjekkeGyldigeJernbanestasjoner(jernbanestasjon) == False):
# jernbanestasjon = input("Oppgitt jernbanestasjon er ugyldig. Prøv på nytt: ")
# # Sjekker om oppgitt JernbanestasjonNavn er en startstasjon, endestasjon eller mellomstasjon
# cursor.execute("SELECT JernbanestasjonNavn FROM Startstasjon WHERE JernbanestasjonNavn = ?", (jernbanestasjon,))
# startstasjon = [item[0] for item in cursor.fetchall()]
# cursor.execute("SELECT JernbanestasjonNavn FROM Endestasjon WHERE JernbanestasjonNavn = ?", (jernbanestasjon,))
# endestasjon = [item[0] for item in cursor.fetchall()]
# cursor.execute("SELECT JernbanestasjonNavn FROM Mellomstasjon WHERE JernbanestasjonNavn = ?", (jernbanestasjon,))
# mellomstasjon = [item[0] for item in cursor.fetchall()]
# # Filtrer på dag
# gyldigeDager = ["mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag", "søndag"]
# dag = input("Hvilken ukedag ønsker du å reise? ")
# while dag.lower() not in gyldigeDager:
# dag = input("Ugyldig dag oppgitt. Prøv på nytt: ")
# # Edge-cases der den oppgitte jernbanestasjonen er flere typer stasjoner
# # Jernbanestasjon er startstasjon OG mellomstasjon
# if jernbanestasjon in startstasjon and mellomstasjon:
# startstasjonavganger = finneStartstasjonavganger(dag, jernbanestasjon)
# mellomstasjonavganger = finneMellomstasjonavganger(dag, jernbanestasjon)
# togruter = startstasjonavganger + mellomstasjonavganger
# # Jernbanestasjon er mellomstasjon OG endestasjon
# elif jernbanestasjon in mellomstasjon and endestasjon:
# mellomstasjonavganger = finneEndestasjonavganger(dag, jernbanestasjon)
# endestasjonavganger = finneMellomstasjonavganger(dag, jernbanestasjon)
# togruter = mellomstasjonavganger + endestasjonavganger
# # Jernbanestasjon er startstasjon OG endestasjon
# elif jernbanestasjon in startstasjon and endestasjon:
# startstasjonavganger = finneStartstasjonavganger(dag, jernbanestasjon)
# endestasjonavganger = finneEndestasjonavganger(dag, jernbanestasjon)
# togruter = startstasjonavganger + endestasjonavganger
# # Jernbanestasjon er startstasjon OG endestasjon OG mellomstasjon
# elif jernbanestasjon in startstasjon and endestasjon and mellomstasjon:
# startstasjonavganger = finneStartstasjonavganger(dag, jernbanestasjon)
# endestasjonavganger = finneEndestasjonavganger(dag, jernbanestasjon)
# mellomstasjonavganger = finneMellomstasjonavganger(dag, jernbanestasjon)
# togruter = startstasjonavganger + endestasjonavganger + mellomstasjonavganger
# else:
# if len(startstasjon) > 0:
# # Den oppgitte jernbanestasjonen er en startstasjon
# togruter = finneStartstasjonavganger(dag, jernbanestasjon)
# elif len(endestasjon) > 0:
# # Den oppgitte jernbanestasjonen er en endestasjon
# togruter = finneEndestasjonavganger(dag, jernbanestasjon)
# else:
# # Den oppgitte jernbanestasjonen er en mellomstasjon
# togruter = finneMellomstasjonavganger(dag, jernbanestasjon)
# print("Her er togrutene som er innom jernbanestasjonen på denne dagen:")
# print("[Dag, TogruteID, Avgangstid, Destinasjon]")
# for entry in togruter:
# print(entry)
# def funksjonB():
# # Dette er en test, hører ikke hjemme her
# cursor.execute("SELECT Navn FROM Kunde")
# kunder = cursor.fetchall()
# print(kunder)
# def funksjonC():
# navn = input("Navn (fornavn og etternavn): ")
# telefonnummer = input("Telefonnummer: ")
# epostadresse = input("E-postadresse: ")
# while (validereNavn(navn) != True):
# print("Navnet du skrev inn er ikke riktig formatert, prøv igjen.")
# navn = input("Navn (fornavn og etternavn): ")
# while (validereTelefonnummer(telefonnummer) != True):
# print("Telefonnummeret du skrev inn er ikke riktig formatert, prøv igjen.")
# telefonnummer = input("Telefonnummer: ")
# while (validereEpost(epostadresse) != True):
# print("Eposten du skrev inn er ikke riktig formatert, prøv igjen.")
# epostadresse = input("E-postadresse: ")
# cursor.execute("SELECT COUNT(KundeNr) FROM Kunde")
# antallKunder = cursor.fetchone()
# kundenummer = int(antallKunder[0]) + 1
# cursor.execute("INSERT INTO Kunde VALUES (?, ?, ?, ?)", (kundenummer, navn, telefonnummer, epostadresse))
# print("Du er nå registrert som kunde. Ditt kundenummer er", kundenummer, ".")
# print("Bruk dette for å bestille billetter og sjekke kundehistorikk senere.")
# def funksjonD():
# # For en bruker skal man kunne finne all informasjon om de kjøpene hen har gjort for fremtidige reiser.
# dato = date.today()
# cursor.execute("SELECT * FROM Kundeordre NATURAL JOIN Kunde WHERE Kundeordre.Dato >= ?" ,(dato))
# return
# # HJELPEFUNKSJONER
# def sjekkeGyldigeJernbanestasjoner(jernbanestasjon):
# cursor.execute("SELECT JernbanestasjonNavn FROM Jernbanestasjon")
# gyldige = [item[0] for item in cursor.fetchall()]
# if jernbanestasjon not in gyldige:
# return False
# else:
# return True
# def finneStartstasjonavganger(dag, jernbanestasjon):
# cursor.execute("""SELECT Togforekomst.Dag, Togrute.TogruteID, Startstasjon.avgangstid, Togrute.Endestasjon
# FROM ((Togforekomst inner join Togrute on Togforekomst.TogruteID = Togrute.TogruteID) inner join Startstasjon on Togforekomst.TogruteID = Startstasjon.TogruteID)
# WHERE Dag = ? and JernbanestasjonNavn = ?""", (dag, jernbanestasjon))
# return cursor.fetchall()
# def finneMellomstasjonavganger(dag, jernbanestasjon):
# cursor.execute("""SELECT Togforekomst.Dag, Togrute.TogruteID, Mellomstasjon.avgangstid, Togrute.Endestasjon
# FROM ((Togforekomst inner join Togrute on Togforekomst.TogruteID = Togrute.TogruteID) inner join Mellomstasjon on Togforekomst.TogruteID = Mellomstasjon.TogruteID)
# WHERE Dag = ? and JernbanestasjonNavn = ?""", (dag, jernbanestasjon))
# return cursor.fetchall()
# def finneEndestasjonavganger(dag, jernbanestasjon):
# cursor.execute("""SELECT Togforekomst.Dag, Togrute.TogruteID, Endestasjon.avgangstid, Togrute.Endestasjon
# FROM (Togforekomst inner join Togrute on Togforekomst.TogruteID = Togrute.TogruteID) inner join Endestasjon on Togforekomst.TogruteID = Endestasjon.TogruteID
# WHERE Dag = ? and JernbanestasjonNavn = ?""", (dag, jernbanestasjon))
# return cursor.fetchall()
# def finneTogruterFraStartstasjonTilMellomstasjon(startstasjon, endestasjon, dato):
# cursor.execute("""SELECT DISTINCT Togforekomst.TogruteID, Startstasjon.JernbanestasjonNavn, Startstasjon.avgangstid, Mellomstasjon.JernbanestasjonNavn, Mellomstasjon.ankomsttid, Togforekomst.Dato
# FROM (((Mellomstasjon left outer join Startstasjon on Startstasjon.TogruteID == Mellomstasjon.TogruteID) inner join Togrute on Togrute.TogruteID == Startstasjon.TogruteID) inner join Togforekomst on Togforekomst.TogruteID == Togrute.TogruteID)
# WHERE Startstasjon.JernbanestasjonNavn = ? and Mellomstasjon.JernbanestasjonNavn = ? and Togforekomst.Dato = ?
# ORDER BY Startstasjon.Avgangstid ASC""", (startstasjon, endestasjon, dato))
# return cursor.fetchall()
# def finneTogruterFraStartstasjonTilEndestasjon(startstasjon, endestasjon, dato):
# cursor.execute("""SELECT DISTINCT Togforekomst.TogruteID, Startstasjon.JernbanestasjonNavn, Startstasjon.avgangstid, Endestasjon.JernbanestasjonNavn, Endestasjon.ankomsttid, Togforekomst.Dato
# FROM (((Endestasjon left outer join Startstasjon on Startstasjon.TogruteID == Endestasjon.TogruteID) inner join Togrute on Togrute.TogruteID == Startstasjon.TogruteID) inner join Togforekomst on Togforekomst.TogruteID == Togrute.TogruteID)
# WHERE Startstasjon.JernbanestasjonNavn = ? and Endestasjon.JernbanestasjonNavn = ? and Togforekomst.Dato = ?
# ORDER BY Startstasjon.Avgangstid ASC""", (startstasjon, endestasjon, dato))
# return cursor.fetchall()
# def finneTogruterFraMellomstasjonTilMellomstasjon(startstasjon, endestasjon, dato):
# cursor.execute("""SELECT DISTINCT Togforekomst.TogruteID, MStart.JernbanestasjonNavn, MStart.avgangstid, MEnde.JernbanestasjonNavn, MEnde.ankomsttid, Togforekomst.Dato
# FROM (((Mellomstasjon AS MEnde left outer join Mellomstasjon AS MStart on MStart.TogruteID == MEnde.TogruteID) inner join Togrute on Togrute.TogruteID == MStart.TogruteID) inner join Togforekomst on Togforekomst.TogruteID == Togrute.TogruteID)
# WHERE MStart.JernbanestasjonNavn = ? and MEnde.JernbanestasjonNavn = ? and Togforekomst.Dato = ? and MStart.Avgangstid <= MEnde.Ankomsttid
# ORDER BY MStart.Avgangstid ASC""", (startstasjon, endestasjon, dato))
# return cursor.fetchall()
# def finneTogruterFraMellomstasjonTilEndestasjon(startstasjon, endestasjon, dato):
# cursor.execute("""SELECT DISTINCT Togforekomst.TogruteID, Mellomstasjon.JernbanestasjonNavn, Mellomstasjon.avgangstid, Endestasjon.JernbanestasjonNavn, Endestasjon.ankomsttid, Togforekomst.Dato
# FROM (((Endestasjon left outer join Mellomstasjon on Mellomstasjon.TogruteID == Endestasjon.TogruteID) inner join Togrute on Togrute.TogruteID == Mellomstasjon.TogruteID) inner join Togforekomst on Togforekomst.TogruteID == Togrute.TogruteID)
# WHERE Mellomstasjon.JernbanestasjonNavn = ? and Endestasjon.JernbanestasjonNavn = ? and Togforekomst.Dato = ?
# ORDER BY Mellomstasjon.Avgangstid ASC""", (startstasjon, endestasjon, dato))
# return cursor.fetchall()
# def convertDato(datoString):
# try:
# dato = dt.strptime(datoString, '%Y-%m-%d').date()
# return dato
# except ValueError:
# return None
# def testKlokkeslett():
# klokkeslettString = input("Hvilket klokkeslett er avreisen? Format HH:MM: ")
# try:
# klokkeslett = dt.strptime(klokkeslettString, "%H:%M").time()
# return klokkeslett
# except ValueError:
# print("Ugyldig klokkeslett, skal være på formatet HH:MM")
# testKlokkeslett()
# def validereNavn(navn):
# if (navn == "" or len(re.split("\\s+", navn)) != 2 or re.fullmatch("^[A-ZÆØÅ][a-zæøå]+\s[A-ZÆØÅ][a-zæøå]+$", navn) == False):
# return False
# for delAvNavn in re.split("\\s+", navn):
# if (len(delAvNavn) < 2):
# return False
# return True
# def validereTelefonnummer(telefonnummer):
# tlfUtenMellomrom = telefonnummer.replace(" ", "")
# if len(tlfUtenMellomrom) > 8:
# if tlfUtenMellomrom.startswith("+479") or tlfUtenMellomrom.startswith("+474"):
# if len(tlfUtenMellomrom) == 11:
# return True
# elif len(tlfUtenMellomrom) == 8:
# if tlfUtenMellomrom.startswith("9") or tlfUtenMellomrom.startswith("4"):
# return True
# else:
# return False
# def validereEpost(epostadresse):
# landskoder = ["ad", "ae", "af", "ag", "ai", "al", "am", "ao", "aq",
# "ar", "as", "at", "au", "aw", "ax", "az", "ba", "bb", "bd", "be", "bf", "bg", "bh", "bi", "bj", "bl", "bm",
# "bn", "bo", "bq", "br", "bs", "bt", "bv", "bw", "by", "bz", "ca", "cc", "cd", "cf", "cg", "ch", "ci", "ck",
# "cl", "cm", "cn", "co", "cr", "cu", "cv", "cw", "cx", "cy", "cz", "de", "dj", "dk", "dm", "do", "dz", "ec",
# "ee", "eg", "eh", "er", "es", "et", "fi", "fj", "fk", "fm", "fo", "fr", "ga", "gb", "gd", "ge", "gf", "gg",
# "gh", "gi", "gl", "gm", "gn", "gp", "gq", "gr", "gs", "gt", "gu", "gw", "gy", "hk", "hm", "hn", "hr", "ht",
# "hu", "id", "ie", "il", "im", "in", "io", "iq", "ir", "is", "it", "je", "jm", "jo", "jp", "ke", "kg", "kh",
# "ki", "km", "kn", "kp", "kr", "kw", "ky", "kz", "la", "lb", "lc", "li", "lk", "lr", "ls", "lt", "lu", "lv",
# "ly", "ma", "mc", "md", "me", "mf", "mg", "mh", "mk", "ml", "mm", "mn", "mo", "mp", "mq", "mr", "ms", "mt",
# "mu", "mv", "mw", "mx", "my", "mz", "na", "nc", "ne", "nf", "ng", "ni", "nl", "no", "np", "nr", "nu", "nz",
# "om", "pa", "pe", "pf", "pg", "ph", "pk", "pl", "pm", "pn", "pr", "ps", "pt", "pw", "py", "qa", "re", "ro",
# "rs", "ru", "rw", "sa", "sb", "sc", "sd", "se", "sg", "sh", "si", "sj", "sk", "sl", "sm", "sn", "so", "sr",
# "ss", "st", "sv", "sx", "sy", "sz", "tc", "td", "tf", "tg", "th", "tj", "tk", "tl", "tm", "tn", "to", "tr",
# "tt", "tv", "tw", "tz", "ua", "ug", "um", "us", "uy", "uz", "va", "vc", "ve", "vg", "vi", "vn", "vu", "wf",
# "ws", "ye", "yt", "za", "zm", "zw"]
# # Her har vi bare sagt at dette formatet er gyldig, men den vil f.eks. ikke godta en @stud.ntnu.no e-post.
# # Vi valgte å ikke bruke noe mer tid på dette ettersom e-post-validering ikke er fokus i prosjektet.
# if re.fullmatch("[a-z]{2,}[@][a-z0-9]{1,}[.][a-z]{2}", epostadresse.lower()):
# splitEpost = re.split("[\\W]", epostadresse)
# landskode = splitEpost[2]
# if (epostadresse != "" and landskoder.count(landskode) > 0):
# return True
# return False
# return False
# # HER KJØRES DE ULIKE VALGENE
# if valg == "a":
# funksjonA()
# elif valg == "b":
# funksjonB()
# elif valg == "c":
# funksjonC()
# elif valg == "d":
# funksjonD()
# else:
# print("Input var ugyldig. Prøv igjen.")
# con.commit()
# con.close()
\ No newline at end of file
...@@ -28,12 +28,10 @@ def sokeitogreiser(): ...@@ -28,12 +28,10 @@ def sokeitogreiser():
datoIMorgen = dato + datetime.timedelta(days=1) datoIMorgen = dato + datetime.timedelta(days=1)
# Validering av tid # Validering av tid
klokkeslettString = input("Hvilket klokkeslett vil du søke fra? Format HH:MM: ") klokkeslett = input("Hvilket klokkeslett vil du søke fra? Format HH:MM: ")
while (convertKlokkeslett(klokkeslettString) == None): while (convertKlokkeslett(klokkeslett) == None):
print("Ugyldig klokkeslett, skal være på formatet HH:MM.") print("Ugyldig klokkeslett, skal være på formatet HH:MM.")
klokkeslettString = input("Hvilket klokkeslett vil du søke fra? Format HH:MM: ") klokkeslett = input("Hvilket klokkeslett vil du søke fra? Format HH:MM: ")
klokkeslett = convertKlokkeslett(klokkeslettString)
# Sjekker om oppgitt startstasjon er av typen startstasjon, endestasjon eller mellomstasjon # Sjekker om oppgitt startstasjon er av typen startstasjon, endestasjon eller mellomstasjon
cursor.execute("SELECT JernbanestasjonNavn FROM Startstasjon WHERE JernbanestasjonNavn = ?", (startstasjon,)) cursor.execute("SELECT JernbanestasjonNavn FROM Startstasjon WHERE JernbanestasjonNavn = ?", (startstasjon,))
...@@ -53,26 +51,25 @@ def sokeitogreiser(): ...@@ -53,26 +51,25 @@ def sokeitogreiser():
cursor.execute("SELECT JernbanestasjonNavn FROM Mellomstasjon WHERE JernbanestasjonNavn = ?", (endestasjon,)) cursor.execute("SELECT JernbanestasjonNavn FROM Mellomstasjon WHERE JernbanestasjonNavn = ?", (endestasjon,))
mellomstasjon2 = [item[0] for item in cursor.fetchall()] mellomstasjon2 = [item[0] for item in cursor.fetchall()]
# Hvis startstasjonen er av type startstasjon og endestasjonen er av type mellomstasjon # Hvis startstasjonen er av type startstasjon og endestasjonen er av type mellomstasjon
if (len(startstasjon1) > 0 and len(mellomstasjon2) > 0): if (len(startstasjon1) > 0 and len(mellomstasjon2) > 0):
avgangerIDag = finneTogruterFraStartstasjonTilMellomstasjon(startstasjon, endestasjon, dato, klokkeslett) avgangerIDag = finneTogruterFraStartstasjonTilMellomstasjon(startstasjon, endestasjon, dato, klokkeslett)
avgangerIMorgen = finneTogruterFraStartstasjonTilMellomstasjon(startstasjon, endestasjon, datoIMorgen, klokkeslett) avgangerIMorgen = finneTogruterFraStartstasjonTilMellomstasjonNesteDag(startstasjon, endestasjon, datoIMorgen)
# Hvis startstasjonen er av type startstasjon og endestasjonen er av type endestasjon # Hvis startstasjonen er av type startstasjon og endestasjonen er av type endestasjon
elif (len(startstasjon1) > 0 and len(endestasjon2) > 0): elif (len(startstasjon1) > 0 and len(endestasjon2) > 0):
avgangerIDag = finneTogruterFraStartstasjonTilEndestasjon(startstasjon, endestasjon, dato, klokkeslett) avgangerIDag = finneTogruterFraStartstasjonTilEndestasjon(startstasjon, endestasjon, dato, klokkeslett)
avgangerIMorgen = finneTogruterFraStartstasjonTilEndestasjon(startstasjon, endestasjon, datoIMorgen, klokkeslett) avgangerIMorgen = finneTogruterFraStartstasjonTilEndestasjonNesteDag(startstasjon, endestasjon, datoIMorgen)
# Hvis startstasjonen er av type mellomstasjon og endestasjonen er av type mellomstasjon # Hvis startstasjonen er av type mellomstasjon og endestasjonen er av type mellomstasjon
elif (len(mellomstasjon1) > 0 and len(mellomstasjon2) > 0): elif (len(mellomstasjon1) > 0 and len(mellomstasjon2) > 0):
avgangerIDag = finneTogruterFraMellomstasjonTilMellomstasjon(startstasjon, endestasjon, dato, klokkeslett) avgangerIDag = finneTogruterFraMellomstasjonTilMellomstasjon(startstasjon, endestasjon, dato, klokkeslett)
avgangerIMorgen = finneTogruterFraMellomstasjonTilMellomstasjon(startstasjon, endestasjon, datoIMorgen, klokkeslett) avgangerIMorgen = finneTogruterFraMellomstasjonTilMellomstasjonNesteDag(startstasjon, endestasjon, datoIMorgen)
# Hvis startstasjonen er av type mellomstasjon og endestasjonen er av type endestasjon # Hvis startstasjonen er av type mellomstasjon og endestasjonen er av type endestasjon
elif (len(mellomstasjon1) > 0 and len(endestasjon2) > 0): elif (len(mellomstasjon1) > 0 and len(endestasjon2) > 0):
avgangerIDag = finneTogruterFraMellomstasjonTilEndestasjon(startstasjon, endestasjon, dato, klokkeslett) avgangerIDag = finneTogruterFraMellomstasjonTilEndestasjon(startstasjon, endestasjon, dato, klokkeslett)
avgangerIMorgen = finneTogruterFraMellomstasjonTilEndestasjon(startstasjon, endestasjon, datoIMorgen, klokkeslett) avgangerIMorgen = finneTogruterFraMellomstasjonTilEndestasjonNesteDag(startstasjon, endestasjon, datoIMorgen)
avganger = avgangerIDag + avgangerIMorgen avganger = avgangerIDag + avgangerIMorgen
print("Her er togrutene som går fra", startstasjon, "til", endestasjon, "den", dato, "og den", datoIMorgen) print("Her er togrutene som går fra", startstasjon, "til", endestasjon, "den", dato, "og den", datoIMorgen)
...@@ -89,6 +86,13 @@ def finneTogruterFraStartstasjonTilMellomstasjon(startstasjon, endestasjon, dato ...@@ -89,6 +86,13 @@ def finneTogruterFraStartstasjonTilMellomstasjon(startstasjon, endestasjon, dato
ORDER BY Startstasjon.Avgangstid ASC""", (startstasjon, endestasjon, dato, klokkeslett)) ORDER BY Startstasjon.Avgangstid ASC""", (startstasjon, endestasjon, dato, klokkeslett))
return cursor.fetchall() return cursor.fetchall()
def finneTogruterFraStartstasjonTilMellomstasjonNesteDag(startstasjon, endestasjon, dato):
cursor.execute("""SELECT Togforekomst.TogruteID, Startstasjon.JernbanestasjonNavn, Startstasjon.avgangstid, Mellomstasjon.JernbanestasjonNavn, Mellomstasjon.ankomsttid, Togforekomst.Dato
FROM (((Mellomstasjon left outer join Startstasjon on Startstasjon.TogruteID == Mellomstasjon.TogruteID) inner join Togrute on Togrute.TogruteID == Startstasjon.TogruteID) inner join Togforekomst on Togforekomst.TogruteID == Togrute.TogruteID)
WHERE Startstasjon.JernbanestasjonNavn = ? and Mellomstasjon.JernbanestasjonNavn = ? and Togforekomst.Dato = ?
ORDER BY Startstasjon.Avgangstid ASC""", (startstasjon, endestasjon, dato))
return cursor.fetchall()
def finneTogruterFraStartstasjonTilEndestasjon(startstasjon, endestasjon, dato, klokkeslett): def finneTogruterFraStartstasjonTilEndestasjon(startstasjon, endestasjon, dato, klokkeslett):
cursor.execute("""SELECT Togforekomst.TogruteID, Startstasjon.JernbanestasjonNavn, Startstasjon.avgangstid, Endestasjon.JernbanestasjonNavn, Endestasjon.ankomsttid, Togforekomst.Dato cursor.execute("""SELECT Togforekomst.TogruteID, Startstasjon.JernbanestasjonNavn, Startstasjon.avgangstid, Endestasjon.JernbanestasjonNavn, Endestasjon.ankomsttid, Togforekomst.Dato
FROM (((Endestasjon left outer join Startstasjon on Startstasjon.TogruteID == Endestasjon.TogruteID) inner join Togrute on Togrute.TogruteID == Startstasjon.TogruteID) inner join Togforekomst on Togforekomst.TogruteID == Togrute.TogruteID) FROM (((Endestasjon left outer join Startstasjon on Startstasjon.TogruteID == Endestasjon.TogruteID) inner join Togrute on Togrute.TogruteID == Startstasjon.TogruteID) inner join Togforekomst on Togforekomst.TogruteID == Togrute.TogruteID)
...@@ -96,6 +100,13 @@ def finneTogruterFraStartstasjonTilEndestasjon(startstasjon, endestasjon, dato, ...@@ -96,6 +100,13 @@ def finneTogruterFraStartstasjonTilEndestasjon(startstasjon, endestasjon, dato,
ORDER BY Startstasjon.Avgangstid ASC""", (startstasjon, endestasjon, dato, klokkeslett)) ORDER BY Startstasjon.Avgangstid ASC""", (startstasjon, endestasjon, dato, klokkeslett))
return cursor.fetchall() return cursor.fetchall()
def finneTogruterFraStartstasjonTilEndestasjonNesteDag(startstasjon, endestasjon, dato):
cursor.execute("""SELECT Togforekomst.TogruteID, Startstasjon.JernbanestasjonNavn, Startstasjon.avgangstid, Endestasjon.JernbanestasjonNavn, Endestasjon.ankomsttid, Togforekomst.Dato
FROM (((Endestasjon left outer join Startstasjon on Startstasjon.TogruteID == Endestasjon.TogruteID) inner join Togrute on Togrute.TogruteID == Startstasjon.TogruteID) inner join Togforekomst on Togforekomst.TogruteID == Togrute.TogruteID)
WHERE Startstasjon.JernbanestasjonNavn = ? and Endestasjon.JernbanestasjonNavn = ? and Togforekomst.Dato = ?
ORDER BY Startstasjon.Avgangstid ASC""", (startstasjon, endestasjon, dato))
return cursor.fetchall()
def finneTogruterFraMellomstasjonTilMellomstasjon(startstasjon, endestasjon, dato, klokkeslett): def finneTogruterFraMellomstasjonTilMellomstasjon(startstasjon, endestasjon, dato, klokkeslett):
cursor.execute("""SELECT Togforekomst.TogruteID, MStart.JernbanestasjonNavn, MStart.avgangstid, MEnde.JernbanestasjonNavn, MEnde.ankomsttid, Togforekomst.Dato cursor.execute("""SELECT Togforekomst.TogruteID, MStart.JernbanestasjonNavn, MStart.avgangstid, MEnde.JernbanestasjonNavn, MEnde.ankomsttid, Togforekomst.Dato
FROM (((Mellomstasjon AS MEnde left outer join Mellomstasjon AS MStart on MStart.TogruteID == MEnde.TogruteID) inner join Togrute on Togrute.TogruteID == MStart.TogruteID) inner join Togforekomst on Togforekomst.TogruteID == Togrute.TogruteID) FROM (((Mellomstasjon AS MEnde left outer join Mellomstasjon AS MStart on MStart.TogruteID == MEnde.TogruteID) inner join Togrute on Togrute.TogruteID == MStart.TogruteID) inner join Togforekomst on Togforekomst.TogruteID == Togrute.TogruteID)
...@@ -103,6 +114,13 @@ def finneTogruterFraMellomstasjonTilMellomstasjon(startstasjon, endestasjon, dat ...@@ -103,6 +114,13 @@ def finneTogruterFraMellomstasjonTilMellomstasjon(startstasjon, endestasjon, dat
ORDER BY MStart.Avgangstid ASC""", (startstasjon, endestasjon, dato, klokkeslett)) ORDER BY MStart.Avgangstid ASC""", (startstasjon, endestasjon, dato, klokkeslett))
return cursor.fetchall() return cursor.fetchall()
def finneTogruterFraMellomstasjonTilMellomstasjonNesteDag(startstasjon, endestasjon, dato):
cursor.execute("""SELECT Togforekomst.TogruteID, MStart.JernbanestasjonNavn, MStart.avgangstid, MEnde.JernbanestasjonNavn, MEnde.ankomsttid, Togforekomst.Dato
FROM (((Mellomstasjon AS MEnde left outer join Mellomstasjon AS MStart on MStart.TogruteID == MEnde.TogruteID) inner join Togrute on Togrute.TogruteID == MStart.TogruteID) inner join Togforekomst on Togforekomst.TogruteID == Togrute.TogruteID)
WHERE MStart.JernbanestasjonNavn = ? and MEnde.JernbanestasjonNavn = ? and Togforekomst.Dato = ? and MStart.Avgangstid <= MEnde.Ankomsttid
ORDER BY MStart.Avgangstid ASC""", (startstasjon, endestasjon, dato))
return cursor.fetchall()
def finneTogruterFraMellomstasjonTilEndestasjon(startstasjon, endestasjon, dato, klokkeslett): def finneTogruterFraMellomstasjonTilEndestasjon(startstasjon, endestasjon, dato, klokkeslett):
cursor.execute("""SELECT Togforekomst.TogruteID, Mellomstasjon.JernbanestasjonNavn, Mellomstasjon.avgangstid, Endestasjon.JernbanestasjonNavn, Endestasjon.ankomsttid, Togforekomst.Dato cursor.execute("""SELECT Togforekomst.TogruteID, Mellomstasjon.JernbanestasjonNavn, Mellomstasjon.avgangstid, Endestasjon.JernbanestasjonNavn, Endestasjon.ankomsttid, Togforekomst.Dato
FROM (((Endestasjon left outer join Mellomstasjon on Mellomstasjon.TogruteID == Endestasjon.TogruteID) inner join Togrute on Togrute.TogruteID == Mellomstasjon.TogruteID) inner join Togforekomst on Togforekomst.TogruteID == Togrute.TogruteID) FROM (((Endestasjon left outer join Mellomstasjon on Mellomstasjon.TogruteID == Endestasjon.TogruteID) inner join Togrute on Togrute.TogruteID == Mellomstasjon.TogruteID) inner join Togforekomst on Togforekomst.TogruteID == Togrute.TogruteID)
...@@ -110,6 +128,13 @@ def finneTogruterFraMellomstasjonTilEndestasjon(startstasjon, endestasjon, dato, ...@@ -110,6 +128,13 @@ def finneTogruterFraMellomstasjonTilEndestasjon(startstasjon, endestasjon, dato,
ORDER BY Mellomstasjon.Avgangstid ASC""", (startstasjon, endestasjon, dato, klokkeslett)) ORDER BY Mellomstasjon.Avgangstid ASC""", (startstasjon, endestasjon, dato, klokkeslett))
return cursor.fetchall() return cursor.fetchall()
def finneTogruterFraMellomstasjonTilEndestasjonNesteDag(startstasjon, endestasjon, dato):
cursor.execute("""SELECT Togforekomst.TogruteID, Mellomstasjon.JernbanestasjonNavn, Mellomstasjon.avgangstid, Endestasjon.JernbanestasjonNavn, Endestasjon.ankomsttid, Togforekomst.Dato
FROM (((Endestasjon left outer join Mellomstasjon on Mellomstasjon.TogruteID == Endestasjon.TogruteID) inner join Togrute on Togrute.TogruteID == Mellomstasjon.TogruteID) inner join Togforekomst on Togforekomst.TogruteID == Togrute.TogruteID)
WHERE Mellomstasjon.JernbanestasjonNavn = ? and Endestasjon.JernbanestasjonNavn = ? and Togforekomst.Dato = ?
ORDER BY Mellomstasjon.Avgangstid ASC""", (startstasjon, endestasjon, dato))
return cursor.fetchall()
def convertDato(datoString): def convertDato(datoString):
try: try:
dato = dt.strptime(datoString, '%Y-%m-%d').date() dato = dt.strptime(datoString, '%Y-%m-%d').date()
......
import sqlite3
from datetime import date
from datetime import datetime as dt
con = sqlite3.connect("jernbanesystemdb.db")
cursor = con.cursor()
def listerForSeter(togruteID, antallSeter):
#Henter ut delstrekningene
cursor.execute("""SELECT Delstrekning.Startstasjon, Delstrekning.Endestasjon
FROM Delstrekning join Togrute ON Delstrekning.BanestrekningNavn = Togrute.BanestrekningNavn
WHERE Togrute.TogruteID = ?""", (togruteID,))
delstrekninger = cursor.fetchall()
listeMedLister = []
for delstrekning in delstrekninger:
liste = []
for i in range(antallSeter):
liste.insert(i, True)
listeMedLister.append(liste)
cursor.execute("SELECT Billett.VognID, Billett.SeteNr, Billett.Startstasjon, Billett.Endestasjon FROM Billett")
billettinfo = cursor.fetchall()
cursor.execute("SELECT JernbanestasjonNavn FROM Startstasjon WHERE TogruteID = ?", (togruteID,))
startstasjonPaaRute = [item[0] for item in cursor.fetchall()]
cursor.execute("SELECT JernbanestasjonNavn FROM Mellomstasjon WHERE TogruteID = ? ORDER BY Ankomsttid ASC", (togruteID,))
mellomstasjonerPaaRute = [item[0] for item in cursor.fetchall()]
cursor.execute("SELECT JernbanestasjonNavn FROM Endestasjon WHERE TogruteID = ?", (togruteID,))
endestasjonPaaRute = [item[0] for item in cursor.fetchall()]
stasjonerPaaRute = startstasjonPaaRute + mellomstasjonerPaaRute + endestasjonPaaRute
print(billettinfo)
for entry in billettinfo:
vognID = entry[0]
tall = entry[1]
startstasjon = entry[2]
endestasjon = entry[3]
indekstilstartstasjon = stasjonerPaaRute.index(startstasjon)
indekstilendestasjon = stasjonerPaaRute.index(endestasjon)
if (tall != None):
seteNr = tall - 1
for i in range(indekstilstartstasjon, indekstilendestasjon):
for liste[i] in listeMedLister:
liste[i][seteNr] = False
break
# FEEEEEEIIIIILLLLLL HERRRREGUD FOR NOE MØKKDRIT
return listeMedLister
print(listerForSeter(1, 12))
con.close()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment