运动会分数统计系统开发(第一版)

/***************************************************
* 版权所有 (C/C++) 2015,辛志勐
* 烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:终极版.cpp
* 作者:辛志勐
* 完成日期:2015年12月24日
* 版本号:VC6.0
* 项目描述:运动会分数统计系统
****************************************************/





             
/**************************** 
*  头文件
*****************************/
#include
using namespace std;
#include
#include
#define CLEAR "cls"
#define n 2//学校数目
#define m 1//田径项目数目
#define w 1//跳高项目数目
#define null 0
#include
#define MaxSize 100
typedef char ElemType;


typedef struct
{
    ElemType data[MaxSize];
    int top;                //栈指针
} SqStack;                  //顺序栈类型定义


void InitStack(SqStack *&s);    //初始化栈
void DestroyStack(SqStack *&s);  //销毁栈
bool StackEmpty(SqStack *s);     //栈是否为空
int StackLength(SqStack *s);  //返回栈中元素个数——栈长度
bool Push(SqStack *&s,ElemType e); //入栈
bool Pop(SqStack *&s,ElemType &e); //出栈
bool GetTop(SqStack *s,ElemType &e); //取栈顶数据元素
void DispStack(SqStack *s);  //输出栈


/*****************************
* 功能:初始化栈
* InitStack()
* 输入参数:无
* 输出参数:无
* 返回值: 无
*******************************/


void InitStack(SqStack *&s)
{
    s=(SqStack *)malloc(sizeof(SqStack));
    s->top=-1;
}


/****************************
* 功能:销毁栈
* DestroyStack()
* 输入参数:无
* 输出参数:无
* 返回值: 无
*****************************/


void DestroyStack(SqStack *&s)
{
    free(s);
}


/******************************
* 功能:返回栈中元素个数——栈长度
* StackLength()
* 返回栈中元素个数——栈长度
* 输入参数:无
* 输出参数:s
* 返回值: s->top+1
*******************************/


int StackLength(SqStack *s)  
{
    return(s->top+1);
}




/*****************************
* 功能:栈空的情况,即栈下溢出
* StackEmpty()
* 输入参数:无
* 输出参数:s
* 返回值: s->top==-1
******************************/




bool StackEmpty(SqStack *s)
{
    return(s->top==-1);
}


/*****************************
* 功能:入栈
* Push()
* 输入参数:s
* 输出参数:无
* 返回值: true or flase
******************************/


bool Push(SqStack *&s,ElemType e)
{
    if (s->top==MaxSize-1)    //栈满的情况,即栈上溢出
        return false;
    s->top++;
    s->data[s->top]=e;
    return true;
}
/*****************************
* 功能:出栈
* Pop()
* 输入参数:e
* 输出参数:s
* 返回值: s or 无
*******************************/
bool Pop(SqStack *&s,ElemType &e)
{
    if (s->top==-1)     //栈为空的情况,即栈下溢出
        return false;
    e=s->data[s->top];
    s->top--;
    return true;
}
/******************************
* 功能:取栈顶元素
* GetTop
* 输入参数:e
* 输出参数:s
* 返回值:s or 无   
*******************************/
bool GetTop(SqStack *s,ElemType &e)
{
    if (s->top==-1)         //栈为空的情况,即栈下溢出
        return false;
    e=s->data[s->top];
    return true;
}


/******************************
* 功能:输出栈
* DispStack()
* 输入参数:无
* 输出参数:s
* 返回值:s   
*******************************/
void DispStack(SqStack *s)  //输出栈
{
    int i;
    for (i=s->top; i>=0; i--)
        printf("%c ",s->data[i]);
    printf("\n");
}


/***********************
* 定义结构体数组
************************/
typedef struct
{
    int itemnum;//项目编号
    int top;    //取名次的数目
    int range[5]; //名次
    int mark[5];  //分数
} itemnode;  //定义项目结点的类型
typedef struct
{
    int schoolnum;   //学校编号
    int score;    //学校总分
    int mscore;   //田径体总分
    int wscore;   //跳高体总分
    itemnode c[m+w];   //项目数组
} headnode; //定义头结点类型
headnode h[n];//定义一个头结点数组


/*******************************************************
* 功能:项目的输入信息
* inputinformation()
* 输入:学校编号,项目编号,获得名次,名次个数
* 输出:无
* 返回值:无
********************************************************/


