C语言课程设计报告—校际运动会管理系统_第1页
C语言课程设计报告—校际运动会管理系统_第2页
C语言课程设计报告—校际运动会管理系统_第3页
C语言课程设计报告—校际运动会管理系统_第4页
C语言课程设计报告—校际运动会管理系统_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、校际运动会管理系统C语言课程设计校际运动会管理系统姓名:候姣姣学号:20071000233班级序号:05507202指导老师:刘文中C语言程序设计报告书-候姣姣 2007100023305507202一、C语言程序设计的目的巩固已学习的内容,复习程序设计和上机调试的基本方法方法。通过学习一个综合程序的设计与编写,使学生能够在较短的时间内掌握综合程序设计的基本步骤和方法。通过学习课本上的习题,举一反三,学会构建程序的柜架以及部分常用的算法代码的收发室。在加强的基础上,动手两个程序的完整设计与编写。二、课程设计报告正文(一八题目(1)信息初始化,输入:N-参赛学校总数,M-男子竞赛项目数, W-女

2、子竞赛项目数;各项目名次取法有以下几种:1取前5名:第1名得分7,第2名得分5,第3名得分3,第4名得分2,第5名得 分1.2取前3名:第1名得分5,第2名得分3,第3名得分2.3用户自定义:各名次权值由用户指定。(2 )提醒用户填写比赛结果,输入各项目获奖运动员的信息。(3)所有信息记录完毕后,用户可以查询各个学校的比赛成绩,生成团体总分报表,查看 参赛学校信息和比赛项目信息等。提示(1 )总体设计:系统设计为信息输入模块、比赛结果录入模块和查询模块三个模块。(2)数据结构采用结构体数组,包括学校、项目、运动员三个结构体。比如学校结构体成 员包括学校校名、竞赛项目、得分项目结构体成员包括项目

3、名、权值。(二)题目的总体要求是要建立三个模块:信息输入模块、比赛结果录入模块以及查询模块。在建立完之后,要求该程序能够在用户将各种必要的信息记录之后,用户可以查询所有学校的比赛成绩,而且也可以生成团体总分表,查看参赛学校信息和比赛项目信息等一切 录入的信息,为此,要示编程人员能通过一些具体的程序将以上的功能加以实现。在建立三个模块的大前提下,我们将采用结构体,循环体,指针和各种函数来实现这种功能,在数据结构体中,要采用结构体数组,其中包括学校、项目、运动员三个结构体。学校结构体成员包括学校校名、竞赛项目、得分项目结构体成员包括项目名、权值。(1) 在此程序中,包括几个头文件:mainfile

4、.h; dos.h; conio.h; momery.h;接下来,定义全局变量,其中包括"参赛学校项目数 N;男子项目数 M ;女子项目数 W;参赛学校g_school;竞赛项目g_sport;各名次链表指针 ptrHead,ptrThis,ptrNew;总体设计:系统设计为信息输入模块、比赛结果录入模块和查询模块三个模块。(2)各种结构的分析:静态存储方式:它是指在程序运行期间由系统分配固定的存储空间的方式,全局变量全部存放在静态存储区中,在程序开始执行时给全局变量分配存储区,程序执行完毕就释放,在程序执行过程中它们占据固定的存储单元,而不是动态地进行分配和释放。用static声明

5、局部变量:使用该变量可以使局部变量的值在函数调用结束后不消失而保留原值,这即为静态局部变量的特点。静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放。对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值, 以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。如在定义局部变量时不赋初值的话,则对静态局部不说,编译时自动赋初值 0(对数值型变量)或空字符(对HOU第19页2020/8/3字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的。Mallo

6、c函数的作用是在内存的动态存储区中分配一个长度为size的连续空间。此函数的值是一个指向分配域起始地址的指针,如果此函数未能成功地执行,则返回空指针。链表是动态地进行存储分配的一种结构,所谓建立动态链表是指在程序执行过程中从无到有地建立一个链表,即一个一个地开辟结点和输入各结点数据,并建立起前后相链的关系。循环结构是结构程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复 杂程序的基本构造单元。通常用 while、dowhile语句实现循环,最常用的是for语句的循环,夺循环中还有循环的嵌套,它是指一个循环体内又包含另一个完整的循环结构。用语句来实现从循环体内跳出来,即提前结束循环,接

7、着执行循环下面的语句,但break语句不能用于循环语句和 swich语句之外的任何其他语句中。另外一种就是continue语句,它的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判Swich语句是多分支选择语句,它后面括号内的“表达式”,ANSI标准允许它为任何类型。当表达式的值与一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句,每一个case的常量表达式的值必须都不相同;否则就会出现相互矛盾的现象。各个case和default的出现次序不影响执行结

8、果,执行完一个case后面的语句后,流程控制转移到下一一个case继续执行。“ case常量表达式”只是起语句标号作用,并不是在该处进行条件判断。 在执行swich语句时,根据swich后面表达式的值找到匹配的入口标号,就从此标号开始执 行下去,不再进行判断。程序流程图项目名次的取法及每一名次的分值MENU1*1. e nter!2. record!3. search!*choice your nu mber:()二、课程设计体会在此次的C语言的课程设计中,从一开始到最后的结束自己的课程设计报告,我不仅学到了许多有庆这方面的专业知识,更重要的是我学会了如何在拿到一个题目时进行简单的程序分析,并

9、编译出一些相对简单的程序,当然了,对自己编译出的不对的程序,我也能进行一些分析,并对其进行完善。在此次的学习过程中,老师教给了我们很多的东西,从一开始的不懂VC+这种软件,到最后的我们可以进行较熟练的应用它,也许在这过程中,我们无论是学生还是老师都遇到了一些小的困难,但是在我们师生的共同努力下, 我们最终还是克服了它,单从这一点来说,我们就学到了许多的东西,比如teamwork,同学之间的相互帮助以及与老师的配合,都证明了这一点,我相信这是我此次学习C语言程序的最大收获。在我的程序设计的过程中,遇到了很大有难题,特别是在刚拿到我的题目时,头脑中根本没有头绪,更不要说去编译程序了, 当时真的很担

10、心是否可以完成老师布置的任务,但慢慢的在学习的过程中,我开始懂得了一些编译的方法, 就尝试着去编译一些程序,结果还 是很好,最后我编出了我题目的程序,但是在程序的运行过程中,又遇到了新的难题, 那就是我所编的程序中有太多的错误,根本无法进行运行,没办法,只好硬着头皮修改,不过还好,在老师和同学们的帮助下, 我最终将我的程序成功地进行了运行, 在我自己的程序运行 时,心中有一种说不出的高兴,是的,自己这几天的努力总是没有白费。附录:程序源代码ll/*include some head files*/#i nclude"mai nfile.h"#i nclude"do

11、s.h"#i nclude"co ni o.h"#i nclude"memory.h"/*global varia nt defi ne*/ intN,M,W;static Schoolg_school;static Sportg_sport;pPositi onptrHead,ptrThis,ptrNew;/*参赛学校数*/*男子项目数*/*女子项目数*/*参赛学校*/*竞赛项目*/*名次链表指针*/*/*主程序入口*prin tf("n*“);prin tf("n* prin tf("n*欢迎进入校际运动会信息

12、管理系统prin tf("n*prin tf("n*“);*");void mai n()char ch;Bool err=_FALSE;memset (& g_school,0,sizeof(School);memset (& g_sport,0,sizeof(Sport);prin tf("nprin tf("n="); printf("nnnn按“ Q”键退出运行,n其它任意键继续."); ch=toupper(getch();if (ch=Q) exit(0);/*设置参赛学校信息*/if

13、(SetSchooll nfo(&N) GetSchooll nfo();elseprintf(”发生错误,程序将退出"); return;printf("nn按任意健继续.");getch();system("cls");/*设置竞赛项目信息*/err=SetSportI nfo();/*打印竞赛项目信息*/GetSportI nfo();/*填写竞赛结果信息*/SetPosition For All Sports(); system("cls");/*主菜单*/while (1) printf("n*&

14、quot;);prin tf("n*"prin tf("n*键入'q'退出程序*");prin tf("n*键入's'查询学校成绩*");prin tf("n*键入丫'生成报表*");prin tf("n*1! .键入i查看参赛学校);prin tf("n*p 查看竞赛项目丿;prin tf("n*键入'C'刷新屏幕*");prin tf("n*"printf("n*");prin

15、tf("n请输入您的选择: ch=toupper(getch();prin tf("n"); system("cls");switch(ch)");case Q:exit(O); break;case 'R':/*生成报表*/GetReport();break;case 'S':/*打印成绩*/GetScoreBySchool();break;case T:GetSchoolI nfo(); break;case 'P':GetSportI nfo(); break;case C:sys

16、tem("cls");break;default:printf("n请键入一个正确的选择 ");return;/*/*/男子;1:女子*/)M) /*设置竞赛项目总数/*/Bool SetFMSportTotalNum(int* pnTotalNmOfFMSprt,int type/*0: if (pn TotalNmOfFMSprt=NULL) return _FALSE;system("cls");printf("n");if (type=0) /* 男子 */printf("n请输入男子竞赛项目总数

17、:”);sca nf("%d",p nTotaINmOfFMSprt);if (*p nTotalNmOfFMSprt<=0|*p nTotalNmOfFMSprt>MAX_ printf("n学校总数必须大于 0小于%d",MAX_M); return _FALSE;elsereturn _TRUE;else/* 女子 */printf("n请输入女子竞赛项目总数:”);sca nf("%d",p nTotaINmOfFMSprt);if (*p nTotalNmOfFMSprt<=0|*p nTotal

18、NmOfFMSprt>MAX_W) printf("n学校总数必须大于0小于%d",MAX_W);return _FALSE;elsereturn _TRUE;*/*设置某项目名次的取法及每一名次的分值*Bool SetScoreType(intn/* 项目编号-1*/)char ch;Bool ret=_FALSE;Bool err=_FALSE;int totalPrv,i,power;do system("cls");printf("n请选择编号为%d的竞赛项目取名次类型n(0:取前5名;1:取前3名;2:用户自定义):"

19、,n+1);ch=toupper(getch();prin tf("n");switch(ch) case '0':/*取前 5 名 */g_sport.sport In foArray n .scrTyp=_FIVE;g_sport.sport In foArray n .scrl nfo.total=5; if(g_sport.sport In foArray n .scrl nfo.power=(i nt*)malloc(sizeof( in t)*5)=NULL) prin tf("n memory err");return _F

20、ALSE;g_sport.sport In foArray n .scrl nfo.power0=7; g_sport.sport In foArray n .scrl nfo.power1=5; g_sport.sport In foArray n .scrl nfo.power2=3; g_sport.sport In foArray n .scrl nfo.power3=2; g_sport.sport In foArray n .scrl nfo.power4=1;ret=_TRUE; break;case '1':/*取前 3 名 */g_sport.sport In

21、 foArray n .scrTyp=_THREE;g_sport.sport In foArray n .scrl nfo.total=3;if(g_sport.sport In foArray n .scrl nfo.power=(i nt*)malloc(sizeof( in t)*3)=NULL) prin tf("n memory err");return _FALSE;g_sport.sport In foArray n .scrl nfo.power0=5;g_sport.sport In foArray n .scrl nfo.power1=3;g_spor

22、t.sport In foArray n .scrl nfo.power2=2;ret=_TRUE;break;case 2:/*用户自定义类型*/g_sport.sportl nfoArray n.scrTyp=_CUSTOM;do printf("n请输入本项目取前多少名:");scan f("%d", &totalPrv);if (totalPrv<=0) printf("n输入有误。只能大于0");elseerr=_TRUE; while(err=_FALSE);g_sport.sport In foArray

23、n .scrl nfo.total=totalPrv;if(g_sport.sportlnfoArrayn.scrlnfo.power=(int*)malloc(sizeof(int)*totalPrv)=NULL) prin tf("n memory err");return _FALSE;for(i=0;i<totalPrv;i+); ("*p nTotalNmOfSch<=0|*p nTotaINmOfSch");if scan f("%d",p nTotaINmOfSch);printf("n请输入参加运

24、动会的学校总数:?”);?););printf("n",system("cls"); (ret="=_FALSE") while _FALSE;return (p nTotalNmOfSch="=NULL") ret="_TRUE"Bool pn TotalNmOfSch)SetSchoolTotalNum(int* *设置学校总数 _TRUE; SetScoreType(i);g_sport.sportl nfoArrayi.sportNameMAXLENGTH-1="0"

25、sea nf("%s",g_sport.sport In foArrayi.sportName);printf("n请输入编号为%d的竞赛项目名称:",i+1);*项目名称 * g_sport.sportInfoArrayi.sprtTyp="_MAN;"else (i+1<="M)"*项目类型:男子或女子项目*g_sport.sportInfoArrayi.sportNum="i+1;/* 项目编号 */"for(i="0;i<g_sport. nTotalNmOfFSp

26、rt+g_sport. nTotalNmOfMSprt;i+)"*女子项目总数 * g_sport.nTotalNmOfFSprt="W;"while(err="=_FALSE);" )err="_FALSE;"do * 男子项目总数 * g_sport.nTotalNmOfMSprt="M;" i="0;"int SetSportlnfo() 设置竞赛项目信息ret; while(ret="=_FALSE);"printf("n错误的选择!")

27、; *错误的输入* default: break;g_sport.sport In foArra yn .scrl nfo.poweri="power;"else printf("n 输入有误。只能大于0"); (power<="0)"scan f("%d",&power);printf("n请输入该项目第%d名的分值:",i+1);>MAX_N) printf("n学校总数必须大于0小于%dn",MAX_N);printf("nn按任意健继续&

28、quot;);getch(); ret=_FALSE;elseret=_TRUE;return _TRUE;*/未*/*填充参赛学校信息*Bool SetSchoolI nfo(i nt* pn TotalNmOfSch)int i=0;if (!SetSchoolTotalNum(p nTotaINmOfSch) prin tf("nerr!");return _FALSE;elseg_school. nTotalNmOfSch=*p nTotaINmOfSch;for(i=0;i<G_SCHOOL.NTOTALNMOFSCH;i+) if printf(?n wh

29、ile returnBool* *_TRUE; ; for(i="0;i<g_school.nTotalNmOfSch;i+)" err="_FALSE;" i="0;" int else (ptrThis- ptrThis="ptrHead;"ptrHead="ptrThis=ptrNew;"(ptrHead="=(pPositio n)NULL)"ptrNew="(pPosition)malloc(LEN);"printf(?n 填写项目 %d

30、的比赛结果?,sportNum+1); ?);)* 项目编号-1* sportNum SetPositionForOneSport(int void * 为某个竞赛项目设定比赛结果信息 校名:s?,g_school.schlnfoArrayi.schoolName); printf(? printf(?n 学校编 号: d?,g_school.schlnfoArrayi.SchoolNum);printfn 共有 d 个学校参赛?,g_school.nTotaINmOfSch); GetSchoolInfo() 打印 参赛学 校信息 *截断多 余字符* g_school.schI nfoArr

31、ayi.schoolNameMAXLENGTH-1="0"scanf(?%s?,g_school.schlnfoArrayi.schoolName);printf(?n 请输入 编号为 %d 的 学校名称:?,i+1); g_school.schInfoArrayi.SchoolNum="i+1;">ptrNext!=(pPosition)NULL)ptrThis=ptrThis->ptrNext;ptrThis->ptrNext=ptrNew; ptrThis=ptrNew;/*项目编号*/ptrThis->sportNum=s

32、portNum+1;printf("n输入获得第%d名的学生信息”,i+1);/*姓名*/printf("n 姓名:");sca nf("%s",ptrThis->n ame);/*学校编号*/检查编号合法性do printf("n 学校编号:");scan f("%d",&ptrThis->schoolNum);if (ptrThis->schoolNum<=0|ptrThis->schoolNum>g_school. nTotaINmOfSch)prin t

33、f("n 学校编号必须大于 0 小于等 于 %d",g_school. nTotaINmOfSch);err=_FALSE;elseerr=_TRUE; while(err=_FALSE);/*名次*/ptrThis->score=i+1;ptrThis->ptrNext=(pPositio n)NULL;/*/*填充所有竞赛项目结果信息*/*/void SetPositio nForAllSports()int i=0;for(i=0;i<G_SPORT.NTOTALNMOFFSPRT+G_SPORT.NTOTALNMOFMSPRT;l+)if*retu

34、rn*system(?cls?);break;) :?); return;sch num;(in t)-1;for(i="0;i<g_sport. nTotalNmOfFSprt+g_sport. nTotalNmOfMSprt;i+)"i="0;" intsportNum void (sch num sca nf(?%d?, &sch nu m); prin tf(?n 请输入您想查询的学校编号 printf(?n 没有学校参加比赛?); (g_school.nTotalNmOfSch<="0)"* 学校编号 *

35、GetScoreBySchool()按学校打印成绩g_sport.sportInfoArrayi.scrlnfo.powerscore-1;(i="=g_sport. nTotalNmOfFSprt+g_sport. nTotalNmOfMSprt)" (sportNum="=g_sport.sportInfoArrayi.sportNum)" *名次 * score ,int * 项目编号 * GetPower(int*获取指定竞赛项目的某一名次所对应的分值g_sport.sportl nfoArrayi.sportName; NULL;sportNu

36、m) GetSportName(i nt char* 根据竞赛项 目 编号获得对应项 目 名称 SetPositio nForO neSport(i);>g_school. nTotalNmOfSch|sch nu m<=0)printf("n 学校编号必须大于0 小于等于 d",g_school.nTotaINmOfSch);return;if(ptrHead=(pPositio n)NULL)printf("n没有比赛结果"); return; ptrThis=ptrHead;%dprin tf("n学 校 编 号:名:%s&q

37、uot;,schnum,g_school.schlnfoArrayschnum-1.schoolName);");h姓名得分”);prin tf("nn项目号项目名称名次prin tf("n do if (ptrThis->schoolNum=sch num)printf("n%5d",ptrThis->sportNum);/*项目号 */printf("%20s",GetSportName(ptrThis->sportNum);/*项目名称 */printf("%5d",ptrThis

38、->score);/* 名次 */printf("%20s",ptrThis->name);/* 姓名 */prin tf("%5d",GetPower(ptrThis->sportNum,ptrThis->score);ptrThis=ptrThis->ptrNext; while(ptrThis!=(pPositio n)NULL);*/*/*生成报表/*/void GetReport()int i,j,manTotal=0,womTotal=0,Total=0;/* 男子团体总分,女子团体总分,团体总分*/if(ptr

39、Head=(pPositio n)NULL)printf("n没有比赛结果"); return;ptrThis=ptrHead;printf("n团体总分报表:");prin tf("nn学校编号学校校名男子团体总分女子团体总分团体总分");printf("n ");for(i=0;i<G_SCHOOL.NTOTALNMOFSCH;i+) do ptrThis="ptrHead;" if(ptrThis- manTotal="0;womTotal=0;Total=0;"

40、>schoolNum=g_school.schInfoArrayi.SchoolNum)/*同一学校*/for(j=0;j<G_SPORT.NTOTALNMOFFSPRT+G_SPORT.NTOTALNMOFMSPRT;J+)if (ptrThis->sportNum=g_sport.sportInfoArrayj.sportNum) /*某一竞赛项目 */if (g_sport.sport In foArrayj.sprtTyp=_MAN) man Total+=g_sport.sport In foArrayj.scrI nfo.powerptrThis->score-1; elsewomTotal+=g_sport.sport In foArrayj.scrI nfo.powerptrThis->score-1; ptrThis=ptrThis->ptrNext; while(ptrThis!=(pPositio n)NULL);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论