-
Notifications
You must be signed in to change notification settings - Fork 0
/
TrainApp.py
150 lines (133 loc) · 7.33 KB
/
TrainApp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
from Station import printStations
from TrainRoutes import getAllTrainRoutesOnDay
from TrainTrips import getAllTrips, printAllTrips
from customer import login, printFutureOrdersAndTickets, registerCustomerInfo
from database_config import setup
from inputHandler import convertStationName, inputSQLData, isEnglishWeekday, translateWeekdayToNorwegian
from TicketHandler import buyTickets, getOccupiedPlaces
from trainDisplay import displayTrain
trainLogo = '''
_______ _______ _______ _______ ___
/ \\ / \\ / \\ / \\ / |\_
| NORD | | LANDS | | BANEN | | S J | | |____\_
|_________|_|_________|_|_________|_|_________|_|_ |______|
O O O O O O O O O\/_|
'''
def main():
# Setup the database with all tables and data
setup()
isLoggedIn: bool = False
userID: int
print(trainLogo)
print("Welcome to the Train App")
print("Want to see the list of commands? Type 'help'")
while True:
userInput: str = inputSQLData("\nEnter a command: ").lower()
print("")
if userInput == "help":
print("=========================================")
print("Commands: ")
print("help - displays this message")
print("exit - exits the app")
print("stations - lists all stations")
print("train routes, <weekday>, <station> - lists all train routes for a specific station on a specific weekday REQUIRES 2 ARGUMENTS (weekday, station)")
print(" for example, to see all routes going past station A on Monday, write 'train routes, monday, A'.")
print("train trips, <DD.MM.YYYY>, <HH:MM>, <start station>, <end station> - lists all train trips for a specific date and start and end station REQUIRES 4 ARGUMENTS (date, time, start station, end station)")
print(" for example, to see all trips on 01.01.2023 and 02.01.2023 after 00:00 on 01.01.2023 from station A to B, write 'train trips, 01.01.2023, 00:00, A, B'.")
print("register - registers as a Customer")
print("login - logs in as a Customer")
print("tickets, <trip ID>, <start station>, <end station> - lists all available tickets between a start station and an end station for a given route")
print(" for example, to see all available tickets from station A to B on trip 1, write 'tickets, A, B, 1'")
if isLoggedIn:
print("buy tickets, <trip ID>, <start station>, <end station>, [(<wagon number>,<seat/bed number>)] - reserve a seat/bed in a specific wagon between a start station and an end station for a given route")
print(" for example, to buy a tickets for seat 1 wagon 1, seat 2 wagon 1, and seat 1 wagon 2 from A to B on trip 1, write 'buy ticket, 1, A, B, [(1,1),(1,2),(2,1)]'")
print("my tickets - lists all future tickets for the logged in Customer")
print("=========================================")
else:
print("\nTo see your tickets and buy tickets, please log in.")
elif userInput == "exit":
break
elif userInput == "register":
customerID = registerCustomerInfo()
if (customerID):
userID = customerID[0]
isLoggedIn = True
print("Logged in as Customer with ID: " + str(userID))
elif userInput == "login":
customerID = login()
if (customerID):
userID = customerID[0]
isLoggedIn = True
print("Logged in as Customer with ID: " + str(userID))
else:
print("Login failed try another email")
elif userInput == "my tickets":
# TODO: add order time, and fix route time
if (isLoggedIn):
print("Future tickets for Customer with ID: " + str(userID))
printFutureOrdersAndTickets(userID)
else:
print("You are not logged in")
elif userInput == "stations":
printStations()
elif userInput.startswith("train routes, "):
temp = userInput.split(", ")
if (len(temp) == 3):
weekday = temp[1]
correctedWeekday = weekday[0].upper() + weekday[1:].lower()
if (isEnglishWeekday(correctedWeekday)):
correctedWeekday = translateWeekdayToNorwegian(correctedWeekday)
station = temp[2]
correctedStationName = station[0].upper() + station[1:].lower()
allRoutes = getAllTrainRoutesOnDay(correctedStationName, correctedWeekday)
print("All train routes that stop at " + correctedStationName + " on " + correctedWeekday + ": ")
for route in allRoutes:
routeID = route[0]
arrival = route[1]
departure = route[2]
routeInfo: str = "Route: " + str(routeID)
if arrival:
routeInfo += ", Arrival: " + arrival
else:
routeInfo += ", the station is a start station"
if departure:
routeInfo += ", Departure: " + departure
else:
routeInfo += ", the station is an end station"
print(routeInfo)
elif (userInput.startswith("train trips, ")):
temp = userInput.split(", ")
if (len(temp) == 5):
date = temp[1]
time = temp[2]
startStation = convertStationName(temp[3])
endStation = convertStationName(temp[4])
print("All train trips from " + startStation + " to " + endStation + " on " + date + ": ")
printAllTrips(getAllTrips(startStation, endStation, date, time))
elif userInput.startswith("tickets, "):
temp = userInput.split(", ")
if (len(temp) == 4):
tripID = temp[1]
startStation = convertStationName(temp[2])
endStation = convertStationName(temp[3])
occupiedPlaces = getOccupiedPlaces(tripID, startStation, endStation)
if occupiedPlaces == ["Invalid"]:
print("Invalid stations for this trip. Please enter other start and end stations.")
else:
print("All available tickets from " + startStation + " to " + endStation + " on trip " + tripID + ": ")
print("Unavailable tickets are marked with X's. To buy a ticket for a seat/bed, use the seat/bed number.\n")
displayTrain(tripID, occupiedPlaces)
elif userInput.startswith("buy tickets, "):
temp = userInput.split(", ")
if (isLoggedIn):
tripID = temp[1]
startStation = convertStationName(temp[2])
endStation = convertStationName(temp[3])
tickets = eval(temp[4])
buyTickets(tripID, startStation, endStation, tickets, userID)
else:
print("Please log in to buy tickets.")
else:
print("Command not found. Type 'help' to see all commands")
if __name__ == "__main__":
main()