/* Grade Book Modification - A teacher has five students who have takenfour tests. The teacher uses the following grading scale to assign aletter grade to a student, based on the average of his or her fourtest scores.------------------------------------------------------Test Score Letter Grade------------------------------------------------------90 - 100 A80 - 89 B70 - 79 C60 - 69 D0 - 59 FThis program uses an array of string objects to hold the five studentnames, an array of five characters to hold the five student's lettergrades, and five arrays of four doubles to hold each student's set oftest scores.The program allows the user to enter each student's name and his orher four test NUM_SCORES. It then calculates and displays each student'saverage test score and a letter grade based on the average.Input Validation: No test scores less than 0 or greater than 100 areaccepted.Modification:* This program drops each student's lowest score when determining thetest score averages and letter grades */#include "Utility.h"/* Global Constant Variables: Number of students, Number of test scores */const int NUM_SCORES = 4,NUM_STUDENTS = 5;/* Function Prototypes: Get data, Calculate average, Get letter grades,Display result */void getData(string[], string[], double[][NUM_SCORES]);void dropLowest(const double[][NUM_SCORES], double[]);void calcAverage(const double[][NUM_SCORES], double[], double[]);void getLetterGrade(const double[], char[]);void displayResult(const string[], const string[], const double[][NUM_SCORES],const double[], const char[], const double[]);int main(){/* Array variables: Names, Subjects, Letter grades, Scores,Average */string names[NUM_STUDENTS] = { " " };string subjects[NUM_SCORES] = { "Math", "Bio", "Chem", "His" };char letterGrades[5] = { 'A', 'B', 'C', 'D', 'F' };double scores[NUM_STUDENTS][NUM_SCORES] = { { 0.0 } };double lowest[5] = { 0.0 };double average[NUM_STUDENTS] = { 0.0 };/* Call: getData, calcAverage, getLetterGrade, displayResult */getData(names, subjects, scores);dropLowest(scores, lowest);calcAverage(scores, average, lowest);getLetterGrade(average, letterGrades);displayResult(names, subjects, scores, average, letterGrades, lowest);pauseSystem();return 0;}/* **********************************************************Definition: getDataThis function accepts the following arrays as arguments:* names[]* subjects[]* scores[]This function asks the user for five student names, andtheir four test scores.********************************************************** */void getData(string names[], string subjects[], double scores[][NUM_SCORES]){/* Variables: Name index, Score index (loop counters) */int namesIdx = 0,scoresIdx = 0,inputCtrl = 0;/* Display: Header */cout << "\t\tISHIKAWA JHS 114 - STUDENT MONTHLY SCORE REPORT\n\n";/* These loops get the five student names from the user whichare stored in names[], and then ask for the five sets offour scores, which are then stored in scores[][] */for (namesIdx = 0; namesIdx < NUM_STUDENTS; namesIdx++){cout << "Enter name of the student: ";cin >> names[namesIdx];for (scoresIdx = 0; scoresIdx < NUM_SCORES; scoresIdx++){cout << subjects[scoresIdx] << " score: ";cin >> scores[namesIdx][scoresIdx];/* Input validation */for (inputCtrl = 0; scores[namesIdx][scoresIdx] < 0.0 ||scores[namesIdx][scoresIdx] > 100.0; inputCtrl++){cout << "\nInput failure: A number below 0.0 or above 100.0\n"<< "was entered. Please repeat your input.\n";cout << subjects[scoresIdx] << " score: ";cin >> scores[namesIdx][scoresIdx];}}cout << endl;}}/* **********************************************************Definition: dropLowestThis function accepts the following array as argument:* scores[][]* lowest[]It determines and stores the lowest scores in lowest[].********************************************************** */void dropLowest(const double scores[][NUM_SCORES], double lowest[]){/* Variables: Lower (accumulator), Index of names, Index of scores(loop counters) */int namesIdx = 0,scoresIdx = 0;double lower = scores[NUM_STUDENTS][0];for (namesIdx = 0; namesIdx < NUM_STUDENTS; namesIdx++){/* Reset: Lower */lower = scores[namesIdx][0];/* The lowest values found are stored in lowest[] */for (scoresIdx = 0; scoresIdx < NUM_SCORES; scoresIdx++){if (scores[namesIdx][scoresIdx] < lower)lower = scores[namesIdx][scoresIdx];lowest[namesIdx] = lower;}}}/* **********************************************************Definition: getAverageThis function accepts the following array as its argument:* scores[][]* average[]* lowest[]It calculates the average sum for each student and set oftest scores stored in the scores[][] array, and stores theresult in average[].********************************************************** */void calcAverage(const double scores[][NUM_SCORES], double average[],double lowest[]){/* Variables: Total (accumulator), Scores index,Names index (loop counters) */double total = 0.0;int scoresIdx = 0,namesIdx = 0;/* These loops calculate the total sum and the average for eachset of scores. The results are stored in average[] */for (int namesIdx = 0; namesIdx < NUM_STUDENTS; namesIdx++){/* Reset: total */total = 0.0;/* Modification: The lowest score dropped is subtracted fromtotal and divided by scoresIdx instead of NUM_SCORES */for (int scoresIdx = 0; scoresIdx < NUM_SCORES; scoresIdx++){total += scores[namesIdx][scoresIdx];average[namesIdx] = (total - lowest[namesIdx]) / scoresIdx;}}}/* **********************************************************Definition: getLetterGradeThis function accepts the following arrays as arguments:* letterGrades[]* average[]It determines and assigns the letter grades based on theaverage scores of each student, and stores the result ingrades[].********************************************************** */void getLetterGrade(const double average[], char grades[]){/* Variable: Name index (loop counter) */int namesIdx = 0;/* These ternary operators determine and assign the letter grades */for (namesIdx = 0; namesIdx < NUM_STUDENTS; namesIdx++){average[namesIdx] >= 90.0 && average[namesIdx] <= 100.0 ? grades[namesIdx] = 'A' :average[namesIdx];average[namesIdx] >= 80.0 && average[namesIdx] <= 89.9 ? grades[namesIdx] = 'B' :average[namesIdx];average[namesIdx] >= 70.0 && average[namesIdx] <= 79.9 ? grades[namesIdx] = 'C' :average[namesIdx];average[namesIdx] >= 60.0 && average[namesIdx] <= 69.9 ? grades[namesIdx] = 'D' :average[namesIdx];average[namesIdx] >= 0.0 && average[namesIdx] <= 59.9 ? grades[namesIdx] = 'F' :average[namesIdx];}}/* **********************************************************Definition: displayResultsThis function accepts the following arrays as arguments:* studentNames[]* subjects[]* letterGrades[]* scores[][]* lowest[]* average[]It displays the test results and final letter grades foreach student.********************************************************** */void displayResult(const string dNames[], const string dSubjects[],const double dScores[][NUM_SCORES], const double dAverage[],const char dLetterGrade[], const double lowest[]){/* Variable: Index of names, Index of scores (loop counter) */int namesIdx = 0,scoresIdx = 0;/* Display: Header*/cout << "\t\tISHIKAWA JHS 114 - STUDENT REPORT CARD\n\n"<< "\t(The lowest score will be dropped!)\n\n"<< "Student Name: " << "\t\t" << "Subject: " << "\t\t"<< "Score:\n";/* Display: The scores, averages and letter grades of each student */for (namesIdx = 0; namesIdx < NUM_STUDENTS ; namesIdx++){cout << fixed << showpoint << setprecision(1);cout << "\n-----------------------------------------------------\n"<< setw(10) << left << dNames[namesIdx] << endl;for (scoresIdx = 0; scoresIdx < NUM_SCORES; scoresIdx++){cout << setw(28) << right << dSubjects[scoresIdx]<< setw(25) << right << dScores[namesIdx][scoresIdx] << "\n";}for (int i = 0; i < 1; i++){cout << setw(54) << right << "------\n";}/* Modification: Display the lowest score that has been dropped */cout << "Dropped: "<< setw(44) << right << lowest[namesIdx] << endl;cout << "Average: " << setw(44) << right << dAverage[namesIdx]<< setw(10) << left;cout << "\n-----------------------------------------------------\n";cout << "Final Letter Grade: "<< setw(8) << right << dLetterGrade[namesIdx] << "\n";}}
Monday, February 13, 2017
Programming Challenge 7.13 - Grade Book Modification
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment