C语言课程设计报告.docx
《C语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告.docx(53页珍藏版)》请在冰点文库上搜索。
C
语
言
课
程
设
计
学校运动会
管理系统
专业:
网络工程
班级:
网133
报告人:
王先海139074347
刘随心139074338
葛翔139074332
指导老师:
陶陶
报告日期:
2014年12月13号
一、需求分析
1、问题描述:
建立运动员信息系统,包括运动员、裁判员以及运动信息的成绩管理,运动员信息为编号、姓名、身份信息(教师、学生)、参加的比赛项目等;裁判员信息为编号、姓名、身份信息(教师、学生)、裁判的项目;运动会信息包含各个比赛项目的信息、时间安排、裁判信息、比赛成绩等。
2、功能要求:
(1)各种运动信息需要利用文件的形式进行存储。
(2)输入功能:
可以从键盘或文件中一次性输入多条信息;
(3)输出功能:
可将运动员、裁判员、以及比赛信息打印输出或显示;
(4)查找功能:
根据运动员、裁判员等查找出所需要的比赛信息;
(5)增加、删除、修改功能:
完成运动员信息的多种更新;
(6)统计功能:
完成各类比赛信息的统计功能,例如某项比赛的名词排名,各个运动员的积分成绩统计等。
二、总体设计
1、将学校运动会管理系统系统进行模块化分析
学校运动会管理系统
统计功能
查找功能
增加删除修改功能
输出功能
输入功能
输出全部比赛项目
输出单项比赛信息
比赛信息模块
按姓名删除运动员信息
搜索姓名修改运动员信息
搜索号码修改运动员信息
按姓名查找运动员信息
按号码查找运动员信息
增加运动员信息
输出全部运动员信息
学生功能模块
按姓名查询裁判员信息
裁判员功能模块
输出全部裁判员信息
学校运动会管理系统
三、详细设计
本程序包含除main函数外包含20个函数:
menu()、menu2()、reads(structathletesath[N])、reads1(structrefereeref[N])、reads2(structAll_the_eventssport[N])、save(structathletesath[N],intn)、show_athletes()、how_referee()、add()、According_to_the_number_to_find_players_information()、According_to_the_name_to_find_players_information()、According_to_the_number_to_Modify_the_players_information()、According_to_the_name_to_Modify_the_players_information()、According_to_the_name_to_delete_the_players_information()、According_to_the_name_to_find_referee_information()、show_all_events()、Output_on_a_single_information()、sort()、keep()、sheep()。
此外还定义了三个结构体类型:
structathletes、structreferee、structAll_the_events。
函数名
功能
入口
出口
调用关系
menu()
输出菜单选项
该函数无形参
printf()输出信息,无返回值
在main()中被反复调用
menu2()
输出输出单项比赛信息菜单选项
该函数无形参
printf()输出信息,无返回值
在main()中被反复调用
reads(structathletesath[N])
读取运动员文件中的内容
形参结构体structathletesath[N]
returni
在需要运动员数据时被调用
reads1(structrefereeref[N])
读取裁判员取文件中的内容
形参结构体structrefereeref[N]
returni
在需要裁判员数据时被调用
reads2(structAll_the_eventssport[N])
读取全部比赛项目文件中的内容
形参结构体structAll_the_eventssport[N]
returni
在需要全部比赛项目数据时被调用
save(structathletesath[N],intn)
运动员信息改变后更新文件
形参结构体structathletesath[N],intn
将运动员信息存入文件,无返回值
在文件需要被保存时调用
show_athletes()
输出全部运动员信息
该函数无形参
printf()输出信息,无返回值
在main()中被反复调用
add()
增加运动员信息
该函数无形参
printf()输出信息,无返回值
在main()中被反复调用
According_to_the_number_to_find_players_information()
按号码查找运动员信息
该函数无形参
printf()输出信息,无返回值
在main()中被反复调用
According_to_the_name_to_find_players_information()
按姓名查找运动员信息
该函数无形参
printf()输出信息,无返回值
在main()中被反复调用
According_to_the_number_to_Modify_the_players_information()
搜索号码修改运动员信息
该函数无形参
printf()输出信息,无返回值
在main()中被反复调用
According_to_the_name_to_Modify_the_players_information()
搜索姓名修改运动员信息
该函数无形参
printf()输出信息,无返回值
在main()中被反复调用
According_to_the_name_to_delete_the_players_information()
按姓名删除该运动员信息
该函数无形参
在main()中被反复调用
show_referee()
输出全部裁判员信息
该函数无形参
printf()输出信息,无返回值
在main()中被反复调用
According_to_the_name_to_find_referee_information()
按姓名查找裁判员信息
该函数无形参
printf()输出信息,无返回值
在main()中被反复调用
show_all_events()
输出输出全部比赛项目
该函数无形参
printf()输出信息,无返回值
在main()中被反复调用
Output_on_a_single_information()
输出单项比赛信息
该函数无形参
printf()输出信息,无返回值
在main()中被反复调用
sort()
按百米赛跑成绩排名
该函数无形参
printf()输出信息,无返回值
在main()中被反复调用
keep()
按三级跳成绩排名
该函数无形参
printf()输出信息,无返回值
在main()中被反复调用
sheep()
按撑杆跳成绩排名
该函数无形参
printf()输出信息,无返回值
在main()中被反复调用
四、调试与测试
1、测试目的:
测试出每个调用函数存在的数据调用错误,在分步调试的过程中检查出所用语句的错误,在检查程序的过程中尽量做出一定的更改,已达到让程序更加简洁的目的。
2、测试方法:
对每一个调用的函数进行分步调试,之后再运行成功后根据运行结果对源程序做出相应的更改。
3、测试错误:
a.搜索号码修改运动员信息时,发现文件被删除b.按三级跳成绩排名时,发现有数据被后面的数据覆盖c.等等
4、解决措施:
a.我还没找到方法耶。
b.将结构体structAll_the_events中的charplace[10]改成charplace[20]
五、测试结果
1、输出菜单
2、增加运动员信息
3、输出全部运动员信息
4、按号码查找运动员信息
5、按姓名查找运动员信息
6、输出全部裁判员信息
7、按姓名查询裁判员信息
8、输出全部比赛项目
9、输出单项比赛信息
6、用户手册:
进入输出菜单选项界面->一般最开选择操作2,先增加运动员信息->再根据用户需求选择操作->最后选择操作13,退出系统。
7、附录(源代码)
#include
#include
#include
//#include
#defineN20
structathletes
{
charnum[20];
charname[10];
charIdentity_information[10];
floatbaimi;
floatsanjitiao;
floatchenggantiao;
};
structreferee
{
charnum[20];
charname[10];
charIdentity_information[10];
charbaimi[10];
charsanjitiao[10];
charchenggantiao[10];
};
structAll_the_events
{
charsport_name[10];
chartime[20];
charreferee[10];
charplace[20];
};
voidmenu();//输出菜单选项
voidmenu2();//输出输出单项比赛信息菜单选项
intreads(structathletesath[N]);//读取运动员文件中的内容
intreads1(structrefereeref[N]);//读裁判员取文件中的内容
intreads2(structAll_the_eventssport[N]);//读取全部比赛项目文件中的内容
voidsave(structathletesath[N],intn);//运动员信息改变后更新文件
voidshow_athletes();//输出全部运动员信息
voidshow_referee();//输出全部裁判员信息
voidadd();//增加运动员信息
voidAccording_to_the_number_to_find_players_information();//按号码查找运动员信息
voidAccording_to_the_name_to_find_players_information();//按姓名查找运动员信息
voidAccording_to_the_number_to_Modify_the_players_information();//搜索号码修改运动员信息
voidAccording_to_the_name_to_Modify_the_players_information();//搜索号码姓名修改运动员信息
voidAccording_to_the_name_to_delete_the_players_information();//按姓名删除该运动员信息
voidAccording_to_the_name_to_find_referee_information();//按姓名查找裁判员信息
voidshow_all_events();//输出输出全部比赛项目
voidOutput_on_a_single_information();//输出单项比赛信息
voidsort();//按百米赛跑成绩排名
voidkeep();//按三级跳成绩排名
voidsheep();//按撑杆跳成绩排名
voidmain()
{
intn;
while
(1)
{
menu();
printf("\n请输入您要选择的操作序号,按回车键确认:
");
scanf("%d",&n);
switch(n)
{
case1:
show_athletes();break;
case2:
add();break;
case3:
According_to_the_number_to_find_players_information();break;
case4:
According_to_the_name_to_find_players_information();break;
case5:
According_to_the_number_to_Modify_the_players_information();break;
case6:
According_to_the_name_to_Modify_the_players_information();break;
case7:
According_to_the_name_to_delete_the_players_information();break;
case9:
show_referee();break;
case10:
According_to_the_name_to_find_referee_information();break;
case11:
show_all_events();break;
case12:
Output_on_a_single_information();break;
case13:
exit(0);
default:
printf("输入错误,请输入列表中存在的序号!
\n");
}
}
}
voidmenu()//输出菜单选项
{
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");
}
voidmenu2()//输出输出单项比赛信息菜单选项
{
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");
}
intreads(structathletesath[N])//读取运动员文件中的内容
{
FILE*fp;
inti=0;
if((fp=fopen("f:
\\程序设计\\athletes.txt","r"))==NULL)
{
printf("文件打开失败!
\n");
return0;
}
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_information,&ath[i].baimi,&ath[i].sanjitiao,&ath[i].chenggantiao);
}
fclose(fp);
returni;
}
intreads1(structrefereeref[N])//读取裁判员取文件中的内容
{
FILE*fp;
inti=0;
if((fp=fopen("f:
\\程序设计\\referee.txt","r"))==NULL)
{
printf("文件打开失败!
\n");
return0;
}
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_information,ref[i].baimi,ref[i].sanjitiao,ref[