罗梓通的课程设计

来源:互联网 发布:超级舰队老僧扫矿软件 编辑:程序博客网 时间:2024/04/30 01:24

运动会管理系统

学校十五届运动会管理系统。设有n个学院参加运动会,共有男子竞赛项目数m,女子竞赛项目数w。每个学院可以参加所有竞赛项目不受限制,每个学院对每个项目的参赛运动员不能超过4人或4支,每个运动员最多只能参加3项单项比赛,团体赛不受限制。

各项目名次取法有如下几种:用户自定义:(各名次权值由用户指定)

① 参赛人数超过6人,取前5名:第1名得分 7,第2名得分 5,第3名得分3,第4名得分2,第5名得分 1;

②参赛人数不超过6人,取前3名:第1名得分 10,第2名得分 5,第3名得分2;

③ 团体项目的名次取法和上面相同,但分数加倍。

功能要求 :

⑴ 运动员报名登记,以学院为单位进行运动员报名登记,登记的限制要求按问题描述的要求;

⑵ 参赛信息查询,查看参赛学院信息和比赛项目信息;

⑶ 竞赛检录,每项比赛开始前完成参赛运动员的检录;

⑷ 竞赛成绩登记,填写比赛名次,然后根据竞赛检录的运动员人数和上述的记分方式自动完成各学院的成绩登记并实时生成各学院的团体总分;

⑸ 比赛成绩查询,可以按竞赛项目、参赛学校、参赛运动员查看比赛成绩;

⑹ 竞赛成绩排序,以院系为单位,按总成绩的高低,分别排序输出每个院系的总成绩、男子总成绩、女子总成绩;

⑺ 设计一个菜单,至少具有上述操作要求的基本功能。

#include<iostream.h>
#define MAX 10
#include<iomanip.h>
#include "fstream.h"
int n,m,w;
class gamescore
{public:
int academynum;//院系编号
int score[MAX][MAX];//记录成绩的2维数组
int totalscore[MAX];//院总分存储数组
int mentotalscore[MAX];//男团总分存储数组
int womentotalscore[MAX];//女团总分存储数组
int projectnum; //项目编号
gamescore()
{
academynum=0;
projectnum=0; 
}
void search(int academynum,int projectnum);
void remove(int academynum,int projectnum);
void repair(int academynum,int projectnum);
void save();//保存成绩
void input();
void sort1();//按院总分排序
    void sort2();//按男团总分排序
    void sort3();//按女团总分排序
void hold();//存储总分数
int academytotalscore(int academynum);//院总分
    int academywomentotalscore(int academynum);//院女团总分
    int academymentotalscore(int academynum);//院男团总分
void output1(int academy);//输出院系的成绩列表
void output2(int academynum);//输出院系的团体成绩列表
};
void gamescore::input()
{    int i,j;
for(i=0;i<n;i++)
{      cout<<"输入编号为"<<i+1<<"院系的成绩(每项目取前三名,分别为10,5,2分,其余记成绩为0)"<<endl;
        for(j=0;j<m+w;j++)
{
cout<<"输入编号为"<<i+1<<"院系的的运动项目编号为"<<j+1<<"的成绩:";
cin>>score[i][j];
if(score[i][j]!=0&&score[i][j]!=2&&score[i][j]!=5&&score[i][j]!=10)
{
cout<<"成绩输入错误,请检查后再输入"<<endl;
    cin>>score[i][j];
}
}
}
if(i=n-1) cout<<"!!输入完毕"<<endl;
}
void gamescore::save()
{ ofstream ofs("运动会成绩.txt");
ofs<<"将最终学院参加的对应项目成绩列表列出(行表示学院编号,列表示项目编号)"<<endl;


    for(int i=0;i<n;i++)
{      
        for(int j=0;j<m+w;j++)
{
ofs<<score[i][j]<<setw(5); 
}
ofs<<endl;
}
      for(i=1;i<=n;i++)
 {
 ofs<<"编号为"<<i<<"的学院总分的成绩为:"<<academytotalscore(i)<<endl;
 ofs<<"编号为"<<i<<"的学院男团的成绩为:"<<academymentotalscore(i)<<endl;
 ofs<<"编号为"<<i<<"的学院女团的成绩为:"<<academywomentotalscore(i)<<endl;
 }

ofs.close();
}
int gamescore::academytotalscore(int academynum)//院总分

int sum=score[academynum-1][0];
for(int i=1;i<m+w;i++)
{
   
sum=sum+score[academynum-1][i];
}
       return sum;
}
int gamescore::academywomentotalscore(int academynum)//院女团总分

