#include <iostream>
#include <vector>
#include <string>
using namespace std;
//int total_prints=0;
//i made it static instead
class StudentGradesInfo {
private:
string student_name;//first to add
string student_id;
vector<string> course_names;
vector<double> grades;
public:
static int total_prints;
//bug 1
// StudentGradesInfo(){
// assert(false);
// }
StudentGradesInfo(string name, string id) : student_name(name), student_id(id) {}
//name inconsistency and logic errors
//bug 2 also should use double
//adjacent grade ?! and 0 or 100 give grade and 100!
double GetGrade(double grade){
if (grade < 0 || grade > 100) {
cout << "Invalid grade entered.\n";
return -1;
}
return grade;
}
bool AddGrade(double grade, string course_name) {
grade =GetGrade(grade);
grades.push_back(grade);
for(auto course : course_names) {
if (course == course_name) {
cout << "Course already exists.\n";
return false;
}
}
course_names.push_back(course_name);
return true;
}
string getId(){
return student_id;
}
void PrintAllCourses() {
total_prints++;
cout << "Grades for student: " << student_id << "\n";
for (size_t i = 0; i < course_names.size(); ++i)
cout << course_names[i] << " = " << grades[i] << "\n";
cout <<"-------------------------------------\n";
}
//bug here should give course size not grades size
int getCourseTotalCount(){
return course_names.size();
}
string getCourseName_Grade(int idx){
if(idx<0 or idx>=(int)grades.size()){
return "invalid";
}
string ans = course_names[idx]+"_"+to_string(grades[idx]);
return ans;
}
string get_total_gradesSum() {
double sum = 0;
int total = getCourseTotalCount()*100;
for (size_t i = 0; i <(int) grades.size(); ++i) {
sum += grades[i];
}
string ans = to_string((int)sum)+"/"+to_string(total);
return ans;
}
};
int StudentGradesInfo::total_prints = 0;
int main() {
StudentGradesInfo st1("Mostafa", "5000123");
st1.AddGrade(70, "Math");
st1.AddGrade(70, "Programming 1");
st1.AddGrade(85, "Programming 2");
StudentGradesInfo st2("Manar", "5000193");
st2.AddGrade(75, "Math");
st2.AddGrade(77, "Programming 1");
st2.AddGrade(95, "Programming 2");
st1.PrintAllCourses();
st2.PrintAllCourses();
string p = st1.get_total_gradesSum();
cout <<p<< "\n";
string p2 = st2.get_total_gradesSum();
cout <<p2<< "\n";
cout << StudentGradesInfo::total_prints << endl;
return 0;
}