您的位置:首页 > 理论基础 > 数据结构算法

数据结构作业 运动会分数统计 c++

2008-12-17 17:41 435 查看
/////////////////////////  说明  //////////////////////////////////        共有N个学校参加运动会,编号为1~N。                //////            共有W个项目,编号为1~W //////  在某个项目结束后可以进行该项目的数据输入 ////// 可以显示指定项目的所有获奖信息     //////   指定编号的学校的获奖信息 //////  可以对所有学校的总成绩进行统计和排名显示 //////          每个项目去前三名的运动员获得极分 ///////////////////////////////////////////////////////////////////#include "iostream.h"#include "stdlib.h" #include "stdlib.h"
  #define OK 1 #define ERROR 2#define SN    8                         //参加比赛的学校数
typedef int Status;
int NodeNum=0;                      //全局变量,当前节点个数

typedef struct { char StudentsName[20]; int  SchoolName; int  Rank;}Event;
typedef struct xiangmu{ int EventNum; Event StudentScore[3]; struct xiangmu *NextEvent;
}xiangmu,*EventNode;
EventNode LastEvent;
//////////////输入数据,建立链表/////////////////////////////////Status Input(EventNode &head){ cout<<"***************项目成绩输入*****************"<<endl; int i; EventNode NewEvent; NewEvent=(EventNode)malloc(sizeof(xiangmu)); if(!NewEvent) return ERROR;
cout<<"请输入该项目的编号:"; cin>>NewEvent->EventNum; cout<<endl<<endl; for(i=0;i<3;i++) { cout<<"请输入第"<<i+1<<"名姓名:"; cin>>NewEvent->StudentScore[i].StudentsName; cout<<"请输入运动员学校编号:"; cin>>NewEvent->StudentScore[i].SchoolName; cout<<"请输入运动员分数:"; cin>>NewEvent->StudentScore[i].Rank; cout<<endl; } if(head==NULL)  head=NewEvent;       //头节点为空,新节点做表头 else  LastEvent->NextEvent=NewEvent;  //否则加入表尾 LastEvent=NewEvent; NodeNum++; cout<<"这个项目输入完了!"<<endl<<"********************************************"<<endl; return OK;
}

/////////////////////显示用户查找的项目名(号),所对应的项目信息/////////////////////////////Status EventSort(EventNode head,int EventName){ cout<<"名次  "<<" 姓名 "<<" 学校 "<<"  积分 "<<endl; EventNode p; if(NodeNum!=0) //说明链表不为空,可以进行搜索 { p=head; for(int i=1;i<=NodeNum;i++) { if(EventName==p->EventNum) { for(int m=1;m<4;m++)           //循环输出该项目的信息 { cout<<"第"<<m<<"名:  "<<p->StudentScore[m-1].StudentsName <<"      "<<p->StudentScore[m-1].SchoolName<<"      " <<4-m<<endl; } // p=p->NextEvent; break; } else p=p->NextEvent; } cout<<"********************************************"<<endl; } else cout<<"还没有输入数据,请先进行输入操作!"<<endl<<endl; return OK;}

//////////////////////用户给出学校名,显示该校得分信息//////////////////////////////////Status SchoolSort(EventNode head,int SchoolName){ cout<<"项目号  "<<"姓名  "<<"得分"<<endl; EventNode p; if(NodeNum!=0) //说明链表不为空,可以进行搜索 { p=head;
for(int i=1;i<=NodeNum;i++) { for(int a=0;a<3;a++) { if(p->StudentScore[a].SchoolName==SchoolName) //循环输出该学校得分信息 { cout<<"  "<<p->EventNum<<"      "<<p->StudentScore[a].StudentsName <<"      "<<p->StudentScore[a].Rank<<endl; break; } else  p=p->NextEvent; } } cout<<"********************************************"<<endl;
} else cout<<"还没有输入数据,请先进行输入操作!"<<endl<<endl; return OK;}

///////////////对所有学校的成绩进行统计排名,显示//////////////////////////////Status AllSchoolSort(EventNode head){ //////////首先要对所有学校的成绩进行汇总////// EventNode p; typedef struct { int name; int score; }SchoolScore;
SchoolScore schoolscore[SN]={0};
// int SchoolScore[SN]={0}; if(NodeNum!=0) //说明链表不为空,可以进行搜索 { p=head;
for(int i=1;i<=NodeNum;i++) { for(int a=0;a<3;a++)       { int num; num=p->StudentScore[a].SchoolName-1; schoolscore[num].score=schoolscore[num].score+p->StudentScore[a].Rank; } p=p->NextEvent;
}//统计各个学校的总分
for(int s=0;s<SN;s++) { schoolscore[s].name=s+1; } for(int m=0;m<SN;m++) { for(i=SN-1;i>-1;i--) { if(schoolscore[i].score<=schoolscore[i-1].score) { SchoolScore t; t=schoolscore[i-1]; schoolscore[i-1]=schoolscore[i]; schoolscore[i]=t;   //排序 } // else  // { // int falm; // falm++; // } }
} cout<<"学校名次"<<"  "<<"总分"<<"  "<<"学校编号"<<endl; for(int n=1;n<=SN;n++) { if(schoolscore[SN-n].score!=0) { cout<<"  "<<n<<"  "<<"      "<<schoolscore[SN-n].score<<"      "<<schoolscore[SN-n].name<<endl; } } cout<<"********************************************"<<endl;    //将结果按格式输出 } else cout<<"还没有输入数据,请先进行输入操作!"<<endl<<endl; return OK;}

///////////////////////////////显示导航菜单//////////////////////////////void show(){// system("cls");
cout<<"你将要进行:"<<endl<<"1.项目成绩输入"<<endl <<"2.项目成绩查询"<<endl<<"3.查询学校成绩"<<endl <<"4.显示学校总分排名"<<endl<<"Q.退出"<<endl<<endl;}

void main(){
cout<<endl<<endl; cout<<"                       欢迎使用运动会分数统计系统"; cout<<endl<<endl; cout<<"********************************************************************************"<<endl; show(); EventNode head=NULL; int n=1;
while(n=1) { char opt; cout<<"请选择:"; cin>>opt; if(opt=='Q') { exit(0); } else switch(opt) { case '1': Input(head); show(); break; case '2': cout<<"***************项目成绩查询*****************"<<endl; int EventName; cout<<"项目编号:"; cin>>EventName; EventSort(head,EventName); show(); break; case'3': cout<<"***************学校成绩查询*****************"<<endl; int SchoolName; cout<<"学校编号:"; cin>>SchoolName; SchoolSort(head,SchoolName); show(); break; case'4': cout<<"***************学校总分排名*****************"<<endl; AllSchoolSort(head); show(); break; default: cout<<"请输入正确的序号!"<<endl; } }}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息