This assignment is due Monday, November 20.
This assignment uses the material from Sections 5.1 and 5.2 of the textbook. It is (loosely) based on Practice Exercise 3 on page 372 at the end of Chapter 5. This assignment makes use of the files contained in this zip file.
For this assignment you will write a class called GradeDistribution.java
that represents a collection of grades, and then you will write a program TestGradeDistribution.java
that tests your GradeDistribution
class.
Your GradeDistribution
class should have the following private instance variables, all of which are of type int
. (You can copy and paste this list of variables into your code.)
lowest highest numberOfAs numberOfABs numberOfBs numberOfBCs numberOfCs numberOfCDs numberOfDs numberOfDFs numberOfFs
For this assignment, grades are classified according to the following grading scale.
A | 93 - 100 |
AB | 88 - 92 |
B | 83 - 87 |
BC | 78 - 82 |
C | 73 - 77 |
CD | 68 - 72 |
D | 63 - 67 |
DE | 58 - 62 |
F | 57 or less |
Your GradeDistribution
class should have the following public instance methods. Copy and paste this list into your code and then complete the definition for each method.
void enterGrade(int grade) int getLowest() int getHighest() int getTotalNumberOfGrades() int getNumberOfAs() int getNumberOfABs() int getNumberOfBs() int getNumberOfBCs() int getNumberOfCs() int getNumberOfCDs() int getNumberOfDs() int getNumberOfDFs() int getNumberOfFs() int getPerCentA() int getPerCentAB() int getPerCentB() int getPerCentBC() int getPerCentC() int getPerCentCD() int getPerCentD() int getPerCentDF() int getPerCentF() void drawGraph()
The enterGrade()
method accepts a grade as its parameter and then classifies that grade (which means add 1 to the appropriate instance variable). This method should also determine if the grade is a new highest or lowest grade. Notice that this method enters grades into the GradeDistribution
object that it is part of. This is the only way to modify the data stored in a GradeDistribution
object. Also notice that it is this method's parameter that is the grade to record in the object. This method should not prompt a user for any data.
Each getPerCent?()
method should compute the percentage of its number of grades out of the total number of grades. This should be calculated like this.
(int)Math.round( (100.0 * numberOf?s) / getTotalNumberOfGrades() )
The drawGraph()
method outputs a bar graph of the grade distribution. In the zip file there is a demo version of this assignment. You can run the demo version to see exactly how your bar graph is supposed to look (see details below).
When your GradeDistribution
class is done, you can test it in DrJava's interactions pane with interactions like this.
> GradeDistribution gd = new GradeDistribution() > gd.enterGrade(68) > gd.enterGrade(75) > gd.enterGrade(61) > gd.enterGrade(88) > gd.getNumberOfCs() > gd.getPerCentC() > gd.getTotalNumberOfGrades() > gd.getHighest() > gd.drawGraph() > gd.enterGrade(94) > gd.getHighest() > gd.drawGraph() > GradeDistribution gd2 = new GradeDistribution() > gd2.enterGrade(95) > gd2.enterGrade(94) > gd2.enterGrade(85) > gd2.enterGrade(84) > gd2.drawGraph() > gd.drawGraph()
Write a program TestGradeDistribution.java
that is similar to your Hw4.java
program. Your TestGradeDistribution.java
program should, like Hw4.java
, read grades from "standard input" and the inputting of grades should be terminated by any negative number. But your TestGradeDistribution.java
program should not keep its own statistics (like Hw4.java
did). Instead, your program should create a GradeDistribution
object and, for each grade that is read in, use the enterGrade()
method to enter the grade into the GradeDistribution
object. That way, the GradeDistribution
object does the work of calculating, keeping, and reporting the statistics on all the grades.
When your TestGradeDistribution.java
program is done, you can test it with your GradeDistribution
class using a Windows command prompt and two programs from the zip file called CreateRandomGrades.java
and CreateRandomCurvedGrades.java
. These two programs generate random grades that can be used as input to your TestGradeDistribution.java
program. At a Windows command prompt, opened in your hw5
folder, try the command
C:\hw6> java CreateRandomGrades 20
You should see twenty random grades. You can run the random grades into your test program by using the following command. This command makes your TestGradeDistribution
program read its input directly from the output of the CreateRandomGrades
program.
C:\hw6> java CreateRandomGrades 20 | java TestGradeDistribution
In the zip file there are compiled demo versions of this assignment that you can run to see exactly how the output from your TestGradeDistribution.java
program should look. To make sure your program creates the correct output, type the following sequence of commands at the Windows command prompt.
C:\hw6> java CreateRandomGrades 20 > data.txt C:\hw6> java TestGradeDistribution_Demo < data.txt C:\hw6> java TestGradeDistribution < data.txt
The first command creates a data file of grades. The second command runs that data file into the demo version of this assignment and produces the correct output. The third command runs that same data file through your version of the assignment. Your version should produce the exact same output as the demo version.
The drawGraph()
method should draw only the bar graph (with its scale). All the other output should be from the TestGradeDistribution.java
program, but it should be getting the statisitcs from its GradeDistribution
object using the object's acesssor ("get") methods.
Turn in a zip file called CS123Hw6Surname.zip
(where Surname
is your last name) containing your version of GradeDistribution.java
and TestGradeDistribution.java
.
This assignment is due Monday, November 20.