1、一、 课程设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程C 语言教程的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。(3)利用所学知识,开发小型应用系统,掌握运用 C 语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思
2、路,并给出相应的数学模型。(5)掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法。(6)熟练掌握 C 语言的基本语法,灵活运用各种数据类型。(7)进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。二、 课程设计名称及内容课程设计名称:运动会比赛计分系统设计内容:设计一个运动会比赛计分系统,该系统要求对运动会比赛得分进行管理和维护。三、 任务和要求要求:初始化输入:N-参赛学校总数,M-男子竞赛项目数,W-女子竞赛项目数各项目名次取法有如下几种:(1) 取前 5 名:第一名得分 7 分,第二名得分 5,第三名得分 3,第四名得分2,第五
3、名得分 1;(2) 取前 3 名:第一名得分 5,第二名得分 3,第三名得分 2;(3) 用户自定义:各名次权值由用户指定。2四、 设计方案提示(1)界面系统以菜单方式工作(2)输入数据并存入文件使用到结构体变量和动态链表,由程序提醒用户填写比赛结果,输入各项目获奖运动员信息。对输入的信息进行合法性判断,直到输入正确为止。都输入完成后,调用写文件函数对指定的文件进行写操作,把输入的信息写入到文件中。(3)显示所有记录将文件中的所有记录以表格的形式输出。如果文件未打开会出现“文件打开失败!按任意键返回.” ,关闭文件。(4) 查询所有信息记录完毕后,用户可以查询各个学校的比赛成绩,生成团体总分报
4、表,查看参赛学校信息和比赛项目信息等。二:算法设计:信息输入模块、比赛结果录入模块以及查询模 题目的总体要求是要建立三个模块:信息输入模块、 建立三个模块 块。 在建立完之后,要求该程序能够在用户将各种必要的信息记录之后,用户可以查询所 有学校的比赛成绩, 而且也可以生成团体总分表, 查看参赛学校信息和比赛项目信息等一切 录入的信息,为此,要示编程人员能通过一些具体的程序将以上的功能加以实现。 在建立三个模块的大前提下,我们将采用结构体,循环体,指针和各种函数来实现这 种功能,在数据结构体中,要采用结构体数组,其中包括学校、项目、运动员三个结构体。 学校结构体成员包括学校校名、竞赛项目、得分项
5、目结构体成员包括项目名、权值。 (1)在此程序中,包括几个头文件:mainfile.h; dos.h; conio.h; momery.h; 接下来,定义全 ) 局变量,其中包括 “参赛学校项目数 N;男子项目数 M;女子项目数 W;参赛学 校 g_school; 竞赛项目 g_sport; 各名次链表指针 3ptrHead,ptrThis,ptrNew; 总体设计:系统设计为信息输入模块、比赛结果录入模块和查询模块三个模块。 总体设计:系统设计为信息输入模块、比赛结果录入模块和查询模块三个模块。(2)各种结构的分析: )各种结构的分析: 静态存储方式: 它是指在程序运行期间由系统分配固定的存
6、储空间的方式, 全局变量全部存 静态存储方式: 放在静态存储区中,在程序开始执行时给全局变量分配存储区,程序执行完毕就释放,在程 序执行过程中它们占据固定的存储单元,而不是动态地进行分配和释放。用 static 声明局部变量:使用该变量可以使局部变量的值在函数调用结束后不消失而保留原 值,这即为静态局部变量的特点。 静态局部变量属于静态存储类别,在静态存储区内分配存储单元, 在程序整个运行期间都不 释放。对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值, 以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。 如在定义局部变 量时不赋初值的话, 则对静态局部
7、不说, 编译时自动赋初值 0 (对数值型变量) 或空字符 总体设计 信息输入模块 比赛结果录入模块 查询模块 设置参赛信息 设置竞赛项目总数 主菜单 设置竞赛项目信息 设置项目名次取法 生成报表 打印竞赛项目信息 填充参赛信息 请输入您的选择 开始。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。虽然静态局部 变量在函数调用结束后仍然存在,但其他函数是不能引用它的。 Malloc 函数 函数的作用是在内存的动态存储区中分配一个长度为 size 的连续空间。此函数的值 是一个指向分配域起始地址的指针,如果此函数未能成功地执行,则返回空指针。 链表是动态地进行存储分配的一种结构, 所谓建立
8、动态链表是指在程序执行过程中从无到有 地建立一个链表,即一个一个地开辟结点和输入各结点数据,并建立起前后相链的关4系。 循环结构是结构程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复 循环结构 杂程序的基本构造单元。通常用 while、dowhile 语句实现循环,最常用的是 for 语句的循 环,夺循环中还有循环的嵌套,它是指一个循环体内又包含另一个完整的循环结构。用语句 来实现从循环体内跳出来,即提前结束循环,接着执行循环下面的语句,但 break 语句不能 用于循环语句和 swich 语句之外的任何其他语句中。另外一种就是 continue 语句,它的作用 是结束本次循环,
9、即跳过循环体中下面尚未执行的语句, 接着进行下一次是否执行循环的判 定。 Swich 语句 语句是多分支选择语句,它后面括号内的“表达式” ,ANSI 标准允许它为任何类 型。当表达式的值与一个 case 后面的常量表达式的值相等时,就执行此 case 后面的语句, 若所有的 case 中的常量表达式的值都没有与表达式的值匹配的, 就执行 default 后面的语句, 每一个 case 的常量表达式的值必须都不相同;否则就会出现相互矛盾的现象。各个 case 和 default 的出现次序不影响执行结果,执行完一个 case 后面的语句后,流程控制转移到下一 个 case 继续执行。 “cas
10、e 常量表达式 ”只是起语句标号作用,并不是在该处进行条件判断。 在执行 swich 语句时,根据 swich 后面表达式的值找到匹配的入口标号,就从此标号开始执 行下去,不再进行判断程序流程图 开始 请输入您的选择 c s i p q 编号 n=0? i0 4 1 n#include#include#define n 2#define m 1#define w 16typedef structint top; int range5;int mark5; int itemnum;itemnode;typedef structint schoolnum;int score;int mscore;
11、int wscore;itemnode cm+w;headnode;headnode hn;void input()int i,j,k,s;for(i=0;in)|(im+w|j=0)12printf(“*此次运动会没有这个项目*n“);elseprintf(“这个项目取前 %d 名,该学校的成绩如下:n“, h0.cj-1.top);for(k=0;km+w|s=0)printf(“此次运动会不包括这个项目n“);elseprintf(“该项目取前 %d 名,取得名次的学校 n“,h0.cs-1.top);for(i=0; in;i+)for(j=0;j5;j+)if(hi.cs-1.ran
12、gej!=0)printf(“学校编号:%d,名次:%dn“,hi.schoolnum,hi.cs-1.rangej);printf(“是否继续操作(1/0)?:“);scanf(“%d“,13printf(“n“);while(i=1);break;void write()int i,j,s;FILE *fp;if(fp=fopen(“sportsdata 结果.txt“,“a+“)=NULL)printf(“不能打开文件n“);exit(1);fputs(“学校编号 学校总分 男子总分 女子总分 “,fp);fputs(“n“,fp);for(i=0;in;i+)fprintf(fp,“%
13、2dtt “,hi.schoolnum);fprintf(fp,“%2dtt“,hi.score);fprintf(fp,“%2dtt“,hi.mscore);fprintf(fp,“%2d “,hi.wscore);fputs(“n“,fp);fclose(fp); 14void read() FILE *fp;int i,j,s;if(fp=fopen(“sportsdata.txt“,“r“)=NULL)printf(“文件不存在,不能打开文件!n“);exit(1);for(i=0;in;i+)fscanf(fp,“%d“,/ for(j=0;jm+w;j+)/ fscanf(fp,“
14、%d“,fscanf(fp,“%d“,/ for(s=0;s5;s+)/ fscanf(fp,“%d“,/ / fclose(fp); int main()15 FILE *fp;int choice;int flag1=1,flag2=1;system(“cls“);doprintf(“n#*欢迎使用程序*#n“);printf(“n#*校级运动会分数统计系统*#n“);printf(“nn #1.录入信息#n“);printf(“nn #2.读取信息#n“);printf(“nn #3.显示信息#n“);printf(“nn #4.查询信息#n“);printf(“nn #5.退出程序#n
15、“);printf(“n#*#n“);printf(“nn 请根据提示选择操作!:“);scanf(“%d“,if(choice=1)flag1=0;elseif(fp=fopen(“sportsdata.txt“,“r“)!=NULL )flag2=0;elsesystem(“cls“);printf(“没有信息,请你录入信息!n“);16while(flag1switch(choice)case 1:printf(“n=请输入信息=n“);input();write();printf(“=信息已存入档=“);main();case 2:read();write;break;case 3:p
16、rintf(“=输出信息=n“);if(flag1)read();output();main();case 4:printf(“=查询信息=n“);if(flag1)read();chaxun();main();case 5:printf(“n 退出系统!谢谢使用!nn“); exit(0);default:printf(“输入错误!n“); exit(0);六主要知识点 面向过程程序设计方法 界面制作,switch 的应用。 数组或链表的实现与应用。 文件的读写。17七其他程序设计可在 VC+、C+ Builder 环境下进行。八参考资料1 黄明等编著C 语言课程设计北京:电子工业出版社2 郭翠英编著C 语言课程设计案例精编 北京:中国水利水电出版社3 宁正元数据结构(c 语言) 南京:东南大学出版社。2000 年 6 月第 1 版4 严蔚敏等 数据结构(c 语言版) 北京:清华大学出版社,1997 年 4 月第 1版5 谭浩强编著C 程序设计题解与上机指导(第 3 版) 北京:清华大学出版社6 谭浩强编著C 程序设计(第 3 版) 北京:清华大学出版社