1、C课程设计任务书 评分管理程序课程设计任务书题目名称Platform-Diving评分管理程序学生学院专业班级姓 名学 号一、课程设计的内容开发一个程序用于管理Platform-Diving比赛时5米、75米和10米跳台等赛事裁判员对赛事的评分. 运动会中有3个赛事和很多运动员,每个运动员可以参加几个赛事,每场比赛有多个运动员参加。每场比赛有若干个裁判评价运动员的比赛表现,对每个运动员的比赛表演做出评分。假设只有这3项比赛(5米跳台PD5、7.5米跳台PD7、10米跳台PD10),每场比赛有5个裁判评分.二、课程设计的要求与数据1. 开始运行程序时能够从event.xml文件中读出比赛名称和比
2、赛日期。能够提供一个程序界面修改比赛日期。比赛的数据项包括:eventName、eventDate。说明:假定斜体标注部分的数据才会变化,其余字符是不会改变的。PD5,2009-11-20PD7,2009-11-21PD10,2009-11-222. 能够提供一个程序界面对运动员的基本资料做输入、删除、修改、查询操作;运动员的数据项包括:姓名name、编号cID、性别sex、出生日期birthdate、所属队team,参加比赛perform. 运动员的资料保存在文件名为competitor.xml的文件中。在输入运动员的基本资料时要输入该运动员参加的比赛(3种比赛中的1种比赛,提供选择输入,也
3、就是通过输入代号如输入1表示5米跳台,但是屏幕上要有提示代号代表的含义)。编号cID必须保证唯一,而且是输入时由程序来自动编号也就是说不需要从界面输入。文件格式如下:ZhangSan,1,m,1990-9-18,ShangHai,PD5lisi,2,f,1991-9-18,GuangDong,PD5Alice,3,f,1992-9-18,GuangDong,PD7Tom,4,m,1992-9-28,ShangHai,PD7 3、能够提供程序界面让运动会工作人员输入某场比赛的所有运动员(逐个运动员输入)的每个裁判的评分,并能计算出最后的总分(计算规则:去掉一个最高分和一个最低分后分数之和再求平均
4、);能查询并在屏幕上打印出某场比赛所有运动员的最后得分,显示出冠军、亚军、季军的运动员姓名、得分、所属队名称。能在屏幕上显示每个队的金牌gold、银牌silver、铜牌copper数目。评分的资料保存在文件名为score.txt的文件中.包括的数据项有:eventName,cID,score1,score2,score3,score4,score5,netScore.说明:每个裁判的评分在010之间,可以有1位小数。要求:上面的文件(event.xml,competitor.xml,score.txt)操作用文本文件方式。三、课程设计应完成的工作1、 设计整个程序的总体结构2、 使用C语言的P
5、roject完成程序编写与调试3、 程序功能的测试4、 撰写设计说明书5、 提交材料包括:.c文件、.h文件,.prj文件、数据文件(.xml,.txt),设计文档.doc文件及doc文件双面打印稿四、课程设计进程安排序号设计各阶段内容地点起止日期1主函数、运动员的信息管理1-5至1-122 运动员成绩管理1-12至1-16五、应收集的资料及主要参考文献1 谭浩强C语言程序设计M北京:清华大学出版社,2005年目录Platform-Diving评分管理程序 11、 设计任务与要求 11.1任务概述 11.2需求与功能描述 11.3设计要求 22、 总体结构设计 23、 详细设计 231主要的数
6、据结构 23.2主要的算法或程序流程图 23.3函数说明 24、 程序测试说明 35、 程序的使用说明 36、 参考文献 3附录:源程序 3Platform-Diving评分管理程序1、 设计任务与要求1.1任务概述开发一个程序用于管理Platform-Diving比赛时5米、75米和10米跳台等赛事裁判员对赛事的评分. 运动会中有3个赛事和很多运动员,每个运动员可以参加几个赛事,每场比赛有多个运动员参加。每场比赛有若干个裁判评价运动员的比赛表现,对每个运动员的比赛表演做出评分。假设只有这3项比赛(5米跳台PD5、7.5米跳台PD7、10米跳台PD10),每场比赛有5个裁判评分.1.2需求与功
7、能描述1. 开始运行程序时能够从event.xml文件中读出比赛名称和比赛日期。能够提供一个程序界面修改比赛日期。比赛的数据项包括:eventName、eventDate。说明:假定斜体标注部分的数据才会变化,其余字符是不会改变的。PD5,2009-11-20PD7,2009-11-21PD10,2009-11-222. 能够提供一个程序界面对运动员的基本资料做输入、删除、修改、查询操作;运动员的数据项包括:姓名name、编号cID、性别sex、出生日期birthdate、所属队team,参加比赛perform. 运动员的资料保存在文件名为competitor.xml的文件中。在输入运动员的基
8、本资料时要输入该运动员参加的比赛(3种比赛中的1种比赛,提供选择输入,也就是通过输入代号如输入1表示5米跳台,但是屏幕上要有提示代号代表的含义)。编号cID必须保证唯一,而且是输入时由程序来自动编号也就是说不需要从界面输入。文件格式如下:ZhangSan,1,m,1990-9-18,ShangHai,PD5lisi,2,f,1991-9-18,GuangDong,PD5Alice,3,f,1992-9-18,GuangDong,PD7Tom,4,m,1992-9-28,ShangHai,PD7 3、能够提供程序界面让运动会工作人员输入某场比赛的所有运动员(逐个运动员输入)的每个裁判的评分,并能
9、计算出最后的总分(计算规则:去掉一个最高分和一个最低分后分数之和再求平均);能查询并在屏幕上打印出某场比赛所有运动员的最后得分,显示出冠军、亚军、季军的运动员姓名、得分、所属队名称。能在屏幕上显示每个队的金牌gold、银牌silver、铜牌copper数目。评分的资料保存在文件名为score.txt的文件中.包括的数据项有:eventName,cID,score1,score2,score3,score4,score5,netScore.说明:每个裁判的评分在010之间,可以有1位小数。要求:上面的文件(event.xml,competitor.xml,score.txt)操作用文本文件方式。
10、1.3设计要求程序开始运行时提供一个主菜单,有上面3个功能的菜单项供选择。上面的3个文件都用C语言的文本文件来实现。要用C语言的工程文件多源程序文件编程。测试用的输入数据可以只用英文和数值,可以不用中文。以上为基本要求,在完成基本要求的基础上可以自己根据实际适当增加功能。2、 总体结构设计1.比赛日期的修改2.运动员信息管理3.运动员分数管理3、 详细设计31主要的数据结构struct event /定义比赛信息结构体char eventName5; /结构体成员,比赛名称 char Date20; /结构体成员,比赛日期even3; / 定义结构体数组struct athlete /定义运动
11、员信息结构体 char cID10; /结构体成员,运动员编号 char name20; /结构体成员,运动员姓名 char sex5; /结构体成员,运动员性别 char birthdate15; /结构体成员,运动员出生日期 char team20; /结构体成员,运动员所属队伍 char perform5; /结构体成员,参加比赛 struct athlete *next; /下一个结点;struct score/定义分数结构体char evenName5;/结构体成员,比赛名 char cID10;/结构体成员,运动员编号 char name20;/结构体成员,运动员名字 char t
12、eam20;/结构体成员,所属队伍 float score5;/结构体成员,分数 float netScore;/结构体成员,平均分 struct score *next;/下一个结点;3.2主要的算法或程序流程图开始 选择要执行的操作 选择要操作的代号 输入正确的数据 (返回) 选择要执行的操作 选择要操作的代号 输入数据(返回) 选择要执行的操作 选择要操作的代号 输入数据(返回)结束3.3函数说明void Swrite(); 输出评分资料void Sput(); 输入评分void Irevise();修改运动员信息void Idel();删除运动员信息void Iscan();查看运动员
13、信息void Iread();读取运动员信息void Iwrite();输出运动员信息void Iput();输入运动员信息void Exit();退出void submT();修改时间void submR();分数操作菜单void submIn();信息操作菜单void Mmenu();主菜单void main();主函数4、 程序测试说明把文件event.xml放在程序所在文件夹5、 程序的使用说明选择菜单操作时一定要输入菜单提示的数字代号 选择是否得操作时y/n是小写字母 很多操作都有提示6、 参考文献1 谭浩强C语言程序设计M北京:清华大学出版社,2005年附录:源程序#include
14、 /*声明*/#include#include void Swrite();void Sput();void Irevise();void Idel();void Iscan();void Iread();void Iwrite();void Iread();void Iput();void Exit();void submT();void submR();void submIn();void Mmenu();struct eventchar eventName5; char Date20;even3;struct athlete char cID10; char name20; char s
15、ex5; char birthdate15; char team20; char perform5; struct athlete *next;struct scorechar evenName5; char cID10; char name20; char team20; float score5; float netScore; struct score *next;int n=0,m=0; /*全局变量*/struct athlete *head=NULL;struct score *head1=NULL,*head2=NULL,*head3=NULL;void Sscan() /*分数
16、查看函数*/system(cls); printf( Platform-Diving Scoring proceduresnn); printf( *n); printf( The result of the performn); printf( =n); printf( Score scannnn); int pf=0,i=0; float a=0,b=0,c=0; struct score *head0=NULL,*p,*p1,*p2,*p3; printf( Choose the perform(1.PD5;2.PD7;3.PD10):); while(pf=0|pf3) scanf(%
17、d,&pf); switch(pf) case 1:head0=head1;break; case 2:head0=head2;break; case 3:head0=head3;break; default:printf( Your choose is not required,Enter again:); if(head0!=NULL) printf(n name netscore teamn); p=head0; do printf( %-12s%-15.1f%-10sn,p-name,p-netScore,p-team); if(p-netScorea)p3=p2;p2=p1;p1=p
18、; else if(p-netScoreb)p3=p2;p2=p; else if(p-netScorec)p3=p; p=p-next;i+; while(p!=NULL); printf(nn Top threen); /*前三名*/ printf(n ranking name netscore teamn); if(i=1)printf( champion %-10s%-12.1f%-10sn,p1-name,p1-netScore,p1-team); if(i=2) printf( champion %-10s%-12.1f%-10sn,p1-name,p1-netScore,p1-t
19、eam); printf( second place %-10s%-12.1f%-10sn,p2-name,p2-netScore,p2-team); if(i=3) printf( champion %-10s%-12.1f%-10sn,p1-name,p1-netScore,p1-team); printf( second place %-10s%-12.1f%-10sn,p2-name,p2-netScore,p2-team); printf( third place %-10s%-12.1f%-10sn,p3-name,p3-netScore,p3-team); else printf
20、(n list null!n); printf(n Input any key to leave); getche();return;void Swrite() /*分数写入score.txt文件函数*/struct score *p; FILE *fp; if(fp=fopen(score.txt,w)=NULL) printf(File open errorn);getche();return; p=head1; for(;p!=NULL;)fprintf(fp,%s,%s,%2.1f,%2.1f,%2.1f,%2.1f,%2.1f,%2.1fn,p-evenName,p-cID,p-sc
21、ore0,p-score1,p-score2,p-score3,p-score4,p-netScore); p=p-next; p=head2; for(;p!=NULL;)fprintf(fp,%s,%s,%2.1f,%2.1f,%2.1f,%2.1f,%2.1f,%2.1fn,p-evenName,p-cID,p-score0,p-score1,p-score2,p-score3,p-score4,p-netScore); p=p-next; p=head3; for(;p!=NULL;)fprintf(fp,%s,%s,%2.1f,%2.1f,%2.1f,%2.1f,%2.1f,%2.1
22、fn,p-evenName,p-cID,p-score0,p-score1,p-score2,p-score3,p-score4,p-netScore); p=p-next; void Sput() /*分数输入函数*/FILE *fp; int i=0,j,k=0,pf=0,max,min; char eventN5; struct athlete *p1,*p2; struct score *head0=NULL,*po1,*po2; po1=po2=(struct score *)malloc(sizeof(struct score); system(cls); printf( Plat
23、form-Diving Scoring proceduresnn); printf( *n); printf( The result of the performn); printf( =n); printf( Input the scorennn); if (head=NULL)goto end; printf( Choose the perform(1.PD5;2.PD7;3.PD10):); while(pf=0|pf3) scanf(%d,&pf); switch(pf) case 1:strcpy(eventN,PD5);break; case 2:strcpy(eventN,PD7
24、);break; case 3:strcpy(eventN,PD10);break; default:printf( Your choose is not required,Enter again:); p1=head; do if(strcmp(eventN,p1-perform)=0) k=1;po1-netScore=0;max=0;min=10; strcpy(po1-cID,p1-cID); strcpy(po1-name,p1-name); strcpy(po1-evenName,p1-perform); strcpy(po1-team,p1-team); printf( The
25、athlete is %sn,po1-name); for(i=0;iscorei); while(po1-scorei10) printf( The score is not required,Enter again:); scanf(%f,&po1-scorei); if(po1-scoreimax)max=po1-scorei; if(po1-scoreiscorei; po1-netScore=po1-netScore+po1-scorei; po1-netScore=(po1-netScore-max-min)/3.0; if(head0=NULL)head0=po1; else p
26、o2-next=po1; po2=po1; po1=(struct score *)malloc(sizeof(struct score); p1=p1-next; while(p1-next!=NULL); po2-next=NULL; switch(pf) case 1:head1=head0;break; case 2:head2=head0;break; case 3:head3=head0;break; end: if(k=0)printf(n list null!n); else printf( Input the score Accomplishn); printf( Input any key to leave);getche();return;void Irevise() /*信息修改函数*/system(cls); printf( Platform-Diving Scoring proceduresnn); printf( *n); printf( Information of the athletesn); printf( =n); printf( Information revisennn); char Name15,correct15; int pj=0,pf=0; struct athlete *p;