This assignment encourage you to gain practical experience on the use of advanced programming techniques focused on data structures and algorithms that underpin computer science.
In particular, the assignment will assess your knowledge of the main algorithms and data structures used in computer science and your ability to implement and use them in a software application which is a simplified version of a real world problem.
To complete this assignment you will need to create a C# application that will store and manage, using appropriate algorithms and data structures, a flat data file of different banks (see the specification below). It is not uncommon to be asked to produce applications similar to this in industry, normally as a pilot study. On occasions files may differ slightly from the provided specification making error trapping important, however that isn't the case with this file. Scalability and efficiency of the solution is paramount.
A large media and software company has acquired a flat data file of economic data for different banks.
You have been asked to create a C# application that will store and structure this data to allow fast and efficient searching (and other functionalities) via the bank name. You are asked to implement a Binary Search or AVL tree, where each node corresponds to a specific bank and its key economic data. The application must be able to read this data from a .csv file document.
An example of data file (with completely fictional but reasonable data) is provided on Moodle (banks.csv).
Each line in the data file corresponds to a unique bank. For a bare pass the built-in Dictionary collection can be used instead (though obviously much of the search functionality will be sub- optimal). Your trees MUST use the recursive techniques covered in the lectures as a starting point.
The first line of data in the data file consists of the following headings:
Bank Name, Revenue, AUM, Total Equities, Number of Employees, Creditors, Lenders
The other lines of the data file consist of the data which falls under each heading. For example
AMX, 3033, 4106, 131330, 570000, [MST;WLM], [REX]
We assume the bank name is a string and all economic data are expressed in million $.
For example, the line above denotes a bank that is called AMX, with a revenue = 3033 million$, an AUM = 4106 million$, total equities of 131330 million$, and 570000 employees.
Note that the last two fields (creditors and lenders) are two lists of bank names separated by ';' and enclosed in [ ]. These two lists contains an arbitrary (varying) number of banks which are the creditors and the lenders of the bank.
In the above example the creditors of the bank AMX are the banks called MST and WLM, while the lenders of the bank AMX is the bank called REX.
You must implement an application with a GUI (may be multiple forms) which allows the user to:
1. Load a text data file (.csv) and store the bank information within the tree
2. Manually edit the bank information
3. Display the number of banks within the tree and the depth of the tree
4. Remove a bank
5. Display all bank names in alphabetic order.
6.
a) Search for a bank (and display all bank information)
b) Partial keyword search by bank name: as letters are entered any bank starting with those letters is shown and can be selected from.
7. Search for and display the creditors and lenders of a bank.
8. Display the bank which has the biggest potential for revenue. A bank's potential for revenue can be found by summing the revenue attributes for all its creditors and lenders.
If you decide to use a grid-view control on your GUI ensure that you are still using the data structures for storage and efficient retrieval of the bank data.