1、 目录 1.需求分析: 2 功能要求: 2 性能需求: 2 2.概要设计: 2 1.存储结构设计: 3 2.流程图设计: 4 3.详细设计: 11 4.菜单窗口: 20 1.主菜单窗口 20 2. 输入各个项目成绩并存储文件 20 3. 统计各学校总分 21 4. 按学校编号排序输出 21 5. 按学校总分排序输出 21 6. 按男团体总分排序输出 22 7. 按女团体总分排序输出 22 8. 按学校编号查询学校某个项目情况 23 9. 按项目编号查询取得名次的学校 23 5.课程设计总结与体会: 23 1.需求分析: 任务:参加运动会有n个学校,
2、学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前前三名积分;前三名的积分分别为:5、3、2。(m、w<=20,n<=10) 功能要求: 1.可以输入各个学校、各项目、以及各项目前三名的数据信息; 2.能统计各学校总分、男子项目和女子项目总分; 3.可以按学校编号(或学校名称)、学校总分、男女团体总分排序输出; 4.可以按学校编号(或学校名称)查询学校某个项目的情况;可以按项目编号查询取得前三的学校。 性能需求 规定:输入数据形式和范围:10以内的整数(如果做得更好可以输入学校的名称和运动项目的名称) 输出形式
3、有中文提示,各学校分数为整形 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计。请在最后的上交资料中指明你用到的存储结构; 测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明; 2.概要设计: 1. 存储结构设计: 主菜单 1 2 3 4 5 6 7 8 0 输入各个项目成绩并存储文件 统计各学校总分 按学校编号排序输出 按学校总分排序输出 按男团体总分排序输出 按女团体总分排序输
4、出 按学校编号查询学校某个项目情况 按项目编号查询取得名次的学校 退出 1输入各个项目成绩并存储文件 输入男子项目总数m 输入女子项目总数w 输入参加运动会的学校总数n 男子项目 女子项目 输入项目:0返回主菜单界面 输入项目编号(如1) 输入项目编号(如m) 输入项目编号(如m+1) 输入项目编号(如m+n) 2.统计各学校的总分 显示:各学校的总分 退出:按enter键 3.按学校编号排序输出 输入学校编号 退出(返回菜单主界面):按enter 显示按学校排序输出结果
5、 返回到主界面 4.按学校总分排序输出 输入学校编号 退出(返回菜单主界面):按enter 显示按学校总分排序结果 返回到主界面 5.按男团体总分排序输出 输入学校编号 退出(返回菜单主界面):按enter 显示按学校编号排序结果 返回到主界面 6.按女团体总分排序输出 输入学校编号 退出(返回菜单主界面):按enter 显示按女团体总分排序结果 返回到主界面 7.按学校编号查询学校某个项目情况 输入要查询的学校编号 输入要查询的项目编号 退出(返回菜单主界面):按enter 显示要查询学校的某个项目的获奖情况 返回到主
6、界面 8.按项目编号查询取得名次的学校(前三名或前五名) 输入要查询的项目编号 退出(返回菜单主界面):按enter 显示某个项目编号的学校名次(前三或前五) 返回到主界面 0.退出 按任意键可以推出 2.流程程图设计: Main()函数流程图 开始 int t !g2||!g1 exit(1); system("cls"); 选择操作编号 1 2 3 4 5 6 7 8 9 Funct1()函数流程图 School *p1和Items *p2 !p1||!p2 exit(1); Y Printf();
7、 w<0||w>20 N Y Y Y Printf(“输入有误”) Printf(“输入有误”) Printf(“输入有误”) N N N n<0||n>20 m<0||m>20 输入前三名学校名称 结束 开始 Save()函数流程图 Funct2()函数流程图 Funct3()函数流程图 开始 int k; k<=g2->n printf("\t\t\t\t\t\t%d\t",k); p2=g2->b[k].firstitem; p2!=NULL printf("项目%d
8、得%d分 ",p2->item,p2->record); p2=p2->next; printf("\n"); k++; printf("\n"); 结束 Y Y N N Funct4()函数流程图 开始 int i=2,j,k; i<=g2->n printf("%d\t",k); system("pause"); 结束 Y N multiplex i++ k=1 k<=g2->n printf("%d \t\t%d\n",g2->b[k].school,g2->b[k].score); k++ N Y
9、 Funct5()函数流程图 开始 int i=2,j,k; i<=g2->n printf("%d\t",k); system("pause"); 结束 Y N multiplex i++ k=1 k<=g2->n printf("%d\t\t %d\n",g2->b[k].school,g2->b[k].boys); k++ N Y Funct6()函数流程图 Funct7()函数流程图 Funct8()函数流程图 开始 int i P2!=NULL; 结束 N printf("
10、\n");
printf(" 学校%d:得%d分 ",p1->school,p1->record);
Y
3.详细设计:
#include
11、chool; 学校编号 int record; 项目成绩 struct node1 *next; 链域 }Schools; typedef struct { int item; 项目编号 Schools *firstschool;
12、 链域指向链表中第一个结点 }ITEM; typedef struct { int z; 项目总数 ITEM a[MAX]; }ALLitems; typedef struct node2 { int item; 该学校获奖的项目 int record;
13、 项目成绩 struct node2 *next; 链域 }Items; typedef struct { int school; /*学校编号*/ int score; /*学校总分*/ int boys; /*男团体总分*/ int girls; /*女团体总分*/ Items *firstitem;
14、 链域指向链表中第一个获奖项目的结点 }SCHNode; typedef struct { int n; /* 学校总数 */ SCHNode b[MAX]; }ALLNode; ALLitems *g1; ALLNode *g2; void funct1(ALLitems *g1,ALLNode *g2) 输入各个项目成绩 { Schools *p1; Items *
15、p2; int i,k,m,w,h,x; p1=(Schools *)malloc(sizeof(Schools)); p2=(Items *)malloc(sizeof(Items)); if(!p1||!p2) exit(1); printf("\n "); printf(
16、"\n \n\n"); printf("\n ******输入各个项目信息 ****** \n\n"); printf(" 输入男子项目总数m:"); scanf("%d",&m); while(m<0||m>10) { printf(" 输入有误,m是10以内的整数,请重新输入:");
17、 scanf("%d",&m); } printf(" 输入女子项目总数w:"); scanf("%d",&w); while(w<0||w>10) { printf(" 输入有误,w是10以内的整数,请重新输入:"); scanf("%d",&w); } printf(" 输入参加运动会的学校总数n:"); sca
18、nf("%d",&g2->n); while(g2->n<0||g2->n>10) { printf(" 输入有误,n是10以内的整数,请重新输入:"); scanf("%d",&g2->n); } g1->z=m+w; printf(" 则项目编号为男子1-%d,女子%d-%d",m,m+1,g1->z); printf("\n\n ****记录运动会成
19、绩****"); printf("\n\n (输入0标志结束)\n"); for(k=1;k<=g1->z;k++) /* 对两个邻接表置初态 */ { g1->a[k].item=k; g1->a[k].firstschool=NULL; } for(k=1;k<=g2->n;k++) { g2->b[k].school=k; g2->b[k].firstitem=0; g2->b[k].s
20、core=0; g2->b[k].boys=0; g2->b[k].girls=0; } g2->b[0].score=0; g2->b[0].boys=0; g2->b[0].girls=0; while(i!=0) { printf("\n 项目:"); scanf("%d",&i); while(i<0||i>m+w) { printf("
21、 输入有误,无此项目编号,请重新输入数字:"); scanf("%d",&i); } { { } if(i!=0) { h=3; do{ printf(" 第%d名:学校(学校编号为数字)",h); scanf("%d",&x); whil
22、e(x<0||x>g2->n) { printf(" 输入有误,无此学校编号,请重新输入数字:"); scanf("%d",&x); } p1=(Schools *)malloc(sizeof(Schools)); p1->school=x; p2=(Items *)malloc(sizeof(Items)); p2->item=i; if(h==3) p2-
23、>record=p1->record=2; if(h==2) p2->record=p1->record=3; if(h==1) p2->record=p1->record=5; p1->next=g1->a[i].firstschool; g1->a[i].firstschool=p1; p2->next=g2->b[x].firstitem; g2->b[x].firstitem=p2;
24、 g2->b[x].score=g2->b[x].score+p2->record; 累计总分 if(i<=m) g2->b[x].boys=g2->b[x].boys+p2->record; 累计男团体总分 else g2->b[x].girls=g2->b[x].girls+p2->record; 累计女团体总分 h--; }while(x!=0&
25、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"); retu
26、rn; } if(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.\
27、n"); fclose(fp2); } void funct2(ALLNode *g2) 输出各学校总分 { int k; printf(" 学校编号\t 总分 \n"); for(k=1;k<=g2->n;k++) printf(" %d\t\t\t %d\n",k,g2->b[k].score); pri
28、ntf("\n"); system("pause"); printf(" 按任意键返回主菜单......"); getchar(); } void funct3(ALLNode *g2) 按学校编号排序输出 { int k; Items *p2; p2=(Items *)malloc(sizeof(Items)); printf("\n "); printf
29、"\n \n"); printf("\n\n ****** 按学校编号排序输出 ******\n"); printf(" 学校编号\t\t\t获奖情况 \n"); for(k=1;k<=g2->n;k++) { printf("\t\t\t\t\t\t%d\t",k); p2=g2->b[k].firstitem; while(p2!=NULL) { prin
30、tf("项目%d:得%d分 ",p2->item,p2->record); p2=p2->next; } printf("\n"); } printf("\n"); system("pause"); printf("按任意键返回主菜单......"); getchar(); } void funct4(ALLNode *g2) 按学校总分排序输出 { int i,j,k; Items *p2; pr
31、intf("\n "); printf("\n \n"); printf("\n\n ****** 按学校总分排序输出 ******\n"); printf(" 学校编号\t\t总分 \n"); printf("按1继续 \n "); scanf("%d",&k); //printf("输入要查询的项目编号:"); for(i=2;i<=g2->n;i++) { printf("%d\
32、t",k); p2=g2->b[k].firstitem; while(p2!=NULL) { printf("%d \t\t%d\n",g2->b[k].school,g2->b[k].score); p2=p2->next; } printf("\n"); g2->b[0].score=g2->b[i].score; g2->b[0].boys=g2->b[i].boys; g2->b[0].girls=g2->b[i].girls;
33、g2->b[0].school=g2->b[i].school;
j=i-1;
while(g2->b[0].score
34、 g2->b[j+1].score=g2->b[0].score; g2->b[j+1].boys=g2->b[0].boys; g2->b[j+1].girls=g2->b[0].girls; g2->b[j+1].school=g2->b[0].school; } for(k=1;k<=g2->n;k++) printf("%d \t\t%d\n",g2->b[k].school,g2->b[k].score); system("pause"); printf("按任意键返回主菜单...
35、"); getchar(); } void funct5(ALLNode *g2) 按男团体总分排序输出 { int i,j,k; Items *p2; p2=(Items *)malloc(sizeof(Items)); printf("\n "); printf("\n \n"); printf("\n\n ****** 按男团体总分排序输出
36、 ******\n"); printf("学校编号\t\t男团体总分 \n"); printf("按1继续 \n "); scanf("%d",&k); //printf("输入要查询的学校编号:"); for(i=2;i<=g2->n;i++) { printf("%d\t",k); p2=g2->b[k].firstitem; while(p2!=NULL) { printf("%d\t\t %d\n",g2->b[k].school,g2->b[k].boys)
37、
p2=p2->next;
}
printf("\n");
g2->b[0].score=g2->b[i].score;
g2->b[0].boys=g2->b[i].boys;
g2->b[0].girls=g2->b[i].girls;
g2->b[0].school=g2->b[i].school;
j=i-1;
while(g2->b[0].boys
38、b[j].score; g2->b[j+1].boys=g2->b[j].boys; g2->b[j+1].girls=g2->b[j].girls; g2->b[j+1].school=g2->b[j].school; j--; } g2->b[j+1].score=g2->b[0].score; g2->b[j+1].boys=g2->b[0].boys; g2->b[j+1].girls=g2->b[0].girls; g2->b
39、[j+1].school=g2->b[0].school; } for(k=1;k<=g2->n;k++) printf("%d\t\t %d\n",g2->b[k].school,g2->b[k].boys); system("pause"); // 暂停等待 printf("按任意键返回主菜单......"); getchar(); } void funct6(ALLNode *g2)
40、 按女团体总分排序输出 { int i,j,k; Items *p2; p2=(Items *)malloc(sizeof(Items)); printf("\n "); printf("\n \n"); printf("\n\n ****** 按女团体总分排序输出 ******\n"); printf("学校编号\t\t女团体总分 \n"); printf("按1继续 \n "); sca
41、nf("%d",&k); for(i=2;i<=g2->n;i++) { printf("%d\t",k); p2=g2->b[k].firstitem; while(p2!=NULL) { printf("%d\t\t %d\n",g2->b[k].school,g2->b[k].girls); p2=p2->next; } printf("\n"); g2->b[0].score=g2->b[i].score; g2->b[0].boys=g2
42、>b[i].boys;
g2->b[0].girls=g2->b[i].girls;
g2->b[0].school=g2->b[i].school;
j=i-1;
while(g2->b[0].girls
43、1].school=g2->b[j].school; j--; } g2->b[j+1].score=g2->b[0].score; g2->b[j+1].boys=g2->b[0].boys; g2->b[j+1].girls=g2->b[0].girls; g2->b[j+1].school=g2->b[0].school; } for(k=1;k<=g2->n;k++) printf("%d\t\t %d\n",g2->b[k].school,g
44、2->b[k].girls); system("pause"); printf("按任意键返回主菜单......"); getchar(); } void funct7(ALLNode *g2) 按学校编号查询学校某个项目情况 { int i,j; Items *p2; printf("\n "); printf("\n \n"); printf("\n ******
45、 按学校编号查询学校某个项目情况 ******\n"); printf(" 输入要查询的学校编号:"); scanf("%d",&i); printf(" 输入要查询的项目编号:"); scanf("%d",&j); p2=g2->b[i].firstitem; while(p2!=NULL) { if(p2->item==j) printf("
46、 学校编号:%d\t项目%d:得%d分\n",i,p2->item,p2->record); p2=p2->next; } printf("\n"); system("pause"); printf(" 按任意键返回主菜单......"); getchar(); } void funct8(ALLitems *g1) 按项目编号查询取得名次的学校 { in
47、t i; Schools *p1; printf("\n*** 按项目编号查询取得名次的学校 ***\n"); printf("输入要查询的项目编号:"); scanf("%d",&i); printf("项目编号\t\t\t取得名次的学校\n"); printf("%d\t",i); p1=g1->a[i].firstschool; while(p1!=NULL) { printf(" 学校%d:得%d分 ",p1->school,p1->record);
48、p1=p1->next; } printf("\n\n"); system("pause"); printf("按任意键返回主菜单......"); getchar(); } void main() { int t; g2=(ALLNode*)malloc(sizeof(ALLNode)); g1=(ALLitems*)malloc(sizeof(ALLitems)); if(!g2||!g1) exit(1); system("cls"); for(;;) {
49、 printf("\t\t \n"); printf("\t\t \n"); printf("\t\t \n"); printf("\t\t 运动会分数统计系统 \n"); printf("\t\t
50、 \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")






