#include<iostream>
#include<bits/stdc++.h>
using namespace std;
struct Node{
int CID;
string SID;
string name;
int a,b,c,d;
int sum;
int rank;
}p[105];
bool cmp(Node A,Node B){
return A.sum>B.sum;
}
int pt=1;
map<string,bool> visSID;
void Add(){
do{
cout<<"Please enter the SID, CID, name and four scores. Enter 0 to finish.\n";
cin>>p[pt].SID;
if(p[pt].SID=="0")break;
cin>>p[pt].CID>>p[pt].name>>p[pt].a>>p[pt].b>>p[pt].c>>p[pt].d;
if(visSID[p[pt].SID]){
cout<<"Duplicated SID.\n";
continue;
} else{
visSID[p[pt].SID]=1;
}
p[pt].sum=p[pt].a+p[pt].b+p[pt].c+p[pt].d;
pt++;
}while(1);
sort(p+1,p+pt,cmp);
for(int i=1;i<pt;++i){
if(i==1){
p[i].rank=1;continue;
}
if(p[i].sum==p[i-1].sum){
p[i].rank=p[i-1].rank;
}else{
p[i].rank=i;
}
}
return;
}
void del(int pos){
for(int i=pos;i<pt;++i){
p[i]=p[i+1];
}
pt--;
return;
}
void Remove(){
string gt;
do{
cout<<"Please enter SID or name. Enter 0 to finish.\n";
cin>>gt;
if(gt=="0")break;
int cnt=0;
if(gt[0]>='A'&>[0]<='Z'){
for(int i=1;i<pt;++i){
if(p[i].name==gt){
cnt++;
del(i);
}
}
}else{
for(int i=1;i<pt;++i){
if(p[i].SID==gt){
cnt++;
del(i);
}
}
}
cout<<cnt<<" student(s) removed.\n";
}while(1);
}
void Query(){
do{
cout<<"Please enter SID or name. Enter 0 to finish.\n";
string gt;
cin>>gt;
if(gt=="0")break;
if(gt[0]>='A'&>[0]<='Z'){
for(int i=1;i<pt;++i){
if(p[i].name==gt){
cout<<p[i].rank<<' '<<p[i].SID<<' '<<p[i].CID<<' '<<p[i].name<<' '<<p[i].a<<' '<<p[i].b<<' '<<p[i].c<<' '<<p[i].d<<' '<<p[i].sum<<' ';
double tmp=p[i].sum*1.000;
printf("%.2lf\n",double(tmp/4.000));
}
}
}else{
for(int i=1;i<pt;++i){
if(p[i].SID==gt){
cout<<p[i].rank<<' '<<p[i].SID<<' '<<p[i].CID<<' '<<p[i].name<<' '<<p[i].a<<' '<<p[i].b<<' '<<p[i].c<<' '<<p[i].d<<' '<<p[i].sum<<' ';
double tmp=p[i].sum*1.000;
printf("%.2lf\n",double(tmp/4.000));
}
}
}
}while(1);
}
void Show_ranking(){
cout<<"Showing the ranklist hurts students' self-esteem. Don't do that.\n";
return;
}
void Show_Statistics(){
cout<<"Please enter class ID, 0 for the whole statistics.\n";
int gtCID,sum=0;
int passed=0,failed=0;
int cnt=0;
cin>>gtCID;
cout<<"Chinese\n";
cout<<"Average Score: ";
for(int i=1;i<pt;++i){
if(gtCID==0){
sum+=p[i].a;
cnt++;
if(p[i].a>=60)passed++;
else failed++;
}else if(p[i].CID==gtCID){
cnt++;
sum+=p[i].a;
if(p[i].a>=60)passed++;
else failed++;
}
}
if(cnt==0)cout<<"0.00\n";
else printf("%.2lf\n",double((sum*1.000)/(cnt*1.000)));
cout<<"Number of passed students: "<<passed<<endl;
cout<<"Number of failed students: "<<failed<<endl;
sum=0;
cnt=0;
passed=0;
cout<<"Mathematics\n";
cout<<"Average Score: ";
for(int i=1;i<pt;++i){
if(gtCID==0){
sum+=p[i].b;
cnt++;
if(p[i].b>=60)passed++;
else failed++;
}else if(p[i].CID==gtCID){
cnt++;
sum+=p[i].b;
if(p[i].b>=60)passed++;
else failed++;
}
}
if(cnt==0)cout<<"0.00\n";
else printf("%.2lf\n",double((sum*1.000)/(cnt*1.000)));
cout<<"Number of passed students: "<<passed<<endl;
cout<<"Number of failed students: "<<failed<<endl;
sum=0;
cnt=0;
passed=0;
cout<<"English\n";
cout<<"Average Score: ";
for(int i=1;i<pt;++i){
if(gtCID==0){
sum+=p[i].c;
cnt++;
if(p[i].c>=60)passed++;
else failed++;
}else if(p[i].CID==gtCID){
cnt++;
sum+=p[i].c;
if(p[i].c>=60)passed++;
else failed++;
}
}
if(cnt==0)cout<<"0.00\n";
else printf("%.2lf\n",double((sum*1.000)/(cnt*1.000)));
cout<<"Number of passed students: "<<passed<<endl;
cout<<"Number of failed students: "<<failed<<endl;
sum=0;
cnt=0;
passed=0;
cout<<"Programming\n";
cout<<"Average Score: ";
for(int i=1;i<pt;++i){
if(gtCID==0){
sum+=p[i].d;
cnt++;
if(p[i].d>=60)passed++;
else failed++;
}else if(p[i].CID==gtCID){
cnt++;
sum+=p[i].d;
if(p[i].d>=60)passed++;
else failed++;
}
}
if(cnt==0)cout<<"0.00\n";
else printf("%.2lf\n",double((sum*1.000)/(cnt*1.000)));
cout<<"Number of passed students: "<<passed<<endl;
cout<<"Number of failed students: "<<failed<<endl;
sum=0;
cnt=0;
passed=0;
cout<<"Overall\n";
cout<<"Number of students who passed all subjects: ";
int cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0;
for(int i=1;i<pt;++i){
if(gtCID==0||p[i].CID==gtCID){
int scnt=0;
if(p[i].a>=60)scnt++;
if(p[i].b>=60)scnt++;
if(p[i].c>=60)scnt++;
if(p[i].d>=60)scnt++;
if(scnt==4)cnt1++;
if(scnt==3)cnt2++;
if(scnt==2)cnt3++;
if(scnt==1)cnt4++;
if(scnt==0)cnt5++;
}
}
cout<<cnt1<<endl;
cout<<"Number of students who passed 3 or more subjects: "<<cnt2+cnt1<<endl;
cout<<"Number of students who passed 2 or more subjects: "<<cnt3+cnt2+cnt1<<endl;
cout<<"Number of students who passed 1 or more subjects: "<<cnt4+cnt3+cnt2+cnt1<<endl;
cout<<"Number of students who failed all subjects: "<<cnt5<<endl;
}
void solve(int op){
switch(op){
case 1:
Add();
break;
case 2:
Remove();
break;
case 3:
Query();
break;
case 4:
Show_ranking();
break;
case 5:
Show_Statistics();
break;
}
}
void centralia(){
while(1){
cout<<"Welcome to Student Performance Management System (SPMS).\n\n";
cout<<"1 - Add\n";
cout<<"2 - Remove\n";
cout<<"3 - Query\n";
cout<<"4 - Show ranking\n";
cout<<"5 - Show Statistics\n";
cout<<"0 - Exit\n\n";
int x;
cin>>x;
if(x==0)return;
solve(x);
}
}
int main(){
centralia();
return 0;
}