C语言课程设计_运动会管理系统
本次课程设计利用《C语言程序设计》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。
要求
1、对系统进行功能需求分析
2、设计合理的数据结构和系统框架
3、编程简练,程序功能齐全,能正确运行
4、说明书、流程图要清楚
5、课题完成后必须按要求提交课程设计报告
任务
设计一个运动会管理系统,用于管理比赛时体操、跳水、滑冰等赛事裁判员对赛事的评分。假设只有这3场比赛event,每场有5个裁判评分。
实现功能
1)能够提供一个程序界面对运动员的基本资料进行输入、删除、修改和查询等,基本资料应保存在文件中。
2)能够输入、修改、查询某项比赛event的比赛时间,3项比赛的资料保存在文件中。
3) 比赛项目分男子组和女子组,每个运动员的总分计算规则是:去掉最高分、去掉最低分求平均值。
4) 提供界面让工作人员输入每场比赛的所有运动员的每个裁判的分数,能查询某场比赛所有运动员的最后得分
5)评分的资料保存在score.txt中,包含的数据项有:所属的学校、运动员编号、得分1、得分2、得分3、得分4、得分5、总分、平均分。
概要设计
模块说明
程序中一共包括了三个大模块,分别是:运动员信息模块、比赛时间模块、裁判分数模块,每个模块根据不同要求分成3—5个小模块,分别是:输入模块、修改模块、查询模块、删除模块、退出系统模块。这几个模块中输入、查找和修改都是独立分开作为子函数的,另外的则是作为switch语句中的一部分,通过switch语句,把模块联系了起来,同时,为了实现多次使用这几个模块,就在switch语句外加了do-while循环。
以下是模块结构图:
详细设计
源程序代码
-
-
-
-
-
typedef struct Athlete /*定义运动员管理信息的结构体。typedef用来指定新的类型名来代替已有的类型名*/
-
{
-
char name[10];
-
int sex;
-
char school[10];
-
int number;
-
char class1[10];
-
}athtype;
-
typedef struct Athlete1 /*定义比赛时间管理的结构体*/
-
{
-
char name[10];
-
int event;
-
int score[5];
-
int sex;
-
int tp;
-
float aver;
-
}score;
-
typedef struct Athletenode /*使用链表录入运动员数据athtype data*/
-
{
-
athtype data;
-
struct Athletenode *next;
-
}Listnode;
-
typedef struct Event /*定义裁判分数管理的结构体*/
-
{
-
char name[10];
-
char time[20];
-
int number;
-
}event;
-
-
void Print() /*输入运动员的信息*/
-
{
-
FILE *fp1;
-
int i,n;
-
if((fp1=fopen("d:\\校运动会管理系统\\information.txt","ab "))==NULL) /*ab为了读写打开一个二进制文件*/
-
{
-
printf("不能建立!");
-
exit(0);
-
}
-
athtype ah,ah1;
-
fseek(fp1,0,2); /*fseek用于二进制打开的文件,移除文件读写指针的位置,fp1为一打开的文件指针,偏移量为0,2将文件名指向末尾*/
-
n=ftell(fp1)/sizeof(athtype);/*ftell返回文件fp1的当前位置,并赋值给n*/
-
rewind(fp1); /*功能是将文件内部的指针重新指向一个流的开头*/
-
printf("输入运动员信息:");
-
scanf("%s %d %s %d %s",ah.name,&ah.sex,ah.school,&ah.number,ah.class1);
-
for(i=0;i<n;i )
-
{
-
fread(&ah1,sizeof(athtype),1,fp1);
-
if(ah1.number==ah.number) break;
-
}
-
if(i<n)
-
printf("编号存在!");
-
else
-
{
-
fseek(fp1,0,2);
-
fwrite(&ah,sizeof(athtype),1,fp1); /*指向稳健写入一个数据块*/
-
}
-
fclose(fp1);
-
printf("输入完毕!\n");
-
}
-
-
void Delete() /*删除运动员信息*/
-
{
-
FILE *fp1;
-
Listnode *head,*r,*s,*p,*p1;
-
int i,n,d;
-
if((fp1=fopen("d:\\校运动会管理系统\\information.txt","rb"))==NULL)
-
{
-
printf("不能建立!");
-
exit(1);
-
}
-
athtype ah;
-
fseek(fp1,0,2);
-
n=ftell(fp1)/sizeof(athtype);
-
rewind(fp1);
-
head=(Listnode *)malloc(sizeof(Listnode)); /*(Listnode *)为强制转换符,sizeof(Listnode)为获取L的占据的空间的大小*/
-
r=head;
-
for(i=0;i<n;i )
-
{
-
fread(&ah,sizeof(athtype),1,fp1);
-
s=(Listnode *)malloc(sizeof(Listnode));
-
s->data=ah;
-
r->next=s;
-
r=s;
-
}
-
r->next=NULL;
-
fclose(fp1);
-
printf("输入删除运动员编号:");
-
scanf("%d",&d);
-
p=head;
-
p1=head->next;
-
while(p1!=NULL)
-
{
-
if(p1->data.number==d) break;
-
p=p1;
-
p1=p1->next;
-
}
-
if(p1!=NULL)
-
{
-
p->next=p1->next;
-
free(p1);
-
fp1=fopen("d:\\校运动会管理系统\\information.txt","wb");/*为了输出数据,打开一个二进制文件*/
-
p=head->next;
-
while(p!=NULL)
-
{
-
fwrite(&(p->data),sizeof(athtype),1,fp1);
-
p=p->next;
-
}
-
fclose(fp1);
-
printf("删除完成!\n");
-
}
-
else printf("未找到!\n");
-
}
-
void Modification() /*修改运动员的信息*/
-
{
-
FILE *fp1;
-
int i,n,d;
-
if((fp1=fopen("d:\\校运动会管理信息\\information.txt","rb "))==NULL)
-
{
-
printf("不能建立!");
-
exit(2);
-
}
-
athtype ah,ah1;
-
fseek(fp1,0,2);
-
n=ftell(fp1)/sizeof(athtype);
-
rewind(fp1);
-
printf("输入修改运动员编号:");
-
scanf("%d",&d);
-
for(i=0;i<n;i )
-
{
-
fread(&ah1,sizeof(athtype),1,fp1);
-
if(ah1.number==d) break;
-
}
-
if(i<n)
-
{
-
printf("输入新信息(姓名 性别(0是男,1是女)学校 班级)\n");
-
scanf("%s %d %s %s",ah.name,&ah.sex,ah.school,ah.class1);
-
ah.number=ah1.number;
-
fseek(fp1,-1*(long)sizeof(athtype),1);
-
fwrite(&ah,sizeof(athtype),1,fp1);
-
printf("修改成功!\n");
-
}
-
else
-
printf("未找到!\n");
-
fclose(fp1);
-
}
-
-
void Inquire() /*查询运动员的信息*/
-
{
-
FILE *fp1;
-
int i,d,n;
-
athtype ah1;
-
if((fp1=fopen("d:\\校运动会管理系统\\information.txt","rb"))==NULL) /*为了输入数据,打开一个二进制文件*/
-
{
-
printf("不能建立!");
-
exit(3);
-
}
-
fseek(fp1,0,2);
-
n=ftell(fp1)/sizeof(athtype);
-
rewind(fp1);
-
printf("输入运动员编号:");
-
scanf("%d",&d);
-
for(i=0;i<n;i )
-
{
-
fread(&ah1,sizeof(athtype),1,fp1);
-
if(ah1.number==d) break;
-
}
-
if(i<n)
-
{
-
printf("姓名 性别(0是男,1是女)学校 编号 班级\n");
-
printf("=============================================================\n");
-
printf("%s %d %s %d %s\n",ah1.name,ah1.sex,ah1.school,ah1.number,ah1.class1);
-
}
-
else
-
printf("未找到!\n");
-
fclose(fp1);
-
}
-
void Information() /*进入运动员信息界面的选择*/
-
{
-
int a;
-
do
-
{
-
printf("请选择 1-输入,2-删除,3-修改,4-查询,0-退出:");
-
scanf("%d",&a);
-
switch(a)
-
{
-
case 1:Print();break;
-
case 2:Delete();break;
-
case 3:Modification();break;
-
case 4:Inquire();break;
-
}
-
}while(a!=0);
-
system("cls"); /*清屏*/
-
}
-
-
void Print1() /*输入比赛时间*/
-
{
-
FILE *fp2;
-
event en;
-
if((fp2=fopen("d:\\校运动会管理系统\\time.txt","ab "))==NULL) /*为了读写打开一个二进制文件*/
-
{
-
printf("不能建立!");
-
exit(4);
-
}
-
printf("请输入比赛编号,名称和时间:(1.体操 2.跳水 3.滑冰 )");
-
scanf("%d%s%s",&en.number,en.name,en.time);
-
fwrite(&en,sizeof(event),1,fp2);
-
printf("输入完毕!\n");
-
fclose(fp2);
-
}
-
void Modification1() /*修改比赛时间*/
-
{
-
FILE *fp2;
-
event en,en1;
-
int a,n,i;
-
if((fp2=fopen("d:\\校运动会管理系统\\time.txt","rb "))==NULL) /*为了读和写,打开一个二进制文件*/
-
{
-
printf("不能建立!");
-
exit(5);
-
}
-
printf("请输入需要修改比赛编号(1.体操 2.跳水 3.滑冰 )");
-
scanf("%d",&a);
-
fseek(fp2,0,2);
-
n=ftell(fp2)/sizeof(event);
-
rewind(fp2);
-
for(i=0;i<n;i )
-
{
-
fread(&en,sizeof(event),1,fp2);
-
if(en.number==a) break;
-
}
-
if(i<n)
-
{
-
printf("输入新的比赛时间:\n");
-
scanf("%s",en1.time);
-
strcpy(en1.name,en.name);
-
en1.number=en.number;
-
fseek(fp2,-1*(long)sizeof(event),1);
-
fwrite(&en1,sizeof(event),1,fp2);
-
printf("修改成功!\n");
-
}
-
else
-
printf("未找到!\n");
-
fclose(fp2);
-
}
-
-
void Inquire1() /*查询比赛时间*/
-
{
-
FILE *fp2;
-
event en;
-
if((fp2=fopen("d:\\校运动会管理系统\\time.txt","rb"))==NULL)
-
{
-
printf("不能建立!");
-
exit(6);
-
}
-
printf("* * * * * * 时间表 * * * * * *\n");
-
while(fread(&en,sizeof(event),1,fp2)>0)
-
{
-
printf("%s %s",en.name,en.time);
-
printf("\n");
-
}
-
}
-
-
void Time() /*进入比赛时间界面的选择*/
-
{
-
int a;
-
do
-
{
-
printf("请选择 1-输入,2-修改,3-查询,0-退出:");
-
scanf("%d",&a);
-
switch(a)
-
{
-
case 1:Print1();break;
-
case 2:Modification1();break;
-
case 3:Inquire1();break;
-
}
-
}while(a!=0);
-
system("cls");
-
}
-
void Print2() /*裁判信息管理*/
-
{
-
score athe;
-
int i,j,cnt=0;
-
athtype athe1;
-
int tmp;
-
FILE *fp1,*fp2,*fp3;
-
if((fp2=fopen("d:\\校运动会管理系统\\score.txt","ab"))==NULL) /*向二进制文件尾添加数据*/
-
{
-
printf("不能建立!");
-
exit(7);
-
}
-
if((fp1=fopen("d:\\校运动会管理系统\\information.txt","rb"))==NULL)
-
{
-
printf("不能建立!");
-
exit(8);
-
}
-
if((fp3=fopen("d:\\校运动会管理系统\\score.txt","a"))==NULL) /*向文本文件尾添加数据*/
-
{
-
printf("不能建立!");
-
exit(9);
-
}
-
printf("请输入比赛名称:(1.体操 2.跳水 3.滑冰 )");
-
scanf("%d",&athe.event);
-
fprintf(fp3,"%d ",athe.event);
-
fputs("(1.体操 2.跳水 3.滑冰 )\n",fp3);
-
fputs(" 运动员编号 学校名称 裁判得分 总分 平均分\n",fp3);
-
while(fread(&athe1,sizeof(athtype),1,fp1)>0)
-
{
-
strcpy(athe.name,athe1.name);
-
athe.sex=athe1.sex;
-
fprintf(fp3," %d ",athe1.number);
-
fprintf(fp3," %s ",athe1.school);
-
printf("运动员%s\n",athe.name);
-
printf("请依次输入五个裁判评分:");
-
for(i=0;i<5;i ) /*冒泡法进行排序*/
-
{
-
scanf("%d",&athe.score[i]);
-
fprintf(fp3," %d ",athe.score[i]);
-
}
-
for(i=0;i<4;i )
-
for(j=3;j>=i;j--)
-
if(athe.score[j 1]<athe.score[j])
-
{
-
tmp=athe.score[j];
-
athe.score[j]=athe.score[j 1];
-
athe.score[j 1]=tmp;
-
}
-
athe.tp=athe.score[1] athe.score[2] athe.score[3]; /*总分去掉score【0】和score【4】*/
-
fprintf(fp3," %d ",athe.tp);
-
athe.aver=(float)(athe.tp/3); /*强制改变数据类型*/
-
fprintf(fp3," %f \n",athe.aver);
-
fwrite(&athe,sizeof(score),1,fp2);
-
}
-
printf("输入完毕!");
-
fclose(fp1);
-
fclose(fp2);
-
fclose(fp3);
-
}
-
void Inquire2() /*查询比赛成绩*/
-
{
-
FILE *fp1,*fp2;
-
score athe,athe1;
-
int i,n,j,a;
-
int event;
-
if((fp1=fopen("d:\\校运动会管理系统\\score.txt","rb"))==NULL)
-
{
-
printf("不能建立!");
-
exit(10);
-
}
-
if((fp2=fopen("d:\\校运动会管理系统\\information.txt","rb"))==NULL)
-
{
-
printf("不能建立!");
-
exit(11);
-
}
-
fseek(fp2,0,2);
-
a=ftell(fp2)/sizeof(athtype);
-
-
printf("请输入需要查询的比赛(1.体操 2.跳水 3.滑冰 )");
-
scanf("%d",&event);
-
fseek(fp1,0,2);
-
n=ftell(fp1)/sizeof(score);
-
rewind(fp1);
-
for(i=0;i<n;i )
-
{
-
fread(&athe1,sizeof(score),1,fp1);
-
if(athe1.event==event) break;
-
}
-
if(i<n)
-
{
-
fseek(fp1,-(long)sizeof(score),1);
-
for(j=0;j<a;j )
-
{
-
fread(&athe,sizeof(score),1,fp1);
-
printf("%s :",athe.name);
-
for(i=0;i<5;i )
-
printf(" %d ",athe.score[i]);
-
printf("\n");
-
}
-
}
-
else printf("没有该比赛信息!\n");
-
fclose(fp1);
-
}
-
-
void Score() /*进入分数界面后的操作*/
-
{
-
int a;
-
do
-
{
-
printf("请选择 1-输入,2-查询,0-退出");
-
scanf("%d",&a);
-
switch(a)
-
{
-
case 1:Print2();break;
-
case 2:Inquire2();break;
-
}
-
}while(a!=0);
-
system("cls");
-
}
-
-
void main() /*主界面的操作*/
-
{
-
int cho;
-
do
-
{
-
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **\n");
-
printf("* *\n");
-
printf("* 欢迎使用运动会管理系统 *\n");
-
printf("* 1-运动员信息 *\n");
-
printf("* 2-比赛时间 *\n");
-
printf("* 3-裁判分数 *\n");
-
printf("* 0-退出 *\n");
-
printf("* *\n");
-
printf("* *\n");
-
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **\n");
-
scanf("%d",&cho);
-
switch(cho)
-
{
-
case 1:system("cls");Information();break;
-
case 2:system("cls");Time();break;
-
case 3:system("cls");Score();break;
-
}
-
}while(cho!=0);
-
}
设计心得
第一次输真么多的代码,发现自己还有很多的不足,同时也学会了许多新的老师不曾讲过的只是,这次课程设计,是对自己经历的充实,也是对自己的一次巨大的挑战。这次课设,也让我明白在今后的学习和生活当中,合作的重要性,以及对基础知识的把握,让暗暗下定决心在下学期的学习当中更加努力和认真,这一年对c语言的学习,让我从一无所知转换到另一个层次,也让我对计算机语言有了一定的认识,也激发了我对计算机知识学习的好奇心,相信在未来的计算机语言的学习中,我能在C的基础上,学习的更加灵动。
附件:源码下载
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgaegha
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01