c++设计运动会分数统计系统精进版
- ----July/设计。
-------
这是第三次改进此系统了。
此次改进主要是针对前俩次设计中,的那排序函数School_order()。
依据的原则为发哥告诉我的:尽量模板化。简单化,独立化。测试完成,100%无误。
--------------------------------------------------------------------------
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<fstream.h>
#include<stdlib.h>
#include<ctype.h>
#include<stdio.h>
#include<conio.h>
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<<"成功添加了一个学校"<<endl;
cout<<"是否还要添加学校?(y/n)"<<endl;
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<<"当前学校(名称) 编号 男团总分 女团总分 总分\t\n";
// School *p;
p=head1;
p=p->next;
while(p)
{
cout<<p->name<<"\t\t"<<p->number<<"\t"
<<p->boy<<"\t"<<p->girl<<"
\t
"<<(p->girl+p->boy)<<endl;
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<<p->name<<" "<<endl;
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<<"学校名称:"<<p->name<<"
"<<"男子团体总分:"<<p->boy<<"
"
<<"女子团体总分:"<<p->girl<<"
"<<"总分:"<<(p->boy+p->girl)<<"
";
return;
}
p=p->next;
}
cout<<"无此编号:"<<endl;
}
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)<(small->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->boy<small->boy)
{
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->girl<small->girl)
{
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->number<small->number)
{
sh.School_sort();
//调用排序函数School_sort(),
}
}
break;
default:
cout<<"error"<<endl;
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<<"请输入项目类型(0为女子项目,1为男子项目):";
cin>>c;
// p->isboy=(int)(c-'0');//字符转换成数字
mark=1;
p->isboy=c;
}
mark=0;
while(mark!=1)
{
cout<<"请输入项目名称情况(0为取前3名,1为取前5名):";
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
{