Overview
In this assignment, you are going to build a simple table-booking system for a restaurant. Please read this 
assignment sheet carefully before starting your work.
Reminders
This assignment involves a lot of console input/output. You get score under the condition that your program 
output is the EXACT MATCH of the expected output. In other words, any additional or missing space 
character, newline character, etc., will result in 0 mark. Also, you are suggested to make more test cases on 
your own for testing your program.
Assignment Specification and Requirement
The table booking system allows table bookings, table allocations and relevant status checking. The 
customer who requests a booking needs to provide their personal information, dining date and the number 
of seats required. The manager of the restaurant can then allocate a table to the booking.
To facilitate checking and identification of bookings, the system uses a ticket system to identify each 
booking. For each day, a ticket code sequence is maintained. The ticket code starts from 1 and is 
incremented by 1 when a new booking comes. 
Load table codes from a file
The table information is defined in a text (.txt) file, in which each line defines the table code of a table in the
restaurant. Upon running the program, the program should ask the user to input the name of the text file 
and then load the table codes into the system. Please refer to the sample input file and sample program 
output below for the exact input and output format.
The text file has the following format:
• Each line is a two-digit number defining the table code of the table. You can assume the table code is 
in the [01 - 99] range.
• You can assume lines are sorted by the table code in the file and the file contains at least one row.
Table codes may not be consecutive.
For example, a text file (tablefile.txt) contains the following:
01
02
03
04
05
06
This file defines 6 tables.
Assignment 4 p.2/5
Below is the program output for loading table codes from the input file (Bold red texts are user input): 
Table file:
tablefile.txt
Imported 6 table(s).
• The above program has NOT terminated yet.
• There is NO space character after the colon (:) and full stop (.).
• Assume the input file and your program are placed in the same folder. You only need to input the 
filename instead of the full path of the file.
Main menu – accept commands from the user
After loading data from the input file, the system needs to accept commands continuously until “Exit” is 
received. Including the “Exit” command, you need to implement four commands for the system.
Exit – terminate the program
If the user enters “Exit”, the program prints “Bye” and then terminates.
Table file:
tablefile.txt
Imported 6 table(s).
Exit
Bye
Book – request a booking
The user can use the “Book” command to request a booking. The user input provides the contact name, 
phone member, dining date, and the number of seats needed. After receiving the booking, the system 
should assign it a ticket code. As mentioned, ticket codes for each day are unique, and it counts starting from 
1. Please refer to the sample output below for the exact output format.
• The date format in this assignment is DD-MM-YYYY.
• The contact name can contain space characters.
• You can assume the phone number is 8 digits long.
• Each data field in the user input is separated by a vertical bar (|). The “|” key is usually located
below the backspace key in a standard keyboard layout.
Upon completion, the system goes back to the main menu to accept the next command.
In the test case below, 3 bookings are added to the system.
Table file:
tablefile.txt
Imported 6 table(s).
Book|CK Lai|91234567|01-11-2023|10
Added booking. The ticket code for 01-11-2023 is 1.
Book|Lucy Chan|61234567|01-11-2023|3
Added booking. The ticket code for 01-11-2023 is 2.
Book|Mike|51234567|02-11-2023|5
Added booking. The ticket code for 02-11-2023 is 1.
Exit
Bye
Assignment 4 p.3/5
ListBookings
This command lists all the bookings in the system. Each line shows one booking. For each booking, the 
contact name, phone number, date with ticket code, number of seats needed, and the booking status are
printed.
• If there is no booking in the system, print “No booking.”.
• The listing of bookings follows the ordering of user input. That means a newer booking is printed 
after the older one.
• If a table is allocated to the booking, the table code is printed. Refer to the next section
(AllocateTable) for details and the output format.
• If no table is allocated to the booking, print “None”.
Upon completion, the system goes back to the main menu.
Table file:
tablefile.txt
Imported 6 table(s).
ListBookings
No booking.
Book|TW|91234567|01-11-2023|5
Added booking. The ticket code for 01-11-2023 is 1.
Book|HF|61234567|01-11-2023|2
Added booking. The ticket code for 01-11-2023 is 2.
ListBookings
Booking(s):
TW, 91234567, 01-11-2023 (Ticket 1), 5, Allocated table: None.
HF, 61234567, 01-11-2023 (Ticket 2), 2, Allocated table: None.
Exit
Bye 
AllocateTable
This command allows the manager to allocate a table to a booking. In the user input, the dining date and the 
ticket code are provided to identify the booking, followed by the code of the table to be allocated. After 
allocation, the system reports the allocated table. 
• Reuse of a table is allowed. If a table is allocated to a certain booking, it can be used for another
booking on the same day.
After allocation and printing, the system goes back to the main menu.
In the test case below, table 04 is allocated to the booking (Ticket 1) on 01-04-2022.
Table file:
tablefile.txt
Imported 6 table(s).
Book|CK Lai|91234567|01-11-2023|10
Added booking. The ticket code for 01-11-2023 is 1.
Book|Lucy|61234567|01-11-2023|3
Added booking. The ticket code for 01-11-2023 is 2.
AllocateTable|01-11-2023|1|04
Allocated table 04 to 01-11-2023 (Ticket 1).
ListBookings
Assignment 4 p.4/5
Booking(s):
CK Lai, 91234567, 01-11-2023 (Ticket 1), 10, Allocated table: 04.
Lucy, 61234567, 01-11-2023 (Ticket 2), 3, Allocated table: None.
Exit
Bye
You need to handle two exceptional cases, but you can assume they would not happen simultaneously. In 
any case below, the system aborts the table allocation.
• If the user assigns a table that does not exist in the restaurant, the system should abort the table 
allocation and print “Error: Table not found.”.
• If a booking has a table already allocated, no further table allocation to this booking can be made 
again. In this case, the system prints “Error: This booking has table allocated already. “.
In the test case below, the user tries to allocate table 07, which does not exist (in the input file), to a 
booking.
Table file:
tablefile.txt
Imported 6 table(s).
Book|CK Lai|91234567|01-11-2023|10
Added booking. The ticket code for 01-11-2023 is 1.
AllocateTable|01-11-2023|1|07
Error: Table not found.
Exit
Bye
In this test case, the user tries to allocate a table to a booking that has already been allocated a table before. 
Table file:
tablefile.txt
Imported 6 table(s).
Book|CK Lai|91234567|20-11-2023|10
Added booking. The ticket code for 20-11-2023 is 1.
AllocateTable|20-11-2023|1|02
Allocated table 02 to 20-11-2023 (Ticket 1).
AllocateTable|20-11-2023|1|03
Error: This booking has table allocated already.
Exit
Bye
Notes
1. You can assume user inputs and input files are always valid. That means you do not need to handle 
exceptional cases not mentioned in the requirement.
2. Input files are used to define table codes only. Do not make any changes to the file in your program.
3. You can use any built-in Python functions.
Assignment 4 p.5/5
Submission
Submit your program electronically using the Moodle system to Assignment 4 under the Assignment section. 
Late submissions will not be accepted.
• Your program must strictly follow the sample input and output format.
• The sample input files (tablefile.txt and myTables2.txt) are included in the evaluation environment
for test case evaluation. You do not need to upload them.
• You should only submit source code (*.py)
• We will grade your program with another set of input files and test cases (Not limited to the 
provided sample input files and test cases), now give me a python programme that fit the assignment demand