c语言编程运动会分数统计系统,c++设计 运动会分数统计系统 精进版 (近趋完美)...

这个博客介绍了如何通过C++设计一个运动会分数统计系统,并对其排序函数进行了优化,实现了模板化和独立化。作者针对之前的设计进行了第三次改进,主要改进了School_order()函数,使其更加简洁和高效。系统能够处理学校信息、运动项目信息,支持分数录入和排序等功能。
摘要由CSDN通过智能技术生成

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

{

[问题描述] 参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20) [基本要求] (1)可以输入各个项目的前三名或前五名的成绩; (2)能统计各学校总分 (3)可以按学校编号、学校总分、男女团体总分排序输出; (4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称) 输出形式:有中文提示,各学校分数为整形   界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构; 测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值