1. The system must be able to manage multiple students (max of 15) and their grades for assignments from three different assignment groups: homework (total of 5), quizzes (total of 5), and exams (total of 3).

2. For each student record, the user should be able to change the grade for any assignment. These grades should be accessible to the gradebook for calculations, but not visible or directly mutable outside of the student record.

3. The gradebook should know the name of the course. It should also know the weights of each assignment group and be able to print a report to the screen. This report should contain the course name and a well-formatted table containing columns for the student names, and for each assignment group. The group weights should be displayed (as a percentage) next to the name of each assignment group in the table’s header. It should be possible to add and remove students from the gradebook, and the maximum number of students supported is 15. Removals from the gradebook should shift each successive student "up" in the list. For example, if student 5 is removed from the gradebook, the remaining students starting
with student 6 should be moved up a slot (i.e. student 6 to student 5’s old slot, student 7 to student 6’s old slot, etc.)

4. A user interface should be created with a menu system used to navigate the functionality necessary to complete the stated requirements. It is recommended to use a simple numbering scheme when prompting the user for their desired action. See the end of this project sheet for a reference you may use for the menus.

5. All names (student names, gradebook name) should be set to "" prior to being set by the user. This could also be used in logic to determine whether or not a student entry in the gradebook is "valid". Empty student slots should not be displayed in menus that require the user to identify a student record to modify.

6. The gradebook should be able to calculate class averages from the student records. The averages are the sum of the valid grades divided by the total number of valid grades for that group (i.e. ungraded assignments are not part of the total number of valid grades). Since each student record could contain a different number of grades for each category, the class average should be computed as the average of each student’s average for each assignment group as well as their final grade. When computing the average final grade, don’t forget to use the group weights

-=| MAIN MENU |=-
1. Add a student
2. Remove a student
3. Change a student’s grade
4. Change group weights
5. Change the gradebook name
6. Display class averages
7. Display full report
0. QUIT

Enter an action: 1


-=| ADDING STUDENT |=-
Please enter the student’s name: Name Here

Name Here was successfully added to the gradebook!

-=| ADDING STUDENT |=- Students cannot be added because the gradebook is full!
-=| REMOVING STUDENT |=-
1. John Doe
2. Jane Doe
3. Third Person

Enter student to remove: 1

"John Doe" has been successfully removed! (New class size: 2)

-=| REMOVING STUDENT |=- Cannot remove students because the gradebook is empty!


-=| CHANGING GRADE |=-
1. Change a homework grade
2. Change a quiz grade
3. Change an exam grade

What type of grade would you like to change: 2

1. John Doe
2. Jane Doe
3. Third Person
Which student’s grade would you like to change? 3

-=| CHANGING Third Person’s QUIZ GRADE |=-
1. 68
2.
3. 97
4.
5.

Which quiz grade would you like to change: 2
What would you like to change it to (-1 for ungraded): 89

Third Person’s quiz grade 2 was changed from to 89!




-=| CHANGING WEIGHTS |=-
Enter the weights, separated by spaces, in the order of homework, quizzes, and exams (total must add up to 1.0):
0.15 0.25 0.7
Weights do not add up to 1.0, try again...

Enter the weights, separated by spaces, in the order of homework, quizzes, and exams (total must add up to 1.0):
0.15 0.2 5 0.6
Weights updated successfully!

-=| CHANGING NAME |=-
Please enter the new name for the gradebook: COP3014


Gradebook name changed from "" to "COP3014"

-=| CLASS AVERAGES |=-
Homework average of class: 85.13%
Quiz average of class: 81.57%
Exam average of class: 77.40%
Final average of class: 79.60%


-=| GRADEBOOK REPORT |=-
Course: COP3014
Quiz average of class: 81.57%
Exam average of class: 77.40%
Final average of class: 79.60%

Student | Homework (15%) | Quizzes (25%) | Exams (60%) | HW AVG | Quiz Avg | Exam Avg | Final Grade |
-----------------|------------------|-----------------|-----------------|--------|----------|----------|-------------|
John Doe | 82 71 87 94 UG | . . . | . . . | 83.50 | . . . | . . . | . . . |
Jane Doe | 87 78 92 UG UG | . . . | . . . | 85.67 | . . . | . . . | . . . |
Third Person | 83 UG 85 UG UG | . . . | . . . | 84.00 | . . . | . . . | . . .

programming language is C++

Respuesta :

Answer:

#include<iostream>

#include<string.h>

using namespace std;

class gradebook;

class student

{

friend class gradebook;

char name[20]; // std name

int homework_grades[6], quiz_grades[6], exam_grades[4]; //grades array

float homework_avg, quiz_avg, exam_avg, final_avg;

};

class gradebook

