Product Inventory Project - Create an application which manages an inventory of products. Create a product class which has a price, id, and quantity on hand. Then create an inventory class which keeps track of various products and can sum up the inventory value.
Airline / Hotel Reservation System - Create a reservation system which books airline seats or hotel rooms. It charges various rates for particular sections of the plane or hotel. Example, first class is going to cost more than coach. Hotel rooms have penthouse suites which cost more. Keep track of when rooms will be available and can be scheduled.
Bank Account Manager - Create a class called Account which will be an abstract class for three other classes called CheckingAccount, SavingsAccount and BusinessAccount. Manage credits and debits from these accounts through an ATM style program.
Card Game - Your project manager has given you the task of designing and implementing the card game Blackjack (http://en.wikipedia.org/wiki/Blackjack). The current requirements are simple:
The game will be played on a single PC with 1 human player and a computer dealer
The game can be written as a simple command-line application that asks the user for input and displays appropriate output as text
The game only needs to implement a single set of rules for the game of Blackjack
However, the project manager also knows that you will soon need to extend this code in a variety of ways.
Replace the command-line UI with a GUI
Enable multiple players to play the game
Enable the players to play each other over a network
Create computer players in roles other than the dealer
Implement new card games with rules that are different than Blackjack
So your job is to design the code such that it implements the current requirements, but make sure that you or another developer could add any of these additional requirements without any significant refactoring to the existing code. Ideally, the code should have unit tests so that whoever is making these changes will also be confident that they are not breaking any of the existing functionality. Design patterns should be used where they make sense and add value. And the code should be very easy to understand and maintain, since we know that it will need to be understood by multiple people and extended in various ways.
Please submit a solution, ideally written in C#, that contains:
All the source and project files necessary to build and run your solution.
A description of your design.
An explanation of how these future enhancements can be added to the code.
A description of any design patterns you used and how they added value.
Keep in mind that the goal here is to see your skills at designing and writing code in a clean and modular way. You can keep it relatively simple as long as the design makes it easy to extend for future requirements. Readability and maintainability are very important goals in a program that needs to be extensible, so please do keep those goals in mind.