大概WA在#14
查看原帖
大概WA在#14
764672
ZJLmath楼主2023/5/13 10:39

udebug已过

#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;
	int pos;
}p[1005];
bool cmp(Node A,Node B){
	return A.sum>B.sum; 
}
bool cmp2(Node A,Node B){
	return A.pos<B.pos;
}
int pt=1;
bool finding_(string SIDs){
	for(int i=1;i<pt;++i){
		if(p[i].SID==SIDs){
			return true;
		}
	}
	return false;
}
void Add(){
	while(1){
		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(finding_(p[pt].SID)){
			cout<<"Duplicated SID.\n";
			continue;
		}
		p[pt].sum=p[pt].a+p[pt].b+p[pt].c+p[pt].d;
		p[pt].pos=pt;
		pt++;
	}
	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;
		}
	}
//	for(int i=1;i<pt;++i)cout<<p[i].rank<<' ';
	sort(p+1,p+pt,cmp2);
	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'&&gt[0]<='Z'){
			for(int i=1;i<pt;++i){
				if(p[i].name==gt){
					cnt++;
					del(i);
					i--;
				}
			}
		}else{
			for(int i=1;i<pt;++i){
				if(p[i].SID==gt){
					cnt++;
					del(i);
					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'&&gt[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<<"-nan\n";
	else printf("%.2lf\n",double((sum*1.000)/(cnt*1.000))); 
	cout<<"Number of passed students: "<<passed<<endl;
	cout<<"Number of failed students: "<<cnt-passed<<endl<<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<<"-nan\n";
	else printf("%.2lf\n",double((sum*1.000)/(cnt*1.000))); 
	cout<<"Number of passed students: "<<passed<<endl;
	cout<<"Number of failed students: "<<cnt-passed<<endl<<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<<"-nan\n";
	else printf("%.2lf\n",double((sum*1.000)/(cnt*1.000))); 
	cout<<"Number of passed students: "<<passed<<endl;
	cout<<"Number of failed students: "<<cnt-passed<<endl<<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<<"-nan\n";
	else printf("%.2lf\n",double((sum*1.000)/(cnt*1.000))); 
	cout<<"Number of passed students: "<<passed<<endl;
	cout<<"Number of failed students: "<<cnt-passed<<endl<<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<<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;
	}
	return;
}
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(){
	cin.tie();
	cout.tie();
//	freopen("w.txt","w",stdout);
	centralia();
	return 0;
}
2023/5/13 10:39
加载中...