数据结构课程设计运动会分数统计系统完整报告word文档.doc
《数据结构课程设计运动会分数统计系统完整报告word文档.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计运动会分数统计系统完整报告word文档.doc(26页珍藏版)》请在冰点文库上搜索。
《数据结构》
课程设计
专业:
班级:
姓名:
指导教师:
2011年6月28日
目录
题目 1
时间 1
分析 1
程序要求 2
数据结构设计 2
1.概述 2
2.关键算法 3
3.查询操作 4
详细代码 6
测试结果 18
1.主菜单窗口 18
3.统计各学校总分 19
4.按学校编号排序输出 20
5.按学校总分排序输出 20
6.按男团体总分排序输出 21
7.按女团体总分排序输出 21
8.按学校编号查询学校某个项目情况 22
9.按项目编号查询取得名次的学校 22
测试非法数据 22
课程设计总结 26。
运动会分数统计
任务:
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:
7、5、3、2、1,前三名的积分分别为:
5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20,)
功能要求:
1)可以输入各个项目的前三名或前五名的成绩;
2)能统计各学校总分,
3)可以按学校编号或名称、学校总分、男女团体总分排序输出;
4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
5)数据存入文件并能随时查询
6)规定:
输入数据形式和范围:
可以输入学校的名称,运动项目的名称
输出形式:
有中文提示,各学校分数为整形;
界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求;
存储结构:
学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:
要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明;
时间:
2011年6月22日—2011年6月28日星期二
a)需求分析
程序功能:
系统主要用于运动会分数统计方案;
输入方式:
键盘输入整形数据
输出方式:
屏幕显示
用户界面:
中文菜单提示操作
存储方式:
存储结构为链表
b)设计概要
本程序中学校的存储结构为链表:
Prevschool1next
头结点
Prevschool(最后)next
…………
……
school类为:
classschool:
publicathlete/*学校*/
{
public:
intcount;/*学校获奖数*/
intserial;/*学校编号*/
intmenscore;/*男选手总分*/
intwomenscore;/*女选手总分*/
inttotalscore;/*总分*/
athleteath[MaxSize];/*获奖运动员信息数组,包括分数,名次,项目*/
school*prev;//前指针
school*next;//后指针
};
部分主要的函数:
添加操作add(school*&head)
查询操作checkFunc(school*head,int&n)
文件保存save(school*head)
总分快速排序tquicksort(vector&v,intfirst,intlast)
总分基数排序tbaseSort(vector&v,intd)
关键算法:
{……
添加项目号
for(i=1;i<=n;i++)
{输入第i名运动员的学校编号temp
while(first!
=head) //遍历链表,直到找到编号为serial的学校所在结点,或first指向表头head
{ if(first->serial==要添加的编号)
(first->ath[first->count]).item=要添加的项目号;
(first->ath[first->count]).range=i(名次)
First指向的学校的项目加一;
更新总分
break; }
first=first->next;
……}
c) 详细设计
开始
输入项目编号temp
是数字
N
Y
0NY输出“项目不存在”学校遍历结束temp存在YNNextschoolNtemp是奇数NY取5名取3名输入获奖的学校编号se1NY项目号、名次、运动员名字添进学校所在结点Y继续添加YN结束查询操作: while(first!=head){……if(输入的项目编号==学校第i位运动员的项目){ 把第i位运动员的项目,学校编号、名次、得分信息压入向量; }…… } first=first->next;……输出向量中的内容 //按学校编号顺序输出所有参赛学校运动会成绩voidserialSort(vector&v){ for(inti=0;i { cout<<*v[i]; }}1.按学校编号统计2.按学校名次统计3.按男团总分统计4.按女团总分统计5.返回查询菜单6.返回主菜单1.所有学校总分统计表2.学校成绩查询3.项目情况查询4.返回主菜单 详细代码:#include#include#include#include//#include/*屏幕操作函数*/#defineMAX50//#defineNULL0typedefstructnode1{intschool;/*学校编号*/intrecord;/*项目成绩*/structnode1*next;/*链域*/}Schools;typedefstruct{intitem;/*项目编号*/Schools*firstschool;/*链域指向链表中第一个结点*/}ITEM;typedefstruct{intz;/*项目总数*/ITEMa[MAX];}ALLitems;typedefstructnode2{intitem;/*该学校获奖的项目*/intrecord;/*项目成绩*/structnode2*next;/*链域*/}Items;typedefstruct{intschool;/*学校编号*/intscore;/*学校总分*/intboys;/*男团体总分*/intgirls;/*女团体总分*/Items*firstitem;/*链域指向链表中第一个获奖项目的结点*/}SCHNode;typedefstruct{intn;/*学校总数*/SCHNodeb[MAX];}ALLNode;ALLitems*g1;ALLNode*g2;voidfunct1(ALLitems*g1,ALLNode*g2){Schools*p1;Items*p2;inti,j,k,m,w,h,x;p1=(Schools*)malloc(sizeof(Schools));p2=(Items*)malloc(sizeof(Items));if(!p1||!p2) exit(1);\n\n");printf("\n******输入各个项目信息******\n\n");printf("输入男子项目总数m:");scanf("%d",&m);if(m<0||m>20){printf("输入有误,m是20以内的整数,请重新输入:");scanf("%d",&m);}printf("输入女子项目总数w:");scanf("%d",&w);if(w<0||w>20){printf("输入有误,w是20以内的整数,请重新输入:");scanf("%d",&w);}printf("输入参加运动会的学校总数n:");scanf("%d",&g2->n);if(g2->n<0||g2->n>20){printf("输入有误,n是20以内的整数,请重新输入:");scanf("%d",&g2->n);}g1->z=m+w;printf("则项目编号为男子1-%d,女子%d-%d",m,m+1,g1->z);printf("\n\n****记录运动会成绩****");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].score=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);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;p2=(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->a[i].firstschool;g1->a[i].firstschool=p1;p2->next=g2->b[x].firstitem;g2->b[x].firstitem=p2;g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/elseg2->b[x].girls=g2->b[x].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;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->a[i].firstschool;g1->a[i].firstschool=p1;p2->next=g2->b[x].firstitem;g2->b[x].firstitem=p2;g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/elseg2->b[x].girls=g2->b[x].girls+p2->record;/*累计女团体总分*/h--;}while(x!=0&&h!=0);}}}}voidsave(){FILE*fp1,*fp2;fp1=(FILE*)malloc(sizeof(FILE));fp2=(FILE*)malloc(sizeof(FILE));if((fp1=fopen("sports1","wb"))==NULL){printf("cannotopenfile.\n");return;}if(fwrite(g1,sizeof(ALLitems),1,fp1)!=1)printf("filewriteerror.\n");fclose(fp1);if((fp2=fopen("sports2","wb"))==NULL){printf("cannotopenfile.\n");return;}if(fwrite(g2,sizeof(ALLNode),1,fp2)!=1)printf("filewriteerror.\n");fclose(fp2);}voidfunct2(ALLNode*g2)/*输出各学校总分*/{intk;printf("\n\n******输出各学校总分******\n");printf("学校编号\t总分\n");for(k=1;k<=g2->n;k++)printf("%d\t\t\t%d\n",k,g2->b[k].score);printf("\n");system("pause");printf("按任意键返回主菜单......");getchar();}voidfunct3(ALLNode*g2)/*按学校编号排序输出*/{intk;Items*p2;p2=(Items*)malloc(sizeof(Items));printf("\n\n******按学校编号排序输出******\n");printf("学校编号\t\t\t获奖情况\n");scanf("%d",&k);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){printf("项目%d:得%d分",p2->item,p2->record);p2=p2->next;}printf("\n");}printf("\n");system("pause");printf("按任意键返回主菜单......");getchar();}voidfunct4(ALLNode*g2)/*按学校总分排序输出*/{inti,j,k;Items*p2;printf("\n\n******按学校总分排序输出******\n");printf("学校编号\t\t总分\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].score);p2=p2->next;}printf("\n"); g2->b[0].score=g2->b[i].score;g2->b[0].boys=g2->b[i].boys;
输出“项目不存在”
学校遍历结束
temp存在
Nextschool
temp是奇数
取5名
取3名
输入获奖的学校编号se
1NY项目号、名次、运动员名字添进学校所在结点Y继续添加YN结束查询操作: while(first!=head){……if(输入的项目编号==学校第i位运动员的项目){ 把第i位运动员的项目,学校编号、名次、得分信息压入向量; }…… } first=first->next;……输出向量中的内容 //按学校编号顺序输出所有参赛学校运动会成绩voidserialSort(vector&v){ for(inti=0;i { cout<<*v[i]; }}1.按学校编号统计2.按学校名次统计3.按男团总分统计4.按女团总分统计5.返回查询菜单6.返回主菜单1.所有学校总分统计表2.学校成绩查询3.项目情况查询4.返回主菜单 详细代码:#include#include#include#include//#include/*屏幕操作函数*/#defineMAX50//#defineNULL0typedefstructnode1{intschool;/*学校编号*/intrecord;/*项目成绩*/structnode1*next;/*链域*/}Schools;typedefstruct{intitem;/*项目编号*/Schools*firstschool;/*链域指向链表中第一个结点*/}ITEM;typedefstruct{intz;/*项目总数*/ITEMa[MAX];}ALLitems;typedefstructnode2{intitem;/*该学校获奖的项目*/intrecord;/*项目成绩*/structnode2*next;/*链域*/}Items;typedefstruct{intschool;/*学校编号*/intscore;/*学校总分*/intboys;/*男团体总分*/intgirls;/*女团体总分*/Items*firstitem;/*链域指向链表中第一个获奖项目的结点*/}SCHNode;typedefstruct{intn;/*学校总数*/SCHNodeb[MAX];}ALLNode;ALLitems*g1;ALLNode*g2;voidfunct1(ALLitems*g1,ALLNode*g2){Schools*p1;Items*p2;inti,j,k,m,w,h,x;p1=(Schools*)malloc(sizeof(Schools));p2=(Items*)malloc(sizeof(Items));if(!p1||!p2) exit(1);\n\n");printf("\n******输入各个项目信息******\n\n");printf("输入男子项目总数m:");scanf("%d",&m);if(m<0||m>20){printf("输入有误,m是20以内的整数,请重新输入:");scanf("%d",&m);}printf("输入女子项目总数w:");scanf("%d",&w);if(w<0||w>20){printf("输入有误,w是20以内的整数,请重新输入:");scanf("%d",&w);}printf("输入参加运动会的学校总数n:");scanf("%d",&g2->n);if(g2->n<0||g2->n>20){printf("输入有误,n是20以内的整数,请重新输入:");scanf("%d",&g2->n);}g1->z=m+w;printf("则项目编号为男子1-%d,女子%d-%d",m,m+1,g1->z);printf("\n\n****记录运动会成绩****");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].score=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);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;p2=(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->a[i].firstschool;g1->a[i].firstschool=p1;p2->next=g2->b[x].firstitem;g2->b[x].firstitem=p2;g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/elseg2->b[x].girls=g2->b[x].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;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->a[i].firstschool;g1->a[i].firstschool=p1;p2->next=g2->b[x].firstitem;g2->b[x].firstitem=p2;g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/elseg2->b[x].girls=g2->b[x].girls+p2->record;/*累计女团体总分*/h--;}while(x!=0&&h!=0);}}}}voidsave(){FILE*fp1,*fp2;fp1=(FILE*)malloc(sizeof(FILE));fp2=(FILE*)malloc(sizeof(FILE));if((fp1=fopen("sports1","wb"))==NULL){printf("cannotopenfile.\n");return;}if(fwrite(g1,sizeof(ALLitems),1,fp1)!=1)printf("filewriteerror.\n");fclose(fp1);if((fp2=fopen("sports2","wb"))==NULL){printf("cannotopenfile.\n");return;}if(fwrite(g2,sizeof(ALLNode),1,fp2)!=1)printf("filewriteerror.\n");fclose(fp2);}voidfunct2(ALLNode*g2)/*输出各学校总分*/{intk;printf("\n\n******输出各学校总分******\n");printf("学校编号\t总分\n");for(k=1;k<=g2->n;k++)printf("%d\t\t\t%d\n",k,g2->b[k].score);printf("\n");system("pause");printf("按任意键返回主菜单......");getchar();}voidfunct3(ALLNode*g2)/*按学校编号排序输出*/{intk;Items*p2;p2=(Items*)malloc(sizeof(Items));printf("\n\n******按学校编号排序输出******\n");printf("学校编号\t\t\t获奖情况\n");scanf("%d",&k);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){printf("项目%d:得%d分",p2->item,p2->record);p2=p2->next;}printf("\n");}printf("\n");system("pause");printf("按任意键返回主菜单......");getchar();}voidfunct4(ALLNode*g2)/*按学校总分排序输出*/{inti,j,k;Items*p2;printf("\n\n******按学校总分排序输出******\n");printf("学校编号\t\t总分\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].score);p2=p2->next;}printf("\n"); g2->b[0].score=g2->b[i].score;g2->b[0].boys=g2->b[i].boys;
项目号、名次、运动员名字添进学校所在结点
继续添加
结束
查询操作:
=head)
if(输入的项目编号==学校第i位运动员的项目)
把第i位运动员的项目,学校编号、名次、得分信息压入向量;
}……
}
输出向量中的内容
//按学校编号顺序输出所有参赛学校运动会成绩
voidserialSort(vector&v)
for(inti=0;i { cout<<*v[i]; }}1.按学校编号统计2.按学校名次统计3.按男团总分统计4.按女团总分统计5.返回查询菜单6.返回主菜单1.所有学校总分统计表2.学校成绩查询3.项目情况查询4.返回主菜单 详细代码:#include#include#include#include//#include/*屏幕操作函数*/#defineMAX50//#defineNULL0typedefstructnode1{intschool;/*学校编号*/intrecord;/*项目成绩*/structnode1*next;/*链域*/}Schools;typedefstruct{intitem;/*项目编号*/Schools*firstschool;/*链域指向链表中第一个结点*/}ITEM;typedefstruct{intz;/*项目总数*/ITEMa[MAX];}ALLitems;typedefstructnode2{intitem;/*该学校获奖的项目*/intrecord;/*项目成绩*/structnode2*next;/*链域*/}Items;typedefstruct{intschool;/*学校编号*/intscore;/*学校总分*/intboys;/*男团体总分*/intgirls;/*女团体总分*/Items*firstitem;/*链域指向链表中第一个获奖项目的结点*/}SCHNode;typedefstruct{intn;/*学校总数*/SCHNodeb[MAX];}ALLNode;ALLitems*g1;ALLNode*g2;voidfunct1(ALLitems*g1,ALLNode*g2){Schools*p1;Items*p2;inti,j,k,m,w,h,x;p1=(Schools*)malloc(sizeof(Schools));p2=(Items*)malloc(sizeof(Items));if(!p1||!p2) exit(1);\n\n");printf("\n******输入各个项目信息******\n\n");printf("输入男子项目总数m:");scanf("%d",&m);if(m<0||m>20){printf("输入有误,m是20以内的整数,请重新输入:");scanf("%d",&m);}printf("输入女子项目总数w:");scanf("%d",&w);if(w<0||w>20){printf("输入有误,w是20以内的整数,请重新输入:");scanf("%d",&w);}printf("输入参加运动会的学校总数n:");scanf("%d",&g2->n);if(g2->n<0||g2->n>20){printf("输入有误,n是20以内的整数,请重新输入:");scanf("%d",&g2->n);}g1->z=m+w;printf("则项目编号为男子1-%d,女子%d-%d",m,m+1,g1->z);printf("\n\n****记录运动会成绩****");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].score=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);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;p2=(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->a[i].firstschool;g1->a[i].firstschool=p1;p2->next=g2->b[x].firstitem;g2->b[x].firstitem=p2;g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/elseg2->b[x].girls=g2->b[x].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;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->a[i].firstschool;g1->a[i].firstschool=p1;p2->next=g2->b[x].firstitem;g2->b[x].firstitem=p2;g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/elseg2->b[x].girls=g2->b[x].girls+p2->record;/*累计女团体总分*/h--;}while(x!=0&&h!=0);}}}}voidsave(){FILE*fp1,*fp2;fp1=(FILE*)malloc(sizeof(FILE));fp2=(FILE*)malloc(sizeof(FILE));if((fp1=fopen("sports1","wb"))==NULL){printf("cannotopenfile.\n");return;}if(fwrite(g1,sizeof(ALLitems),1,fp1)!=1)printf("filewriteerror.\n");fclose(fp1);if((fp2=fopen("sports2","wb"))==NULL){printf("cannotopenfile.\n");return;}if(fwrite(g2,sizeof(ALLNode),1,fp2)!=1)printf("filewriteerror.\n");fclose(fp2);}voidfunct2(ALLNode*g2)/*输出各学校总分*/{intk;printf("\n\n******输出各学校总分******\n");printf("学校编号\t总分\n");for(k=1;k<=g2->n;k++)printf("%d\t\t\t%d\n",k,g2->b[k].score);printf("\n");system("pause");printf("按任意键返回主菜单......");getchar();}voidfunct3(ALLNode*g2)/*按学校编号排序输出*/{intk;Items*p2;p2=(Items*)malloc(sizeof(Items));printf("\n\n******按学校编号排序输出******\n");printf("学校编号\t\t\t获奖情况\n");scanf("%d",&k);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){printf("项目%d:得%d分",p2->item,p2->record);p2=p2->next;}printf("\n");}printf("\n");system("pause");printf("按任意键返回主菜单......");getchar();}voidfunct4(ALLNode*g2)/*按学校总分排序输出*/{inti,j,k;Items*p2;printf("\n\n******按学校总分排序输出******\n");printf("学校编号\t\t总分\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].score);p2=p2->next;}printf("\n"); g2->b[0].score=g2->b[i].score;g2->b[0].boys=g2->b[i].boys;
cout<<*v[i];
1.按学校编号统计
2.按学校名次统计
3.按男团总分统计
4.按女团总分统计
5.返回查询菜单
6.返回主菜单
1.所有学校总分统计表
2.学校成绩查询
3.项目情况查询
4.返回主菜单
详细代码:
#include
//#include/*屏幕操作函数*/
#defineMAX50
//#defineNULL0
typedefstructnode1{
intschool;/*学校编号*/
intrecord;/*项目成绩*/
structnode1*next;/*链域*/
}Schools;
typedefstruct{
intitem;/*项目编号*/
Schools*firstschool;/*链域指向链表中第一个结点*/
}ITEM;
intz;/*项目总数*/
ITEMa[MAX];
}ALLitems;
typedefstructnode2{
intitem;/*该学校获奖的项目*/
structnode2*next;/*链域*/
}Items;
intscore;/*学校总分*/
intboys;/*男团体总分*/
intgirls;/*女团体总分*/
Items*firstitem;/*链域指向链表中第一个获奖项目的结点*/
}SCHNode;
intn;/*学校总数*/
SCHNodeb[MAX];
}ALLNode;
ALLitems*g1;
ALLNode*g2;
voidfunct1(ALLitems*g1,ALLNode*g2)
{Schools*p1;
Items*p2;
inti,j,k,m,w,h,x;
p1=(Schools*)malloc(sizeof(Schools));
p2=(Items*)malloc(sizeof(Items));
if(!
p1||!
p2)
exit
(1);
\n\n");
printf("\n******输入各个项目信息******\n\n");
printf("输入男子项目总数m:
");
scanf("%d",&m);
if(m<0||m>20)
{printf("输入有误,m是20以内的整数,请重新输入:
printf("输入女子项目总数w:
scanf("%d",&w);
if(w<0||w>20)
{printf("输入有误,w是20以内的整数,请重新输入:
printf("输入参加运动会的学校总数n:
scanf("%d",&g2->n);
if(g2->n<0||g2->n>20)
{printf("输入有误,n是20以内的整数,请重新输入:
g1->z=m+w;
printf("则项目编号为男子1-%d,女子%d-%d",m,m+1,g1->z);
printf("\n\n****记录运动会成绩****");
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].score=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);
if(i!
{printf("1.前三名2.前五名\n");
printf("请选择:
scanf("%d",&j);
if(j!
=1&&j!
=2)
{printf("输入有误,请重新选择:
if(j==1)
{h=3;
do{printf("第%d名:
学校(学校编号为数字)",h);
scanf("%d",&x);
p1->school=x;
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->a[i].firstschool;
g1->a[i].firstschool=p1;
p2->next=g2->b[x].firstitem;
g2->b[x].firstitem=p2;
g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/
if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/
elseg2->b[x].girls=g2->b[x].girls+p2->record;/*累计女团体总分*/
h--;
}while(x!
=0&&h!
=0);
if(j==2)
{h=5;
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;
voidsave()
{FILE*fp1,*fp2;
fp1=(FILE*)malloc(sizeof(FILE));
fp2=(FILE*)malloc(sizeof(FILE));
if((fp1=fopen("sports1","wb"))==NULL)
{printf("cannotopenfile.\n");
return;
if(fwrite(g1,sizeof(ALLitems),1,fp1)!
=1)
printf("filewriteerror.\n");
fclose(fp1);
if((fp2=fopen("sports2","wb"))==NULL)
if(fwrite(g2,sizeof(ALLNode),1,fp2)!
fclose(fp2);
voidfunct2(ALLNode*g2)/*输出各学校总分*/
{intk;
printf("\n\n******输出各学校总分******\n");
printf("学校编号\t总分\n");
printf("%d\t\t\t%d\n",k,g2->b[k].score);
printf("\n");
system("pause");
printf("按任意键返回主菜单......");
getchar();
voidfunct3(ALLNode*g2)/*按学校编号排序输出*/
intk;
printf("\n\n******按学校编号排序输出******\n");
printf("学校编号\t\t\t获奖情况\n");
scanf("%d",&k);
{printf("\t\t\t\t\t\t%d\t",k);
p2=g2->b[k].firstitem;
while(p2!
=NULL)
{printf("项目%d:
得%d分",p2->item,p2->record);
p2=p2->next;
voidfunct4(ALLNode*g2)/*按学校总分排序输出*/
{inti,j,k;
printf("\n\n******按学校总分排序输出******\n");
printf("学校编号\t\t总分\n");
//printf("输入要查询的项目编号:
for(i=2;i<=g2->n;i++)
printf("%d\t",k);
{printf("%d\t\t%d\n",g2->b[k].school,g2->b[k].score);
g2->b[0].score=g2->b[i].score;
g2->b[0].boys=g2->b[i].boys;
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2