{

student list[16];

public:

char gb_name[20]; // gradebook name

int max, total;

// Constructor

gradebook()

{

strcpy(gb_name,"noname");

max = 5;

total = 0;

for(int i=1;i<=15;i++)

{

strcpy(list[i].name,"noname");

for(int j=1;j<=5;j++)

{

list[i].homework_grades[j] = -1;

list[i].quiz_grades[j] = -1;

}

list[i].exam_grades[1] = list[i].exam_grades[2] = list[i].exam_grades[3] = -1;

}

}

// Member functions

void display_std_name();

void display_grades(int, int);

int add_std(char *new_name);

int remove(int);

//int ch_grade(int, int);

};

// Define all functions

// Remove a student from list and adjust remaining

int gradebook::remove(int std_id)

{

if(total==0 || std_id>total || std_id<=0)

return 0;

if(std_id==total)

{

cout<<"\n“"<<list[std_id].name<<"” has been successfully removed! (New class size: 2)";

strcpy(list[total--].name,"noname");

return 1;

}

cout<<"\n“"<<list[std_id].name<<"” has been successfully removed! (New class size: 2)";

for(int i=std_id; i<total; i++)

{

list[i]=list[i+1];

}

total--;

return 1;

}

// Add student to gradebook

int gradebook::add_std(char *new_name)

{

if(total<15)

{

strcpy(list[++total].name, new_name);

return 1;

}

return 0;

}

// Display student name list

void gradebook::display_std_name()

{

for(int i=1;i<=total;i++)

{

cout<<"\n"<<i<<" "<<list[i].name;

}

}

/* Display grades of students

// (grade_id, student_number_in_list)

homework(1), quiz(2), exam(3)

*/

void gradebook::display_grades(int g_id, int std_id)

{

int i;

if(std_id<=total)

{

if(g_id==1)

{

for(i=1;i<6;i++)

{

cout<<"\n"<<i<<". ";

if(list[std_id].homework_grades[i]==-1) cout<<"<ungraded>";

}

}

else if(g_id==2)

{

for(i=1;i<6;i++)

{

cout<<"\n"<<i<<". ";

if(list[std_id].quiz_grades[i]==-1) cout<<"<ungraded>";

}

}

else if(g_id==3)

{

for(i=1;i<4;i++)

{

cout<<"\n"<<i<<". ";

if(list[std_id].exam_grades[i]==-1) cout<<"<ungraded>";

}

}

}

else

cout<<"\nNo such std exists";

}

/****************************** MAIN ****************************/

int main()

{

int main_choice, grade_choice, std_id, new_grade;

char g_name[20], s_name[20];

float a,b,c;

gradebook g;

do

{

cout<<"\n\n-=| MAIN MENU |=-";

cout<<"\n1. Add a student\n2. Remove a student\n3. Change a student’s grade\n4. Change group weights\n5. Change the gradebook name\n6. Display class averages\n7. Display full report\n0. QUIT\n";

cout<<"\nEnter an action: ";

cin>>main_choice;

switch(main_choice)

{

case 0:

break;

case 1:

cout<<"\n-=| ADDING STUDENT |=-";

cout<<"\nPlease enter the student’s name: ";

cin>>s_name;

if(g.add_std(s_name))

cout<<"\n"<<s_name<<" was successfully added to the gradebook!";

else

cout<<"\nStudents cannot be added because the gradebook is full!";

break;

case 2:

cout<<"\n-=| REMOVING STUDENT |=-";

if(g.total!=0)

{

g.display_std_name();

cout<<"\n Enter student to remove: ";

cin>>std_id;

if(!g.remove(std_id))

cout<<"\nCannot remove students";

}

else

cout<<"\nStudents cannot be added because the gradebook is full!";

break;

case 3:

cout<<"\n-=| CHANGING GRADE |=-\n1. Change a homework grade\n2. Change a quiz grade\n3. Change an exam grade";

cout<<"\nWhat type of grade would you like to change: ";

cin>>grade_choice;

g.display_std_name();

cout<<"\nWhich student’s grade would you like to change? ";

cin>>std_id;

//ch_grade(grade_choice, std_id);

g.display_grades(grade_choice, std_id);

break;

/*

case 4:

cout<<"\n-=| CHANGING WEIGHTS |=-";

while(1)

{

cout<<"\nEnter the weights, separated by spaces, in the order of homework, quizzes, and exams (total must add up to 1.0):";

cin>>a>>b>>c;

if(a+b+c==1.00)

break;

else

cout<<"\n Weights do not add up to 1.0, try again...";

}

break;

case 5:

cout<<"\n-=| CHANGING NAME |=-\nPlease enter the new name for the gradebook: ";

cin>>g_name;

cout<<"\n Gradebook name changed from “ ” to "<<g_name;

break;

case 6:

cout<<"\n-=| CLASS AVERAGES |=-";

cout<<"\nHomework average of class: ";

cout<<"\nQuiz average of class: ";

cout<<"\nExam average of class: ";

cout<<"\nFinal average of class: ";

break;

case 7:

break;

*/

default:

cout<<"\n\nInvalid input\n\n";

}

}while(main_choice!=0);

return 0;

}

Explanation: