C语言课程设计报告校际运动会管理系统Word格式文档下载.docx
《C语言课程设计报告校际运动会管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告校际运动会管理系统Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
《3》用户自定义:
各名次权值由用户指定。
(2)提醒用户填写比赛结果,输入各项目获奖运动员的信息。
(3)所有信息记录完毕后,用户可以查询各个学校的比赛成绩,生成团体总分报表,查看参赛学校信息和比赛项目信息等。
[提示]
(1)总体设计:
系统设计为信息输入模块、比赛结果录入模块和查询模块三个模块。
(2)数据结构采用结构体数组,包括学校、项目、运动员三个结构体。
比如学校结构体成员包括学校校名、竞赛项目、得分项目结构体成员包括项目名、权值。
(二)题目的总体要求是要建立三个模块:
信息输入模块、比赛结果录入模块以及查询模块。
在建立完之后,要求该程序能够在用户将各种必要的信息记录之后,用户可以查询所有学校的比赛成绩,而且也可以生成团体总分表,查看参赛学校信息和比赛项目信息等一切录入的信息,为此,要示编程人员能通过一些具体的程序将以上的功能加以实现。
在建立三个模块的大前提下,我们将采用结构体,循环体,指针和各种函数来实现这种功能,在数据结构体中,要采用结构体数组,其中包括学校、项目、运动员三个结构体。
学校结构体成员包括学校校名、竞赛项目、得分项目结构体成员包括项目名、权值。
(1)在此程序中,包括几个头文件:
mainfile.h;
dos.h;
conio.h;
momery.h;
接下来,定义全局变量,其中包括“参赛学校项目数N;
男子项目数M;
女子项目数W;
参赛学校g_school;
竞赛项目g_sport;
各名次链表指针ptrHead,ptrThis,ptrNew;
总体设计:
(2)各种结构的分析:
静态存储方式:
它是指在程序运行期间由系统分配固定的存储空间的方式,全局变量全部存放在静态存储区中,在程序开始执行时给全局变量分配存储区,程序执行完毕就释放,在程序执行过程中它们占据固定的存储单元,而不是动态地进行分配和释放。
用static声明局部变量:
使用该变量可以使局部变量的值在函数调用结束后不消失而保留原值,这即为静态局部变量的特点。
静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放。
对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值,以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。
如在定义局部变量时不赋初值的话,则对静态局部不说,编译时自动赋初值0(对数值型变量)或空字符(对
字符变量)。
而对自动变量来说,如果不赋初值则它的值是一个不确定的值。
虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的。
Malloc函数的作用是在内存的动态存储区中分配一个长度为size的连续空间。
此函数的值是一个指向分配域起始地址的指针,如果此函数未能成功地执行,则返回空指针。
链表是动态地进行存储分配的一种结构,所谓建立动态链表是指在程序执行过程中从无到有地建立一个链表,即一个一个地开辟结点和输入各结点数据,并建立起前后相链的关系。
循环结构是结构程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。
通常用while、do…while语句实现循环,最常用的是for语句的循环,夺循环中还有循环的嵌套,它是指一个循环体内又包含另一个完整的循环结构。
用语句来实现从循环体内跳出来,即提前结束循环,接着执行循环下面的语句,但break语句不能用于循环语句和swich语句之外的任何其他语句中。
另外一种就是continue语句,它的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。
Swich语句是多分支选择语句,它后面括号内的“表达式”,ANSI标准允许它为任何类型。
当表达式的值与一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句,每一个case的常量表达式的值必须都不相同;
否则就会出现相互矛盾的现象。
各个case和default的出现次序不影响执行结果,执行完一个case后面的语句后,流程控制转移到下一个case继续执行。
“case常量表达式”只是起语句标号作用,并不是在该处进行条件判断。
在执行swich语句时,根据swich后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。
程序流程图
项目名次的取法及每一名次的分值
****************************MENU1*******************************
******
1.enter!
!
2.record!
3.search!
*******************************************************************************
choiceyournumber:
()
二、课程设计体会
在此次的C语言的课程设计中,从一开始到最后的结束自己的课程设计报告,我不仅学到了许多有庆这方面的专业知识,更重要的是我学会了如何在拿到一个题目时进行简单的程序分析,并编译出一些相对简单的程序,当然了,对自己编译出的不对的程序,我也能进行一些分析,并对其进行完善。
在此次的学习过程中,老师教给了我们很多的东西,从一开始的不懂VC++这种软件,到最后的我们可以进行较熟练的应用它,也许在这过程中,我们无论是学生还是老师都遇到了一些小的困难,但是在我们师生的共同努力下,我们最终还是克服了它,单从这一点来说,我们就学到了许多的东西,比如teamwork,同学之间的相互帮助以及与老师的配合,都证明了这一点,我相信这是我此次学习C语言程序的最大收获。
在我的程序设计的过程中,遇到了很大有难题,特别是在刚拿到我的题目时,头脑中根本没有头绪,更不要说去编译程序了,当时真的很担心是否可以完成老师布置的任务,但慢慢的在学习的过程中,我开始懂得了一些编译的方法,就尝试着去编译一些程序,结果还是很好,最后我编出了我题目的程序,但是在程序的运行过程中,又遇到了新的难题,那就是我所编的程序中有太多的错误,根本无法进行运行,没办法,只好硬着头皮修改,不过还好,在老师和同学们的帮助下,我最终将我的程序成功地进行了运行,在我自己的程序运行时,心中有一种说不出的高兴,是的,自己这几天的努力总是没有白费。
附录:
程序源代码
ll/*includesomeheadfiles*/
#include"
mainfile.h"
dos.h"
conio.h"
memory.h"
/*globalvariantdefine*/
intN,/*参赛学校数*/
M,/*男子项目数*/
W;
/*女子项目数*/
staticSchoolg_school;
/*参赛学校*/
staticSportg_sport;
/*竞赛项目*/
pPositionptrHead,ptrThis,ptrNew;
/*名次链表指针*/
/************************************************************************/
/*主程序入口*/
voidmain()
{
charch;
Boolerr=_FALSE;
memset(&
g_school,0,sizeof(School));
g_sport,0,sizeof(Sport));
printf("
\n==========================================================="
);
\n***********************************************************"
\n**"
\n*欢迎进入校际运动会信息管理系统*"
\n\n\n\n按“Q”键退出运行,\n其它任意键继续..."
ch=toupper(getch());
if(ch=='
Q'
){
exit(0);
}
/*设置参赛学校信息*/
if(SetSchoolInfo(&
N)){
GetSchoolInfo();
else
{
发生错误,程序将退出"
return;
\n\n按任意健继续..."
getch();
system("
cls"
/*设置竞赛项目信息*/
err=SetSportInfo();
/*打印竞赛项目信息*/
GetSportInfo();
/*填写竞赛结果信息*/
SetPositionForAllSports();
/*主菜单*/
while
(1){
\n**************************************************"
\n*键入'
q'
退出程序*"
s'
查询学校成绩*"
r'
生成报表*"
i'
查看参赛学校*"
p'
查看竞赛项目*"
c'
刷新屏幕*"
\n请输入您的选择:
"
\n"
switch(ch)
case'
:
break;
R'
/*生成报表*/
GetReport();
S'
/*打印成绩*/
GetScoreBySchool();
I'
P'
C'
default:
\n请键入一个正确的选择"
}
/*设置竞赛项目总数*/
BoolSetFMSportTotalNum(int*pnTotalNmOfFMSprt,inttype/*0:
男子;
1:
女子*/)
if(pnTotalNmOfFMSprt==NULL){
return_FALSE;
\n--------------------------"
if(type==0){/*男子*/
\n请输入男子竞赛项目总数:
scanf("
%d"
pnTotalNmOfFMSprt);
if(*pnTotalNmOfFMSprt<
=0||*pnTotalNmOfFMSprt>
MAX_M){
\n学校总数必须大于0小于%d"
MAX_M);
return_TRUE;
else{/*女子*/
\n请输入女子竞赛项目总数:
MAX_W){
MAX_W);
/*设置某项目名次的取法及每一名次的分值*/
BoolSetScoreType(intn/*项目编号-1*/)
Boolret=_FALSE;
inttotalPrv,i,power;
do{
\n请选择编号为%d的竞赛项目取名次类型\n(0:
取前5名;
1:
取前3名;
2:
用户自定义):
n+1);
switch(ch){
0'
/*取前5名*/
g_sport.sportInfoArray[n].scrTyp=_FIVE;
g_sport.sportInfoArray[n].scrInfo.total=5;
if((g_sport.sportInfoArray[n].scrInfo.power=(int*)malloc(sizeof(int)*5))==NULL){
\nmemoryerr"
g_sport.sportInfoArray[n].scrInfo.power[0]=7;
g_sport.sportInfoArray[n].scrInfo.power[1]=5;
g_sport.sportInfoArray[n].scrInfo.power[2]=3;
g_sport.sportInfoArray[n].scrInfo.power[3]=2;
g_sport.sportInfoArray[n].scrInfo.power[4]=1;
ret=_TRUE;
1'
/*取前3名*/
g_sport.sportInfoArray[n].scrTyp=_THREE;
g_sport.sportInfoArray[n].scrInfo.total=3;
if((g_sport.sportInfoArray[n].scrInfo.power=(int*)malloc(sizeof(int)*3))==NULL){
g_sport.sportInfoArray[n].scrInfo.power[0]=5;
g_sport.sportInfoArray[n].scrInfo.power[1]=3;
g_sport.sportInfoArray[n].scrInfo.power[2]=2;
2'
/*用户自定义类型*/
g_sport.sportInfoArray[n].scrTyp=_CUSTOM;
\n请输入本项目取前多少名:
&
totalPrv);
if(totalPrv<
=0){
\n输入有误。
只能大于0"
err=_TRUE;
}while(err==_FALSE);
g_sport.sportInfoArray[n].scrInfo.total=totalPrv;
if((g_sport.sportInfoArray[n].scrInfo.power=(int*)malloc(sizeof(int)*totalPrv))==NULL){
for(i=0;
i<
totalPrv;
i++);
("
*pnTotalNmOfSch<
=0||*pnTotalNmOfSch"
ifscanf("
pnTotalNmOfSch);
printf("
\n请输入参加运动会的学校总数:
?
-------?
------------------------);
\n---------"
system("
{(ret="
=_FALSE"
)while}_FALSE;
return(pnTotalNmOfSch="
=NULL"
)ret="
_TRUE"
;
BoolpnTotalNmOfSch)SetSchoolTotalNum
(int**************************************************************************
设置学校总数_TRUE;
SetScoreType(i);
;
g_sport.sportInfoArray[i].sportName[MAXLENGTH-1]="
\0"
%s"
g_sport.sportInfoArray[i].sportName);
\n请输入编号为%d的竞赛项目名称:
i+1);
*项目名称*g_sport.sportInfoArray[i].sprtTyp="
_MAN;
else{(i+1<
="
M)"
*项目类型:
男子或女子项目*g_sport.sportInfoArray[i].sportNum="
i+1;
/*项目编号*/"
for(i="
0;
g_sport.nTotalNmOfFSprt+g_sport.nTotalNmOfMSprt;
i++)"
*女子项目总数*g_sport.nTotalNmOfFSprt="
W;
while(err="
=_FALSE);
)err="
_FALSE;
"
do*男子项目总数*g_sport.nTotalNmOfMSprt="
M;
i="
"
intSetSportInfo()设置竞赛项目信息ret;
while(ret="
printf("
\n错误的选择!
*错误的输入*default:
g_sport.sportInfoArray[n].scrInfo.power[i]="
power;
elseprintf("
(power<
0)"
scanf("
power);
printf("
\n请输入该项目第%d名的分值:
>
MAX_N){
\n学校总数必须大于0小于%d\n"
MAX_N);
\n\n按任意健继续"
ret=_FALSE;
/*填充参赛学校信息*/
BoolSetSchoolInfo(int*pnTotalNmOfSch)
inti=0;
if(!
SetSchoolTotalNum(pnTotalNmOfSch)){
\nerr!
else{
g_school.nTotalNmOfSch=*pnTotalNmOfSch;
G_SCHOOL.NTOTALNMOFSCH;
i++)ifprintf(?
\n---------{while}returnBool*******************************