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

jobbet med billett

parent da3ea648
No related branches found
No related tags found
No related merge requests found
......@@ -4,14 +4,14 @@ Dette er besvarelsen til gruppe 220 for databaseprosjektet del 2, database over
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 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
- 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
- kunderegistrering.py håndtering at en bruker kan registrere seg i kunderegisteret
- billett.py håndterer at en bruker kan hente ut ledige billetter og kjøpe billetter til en ønsket togrute
- 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ølgem toget passerer de for at koden skal fungere
-Delstrekninger må legger inn i tabellen i rekkefølgen toget passerer de for at koden skal fungere
## Endringer vi har gjort fra del 1
- Endrer datatypen til Dato i Kundeordre til string i stedet for integer
......
......@@ -30,6 +30,16 @@ 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
......
......@@ -2,7 +2,6 @@
import sqlite3
from datetime import date
from datetime import datetime as dt
import time
con = sqlite3.connect("jernbanesystemdb.db")
cursor = con.cursor()
......@@ -107,16 +106,12 @@ def billettkjop():
if (antallSovevogner != 0):
cursor.execute("SELECT AntallSovekupeer FROM Sovevogn WHERE VognID = ?", (vognID,))
antallSovekupeertuple = cursor.fetchone()
print(antallSovekupeertuple)
antallSovekupeer = int(antallSovekupeertuple[0])
print(antallSovekupeer)
antallSengerIVogn += (antallSovekupeer * 2)
listeMedSengerIVogn = listerForSenger(antallSengerIVogn)
dictMedAlleSenger[vognID] = listeMedSengerIVogn
# 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)
......
......@@ -4,11 +4,6 @@ from datetime import datetime as dt
con = sqlite3.connect("jernbanesystemdb.db")
cursor = con.cursor()
# cursor.execute("INSERT INTO Kundeordre VALUES(1, '2023-03-23', '13:30', 1, 1, 1)")
# cursor.execute("INSERT INTO Billett VALUES(1, 'Sitte', '2023-03-23', 1, 'SJ-sittevogn-1', 1, null, 'Trondheim S', 'Mo i Rana')")
# cursor.execute("SELECT * FROM Kundeordre")
# print(cursor.fetchall())
# For en bruker skal man kunne finne all informasjon om de kjøpene hen har gjort for fremtidige reiser.
def fremtidigkjop():
......@@ -49,8 +44,8 @@ def fremtidigkjop():
fremtidigOrdre = cursor.fetchall()
print("Her er alle dine fremtidige kjøp:")
print("[OrdreNr, Dato for kjøp, Tid for kjøp, Antall billetter, TogruteID, Startstasjon]")
print(fremtidigOrdre)
for entry in fremtidigOrdre:
print(entry)
fremtidigkjop()
......
......@@ -79,19 +79,19 @@ def sjekkeGyldigeJernbanestasjoner(jernbanestasjon):
return True
def finneStartstasjonavganger(dag, jernbanestasjon):
cursor.execute("""SELECT Togforekomst.Dag, Togrute.TogruteID, Startstasjon.avgangstid, Togrute.Endestasjon
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
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
cursor.execute("""SELECT Togforekomst.Dag, Togrute.TogruteID, Endestasjon.Ankomsttid, 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()
......
No preview for this file type
......@@ -54,6 +54,7 @@ def validereTelefonnummer(telefonnummer):
else:
return False
# Antar e-postaddresse på formen navn@navnesen.landkode
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",
......
......@@ -222,7 +222,7 @@ INSERT INTO Togforekomst VALUES (3, "Onsdag", "2023-04-05");
INSERT INTO Togforekomst VALUES (3, "Torsdag", "2023-04-06");
INSERT INTO Togforekomst VALUES (3, "Fredag", "2023-04-07");
INSERT INTO Startstasjon VALUES ("Mo i Rana", 3, "08:11:0");
INSERT INTO Startstasjon VALUES ("Mo i Rana", 3, "08:11");
INSERT INTO Mellomstasjon VALUES ("Mosjøen", 3, "09:14", "09:14");
INSERT INTO Mellomstasjon VALUES ("Steinkjer", 3, "12:31", "12:31");
INSERT INTO Endestasjon VALUES ("Trondheim S", 3, "14:13");
\ No newline at end of file
......@@ -9,7 +9,7 @@ cursor = con.cursor()
# med utgangspunkt i en dato og et klokkeslett.
# Alle ruter den samme dagen og den neste skal returneres, sortert på tid.
def funksjonB():
def sokeitogreiser():
startstasjon = input("Hvilken jernbanestasjon skal reisen starte fra?: ")
while (sjekkeGyldigeJernbanestasjoner(startstasjon) == False):
startstasjon = input("Oppgitt jernbanestasjon er ugyldig. Prøv på nytt: ")
......@@ -54,24 +54,23 @@ def funksjonB():
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:
if (len(startstasjon1) > 0 and len(mellomstasjon2) > 0):
avgangerIDag = finneTogruterFraStartstasjonTilMellomstasjon(startstasjon, endestasjon, dato, klokkeslett)
avgangerIMorgen = finneTogruterFraStartstasjonTilMellomstasjon(startstasjon, endestasjon, datoIMorgen, klokkeslett)
# 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)
avgangerIMorgen = finneTogruterFraStartstasjonTilEndestasjon(startstasjon, endestasjon, datoIMorgen, klokkeslett)
# 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)
avgangerIMorgen = finneTogruterFraMellomstasjonTilMellomstasjon(startstasjon, endestasjon, datoIMorgen, klokkeslett)
# 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)
avgangerIMorgen = finneTogruterFraMellomstasjonTilEndestasjon(startstasjon, endestasjon, datoIMorgen, klokkeslett)
......@@ -134,7 +133,6 @@ def sjekkeGyldigeJernbanestasjoner(jernbanestasjon):
else:
return True
funksjonB()
sokeitogreiser()
con.commit()
con.close()
\ No newline at end of file
import sqlite3
con = sqlite3.connect("jernbanesystemdb.db")
cursor = con.cursor()
def funksjon():
vognIDer = [1, 2, 3]
sittevognIDer = [1, 2]
antallSittevogner = 2
antallSeteBilletter = 1
togruteID = 1
indeksTilStartstasjon = 0
indeksTilEndestasjon = 3
listerForSeter = [[True, True, True], [True, False, True], [True, False, True]]
dictMedAlleSeter = {}
for vognID in vognIDer:
if vognID in sittevognIDer:
# Finner totalt antall seter i en vogn
antallSeterIVogn = 0
if (antallSittevogner != 0):
cursor.execute("SELECT AntallStolrader, AntallSeterPerRad FROM Sittevogn WHERE VognID = ?", (vognID,))
antallStolraderOgAntallSeterPerRad = cursor.fetchall()
antallStolrader = int(antallStolraderOgAntallSeterPerRad[0][0])
antallSeterPerRad = int(antallStolraderOgAntallSeterPerRad[0][1])
antallSeterIVogn += (antallStolrader * antallSeterPerRad)
dictMedAlleSeter[vognID] = listerForSeter
# elif vognID in sovevognIDer:
# # Finner totalt antall senger i en vogn
# antallSengerIVogn = 0
# if (antallSovevogner != 0):
# cursor.execute("SELECT AntallSovekupeer FROM Sovevogn WHERE VognID = ?", (vognID,))
# antallSovekupeertuple = cursor.fetchone()
# print(antallSovekupeertuple)
# antallSovekupeer = int(antallSovekupeertuple[0])
# print(antallSovekupeer)
# antallSengerIVogn += (antallSovekupeer * 2)
# listeMedSengerIVogn = listerForSenger(togruteID, antallSengerIVogn)
# dictMedAlleSenger[vognID] = listeMedSengerIVogn
if (antallSeteBilletter != 0):
dictMedAlleSeter, tildeltSete, vognID, tildelteSeter = bestilleSeteBilletter(dictMedAlleSeter, antallSeteBilletter, indeksTilStartstasjon, indeksTilEndestasjon)
def bestilleSeteBilletter(dictMedAlleSeter, antallSeteBilletter, indeksTilStartstasjon, indeksTilEndestasjon):
vognID = 0
for key in dictMedAlleSeter.keys():
listeMedSeterIVogn = dictMedAlleSeter.get(key)
# Modifiserer liste slik at vi bare har med delstrekningene som gjelder
modifisertListeMedSeter = listeMedSeterIVogn[indeksTilStartstasjon:indeksTilEndestasjon+1]
tildeltSete = None
tildelteSeter = []
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))
for i in range(indeksTilStartstasjon, indeksTilEndestasjon):
indeksTilTildeltSete = tildeltSete - 1
listeMedSeterIVogn[i][indeksTilTildeltSete] = False
dictMedAlleSeter[key] = listeMedSeterIVogn
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
def hentElementer(liste, teller):
# Lager liste med alle elementene med indeks lik "teller"
return [item[teller] for item in liste]
funksjon()
con.close()
\ No newline at end of file
from datetime import datetime
import sqlite3
from datetime import date
from datetime import datetime as dt
con = sqlite3.connect("jernbanesystemdb.db")
cursor = con.cursor()
def testKlokkeslett():
klokkeslettString = input("Hvilket klokkeslett er avreisen? Format hh:mm: ")
try:
klokkeslett = datetime.strptime(klokkeslettString, "%H:%M")
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()
except ValueError:
print("Ugyldig klokkeslett, skal være på formatet HH:MM")
testKlokkeslett()
listeMedLister = []
for delstrekning in delstrekninger:
liste = []
for i in range(antallSeter):
liste.insert(i, True)
listeMedLister.append(liste)
testKlokkeslett()
cursor.execute("SELECT Billett.VognID, Billett.SeteNr, Billett.Startstasjon, Billett.Endestasjon FROM Billett")
billettinfo = cursor.fetchall()
def testDato():
datoString = input("Hvilken dato er reisen? Format YYYY-MM-DD: ")
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
try:
dato = datetime.strptime(datoString, '%Y-%m-%d')
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
except ValueError:
print("Ugyldig dato, skal være på formatet YYYY-MM-DD")
testDato()
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