#include // IO Manipulators #include #include #include #include #include #include #include "grade.h" #include "student_info.h" #include "approval.h" using std::cin; using std::string; using std::cout; using std::endl; int main(void) { std::list students, fail; StudentInfo record; string::size_type maxlen = 0; while (read_student(cin, record)) { maxlen = std::max(maxlen, record.name.size()); students.push_back(record); } students.sort(compare_students); for (std::list::iterator i = students.begin(); i != students.end(); i++) { cout << i->name << string(maxlen + 1 - i->name.size(), ' '); try { double final_grade = grade(*i); std::streamsize prec = cout.precision(); cout << std::setprecision(3) << final_grade << std::setprecision(prec); cout << " - Student " << (fgrade(*i) ? "Failed" : "Approved"); } catch (std::domain_error& e){ cout << e.what(); } cout << endl; } fail = extract_fails(students); std::cout << "Failed students: " << std::endl; for (std::list::iterator i = fail.begin(); i != fail.end(); i++) { std::cout << i->name << std::endl; } return 0; }