#include #include #include #include using namespace std; const int NUM_STUDENTS = 25; const int NUM_ANSWERS = 30; const char EOLN = '\n'; const string LINE = "========================="; const int OPTION_MIN = 0; const int OPTION_MAX = 2; typedef char AnsList [NUM_ANSWERS]; struct StudentInfo { string name; AnsList ans_list; int grade; bool invalid; }; typedef StudentInfo StudentInfoList [NUM_STUDENTS]; int read_data(AnsList, StudentInfoList); void print_data(const StudentInfoList); void printf_keys(const AnsList); void sort_data_by_grade(StudentInfoList); int manu(); int main() { StudentInfoList stud_info_list; AnsList keys; int read_file_status; int option; read_file_status = read_data(keys, stud_info_list); do{ option = manu(); switch (option) { case 1: printf_keys(keys); break; case 2: sort_data_by_grade(stud_info_list); print_data(stud_info_list); break; } } while (option != 0); cout << endl << "Exit the program ..." << endl << endl; return read_file_status; } ////////////////////////////////////////////////////////////////////////// int read_data(AnsList keys, StudentInfoList stud_info_list) { const string fname = "xfile.txt"; ifstream inFile; int ii, jj; inFile.open(fname); if (!inFile) { cout << "Error: file open fails!" << endl; return (EXIT_FAILURE); } else cout << "Loading data ..."; for (ii=0; ii> keys[ii]; inFile.ignore(100, EOLN); for (jj=0; jj> stud_info_list[jj].ans_list[ii]; if ((stud_info_list[jj].ans_list[ii] != 'T') && (stud_info_list[jj].ans_list[ii] != 'F')) stud_info_list[jj].invalid = true; else if (stud_info_list[jj].ans_list[ii] == keys[ii]) stud_info_list[jj].grade++; } inFile.ignore(100, EOLN); } cout << "Done!" << endl << endl; inFile.close(); return 0; } ////////////////////////////////////////////////////////////////////////// void print_data(const StudentInfoList stud_info_list) { int ii, jj; cout << left; cout << setw(20) << "NAME"; cout << setw(35) << "ANSWERS"; cout << setw(10) << "GRADES"; cout << setw(20) << "INVALID ANSWER?" << endl; cout << LINE << LINE << LINE << endl; for (jj=0; jj "; cin >> option; while(option < OPTION_MIN || option > OPTION_MAX) { cout << "Invalid option! Please re-enter your option -> "; cin.clear(); cin.ignore(100, '\n'); cin >> option; } return option; } ////////////////////////////////////////////////////////////////////////// void printf_keys(const AnsList keys) { cout << "KEYS: " << endl; for (int ii = 0; ii < NUM_ANSWERS; ii++) cout << keys[ii]; cout << endl; }