summaryrefslogtreecommitdiff
path: root/CPP/cpp_book/chap3/grades.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'CPP/cpp_book/chap3/grades.cpp')
-rw-r--r--CPP/cpp_book/chap3/grades.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/CPP/cpp_book/chap3/grades.cpp b/CPP/cpp_book/chap3/grades.cpp
new file mode 100644
index 0000000..3c8f19a
--- /dev/null
+++ b/CPP/cpp_book/chap3/grades.cpp
@@ -0,0 +1,48 @@
+#include <iomanip> // IO Manipulators
+#include <ios>
+#include <iostream>
+#include <string>
+#include <vector>
+#include <algorithm>
+#include <stdexcept>
+#include "grade.h"
+#include "student_info.h"
+
+using std::cin; using std::string;
+using std::cout; using std::endl;
+
+int
+main(void)
+{
+ std::vector<StudentInfo> students;
+ StudentInfo record;
+ string::size_type maxlen = 0;
+
+ while (read_student(cin, record)) {
+ maxlen = std::max(maxlen, record.name.size());
+ students.push_back(record);
+ }
+
+ sort(students.begin(), students.end(), compare_students);
+
+ for (std::vector<StudentInfo>::size_type i = 0;
+ i != students.size();
+ i++) {
+
+ cout << students[i].name
+ << string(maxlen + 1 - students[i].name.size(), ' ');
+
+ try {
+ double final_grade = grade(students[i]);
+
+ std::streamsize prec = cout.precision();
+ cout << std::setprecision(3) << final_grade
+ << std::setprecision(prec);
+ } catch (std::domain_error& e){
+ cout << e.what();
+ }
+
+ cout << endl;
+ }
+ return 0;
+}