fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. class Student {
  5. public:
  6. int id;
  7. unordered_map<int, int> grades;
  8. Student(int sId) : id(sId) {}
  9. void addGrade(int aId, int grd) {
  10. grades[aId] = grd;
  11. }
  12. float getAverageGrade() {
  13. if (grades.empty()) {
  14. cout << "No grades available for student " << id << "." << endl;
  15. return -1.0f;
  16. }
  17. int total = 0;
  18. for (auto const& p : grades) {
  19. total += p.second;
  20. }
  21. return static_cast<float>(total) / grades.size();
  22. }
  23. };
  24.  
  25. class Assignment {
  26. public:
  27. int id;
  28. Assignment(int aId) : id(aId) {}
  29. };
  30.  
  31. class Course {
  32. private:
  33. unordered_map<int, Student> stds;
  34. unordered_map<int, Assignment> asgns;
  35.  
  36. public:
  37. Course() {}
  38. void addAssignment(int aId) {
  39. if (asgns.count(aId)) {
  40. cout << "Assignment " << aId << " already exists." << endl;
  41. return;
  42. }
  43. asgns.emplace(aId, Assignment(aId));
  44. }
  45. void enrollStudent(int sId) {
  46. if (stds.count(sId)) {
  47. cout << "Student " << sId << " is already enrolled." << endl;
  48. return;
  49. }
  50. stds.emplace(sId, Student(sId));
  51. }
  52. void addStudentGrade(int sId, int aId, int grd) {
  53. if (!stds.count(sId)) {
  54. cout << "Student " << sId << " is not enrolled." << endl;
  55. return;
  56. }
  57. if (!asgns.count(aId)) {
  58. cout << "Assignment " << aId << " does not exist." << endl;
  59. return;
  60. }
  61. stds.at(sId).addGrade(aId, grd);
  62. }
  63. float getStudentGrade(int sId) {
  64. if (!stds.count(sId)) {
  65. cout << "Student " << sId << " is not enrolled." << endl;
  66. return -1.0f;
  67. }
  68. return stds.at(sId).getAverageGrade();
  69. }
  70. };
  71.  
  72. int main() {
  73. Course course;
  74.  
  75. cout << "--- Initial Setup ---" << endl;
  76. course.enrollStudent(101);
  77. course.enrollStudent(102);
  78. course.enrollStudent(103);
  79. course.enrollStudent(104);
  80. course.enrollStudent(101);
  81.  
  82. course.addAssignment(1);
  83. course.addAssignment(2);
  84. course.addAssignment(3);
  85. course.addAssignment(1);
  86.  
  87. cout << "\n--- Adding Grades ---" << endl;
  88. course.addStudentGrade(101, 1, 90);
  89. course.addStudentGrade(101, 2, 80);
  90. course.addStudentGrade(102, 1, 100);
  91. course.addStudentGrade(102, 2, 95);
  92. course.addStudentGrade(102, 3, 98);
  93. course.addStudentGrade(103, 1, 85);
  94. course.addStudentGrade(103, 2, 88);
  95. course.addStudentGrade(105, 1, 90);
  96. course.addStudentGrade(101, 4, 90);
  97.  
  98. cout << "\n--- Calculating Averages ---" << endl;
  99. cout << "Student 101 Average: " << course.getStudentGrade(101) << endl;
  100. cout << "Student 102 Average: " << course.getStudentGrade(102) << endl;
  101. cout << "Student 104 Average: " << course.getStudentGrade(104) << endl;
  102. }
  103.  
  104.  
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
--- Initial Setup ---
Student 101 is already enrolled.
Assignment 1 already exists.

--- Adding Grades ---
Student 105 is not enrolled.
Assignment 4 does not exist.

--- Calculating Averages ---
Student 101 Average: 85
Student 102 Average: 97.6667
Student 104 Average: No grades available for student 104.
-1