Project 12-2: Assign tickets with time slots
For this project, you’ll develop an application that assigns tickets that include a time slot when a guest can return to visit an attraction without waiting in line, similar to the way the Fast Pass system works at Disneyland.
The design of the Tickets form
Operation
· To issue a ticket, the user clicks the Issue Ticket button. A ticket with the next ticket number in the next available time slot is issued.
· Each time a ticket is issued, it is added to the list box.
· The title bar for this form displays the current time and an indication of whether the current time slot is open or closed. This information is updated once per second.
· The labels in the Ticket Availability section of the form indicate how many tickets are outstanding and the time slot that will be assigned to the next ticket that’s issued. These labels are updated as tickets are issued and the time changes.
· When a time slot begins, any outstanding tickets for that time slot are removed from the list box and the beginning and ending ticket numbers assigned to that slot are displayed in the label inside the group box at the top of the form.
· To change the options for issuing tickets, the user clicks the Options button. Before the Options dialog box is displayed, a dialog box is displayed that warns the user that all outstanding tickets will be deleted and confirms that the user wants to continue.
The design of the Options form
Operation
· The user can enter values into the Options dialog box to specify the number of minutes for each time slot, the number of guests allowed into the attraction during each time slot, the time the attraction opens, the time the attraction closes, and the number for the first ticket. The defaults are five minutes per time slot, five guests per time slot, a start time of the current time, an end time of four hours after the current time, and an initial ticket number of 1.
· When the user clicks the OK button, the Tickets form is displayed.
Specifications
· Use a Timer control to display the current time in the title bar of the main form and to determine the current time slot.
· When the application starts, it should display the Options dialog box from the Load event handler for the Tickets form. For this to work without an exception being thrown, you’ll need to disable the Timer control until the Options dialog box is completed.
· The data the user enters in the Options dialog box should be validated to be sure that the minutes per time slot, guests per time slot, and first ticket number are integers; that the start and end times are DateTime values; and that the difference between the start time and the end time provides for at least two time slots.
· Create a class that represents a time slot for assigning tickets. This class should have public fields that indicate the time the time slot begins, the length of the time slot, and the number of tickets that have been issued for the time slot. This class should also have a property that gets the time the time slot ends. Use this class to create a time slot object for each time slot between the start and end times entered on the Options dialog box, and store these objects in a collection.
· Create a class that represents a ticket. This class should have public fields that store the ticket number and the time slot that’s assigned to the ticket and a method that sets the next ticket number. As each ticket is issued, the application should create a ticket object with the next ticket number and add it to a queue. Then, when the time slot for the ticket begins, the ticket should be removed from the queue.
· Once a time slot begins and the tickets in that time slot are removed from the outstanding list of tickets, the user should not be able to issue any more tickets in that time slot even if the maximum number of tickets for that time slot haven’t been issued.
Notes:
This project requires only minimal object-oriented programming skills (chapter 12 is sufficient) but has extensive collection and date/time requirements. It also requires that you research and use the Timer control, which isn’t presented in the book.
The complexity of the project can be varied as follows:
· Implement just the ticket assignment portion of the application, with no real-time monitoring of the time.
· Issue a ticket for the current time slot if tickets are still available.
· Instead of issuing a ticket for the next available time slot, let the user choose the time slot for the ticket. Then, the tickets in the current time slot will have to be listed individually at the top of the form. Depending on how you design the data store, this may result in a major redesign of the application.
· Use NumericUpDown controls to select the minutes per window and guests per window from the Options dialog box, and use the DateTimePicker control to select the start and end times. This will require some additional research.