当前位置:文档之家› 校运动会管理系统

校运动会管理系统

C 语言课程设计学校运动会管理系统专业:网络工程班级:网133报告人:王先海 139074347刘随心 139074338葛翔 139074332指导老师:***报告日期:2014年12月13号一、需求分析1、问题描述:建立运动员信息系统,包括运动员、裁判员以及运动信息的成绩管理,运动员信息为编号、姓名、身份信息(教师、学生)、参加的比赛项目等;裁判员信息为编号、姓名、身份信息(教师、学生)、裁判的项目;运动会信息包含各个比赛项目的信息、时间安排、裁判信息、比赛成绩等。

2、功能要求:(1)各种运动信息需要利用文件的形式进行存储。

(2)输入功能:可以从键盘或文件中一次性输入多条信息;(3)输出功能:可将运动员、裁判员、以及比赛信息打印输出或显示;(4)查找功能:根据运动员、裁判员等查找出所需要的比赛信息;(5)增加、删除、修改功能:完成运动员信息的多种更新;(6)统计功能:完成各类比赛信息的统计功能,例如某项比赛的名词排名,各个运动员的积分成绩统计等。

二、总体设计1、将学校运动会管理系统系统进行模块化分析三、详细设计本程序包含除main函数外包含20个函数:menu()、menu2()、reads(struct athletes ath[N]) 、reads1(struct referee ref[N])、reads2(structAll_the_events sport[N]) 、save(struct athletes ath[N],int n)、 show_athletes()、how_referee()、add()、According_to_the_number_to_find_players_informat ion ()、According_to_the_name_to_find_players_informatio n ()、According_to_the_number_to_Modify_the_players_in formation ()、According_to_the_name_to_Modify_the_players_info rmation ()、According_to_the_name_to_delete_the_players_info rmation ()、According_to_the_name_to_find_referee_informatio n ()、show_all_events () 、Output_on_a_single_information ()、 sort()、keep() 、sheep()。

此外还定义了三个结构体类型:struct athletes、struct referee、struct All_the_events。

四、调试与测试1、测试目的:测试出每个调用函数存在的数据调用错误,在分步调试的过程中检查出所用语句的错误,在检查程序的过程中尽量做出一定的更改,已达到让程序更加简洁的目的。

2、测试方法:对每一个调用的函数进行分步调试,之后再运行成功后根据运行结果对源程序做出相应的更改。

3、测试错误:a.搜索号码修改运动员信息时,发现文件被删除 b.按三级跳成绩排名时,发现有数据被后面的数据覆盖 c.等等4、解决措施:a.我还没找到方法耶。

b.将结构体struct All_the_events中的 char place[10]改成char place[20]五、测试结果1、输出菜单2、增加运动员信息3、输出全部运动员信息4、按号码查找运动员信息5、按姓名查找运动员信息6、输出全部裁判员信息7、按姓名查询裁判员信息8、输出全部比赛项目9、输出单项比赛信息6、用户手册:进入输出菜单选项界面->一般最开选择操作2,先增加运动员信息->再根据用户需求选择操作->最后选择操作13,退出系统。

