Application for ticket reservation and cinema management.
High school graduation project.
The entire application has been written in Java/JavaFX in NetBeans IDE 8.2.
The tool used for creating, maintaining and designing databases compatible with SQLite standards is DB Browser.
After the initial loading screen, registration window appears. It is possible to register as a user or as an administrator (with necessary credentials), or to create a new account.
It is necessary to fill all the fields in the form. Sensitive data is encrypted using SHA-256 algorithm and stored in database.
In order to log in as an administrator, it is necessary to enter the security PIN. After successful verification, the interface for administrators appears.
Upon clicking on the button "Manage databases", the following window appears, which is essential for the control of data in database:
Buttons for deleting and updating data work similarly for each table, so their functionality will be demonstrated on the Films database. In order to update data, it is necessary to enter the ID of the row that contains it. Afterwards, all the other fields are automatically completed by existing data, which can be easily changed.
Upon clicking on the button "Add a new film", the following form for inserting a new film in the database appears.
Aside from general information about the film, it is mandatory to specify its projection schedule. This button ("Specify projection times") also enables administrators to add new projections for already existing films. In that case, it is only mandatory to specify the name and duration of the film.
For scheduling a screening, it is necessary to specify the date of the showing, along with the number of screenings on that day. Then, for each screening, it is required to designate the theater where the film is being shown, as well as the start time (the end time is calculated automatically). Entered schedules must not overlap temporally (if they are in the same theater), both with each other and with previously scheduled screenings. The administrator can easily check which termins are available and then choose the most suitable one for the screening. The "Record" button saves the entered data into the database.
Upon clicking the "Add food" button, the following window appears.
Similar to adding a new movie, for food it is necessary to enter all the requested information. Saving the data is done in the same way as with movies.
To log in to your account, you need to enter your username and password. If you've forgotten your password, you can set a new one.
In order to set the new password, you need to enter your email address and the answer to the security question you set during registration. After that, you can set your new password.
After the successful login, the following window appears.
Movies are divided into 5 genres. Users can choose from available movies within their preferred genre, and by clicking on a movie, a window opens with basic information about the film. In addition to a brief description of the movie, users can also watch its trailer. If they are interested in the movie, they can check the showtimes and then proceed to reserve tickets for their chosen showtime.
By clicking the "Book now!" button, a new window opens where reservation creation begins. First, you need to select one of the upcoming projections.
After selecting designated projection, a new window opens summarizing the chosen screening details along with ticket prices for children and adults. It is necessary to specify the number of tickets for both categories. Clicking the "Next" button proceeds to the next reservation step.
In the next step, the user decides whether they want to order food. If the answer is yes, a menu with food options is opened. If not, they proceed immediately to the next step of the reservation process.
If the user decides to order food, the window below will appear. There are different categories of food to choose from. Once the user decides which food they want to order, they need to specify the quantity and then add it to the cart. At any time, the user can view their current bill.
Once the user finishes selecting their food items, they need to click on "Check out" to review their bill. If everything is correct, they proceed to the next step of making the reservation. However, if there is an error of some kind, the cart is emptied and the user can choose their desired food items again.
After all necessary preparations are completed, the final step of making the reservation is selecting seats in the cinema hall. Occupied seats are marked in red, while available seats are marked in black. It is necessary to select as many black seats as the number of tickets specified at the beginning of the reservation. Once a sufficient number of seats are selected, a button for completing the reservation appears in the top right corner.
After all necessary reservation details are filled out, the final step is to download the ticket. By clicking the "Finish!" button, a popup window opens, notifying the user that the ticket is ready for download.
When the user clicks "Download", they are prompted to specify a folder where they want to save their ticket in PDF format. The document contains all the information about the created reservation. An example of such document is shown below.
Both users and administrators have the option to edit their profiles. Any changes made to the profile information need to be saved.
As the founder of this application, I value user feedback, so I've enabled an option for users to send emails. Users can use this feature to share their opinions on the cinema's operations and the application's functionality, as well as provide suggestions for improvement.
If we didn't have this utility program, the databases would quickly become overloaded with outdated data, causing the program to malfunction. Therefore, the purpose of this program is to systematically run every 10 minutes (which can be adjusted as needed) and execute the cleanup of data that is no longer current. This includes movie projection times that have passed and reservations associated with those projections.
To achieve this, Task Scheduler on Windows was used, which executes given tasks. It is necessary to create the new task and specify how often and at what intervals we want this task to repeat. The content of my .bat file is shown below.
The program operates on a straightforward principle: when it runs, it examines data from the database and compares the end times of film projections with the current system time (Java system time). If it determines that a projection has ended, the status of the projection or reservation is set to 0 (inactive). If a film has no active projections, its status is also set to 0. When a new projection is added, its status is set back to 1.