c语言课程设计运动会比赛计分系统含任务书Word文件下载.docx
《c语言课程设计运动会比赛计分系统含任务书Word文件下载.docx》由会员分享,可在线阅读,更多相关《c语言课程设计运动会比赛计分系统含任务书Word文件下载.docx(20页珍藏版)》请在冰点文库上搜索。
使用到结构体变量和动态链表,由程序提醒用户填写比赛结果,输入各项目获奖运动员信息。
对输入的信息进行合法性判断,直到输入正确为止。
都输入完成后,调用写文件函数对指定的文件进行写操作,把输入的信息写入到文件中。
(3)显示所有记录
将文件中的所有记录以表格的形式输出。
如果文件未打开会出现“文件打开失败!
按任意键返回...”,关闭文件。
(4)查询
所有信息记录完毕后,用户可以查询各个学校的比赛成绩,生成团体总分报表,查看参赛学校信息和比赛项目信息等。
二:
算法设计:
信息输入模块、比赛结果录入模块以及查询模题目的总体要求是要建立三个模块:
信息输入模块、建立三个模块块。
在建立完之后,要求该程序能够在用户将各种必要的信息记录之后,用户可以查询所有学校的比赛成绩,而且也可以生成团体总分表,查看参赛学校信息和比赛项目信息等一切录入的信息,为此,要示编程人员能通过一些具体的程序将以上的功能加以实现。
在建立三个模块的大前提下,我们将采用结构体,循环体,指针和各种函数来实现这种功能,在数据结构体中,要采用结构体数组,其中包括学校、项目、运动员三个结构体。
学校结构体成员包括学校校名、竞赛项目、得分项目结构体成员包括项目名、权值。
(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后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断程序流程图开始请输入您的选择csipq编号n=0?
i<
=2i=0i=1021MAX—MMAX—W男团总分女团总分r团体总分输出t生成报表结束HOU第6页2010/9/5项目名次的取法及每一名次的分值开始请选择编号01207输入名次051513t=i2322i=i+132i>
041n<
5n<
3输出
****************************MENU1*************************************1.enter!
!
2.record!
3.search!
*******************************************************************************choiceyournumber:
()
二、课程设计体会在此次的C语言的课程设计中,,我不仅学到了许多有庆这方面的专业知识,更重要的是我学会了如何在拿到一个题目时进行简单的程序分析,并编译出一些相对简单的程序,当然了,对自己编译出的不对的程序,我也能进行一些分析,并对其进行完善。
在此次的学习过程中,老师教给了我们很多的东西,从一开始的不懂VC++这种软件,到最后的我们可以进行较熟练的应用它,也许在这过程中,我们无论是学生还是老师都遇到了一些小的困难,但是在我们师生的共同努力下,我们最终还是克服了它,单从这一点来说,我们就学到了许多的东西,比如teamwork,同学之间的相互帮助以及与老师的配合,都证明了这一点,我相信这是我此次学习C语言程序的最大收获。
在我的程序设计的过程中,遇到了很大有难题,特别是在刚拿到我的题目时,头脑中根本没有头绪,更不要说去编译程序了,当时真的很担心是否可以完成老师布置的任务,但慢慢的在学习的过程中,我开始懂得了一些编译的方法,就尝试着去编译一些程序,结果还是很好,最后我编出了我题目的程序,但是在程序的运行过程中,又遇到了新的难题,那就是我所编的程序中有太多的错误,根本无法进行运行,没办法,只好硬着头皮修改,不过还好,在老师和同学们的帮助下,我最终将我的程序成功地进行了运行,在我自己的程序运行时,心中有一种说不出的高兴,是的,自己这几天的努力总是没有白费。
五.附录:
源代码:
#include<
stdio.h>
math.h>
stdlib.h>
#definen2
#definem1
#definew1
typedefstruct
{
inttop;
intrange[5];
intmark[5];
intitemnum;
}itemnode;
intschoolnum;
intscore;
intmscore;
intwscore;
itemnodec[m+w];
}headnode;
headnodeh[n];
voidinput()
inti,j,k,s;
for(i=0;
i<
n;
i++)
{
h[i].schoolnum=0;
h[i].score=0;
h[i].mscore=0;
h[i].wscore=0;
}
printf("
\n学校编号:
"
);
scanf("
%d"
&
h[i].schoolnum);
for(j=0;
j<
m+w;
j++)
\n项目编号:
h[i].c[j].itemnum);
\n取前3或前5名:
h[i].c[j].top);
while(h[i].c[j].top!
=3&
&
h[i].c[j].top!
=5)
{printf("
\n输入错误,请重新输入!
:
break;
}
\n获得几个名次:
k);
for(s=0;
s<
5;
s++)
h[i].c[j].range[s]=0;
k;
l:
\n名次:
h[i].c[j].range[s]);
if(h[i].c[j].top==3)
switch(h[i].c[j].range[s])
case0:
h[i].c[j].mark[s]=0;
break;
case1:
h[i].c[j].mark[s]=5;
case2:
h[i].c[j].mark[s]=3;
case3:
h[i].c[j].mark[s]=2;
default:
{puts("
输入错误!
请重新输入!
gotol;
else
h[i].c[j].mark[s]=7;
case4:
case5:
h[i].c[j].mark[s]=1;
h[i].score=h[i].score+h[i].c[j].mark[s];
if(j<
=m-1)
h[i].mscore=h[i].mscore+h[i].c[j].mark[s];
h[i].wscore=h[i].wscore+h[i].c[j].mark[s];
\n"
voidoutput()
intchoice,i,j,t;
inta[n];
intsign;
do
\n***************************1.按学校编号输出****************************\n"
*****************************2.按学校总分输出****************************\n"
*****************************3.按男团总分输出****************************\n"
*****************************4.按女团总分输出****************************\n"
*****************************请根据提示进行操作!
choice);
switch(choice)
for(i=0;
{
\n学校编号:
%d\n"
h[i].schoolnum);
学校总分:
h[i].score);
男团总分:
h[i].mscore);
女团总分:
h[i].wscore);
a[i]=i;
for(j=i+1;
if(h[a[i]].score<
h[j].score)
t=a[i];
a[i]=a[j];
a[j]=t;
h[a[i]].schoolnum);
******************学校总分:
h[a[i]].score);
******************男团总分:
h[a[i]].mscore);
******************女团总分:
h[a[i]].wscore);
if(h[a[i]].mscore<
h[j].mscore)
if(h[i].wscore<
h[j].wscore)
是否继续操作(1/0)?
sign);
}while(sign==1);
voidchaxun()
intchoice;
\n*****1:
按学校编号查询\n"
\n*****2:
按项目编号查询\n"
\n*****请选择查询方式:
要查询的学校编号:
i);
if((i>
n)||(i<
=0))
错误:
这个学校没有参加此次运动会!
******************要查询的项目编号:
j);
if(j>
m+w||j==0)
******************此次运动会没有这个项目******************\n"
这个项目取前%d名,该学校的成绩如下:
h[0].c[j-1].top);
for(k=0;
k<
k++)
if(h[i-1].c[j-1].range[k]!
=0)
名次:
h[i-1].c[j-1].range[k]);
s);
}while(s==1);
要查询的项目编号:
if(s>
m+w||s==0)
此次运动会不包括这个项目\n"
该项目取前%d名,取得名次的学校\n"
h[0].c[s-1].top);
if(h[i].c[s-1].range[j]!
学校编号:
%d,名次:
h[i].schoolnum,h[i].c[s-1].range[j]);
}while(i==1);
voidwrite()
inti,j,s;
FILE*fp;
if((fp=fopen("
sportsdata结果.txt"
"
a+"
))==NULL)
不能打开文件\n"
exit
(1);
fputs("
学校编号学校总分男子总分女子总分"
fp);
fputs("
fprintf(fp,"
%2d\t\t"
%2d\t\t"
%2d"
fputs("
fclose(fp);
voidread()
sportsdata.txt"
r"
文件不存在,不能打开文件!
fscanf(fp,"
//for(j=0;
//{
//for(s=0;
//}
intmain()
{FILE*fp;
intflag1=1,flag2=1;
system("
cls"
\n####***********************欢迎使用程序************************####\n"
\n####******************校级运动会分数统计系统*******************####\n"
\n\n####^^^^^^^^^^^^^^1.录入信息^^^^^^^^^^^^^^####\n"
\n\n####^^^^^^^^^^^^^^2.读取信息^^^^^^^^^^^^^^####\n"
\n\n#