7、附录(源代码)#include<stdio.h>#include<stdlib.h>#include <string.h>//#include<conio.h>#define N 20struct athletes{char num[20];char name[10];char Identity_information [10];float baimi;float sanjitiao;float chenggantiao;};struct referee{char num[20];char name[10];char Identity_information [10];char baimi[10];char sanjitiao[10];char chenggantiao[10];};struct All_the_events{char sport_name[10];char time[20];char referee[10];char place[20];};void menu(); //输出菜单选项void menu2() ;//输出输出单项比赛信息菜单选项int reads(struct athletes ath[N]);// 读取运动员文件中的内容int reads1(struct referee ref[N]); // 读裁判员取文件中的内容int reads2(struct All_the_events sport[N]); // 读取全部比赛项目文件中的内容void save(struct athletes ath[N],int n); // 运动员信息改变后更新文件void show_athletes(); // 输出全部运动员信息void show_referee(); // 输出全部裁判员信息void add();//增加运动员信息void According_to_the_number_to_find_players_information (); //按号码查找运动员信息void According_to_the_name_to_find_players_information (); //按姓名查找运动员信息void According_to_the_number_to_Modify_the_players_information (); //搜索号码修改运动员信息void According_to_the_name_to_Modify_the_players_information (); //搜索号码姓名修改运动员信息void According_to_the_name_to_delete_the_players_information (); //按姓名删除该运动员信息void According_to_the_name_to_find_referee_information (); //按姓名查找裁判员信息void show_all_events () ;// 输出输出全部比赛项目void Output_on_a_single_information ();//输出单项比赛信息void sort(); // 按百米赛跑成绩排名void keep() ;// 按三级跳成绩排名void sheep(); // 按撑杆跳成绩排名void main(){int n;while(1){menu();printf("\n 请输入您要选择的操作序号,按回车键确认:");scanf("%d",&n);switch(n){case 1: show_athletes();break;case 2: add();break;case 3: According_to_the_number_to_find_players_information ();break;case 4: According_to_the_name_to_find_players_information ();break;case 5: According_to_the_number_to_Modify_the_players_information ();break;case 6: According_to_the_name_to_Modify_the_players_information ();break;case 7: According_to_the_name_to_delete_the_players_information ();break;case 9: show_referee();break;case 10:According_to_the_name_to_find_referee_information ();break;case 11:show_all_events () ;break;case 12:Output_on_a_single_information ();break;case 13: exit(0);default:printf("输入错误,请输入列表中存在的序号!\n ");}}}void menu() //输出菜单选项{printf(" *════════* \n");printf(" ════════╣*运动会管理系统* ╠═════\n");printf(" ║ *════════* ║\n");printf(" ║【1】输出全部运动员信息║\n");printf(" ║║\n");printf(" ║【2】增加运动员信息║\n");printf(" ║║\n");printf(" ║【3】按号码查找运动员信息║\n");printf(" ║║\n");printf(" ║【4】按姓名查找运动员信息║\n");printf(" ║║\n");printf(" ║【5】搜索号码修改运动员信息║\n");printf(" ║║\n");printf(" ║【6】搜索姓名修改运动员信息║\n");printf(" ║║\n");printf(" ║【7】按姓名删除运动员信息║\n");printf(" ║║\n");printf(" ║【8】运动员积分排名║\n");printf(" ║║\n");printf(" ║【9】输出全部裁判员信息║\n");printf(" ║║\n");printf(" ║【10】按姓名查询裁判员信息║\n");printf(" ║║\n");printf(" ║【11】输出全部比赛项目║\n");printf(" ║║\n");printf(" ║【12】输出单项比赛信息║\n");printf(" ║║\n");printf(" ║【13】退出系统║\n");printf(" ═══════════════════════\n");}void menu2() //输出输出单项比赛信息菜单选项{printf(" *════════* \n");printf(" ════════╣* 单项比赛信息 *╠═════\n");printf(" ║ *════════* ║\n");printf(" ║【1】百米赛跑║\n");printf(" ║║\n");printf(" ║【2】三级跳║\n");printf(" ║║\n");printf(" ║【3】撑杆跳║\n");printf(" ║║\n");printf(" ║【4】退出系统║\n");printf(" ═══════════════════════\n");}int reads(struct athletes ath[N]) // 读取运动员文件中的内容{FILE *fp;int i=0;if((fp=fopen("f:\\程序设计\\athletes.txt","r"))==NULL){printf("文件打开失败!\n");return 0;}else{for(i=0;!feof(fp);i++)fscanf(fp,"%s %s %s %f %f %f\n",ath[i].num,ath[i].name,ath[i].Identity_inform ation,&ath[i].baimi,&ath[i].sanjitiao,&ath[i].chenggantiao);}fclose(fp);return i;}int reads1(struct referee ref[N]) // 读取裁判员取文件中的内容{FILE *fp;int i=0;if((fp=fopen("f:\\程序设计\\referee.txt","r"))==NULL){printf("文件打开失败!\n");return 0;}else{for(i=0;!feof(fp);i++)fscanf(fp,"%s %s %s %s %s %s\n",ref[i].num,ref[i].name,ref[i].Identity_inform ation,ref[i].baimi,ref[i].sanjitiao,ref[i].chenggantiao);}fclose(fp);return i;}int reads2(struct All_the_events sport[N]) // 读取全部比赛项目文件中的内容{FILE *fp;int i=0;if((fp=fopen("f:\\程序设计\\All_the_events.txt","r"))==NULL){printf("文件打开失败!\n");return 0;}else{for(i=0;!feof(fp);i++)fscanf(fp,"%s %s %s %s\n",sport[i].sport_name,sport[i].time,sport[i].referee,sp ort[i].place);}fclose(fp);return i;}void save(struct athletes ath[N],int n) // 运动员信息改变后更新文件{FILE *fp;int i=0;if((fp=fopen("f:\\程序设计\\athletes.txt","w"))==NULL){printf("文件打开失败!\n");return ;}else{for(i=0;i<n;i++)printf("%s %s %s %f %f %f\n",ath[i].num,ath[i].name,ath[i].Identity_informati on,ath[i].baimi,ath[i].sanjitiao,ath[i].chenggantiao);}fclose(fp);}void show_athletes() // 输出全部运动员信息{struct athletes ath[N];int i,n;n=reads(ath);printf("*****************************所有的学生信息如下***************************\n\n");printf(" 序号号码姓名身份百米赛跑(s) 三级跳(m) 撑杆跳(m) \n");printf("************************************************************ **************\n");for(i=0;i<n;i++)printf("\n%3d%12s%8s%8s%10.1f%12.1f%12.1f\n",i+1,ath[i].num,ath[i].name ,ath[i].Identity_information,ath[i].baimi,ath[i].sanjitiao,ath[i].chenggantiao);getch();}void add()//增加运动员信息{FILE *fp;int n,i;struct athletes ath;if((fp=fopen("f:\\程序设计\\athletes.txt","a"))==NULL) //如果文件已经存在,可以追加学生信息{if((fp=fopen("f:\\程序设计\\athletes.txt","w"))==NULL) // 文件不存在时,创建新文件,输入学生信息{printf("文件打开失败!\n");return;}}printf("请输入要添加的运动员数量,按回车键确认:");scanf("%d",&n);for(i=1;i<=n;i++){printf("\n请输入第%d个运动员的号码、姓名、身份,用空格分开,并按回车键确认:\n",i);scanf("%s%s%s",ath.num,,ath.Identity_information);printf("\n请输入第%d个运动员的百米赛跑(单位:s)、三级跳(单位:m)和撑杆跳(单位:m)三项成绩,用空格分开,没参加的项目用0表示,并按回车键确认:\n",i);scanf("%f%f%f",&ath.baimi,&ath.sanjitiao,&ath.chenggantiao);fprintf(fp,"%s %s %s %f %f %f\n",ath.num,,ath.Identity_information,a th.baimi,ath.sanjitiao,ath.chenggantiao);}fclose(fp);}void According_to_the_number_to_find_players_information () //按号码查找运动员信息{struct athletes ath[N];int n,i;char number[20];printf("\n请输入要查找运动员的号码,按回车键确认:");scanf("%s",number);n=reads(ath);for(i=0;i<n;i++)if(strcmp(number,ath[i].num)==0)break;if(i>=n){printf("无此学生信息!");return;}printf("\n现输出该运动员的号码,姓名,身份,百米赛跑、三级跳、撑杆跳三门成绩,按回车键确认:\n");printf(" 序号号码姓名身份百米赛跑三级跳撑杆跳 \n");printf("************************************************************ *\n");printf("\n%3d%12s%11s%11s%11.2f%12.2f%11.2f\n",i+1,ath[i].num,ath[i].na me,ath[i].Identity_information,ath[i].baimi,ath[i].sanjitiao,ath[i].chenggantiao);}void According_to_the_name_to_find_players_information () //按姓名查找运动员信息{struct athletes ath[N];int n,i;char name[20];printf("\n请输入要查找运动员的姓名,按回车键确认:");scanf("%s",name);n=reads(ath);for(i=0;i<n;i++)if(strcmp(name,ath[i].name)==0)break;if(i>=n){printf("无此学生信息!");return;}printf("\n现输出该运动员的号码,姓名,身份,百米赛跑、三级跳、撑杆跳三门成绩,按回车键确认:\n");printf(" 序号号码姓名身份百米赛跑三级跳撑杆跳 \n");printf("************************************************************ *\n");printf("\n%3d%12s%11s%11s%11.2f%12.2f%11.2f\n",i+1,ath[i].num,ath[i].na me,ath[i].Identity_information,ath[i].baimi,ath[i].sanjitiao,ath[i].chenggantiao);}void According_to_the_number_to_Modify_the_players_information () //搜索号码修改运动员信息{struct athletes ath[N];int n,i;char number[20];printf("\n请输入要更改信息的运动员号码,按回车键确认:");scanf("%s",number);n=reads(ath);for(i=0;i<n;i++)if(strcmp(number,ath[i].num)==0)break;if(i>=n){printf("无此运动员信息!");return;}printf("\n请输入更改后运动员的号码,姓名,身份,百米赛跑、三级跳、撑杆跳三门成绩,按回车键确认:\n");scanf("%s%s%s%f%f%f",ath[i].num,ath[i].name,ath[i].Identity_information,&at h[i].baimi,&ath[i].sanjitiao,&ath[i].chenggantiao);save(ath,n);}void According_to_the_name_to_Modify_the_players_information () //搜索姓名修改运动员信息{struct athletes ath[N];int n,i;char name[20];printf("\n请输入要更改信息的运动员姓名,按回车键确认:");scanf("%s",name);n=reads(ath);for(i=0;i<n;i++)if(strcmp(name,ath[i].name)==0)break;if(i>=n){printf("无此运动员信息!");return;}printf("\n请输入更改后运动员的号码,姓名,身份,百米赛跑(单位:s)、三级跳(单位:m)和撑杆跳(单位:m)三项成绩,用空格分开,没参加的项目用0表示,并按回车键确认:\n");scanf("%s%s%s%f%f%f",ath[i].num,ath[i].name,ath[i].Identity_information,&at h[i].baimi,&ath[i].sanjitiao,&ath[i].chenggantiao);save(ath,n);}void According_to_the_name_to_delete_the_players_information () //按姓名删除该运动员信息{struct athletes ath[N];char name[20];int n,i,j;n=reads(ath);printf("\n请输入要删除信息运动员姓名,按回车键确认:");scanf("%s",name);for(i=0;i<n;i++)if(strcmp(name,ath[i].name)==0)break;if(i>=n){printf("没有找到该运动员信息!\n");return;}else{for(j=i+1;j<n;j++)ath[j-1]=ath[j];}save(ath,n-1);printf("删除成功!\n");}void show_referee() // 输出全部裁判员信息{struct referee ref[N];int i,n;n=reads1(ref);printf("*********************所有的裁判员信息如下**********************\n\n");printf(" 序号号码姓名身份百米赛跑三级跳撑杆跳 \n");printf("************************************************************ *\n");for(i=0;i<n;i++)printf("\n%3d%8s%8s%8s%10s%8s%8s\n",i+1,ref[i].num,ref[i].name,ref[i].Ide ntity_information,ref[i].baimi,ref[i].sanjitiao,ref[i].chenggantiao);getch();}void According_to_the_name_to_find_referee_information () //按姓名查找裁判员信息{struct referee ref[N];int n,i;char name[20];printf("\n请输入要查找裁判员的姓名,按回车键确认:");scanf("%s",name);n=reads1(ref);for(i=0;i<n;i++)if(strcmp(name,ref[i].name)==0)break;if(i>=n){printf("无此裁判员信息!");return;}printf("*********************现输出该裁判员信息如下******************\n\n");printf(" 序号号码姓名身份百米赛跑三级跳撑杆跳 \n");printf("************************************************************ *\n");printf("\n%3d%8s%8s%8s%10s%8s%8s\n",i+1,ref[i].num,ref[i].name,ref[i].Ide ntity_information,ref[i].baimi,ref[i].sanjitiao,ref[i].chenggantiao);}void show_all_events () // 输出输出全部比赛项目{struct All_the_events sport[N];int i,n;n=reads2(sport);printf("*********************输出全部比赛项目**********************\n\n");printf(" 序号比赛项目比赛时间裁判员比赛地点\n");printf("***********************************************************\ n");for(i=0;i<n;i++)printf("\n%3d%12s%10s%11s%13s\n",i+1,sport[i].sport_name,sport[i].time,sp ort[i].referee,sport[i].place);getch();}void Output_on_a_single_information ()//输出单项比赛信息{int n;while(1){menu2();printf("\n 请输入您要选择的操作序号,按回车键确认:");scanf("%d",&n);switch(n){case 1: sort();break;case 2: keep();break;case 3: sheep();break;case 4: exit(0);default:printf("输入错误,请输入列表中存在的序号!\n ");}}}void sort() // 按百米赛跑成绩排名{struct athletes ath[N],temp;int i,j,n;n=reads(ath);for(i=0;i<n-1;i++)for(j=0;j<n-1;j++){if(ath[j].baimi>ath[j+1].baimi){temp=ath[j];ath[j]=ath[j+1];ath[j+1]=temp;}}save(ath,n);j=1;printf("*********************百米赛跑成绩排序结果如下******************\n\n");printf(" 名次号码姓名身份百米赛跑(s)\n");printf("************************************************************ *\n");for(i=0;i<n;i++) // 输出结果并排名{if(ath[i].baimi==ath[i+1].baimi)printf("\n%3d%12s%11s%11s%11.2f\n",j,ath[i].num,ath[i].name,ath[i].Identity _information,ath[i].baimi );elseprintf("\n%3d%12s%11s%11s%11.2f\n",j++,ath[i].num,ath[i].name,ath[i].Iden tity_information,ath[i].baimi );}getch();}void keep() // 按三级跳成绩排名{struct athletes ath[N],temp;int i,j,n;n=reads(ath);for(i=0;i<n-1;i++)for(j=0;j<n-1;j++){if(ath[j].sanjitiao<ath[j+1].sanjitiao){temp=ath[j];ath[j]=ath[j+1];ath[j+1]=temp;}}save(ath,n);j=1;printf("*********************三级跳成绩排序结果如下******************\n\n");printf(" 名次号码姓名身份三级跳(m)\n");printf("************************************************************ ***\n");for(i=0;i<n;i++) // 输出结果并排名{if(ath[i].sanjitiao==ath[i+1].sanjitiao)printf("\n%3d%12s%11s%11s%11.2f\n",j,ath[i].num,ath[i].name,ath[i].Identity _information,ath[i].sanjitiao );elseprintf("\n%3d%12s%11s%11s%11.2f\n",j++,ath[i].num,ath[i].name,ath[i].Iden tity_information,ath[i].sanjitiao );}getch();}void sheep() // 按撑杆跳成绩排名{struct athletes ath[N],temp;int i,j,n;n=reads(ath);for(i=0;i<n-1;i++)for(j=0;j<n-1;j++){if(ath[j].chenggantiao<ath[j+1].chenggantiao){temp=ath[j];ath[j]=ath[j+1];ath[j+1]=temp;}}save(ath,n);j=1;printf("*********************撑杆跳成绩排序结果如下******************\n\n");printf(" 名次号码姓名身份撑杆跳(m)\n");printf("************************************************************ ***\n");for(i=0;i<n;i++) // 输出结果并排名{if(ath[i].chenggantiao==ath[i+1].chenggantiao)printf("\n%3d%12s%11s%11s%11.2f\n",j,ath[i].num,ath[i].name,ath[i].Identity _information,ath[i].chenggantiao );elseprintf("\n%3d%12s%11s%11s%11.2f\n",j++,ath[i].num,ath[i].name,ath[i].Iden tity_information,ath[i].chenggantiao );}getch();}。

相关主题