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循环。

以下是模块结构图:

详细设计 

源程序代码

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>  /*用于动态分布空间*/
#include <string.h>
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的基础上,学习的更加灵动。

附件:源码下载

C语言课程设计-运动会管理系统_c语言课程设计报告校园运动会管理系统-C文档类资源-CSDN文库https://download.csdn.net/download/NBITer/87369758

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/267201.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention基于马尔可夫转移场-卷积神经网络融合多头注意力多特征数据分类预测

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention基于马尔可夫转移场-卷积神经网络融合多头注意力多特征数据分类预测 目录 分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention基于马尔可夫转移场-卷积神经网络融合多头注意力多特征数据分类预测分类效果基本描述程序设计参考…

HarmonyOS4.0系统性深入开发03UIAbility组件详解(中)

UIAbility组件基本用法 UIAbility组件的基本用法包括&#xff1a;指定UIAbility的启动页面以及获取UIAbility的上下文UIAbilityContext。 指定UIAbility的启动页面 应用中的UIAbility在启动过程中&#xff0c;需要指定启动页面&#xff0c;否则应用启动后会因为没有默认加载…

2024华为OD机试真题指南宝典—持续更新(JAVAPythonC++JS)【彻底搞懂算法和数据结构—算法之翼】

PC端可直接搜索关键词 快捷键&#xff1a;CtrlF 年份关键字、题目关键字等等 注意看本文目录-快速了解本专栏 文章目录 &#x1f431;2024年华为OD机试真题&#xff08;马上更新&#xff09;&#x1f439;2023年华为OD机试真题&#xff08;更新中&#xff09;&#x1f436;新…

Python字符串处理全攻略(三):常用内置方法轻松掌握

目录 引言Python字符串常用内置方法str.index()功能介绍语法注意事项总结 str.startswith()功能介绍语法示例注意事项 str.expandtabs()功能介绍语法示例注意事项总结 str.splitlines()功能介绍语法示例注意事项总结 str.swapcase()功能介绍语法示例注意事项 结束语 引言 欢迎…

