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