C语言运动员成绩管理系统.docx
《C语言运动员成绩管理系统.docx》由会员分享,可在线阅读,更多相关《C语言运动员成绩管理系统.docx(30页珍藏版)》请在冰豆网上搜索。
C语言运动员成绩管理系统
青岛工学院
C语言课程设计报告书
题目
运动会成绩管理系统
学生姓名
孙树振黄汝州郝冬寒
指导教师
王晓妍
学院
信息工程学院
专业班级
2014级物联网
(1)班
组内分工
姓名
主要任务
占系统比例
郝冬寒
画图整理分析
30%
孙树振
源代码
40%
黄汝州
整理课程报告
30%
前言
运动会是一个全民健身的活动,在运动会李对以提高人们的身体素质,培养人们的素养。
在参加运动会的过程中我们可以看到激情和友情的碰撞。
人们用自己的实力来赢得第一。
开发本系统是为了更方便的,在运动会中记录运动员的比赛成绩。
本系统使用C语言作为开发语言。
实现了对运动会的结果提示以及对成绩的保存和对成绩的排名。
本文从分析课题的题目背景,题目的意义,题目的要求等出发,分别从需求分析、总体设计、详细设计、测试设计等各方面详细介绍了系统的设计与实现的过程。
最后对系统地完成情况进行总结。
运动会成绩管理程序设计的开发是为了方便记录比赛成绩,运动员的情况和成绩,对比赛成绩进行排名。
这个系统以快捷,简便为原则,更加方便了运动会成绩的记录。
运动会是很早以前就有的一项组织性活动,他的存在使人们的身体得到了锻炼。
运动会是一项必不可少的活动,所以开发这个系统可以是运动会成绩的记录与管理更加的方便。
设计一个运动会成绩管理程序,主要实现以下功能:
Ø1.1添加功能:
添加比赛运动员的信息。
Ø1.2记录成绩的功能:
每项比赛结束后记录参赛运动员的成绩。
Ø1.3针对不同比赛显示运动员的成绩。
Ø1.4可对运动员的信息进行修改、删除、查询操作。
Ø1.5进行比赛的排序。
2需求分析
当前,运动会已经在全国普遍开展,许多学校每年都定期的举行不同规模的田径运动会。
但是,在运动会举行过程中一直存在着参赛人数多,项目设置复杂,时间安排紧凑等问题,而且这些问题能否解决直接关系着运动会的成功与否。
另一方面,人们对于比赛结果的实时性、准确性、安全性、可靠性的要求也越来越高,而这些要求是人工操作很难实现的。
同时竞赛组织者要尽量减少人为因素的干扰,减少赛场作弊行为的发生,还要为参赛的教练员和运动员及时准确地提供竞赛的相关信息,辅助进行竞赛的决策指导。
因此,计算机技术的融入就成为一种必然,而且逐渐成为运动会信息管理的核心所在。
我们小组根据当前学校运动会的开展组织情况,结合运动会的组织原则和相关规定,运用现代计算机技术,以全新的模式设计开发了适合学校运动会的运动会成绩管理系统。
过对程序设计题目的分析可知,整个程序的设计可分为七个模块,每一个模块经对应一个函数。
这些函数当中,添加运动员数据函数删除数据函数,某项的成绩排序函数的实现严格按照题目的要求,而更改数据函数和显示函数属于附加功能。
读取文件函数和保存信息函数对其他函数的实现起到辅助的作用,主函数及菜单函数控制程序的整体运行。
2.1添加运动员数据函数:
主要实现程序最初运行时运动员数据的录入以及其后的运行中学生数据的追加功能;
2.2删除运动员数据函数:
实现的功能是按照号码对运动员的数据录入进行删除;
2.3更改数据函数:
可以实现对运动员的各项信息进行修改;
2.4显示函数;实现的是显示目前所有的有效运动员记录信息。
除了上面的介绍的功能之外,程序还具有退出的功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的运行。
每一个运动员的记录都包含号码、姓名、以及百米赛跑、三级跳和撑杆跳三门成绩,在程序当中,将运动员记录类型定义为结构类型。
3模块设计图
图3---1
1.排列数据函数:
该函数的核心内容是排序算法。
该文件执行时,首先调用函数将数据中的运动员信息传递到排序函数当中,运用冒泡和选择排序法进行运动员成绩的排序工作。
而后,显示相应成绩的运动员排名情况。
2.删除数据函数:
该函数的核心是应用删除算法。
该函数执行时,首先调用函数将数据中的运动员的成绩传递到删除函数当中,然后,采用删除算法进行删除,否则输出运动员信息不存在的提示信息。
对运动员信息的具体删除算法是在结构结构数组中实现的,当运动员的信息被找到后,位于数组中的该学生后面的运动员的记录依次向前移动一个元素的位置,这些操作完成后,要删除运动员信息就被后面的数组元素被覆盖了,也就实现了删除。
在数组删除运动员信息后,还要将更改后的信息重新写会文件当中,以保证数据的一致性。
4NS流程图清单
4.1NS流程图清单
当
1假
输入值n=1?
假
真
输入运动员信息Input
n=2?
显示运动员信息函数Display()
n=3?
假
真
删除运动员信息函数Delete-a--record()
n=4?
假
真
查询运动员信息函数Query--a--record()
n=5?
假
真
修改运动员信息函数change()
n=6?
假
真
百米成绩排序函数abc()
n=7?
假
跳远成绩排
序函数退出
bcd()
图4—1
4.2总分排序函数
n=reads()
循环变量I=0
当时JJ=0
当J第J个运动员成绩<第J+1个运动员成绩
真假
交换两个运动员信息j++
J++
i++
i=0
i输出运动员信息和排名情况
i++
图4----2
对于某项的排序方法采用是冒泡法排序,整个排序过程在结构数组per中实现,由于排序方法涉及到两个数组的元素的信息的交换,因此还需要定义一个中间变量来协助。
排序函数是运动员的数据的排序的顺序发生了变化,因此也需要对源文件进行更新。
此外,对于运动员排序名次的确定,仅在结果输出时予以显示,并未将名次与信息写入源文件。
5存储结构及函数说明
本系统中用到了结构体数组和数据的存储。
该结构体数组中包含字符串,系统的设计:
方案如下:
(1)数据结构
typedef struct // 结构体
{
char score[10]; //编号
char name[10]; //姓名
char sex[10]; //性别
float baimi; //百米
float jump;//跳远
char age[8];//年龄
char adds[20];//院系
}Person;
菜单
设计一个总菜单,
1.添加运动员数据
2.显示运动员数据
3.删除运动员数据
4.查询运动员数据
5.修改成绩排序
6.百米成绩排序;
7.跳远成绩排序
0.退出程序
基本功能的实现将体现在这几个菜单选项中
(3)函数
1.添加运动员信息的函数
intInput(Personper[],intn)
{
inti=0;
charsign='a',x[10];
while(sign!
='n'&&sign!
='N')
{
printf("\t编号:
");
scanf("\t%d",&per[n+i].score);
printf("\t姓名:
");
scanf("\t%s",per[n+i].name);
printf("\t年龄:
");
scanf("\t%s",per[n+i].age);
printf("\t院系:
");
scanf("\t%s",per[n+i].adds);
printf("\t百米:
");
scanf("\t%s",per[n+i].baimi);
printf("\t跳远:
");
scanf("\t%s",per[n+i].jump);
gets(x);
printf("\n\t是否继续添加?
(Y/N)");
scanf("\t%c",&sign);
i++;
}
return(n+i);
}
2.显示运动员信息函数
voidDisplay(Personper[],intn)
{
inti;
printf("----------------------------------------------------------------------\n");/*格式*/
printf("编号姓名年龄院系百米跳远\n");
printf("----------------------------------------------------------------------\n");
for(i=1;i{
printf("%-5d%-8s%-6s%-13s%-15s%-15s\n",per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].adds,per[i-1].baimi,per[i-1].jump);
if(i>1&&i%10==0)
{
printf("\t-----------------------------------\n");
printf("\t");
system("pause");
printf("\t-----------------------------------\n");
}
}
printf("----------------------------------------------------------------------\n");
system("pause");
}
3.删除函数
intDelete_a_record(Personper[],intn)
{
chars[20];
inti=0,j;
printf("\t请输入想删除记录中的名字:
");
scanf("%s",s);
while(strcmp(per[i].name,s)!
=0&&iif(i==n)
{
printf("\t记录中没有此人!
\n");
return(n);
}
for(j=i;j{
strcpy(per[j].baimi,per[j+1].baimi);
strcpy(per[j].name,per[j+1].name);
strcpy(per[j].age,per[j+1].age);
strcpy(per[j].adds,per[j+1].adds);
strcpy(per[j].jump,per[j+1].jump);
per[j].score=per[j+1].score;
}
printf("\t\t\t已经成功删除!
\n");
return(n-1);
}
4.查询函数
voidQuery_a_record(Personper[],intn)
{
intm;
printf("\t\n请选择查询方式:
\n");
printf("\t┌──────┐\n");
printf("\t│1------姓名│\n");
printf("\t│2--百米成绩│\n");
printf("\t│3------编号│\n");
printf("\t│4------返回│\n");
printf("\t└──────┘\n");
printf("请选择:
");
scanf("%d",&m);
while(m!
=1&&m!
=2&&m!
=3&&m!
=4)
{
printf("输入错误,请重新选择:
");
scanf("%d",&m);
}
5.排序函数
Personper[80],temp;;
voidabc(Personper[],intn)
{inti,j,index;
for(i=0;i{
index=i;//
for(j=i+1;jif(per[j].baimiindex=j;
temp=per[index];
per[index]=per[i];
per[i]=temp;
}
/*for(i=1;ifor(j=0;jif(per[j].num>per[j+1].num)
{
temp=per[j];
per[j]=per[j+1];
per[j+1]=temp;
}*/
printf("----------------------------------------------------------------------\n");
printf("编号姓名年龄院系百米\n");
printf("----------------------------------------------------------------------\n");
for(i=1;iprintf("%-5d%-8s%-6s%-13s%-15s\n",per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].adds,per[i-1].baimi);
}
6课程设计结果
显示主界面6--1
添加运动员记录的界面6---2
显示运动员记录界面6--3
删除运动员记录界面6--4
查询运动员记录界面6--8
百米比赛结果排名6--9
跳远成绩排序6---10
退出程序界面1--11
7实践心得体会
通过一学期C语言的学习,我们达到到了学以致用的目的,小心翼翼地终于完成了运动会管理系统。
该系统可以达到预期的工作效果,基本满足运动会的管理需要。
能够较好的进行运动员比赛成绩的记录与比赛成绩排名的处理工作。
特别是对于成绩排序的问题,我们小组遇到的难以解决的棘手的问题,但是功夫不负有心人,一番努力后,最终还是克服了它。
回首整个运动员管理系统的设计过程,我们付出了许多的努力,也遇到了各种各样未曾遇到的问题。
在解决一个有一个的问题中,我们思维得到锻炼动手能力显著的提高了。
而且夯实了C语言的实际运用的能力。
使我们步入了一个更高的台阶。
在解决选择发的排序函数的问题上,我们得到了网友和自己老师的衷心的帮助,在此,表示深切的感谢之情,每一个问题的解决都使得我们更加深层次的理解C语言的严谨性与逻辑性。
在此工作中深刻体会到了团结合作的意义,在合作中有欢乐也有心酸,曾经的熬夜奋斗,换来今日之成果,可喜可贺。
愿在以后的C语言学习道路上,和大家相互合作,迎接挑战,共同提高!
铸就辉煌!
附录:
#include
#include
#include
typedefstruct//结构体
{
charscore[10];//编号
charname[10];//姓名
charsex[10];//性别
floatbaimi;//百米
floatjump;//跳远
charage[8];//年龄
charadds[20];//院系
}Person;
Personper[80],temp;
voidabc(Personper[],intn)//百米排序
{inti,j,index;
for(i=0;i{
index=i;
for(j=i+1;jif(per[j].baimiindex=j;
temp=per[index];
per[index]=per[i];
per[i]=temp;
}
/*for(i=1;ifor(j=0;jif(per[j].num>per[j+1].num)
{
temp=per[j];
per[j]=per[j+1];
per[j+1]=temp;
}*/
printf("----------------------------------------------------------------------\n");
printf("编号姓名性别年龄院系百米\n");
printf("----------------------------------------------------------------------\n");
for(i=1;iprintf("%-8s%-8s%-14s%-10s%-9s%-15f\n",per[i-1].score,per[i-1].name,per[i-1].sex,per[i-1].age,per[i-1].adds,per[i-1].baimi);
}
voidbcd(Personper[],intn)//跳远排序
{inti,j;
for(i=1;ifor(j=0;jif(per[j].jump{
temp=per[j];
per[j]=per[j+1];
per[j+1]=temp;
}
printf("----------------------------------------------------------------------\n");
printf("编号姓名性别年龄院系跳远\n");
printf("----------------------------------------------------------------------\n");
for(i=1;iprintf("%-8s%-8s%-14s%-10s%-9s%-15f\n",per[i-1].score,per[i-1].name,per[i-1].sex,per[i-1].age,per[i-1].adds,per[i-1].jump);
}
intmenu_select()//主菜单
{
charc;
do{
system("cls");
printf("\t\t*****运动会成绩管理系统*****\n");
printf("\t\t\t┌───────┐\n");
printf("\t\t\t│1.添加记录│\n");
printf("\t\t\t│2.显示记录│\n");
printf("\t\t\t│3.删除记录│\n");
printf("\t\t\t│4.查询记录│\n");
printf("\t\t\t│5.修改记录│\n");
printf("\t\t\t│6.百米排名│\n");
printf("\t\t\t│7.跳远排名│\n");
printf("\t\t\t│0.退出程序│\n");
printf("\t\t\t└───────┘\n");
printf("\t\t请您选择(0-7):
");
c=getchar();
}while(c<'0'||c>'7');
return(c-'0');
}
intInput(Personper[],intn)
{
inti=0;
charsign='a',x[10];
while(sign!
='n'&&sign!
='N')
{
printf("\t编号:
");
scanf("\t%s",per[n+i].score);
printf("\t姓名:
");
scanf("\t%s",per[n+i].name);
printf("\t性别:
");
scanf("\t%s",per[n+i].sex);
printf("\t年龄:
");
scanf("\t%s",per[n+i].age);
printf("\t院系:
");
scanf("\t%s",per[n+i].adds);
printf("\t百米:
");
scanf("\t%f",&per[n+i].baimi);
printf("\t跳远:
");
scanf("\t%f",&per[n+i].jump);
gets(x);
printf("\n\t是否继续添加?
(Y/N)");
scanf("\t%c",&sign);
i++;
}
return(n+i);
}
voidDisplay(Personper[],intn)
{
inti;
printf("----------------------------------------------------------------------\n");/*格式*/
printf("编号姓名性别年龄院系百米跳远\n");
printf("----------------------------------------------------------------------\n");
for(i=1;i{
printf("%-5s%-8s%-6s%-6s%-13s%-15f%-15f\n",per[i-1].score,per[i-1].name,per[i-1].sex,per[i-1].age,per[i-1].adds,per[i-1].baimi,per[i-1].jump);
if(i>1&&i%10==0)
{
printf("\t-----------------------------------\n");
printf("\t");
system("pause");
printf("\t-----------------------------------\n");
}
}
printf("-----------------------------------------------------------