fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. using namespace std;
  5. //int total_prints=0;
  6. //i made it static instead
  7. class StudentGradesInfo {
  8. private:
  9. string student_name;//first to add
  10. string student_id;
  11. vector<string> course_names;
  12. vector<double> grades;
  13.  
  14. public:
  15. static int total_prints;
  16. //bug 1
  17. // StudentGradesInfo(){
  18. // assert(false);
  19. // }
  20.  
  21. StudentGradesInfo(string name, string id) : student_name(name), student_id(id) {}
  22.  
  23. //name inconsistency and logic errors
  24. //bug 2 also should use double
  25. //adjacent grade ?! and 0 or 100 give grade and 100!
  26. double GetGrade(double grade){
  27. if (grade < 0 || grade > 100) {
  28. cout << "Invalid grade entered.\n";
  29. return -1;
  30. }
  31. return grade;
  32. }
  33. bool AddGrade(double grade, string course_name) {
  34. grade =GetGrade(grade);
  35. grades.push_back(grade);
  36. for(auto course : course_names) {
  37. if (course == course_name) {
  38. cout << "Course already exists.\n";
  39. return false;
  40. }
  41. }
  42. course_names.push_back(course_name);
  43. return true;
  44. }
  45.  
  46. string getId(){
  47. return student_id;
  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. //bug here should give course size not grades size
  59. int getCourseTotalCount(){
  60. return course_names.size();
  61. }
  62. string getCourseName_Grade(int idx){
  63. if(idx<0 or idx>=(int)grades.size()){
  64. return "invalid";
  65. }
  66. string ans = course_names[idx]+"_"+to_string(grades[idx]);
  67. return ans;
  68. }
  69. string get_total_gradesSum() {
  70. double sum = 0;
  71. int total = getCourseTotalCount()*100;
  72. for (size_t i = 0; i <(int) grades.size(); ++i) {
  73. sum += grades[i];
  74. }
  75. string ans = to_string((int)sum)+"/"+to_string(total);
  76. return ans;
  77. }
  78. };
  79.  
  80. int StudentGradesInfo::total_prints = 0;
  81.  
  82. int main() {
  83. StudentGradesInfo st1("Mostafa", "5000123");
  84. st1.AddGrade(70, "Math");
  85. st1.AddGrade(70, "Programming 1");
  86. st1.AddGrade(85, "Programming 2");
  87.  
  88. StudentGradesInfo st2("Manar", "5000193");
  89. st2.AddGrade(75, "Math");
  90. st2.AddGrade(77, "Programming 1");
  91. st2.AddGrade(95, "Programming 2");
  92. st1.PrintAllCourses();
  93. st2.PrintAllCourses();
  94.  
  95. string p = st1.get_total_gradesSum();
  96. cout <<p<< "\n";
  97. string p2 = st2.get_total_gradesSum();
  98. cout <<p2<< "\n";
  99.  
  100. cout << StudentGradesInfo::total_prints << endl;
  101. return 0;
  102. }
  103.  
Success #stdin #stdout 0s 5296KB
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
-------------------------------------
225/300
247/300
2