运动会分数统计系统开发

来源:互联网 发布:国外太岁 知乎 编辑:程序博客网 时间:2024/04/28 06:12
/**************************************************** 版权所有 (C/C++) 2015,辛志勐* 烟台大学计算机与控制工程学院* All rights reserved.* 文件名称:终极版.cpp* 作者:辛志勐* 完成日期:2015年12月24日* 版本号:VC6.0* 项目描述:运动会统计系统****************************************************/             /**************************** *  头文件*****************************/#include<iostream>using namespace std;#include<stdlib.h>#include<stdio.h>#define CLEAR "cls"#define n 2//学校数目#define m 1//田径项目数目#define w 1//跳高项目数目#define null 0#include <malloc.h>#define MaxSize 100typedef 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<n; i++)    {        h[i].score=0;        h[i].mscore=0;        h[i].wscore=0;    }//初始化头结点    for(i=0; i<n; i++)    {        printf("*****学校编号:");        cout<<endl;        //scanf("%d",&h[i].schoolnum);        cout<<"请按顺序选择参与运动会的学校"<<endl;        cout<<"1.烟台大学   2.清华大学"<<endl;        scanf("%d",&h[i].schoolnum);        if(h[i].schoolnum==1)            cout<<"烟台大学"<<endl;        else            cout<<"清华大学"<<endl;//输入学校的编号信息        for(j=0; j<m+w; 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<<"输入错误"<<endl;                cout<<"请重新输入:"<<endl;                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<k; 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<n; i++)            {                //printf("\n\n*****学校编号:%d\n",h[i].schoolnum);                if(i==0)                {                    cout<<"*****1.烟台大学:"<<endl;                    printf("*****学校总分:%d\n",h[i].score);                    printf("*****田径总分:%d\n",h[i].mscore);                    printf("*****跳高总分:%d\n",h[i].wscore);                    cout<<endl;                    cout<<endl;                    cout<<endl;                    cout<<endl;                }                else if(i==1)                {                    cout<<"*****2.清华大学:"<<endl;                    printf("*****学校总分:%d\n",h[i].score);                    printf("*****田径总分:%d\n",h[i].mscore);                    printf("*****跳高总分:%d\n",h[i].wscore);                    cout<<endl;                    cout<<endl;                    cout<<endl;                    cout<<endl;                }            }//按编号顺序输出            break;        case 2:            for(i=0; i<n; i++)                remember[i]=i;            for(i=0; i<n; i++)            {                for(j=i+1; j<n; j++)                {                    if(h[remember[i]].score<h[j].score)                    {                        k=remember[i];                        remember[i]=remember[j];                        remember[j]=k;                    }                }            } // 用冒泡排序方法,用辅助数组记住头结点下标            for(i=0; i<n; 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<<endl;                cout<<endl;                cout<<endl;            }            //按学校总分输出            break;        case 3:            for(i=0; i<n; i++)                remember[i]=i;            for(i=0; i<n; i++)            {                for(j=i+1; j<n; j++)                {                    if(h[remember[i]].mscore<h[j].mscore)                    {                        k=remember[i];                        remember[i]=remember[j];                        remember[j]=k;                    }                }            }            for(i=0; i<n; 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<<endl;                cout<<endl;                cout<<endl;            } //按田径总分输出            break;        case 4:            for(i=0; i<n; i++)                remember[i]=i;            for(i=0; i<n; i++)            {                for(j=i+1; j<n; j++)                {                    if(h[remember[i]].wscore<h[j].wscore)                    {                        k=remember[i];                        remember[i]=remember[j];                        remember[j]=k;                    }                }            }            for(i=0; i<n; 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<<endl;                cout<<endl;                cout<<endl;            }            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<n; 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<<endl;    cout<<endl;    cout<<endl;    printf("         本次运动会分为    1.田径项目    2.跳高项目  \n");    cout<<endl;    printf("                 1.每个项目的第一名所得分数为7分\n");    printf("                 2.每个项目的第二名所得分数为5分\n");    printf("                 3.每个项目的第三名所得分数为3分\n");    printf("                 4.每个项目的第四名所得分数为2分\n");    printf("                 5.每个项目的第五名所得分数为1分\n");    printf("                 6.其他名次不得分\n");    cout<<endl;    cout<<endl;    cout<<endl;    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<<endl;        cout<<endl;        printf("成绩为%s\n",(StackEmpty(s)?"空":"非空"));        //printf("(3)依次进栈元素a,b,c,d,e\n");        int i,j,k;        int remember[n];        for(i=0; i<n; i++)            remember[i]=i;        for(i=0; i<n; i++)        {            for(j=i+1; j<n; j++)            {                if(h[remember[i]].score<h[j].score)                {                    k=remember[i];                    remember[i]=remember[j];                    remember[j]=k;                }            }        } // 用冒泡排序方法,用辅助数组记住头结点下标        for(i=0; i<n; 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<<endl;        cout<<endl;        cout<<endl;        cout<<"退出该项目请按2,任意键退出总程序"<<endl;        cout<<endl;        cout<<endl;        cout<<endl;        int l;        cin>>l;        if(l==2)        {            main();        }        else        {            return 0;        }    }    else    {        return 0;    }    return 0;}
1.初始界面

2.用户选择界面


3.输入界面


4.输出界面






5.查询界面


6.成绩高低输出



0 0
原创粉丝点击