数据结构—运动会分数统计_第1页
数据结构—运动会分数统计_第2页
数据结构—运动会分数统计_第3页
数据结构—运动会分数统计_第4页
数据结构—运动会分数统计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、软软件件 课课程程设设计计报报告告学生姓名:王晓楠学生姓名:王晓楠学院专业:电子信息工程学院专业:电子信息工程班级学号:班级学号:84020102 班班 2008040201052指导教师:李智慧指导教师:李智慧训练时间:训练时间:2010 年年 7 月月 12 日至日至 2010 年年 7 月月 24 日日软软 件件 设设 计计 任任 务务 问题描述问题描述 参加运动会的 n 个学校编号为 ln。比赛分成 m 个男子项目和 w 个女子项目,项目编号分别为 lm 和 m1mw。由于各项目参加人数差别较大,有些项目取前五名,得分顺序为 7,5,3,2,1;还有些项目只取前三名,得分顺序为 5,3

2、,2。写一个统计程序产生各种成绩单和得分报表。 基本要求基本要求 1产生各学校的成绩单,内容包括各校所取得的每项成绩的项目号、名次、姓名和得分;2. 产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分。 实现提示实现提示 可以假设 n20,m30,w20,姓名长度不超过 20 个字符。每个项目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并按名次顺序输入运动员姓名、校名和得分。一一. .题目分析题目分析这次课程设计题目是运动会的分数统计系统,它要求参加运动会的 n 个学校编号为 1n。比赛分成 m 个男子项目和 w 个女子项目,项目编号为 1m 和m+1m+w。由于

3、各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为 5,3,2。需要产生各学校的成绩单和团体总分报表。为了实现这个程序,调用了多个子函数。save 函数实现对数据的存储,getchar函数是从 stdin 流中读取字符,system 函数是向系统发出一个 DOS 命令程序中用到的 system(“pause” ) ;其功能是运行的时候就可以出现:“请按任意键继续” ,由于在这个从程序中的下一条命令是返回主菜单界面若不加一条命令得话,就会使显示的结果一闪而到主菜单界面就会看不清楚。程序中用到的 system(“cls”),其功能是清屏。mal

4、loc 函数的功能是内存分配如: g1=(ALLitems*)malloc(sizeof(ALLitems)g2=(ALLNode*)malloc(sizeof(ALLNode);就是给 g1 和 g2 指针分配内存地址空间大小。函数 fclose 的功能是关闭数据流,如程序中用到的 fclose(fp2)就是将 fp2 文件的数据流关闭,用在本程序的 save 函数中,当执行 funct1 输入信息保存后关闭当前信息流。程序中自定义的 funct1-8的功能分别是:funct1():输入各个项目成绩并存储文件 funct2():统计各学校总分 funct3():按学校编号排序输出 funct

5、4():按学校总分排序输出 funct5():按男团体总分排序输出 funct6():按女团体总分排序输出 funct7():按学校编号查询学校某个项目情况 funct8():按项目编号查询取得名次的学校 funct0():退出 最后是主函数 main()它是所有程序运行的入口。 目录目录:1 1. .需需求求分分析析:.4功能要求:.4性能需求:.42 2. .概概要要设设计计:.41.存储结构设计:.42.流程图设计:.63 3. .详详细细设设计计:.104.菜菜单单窗窗口口:.191.主菜单窗口.192. 输入各个项目成绩并存储文件.193. 统计各学校总分.224. 按学校编号排序输

6、出.235. 按学校总分排序输出.236. 按男团体总分排序输出.247. 按女团体总分排序输出.248. 按学校编号查询学校某个项目情况.259. 按项目编号查询取得名次的学校.2510 退出.255 5. .课课程程设设计计总总结结与与体体会会:.266 6. .致致谢谢:.261.1.需求分析:需求分析:任务:参加运动会有 n 个学校,学校编号为 1n.比赛分成 m 个男子项目,和 w 个女子项目.项目编号为男子 1.m,女子 m+1.m+w.不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m

7、=20,n=20)功能要求:功能要求:1.可以输入各个项目的前三名或前五名的成绩;2.能统计各学校总分;3.可以按学校编号、学校总分、男女团体总分排序输出;4.可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。规定:输入数据形式和范围:20 以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)性能需求:性能需求:输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。2.2.概要设计:概要设计:1.存储结构设