void inputinformation()//输入信息,建立系统
{
    int i,j,k,s;
    for(i=0; i     {
        h[i].score=0;
        h[i].mscore=0;
        h[i].wscore=0;
    }//初始化头结点
    for(i=0; i     {
        printf("*****学校编号:");
        cout<         //scanf("%d",&h[i].schoolnum);
        cout<<"请按顺序选择参与运动会的学校"<         cout<<"1.烟台大学   2.清华大学"<         scanf("%d",&h[i].schoolnum);
        if(h[i].schoolnum==1)
            cout<<"烟台大学"<         else
            cout<<"清华大学"<

//输入学校的编号信息
        for(j=0; j         {
            printf("*****请按顺序输入项目编号\n");
            printf("*****请选择项目\n");
            printf("1.田径 2.跳高:");
            scanf("%d",&h[i].c[j].itemnum);
            printf("*****取前3名or前5名:");
            scanf("%d",&h[i].c[j].top);


            while(h[i].c[j].top!=3&&h[i].c[j].top!=5)
            {


                cout<<"输入错误"<                 cout<<"请重新输入:"<                 cin>>h[i].c[j].top;


            }


            printf("*****获得几个名次:");
            scanf("%d",&k);  //输入项目信息
            for(s=0; s<5; s++)
            {
                h[i].c[j].range[s]=0;
                h[i].c[j].mark[s]=0;
            }
            //初始化排名和分数
            for(s=0; s             {
                printf("*****名次:");
                scanf("%d",&h[i].c[j].range[s]);     //输入所获名次信息
                if(h[i].c[j].top==3)
                    switch(h[i].c[j].range[s])
                    {
                    case 0:
                        h[i].c[j].mark[s]=0;
                        break;
                    case 1:
                        h[i].c[j].mark[s]=5;
                        break;
                    case 2:
                        h[i].c[j].mark[s]=3;
                        break;
                    case 3:
                        h[i].c[j].mark[s]=2;
                        break;
                    }
                else
                    switch(h[i].c[j].range[s])
                    {


                    case 0:
                        h[i].c[j].mark[s]=0;
                        break;
                    case 1:
                        h[i].c[j].mark[s]=7;
                        break;
                    case 2:
                        h[i].c[j].mark[s]=5;
                        break;
                    case 3:
                        h[i].c[j].mark[s]=3;
                        break;
                    case 4:
                        h[i].c[j].mark[s]=2;
                        break;
                    case 5:
                        h[i].c[j].mark[s]=1;
                        break;
                    }
                h[i].score=h[i].score+h[i].c[j].mark[s];//按取前三名还是取前五名分别记分
                if(j<=m-1)
                    h[i].mscore=h[i].mscore+h[i].c[j].mark[s]; //是田径项目则记到田径分数里面去
                else
                    h[i].wscore=h[i].wscore+h[i].c[j].mark[s]; //是跳高项目则记到跳高项目里面去
            }
            printf("\n");
        }
    }
}


/**************************************************
* 功能:函数的输出
* output()
* 输入:1,2,3,4,0(根据用户不同的选择进行输入)
* 输出:按学校编号输出
*      按学校总分输出  
*      按田径总分输出
*      按跳高总分输出
* 返回值:无
***************************************************/


void output() //输出函数
{
    int choice,i,j,k;
    int remember[n];
    int sign;
    do
    {
        printf("*******************1.按学校编号输出.*******************\n");
        printf("*******************2.按学校总分输出.*******************\n");
        printf("*******************3.按田径总分输出.*******************\n");
        printf("*******************4.按跳高总分输出.*******************\n");
        printf("\n\n*******************请选择编号*************************\n\n:");
        scanf("%d",&choice);
        system(CLEAR);
        switch(choice)
        {
        case 1:
            for(i=0; i             {


                //printf("\n\n*****学校编号:%d\n",h[i].schoolnum);
                if(i==0)
                {
                    cout<<"*****1.烟台大学:"<                     printf("*****学校总分:%d\n",h[i].score);
                    printf("*****田径总分:%d\n",h[i].mscore);
                    printf("*****跳高总分:%d\n",h[i].wscore);
                    cout<                     cout<                     cout<                     cout<

                }
                else if(i==1)
                {
                    cout<<"*****2.清华大学:"<                     printf("*****学校总分:%d\n",h[i].score);
                    printf("*****田径总分:%d\n",h[i].mscore);
                    printf("*****跳高总分:%d\n",h[i].wscore);
                    cout<                     cout<                     cout<                     cout<

                }


            }//按编号顺序输出
            break;
        case 2:
            for(i=0; i                 remember[i]=i;
            for(i=0; i             {
                for(j=i+1; j                 {
                    if(h[remember[i]].score                     {
                        k=remember[i];
                        remember[i]=remember[j];
                        remember[j]=k;
                    }
                }
            } // 用冒泡排序方法,用辅助数组记住头结点下标
            for(i=0; i             {
                printf("\n\n*****学校编号:%d\n",h[remember[i]].schoolnum);
                printf("*****学校总分:%d\n",h[remember[i]].score);
                printf("*****田径总分:%d\n",h[remember[i]].mscore);
                printf("*****跳高总分:%d\n",h[remember[i]].wscore);//按所记下标顺序输出
                cout<                 cout<                 cout<

            }
            //按学校总分输出
            break;
        case 3:
            for(i=0; i                 remember[i]=i;
            for(i=0; i             {
                for(j=i+1; j                 {
                    if(h[remember[i]].mscore                     {
                        k=remember[i];
                        remember[i]=remember[j];
                        remember[j]=k;
                    }
                }
            }
            for(i=0; i             {
                printf("\n\n*****学校编号:%d\n",h[remember[i]].schoolnum);
                printf("*****学校总分:%d\n" ,h[remember[i]].score);
                printf("*****田径总分:%d\n",h[remember[i]].mscore);
                printf("*****跳高总分:%d\n",h[remember[i]].wscore);
                cout<                 cout<                 cout<

            } //按田径总分输出
            break;
        case 4:
            for(i=0; i                 remember[i]=i;
            for(i=0; i             {
                for(j=i+1; j                 {
                    if(h[remember[i]].wscore                     {
                        k=remember[i];
                        remember[i]=remember[j];
                        remember[j]=k;
                    }
                }
            }
            for(i=0; i             {
                printf("\n\n*****学校编号:%d\n",h[remember[i]].schoolnum);
                printf("*****学校总分:%d\n" ,h[remember[i]].score);
                printf("*****田径总分:%d\n",h[remember[i]].mscore);
                printf("*****跳高总分:%d\n",h[remember[i]].wscore);
                cout<                 cout<                 cout<

            }
            break;  //按跳高总分输出
        }


        printf("请选择2继续,0跳出\n");
        scanf("%d",&sign);
    }
    while(sign==2); //循环执行输出语句
}


/*************************************************
* 功能:调查函数
* inquiry()
* 输入:1,2,0(根据用户不同的选择进行输入)
* 输出:以每个项目的编号输出成绩
*      以每个学校的编号输出成绩
* 返回值:无
**************************************************/


void inquiry() //查询函数
{
    int choice;
    int i,j,k,s;
    printf("\n*****1:按学校编号查询\n");
    printf("\n*****2:按项目编号查询\n");
    printf("\n\n*****请选择查询方式:");//提供两种查询方式
    scanf("%d",&choice);
    switch(choice)
    {
    case 1:
        do
        {
            printf("要查询的学校编号1.烟台大学  2.清华大学:");
            scanf("%d",&i);


            if(i>n)
                printf("错误:这个学校没有参加此次运动会!\n\n\n");
            else
            {
                printf("要查询的项目编号1.田径  2.跳高:");
                scanf("%d",&j);
                if(j>m+w||j==0)
                    printf("此次运动会没有这个项目\n\n\n");//学校编号超出范围,则输出警告
                else
                {
                    printf("这个项目取前%d名,该学校的成绩如下:\n", h[0].c[j-1].top);
                    for(k=0; k<5; k++)
                    {
                        if(h[i-1].c[j-1].range[k]!=0)
                            printf("名次:%d\n",h[i-1].c[j-1].range[k]);
                    }//输出要查询学校项目的成绩
                }
            }
            printf("请选择2继续,0跳出\n");
            scanf("%d",&s);
            printf("\n\n\n");
        }
        while(s==2); //循环执行输出语句
        break;
    case 2:
        do
        {
            printf("要查询的项目编号1.田径  2.跳高:");
            scanf("%d",&s);
            if(s>m+w||s==0)
                printf("此次运动会不包括这个项目.\n\n\n"); //项目编号超出范围则输出警告
            else
            {
                printf("该项目取前 %d名,取得名次的学校\n",h[0].c[s-1].top);
                for(i=0; i                 {
                    for(j=0; j<5; j++)
                    {
                        if(h[i].c[s-1].range[j]!=0)
                            printf("学校编号:%d,名次:%d\n",h[i].schoolnum, h[i].c[s-1].range[j]);
                    }
                }
            }                         //输出该项目取得名次学校的成绩
            printf("\n\n\n继续 2,跳出 0\n");
            scanf("%d",&i);
            printf("\n\n\n");
        }
        while(i==2);
        break;
    }
}
/*********************************************************************
* 功能:函数的中心部分 (不可缺失的函数)包含以下几个方面:
*      1.给用户展示的程序界面
*      2.栈函数的调用
*      3.输入函数的调用
*      4.输出和查询函数的调用
*      5.main函数递归调用   
* 输入参数:根据用户需求输入
* 输出参数:按用户要求输出
* 返回参数:0
**********************************************************************/
int  main()
{


    int choice;
    cout<     cout<     cout<     printf("         本次运动会分为    1.田径项目    2.跳高项目  \n");
    cout<



    printf("                 1.每个项目的第一名所得分数为7分\n");
    printf("                 2.每个项目的第二名所得分数为5分\n");
    printf("                 3.每个项目的第三名所得分数为3分\n");
    printf("                 4.每个项目的第四名所得分数为2分\n");
    printf("                 5.每个项目的第五名所得分数为1分\n");
    printf("                 6.其他名次不得分\n");
    cout<     cout<     cout<     printf("                     使用请按1,结束请按其他键\n");


    int a;
    cin>>a;
    if(a==1)
        system(CLEAR);
    else
        return 0;
    printf("======================欢迎使用======================\n");
    printf("\n\n              运动会分数统计系统                   \n");
    printf("\n\n1.输入信息 \n");
    printf("2.输出信息 \n");
    printf("3.查询信息 \n");
    printf("4.各学校的名次成绩由高到低依次输出并自动输出,为保密成绩,将不公布学校编号\n");
    printf("5.退出系统 \n\n\n");
    printf("\n\n");
    printf("================================================\n\n");
    printf("********请选择要实现步骤的编号:\n\n");
    scanf("%d",&choice);
    system(CLEAR);
    if(choice==1)
    {
        inputinformation();
        main();
    }
    else if(choice==2)
    {
        output();
        main();


    }
    else if(choice==3)
    {
        inquiry();
        main();
    }
    else if(choice==5)
    {
        return 0;
    }
    else if(choice==4)
    {
        ElemType e;
        SqStack *s;
        // printf("(1)初始化成绩s\n");
        InitStack(s);
        cout<         cout<         printf("成绩为%s\n",(StackEmpty(s)?"空":"非空"));
        //printf("(3)依次进栈元素a,b,c,d,e\n");
        int i,j,k;
        int remember[n];
        for(i=0; i             remember[i]=i;
        for(i=0; i         {
            for(j=i+1; j             {
                if(h[remember[i]].score                 {
                    k=remember[i];
                    remember[i]=remember[j];
                    remember[j]=k;
                }
            }
        } // 用冒泡排序方法,用辅助数组记住头结点下标
        for(i=0; i         {
            Push(s,h[i].score);
        }


        // printf("(4)成绩%s\n",(StackEmpty(s)?"空":"非空"));
        printf("成绩长度为:%d\n",StackLength(s));
       // printf("从成绩顶到成绩底元素:");
        DispStack(s);
        printf("出成绩序列:");
        while (!StackEmpty(s))
        {
            Pop(s,e);
            printf("%d ",e);
        }
        printf("\n");
        //printf("释放成绩\n");
        //DestroyStack(s);
        //printf("成绩是否为空:%s\n",(StackEmpty(s)? "空":"非空"));
        cout<         cout<         cout<         cout<<"退出该项目请按2,任意键退出总程序"<         cout<         cout<         cout<         int l;
        cin>>l;
        if(l==2)
        {
            main();
        }
        else
        {
            return 0;
        }
    }
    else
    {
        return 0;
    }


    return 0;

}

运行结果展示:

1.初始界面

运动会分数统计系统开发(第一版)_第1张图片

2.用户选择界面

运动会分数统计系统开发(第一版)_第2张图片

3.用户输入界面

运动会分数统计系统开发(第一版)_第3张图片

4.用户输出界面

运动会分数统计系统开发(第一版)_第4张图片

运动会分数统计系统开发(第一版)_第5张图片

运动会分数统计系统开发(第一版)_第6张图片

运动会分数统计系统开发(第一版)_第7张图片

运动会分数统计系统开发(第一版)_第8张图片

5.用户查询界面

运动会分数统计系统开发(第一版)_第9张图片

6.成绩高低排列

运动会分数统计系统开发(第一版)_第10张图片



你可能感兴趣的:(运动会分数统计系统开发(第一版))