CS& 141, Spring 2022 Programming Project #3: Gradanator (20 points) Due Thursday, April 28th, 2022, 11:59 PM Based on an
Posted: Wed Apr 27, 2022 3:31 pm
CS& 141, Spring 2022 Programming Project #3: Gradanator (20 points) Due Thursday, April 28th, 2022, 11:59 PM Based on an assignment from the University of Washington by Marty Stepp This program reads exam/project scores This interactive program focuses on if/else statements, Scanner, and reports your overall course grade. and returning values. Turn in a file named Gradanator.java. To Midterm: use a Scanner for console input, you must import java.util.*; Weight (0-100)? 20 in your code. The program reads as input a student's grades on Score earned? 84 Were scores shifted (1=ves, 2=no)? 2 projects, labs and two exams and uses them to compute the student's Total points = 84 / 100 course grade. Weighted score = 16.8 / 20 To the left is one example log of execution from the program. This Final: Weight (0-100)? 30 program behaves differently depending on the user input; user input Score earned? 95 is bold and underlined at left. Your output should match our Were scores shifted (1=yes, 2=no)? 1 examples exactly given the same input. (Be mindful of spacing, such Shift amount? 10 Total points = TOO / 100 as after input prompts and between output sections.) Look at the Weighted score = 30.0 / 30 other example logs on the course web site to get more examples of Project: the program's behavior. Weight (0-100)? 40 Number of assignments? 3 The program begins with an introduction message that briefly Assignment 1 score? 14 explains the program. The program then reads scores in five Assignment 1 max? 157 categories: midterm, final, projects, labs and small problems. Each Assignment 2 score? 17 Assignment 2 max? 20 category is weighted its points are scaled up to a fraction of the 100 Assignment 3 score? 19 percent grade for the course. As the program begins reading each Assignment 3 max? 25 Total points = 50 T 60 category, it first prompts for the category's weight. Weighted score = 33.3 / 40 The user begins by entering scores earned on the midterm. The Labs: program asks whether exam scores were shifted, interpreting an Weight (0-100)? 5 Totál points earned? 12 answer of 1 to mean "yes" and 2 to mean “no." If there is a shift, the Total points possible? 12 program prompts for the shift amount, and the shift is added to the Total points = 12 / 12 user's midterm score. Exam scores are capped at a max of 100; for Weighted score = 5.0 / 5 example, if the user got 95 and there was a shift of 10, the score to Small Problems : use would be 100. The midterm's "weighted score" is printed, which Weight (0-100)? 5 Total points earned? 5 is equal to the user's score multiplied by the exam's weight. Total points possible? 10 Total points=5 / 10 Next, the program prompts for data about the final. The behavior for Weighted score = 2.5 / 5 the final is the same as the behavior for the midterm. Overall percentage = 87.6 Next, the user enters information about his/her projects, including the Your grade will be at least: 3.0 weight and how many assignments were given. For each assignment, << your custom grade message here >> 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 small problems section 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 + WeightedProjectScore + WeightedLabscore + WeightedSmallProblems Score 84 100 14+17+19 12 Grade = x 20 x 30 + x 100 100 15+20+25 Grade = 16.8+ 30.0+33.3+5+2.5 Grade = 87.63 + x 20)+(2 <5)+(fo *5] x 1 of 3
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: A student can receive extra credit on an individual assignment, but the total points for projects are capped at the maximum possible. For example, a student can receive a score of 22/20 on one project, but if their total project score for all projects is 63/60, this score should be capped at 60/60. • Cap exam scores at 100. If the raw or shifted exam score exceeds 100, a score of 100 is used. • Cap labs and small problems at 100%. No extra credit should be possible in these two categories. 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 projects 2 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. Development Strategy and Hints: • Tackle parts of the program (midterm, projects, final exam, labs, small programs) 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 project scores, you will need to cumulatively sum not only the total points the student has earned, but also the total points possible on all projects. • Many students get "cannot find symbol" compiler errors. Common mistakes include forgetting to pass / return a needed value, forgetting to store a retumed 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.printe. The following code prints variable x rounded to the nearest tenth: double x = 1.2345; System.out.printf("x is around 6.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. Style Guidelines: For this assignment, you are limited to Java features from weeks 1-3. A major part of this assignment is demonstrating that you understand parameters and retum values. Use static methods, parameters, and returns for structure and to eliminate redundancy. For full credit, use at least 4 non-trivial methods other than main. For reference, our solution is roughly 110 lines long (66 "substantive"), with 6 methods other than main, though you do not need to match this. Like on previous assignments, you should not have printin statements in your main method. Also, main should be a concise summary of the overall program, main should make calls to several of your other methods that implement the majority of the program's behavior. Your methods will need to make appropriate use of parameters and return values. Each method should perform a coherent task and should not do too large a share of the overall work. Avoid lengthy "chaining” of method calls, where each method calls the next, no values are returned, and control does not come back to main. This document describes several numbers that are important to the overall program. For full credit, you should make at lcast onc of such numbers into a class constan that the constant could be changed and your program would adapt. When handling numeric data, you are expected to chance appmpriately between types int and couble You will lose points if you use type double for variables in cases where type int would be more appropriate. 2 of 3 Some of your code will use conditional execution with if and if/else statements. Part of your grade will come from using these statements properly. Give meaningful names to methods and variables, and use proper indentation and whitespace. Follow Java's naming standards as specified in lecture. Localize variables when possible; declare them in the smallest scope needed. Include meaningful comment headers at the top of your program and at the start of each method. Limit line lengths to 100 chars.
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: A student can receive extra credit on an individual assignment, but the total points for projects are capped at the maximum possible. For example, a student can receive a score of 22/20 on one project, but if their total project score for all projects is 63/60, this score should be capped at 60/60. • Cap exam scores at 100. If the raw or shifted exam score exceeds 100, a score of 100 is used. • Cap labs and small problems at 100%. No extra credit should be possible in these two categories. 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 projects 2 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. Development Strategy and Hints: • Tackle parts of the program (midterm, projects, final exam, labs, small programs) 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 project scores, you will need to cumulatively sum not only the total points the student has earned, but also the total points possible on all projects. • Many students get "cannot find symbol" compiler errors. Common mistakes include forgetting to pass / return a needed value, forgetting to store a retumed 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.printe. The following code prints variable x rounded to the nearest tenth: double x = 1.2345; System.out.printf("x is around 6.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. Style Guidelines: For this assignment, you are limited to Java features from weeks 1-3. A major part of this assignment is demonstrating that you understand parameters and retum values. Use static methods, parameters, and returns for structure and to eliminate redundancy. For full credit, use at least 4 non-trivial methods other than main. For reference, our solution is roughly 110 lines long (66 "substantive"), with 6 methods other than main, though you do not need to match this. Like on previous assignments, you should not have printin statements in your main method. Also, main should be a concise summary of the overall program, main should make calls to several of your other methods that implement the majority of the program's behavior. Your methods will need to make appropriate use of parameters and return values. Each method should perform a coherent task and should not do too large a share of the overall work. Avoid lengthy "chaining” of method calls, where each method calls the next, no values are returned, and control does not come back to main. This document describes several numbers that are important to the overall program. For full credit, you should make at lcast onc of such numbers into a class constan that the constant could be changed and your program would adapt. When handling numeric data, you are expected to chance appmpriately between types int and couble You will lose points if you use type double for variables in cases where type int would be more appropriate. 2 of 3 Some of your code will use conditional execution with if and if/else statements. Part of your grade will come from using these statements properly. Give meaningful names to methods and variables, and use proper indentation and whitespace. Follow Java's naming standards as specified in lecture. Localize variables when possible; declare them in the smallest scope needed. Include meaningful comment headers at the top of your program and at the start of each method. Limit line lengths to 100 chars.