Design and implement a single-screen price quoting application used by a houseboat rental reservation system. The rental company operates docks in five towns listed here in the order of river flow: Ankor, Bilk, Calrow, Derrit, Elrose. The quotes are for one-way rentals. This application should feature the most suitable controls for selecting:
Price components are listed below. If expressed in %%, use the previous step results as a new base. When calculating, round to the nearest cent at each step.
Controls should display choices for selection directly, e.g. the ports should be presented by the town names, not by introducing numeric codes.
Date/Time controls should initially be set to the next exact hour after the current (at run-time) computer system date/time.
A button Calculate Quote should result in displaying the itemized list of pricing components and Grand Total (all formatted like $999.99).
Implement the following rule using Chapter 13 material (events). In case departure or arrival time is selected between 9 PM and 6 AM (inclusive) and/or Power Level 4 is requested, immediately (i.e. before a button Calculate Quote has been hit) display the warning in red: Captain License will be required at the boat pickup.
Clear the warning if the user changes parameters in the way not requiring it anymore. No multiple warnings should be ever displayed. You would have easier time to avoid them if you process them in a single module.
Suggestions and Reminders. Numeric (and other) values should be defined as constants where appropriate, to avoid magic numbers. A smart use of enums and proper use of constants make the project elegant and easy to maintain.
The assignment does not require introducing any custom events.
DateTime class was just briefly introduced in the textbook, so you would need to research, e.g. check MSDN (online VS Help), for the methods most suitable for this task. Employing TimeSpan (a structure closely related to DateTime) may be also very beneficial.
A smart control choice can free you from spending time on creating custom controls. Research whats available within .Net framework. For example, replicating calendar pickers functionality would add plenty of work. .Net controls have very valuable properties, like SelectedIndex, TabIndex.
Do not employ exceptions if you deal with a foreseeable condition that can be programmed using regular constructs.