After Project 1, Lauren was so happy with the AverageSentenceLength application that she decided to hire your team again for another project. For this new project, your team must develop a simple tool (
GradesTool) that, given a database with various data about the students in a class, allows the instructors to get information about the students and their performance. You will develop the GradesTool application by following a test-driven development approach such as the one we saw in P4L4, in which development happens in iterations and according to the following cycle: (1) select story cards to implement, (2) define task cards for the selected story cards, (3) write test cases for the classes in the task cards, (4) write code that makes the test cases pass. Specifically, this project will consist of three deliverables:
For this deliverable, we will assume to be in the first iteration of the process and that somebody has already done the steps from (1) through (3) described in the overview. You will be provided with a story card, two task cards derived from it, and a set of corresponding test cases, and your job will be to perform step (4): writing code that makes the test cases pass.
"The instructor (or the TA) launches the GradesTool application to get information about the students and the class. The application prints the number of students and information about each student: name, GT ID, e-mail, and attendance. It also prints the number of assignments and projects given so far. After that, it asks the user if (s)he wants to continue or exit. In the former case, it prints the latest information again.”
Important note: you don’t have to build this front-end. It is provided just to better clarify the requirements.
GradesDatabase6300.xlsx(to access the file, see instructions below).
Student) that holds the information about a student, such as name and GT ID.
GradesDB) that encapsulates most of the system functionality and provides an intuitive interface towards the information in the spreadsheet.
edu.gatechunder directory "src" (you should already have the right directory structure).
The customers loved the first delivery so much that they decided to expand the project by
To this end, they provided the teams with additional story cards that describe the additional requirements, from which another team in your company extracted a set of task cards. Being extremely good at drawing, they also provided a sketch of the GUI they envision for the tool.
GradesDBTest. If you need to add test cases for class
GradesDB, make sure to create a new test class for it (e.g.,
Instructors and TAs use the GradesTool application to get information about the students’ performance. They can pick the name of a student from a list, and the application shows the student information. A possible GUI for the tool is the following:
Using the tool, users can see a student’s name, GT ID, e-mail address, project information, and assignment information. Project information includes, for each project, the student’s team grades, the average grade across teams, and the average contribution received by the student from his/her team members. Analogously, assignment information includes, for each assignment, the student grade and the average grade for the class.
The users of the tool can select a student and save his/her information in a file named after the student (e.g., LaraineSmith.txt) and saved in the current directory (i.e., the directory from which the tool is run).
Team class to hold information about a particular team, including team number, list of student names, team grade, and list of average contribution ratings.
Teams class to hold information about all teams in a class. The class should contain a constructor that takes a reference to a
GradesDB instance as input and constructs (and stores) the
Team objects based on the information in that instance. The class should also provide a method that refreshes the list of teams.
Project class to hold information about a particular project, including project number, project description, list of teams, and average project grade.
Projects class to hold information about all projects for a class. The class should contain a constructor that takes a reference to a
GradesDB instance as input and constructs (and stores) the
Project objects based on the information in that instance. The class should also provide a method that refreshes the list of projects.
Student class to hold additional information about the student, including email address, and each team the student was on.
GradesDB class by creating a method that outputs all information for a student, which can be either written to a text file or in the text box in the GUI.
GradesToolGUI class with a title bar to display the application name, combo box to display a list of students, text box to display information about the selected student, and a save button to save the student information to a text file
edu.gatechunder directory "test" (where the other test cases are).
edu.gatechunder directory "src" (where your other code is).
Now that you have written test cases for the additional functionality in your application, it is time to write the code that implements such functionality, realizes the provided story and task cards, and makes the test cases that you wrote pass.
In addition, the customers decided that they would like to integrate your code into a larger grading system, so they need for the code to conform to some specific interfaces (and consequently provide some additional functionality). After some discussion with the customer and the software analysts, the management in your company decided to provide part of these additional features at no additional cost for the customer, and part of it at an extra cost. They also put the software analysts at work right away to transform the additional requirements in task cards, which are provided below.
Projects so that it implements interfaces
ProjectsInterface (see instructions above on where to download it). The semantics of the methods in the interface should be clear from their name. Please ask if this is not the case.
Teams so that it implements interfaces
TeamsInterface (see instructions above on where to download it). The semantics of the methods in the interface should be clear from their name. Please ask if this is not the case.
(Optional, for extra credit.) Extend the
GradesDB class so that it implements interface
OverallGradeCalculatorInterface (see instructions above on where to download it). A user of the class shall be able to specify a formula for computing student grades and use the class to compute such grades according to the formula. The formula format is:
Operators: +, -, *, /, (, and ), with their obvious meaning
Example formula: AS * 0.2 + AT * 0.2 + ((PR1 + PR2 + PR3)/3) * 0.6
edu.gatechunder directory "src" (where the rest of the code is).