XUbuntu22.04之跨平台容器格式工具:MKVToolNix(二百零三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

【Hadoop】Zookeeper是什么?怎么理解它的工作机制?

Zookeeper是什么Zookeeper工作机制 Zookeeper是什么 Zookeeper是一个开源的分布式的&#xff0c;为别的分布式矿建提供协调服务的Apache项目。分布式简单地理解就是多台机器共同完成一个任务。 Zookeeper工作机制 从设计模式的角度来理解&#xff0c;是一个基于观察者模式设…

css学习笔记6(盒子模型)

CSS盒子模型 五、CSS盒子模型1.CSS长度单位2.元素的显示模式3.总结各元素的显示模式4.修改元素显示模式5.盒子模型的组成6.盒子内容区&#xff08;content&#xff09;7.关于默认宽度8.盒子内边距&#xff08;padding&#xff09;9.盒子边框&#xff08;border&#xff09;10.盒…

深度学习入门(python)考试速成均方误差

均方误差 表示神经网络的输出&#xff0c;表示监督数据&#xff0c;表示数据的维度。 这里神经网络的输出y是softmax函数的输出 数组元素的索引从第一个开始依次对应数组“0”&#xff0c;“1”&#xff0c;“2”&#xff0c;...... 由于softmax函数的输出可理解为概率 由此…

指针的含义

我们还取前面图片解释的道理&#xff1a; pa表示的意思就是这个地址&#xff0c;并不会显示出10这个数字 *pa就是指针&#xff0c;最后指向了a10&#xff0c;所以他最后程序输出是10 &pa这个含义就是取pa的地址&#xff0c;那么pa是一个虚拟的地址&#xff0c;只是简单的…

概率中的50个具有挑战性的问题[02/50]:连续获胜

一、说明 我最近对与概率有关的问题产生了兴趣。我偶然读到了弗雷德里克莫斯特勒&#xff08;Frederick Mosteller&#xff09;的《概率论中的五十个具有挑战性的问题与解决方案》&#xff08;Fifty Challenge Problems in Probability with Solutions&#xff09;一书。我认为…

python实现图像的几何变换——冈萨雷斯数字图像处理

1、 实现图像的平移。 原理: 图像的平移是一种基本的图像处理操作&#xff0c;它将图像中的每个像素沿着指定的方向和距离移动&#xff0c;以创建一个新的平移后的图像。平移的原理很简单&#xff0c;通常涉及到以下几个步骤&#xff1a; 确定平移的距离和方向&#xff1a;首先…

2024苹果手机iOS管理软软件iMazing2.17永久免费版下载教程

iMazing2024是一款专业的苹果IOS设备管理器&#xff0c;强悍的性能远超苹果的iTunes&#xff0c;iMazing 能让广大果粉能已自己的方式管理苹果设备&#xff0c;无需iTunes即可畅快传输或者保存苹果设备中的音乐、消息、文件以及其他数据。 iMazing2Mac-最新绿色安装包下载如下&…

下一站,上岸@24考研er

时间过的好快&#xff0c; 考研倒计时①天 去年这个时候&#xff0c; 我应该也是充满未知地进入即将来到的考研初试 去年&#xff0c;这个时候&#xff0c;疫情&#x1f637;刚刚放开 许多人都&#x1f411;&#xff0c;发烧&#xff0c;可幸的是我受影响不大 &#x1f3…

供应链 | 顶刊MSOM论文精选——关税对全球供应链网络配置的影响:模型、预测和未来研究

编者按 关税对企业全球供应链网络设计决策的影响 本文为 M&SOM期刊20周年特邀论文&#xff0c;原文信息&#xff1a; Lingxiu Dong, Panos Kouvelis (2020) Impact of Tariffs on Global Supply Chain Network Configuration: Models, Predictions, and Future Research…

MySQL 数据库系列课程 05:MySQL命令行工具的配置

一、Windows启动命令行工具 &#xff08;1&#xff09;打开 Windows 的开始菜单&#xff0c;找到安装好的 MySQL&#xff0c;点击MySQL 8.0 Command Line Client - Unicode&#xff0c;这个带有 Unicode 的&#xff0c;是支持中文的&#xff0c;允许在命令行中敲中文。 &…

Java经典面试题——手写快速排序和归并排序

题目链接&#xff1a;https://www.luogu.com.cn/problem/P1177 输入模板&#xff1a; 5 4 2 4 5 1快速排序 技巧&#xff1a;交换数组中的两个位置 a[l] a[l] a[r] - (a[r] a[l]); 稳定不稳定&#xff1f;:不稳定 注意找哨兵那里内循环的等于号不能漏&#xff0c;不然…

【STM32】I2C通信

基本的任务是&#xff1a;通过通信线&#xff0c;实现单片机读写外挂模块寄存器的功能。其中至少要实现在指定位置写寄存器和在指定的位置读寄存器这两个功能。 异步时序的优点&#xff1a;省一根时钟线&#xff0c;节约资源&#xff1b;缺点&#xff1a;对事件要求严格&#…

VSCode运行时弹出powershell

问题 安装好了vscode并且装上code runner插件后&#xff0c;运行代码时总是弹出powershell,而不是在vscode底部终端 显示运行结果。 解决方法 打开系统cmd ,在窗口顶部条右击打开属性&#xff0c;把最下面的旧版控制台选项取消&#xff0c;即可

关于JVM的垃圾回收GC的一些记录

目录 一、JVM内存区域划分 二、从一个基本问题开始引入垃圾回收 三、GC作用的区域 三、如何确定一个对象是否可以被当成垃圾进行回收 &#xff08;1&#xff09;引用计数法 &#xff08;2&#xff09;可达性分析算法 &#xff08;3&#xff09;引用的类型 &#xff08;3…

Netty Review - Netty自动重连机制揭秘:原理与最佳实践

文章目录 概述Pre客户端自动重连CodeServerClient (重点) 测试启动自动重连运行过程中断链后的自动重连 概述 Pre Netty Review - 深入探讨Netty的心跳检测机制&#xff1a;原理、实战、IdleStateHandler源码分析 客户端自动重连 自动重连是一个用于提高网络应用稳定性和可靠…