示例#1
0
    def reserve_ticket(self, Passenger, auto_test=False):
        if auto_test == False:
            os.system("clear")
        print("---- MENU ----")
        for i in range(len(self.destinations)):
            print(str(i + 1) + " : " + self.destinations[i])
        if auto_test == False:
            dest = 0
            while dest < 1 or dest > len(self.destinations):
                dest = int(input("Choice : "))
        else:
            dest = random.randint(1, len(self.destinations))

        chosen_flight = self.flight_dtb[self.destinations[dest - 1]]

        if Passenger.passport_number in self.passport_dtb:
            print(
                "Your Passport Number is already used by someone, are you sure it is correct ?"
            )
        else:
            self.passport_dtb.append(Passenger.passport_number)
        ticket = self.generate_ticket(Passenger)
        Passenger.book_ticket(chosen_flight, ticket)
        chosen_flight.add_passenger(Passenger)
        print("Your ticket for " + chosen_flight.destination +
              " has been successfully booked.")
        print("Returning to main menu...")
        if not (auto_test):
            input("Press Enter to continue...")
            time.sleep(2)
示例#2
0
 def create_passengers(self):
     self.all_routes = self.find_all_routes()
     passengers: List[Passenger] = []
     passenger_number = 0
     for route in self.all_routes:
         for _ in range(self.config.num_passengers_per_route):
             start_minute = random.randint(0, self.config.minutes)
             passengers.append(
                 Passenger(route, start_minute, passenger_number))
             passenger_number += 1
     self.passengers = Passengers(passengers)
示例#3
0
def test_duplicates_tickets():
    maestro = Booker()
    name_list = []
    passports = []
    passengers = []
    for i in range(50):
        name_list.append(
            "".join(random.choice(string.ascii_lowercase) for _ in range(7))
        )
        passports.append(random.randint(1000, 10000))
        passengers.append(Passenger(name_list[i], passports[i]))
        maestro.reserve_ticket(passengers[i], True)
    assert checkIfDuplicates(maestro.ticket_list) == False
示例#4
0
    def main_menu(self):
        self.exit = False
        os.system("clear")
        print("---- MENU ----")
        known = False
        same_user = False
        if self.main_menu_it > 0:
            choice = input("Are you still " + self.current_user.pseudo +
                           "---- y/n")
            if choice == "y":
                pass_n = input("Enter your passport number ---- ")
                if pass_n == self.current_user.passport_number:
                    print("Welcome back !")
                    same_user = True
                else:
                    print(
                        "Your passport number didn't correspond ! Resetting the menu."
                    )
                    same_user = False

        if not (same_user):
            name = input("Enter your name ---- ")
            pass_n = input("Enter your passport number ---- ")
            for items, keys in self.passenger_dtb.items():
                if pass_n in items:
                    known = True
                else:
                    known = False
            if not (known):
                self.passenger_dtb[pass_n] = Passenger(name, pass_n)
            else:
                print("Oh, you're already registered !")
            self.current_user = self.passenger_dtb[pass_n]

        print(
            "Hello " + self.current_user.pseudo +
            " what do you want to do ?\n 1 - Reserve a Ticket\n 2 - Cancel a reservation\n 3 - Display ticket information.\n 4 - Exit"
        )
        opt = int(input("Choice ---- "))

        if opt == 1:
            self.reserve_ticket(self.current_user)
        elif opt == 2:
            self.cancel_ticket(self.current_user)
        elif opt == 3:
            self.display_info(self.current_user)
        elif opt == 4:
            self.exit = True
        else:
            print("Not yet implemented.")
        self.main_menu_it += 1
示例#5
0
def test_overbooking():
    maestro = Booker()
    name_list = []
    passports = []
    passengers = []
    for i in range(random.randint(500, 5000)):
        name_list.append(
            "".join(random.choice(string.ascii_lowercase) for _ in range(7))
        )
        passports.append(random.randint(1000, 10000))
        passengers.append(Passenger(name_list[i], passports[i]))
        maestro.reserve_ticket(passengers[i], True)
    
    for elem in maestro.destinations:
        assert(maestro.flight_dtb[elem].max >= len(maestro.flight_dtb[elem].passenger_list))
示例#6
0
    def cancel_ticket(self, Passenger, auto_test=False):
        if not (Passenger.has_booked):
            print("You can't cancel tickets because you never booked one !")
            if not (auto_test):
                input("Press Enter to continue...")
        else:
            if auto_test == False:
                os.system("clear")
            print("---- MENU ----")
            Passenger.print_tickets()
            cities_list = []
            ticket_numb_list = []
            for cities, ticket_numb in Passenger.book.items():
                cities_list.append(cities)
                ticket_numb_list.append(ticket_numb)
            if not (auto_test):
                selected_ticket = int(
                    input("Type the ticket number you want to cancel."))
                while selected_ticket not in ticket_numb_list:
                    print("Ticket not found, type it again !")
                    selected_ticket = int(
                        input("Type the ticket number you want to cancel."))
            else:
                selected_ticket = random.choice(ticket_numb)

            index = ticket_numb_list.index(selected_ticket)
            chosen_flight = self.flight_dtb[cities_list[index]]
            Passenger.remove_ticket(chosen_flight, selected_ticket)
            self.ticket_list.remove(selected_ticket)
            chosen_flight.remove_passenger(Passenger)
            print("Your ticket for " + chosen_flight.destination +
                  " has been successfully canceled.")
            print("Returning to main menu...")
            if not (auto_test):
                input("Press Enter to continue...")
                time.sleep(1)
示例#7
0
def test_registered_passenger():
    maestro = Booker()
    name_list = []
    passports = []
    passengers = []
    for i in range(random.randint(500, 5000)):
        name_list.append(
            "".join(random.choice(string.ascii_lowercase) for _ in range(7))
        )
        passports.append(random.randint(1000, 10000))
        passengers.append(Passenger(name_list[i], passports[i]))
        maestro.reserve_ticket(passengers[i], True)
    
    for elem in maestro.destinations:
        flight = maestro.flight_dtb[elem]
        for elem in flight.passenger_list:
            assert(elem in maestro.passenger_dtb[x] for x in passports)
示例#8
0
 def display_info(self, Passenger):
     Passenger.print_info()
     input("Press Enter to continue...")
     time.sleep(2)
示例#9
0
def test_ticket_number():
    booker = Booker()
    p1 = Passenger("Norbert", 101)
    booker.reserve_ticket(p1, True)
    assert len(booker.ticket_list) == 1