int sum=score[academynum-1][m];
for(int i=m+1;i<m+w;i++)
{  
sum=sum+score[academynum-1][i];
}
        return sum;
}
int gamescore::academymentotalscore(int academynum)//院男团总分

int sum=score[academynum-1][0];
for(int i=1;i<m;i++)
{
  
sum=sum+score[academynum-1][i];
}
          return sum;
}


void gamescore::hold()//存储总分
{
for(int i=1;i<=n;i++)
{
totalscore[i-1]=academytotalscore(i);
mentotalscore[i-1]=academymentotalscore(i);
womentotalscore[i-1]=academywomentotalscore(i);
}
}
void gamescore::sort1()//按院系总分排序
{
int p,q;
int a[MAX];
for(int i=0;i<n;i++)
{
a[i]=i+1;
}
for(int j=0;j<n-1;j++)
{
for(i=0;i<=n-1-j;i++)
{
if(totalscore[i]<totalscore[i+1])
{
p=totalscore[i];
totalscore[i]=totalscore[i+1];
                totalscore[i+1]=p;
                q=a[i];
a[i]=a[i+1];
                a[i+1]=q;
}
}
}
cout<<"按院系总分从大到小排序,以及对应的院系编号为:"<<endl;
    for(j=0;j<n;j++)
{
cout<<a[j]<<setw(5);
}
cout<<endl;
    for(j=0;j<n;j++)
{
cout<<totalscore[j]<<setw(5);
}
cout<<endl;
}
void gamescore::sort2()//按男团总分排序
{
int p,q;
int a[MAX];
for(int i=0;i<n;i++)
{
a[i]=i+1;
}
for(int j=0;j<n-1;j++)
{
for(i=0;i<=n-1-j;i++)
{
if(mentotalscore[i]<mentotalscore[i+1])
{
p=mentotalscore[i];
mentotalscore[i]=mentotalscore[i+1];
                mentotalscore[i+1]=p;
                q=a[i];
a[i]=a[i+1];
                a[i+1]=q;
}
}
}
cout<<"按男团总分从大到小排序,以及对应的院系编号为:"<<endl;
    for(j=0;j<n;j++)
{
cout<<a[j]<<setw(5);
}
cout<<endl;
    for(j=0;j<n;j++)
{
cout<<mentotalscore[j]<<setw(5);
}
cout<<endl;
}
void gamescore::sort3()//按女团总分排序
{
int p,q;
int a[MAX];
for(int i=0;i<n;i++)
{
a[i]=i+1;
}
for(int j=0;j<n-1;j++)
{
for(i=0;i<=n-1-j;i++)
{
if(womentotalscore[i]<womentotalscore[i+1])
{
p=womentotalscore[i];
womentotalscore[i]=womentotalscore[i+1];
                womentotalscore[i+1]=p;
                q=a[i];
a[i]=a[i+1];
                a[i+1]=q;
}
}
}
cout<<"按女团总分从大到小排序,以及对应的院系编号为:"<<endl;
    for(j=0;j<n;j++)
{
cout<<a[j]<<setw(5);
}
cout<<endl;
    for(j=0;j<n;j++)
{
cout<<womentotalscore[j]<<setw(5);
}
cout<<endl;
}


void gamescore::search(int academynum,int projectnum)
{int j;
int k;
   do
   {
cout<<"1 查询该院该单项成绩的总分, 2 查询该院总分,,3 查询该院男团总分,4 查询该院女团总分,5 按项目编号查询,0 退出查询"<<endl;
cout<<"请选择:"; 
cin>>k;
    if(k<0||k>5)   //判断输入的操作编号是否在目录中,如果超出范围重新输入
{
cout<<"输入有误,请重新输入要操作的项目编号";
cin>>k;
}  
       switch(k)
{
     case 1: 
 cout<<"编号为"<<academynum<<"的学院的第"<<projectnum<<"个项目的成绩为:";
 cout<<score[academynum-1][projectnum-1]<<endl;break;
 case 2:
                 cout<<"该院总分为:"<<academytotalscore(academynum)<<endl;break;
          case 3:  
 cout<<"该院男团总分为:"<<academymentotalscore(academynum)<<endl;break;
          case 4: 
 cout<<"该院女团总分:"<<academywomentotalscore(academynum)<<endl;break;
 case 5:
 cout<<"不同院系对应的第"<<projectnum<<"个项目的成绩为:"<<endl;
                for(j=0;j<n;j++)
{
cout<<1+j<<setw(5);            
}
cout<<endl;
                  for(j=0;j<n;j++)
{
               cout<<score[j][projectnum-1]<<setw(5);
}
 cout<<endl;
break;
 
         default: return;
}


}while(1);
}
void gamescore::repair(int academynum,int projectnum)
{
cout<<"请重新输入该项成绩:";
cin>>score[academynum-1][projectnum-1];
cout<<"修改成功"<<endl;
}
void gamescore::remove(int academynum,int projectnum)
{
score[academynum-1][projectnum-1]=0;
cout<<"!!删除成功"<<endl;
}
void gamescore::output1(int academynum)
{
//cout<<"该学院运动项目编号及对应的成绩如下:"<<endl;
    for(int i=0;i<m+w;i++)
{
cout<<1+i<<setw(5);
}
    cout<<endl;
     for(i=0;i<m+w;i++)
{
cout<<score[academynum-1][i]<<setw(5);
}
}
void gamescore::output2(int academynum)
{
cout<<"该院男团成绩为"<<academymentotalscore(academynum)<<endl;
cout<<"该院女团成绩为"<<academywomentotalscore(academynum)<<endl;
}


