Untitled
unknown
python
a year ago
9.8 kB
2
Indexable
import os
import random
def destinationRandomize():
destinationList = ["Perlis", "Kedah", "Penang", "Perak", "Selangor", "Negeri Sembilan", "Melaka", "Johor", "Kelantan", "Terengganu", "Pahang", "Sabah", "Sarawak"]
destination = random.choice(destinationList)
return destination
def drawMenu():
print(" Train Ticket System ")
print("____________________________")
print("| (1) View Train Schedules |")
print("----------------------------")
print("| (2) Book Tickets |")
print("----------------------------")
print("| (3) View Bookings |")
print("----------------------------")
print("| (4) Cancel Tickets |")
print("----------------------------")
print("| (5) Exit Program |")
print("----------------------------")
def menuOptions(choice, trains, bookings, seat_s):
if choice == "1":
os.system("cls")
viewTrainSchedules(trains)
return
elif choice == "2":
os.system("cls")
bookTickets(trains, bookings, seat_s)
return
elif choice == "3":
os.system("cls")
viewBookings(bookings)
return
elif choice == "4":
os.system("cls")
cancelTickets()
return
else:
input("Invalid input! (Press any key to try again) >>")
os.system("cls")
return
# Yik Yang
def viewTrainSchedules(trains):
# draw the view train schedules out
while (True):
print("| Available Train |")
print("_________________________\n\n")
print(f"| {"Train No":<12} | {"Name":<15} | {"Origin":<15} | {"Destination":<15} | {"Available Seat":<20} | {"Fare":<13} | {"Departure":<12} | {"Arrival":<12} |")
print("----------------------------------------------------------------------------------------------------------------------------------------")
for train in trains:
print(f"| {train["Train No"]:<12} | {train["Name"]:<15} | {train["Origin"]:<15} | {train["Destination"]:<15} | {train["Available Seat"]:<20} | RM {train["Fare"]:<10.2f} | {train["Departure"]:<12} | {train["Arrival"]:<12} |")
break
input("\nPress any key to Main Menu >> ")
os.system("cls")
# Li Hen
def bookTickets(trains, bookings, seats):
while (True):
print("| Implement your book tickets here |")
print("______________________________________\n\n")
for train in trains:
print(f"{train['Train No']} - {train['Name']} (Fare: {train['Fare']}, Available Seats: {train['Available Seat']})")
# ticketsId = random.randint(100,1000)
book = input("\nEnter Train Number (101, 102, 103) to view seats, or 0 to exit >> ")
if book == "0":
os.system("cls")
break
selectedTrain = None
for train in trains:
if train["Train No"] == book:
selectedTrain = train
break
if not selectedTrain:
input("\nInvalid Input. Please try again >> ")
os.system("cls")
continue
os.system("cls")
# ticketPrice
age = int(input("Enter the age of the passenger"))
print("This is the price of the ticket")
childFare = 2 * fare
adultFare = 3 * fare
seniorFare = 2 * fare
if age < 6:
print(f"Total Payment: {childFare} )")
elif age > 6 or age < 60:
print(f"Total Payment: {adultFare} )")
elif age > 60 or age < 200:
print(f"Total Payment: {seniorFare} )")
else:
print("invalid input")
print(f"\nHere is the availability for {train["Name"]} ({selectedTrain["Train No"]})")
print("-----------------------------------------------------------")
for rows in seats:
print(f"| {rows['A']:<5} | {rows['B']:<5} | {rows['C']:<5} | {rows['D']:<5} | {rows['E']:<5} | {rows['F']:<5} | {rows['G']:<5} | {rows['H']:<5} |")
seatChoice = input("\nSelect a seat (e.g., A01, B04), or 0 to exit >> ").upper()
if seatChoice == "0":
os.system("cls")
break
if not seatChoice:
input("Something went wrong here, your seat selection might not be exist. >> ")
os.system("cls")
continue
if len(seatChoice) < 3:
input("Something went wrong here, your seat selection might not be exist. >> ")
os.system("cls")
continue
seatClass = seatChoice[0]
seatNumber = seatChoice[1:] # Start at index 1
# wj ver (succeed)
invalidInput = False # validate user input to ensure the seatClass is input correctly
for x in range(len(seats)):
if seatClass not in seats[x].keys():
input("Something went wrong, your seat selection might not be exist. >> ")
invalidInput = True
break
if invalidInput:
os.system("cls")
continue
row = int(seatNumber) - 1 # Row index based on seat number (e.g., A01 -> row 0)
if seats[row][seatClass] == "XXX":
print(f"Sorry, seat {seatChoice} is already booked.")
else:
seats[row][seatClass] = "XXX"
if seats[row][seatClass] == "XXX":
print(f"Successfully booked seat {seatChoice}!")
ticketID = f"T-{selectedTrain["Train No"]}{seatClass}{len(bookings) + 1}"
bookings.append({
"Train No": selectedTrain["Train No"],
"Seat Class": seatClass,
"Ticket ID": ticketID
})
print(f"Your Ticket ID is: {ticketID}")
selectedTrain["Available Seat"] -= 1
else:
print("Something went wrong, please contact the server.")
input("\nPress any key to Main Menu >> ")
os.system("cls")
# Malcolm
def viewBookings(bookings):
while True:
if not bookings:
print("No bookings found.")
input("\nPress any key to Main Menu >> ")
os.system("cls")
return
else:
print("These are the ticket ID you had purchased.")
for i in range(len(bookings)):
print(f"-> ({i + 1}) {bookings[i]["Ticket ID"]}")
# enter a Booking ID
try:
choice = int(input(f"\nInput 1 to {len(bookings)} to view corresponding details, or 0 to exit >> "))
except ValueError:
input("Invalid input, please try again >> ")
os.system("cls")
continue
if choice == 0:
os.system("cls")
return
# if input out of boundary, throw exception
if choice > len(bookings):
input(f"Invalid input, please input from 1 to {len(bookings)} >> ")
os.system("cls")
continue
# Display the booking details if found
else:
os.system("cls")
print("\n Booking Details ")
print("_________________________\n\n")
print(f"| {'Train No':<10} | {'Seat Class':<12} | {'Ticket ID':<15} |")
print("-------------------------------------------------")
print(f"| {bookings[choice - 1]['Train No']:<10} | {bookings[choice - 1]['Seat Class']:<12} | {bookings[choice - 1]['Ticket ID']:<15} |")
input("\nPress any key to Main Menu >> ")
os.system("cls")
return
# QinYi
def cancelTickets():
print("Implement your cancel tickets here")
# main entry point of the program
def main():
# declare variables here
trains = [
{"Train No": "101", "Name": "Express A", "Origin": f"{destinationRandomize()}", "Destination": f"{destinationRandomize()}" \
, "Available Seat": 48, "Fare": 50, "Departure": "08.00", "Arrival": "11.00"},
{"Train No": "102", "Name": "Express B", "Origin": f"{destinationRandomize()}", "Destination": f"{destinationRandomize()}" \
, "Available Seat": 48, "Fare": 100, "Departure": "22.00", "Arrival": "23.00"},
{"Train No": "103", "Name": "Express C", "Origin": f"{destinationRandomize()}", "Destination": f"{destinationRandomize()}" \
, "Available Seat": 48, "Fare": 200, "Departure": "18.00", "Arrival": "20.00"},
]
bookings = []
seats = [
{"A": "A01", "B": "B01", "C": "C01","D": "D01", "E": "E01", "F": "F01","G": "G01", "H": "H01"},
{"A": "A02", "B": "B02", "C": "C02","D": "D02", "E": "E02", "F": "F02","G": "G02", "H": "H02"},
{"A": "A03", "B": "B03", "C": "C03","D": "D03", "E": "E03", "F": "F03","G": "G03", "H": "H03"},
{"A": "A04", "B": "B04", "C": "C04","D": "D04", "E": "E04", "F": "F04","G": "G04", "H": "H04"},
{"A": "A05", "B": "B05", "C": "C05","D": "D05", "E": "E05", "F": "F05","G": "G05", "H": "H05"},
{"A": "A06", "B": "B06", "C": "C06","D": "D06", "E": "E06", "F": "F06","G": "G06", "H": "H06"},
]
# main loop
while (True):
drawMenu()
choice = input("\nEnter your choice >> ")
if choice == "5":
os.system("cls")
print("Thanks for using our service, bye!")
break
else:
menuOptions(choice, trains, bookings, seats)
# call the main() function
main()
Editor is loading...
Leave a Comment