8、计:存储结构设计:主菜单123456780输入各个项目成绩并存储文件统计各学校总分按学校编号排序输出按学校总分排序输出按男团体总分排序输出按女团体总分排序输出按学校编号查询学校某个项目情况按项目编号查询取得名次的学校退出2.统计各学校的总分显示:各学校的总分退出:按 enter 键3.按学校编号排序输出1 输入各个项目成绩并存储文件输入男子项目总数m输入女子项目总数w输入参加运动会的学校总数n男子项目女子项目输入项目:0返回主菜单界面输入项目编号(如1)输入项目编号(如m)输入项目编号(如m+1)输入项目编号(如m+n)选择运动会项目 1.前三名 2.前五名输入第五名(或第三名):学校(编号为

9、:):输入第一名学校(编号为:):选择运动会项目 m.前三名 2.前五名输入第五名(或第三名):学校(编号为:):输入第一名学校(编号为:):选择运动会项目(m+1.)前三名 2.前五名输入第五名(或第三名):学校(编号为:): 输入第一名学校(编号为:):选择运动会项目(m+1.)前三名 2.前五名输入第五名(或第三名):学校(编号为:):输入第一名学校(编号为:):输入学校编号退出(返回菜单主界面):按 enter显示按学校排序输出结果返回到主界面4.按学校总分排序输出输入学校编号退出(返回菜单主界面):按 enter显示按学校总分排序结果返回到主界面5.按男团体总分排序输出输入学校编号退

10、出(返回菜单主界面):按 enter显示按学校编号排序结果返回到主界面6.按女团体总分排序输出输入学校编号退出(返回菜单主界面):按 enter显示按女团体总分排序结果返回到主界面7.按学校编号查询学校某个项目情况输入要查询的学校编号输入要查询的项目编号退出(返回菜单主界面):按 enter显示要查询学校的某个项目的获奖情况返回到主界面8.按项目编号查询取得名次的学校(前三名或前五名)输入要查询的项目编号退出(返回菜单主界面):按 enter显示某个项目编号的学校名次(前三或前五)返回到主界面0.退出按任意键可以推出2.流程图设计:流程图设计: Main()函数流程图 开始int t!g2|!

11、g1exit(1);system(cls);选择操作编号123456789School *p1 和和 Items *p2!p1|!p2exit(1) ;YPrintf()() ;w20NYYYPrintf(“输入有误输入有误”)Printf(“输入有误输入有误”)Printf(“输入有误输入有误”)NNNY请选择请选择 1.前三名前三名 2.前五名前五名!1&!2Printf(“输入有误请重新输入输入有误请重新输入” )n20m20!1输入前三名学校名称输入前五名学校名称输入工程项目名称(如:1)0YYNNN结束开始Funct1()函数流程图()函数流程图 开始 int k; kn;

12、printf(%dttt ,k,g2-bk.score); k+ Printf(“n”); 结束 开始 int i=2,j,k; in printf(%dt,k); system(pause); 结束 Y N multiplex i+ k=1 kn printf(%d tt%dn,g2-bk.school,g2-bk.score); k+ N Y 开始 int i=2,j,k; in printf(%dt,k); system(pause); 结束 Y N multiplex i+ k=1 kn printf(%d tt%dn,g2-bk.school,g2-bk.score); k+ N Y

