#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); 
			}
		}
	}
}