#include <iostream>
#include <string>
#include <algorithm>
#define N 102
#define EPS 1e-5
using namespace std;
struct student
{
string sid;
int cid;
string name;
int score[5];
};
const string sub[] = {"Chinese", "Mathematics", "English", "Programming"};
student s[N];
bool removed[N];
int op, cnt;
int main()
{
while (true) // main loop
{
cout << "Welcome to Student Performance Management System (SPMS).\n\n1 - Add\n2 - Remove\n3 - Query\n4 - Show ranking\n5 - Show Statistics\n0 - Exit\n\n"; // the main menu
cin >> op; // input the choice
if (op == 0) // exit
return 0;
else if (op == 1) // add
while (true)
{
cout << "Please enter the SID, CID, name and four scores. Enter 0 to finish." << endl;
student tmp = {};
cin >> tmp.sid;
bool flag = true;
if (tmp.sid == "0")
break;
for (int i = 0; i < cnt; i++)
if (!removed[i] && s[i].sid == tmp.sid)
{
cout << "Duplicated SID." << endl;
flag = false;
break;
}
if (flag)
{
cin >> tmp.cid >> tmp.name;
for (int i = 0; i < 4; i++)
{
cin >> tmp.score[i];
tmp.score[4] += tmp.score[i];
}
s[cnt++] = tmp;
}
} // add
else if (op == 2) // remove
{
int r = 0;
while (true) // loop remove
{
cout << "Please enter SID or name. Enter 0 to finish." << endl;
string st;
cin >> st;
if (st == "0")
break;
for (int i = 0; i < cnt; i++)
if (!removed[i] && (st == s[i].sid || st == s[i].name))
{
removed[i] = true;
r++;
}
} // loop remove
cout << r << " student(s) removed." << endl;
}
else if (op == 3)
while (true)
{
cout << "Please enter SID or name. Enter 0 to finish." << endl;
string st;
cin >> st;
if (st == "0")
break;
for (int i = 0; i < cnt; i++)
if (!removed[i] && (st == s[i].sid || st == s[i].name))
{
int _rank = 0;
for (int j = 0; j < cnt; j++)
if (!removed[i] && s[j].score[4] > s[i].score[4])
_rank++;
printf("%d %s %d %s %d %d %d %d %d %.2lf\n", _rank, s[i].sid.c_str(), s[i].cid, s[i].name.c_str(), s[i].score[0], s[i].score[1], s[i].score[2], s[i].score[3], s[i].score[4], s[i].score[4] / 4 + EPS);
}
}
else if (op == 4)
cout << "Showing the ranklist hurts students' self-esteem. Don't do that." << endl;
else if (op == 5)
{
cout << "Please enter class ID, 0 for the whole statistics." << endl;
int sid;
cin >> sid;
int score = 0, passed = 0, failed = 0, totals[101] = {}, stu = 0;
for (int i = 0; i < 4; i++)
{
stu = score = passed = failed = 0;
for (int j = 0; j < cnt; j++)
{
if (!removed[j])
stu++;
if (!removed[j] && (sid == 0 || sid == s[j].cid))
{
if (s[j].score[i] >= 60)
passed++;
else
failed++;
}
}
printf("%s\nAverage Score: %.2lf\nNumber of passed students: %d\nNumber of failed students: %d\n\n", sub[i].c_str(), (double)score / stu + EPS, passed, failed);
}
}
}
}