13、 Save()函数流程图 Funct2()函数流程图 funct3()函数流程图 funct4()函数流程图 开始 int i=2,j,k; in printf(%dt,k); system(pause); 结束 Y N multiplex i+ k=1 kn printf(%dtt %dn,g2-bk.school,g2-bk.boys); k+ N Y 开始 int i=2,j,k; in printf(%dt,k); system(pause); 结束 Y N multiplex i+ k=1 kn printf(%dtt %dn,g2-bk.school,g2-bk.girls); k

14、+ N Y 开始 int i=2,j,k; P2!=NULL; 结束 Y N P2item,p2-record); p2=p2-next; printf(n); Y N 开始 int i P2!=NULL; 结束 N printf(n); printf( 学校%d:得%d 分 ,p1-school,p1-record); Y Funct5()函数流程图 Funct6()函数流程图 funct7()函数流程图 funct8()函数流程图3.3.详细设计:详细设计:#include #include #include #include /#include /*屏幕操作函数*/ #define MA

15、X 50 /#define NULL 0 typedef struct node1 int school; /*学校编号*/ int record; /*项目成绩*/ struct node1 *next; /*链域*/ Schools; typedef struct int item; /*项目编号*/ Schools *firstschool; /*链域指向链表中第一个结点*/ ITEM; typedef struct int z; /* 项目总数 */ ITEM aMAX; ALLitems; typedef struct node2 int item; /*该学校获奖的项目*/ int

