c语言课程设计运动会比赛计分系统(含任务书)_c语言课程设计任务书
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)显示所有记录
将文件中的所有记录以表格的形式输出。如果文件未打开会出现“文件打开失败!按任意键返回...”,关闭文件。(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 3
语句的循 环,夺循环中还有循环的嵌套,它是指一个循环体内又包含另一个完整的循环结构。用语句 来实现从循环体内跳出来,即提前结束循环,接着执行循环下面的语句,但 break 语句不能 用于循环语句和 swich 语句之外的任何其他语句中。另外一种就是 continue 语句,它的作用 是结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判 定。Swich 语句 语句是多分支选择语句,它后面括号内的“表达式”,ANSI 标准允许它为任何类 型。当表达式的值与一个 case 后面的常量表达式的值相等时,就执行此 case 后面的语句,若所有的 case 中的常量表达式的值都没有与表达式的值匹配的,就执行 default 后面的语句,每一个 case 的常量表达式的值必须都不相同;否则就会出现相互矛盾的现象。各个 case 和 default 的出现次序不影响执行结果,执行完一个 case 后面的语句后,流程控制转移到下一 个 case 继续执行。“case 常量表达式”只是起语句标号作用,并不是在该处进行条件判断。在执行 swich 语句时,根据 swich 后面表达式的值找到匹配的入口标号,就从此标号开始执 行下去,不再进行判断程序流程图 开始 请输入您的选择 c s i p q 编号 n=0? i0 4 1 n
****************************MENU1******************************* ****** 1.enter!!2.record!!3.search!!******************************************************************************* choice your number:()
二、课程设计体会 在此次的 C 语言的课程设计中,我不仅 学到了许多有庆这方面的专业知识,更重要的是我学会了如何在拿到一个题目时进行简单的 程序分析,并编译出一些相对简单的程序,当然了,对自己编译出的不对的程序,我也能 4
进 行一些分析,并对其进行完善。在此次的学习过程中,老师教给了我们很多的东西,从一开 始的不懂 VC++这种软件,到最后的我们可以进行较熟练的应用它,也许在这过程中,我们 无论是学生还是老师都遇到了一些小的困难,但是在我们师生的共同努力下,我们最终还是 克服了它,单从这一点来说,我们就学到了许多的东西,比如 teamwork,同学之间的相互 帮助以及与老师的配合,都证明了这一点,我相信这是我此次学习 C 语言程序的最大收获。在我的程序设计的过程中,遇到了很大有难题,特别是在刚拿到我的题目时,头脑中 根本没有头绪,更不要说去编译程序了,当时真的很担心是否可以完成老师布置的任务,但 慢慢的在学习的过程中,我开始懂得了一些编译的方法,就尝试着去编译一些程序,结果还 是很好,最后我编出了我题目的程序,但是在程序的运行过程中,又遇到了新的难题,那就 是我所编的程序中有太多的错误,根本无法进行运行,没办法,只好硬着头皮修改,不过还好,在老师和同学们的帮助下,我最终将我的程序成功地进行了运行,在我自己的程序运行 时,心中有一种说不出的高兴,是的,自己这几天的努力总是没有白费。
五.附录:
源代码:
#include #include #include #define n 2 #define m 1 #define w 1 typedef 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 h[n];
void input(){
int i,j,k,s;
for(i=0;i
{
h[i].schoolnum=0;
h[i].score=0;
h[i].mscore=0;
h[i].wscore=0;
}
for(i=0;i
{
printf(“n学 校
编 号:”);
scanf(“%d”,&h[i].schoolnum);
for(j=0;j
{
printf(“n项 目
编 号:”);
scanf(“%d”,&h[i].c[j].itemnum);
printf(“n取前3或前5名:”);
scanf(“%d”,&h[i].c[j].top);
while(h[i].c[j].top!=3&&h[i].c[j].top!=5)
{printf(“n输入错误,请重新输入!:”);
scanf(“%d”,&h[i].c[j].top);break;}
printf(“n获得几个名次:”);6
scanf(“%d”,&k);
for(s=0;s
h[i].c[j].range[s]=0;
for(s=0;s
{ l: printf(“n名
次:”);
scanf(“%d”,&h[i].c[j].range[s]);
if(h[i].c[j].top==3)
switch(h[i].c[j].range[s])
{
case 0:h[i].c[j].mark[s]=0;
break;
case 1:h[i].c[j].mark[s]=5;
break;
case 2:h[i].c[j].mark[s]=3;
break;
case 3:h[i].c[j].mark[s]=2;
break;
default:{puts(“输入错误!请重新输入!”);
goto l;}
}
else
switch(h[i].c[j].range[s])
{
case 0:h[i].c[j].mark[s]=0;
break;
case 1:h[i].c[j].mark[s]=7;
break;
case 2:h[i].c[j].mark[s]=5;
break;
case 3:h[i].c[j].mark[s]=3;
break;
case 4:h[i].c[j].mark[s]=2;
break;
case 5:h[i].c[j].mark[s]=1;
break;
default:{puts(“输入错误!请重新输入!”);
goto l;}
}
h[i].score=h[i].score+h[i].c[j].mark[s];
if(j
h[i].mscore=h[i].mscore+h[i].c[j].mark[s];
else
h[i].wscore=h[i].wscore+h[i].c[j].mark[s];
}
printf(“n”);
}
} }
void output(){
int choice,i,j,t;
int a[n];
int sign;
do
{
printf(“n***************************1.按学校编号****************************n”);
printf(“*****************************2.按学校总分****************************n”);
printf(“*****************************3.按男团总分****************************n”);
printf(“*****************************4.按女团总分****************************n”);
printf(“*****************************请根据提示进行操作!:”);
scanf(“%d”,&choice);
printf(“n”);
switch(choice)
{
case 1:for(i=0;i
{
printf(“n学校编号:%dn”,h[i].schoolnum);
printf(“学校总分:%dn”,h[i].score);
输出
输出
输出
输出
printf(“男团总分:%dn”,h[i].mscore);
printf(“女团总分:%dn”,h[i].wscore);
printf(“n”);
}
break;
case 2:for(i=0;i
a[i]=i;
for(i=0;i
{
for(j=i+1;j
if(h[a[i]].score
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(i=0;i
{
printf(“n学校编号:%dn”,h[a[i]].schoolnum);
printf(“******************学校总分:%dn”,h[a[i]].score);
printf(“******************男团总分:%dn”,h[a[i]].mscore);
printf(“******************女团总分:%dn”,h[a[i]].wscore);
printf(“n”);
}
break;
case 3:for(i=0;i
a[i]=i;
for(i=0;i
{
for(j=i+1;j
if(h[a[i]].mscore
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(i=0;i
{
printf(“n学校编号:%dn”,h[a[i]].schoolnum);
printf(“******************学校总分:%dn”,h[a[i]].score);
printf(“******************男团总分:%dn”,h[a[i]].mscore);
printf(“******************女团总分:%dn”,h[a[i]].wscore);
printf(“n”);
}
break;
case 4:for(i=0;i
a[i]=i;
for(i=0;i
{
for(j=i+1;j
if(h[i].wscore
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(i=0;i
{
printf(“n学校编号:%dn”,h[a[i]].schoolnum);
printf(“******************学校总分:%dn”,h[a[i]].score);
printf(“******************男团总分:%dn”,h[a[i]].mscore);
printf(“******************女团总分:%dn”,h[a[i]].wscore);
printf(“n”);
}
break;
}
printf(“是否继续操作(1/0)?:”);
scanf(“%d”,&sign);
printf(“n”);
}while(sign==1);
}
void chaxun(){
int
choice;
int
i,j,k,s;
printf(“n*****1:按学校编号查询n”);
printf(“n*****2:按项目编号查询n”);
printf(“n*****请选择查询方式:”);
scanf(“%d”,&choice);
switch(choice)
{
case 1:
do
{
printf(“要查询的学校编号:”);
scanf(“%d”,&i);
if((i>n)||(i
printf(“错误:这个学校没有参加此次运动会!n”);
else
{
printf(“******************要查询的项目编号:”);
scanf(“%d”,&j);
if(j>m+w||j==0)
printf(“******************此次运动会没有这个项目******************n”);
else
{
printf(“这个项目取前 %d名,该学校的成绩如下:n”, 11
h[0].c[j-1].top);
for(k=0;k
if(h[i-1].c[j-1].range[k]!=0)
printf(“名次:%dn”,h[i-1].c[j-1].range[k]);
}
}
printf(“是否继续操作(1/0)?:”);
scanf(“%d”,&s);
printf(“n”);
}while(s==1);
break;
case 2:
do
{
printf(“要查询的项目编号:”);
scanf(“%d”,&s);
if(s>m+w||s==0)
printf(“此次运动会不包括这个项目n”);
else
{
printf(“该项目取前 %d名,取得名次的学校n”,h[0].c[s-1].top);
for(i=0;i
for(j=0;j
if(h[i].c[s-1].range[j]!=0)
printf(“
学
校
编
号
:%d,名次:%dn”,h[i].schoolnum,h[i].c[s-1].range[j]);
}
printf(“是否继续操作(1/0)?:”);
scanf(“%d”,&i);
printf(“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;i
{
fprintf(fp,“%2dtt ”,h[i].schoolnum);
fprintf(fp,“%2dtt”,h[i].score);
fprintf(fp,“%2dtt”,h[i].mscore);
fprintf(fp,“%2d ”,h[i].wscore);
fputs(“n”,fp);
}
fclose(fp);}
女子总分
void read()
{
FILE *fp;
int i,j,s;
if((fp=fopen(“sportsdata.txt”,“r”))==NULL)
{
printf(“文件不存在,不能打开文件!n”);
exit(1);
}
for(i=0;i
{
fscanf(fp,“%d”,&h[i].schoolnum);
// for(j=0;j
// {
fscanf(fp,“%d”,&h[i].c[j].itemnum);
fscanf(fp,“%d”,&h[i].c[j].top);
// for(s=0;s
// {
fscanf(fp,“%d”,&h[i].c[j].range[s]);
// }
// }
}
fclose(fp);}
int main(){
FILE *fp;
int choice;
int flag1=1,flag2=1;
system(“cls”);
do
{
printf(“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”);
printf(“n####*************************************************************####n”);
printf(“nn请根据提示选择操作!:”);
scanf(“%d”,&choice);
if(choice==1)
flag1=0;
else
if((fp=fopen(“sportsdata.txt”,“r”))!=NULL)
flag2=0;
else
{
system(“cls”);
printf(“没有信息,请你录入信息!n”);
}
}while(flag1&&flag2);
switch(choice)
{
case 1:
欢迎使用程序
printf(“n==========请输入信息========n”);
input();
write();printf(“==========信息已存入档=========”);
main();
case 2:
read();
write;
break;
case 3:
printf(“===========输出信息==========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的应用。 数组或链表的实现与应用。 文件的读写。
七.其他
程序设计可在VC++、C++ Builder环境下进行。八.参考资料
[1] 黄明等编著《C语言课程设计》北京:电子工业出版社
[2] 郭翠英编著《C语言课程设计案例精编》北京:中国水利水电出版社 [3] 宁正元《数据结构(c语言)》 南京:东南大学出版社。2000年6月第1版 [4] 严蔚敏等 《数据结构(c语言版)》 北京:清华大学出版社,1997年4月第1版 [5] 谭浩强编著《C程序设计题解与上机指导(第3版)》北京:清华大学出版社 [6] 谭浩强编著《C程序设计(第3版)》北京:清华大学出版社