This interactive program focuses on if/else statements, Scanner, and returning values. Turn in a file named Gradanator.java. To use a Scanner for console input, you must import java.util.*; in your code. The program reads as input a student's grades on homework, labs and two exams and uses them to compute the student's course grade.
This program reads exam/homework scores
and reports your overall course grade.
Midterm:
Weight (0-100)? 20
Score earned? 84
Were scores shifted (1=yes, 2=no)? 2
Total points = 84 / 100
Weighted score = 16.8 / 20
Final:
Weight (0-100)? 30
Score earned? 95
Were scores shifted (1=yes, 2=no)? 1
Shift amount? 10
Total points = 100 / 100
Weighted score = 30.0 / 30
Homework:
Weight (0-100)? 40
Number of assignments? 3
Assignment 1 score? 14
Assignment 1 max? 15
Assignment 2 score? 17
Assignment 2 max? 20
Assignment 3 score? 19
Assignment 3 max? 25
Total points = 50 / 60
Weighted score = 33.3 / 40
Labs:
Weight (0-100)? 5
Total points earned? 12
Total points possible? 12
Total points = 12 / 12
Weighted score = 5.0 / 5
Daily homework:
Weight (0-100)? 5
Total points earned? 5
Total points possible? 10
Total points = 5 / 10
Weighted score = 2.5 / 5
Overall percentage = 87.6
Your grade will be at least: 3.0
<< your custom grade message here >>
To the left is one example log of execution from the program. This program behaves differently depending on the user input; user input is bold and underlined at left. Your output should match our examples exactly given the same input. (Be mindful of spacing, such as after input prompts and between output sections.) Look at the other example logs on the course web site to get more examples of the program's behavior.
The program begins with an introduction message that briefly explains the program. The program then reads scores in five categories: midterm, final, homework, labs and daily problems. Each category is weighted: its points are scaled up to a fraction of the 100 percent grade for the course. As the program begins reading each category, it first prompts for the category's weight.
The user begins by entering scores earned on the midterm. The program asks whether exam scores were shifted, interpreting an answer of 1 to mean "yes" and 2 to mean no. If there is a shift, the program prompts for the shift amount, and the shift is added to the user's midterm score. Exam scores are capped at a max of 100; for example, if the user got 95 and there was a shift of 10, the score to use would be 100. The midterm's weighted score is printed, which is equal to the user's score multiplied by the exam's weight.
Next, the program prompts for data about the final. The behavior for the final is the same as the behavior for the midterm.
Next, the user enters information about his/her homework, including the weight and how many assignments were given. For each assignment, the user enters a score and points possible. Use a cumulative sum as described in lecture.
The program then prompts for the information about the student's lab scores. The lab score should be capped at the total points for labs the user entered. The daily homework follows next. It is computed the same as the labs.
Once the program has read the user information for all categories, it prints the student's overall percentage earned in the course, which is the sum of the weighted scores from the six categories, as shown below:
Grade = WeightedMidtermScore + WeightedFinalScore + WeightedHomeworkScore + WeightedLabScore + WeightedDailyProblemsScore
Grade = (84/100 x 20) + (100/100 x 30) + (14+17+19/15+20+25 x 40) + (12/12 x 5) + (5/10 x 5)
Grade = 16.8 + 30.0 + 33.3 + 5 + 2.5
Grade = 87.63
The program prints a loose guarantee about a minimum grade the student will get in the course, based on the following scale. See the logs of execution on the course web site to see the expected output for each grade range.
90% and above: 3.5
89.99% - 85%: 3.0
84.99% - 80%: 2.5
79.99% - 75%: 2.0
74.99% - 70%: 1.5
69.99% - 60%: 0.7
under 60%: 0.0
After printing the guaranteed minimum grade, print a custom message of your choice about the grade. This message should be different for each grade range shown above. It should be at least 1 line of any non-offensive text you like.
This program processes user input using a Scanner. You should handle the following three special cases of input:
Otherwise, you may assume the user enters valid input. When prompted for a value, the user will enter an integer in the proper range. The user will enter a number of homework assignments >= 1, and the sum of the six weights will be exactly 100. The weight of each category will be a non-negative number. Exam shifts will be >= 0.
Tackle parts of the program (midterm, homework, final exam, labs, daily homework) one at a time, rather than writing the entire program at once. Write a bit of code, get it to run, and test what you have so far. If you try to write large amounts of code without attempting to run it, you may encounter a large list of errors and/or bugs.
To compute homework scores, you will need to cumulatively sum not only the total points the student has earned, but also the total points possible on all homework assignments.
Many students get "cannot find symbol" compiler errors. Common mistakes include forgetting to pass / return a needed value, forgetting to store a returned value into a variable, and referring to a variable by the wrong name.
All weighted scores and grades are printed with no more than 1 digit after the decimal point. Achieve this with a custom method or System.out.printf. The following code prints variable x rounded to the nearest tenth:
double x = 1.2345;
System.out.printf("x is around %.1f in size.\n", x); // 1.2
If you are getting scores of 0 regardless of what data the user types, you may have a problem with integer division. See Chapter 2 about types int and double, type-casting, and how to avoid integer division problems. If you have a value of type double but need to convert it into an int, use a type-cast such as the following:
double d = 5.678;
int i = (int) d; // 5
Use Math.max and Math.min to constrain numbers to within a particular bound.