16、 record; /*项目成绩*/ struct node2 *next; /*链域*/ Items; typedef struct int school; /*学校编号*/ int score; /*学校总分*/ int boys; /*男团体总分*/ int girls; /*女团体总分*/ Items *firstitem; /*链域指向链表中第一个获奖项目的结点*/ SCHNode; typedef struct int n; /* 学校总数 */ SCHNode bMAX; ALLNode; ALLitems *g1; ALLNode *g2; void funct1(ALLitem

17、s *g1,ALLNode *g2) /* 输入各个项目成绩 */ Schools *p1; Items *p2; int i,j,k,m,w,h,x; p1=(Schools *)malloc(sizeof(Schools); /添加的 p2=(Items *)malloc(sizeof(Items); if(!p1|!p2) exit(1); /添加的 printf(n 电子信息工程系 08 电子信息工程 2 班运动会分数统计系统); printf(n (王晓楠) nn); printf(n *输入各个项目信息 * nn); printf( 输入男子项目总数 m:); scanf(%d,&

18、amp;m); if(m20) printf( 输入有误,m 是 20 以内的整数,请重新输入:); scanf(%d,&m); printf( 输入女子项目总数 w:); scanf(%d,&w); if(w20) printf( 输入有误,w 是 20 以内的整数,请重新输入:); scanf(%d,&w); printf( 输入参加运动会的学校总数 n:); scanf(%d,&g2-n); if(g2-nn20) printf( 输入有误,n 是 20 以内的整数,请重新输入:); scanf(%d,&g2-n); g1-z=m+w; print

19、f( 则项目编号为男子 1-%d,女子%d-%d,m,m+1,g1-z); printf(nn *记录运动会成绩*); printf(nn (输入 0 标志结束)n); for(k=1;kz;k+) /* 对两个邻接表置初态 */ g1-ak.item=k; g1-ak.firstschool=NULL; for(k=1;kn;k+) g2-bk.school=k; g2-bk.firstitem=0; g2-bk.score=0; g2-bk.boys=0; g2-bk.girls=0; g2-b0.score=0; g2-b0.boys=0; g2-b0.girls=0; while(i!

20、=0) printf(n 项目:); scanf(%d,&i); if(i!=0) printf( 1.前三名 2.前五名n); printf( 请选择:); scanf(%d,&j); if(j!=1&j!=2) printf( 输入有误,请重新选择:); scanf(%d,&j); if(j=1) /* 该项目只有前三名时执行此语句 */ h=3; do printf( 第%d 名:学校(学校编号为数字),h); scanf(%d,&x); / p1=(Schools *)malloc(sizeof(Schools); p1-school=x; /p

21、2=(Items *)malloc(sizeof(Items); 生成新节点,建表用的往结点赋值 p2-item=i; if(h=3) p2-record=p1-record=2; if(h=2) p2-record=p1-record=3; if(h=1) p2-record=p1-record=5; p1-next=g1-ai.firstschool; g1-ai.firstschool=p1; p2-next=g2-bx.firstitem; g2-bx.firstitem=p2; g2-bx.score=g2-bx.score+p2-record; /* 累计总分 */ if(ibx.

22、boys=g2-bx.boys+p2-record; /* 累计男团体总分 */ else g2-bx.girls=g2-bx.girls+p2-record; /* 累计女团体总分 */ h-; while(x!=0&h!=0); if(j=2) /* 该项目有前五名时执行此语句 */ h=5; do printf( 第%d 名:学校(学校编号为数字),h); scanf(%d,&x); p1=(Schools *)malloc(sizeof(Schools); p1-school=x; p2=(Items *)malloc(sizeof(Items); p2-item=i;

23、 if(h=5) p2-record=p1-record=1; if(h=4) p2-record=p1-record=2; if(h=3) p2-record=p1-record=3; if(h=2) p2-record=p1-record=5; if(h=1) p2-record=p1-record=7; p1-next=g1-ai.firstschool; g1-ai.firstschool=p1; p2-next=g2-bx.firstitem; g2-bx.firstitem=p2; g2-bx.score=g2-bx.score+p2-record; /* 累计总分 */ if(i

24、bx.boys=g2-bx.boys+p2-record; /* 累计男团体总分 */ else g2-bx.girls=g2-bx.girls+p2-record; /* 累计女团体总分 */ h-; while(x!=0&h!=0); void save() /* 存储数据文件 */ FILE *fp1,*fp2; fp1=(FILE *)malloc(sizeof(FILE); fp2=(FILE *)malloc(sizeof(FILE); if(fp1=fopen(sports1,wb)=NULL) printf(cannot open file.n); return; if

25、(fwrite(g1,sizeof(ALLitems),1,fp1)!=1) printf(file write error.n); fclose(fp1); if(fp2=fopen(sports2,wb)=NULL) printf(cannot open file.n); return; if(fwrite(g2,sizeof(ALLNode),1,fp2)!=1) printf(file write error.n); fclose(fp2); void funct2(ALLNode *g2) /* 输出各学校总分 */ int k; printf(n 电子信息工程系 08 电子信息工程

26、 2 班运动会分数统计系统); printf(n (王晓楠)n); printf(nn * 输出各学校总分 *n); printf( 学校编号t 总分 n); for(k=1;kn;k+) printf( %dttt %dn,k,g2-bk.score); printf(n); system(pause); printf( 按任意键返回主菜单.); getchar(); void funct3(ALLNode *g2) /* 按学校编号排序输出 */ int k; Items *p2; p2=(Items *)malloc(sizeof(Items); printf(n 电子信息工程系 08

27、电子信息工程 2 班运动会分数统计系统); printf(n (王晓楠)n); printf(nn * 按学校编号排序输出 *n); printf( 学校编号ttt 获奖情况 n); scanf(%d,&k); /printf(输入要查询的 xuexiao 编号:); for(k=1;kn;k+) printf(tttttt%dt,k); p2=g2-bk.firstitem; while(p2!=NULL) printf(项目%d:得%d 分 ,p2-item,p2-record); p2=p2-next; printf(n); printf(n); system(pause); p

28、rintf(按任意键返回主菜单.); getchar(); void funct4(ALLNode *g2) /* 按学校总分排序输出 */ int i,j,k; Items *p2; printf(n 电子信息工程系 08 电子信息工程 2 班运动会分数统计系统); printf(n (王晓楠)n); printf(nn * 按学校总分排序输出 *n); printf( 学校编号tt 总分 n); scanf(%d,&k); /printf(输入要查询的项目编号:); for(i=2;in;i+) printf(%dt,k); p2=g2-bk.firstitem; while(p2

29、!=NULL) printf(%d tt%dn,g2-bk.school,g2-bk.score); p2=p2-next; printf(n); g2-b0.score=g2-bi.score; g2-b0.boys=g2-bi.boys; g2-b0.girls=g2-bi.girls; g2-b0.school=g2-bi.school; j=i-1; while(g2-b0.scorebj.score&j0) g2-bj+1.score=g2-bj.score; g2-bj+1.boys=g2-bj.boys; g2-bj+1.girls=g2-bj.girls; g2-bj+

30、1.school=g2-bj.school; j-; g2-bj+1.score=g2-b0.score; g2-bj+1.boys=g2-b0.boys; g2-bj+1.girls=g2-b0.girls; g2-bj+1.school=g2-b0.school; for(k=1;kn;k+) printf(%d tt%dn,g2-bk.school,g2-bk.score); system(pause); printf(按任意键返回主菜单.); getchar(); void funct5(ALLNode *g2) /* 按男团体总分排序输出 */ int i,j,k; Items *p

31、2; p2=(Items *)malloc(sizeof(Items); printf(n 电子信息工程系 08 电子信息工程 2 班运动会分数统计系统); printf(n (王晓楠)n); printf(nn * 按男团体总分排序输出 *n); printf(学校编号tt 男团体总分 n); scanf(%d,&k); /printf(输入要查询的学校编号:); for(i=2;in;i+) /添加的程序段 printf(%dt,k); p2=g2-bk.firstitem; while(p2!=NULL) printf(%dtt %dn,g2-bk.school,g2-bk.bo

32、ys); p2=p2-next; printf(n); /添加的程序段 g2-b0.score=g2-bi.score; g2-b0.boys=g2-bi.boys; g2-b0.girls=g2-bi.girls; g2-b0.school=g2-bi.school; j=i-1; while(g2-b0.boysbj.boys&j0) g2-bj+1.score=g2-bj.score; g2-bj+1.boys=g2-bj.boys; g2-bj+1.girls=g2-bj.girls; g2-bj+1.school=g2-bj.school; j-; g2-bj+1.score

33、=g2-b0.score; g2-bj+1.boys=g2-b0.boys; g2-bj+1.girls=g2-b0.girls; g2-bj+1.school=g2-b0.school; for(k=1;kn;k+) printf(%dtt %dn,g2-bk.school,g2-bk.boys); system(pause); / 暂停等待 printf(按任意键返回主菜单.); getchar(); void funct6(ALLNode *g2) /* 按女团体总分排序输出 */ int i,j,k; Items *p2; p2=(Items *)malloc(sizeof(Items

34、); printf(n 电子信息工程系 08 电子信息工程 2 班运动会分数统计系统); printf(n (王晓楠)n); printf(nn * 按女团体总分排序输出 *n); printf(学校编号tt 女团体总分 n); scanf(%d,&k); / printf(输入要查询的项目编号:); for(i=2;in;i+) printf(%dt,k); p2=g2-bk.firstitem; while(p2!=NULL) printf(%dtt %dn,g2-bk.school,g2-bk.girls); p2=p2-next; printf(n); g2-b0.score=

35、g2-bi.score; g2-b0.boys=g2-bi.boys; g2-b0.girls=g2-bi.girls; g2-b0.school=g2-bi.school; j=i-1; while(g2-b0.girlsbj.girls&j0) g2-bj+1.score=g2-bj.score; g2-bj+1.boys=g2-bj.boys; g2-bj+1.girls=g2-bj.girls; g2-bj+1.school=g2-bj.school; j-; g2-bj+1.score=g2-b0.score; g2-bj+1.boys=g2-b0.boys; g2-bj+1

36、.girls=g2-b0.girls; g2-bj+1.school=g2-b0.school; for(k=1;kn;k+) printf(%dtt %dn,g2-bk.school,g2-bk.girls); system(pause); printf(按任意键返回主菜单.); getchar(); void funct7(ALLNode *g2) /* 按学校编号查询学校某个项目情况 */ int i,j; Items *p2; printf(n 电子信息工程系 08 电子信息工程 2 班运动会分数统计系统); printf(n (王晓楠)n); printf(n * 按学校编号查询学校

37、某个项目情况 *n); printf( 输入要查询的学校编号:); scanf(%d,&i); printf( 输入要查询的项目编号:); scanf(%d,&j); p2=g2-bi.firstitem; while(p2!=NULL) if(p2-item=j) printf( 学校编号:%dt 项目%d:得%d 分n,i,p2-item,p2-record); p2=p2-next; printf(n); system(pause); printf( 按任意键返回主菜单.); getchar(); void funct8(ALLitems *g1) /* 按项目编号查询取

38、得名次的学校 */ int i; Schools *p1; printf(n* 按项目编号查询取得名次的学校 *n); printf(输入要查询的项目编号:); scanf(%d,&i); printf(项目编号ttt 取得名次的学校n); printf(%dt,i); p1=g1-ai.firstschool; while(p1!=NULL) printf( 学校%d:得%d 分 ,p1-school,p1-record); p1=p1-next; printf(nn); system(pause); printf(按任意键返回主菜单.); getchar(); void main(

39、) int t; / ALLitems *g1; / ALLNode *g2; g2=(ALLNode*)malloc(sizeof(ALLNode); g1=(ALLitems*)malloc(sizeof(ALLitems); if(!g2|!g1) exit(1); /textcolor(WHITE); /textbackground(BLUE); /clrscr(); system(cls); for(;) printf(tt n);printf(tt 电子信息工程系 08 电子信息工程 2 班 n); printf(tt* * * * * * * * * * * * * * * *

40、* * * * * * *n); printf(tt 运动会分数统计系统 n); printf(tt* * * * * * * * * * * * * * * * * * * * * * *n); printf(t 难t* 1.输入各个项目成绩并存储文件 *t 欢n); printf(t 免t* 2.统计各学校总分 *t 迎n); printf(t 有t* 3.按学校编号排序输出 *t 大n); printf(t 不t* 4.按学校总分排序输出 *t 家n); printf(t 足t* 5.按男团体总分排序输出 *t 指n); printf(t 之t* 6.按女团体总分排序输出 *t 点n);

41、 printf(t 处t* 7.按学校编号查询学校某个项目情况 *t n); printf(tt* 8.按项目编号查询取得名次的学校 *n); printf(tt* 0.退出 *n); printf(tt* * * * * * * * * * * * * * * * * * * * * * *n); printf(tt n); printf(tt n); printf(tt 设计人: 王晓楠 n); printf(tt n); printf(tt n); printf(tt 请选择(0-8):); loop:scanf(%d,&t); /clrscr(); system(cls); s

42、witch(t) case 1:funct1(g1,g2);save();break; case 2:funct2(g2);break; case 3:funct3(g2);break; case 4:funct4(g2);break; case 5:funct5(g2);break; case 6:funct6(g2);break; case 7:funct7(g2);break; case 8:funct8(g1);break; case 0:exit(0); default: printf(输入有误,请重新选择:); goto loop; /clrscr(); system(cls); 4.菜单窗口:菜单窗口:1.主菜单窗口主菜单窗口2. 输入各个项目成绩并存储文件输入各个项目成绩并存储文件请选择(08):1 进入输入各个项目成绩并存储文件1.输入男子项目总数 m;3 2.输入男子项目总数 m;3 3.输入参加运动会的学校总数.输入 项目:1 请选择 1(1.前三名 2.前五名)第 3 名:学校3第 2 名:学校2第 1 名:学校1项目:2 请选择 1(1.前三名 2.前五名)第 3 名:学校1第 2 名:学校2第 1 名:学校3项目:3 请选择 1(1.前三名

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论