Using Java as a vehicle, you are required to demonstrate your understanding of object-oriented design principles, design patterns, generics, graphical user interfaces, unit testing, object relational mapping, data structures and algorithms, building on the foundations laid by the Programming Fundamentals course. This Project Team Formation assignment should incorporate appropriate visual elements and event-handling allowing managers to simulate the impact of their decisions visually (sensitivity analysis). It should also assist the manager in finding better solutions by using heuristic algorithms and appropriate data structures. To manage the complexity, the assignment is divided into five milestones (starting from week 3 and going until week 11) each carrying 4 marks and a final submission in week 12 carrying 30 marks. The initial milestones are very prescriptive to help you get started and make steady progress. The final milestone allows adequate room for creativity in interaction, development of fit for purpose algorithms and the use of appropriate design patterns to improve usability. Your assignment submitted will be marked based on functional features, qualitative aspects, reflective practices and explorative learning. During the final face to face assessment you will also be required to justify your design decisions as well as explain how your program can be extended to meet other related requirements. Disclaimer: the specification in this assignment is intended to represent a simplified version of a system in real life and thus is not meant to be a 100% accurate simulation of any real system or service that is being used commercially. 2. Learning Outcomes This assessment relates to all of the learning outcomes of the course which are: • CL01: use the Java programming language in the implementation of small to medium sized application programs that illustrate professionally acceptable coding and performance standards. • CL02: demonstrate knowledge of the basic principles of the object-oriented development process and apply this understanding to the analysis and design of solutions for small to medium scale problems. • CLO3: describe and apply basic algorithms and data structures, in particular simple searching and sorting of data stored in data structures and manipulating data. • CLO4: implement basic event-driven programming and graphical user interfaces in Java.