数据结构课设----运动会分数统计系统

1.运动会分数统计
[问题描述]
参加运动会的n个学校编号为1 ~ n。比赛分成m个男子项目和w个女子项
目,项目编号分别为1~ m和m+1~ m+w。由于各项目参加人数差别较大,有
些项目取前五名,得分顺序为7,5,3, 2,1;还有些项目只取前三名,得分
顺序为5,3,2。写一个统计程序产生各种成绩单和得分报表。
[基本要求]
1)可以输入各个项目的前三名或前五名的成绩;
2)能统计各学校总分,
3)可以按学校编号或名称、学校总分、男女团体总分排序输出;
4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前
三或前五名的学校。
5)数据存入文件并能随时查询
6)规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称
输出形式:有中文提示,各学校分数为整型。
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成
相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关
数据要存储在数据文件中。
测试数据:
[测试数据]
要求使用1、全部合法数据; 2、整体非法数据; 3、局部非法数据。进行
程序测试,以保证程序的稳定。
例如,对于n=4,m=3, w=2,编号为奇数的项目取前五名,编号为偶数
的项目取前三名,设计- -组实例数据。
[实现提示]
可以假设n≤20,m≤30,w≤20,姓名长度不超过20个字符。每个项
目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并按名次顺
序输入运动员姓名、校名(和成绩)。

========================================
=话不多说,直接上代码

头文件和结构体

#include<stdio.h>
#include<math.h>
#include<process.h>

#define N 20 //学校最大数目
#define M 20 //男子项目最大数
#define W 20 //女子项目最大数

//存放项目信息的结构体
typedef struct
{
   
    int inum;//项目编号
    int top;//取名次的数目
    int range[5];//名次
    int mark[5];//分数
}itemnode;

//存放学校信息的结构体
typedef struct
{
   
    int snum;//学校编号
    int score;//学校总分
    int mscore;//男子总分
    int wscore;//女子总分
    itemnode t[M + W];//项目数组
}snode;
snode a[N];//定义一个学校数组

//功能菜单目录

void menu(int n,int m,int w)
{
   //n代表学校数,m代表男子数,w代表女子数
    int c;
    void input(int n,int m,int w);//输入功能
    void output(int n,int m,int w);//输入功能
    void sortput(int n,int m,int w);//排序输出
    void search(int n,int m,int w);//查询功能
    printf("\t\t\t欢迎使用\t\t\t\t\t\n");
    printf("华信运动会分数统计系统\n\n");
    printf("1.信息输入\n");
    printf("2.统计输出\n");
    printf("3.排序输出\n");
    printf("4.信息查询\n");
    printf("5.退出系统\n\n");
    printf("=======================================================\n\n");
    printf("请输入您想要实现的功能(0--4):");
    scanf("%d",&c);
    switch(c){
   
    case 1:
        input(n,m,w);
        break;
    case 2:
        output(n,m,w);
        break;
    case 3:
        sortput(n,m,w);
        break;
    case 4:
        search(n,m,w);
        break;
    case 5:
        printf("感谢使用,祝您天天开心!!\n");
        exit(0);//正常退出
    default:
        printf("您输入有误,请重新输入!");
        menu(n,m,w);
    }
}

//将信息写入文件中

void savetofile()
{
   
    FILE *fp;//定义一个文件指针
    int i;
    if(NULL == (fp = fopen("file.txt","w"))){
   
        printf("打开文件失败!\n");
        return;
    }
    for(i = 0;i < N;i ++){
   
        if('\0' != a[i].snum)
        if(fwrite(&a[i],sizeof(snode),1,fp) != 1){
   
            printf("存入信息失败!\n");
            return;
        }
    }
    fclose(fp);//关闭文件
}

//将信息从文件里取出

void readfromfile()
{
   
    int i;
    FILE *fp;
    if((fp=fopen("file.txt","rb"))==NULL){
   
        printf("文件打开失败!\n");
        return;
    }
    for(i = 0;i < N;i ++){
   
        fread(&a[i],sizeof(snode),1,fp);
    }
    fclose(fp);
}

//信息输入功能

void input(int n,int m,int w)
{
   
    int i,j,s,k,q = 1;
    for(i = 0;i < n;i ++){
   
        printf("请输入学校的编号:");
        scanf("%d",&a[i].snum);
        for(j = 0;j < m + w;j ++){
   //总的项目的输入
            printf("请输入项目编号:");
            scanf("%d",&a[i].t[j].inum);
            printf("请输入该项目取前3还是前5(输入3或5):");
            scanf("%d",&a[i].t[j].top);
            if(3 == a[i].t[j].top){
   
                printf("获得的名次的个数(1--3):");
            }else if(5 == a[i].t[j].top){
   
                printf("获得的名次的个数(1--5):");
            }else{
   
                printf("输入有误!程序退出....");
                return;
            }
            scanf("%d",&k);//输入获得名次的个数
            for(s = 0;s < k;s ++){
   
                if(3 == a[i].t[j].top){
   
                    printf("请输入获得的名次(1--3):");
                }else{
   
                    printf("请输入获得的名次(1--5):");
                }
                scanf("%d",&a[i].t[j].range[s]);//输入所获得的名次的信息
            }
            printf("\n");
        }
    }
    for(i = 0;i < n;i ++){
   
        //初始化分数
        a[i].score=0;//学校总分
        a[i].mscore=0;//男子总分
        a[i].wscore=0;//女子总分
    }
    for(i = 0;i < n;i ++){
   
        for(j = 0;j < m + w;j ++){
   
            if(0 == i){
   
                printf("项目%d取得是前3还是前5(输入3或5):",j + 1);
                scanf("%d",&a[i].t[j].top);
            }
            for(s = 0;s < 5;s ++){
   
                if(3 == a[i].t[j].top){
   //如果是取前三
                    switch(a[i].t[j].range[s]){
   
                    case 0:
                       a[i].t[j].mark[s] = 0 ;
                       break;
                    case 1:
                       a[i].t[j].mark[s] = 5;
                        break;
                    case 2:
                        a[i].t[j].mark[s] = 3;
                        break;
                    case 3:
                        a[i].t[j].mark[s] = 2;
                        break;
                    }
                }else if(5 == a[i].t[j].top){
   
                    switch(a[i].t[j].range[s]){
   
                    case 0:
                        a[i].t[j].mark[s] = 0;
                        break;
                    case 1:
                        a[i].t[j].mark[s] = 7;
                        break;
                    case 2:
                        a[i].t[j].mark[s] = 5;
                        break;
                    case 3:
                        a[i].t[j].mark[s] = 3;
                        break;
                    case 4:
                        a[i].t[j].mark[s] = 2;
                        break;
                    case 5:
                        a[i].t[j].mark[s] = 1;
                        break
  • 108
    点赞
  • 713
    收藏
    觉得还不错? 一键收藏
  • 26
    评论
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值