This assignment aims to give you real problem-solving experience, like what you might encounter in the workplace. Your task is to apply object-oriented design and programming techniques to create a well-documented and easy to maintain software solution that achieves the following user stories.
1. As someone interested in buying or selling products I want to register as client with an online auction house so that they have my contact details, including address, and can choose a password that will keep my client records private and secure.
2. As a client I want to authenticate myself with the system in order to access my private records and conduct transactions.
3. As a client I want to be able to log out from the system so that the next person to use the system cannot access my private records or conduct transactions using my account.
4. As a client I want to be able to advertise my product. The advertisement will include the name of the product, the type of product and the initial cost.
5. As a client I want to be able to list all my products that I currently have advertised for sale.
6. As a client I want to be able to search for products for sale using a particular product type.
7. As a client I want to be able to bid a dollar amount for one of the products.
8. As a client I want to be able to view a list of the current bids for my products.
9. As a client I want to be able to sell one of my products to the current highest bidder.
10. As a client I want to be able to say that I would purchase it through “click and collect” or having the product “home delivered”.
11. As a client I would like to know how much the auction house charges me for selling a product. The charge is $10 for a “click and collect” and $20 for having the product “home delivered”.
12. As a client I would like to be told how much sale tax is payable when I purchase a product.
The tax is equal to 15 percent of the product plus an additional $5 if it is “home delivered”.
A video on Blackboard gives an example of how the application might achieve each of the above user stories.
The company has plans to eventually develop a graphical user interface for this application,however, this prototype implementation will have a simple text-based interface. To make it easier to switch to a graphical user interface in the future we want to ensure the user interface code is kept separate from the application logic. To help with this an UserInterface class has been provided. You may use this class if you wish.
The company has plans to eventually use a relational database to store and save all customer data. However, for this prototype, all data will just be kept in memory (and will therefore be lost when the application is shutdown).
You are encouraged to design and develop the application in an iterative and incremental fashion – one user story at a time. You can implement the user stories in whatever order you please, however for each new user story you should design and implement only the classes and methods that you require to implement that user story. You are encouraged to make changes to your class diagram using draw.io (https://app.diagrams.net/). You may need to first refactor some of the classes and methods that you have already implemented for earlier user stories in order to better facilitate the new user story. After each user story you should have working code that achieves all of the user stories considered so far.
To further encourage this style of iterative and incremental development, we require two separate product increments to be submitted. The first supporting just the first user story that you choose to implement and the second being your final product including all user stories. For each product increment you will need to document your object-oriented design via a class diagram and provide well documented source code packaged as a Visual Studio 2019 solution. Your tutor will provide constructive feedback based on your first submission on Week 11 or Week 12.