/////////////////////////////////////////////////////
void main()
{
int projectnum;
    int academynum;
gamescore a;
int num;                                                   
////////////////////////////////////////////菜单
cout<<"****运动会成绩管理系统*********"<<endl;
cout<<endl;
cout<<" 1  输入院系及其参加项目的成绩"<<endl;
cout<<" 2  查询某个院系参加某个项目的成绩"<<endl;
cout<<" 3  修改一个项目的成绩"<<endl;
cout<<" 4  删除错误成绩的记录"<<endl;
cout<<" 5  输出某个院系的得分表"<<endl;
cout<<" 6  输出院系的团体得分表"<<endl;
cout<<" 7  对成绩按院系进行排序"<<endl;
cout<<" 8  对成绩按男团进行排序"<<endl;
cout<<" 9  对成绩按女团进行排序"<<endl;
    cout<<" 10  保存成绩信息"<<endl;
cout<<" 0  退出该程序"<<endl<<endl;


    cout<<"输入参加院系数 n=";
cin>>n;
cout<<"输入男子项目数 m=";
cin>>m;
cout<<"输入女子项目数 w=";
cin>>w;


do{                   
    cout<<"请选择要操作的菜单标号:";
cin>>num;
if(num>10||num<0)   
{
cout<<"输入有误,请重新输入要操作的项目编号:";
cin>>num;
}           
    switch(num)
{
     case 1:         
 a.input();
 break;
     case 2:
 cout<<"输入要查找的院系:";
 cin>>academynum;
 cout<<"输入要查询的运动项目编号:";
 cin>>projectnum;
a.search(academynum,projectnum);
 break;
          case 3: 
 cout<<"输入要修改的院系编号";
 cin>>academynum;
 cout<<"输入要修改的运动项目的编号:";
 cin>>projectnum;
 a.repair(academynum,projectnum);
 break;
     case 4:
 cout<<"输入要删除成绩所在的院系的编号:";
 cin>>academynum; 
              cout<<"输入要删除运动项目编号:";
 cin>>projectnum;
 a.remove(academynum,projectnum);
 break;
     case 5:
 cout<<"输入要查询成绩的院系编号:";
 cin>>academynum;
 a.output1(academynum);
 break;
     case 6:
 cout<<"输入要查询团体成绩的院系的编号:";
 cin>>academynum;
a.output2(academynum);
 break;
 case 7:
                cout<<"该学院运动项目编号及对应学院总分的成绩如下:";
a.hold();
a.sort1();break;
          case 8:
                cout<<"该学院运动项目编号及对应男团的成绩如下:";
a.hold();
a.sort2();break;
          case 9:
                cout<<"该学院运动项目编号及对应女团的成绩如下:";
a.hold();
a.sort3();break;
 case 10:
 a.save();
 cout<<"!!保存成功"<<endl;break;
     default: return;
}
}while(1);
}


1.显示菜单:


2.手动输入院系数n,男子项目数m,女子项目数w:


3.输入数据后的情况:


4、试查询成绩比如查询编号为3的院,和项目编号为5的信息:


5、修改某院某项目成绩记录,以院系编号为3,项目编号为2的成绩为例:


6、删除某院某项目的成绩,以院系编号为3,项目编号为2的成绩为例:


7、输入某个院系的得分表,以编号为4的院系为例:


8、输入团体的得分表,以编号为2的院系为例:


9、以成绩按系院总分进行排序,给出了成绩排序及对应的院系编号:


10、以成绩按男团总分进行排序,给出了成绩排序及对应的院系编号:


0 0