Skip to content

Instantly share code, notes, and snippets.

@azmodius
Last active November 13, 2016 21:36
Show Gist options
  • Save azmodius/62dad9d728c910697635d6a85875f22e to your computer and use it in GitHub Desktop.
Save azmodius/62dad9d728c910697635d6a85875f22e to your computer and use it in GitHub Desktop.
Beth's HW!
#include <iostream>
#include <array>
#include <string>
#include <iomanip>
#include <fstream>
using namespace std;
const int NUMSTUDENTS = 10;
const int NUMASSIGNMENTS = 10;
struct Student
{
string nameFirst;
string nameLast;
double assignment[NUMASSIGNMENTS];
};
void displayMenu();
void addStudent(int &numStudents, int &numAssignments, Student students[]);
void assignGrades(int &numStudents, int &numAssignments, Student students[]);
void displayStudentGrades(int numStudents, int numAssignments, Student students[]); //displays grades for one student
void listAllScores(int numStudents, int numAssignments, Student students[]); // lists scores for one assignment
void displayGradeBook(int numStudents, int numAssignments, Student students[]); //saves gradebook to file
int main()
{
displayMenu();
return 0;
}
void displayMenu()
{
int menuChoice;
Student students[NUMSTUDENTS];
int numStudents = 0;
int numAssignments = 0;
do
{
cout << "What would you like to do? \n1 ADD a new student \n2 ASSIGN GRADES for a new assignment\n"
<< "3 LIST one student, displaying all their grades and their course average \n4 LIST all the scores for a chosen assignment\n"
<< "5 DISPLAY all grades currently contained in the gradebook \n6 QUIT " << endl;
cin >> menuChoice;
switch (menuChoice)
{
case 1:
{
cout << numStudents << " " << numAssignments;
addStudent(numStudents, numAssignments, students);
break;
}
case 2:
{
assignGrades(numStudents, numAssignments, students);
break;
}
case 3:
{
displayStudentGrades(numStudents, numAssignments, students);
break;
}
case 4:
{
listAllScores(numStudents, numAssignments, students);
break;
}
case 5:
{
displayGradeBook(numStudents, numAssignments, students);
break;
}
case 6:
break;
default:
{
cout << "You didn't input a proper menu choice. Please try again. " << endl;
}
}
} while (menuChoice != 6);
}
void addStudent(int &numStudents, int &numAssignments, Student students[])
{
cout << numStudents << " " << numAssignments;
cout << &numStudents << " " << &numAssignments;
if (numStudents < 10)
{
cout << "What is the student's FIRST and LAST name? ";
cin >> students[numStudents].nameFirst >> students[numStudents].nameLast;
if (numAssignments > 0)
{
cout << "Now you must give them the grades they earned on prior assignments." << endl;
assignGrades(numStudents, numAssignments, students);
}
numStudents++;
cout << numStudents;
}
else
{
cout << "You have a problem. You cannot have more than 10 students." << endl;
}
}
void assignGrades(int &numStudents, int &numAssignments, Student students[])
{
cout << numStudents << " " << numAssignments;
cout << &numStudents << " " << &numAssignments;
if (numStudents > 0)
{
if (numAssignments < 10)
{
for (int i = 0; i < numStudents; i++)
{
cout << "For student " << i + 1 << " please input the student's score for";
for (int j = 0; j <= numAssignments; j++)
{
cout << " assignment " << j + 1 << ": ";
cin >> students[i].assignment[j];
}
}
}
else
{
cout << "You have a problem. You cannot have more than 10 assignments." << endl;
}
}
else
{
cout << "You cannot add grades until you have at least one student mentioned." << endl;
addStudent(numStudents, numAssignments, students);
cout << "Now you can give them grades. " << endl;
assignGrades(numStudents, numAssignments, students);
}
++numAssignments;
}
void displayStudentGrades(int numStudents, int numAssignments, Student students[])
{
if (numStudents > 0 && numAssignments > 0)
{
double average;
double total = 0;
cout << "This will display the grades and average for one student." << endl;
cout << "These are the students, whose grades do you want to see? Type the number next to their name: " << endl;
for (int i = 0; i < numStudents; i++) // show all students so it is easy to pick the desired one
{
cout << i << " " << students[i].nameFirst << " " << students[i].nameLast << endl;
}
int pickedStudent;
cin >> pickedStudent;
for (int i = 0; i < numAssignments; i++) // display all of their grades
{
cout << "Student's score for assignment " << i + 1 << " " << students[pickedStudent].assignment[i] << endl;
total += students[pickedStudent].assignment[i];
}
average = static_cast<double>(total / numAssignments);
cout << "The student's course average is: " << average << endl;
}
else
{
cout << "You have an error. Please input more data, then try again." << endl;
}
}
void listAllScores(int numStudents, int numAssignments, Student students[])
{
double total = 0;
double average;
if (numStudents > 0 && numAssignments > 0)
{
int assignmentIndex;
cout << "What number assignment do you wish to see? The possible numbers are from 1 to " << numAssignments;
cin >> assignmentIndex;
for (int i = 0; i < numStudents; i++)
{
cout << students[i].assignment[assignmentIndex] << endl;
total += students[i].assignment[assignmentIndex];
}
average = static_cast<double>(total / numAssignments);
cout << "The class's average for this assignment is: " << average << endl;
}
else
{
cout << "You have an error. Please input more data, then try again." << endl;
}
}
void displayGradeBook(int numStudents, int numAssignments, Student students[])
{
char userChoice;
ofstream saveGradesOUT;
cout << "show all student names and grades for each assignment";
cout << "Would you like to save the Grade Book as a text file named grades.txt? y/n";
cin >> userChoice;
if (userChoice == toupper('Y'))
{
saveGradesOUT.open("grades.txt");
for (int i = 0; i <= numStudents; i++)
{
saveGradesOUT << students[i].nameFirst << students[i].nameLast;
for (int j = 0; j <= numAssignments; j++)
saveGradesOUT << students[numAssignments].assignment[j] << " ";
saveGradesOUT << endl;
}
saveGradesOUT.close();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment