fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. class StudentGradesInfoWrapper;
  5.  
  6. class StudentGradesInfo {
  7. private:
  8. static int cnt;
  9. string student_name;
  10. string student_id;
  11. vector<string> course_names;
  12. vector<double> grades;
  13.  
  14. public:
  15. friend class StudentGradesInfoWrapper;
  16. static int total_prints;
  17.  
  18. StudentGradesInfo(string name, string id) : student_name(name), student_id(id) {
  19. cnt++;
  20. }
  21.  
  22. double GetGrade(double grade) {
  23. if (grade < 0 || grade > 100) {
  24. cout << "Invalid grade entered.\n";
  25. return -1;
  26. }
  27. return grade;
  28. }
  29.  
  30. bool AddGrade(double grade, string course_name) {
  31. grade = GetGrade(grade);
  32. if (grade == -1) return false;
  33.  
  34. for (auto course : course_names) {
  35. if (course == course_name) {
  36. cout << "Course already exists.\n";
  37. return false;
  38. }
  39. }
  40. grades.push_back(grade);
  41. course_names.push_back(course_name);
  42. return true;
  43. }
  44.  
  45. string getId() {
  46. return student_id;
  47. }
  48.  
  49. void PrintAllCourses() {
  50. total_prints++;
  51. cout << "Grades for student: " << student_id << "\n";
  52. for (size_t i = 0; i < course_names.size(); ++i)
  53. cout << course_names[i] << " = " << grades[i] << "\n";
  54.  
  55. cout << "-------------------------------------\n";
  56. }
  57.  
  58. int getCourseTotalCount() {
  59. return course_names.size();
  60. }
  61.  
  62. string getCourseName_Grade(int idx) {
  63. if (idx < 0 || idx >= (int)course_names.size()) {
  64. return "invalid";
  65. }
  66. string ans = course_names[idx] + "_" + to_string(grades[idx]);
  67. return ans;
  68. }
  69.  
  70. string get_total_gradesSum() {
  71. double sum = 0;
  72. double total = getCourseTotalCount() * 100.0;
  73. for (size_t i = 0; i < grades.size(); ++i) {
  74. sum += grades[i];
  75. }
  76. string ans = to_string((int)sum) + "/" + to_string((int)total);
  77. return ans;
  78. }
  79. };
  80.  
  81. int StudentGradesInfo::total_prints = 0;
  82. int StudentGradesInfo::cnt = 0;
  83.  
  84. class StudentGradesInfoWrapper {
  85. public:
  86.  
  87. string name, id;
  88. StudentGradesInfo obj;
  89.  
  90. StudentGradesInfoWrapper() = default;
  91.  
  92. StudentGradesInfoWrapper(string name, string id) : name(name), id(id), obj(name, id) {}
  93.  
  94. bool add_grade(double grade, string course_n) {
  95. return obj.AddGrade(grade, course_n);
  96. }
  97.  
  98. string getTotalGradeSuM() {
  99. return obj.get_total_gradesSum();
  100. }
  101.  
  102. void print() {
  103. obj.PrintAllCourses();
  104. }
  105.  
  106. int getNumberOfPrints() {
  107. return StudentGradesInfo::total_prints;
  108. }
  109.  
  110. static int totalStudents() {
  111. return StudentGradesInfo::cnt;
  112. }
  113. };
  114.  
  115.  
  116.  
  117. int main() {
  118. StudentGradesInfoWrapper st1("Mostafa", "5000123");
  119. st1.add_grade(70, "Math");
  120. st1.add_grade(70, "Programming 1");
  121. st1.add_grade(85, "Programming 2");
  122.  
  123. st1.print();
  124.  
  125. StudentGradesInfoWrapper st2("Manar", "5000193");
  126. st2.add_grade(75, "Math");
  127. st2.add_grade(77, "Programming 1");
  128. st2.add_grade(95, "Programming 2");
  129.  
  130. st2.print();
  131. st2.print();
  132. st2.print();
  133.  
  134. cout << st1.getTotalGradeSuM() << "\n";
  135. cout << st2.getTotalGradeSuM() << "\n";
  136.  
  137. cout << "Number of Printings : " << StudentGradesInfo::total_prints << endl;
  138. cout << "Number of Students : " << StudentGradesInfoWrapper::totalStudents() << endl;
  139. cout << "Bye\n";
  140.  
  141. return 0;
  142. }
  143.  
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
Grades for student: 5000123
Math = 70
Programming 1 = 70
Programming 2 = 85
-------------------------------------
Grades for student: 5000193
Math = 75
Programming 1 = 77
Programming 2 = 95
-------------------------------------
Grades for student: 5000193
Math = 75
Programming 1 = 77
Programming 2 = 95
-------------------------------------
Grades for student: 5000193
Math = 75
Programming 1 = 77
Programming 2 = 95
-------------------------------------
225/300
247/300
Number of Printings : 4
Number of Students : 2
Bye