All pastes #32415 Raw Edit

Breadmonster 1

public text v1 · immutable
#32415 ·published 2005-12-04 20:32 UTC
rendered paste body
 #include <cstdlib>
      #include <iostream>
   
      #include <fstream>
   
      #include <string>
   
       
   
      using namespace std;
   
       
   
      /* BEGIN Structs */
   
      struct courses
  
      {
  
	string studentName[7];
          string studentID[7];
          int score[7];
      };
      struct results
      {
          string studentID[7];
          int average[7];
      };
      /*  END Structs */
       
      /* BEGIN Function Prototypes */
      int main(void);
      void menuStart(void);
      int menuChoice(void);
      void initializeStructs(courses course[], results& resultSet);
      void calcAverages(courses course[], results& resultSet, int& bestStudent);
      void writeDatFiles(courses course[], results& resultSet, int& bestStudent);
      int translateStudent(int student);
      void displayCourseStruct(courses course[]);
      void displayResultSet(results& resultSet);
      void displayBestStudent(courses course[], results& resultSet, int& bestStudent);
      void displayDatFile(string filename);
      /*  END  Function Prototypes */
       
      /**
      * Main function
      */
      int main(void)
      {
          menuStart();
      }
       
      /**
      * Starts the menu while loop and switches based on the user's choice
      */
      void menuStart(void)
      {
          /* Variable declarations */
              int choice;
          int bestStudent;
          courses course[2];
          results resultSet;
       
          /* Menu while and switch statements */
              while (choice != 7)               
			  {
              choice = menuChoice();
              switch(choice)
              {
                  case 1:
                      initializeStructs(course, resultSet);
                      calcAverages(course, resultSet, bestStudent);
                      writeDatFiles(course, resultSet, bestStudent);
                      break;
                  case 2:
                      displayCourseStruct(course);
                      break;
                  case 3:
                      displayResultSet(resultSet);
                      break;
                  case 4:
                      displayBestStudent(course, resultSet, bestStudent);
                      break;
                  case 5:
                      displayDatFile("pass.dat");
                      break;
                  case 6:
                      displayDatFile("fail.dat");
                      break;
                  case 7:
                      ;
                      break;
                  default:
                      cout << "Invalid choice.  Please choose a valid menu item.\n\n";
                      break;
              };
              }
       
          exit(0);
      }
       
      /**
      * Displays the menu for the program
      *
      * @return choice the user's chosen menu item
      */
      int menuChoice(void)
      {
              int choice;
              cout << "1. Create and initialize the COURSE1 and COURSE2 arrays\n";
              cout << "2. Display the current contents of all the arrays in COURSE1 and COURSE2\n";
              cout << "3. Display the Result set\n";
              cout << "4. View the details of the Best Student\n";
              cout << "5. View PASS.DAT\n";
              cout << "6. View FAIL.DAT\n";
              cout << "7. Quit\n\n";
              cout << "Choose 1-7: ";
              cin >> choice;
              cout << endl;
       
              return choice;
      }
 
       
 
      /**
 
      * Initializes course and resultSet structs
 
      *
 
      * @param course[] course struct to initialize class arrays in
 
      * @param resultSet results struct to initialize
 
      */
 
      void initializeStructs(courses course[], results& resultSet)
 
      {
 
          course[0].studentName[0]="Alice";
 
          course[0].studentName[1]="Bob";
          course[0].studentName[2]="Chris";
          course[0].studentName[3]="David";
          course[0].studentName[4]="Leo";
          course[0].studentName[5]="Mike";
          course[0].studentName[6]="Stephen";
       
          course[0].studentID[0] = "001221";
 
          course[0].studentID[1] = "001265";
          course[0].studentID[2] = "001283";
          course[0].studentID[3] = "001241";
          course[0].studentID[4] = "001298";
          course[0].studentID[5] = "001237";
          course[0].studentID[6] = "001243";
       
          course[0].score[0] = 38;
          course[0].score[1] = 47;
          course[0].score[2] = 85;
          course[0].score[3] = 72;
          course[0].score[4] = 40;
          course[0].score[5] = 64;
          course[0].score[6] = 96;
       
          course[1].studentName[0] = "Alice";
          course[1].studentName[1] = "Mike";
          course[1].studentName[2] = "David";
          course[1].studentName[3] = "Stephen";
          course[1].studentName[4] = "Bob";
          course[1].studentName[5] = "Chris";
          course[1].studentName[6] = "Leo";
       
          course[1].studentID[0] = "001221";
          course[1].studentID[1] = "001237";
          course[1].studentID[2] = "001241";
          course[1].studentID[3] = "001243";
          course[1].studentID[4] = "001265";
          course[1].studentID[5] = "001283";
          course[1].studentID[6] = "001298";
       
          course[1].score[0] = 42;
          course[1].score[1] = 55;
          course[1].score[2] = 78;
          course[1].score[3] = 98;
          course[1].score[4] = 45;
          course[1].score[5] = 99;
          course[1].score[6] = 35;
       
          resultSet.studentID[0] = "001221";
          resultSet.studentID[1] = "001237";
          resultSet.studentID[2] = "001241";
          resultSet.studentID[3] = "001243";
          resultSet.studentID[4] = "001265";
          resultSet.studentID[5] = "001283";
          resultSet.studentID[6] = "001298";
       
          cout << "Arrays initialized.\n\n";
         
          return;
		}
       
      /**
      * Calculates average scores and sets the bestStudent variable to the array
      * element of the best student.
      *
      * @param course[] course struct to calculate average scores in
      * @param resultSet results struct to place averages in
      * @param bestStudent integer to represent the bestStudent element
      */
      void calcAverages(courses course[], results& resultSet, int& bestStudent)
      {
           // Calculates the average for each student
           for (int i = 0; i < 7; i++)
               resultSet.average[i] = ((course[0].score[translateStudent(i)] + course[1].score[i]) / 2);   
       
           // Determines the best student
           bestStudent = 0;
           for (int i = 0; i < 7; i++)
           {
               if (resultSet.average[i] > resultSet.average[bestStudent])
                   bestStudent = i;
		   }
           
           return;
      }
       
      /**
      * Writes the pass and fail dat files according to each student's grades
      *
      * @param course[] course struct from which to pull data from
      * @param resultSet results array from which to identify the best student
      * @param bestStudent integer to represent the bestStudent element
      */
      void writeDatFiles(courses course[], results& resultSet, int& bestStudent)
      {
	 // Two diffferent files for passing and failing students
          ofstream outPassFile;
          outPassFile.open("pass.dat");
          if (!outPassFile)
          {
              cout << "Error: Cannot open \"pass.dat\" for output." << endl;
              return;
          }
          ofstream outFailFile;
          outFailFile.open("fail.dat");
          if (!outFailFile)
          {
              cout << "Error: Cannot open \"fail.dat\" for output." << endl;
              return;
          }
          for (int i = 0; i < 7; i++)
          {
              // Different actions if passing or not
              if (resultSet.average[i] >= 45)
              {
				  if (i == bestStudent)
                      outPassFile << course[1].studentName[i] << " - The Best Student" << endl;
                  else
                      outPassFile << course[1].studentName[i] << endl;
                  outPassFile << course[1].score[i] << endl;
                  outPassFile << course[0].score[translateStudent(i)] << endl;
                  outPassFile << course[1].score[i] << endl;
                  outPassFile << resultSet.average[i] << "\n\n";
              }
              else
              {
                  outFailFile << course[1].studentName[i] << endl;
                  outFailFile << course[1].studentID[i] << endl;
                  outFailFile << course[0].score[translateStudent(i)] << endl;
                  outFailFile << course[1].score[i] << endl;
                  outFailFile << resultSet.average[i] << "\n\n";
              }
          }
          // Close both files
          outPassFile.close();
          outFailFile.close();
         
          return;
      }
       
      /**
      * Translates the element value passed into the corresponding student's element
      * for the second struct.
      *
      * @param student student's element from the first struct to translate
      * @return the corresponding student's element from the second struct
      */
      int translateStudent(int student)
      {
          switch(student)
          {
          case 0:
              return 0;
              break;
          case 1:
              return 5;
              break;
          case 2:
              return 3;
              break;
          case 3:
              return 6;
              break;
          case 4:
              return 1;
              break;
          case 5:
              return 2;
              break;
          case 6:
              return 4;
              break;
          };
      }
       
      /**
      * Displays the arrays in the course structs
      *
      * @param course[] course struct to display arrays from
      */
      void displayCourseStruct(courses course[])
      {
          // Cycles through both course structs
          for (int i = 0; i < 2; i++)
          {
                      cout << "Course #" << (i + 1) << endl;
                      cout << "---------" << endl;
                      // Displays each array in a single course struct
              for (int j = 0; j < 7; j++)
              {
                          cout << course[i].studentName[j] << endl;
                              cout << course[i].studentID[j] << endl;
                  cout << course[i].score[j] << endl << endl;
              }
          }
           
          return;
      }
       
      /**
      * Displays the resultSet struct.
      *
      * @param resultSet resultSet array to display
      */
      void displayResultSet(results& resultSet)
      {
          // Displays the elements of the arrays in the resultSet struct
              for (int i = 0; i < 7; i++)
              {
                      cout << "ID: " << resultSet.studentID[i] << endl;
                      cout << "Average: " << resultSet.average[i] << endl << endl;
              }
       
          return;
      }
       
      /**
      * Displays the details of The Best Student
      *
      * @param course[] course struct from which to pull data from
      * @param resultSet results struct from which to identify the best student
      * @param bestStudent integer to represent the bestStudent element
      */
      void displayBestStudent(courses course[], results& resultSet, int& bestStudent)
      {
          cout << "The Best Student title goes to:" << endl << endl;
              cout << "Name: " << course[1].studentName[bestStudent] << endl;
              cout << "ID: " << course[1].studentID[bestStudent] << endl;
              cout << "Course 1 score: " << course[0].score[translateStudent(bestStudent)] << endl;
          cout << "Course 2 score: " << course[1].score[bestStudent] << endl;
          cout << "Average Score: " << resultSet.average[bestStudent] << "\n\n";                                         
             
              return;
      }
       
      /**
      * Displays the contents of the passed filename
      *
      * @param filename datfile to display
      */
      void displayDatFile(string filename)
      {
          // The filename for reading is passed to the function
              ifstream inFile;
			string studentName, studentID;

              int scoreOne, scoreTwo, averageScore;
       
              inFile.open(filename.c_str());
          if (!inFile)
          {
              cout << "Error: Cannot open " << filename << " for input." << endl;
              return;
          }
              while (inFile.good())
              {
              inFile >> studentName;
              inFile >> studentID;
              if (studentID == "-")
              {
                  inFile.ignore(30,'\n');
                  studentName = studentName + " - The Best Student";
                  inFile >> studentID;
              } 
              inFile >> scoreOne;
              inFile >> scoreTwo;
              inFile >> averageScore;
              inFile.ignore(30,'\n');
       
              // Checks for the stray endl at EOF before displaying any further data
              if (inFile.eof())
                  break;       
              cout << "Student Name: " << studentName << endl;
              cout << "Sutudent ID: " << studentID << endl;
              cout << "Course 1 Score: " << scoreOne << endl;
              cout << "Course 2 Score: " << scoreTwo << endl;
              cout << "Average Score: " << averageScore << "\n\n";
              };
          inFile.close();
 
          return;
      }