WA on #1
#include<bits/stdc++.h>
using namespace std;
int _id;
struct stu{
int rk,s1,s2,s3,s4,sum,id;
string sid,cid,name;
double avg;
bool in()
{
cin>>sid;
if(sid=="0") return false;
cin>>cid>>name>>s1>>s2>>s3>>s4;
sum=s1+s2+s3+s4;
avg=sum/4.00;
id=++_id;
return true;
}
};
vector<stu>v;
void debug()
{
for(auto i:v)
{
cerr<<i.rk<<' '<<i.id<<' '<<i.sid<<' '<<i.cid<<' '<<i.s1<<' '<<i.s2<<' '<<i.s3<<' '<<i.s4<<' '<<i.sum<<' '<<i.avg<<endl;
}
puts("");
}
bool cmp(stu x,stu y)
{
return x.id<y.id;
}
void wel()
{
puts("Welcome to Student Performance Management System (SPMS).\n\n1 - Add\n2 - Remove\n3 - Query\n4 - Show ranking\n5 - Show Statistics\n0 - Exit\n");
}
bool add_sid(string sid)
{
for(int i=0;i<v.size();i++)
{
if(sid==v[i].sid) return false;
}
return true;
}
void add()
{
while(1)
{
puts("Please enter the SID, CID, name and four scores. Enter 0 to finish.");
stu t;
if(!t.in()) break;
else if(!add_sid(t.sid)) puts("Duplicated SID.");
else v.push_back(t);
}
}
int del_rem(string s)
{
int res=0;
for(int i=0;i<v.size();i++)
{
if(v[i].name==s||v[i].sid==s)
{
swap(v[i--],v[(int)v.size()-1]);
v.pop_back();
res++;
sort(v.begin(),v.end(),cmp);
}
}
return res;
}
void del()
{
while(1)
{
puts("Please enter SID or name. Enter 0 to finish.");
string s;
cin>>s;
if(s=="0") break;
else cout<<del_rem(s)<<" student(s) removed."<<endl;
}
}
void qry_fnd(string s)
{
vector<stu>vt;
for(int i=0;i<v.size();i++)
{
if(v[i].name==s||v[i].sid==s)
{
stu t;
t=v[i];
t.rk=1;
for(int j=0;j<v.size();j++)
{
if (v[j].sum>t.sum) t.rk++;
}
vt.push_back(t);
}
}
for(int i=0;i<vt.size();i++)
{
cout<<vt[i].rk<<' '<<vt[i].sid<<' '<<vt[i].cid<<' '<<vt[i].name<<' '<<vt[i].s1<<' '<<vt[i].s2<<' '<<vt[i].s3<<' '<<vt[i].s4<<' '<<vt[i].sum<<' '<<fixed<<setprecision(2)<<vt[i].avg<<endl;
}
}
void qry()
{
while(1)
{
puts("Please enter SID or name. Enter 0 to finish.");
string s;
cin>>s;
if(s=="0") break;
else qry_fnd(s);
}
}
void shw()
{
puts("Showing the ranklist hurts students' self-esteem. Don't do that.");
}
void stc_out(string s)
{
int s1s,s2s,s3s,s4s,s1p,s2p,s3p,s4p,s1f,s2f,s3f,s4f,p[10],k;
double s1a,s2a,s3a,s4a;
s1s=s2s=s3s=s4s=s1p=s2p=s3p=s4p=s1f=s2f=s3f=s4f=k=0;
memset(p,0,sizeof(p));
for(auto i:v)
{
if(i.cid==s||s=="0")
{
int ps=0;
k++;
s1s+=i.s1;
s2s+=i.s2;
s3s+=i.s3;
s4s+=i.s4;
if(i.s1>=60)
{
s1p++;
ps++;
}
else s1f++;
if(i.s2>=60)
{
s2p++;
ps++;
}
else s2f++;
if(i.s3>=60)
{
s3p++;
ps++;
}
else s3f++;
if(i.s4>=60)
{
s4p++;
ps++;
}
else s4f++;
p[ps]++;
}
}
s1a=(double)s1s/k;
s2a=(double)s2s/k;
s3a=(double)s3s/k;
s4a=(double)s4s/k;
printf("Chinese\nAverage Score: %.2f\nNumber of passed students: %d\nNumber of failed students: %d\n\nMathematics\nAverage Score: %.2f\nNumber of passed students: %d\nNumber of failed students: %d\n\nEnglish\nAverage Score: %.2f\nNumber of passed students: %d\nNumber of failed students: %d\n\nProgramming\nAverage Score: %.2f\nNumber of passed students: %d\nNumber of failed students: %d\n\nOverall:\nNumber of students who passed all subjects: %d\nNumber of students who passed 3 or more subjects: %d\nNumber of students who passed 2 or more subjects: %d\nNumber of students who passed 1 or more subjects: %d\nNumber of students who failed all subjects: %d\n\n",s1a,s1p,s1f,s2a,s2p,s2f,s3a,s3p,s3f,s4a,s4p,s4f,p[4],p[3]+p[4],p[2]+p[3]+p[4],p[1]+p[2]+p[3]+p[4],p[0]);
}
void stc()
{
puts("Please enter class ID, 0 for the whole statistics.");
string s;
cin>>s;
stc_out(s);
}
int main()
{
//freopen("uva12412.txt","w",stdout);
wel();
int op;
cin>>op;
while(1)
{
switch(op)
{
case 0:
exit(0);
case 1:
add();
break;
case 2:
del();
break;
case 3:
qry();
break;
case 4:
shw();
break;
case 5:
stc();
}
wel();
cin>>op;
//debug();
}
}