Final project for the Algorithms and Programming course, in the second year of my Computer Engineering degree.
A party venue keeps records of booked events and the staff who work regularly at these events. For each event, the following information is stored: the client's name and ID (DNI), the event’s date and time, type of event (e.g., 15th birthday party, weddings, baptisms, etc.), the assigned manager, list of contracted services, total cost (calculated based on the price and quantity of services), and the deposit amount.
For each offered service, the following data is recorded: name of the service (e.g., catering, drinks, waiters, DJ, inflatables, trampoline, etc.), description (details of what the service includes), quantity requested, and unit cost.
For each employee, the system records: full name, ID (DNI), employee ID number, salary, and the role they perform. The event manager is an employee responsible for organizing and overseeing the event, and receives a bonus in addition to their salary.
An application must be developed using the necessary classes, applying inheritance where appropriate. The application should provide the following functionalities via a menu:
-
a) Add a service
-
b) Remove a service
-
c) Register a new employee/manager
-
d) Remove an employee/manager
-
e) Book the venue for an event. The client may request one or multiple services. The venue can only accept one reservation per date. If a reservation already exists for the selected date, an exception should be raised indicating the conflict. When the reservation is confirmed, a manager is assigned to the event.
-
f) Cancel an event. If the client cancels more than one month before the scheduled date, the deposit is not refunded. Otherwise, the client must pay the full amount for the service.
-
g) Print submenu: list of events, list of clients, list of employees, and list of events scheduled for a specific month.
Each project is expected to include the following:
-
A UML class diagram.
-
Design and implementation of all necessary classes, including: instance variables, constructors, properties (getters/setters), and basic instance methods — meaning, methods should be fully implemented even if they are not explicitly used in the application.
-
An application where the relevant objects are created and loaded (loading from a text file is allowed but not mandatory). For example, if the project is about a supermarket with products and suppliers, the application should create the supermarket, add some products and suppliers, and then respond to the requested menu options. If the assignment does not specify it, you are not required to simulate customer or supplier interactions, sales, or restocking — this is to keep the scope of the project manageable.
-
The menu requested in the assignment must be presented, and the corresponding functionalities must be implemented. In most cases, these functionalities should be implemented as functions in the Main, which call the methods of the designed classes. Only occasionally should menu options directly call methods from the classes. The idea is to avoid placing all menu logic as methods inside the classes, as this oversimplifies the solution and overly customizes the classes to the assignment (which is conceptually incorrect). The application should demonstrate problem-solving logic using the involved classes.
-
Inheritance must be used and reflected both in the code and in the UML diagram.
-
You must implement at least one exception handler, which is explicitly required in each project. You may include additional exception handling if you wish.
