From a3a62b3762f524617ce2d600613dd651e7e48d52 Mon Sep 17 00:00:00 2001 From: thfoss <thfoss@stud.ntnu.no> Date: Sun, 26 Mar 2023 13:06:29 +0200 Subject: [PATCH] FERDIIIIIG --- README.md | 15 +-- TODO.txt | 55 ---------- billett.py | 155 ++++++++++++++++++-------- initialisering.py | 239 ++++++++++++++++++++++++++++++++++++++++ jernbanesystemdb.db | Bin 143360 -> 8192 bytes prosjekt.sql | 1 + provernoe.py | 64 ----------- skal_slettes.py | 258 -------------------------------------------- sokeitogreiser.py | 49 ++++++--- testavdatoogtid.py | 53 --------- 10 files changed, 395 insertions(+), 494 deletions(-) delete mode 100644 TODO.txt create mode 100644 initialisering.py delete mode 100644 provernoe.py delete mode 100644 skal_slettes.py delete mode 100644 testavdatoogtid.py diff --git a/README.md b/README.md index c3c1756..422439e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ # Databaseprosjekt - Del 2 +## Beskrivelse av innlevering 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å: - 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 @@ -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 ## 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. --Delstrekninger må legger inn i tabellen i rekkefølgen toget passerer de for at koden skal fungere +- 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å 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 på del 1 - 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 -- 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". ## Kilder 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 \ No newline at end of file +- Brukt til inspirasjon for hvordan man kan hente ut resultatene fra cursor.fetchall() til en liste \ No newline at end of file diff --git a/TODO.txt b/TODO.txt deleted file mode 100644 index 6864c29..0000000 --- a/TODO.txt +++ /dev/null @@ -1,55 +0,0 @@ -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 diff --git a/billett.py b/billett.py index d5c9b2c..7eb2009 100644 --- a/billett.py +++ b/billett.py @@ -1,4 +1,3 @@ -# Her programmerer vi billettkjøp import sqlite3 from datetime import date from datetime import datetime as dt @@ -8,9 +7,6 @@ cursor = con.cursor() # Registrerte kunder skal kunne finne ledige billetter for en oppgitt strekning på en ønsket togrute # 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(): kundeNr = input("Oppgi ditt kundeNr: ") cursor.execute("SELECT KundeNr FROM Kunde WHERE KundeNr = ?", (kundeNr,)) @@ -28,6 +24,17 @@ def billettkjop(): togruteID = input("Hvilken togrute vil du reise med? Oppgi TogruteID: ") while (sjekkeGyldigTogrute(togruteID) == False): 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å?: ") while (sjekkeGyldigeJernbanestasjoner(startstasjon) == False): startstasjon = input("Oppgitt startstasjon er ugyldig. Prøv på nytt: ") @@ -40,8 +47,12 @@ def billettkjop(): print("Ugyldig dato, skal være på formatet 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) - # MÅ BRUKE DATO TIL NOE # Finner vognoppsettet til den valgte togruta cursor.execute("SELECT Togrute.VognoppsettID FROM Togrute WHERE TogruteID = ?", (togruteID,)) @@ -66,15 +77,6 @@ def billettkjop(): 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 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()] @@ -83,7 +85,6 @@ def billettkjop(): cursor.execute("SELECT Sovevogn.VognID FROM Sovevogn") sovevognIDer = [item[0] for item in cursor.fetchall()] - dictMedAlleSeter = {} dictMedAlleSenger = {} for vognID in vognIDer: @@ -97,9 +98,9 @@ def billettkjop(): antallSeterPerRad = int(antallStolraderOgAntallSeterPerRad[0][1]) antallSeterIVogn += (antallStolrader * antallSeterPerRad) - listeMedSeterIVogn = listerForSeter(togruteID, antallSeterIVogn) + listeMedSeterIVogn = listerForSeter(togruteID, vognID, antallSeterIVogn, reisedato) dictMedAlleSeter[vognID] = listeMedSeterIVogn - + elif vognID in sovevognIDer: # Finner totalt antall senger i en vogn antallSengerIVogn = 0 @@ -109,17 +110,40 @@ def billettkjop(): antallSovekupeer = int(antallSovekupeertuple[0]) antallSengerIVogn += (antallSovekupeer * 2) - listeMedSengerIVogn = listerForSenger(antallSengerIVogn) + listeMedSengerIVogn = listerForSenger(vognID, antallSengerIVogn, reisedato) 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 indeksTilStartstasjon = stasjonerPaaRute.index(startstasjon) indeksTilEndestasjon = stasjonerPaaRute.index(endestasjon) 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): - 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") antallOrdre = cursor.fetchone() @@ -131,30 +155,30 @@ def billettkjop(): billettnr = incrementBillettnr() 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() elif (antallSeteBilletter > 1): # Flere seter bestilt for sete in tildelteSeter: 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() if (antallSengeBilletter > 0): billettnr = incrementBillettnr() 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() 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() for seng in tildelteSenger: 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() elif (tildeltSeng == None and tildelteSenger != []): # Partall senger bestilt for seng in tildelteSenger: 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() cursor.execute("""SELECT Billett.BillettID, Billett.Dato, Billett.VognID, Billett.SeteNr, Billett.SengNr, Billett.Startstasjon, Billett.Endestasjon @@ -167,11 +191,6 @@ def billettkjop(): print(entry) - - - - - # HJELPEFUNKSJONER def sjekkeGyldigeJernbanestasjoner(jernbanestasjon): cursor.execute("SELECT JernbanestasjonNavn FROM Jernbanestasjon") @@ -222,30 +241,73 @@ def sjekkeAntallBilletter(type): else: boolean = True return int(antallBilletter) - -def sjekkeOmLedigeBilletter(antallBilletter, startstasjon, endestasjon): - # bruke dictionaries til å sjekke om det finnes noen ledige billetter - return -def listerForSeter(togruteID, antallSeter): - #Henter ut delstrekningene +def listerForSeter(togruteID, vognID, antallSeterIVogn, reisedato): + # 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: + for _ in delstrekninger: liste = [] - for i in range(antallSeter): + for i in range(antallSeterIVogn): liste.insert(i, True) 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 -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 = [] for i in range(antallSenger): 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 def hentElementer(liste, teller): @@ -272,16 +334,17 @@ def bestilleSeteBilletter(dictMedAlleSeter, antallSeteBilletter, indeksTilStarts tildeltSete = None tildelteSeter = [] + vognID = key if antallSeteBilletter == 1: tildeltSete = finneLedigSete(modifisertListeMedSeter) - vognID = key for i in range(indeksTilStartstasjon, indeksTilEndestasjon): indeksTilTildeltSete = tildeltSete - 1 listeMedSeterIVogn[i][indeksTilTildeltSete] = False dictMedAlleSeter[key] = listeMedSeterIVogn elif antallSeteBilletter > 1: for _ in range(antallSeteBilletter): - tildelteSeter.append(finneLedigSete(modifisertListeMedSeter)) + tildeltSete = finneLedigSete(modifisertListeMedSeter) + tildelteSeter.append(tildeltSete) for i in range(indeksTilStartstasjon, indeksTilEndestasjon): indeksTilTildeltSete = tildeltSete - 1 listeMedSeterIVogn[i][indeksTilTildeltSete] = False @@ -300,6 +363,7 @@ def finneLedigSeng(listeMedSenger): def bestilleSengeBilletter(dictMedAlleSenger, antallSengeBilletter): for key in dictMedAlleSenger.keys(): + vognID = key listeMedSengerIVogn = dictMedAlleSenger.get(key) valgtSeng = None listeMedSengNrBestilt = [] @@ -318,7 +382,7 @@ def bestilleSengeBilletter(dictMedAlleSenger, antallSengeBilletter): # Oddetall antall senger else: if (antallSengeBilletter > 1): - for _ in range((int(antallSengeBilletter-1/2)-1)): + for _ in range((int((antallSengeBilletter-1)/2)-1)): seng1 = finneLedigSeng(listeMedSengerIVogn) seng2 = seng1 + 1 listeMedSengNrBestilt.append(seng1) @@ -326,11 +390,10 @@ def bestilleSengeBilletter(dictMedAlleSenger, antallSengeBilletter): listeMedSengerIVogn[seng1-1] = False listeMedSengerIVogn[seng2-1] = False valgtSeng = finneLedigSeng(listeMedSengerIVogn) - listeMedSengNrBestilt.append(valgtSeng) indeksTilSeng = valgtSeng - 1 listeMedSengerIVogn[indeksTilSeng] = False dictMedAlleSenger[key] = listeMedSengerIVogn - return dictMedAlleSenger, valgtSeng, listeMedSengNrBestilt + return dictMedAlleSenger, valgtSeng, vognID, listeMedSengNrBestilt def incrementBillettnr(): cursor.execute("SELECT COUNT(BillettID) FROM Billett") @@ -340,5 +403,5 @@ def incrementBillettnr(): billettkjop() -# con.commit() +con.commit() con.close() \ No newline at end of file diff --git a/initialisering.py b/initialisering.py new file mode 100644 index 0000000..04d9f6c --- /dev/null +++ b/initialisering.py @@ -0,0 +1,239 @@ +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 diff --git a/jernbanesystemdb.db b/jernbanesystemdb.db index 4e9803411bdc9ccb3f3204d18d833698013fe2c6..d7536743d235fcb7c042e5e0e619976a75c32a02 100644 GIT binary patch delta 132 zcmZp8z|r6^L0XWBfq?;r8A0rcI>!7=40`^xybKHs3<3-c{985)3V8B+`pC*MW|kx- z<)r52m!#$vlvKiKCg&hm#}HSA5Jx8;R|S};f<|VFLS|k`YI<ssLP1exZemfTLUwAU P=5|2`##j6k7l;7>wMHa1 literal 143360 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 diff --git a/prosjekt.sql b/prosjekt.sql index f7d82a9..a47e84f 100644 --- a/prosjekt.sql +++ b/prosjekt.sql @@ -163,6 +163,7 @@ INSERT INTO Sete VALUES (2, 11); INSERT INTO Sete VALUES (2, 12); INSERT INTO Vognoppsett VALUES (1, 0, 2); INSERT INTO VognerIOppsett VALUES (1, 1); +INSERT INTO VognerIOppsett VALUES (2, 1); --Togrutetabell INSERT INTO Togrute VALUES (1, "Nordlandsbanen", 1, "SJ", "Trondheim S", "Bodø"); INSERT INTO Togforekomst VALUES (1, "Mandag", "2023-04-03"); diff --git a/provernoe.py b/provernoe.py deleted file mode 100644 index 9d67c11..0000000 --- a/provernoe.py +++ /dev/null @@ -1,64 +0,0 @@ -# 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 diff --git a/skal_slettes.py b/skal_slettes.py deleted file mode 100644 index 01f7c8c..0000000 --- a/skal_slettes.py +++ /dev/null @@ -1,258 +0,0 @@ -# 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 diff --git a/sokeitogreiser.py b/sokeitogreiser.py index 9549225..580a7c6 100644 --- a/sokeitogreiser.py +++ b/sokeitogreiser.py @@ -28,12 +28,10 @@ def sokeitogreiser(): datoIMorgen = dato + datetime.timedelta(days=1) # Validering av tid - klokkeslettString = input("Hvilket klokkeslett vil du søke fra? Format HH:MM: ") - while (convertKlokkeslett(klokkeslettString) == None): + klokkeslett = input("Hvilket klokkeslett vil du søke fra? Format HH:MM: ") + while (convertKlokkeslett(klokkeslett) == None): print("Ugyldig klokkeslett, skal være på formatet HH:MM.") - klokkeslettString = input("Hvilket klokkeslett vil du søke fra? Format HH:MM: ") - - klokkeslett = convertKlokkeslett(klokkeslettString) + klokkeslett = input("Hvilket klokkeslett vil du søke fra? Format HH:MM: ") # Sjekker om oppgitt startstasjon er av typen startstasjon, endestasjon eller mellomstasjon cursor.execute("SELECT JernbanestasjonNavn FROM Startstasjon WHERE JernbanestasjonNavn = ?", (startstasjon,)) @@ -52,33 +50,32 @@ def sokeitogreiser(): endestasjon2 = [item[0] for item in cursor.fetchall()] cursor.execute("SELECT JernbanestasjonNavn FROM Mellomstasjon WHERE JernbanestasjonNavn = ?", (endestasjon,)) mellomstasjon2 = [item[0] for item in cursor.fetchall()] - - + # Hvis startstasjonen er av type startstasjon og endestasjonen er av type mellomstasjon if (len(startstasjon1) > 0 and len(mellomstasjon2) > 0): 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 elif (len(startstasjon1) > 0 and len(endestasjon2) > 0): 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 elif (len(mellomstasjon1) > 0 and len(mellomstasjon2) > 0): 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 elif (len(mellomstasjon1) > 0 and len(endestasjon2) > 0): avgangerIDag = finneTogruterFraMellomstasjonTilEndestasjon(startstasjon, endestasjon, dato, klokkeslett) - avgangerIMorgen = finneTogruterFraMellomstasjonTilEndestasjon(startstasjon, endestasjon, datoIMorgen, klokkeslett) + avgangerIMorgen = finneTogruterFraMellomstasjonTilEndestasjonNesteDag(startstasjon, endestasjon, datoIMorgen) avganger = avgangerIDag + avgangerIMorgen print("Her er togrutene som går fra", startstasjon, "til", endestasjon, "den", dato, "og den", datoIMorgen) print("[TogruteID, Startstasjon, Avgangstid, Endestasjon, Ankomsttid, Dato]") for entry in avganger: - print(entry) + print(entry) # HJELPEFUNKSJONER @@ -89,6 +86,13 @@ def finneTogruterFraStartstasjonTilMellomstasjon(startstasjon, endestasjon, dato ORDER BY Startstasjon.Avgangstid ASC""", (startstasjon, endestasjon, dato, klokkeslett)) 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): 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) @@ -96,6 +100,13 @@ def finneTogruterFraStartstasjonTilEndestasjon(startstasjon, endestasjon, dato, ORDER BY Startstasjon.Avgangstid ASC""", (startstasjon, endestasjon, dato, klokkeslett)) 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): 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) @@ -103,6 +114,13 @@ def finneTogruterFraMellomstasjonTilMellomstasjon(startstasjon, endestasjon, dat ORDER BY MStart.Avgangstid ASC""", (startstasjon, endestasjon, dato, klokkeslett)) 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): 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) @@ -110,6 +128,13 @@ def finneTogruterFraMellomstasjonTilEndestasjon(startstasjon, endestasjon, dato, ORDER BY Mellomstasjon.Avgangstid ASC""", (startstasjon, endestasjon, dato, klokkeslett)) 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): try: dato = dt.strptime(datoString, '%Y-%m-%d').date() diff --git a/testavdatoogtid.py b/testavdatoogtid.py deleted file mode 100644 index 04a4eb1..0000000 --- a/testavdatoogtid.py +++ /dev/null @@ -1,53 +0,0 @@ -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() -- GitLab