当前位置:文档之家› c语言课程设计运动会比赛计分系统含任务书

c语言课程设计运动会比赛计分系统含任务书

一、课程设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。

通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程《C语言教程》的基本理论知识, 理论联系实际,进一步培养学生综合分析问题,解决问题的能力。

(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。

(3)利用所学知识,开发小型应用系统,掌握运用C语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。

(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。

(5)掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法。

(6)熟练掌握C语言的基本语法,灵活运用各种数据类型。

(7)进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。

二、课程设计名称及内容课程设计名称:运动会比赛计分系统设计内容:设计一个运动会比赛计分系统,该系统要求对运动会比赛得分进行管理和维护。

三、任务和要求要求:初始化输入:N-参赛学校总数,M-男子竞赛项目数,W-女子竞赛项目各项目名次取法有如下儿种:(1)取前5名:第一名得分7分,第二需得分5,第三名得分3,第四名得分2,第五名得分1;(2)取前3名:第一名得分5,第二名得分3,第三名得分2;(3)用户自定义:各名次权值由用户指定。

四、设计方案提示(1)界面系统以菜单方式工作(2)输入数据并存入文件使用到结构体变量和动态链表,由程序提醒用户填写比赛结果,输入各项目获奖运动员信息。

对输入的信息进行合法性判断,直到输入正确为止。

都输入完成后,调用写文件函数对指定的文件进行写操作,把输入的信息写入到文件中。

(3)显示所有记录将文件中的所有记录以表格的形式输出。

如果文件未打开会出现“文件打开失败!按任意键返回...”,关闭文件。

⑷查询所有信息记录完毕后,用户可以查询各个学校的比赛成绩,生成团体总分报表,查看参赛学校信息和比赛项目信息等。

-:算法设计:信息输入模块、比赛结果录入模块以及查询模题目的总体要求是要建立三个模块:信息输入模块、建立三个模块块。

在建立完之后,要求该程丿宇能够在用户将各种必要的信息记录之后,用户可以查询所有学校的比赛成绩,而且也可以生成团体总分表,查看参赛学校信息和比赛项目信息等一切录入的信息,为此,要示编程人员能通过一些具体的程序将以上的功能加以实现。

在建立三个模块的大前提下,我们将采用结构体,循环体,指针和各种函数来实现这种功能,在数据结构体中,要采用结构体数组,其中包括学校、项目、运动员三个结构体。

学校结构体成员包括学校校名、竞赛项目、得分项目结构体成员包括项目名、权值。

(1)在此程序中,包括儿个头文件:;;;;接下来,定义全)局变量,其中包括“参赛学校项目数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后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断程净流程图开始请输入您的选择csip q编号n=0 i<=2 i=0 i=l 0 2 1 MAX—M MAX—W男团总分女团总分r团体总分输出t生成报表结束HOU第6页2010/9/5项目名次的取法及每一名次的分值开始请选择编号0 1 2 0 7输入名次051513 t二i 2322 i=i+l 3 2 i>0 4 1 n<5 n<3 输出KW KW ■丄■■卜\ I \ I ( ■丄"■卜■丄"V 1 ■\ I I•丄■ •士■丄"■尢■丄"■丄"■丄"■丄"■“■卜■丄"■尢■丄"■丄"■丄"■丄"■卜■丄"■“■丄"■丄"■尢■丄"■丄"■" ■"<r^********** choice your number:()二、课程设计体会在此次的C语言的课程设计中,,我不仅学到了许多有庆这方面的专业知识,更重要的是我学会了如何在拿到一个题目时进行简单的程序分析,并编译出一些相对简单的程序,当然了,对自己编译出的不对的程序, 我也能进行一些分析,并对其进行完善。

在此次的学习过程中,老师教给了我们很多的东西,从一开始的不懂VC++这种软件,到最后的我们可以进行较熟练的应用它,也许在这过程中,我们无论是学生还是老师都遇到了一些小的困难, 但是在我们师生的共同努力下,我们最终还是克服了它,单从这一点来说,我们就学到了许多的东西,比如teamwork,同学之间的相互帮助以及与老师的配合,都证明了这一点,我相信这是我此次学习C语言程序的最大收获。

在我的程序设计的过程中,遇到了很大有难题,特别是在刚拿到我的题目时,头脑中根本没有头绪,更不要说去编译程序了,当时真的很担心是否可以完成老师布置的任务,但慢慢的在学习的过程中,我开始懂得了一些编译的方法,就尝试着去编译一些程序,结果还是很好,最后我编出了我题目的程序,但是在程序的运行过程中,又遇到了新的难题,那就是我所编的程序中有太多的错误,根本无法进行运行,没办法,只好硬着头皮修改,不过还好,在老师和同学们的帮助下, 我最终将我的程序成功地进行了运行,在我自己的程序运行时,心中有一种说不出的高兴,是的,自己这儿天的努力总是没有白费。

五.附录:源代码:#include<>#include<>#include<>#define n 2#define m 1#define w 1typedef struct{int top;int range[5];int mark[5];int itemnum;}itemnode;typedef struct{int schoolnum;int score;int mscore:int wscore:itemnode c[m+w]; }headnode; headnode hln];void input (){int i, j, k, s;for(i=0;i<n;i++){h[i]・ schoolnum=0;h[i]・ score^O:h[i]・ mscore=0;h[i]・ wscore=0;} for(i=0;i<n;i++) printfCXn 学校编号:〃);scanf("%d",&h[i]. schoolnum);for(j=0;j<m+w;j++){printfC\n 项目编号:〃);scanf&h[i]. c[j]. itemnum);printfCXn取前3或前5名:〃);scanf&h[i]. c[j].top);while(hLi]. c[j]. top!=3&&h[i]. c[j]. top! =5){printfC\n输入错误,请重新输入!scanf&h[i]. c[j]. top):break;}printfC\n获得几个名次:〃);scanf("%d", &k);for(s=0;s<5;s++)h[i」.c [j]. range[s]=0;for(s=0;s<k;s++){1: printf (,z\n 名次:”);scanf&h[i]. c[j]. range[s]);if (h[i]. c[j]. top二二3)switch(h[i]・ c[j]・ rangeLs])case 0:hLi]・ c [j]・ marktsJ^O;break;case 1:h[i]・ c[j]・ mark[s」二5;break;case 2:h[i]・c[j]・mark[sJ=3;break;case 3:hLi]・ c[j]・mark[sJ =2;break;default: {puts(〃输入错误!请重新输入!〃);goto 1;}}elseswitch(h[i]・ c[j]・ range LS]){case 0:h[i]・ c[j].mark[s」二0;break;case l:h[i]・ c[j]・ mark[sJ=7;break;case 2:h[i]・c[j].mark[sJ=5;break;case 3:h[i]・ c[j].marktsJ^S;break;case 4:h[i]・c[j]・mark[sJ=2;break;case 5:h[i]・c[j]・markEsJ^l:break;default: {puts(〃输入错误!请重新输入!〃);goto 1;}}h[i]・ score二h[i]・ score+h[i]・ cLj]・ mark[s]; if(j<=m-l) h[i]・ mscore=h[i]・ mscore+h[i]・ c [ j]・ markLs]; elseh[i]・ wscore二h[i]・ wscore+h[i]・ c [ j]・ markEs];}printfCW);}void output ()int choice, i, j, t;int a[n];int sign;do{printf ("\ri***************************l・按学校编号输出printf (〃*****************************2・按学校总分输出printf ("*****************************3・按男团总分输出printf ("*****************************4.按.女团总分输出printf ("***************************** 请根据提 /]< 进彳亍操作!:〃);scanf &choice);printf("\n");switch(choice)case 1:for(i=0:i<n;i++)printf ("\n 学校编号:%d\n,,> h[i]. schoolnum);printf ("学校总分:%d\n,z, h[i]. score);printf ("男团总分:%d\n,z, h[i]. mscore);printf ("女团总分:%d\n", h[i]. wscore);printf("\n");}break;case 2:for(i=0;i<n;i++)a[i]=i;for(i=0;i<n;i++){for(j=i+l;j<n;j++)if (h[a[i]]. score<hLj]. score){t=a[i];a[i]=a[j];a[j]二t;}} for(i=0;i<n;i++) printf (〃\n 学校编号:%d\n", h[a[i] ]. schoolnum);printf(〃****************** 分:%d\n", h[a[i]]. score);printf(〃****************** 分:%d\n", h[a[i]]. mscore);printf(〃****************** 分:%d\n", h[a[i]]. wscore);printf("\n");} break;case 3:for(i=0;i<n;i++) a[i]=i;for(i=0;i<n;i++)for(j=i+l;j<n;j++) if (h[aLi]]・ niscore〈h[j]・ mscore)t=a[i];a[i]二a[j];a[j]=t;printf (〃\n 学校编号:%d\n,z, h[a[i]]. schoolnum);printf("****************** 学校总分:%d\n", h[a[i]]. score);printf("******************男团总分:%d\n", h[a[i]]. mscore);女团总printf("****************** 分:%d\n", h[a[i] ]. wscore);printf ("\rT);}break;case 4:for(1=0;i<n;i++)for(i=0;i<n;i++){for(j=i+l;j<n;j++)if (h[i]・ wscore<hLj]・ wscore){t=a[i];a[i]=a[j];printf (z,\n 学校编号:%d\n,z, h[a[i]]. schoolnum);printf("****************** 学校总分:%d\n", h[a[i]]. score);printf("******************男团总分:%d\n", h[a[i]]. mscore);女团总printf("****************** 分:%d\n", h[a[i]]. wscore);printf("\n");}break;}scanf&sign);printf("\n");}while(sign二二1);void chaxun()int choice;int i, j, k, s;printf ("\n*****l:按学校编号查询\n");printf ("\n*****2:按项目编号查询\n");printf (,z\n*****请选择查询方式:");scanf &choice);switch(choice){case 1:do{printf C要查询的学校编号:〃);scanf&i);if((i>n)||(i<=0))printf C错误:这个学校没有参加此次运动会!\n〃);else{printf ("******************要查询的项目编号:”);scanf&j); 辻(j>m+wi Ij==0)printf ("******************此次运动会没有这个项目******************\n");else{printf (“这个项目取前%d名,该学校的成绩如下:\n", h[0]. c[j-l]. top);for(k=0;k<5;k++)if(h[i-1]. cEj~l]. range[k]!=0)printf (〃名次:%d\n", h[i~l]. c[j~l]. range Ek]);}}printf (z/是否继续操作(1/0) :〃);scanf &s);printf("\n");}while(s==l);break;case 2:do{printf C要查询的项目编号:〃);scanf &s);if(s>m+w Is==0)printf (〃此次运动会不包括这个项目\n〃);else{printf (z/该项目取前%d名,取得名次的学校\n", h[0]. c [s~lL top);for(i=0; i<n;i++)for(j=0;j<5;j++)if (h[il. c[sT]. range[j] !=0)printf C学校编号:%d, 名次:%d\n", h[i]. schoolnum, h[i]. c[s~l]. range[j]);}printf (z/是否继续操作(1/0) :〃);scanf &i);printf("\n");}while(i==l);break;void write ()int i, j, s;FILE *fp;if ((fp=fopen (z,sportsdata 结果.txt", "a+"))二二NULL){printf C不能打开文件\n");exit (1);}fputs (“学校编号学校总分男子总分女子总分fp);fputs("\n",fp);for(i=0;i<n;i++){fprintf (fp,,,%2d\t\t schoolnum);fprintf(fp, "%2d\t\t",h[i].score);fprintf (fp,,,%2d\t\t,/, h[i]. mscore);fprintf (fp, "%2d ", h[i]. wscore);}fclose (fp);void read (){FILE *fp;int i, j, s;if((fp二fopen("〃,〃r〃))二二NULL){printf(z/文件不存在,不能打开文件!\n〃); exit ⑴;}for(i=0;i<n;i++){fscanf (fp, ,&h[i]. schoolnum);[j]. itemnum);f scanf (fp, &h[i]・ c [ j]・ top);[j]・ range [s]);入信息....................... ;printf("\n\n 2・读取信息曲##\n〃);printf("\n\n nunn3・显不信息unnn\n f);printf("\n\n nunn.............. 4. 查询信息曲##\n〃);printf("\n\n nnnn.............. 5. 退出程序nnnn\n f);pr intf ************* ** ********** ******** **** ******** **** *** **** *******聊#\n〃);printf(〃\n\n请根据提示选择操作!:〃);scanf&choice);if (choice==l)flagl=0;else辻((fphopenC〃,〃:r〃))!=:NULL )flag2-0;else{system("cls");printfC没有信息,请你录入信息!\n〃);}}while(flagl&&flag2);switch(choice){case 1:printf ("\n二二二二二二二二二二请输入信息二二二二二二二二\n");input ();write ();printf ("==========信息己存入档=====〃);main ();case 2:read();write;break;case 3:printf (〃二二二二二二二二二二二输出信息二二二二二二二二二二\n");if (flagl)read();out put ();main ();case 4:pri ntf (===========ift] ==========\n);if(flagl)read ();chaxun ();main ();case 5:printf (,z\n 退出系统!谢谢使用!\n\n") ; exit (0);default:printf ("输入错误! \n") ; exit (0);}六主要知识点面向过程程序设计方法界面制作,switch的应用。

相关主题