In this project you will develop a software application to solve a real-world problem. To implement this software application, you will need to use some of the data structures and algorithms covered in this unit, to store, manage and manipulate data. It will be necessary to design algorithms, to solve the computational problems arising during the development process, and to analyse the time efficiency of the algorithms.
You are hired to develop a software system for a not-for-profit tool library. The solution you implement will manage the information about the tools, as well as the members of the tool library.
The tool library lends its tools free of charge to people in the community. All the tools in the tool library are obtained either from donations or purchased with funds raised by the community.
In the tool library there are nine (9) categories of tools. In each of these nine (9) tools categories, there are a few tool types. For example, one of the nine (9) categories is Painting Tools. Painting Tools are divided into five (5) types, including Sanding Tools, Brushes, Rollers, Paint Removal Tools, and Paint Scrapers. Appendix A shows the details of the nine (9) categories and those tool types in each of the tool categories.
In each of the tool types, there may be multiple tools with different names. For example, Irwin 125mm Orbital Sander, Rocket Sanding Block Holder and PowerFit 120 Triangular Sander are three Sanding Tools.
In tool library, there could be multiple tools with the same name. For example, there could be five (5) Irwin 125mm Orbital Sanders in the tool library.
When the tool library receives a tool, staff will register it with the software system. If the tool library has already had some tools that have the same name with the tool, the quantity of the tool needs to be increased in the software system. If the tool library does not have any tool that has the same name with the tool, the name and quantity of the tool received must be entered into the software system.
For a person to borrow any tool from the tool library, they must first become a member of the tool library. To obtain membership, the person must provide:
- Contact phone number
These details must be entered into the software system before the person can obtain membership with the tool library, and only then may the person borrow tools from the tool library.
When a member borrows a tool from the tool library, details of this loan must be entered into the software system. The tool library has some specific restrictions and policies.
- Information about every tool stocked by the tool library is stored together in a catalogue. Members may browse this catalogue to find information about each of the tools.
- A member cannot borrow more than three (3) tools at the same time.
- If a member finds a tool in the catalogue they want to borrow, but all of this tool type is currently on loan, the member cannot obviously borrow the tool, nor can they reserve the tool.
- When a member returns a tool or tools to the tool library, the loan record for the tool(s) must be removed from the software system. Any other loans the member may still have should remain be in the software system.
The system analysis has already been done, and a high-level object-oriented design has been created. Your task is to follow the following iterative and incremental software development process to implement the object-oriented design.
- a. Design and implement a class, Tool, which implements the iTool interface to be provided. In this software application, each tool is represented by an object of class Tool.
- b. Design and implement a class, ToolCollection, which implements the iToolCollection interface that has been provided with this assignment specification. In this software application, an object of the ToolCollection class is used to store and manipulate a collection of Tool objects. This class must use an Array or Arrays to store a collection of Tool objects. An object of this class can be used to store a collection of tools that are being rented by a member or a collection of tools of a tool type.
- c. Design and implement a class, Member, which implements the iMember interface that has been provided with this assignment specification. In this software application, each registered member is represented by an object of class Member.
- d. Design and implement a class, MemberCollection, which implements the iMemberCollection interface that has been provided with this assignment specification. A collection of registered members can be stored in an object of class MemberCollection. This class must use a Binary Search Tree as a class member to store a collection of Member objects. An object of this class can be used to store all those registered members or to store a collection of members who are currently renting a particular tool.
- e. Design and implement a class, ToolLibrarySystem, which implements the iToolLibrarySystem interface that has been provided with this assignment specification. The software uses the implemented methods in the class to implement the functionalities of the software system. For example, the system uses the implemented method, void add(iTool), in this class to implement the functionality of adding a new tool to the system.
- f. Make good use of the above five classes to build a software application for the tool library, satisfying the following functional and non-functional requirements:
- The software application must be a Console Application of Microsoft Visual Studio 2019 on Microsoft Windows 10 and the programming language used in the software development must be C#.
- Both the staff and all the registered members can use the software application. The software application has a main menu and two sub-menus. The identity of a user must be verified in the main menu before he/she can use the system as a registered member or a staff member. It is assumed that the username and the password for the staff are ‘staff’ and ‘today123’, respectively, and that the username of a registered member is the member’s name in one word. For example, if a member’s surname and given name are ‘Smith’ and ‘John’, respectively, then the member’s username is ‘SmithJohn’. The password is a four-digit integer of the member’s choice.
- The system should have a staff menu that allows a staff member to do the following:
- Add a new tool to the system
- Add new pieces of an existing tool to the system
- Remove some pieces of a tool from the system (the pieces of a tool cannot be removed if it is currently not in the tool library)
- Register a member with the system
- Remove a member from the system
- Given the name of a member, find the contact phone number of the member
- The system should have a member menu that allows a registered member to do the following:
- Display the information about all the tools of a tool type selected by the user. The information includes the name of the tools and the quantity of the tools currently in the tool library
- Borrow a tool from the tool library, given the name of the tool, if the tool is available in the tool library
- Return a tool to the tool library
- List all the tools that are currently holding by the member
- Display top three most frequently borrowed tools by all the members in the descending order by the number of times the tool has been borrowed. The display should include the name of the tool and the number of times that the tool has been borrowed by now.
- The main menu and the two sub-menus should look like:
- g. Design a test plan and use the test plan to systematically test the functionality of the software system.
- h. Write a technical report, which is structured as follows:
- Table of contents
- Introduction - Briefly talk about the project and the software application that you have developed
- Design and Analysis of Algorithms - design an efficient algorithm to solve the following computational problem(s) in the software application. Use the pseudocode notations introduced in Lecture 1 to describe your algorithm(s) and analyse the time efficiency of your algorithm(s).
- Display top three (3) most frequently borrowed tools in the descending order by the number of times that a tool has been borrowed.
- Software Test Plans and Test Results - design a test plan for each of functionality testes. In each of the test plan, please include the test scenarios/cases and test data for each of the test scenarios/cases. Please also provide your test results for each of the test scenarios/cases using screenshots.
- The software application must be a Console Application of Microsoft Visual Studio 2019 and the programming language must be C#.
- You must not use any third-party C# class libraries.
- All the data structures and algorithms used in the software application must be covered in this unit.
- Your submission should be a single zip file named by your_student_number.zip and comprises of a complete C# Console Application project and a technical report in PDF.
- Your submission must be submitted via the blackboard. Email submission is not accepted.
- You may resubmit your assignment as many times as you wish before the deadline. If you submit your assignment multiple times, we will only mark the last submission before the deadline.