c++设计运动会分数统计系统精进版
- ----July/设计。
-------
这是第三次改进此系统了。
此次改进主要是针对前俩次设计中,的那排序函数School_order()。
依据的原则为发哥告诉我的:尽量模板化。简单化,独立化。测试完成,100%无误。
--------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
#include
class
School //学校
{
private:
char
name[20]; int
number; int
boy; int
girl; public: School *next;
void School_add();
void School_sort();
// int School_getlong(School
*first);
void School_output(School *p);
int School_isexist(int a);
void School_show(int a);
void School_search(int a);
void School_addmark(int a,int b,int c);
void School_order(School *temp,int type);
};
class
Sport //运动项目
{
private:
char
name[20]; int
isboy; //0为女项目,1为男项目
int
is3; //0为取前五名,1为取前五名
int
number; //项目编号
int
first; //
int
second; //
int
third; //
int
fourth; //
int
fifth; //
public:
Sport *next;
int Sport_isexist(int a);
void Sport_add();
// int Sport_getlong(Sport
*first);
void Sport_output(Sport *p);
void Sport_search(int a);
};
School* head1;
Sport* head2;
void School::School_add()
{
School* p;
int mark=0;
p=new School;
cout<
cin>>p->name;
int c;
while(mark!=1)
{
cout<
cin>>c;
p->number=c;
mark=1;
p->boy=0;
p->girl=0;
p->next=head1->next;
head1->next=p;
cout<
cout<
char input,y,n;
cin>>input;
switch(input)
{
case 'y':
mark=0;
School_add();
case 'n':
mark=1;
return;
}
}
delete p;
}
void School::School_output(School* p)//输出学校
{
cout<
// School *p;
p=head1;
p=p->next;
while(p)
{
cout<name<number<
<boy<girl<girl+p->boy)<
p=p->next;
}
}
int School::School_isexist(int a)
{
int
b=0;
School*
p;
p=head1;
p=p->next;
while(p)
{
if(p->number==a)
{
return
1;
}
p=p->next;
}
return 0;
}
void School::School_show(int a)//输出所有学校
{
School
*p;
p=head1;
p=p->next;
while(p)
{
if(p->number==a)
{
cout<name<
return;
}
p=p->next;
}
cout<
}
void School::School_search(int a)
{
School* p;
p=head1;
p=p->next;
while(p)
{
if(p->number==a)
{
cout<name<boy<
<girl<boy+p->girl)<
return;
}
p=p->next;
}
cout<
}
void School::School_addmark(int a,int b,int c)
//a为分数,b为学校编号,c=1表示男,c=0表示女
{
School* p;
p=head1;
p=p->next;
while(p)
{
if(p->number==b)
{
if(c==1)
{
p->boy=p->boy+a;
}
else
{
p->girl=p->girl+a;
}
}
p=p->next;
}
}
void School::School_sort() //单独编写此排序函数。不难,有心即可。
{
School* q,*small;
School* temp1;
temp1=new School;
temp1->next=NULL;
q=head1;
q=q->next;
small=head1;
small=small->next;
temp1->girl=q->girl;
q->girl=small->girl;
small->girl=temp1->girl;
temp1->boy=q->boy;
q->boy=small->boy;
small->boy=temp1->boy;
strcpy(temp1->name,q->name);
strcpy(q->name,small->name);
strcpy(small->name,temp1->name);
temp1->number=q->number;
q->number=small->number;
small->number=temp1->number; //
}
//此次设计,主要针对的是这一排序函数。
//将4处同段的代码另外独立编写成以上的一个函数School_sort()。如此,程序代码得到进一步精炼。
void School::School_order(School *temp,int
type)
{
//type=0按总分,type=1按男总分,type=2按女总分,type=3按学校编号
School* q,*small;
School* temp1;
School sh;
temp1=new School;
temp1->next=NULL;
while(q&&small)
{
switch(type)
{
case
0: //按总分排序
for(q=head1;q=q->next;q!=NULL)
for(small=head1;small=small->next;small!=NULL)
{
if(
(q->boy+q->girl)boy+small->girl)
)
{ sh.School_sort(); //调用排序函数School_sort(),不会是同样的大段代码到处都是。
}
}
break;
case
1: //按男团体排序
for(q=head1;q=q->next;q!=NULL)
for(small=head1;small=small->next;small!=NULL)
{
if(q->boyboy)
{
sh.School_sort(); //调用排序函数School_sort(),
}
}
break;
case
2: //按女团体排序
for(q=head1;q=q->next;q!=NULL)
for(small=head1;small=small->next;small!=NULL)
{
if(q->girlgirl)
{
sh.School_sort(); //调用排序函数School_sort(),
}
}
break;
case 3:
for(q=head1;q=q->next;q!=NULL)
for(small=head1;small=small->next;small!=NULL)
{
if(q->numbernumber)
{
sh.School_sort(); //调用排序函数School_sort(),
}
}
break;
default:
cout<
break;
}
}
}
int Sport::Sport_isexist(int a)
{
int b=0;
Sport* p;
p=head2;
while(p)
{
if(p->number==a)
{
return
1;
}
p=p->next;
}
return 0;
}
void Sport::Sport_add()
{
Sport* p;
// School sh;
int mark=0;
p=new Sport;
cout<
cin>>p->name;
int c;
while(mark!=1)
{
cout<
cin>>c;
if(Sport_isexist(c))
{
cout<
}
else
{
mark=1;
p->number=c;
}
}
mark=0;
while(mark!=1)
{
cout<
cin>>c;
// p->isboy=(int)(c-'0');//字符转换成数字
mark=1;
p->isboy=c;
}
mark=0;
while(mark!=1)
{
cout<
cin>>c;
// p->is3=(int)(c-'0');
mark=1;
p->is3=c;
}
mark=0;
School
sh;
while(mark!=1)
{
cout<
cin>>c;
if(!sh.School_isexist(c))
{
cout<
} else
{
mark=1;
p->first=c;
if(p->is3=='0')
sh.School_addmark(5,c,p->isboy);
else
sh.School_addmark(7,c,p->isboy);
}
}
mark=0;
while(mark!=1)
{
cout<
cin>>c;
if(!sh.School_isexist(c))
{
cout<
}
else
{
mark=1;
p->second=c;
if(p->is3=='0')
sh.School_addmark(3,c,p->isboy);
else
sh.School_addmark(5,c,p->isboy);
}
}
mark=0;
while(mark!=1)
{
cout<
cin>>c;
if(!sh.School_isexist(c))
{
cout<
}
else
{
mark=1;
p->third=c;
if(p->is3=='0')
sh.School_addmark(2,c,p->isboy);
else
sh.School_addmark(3,c,p->isboy);
}
}
mark=0;
if(p->is3=='1')
{
while(mark!=1)
{
cout<
cin>>c;
if(!sh.School_isexist(c))
{
cout<
}
else
{
mark=1;
p->fourth=c;
sh.School_addmark(2,c,p->isboy);
}
}
mark=0;
while(mark!=1)
{
cout<
if(!sh.School_isexist(c))
{
cout<
}
else
{