运动会积分系统

运动会积分系统


问题描述:学生运动会成绩数据库系统记录某校运动会上全部运动项目,各系获得的分数及排名情况,运动会项目包括100,400,1500米,跳高,跳远等。分设男子组和女子组。请设计一个积分系统,方便学校对比赛成绩进行统计管理


功能要求:

管理员:

1) 管理员凭密码进入系统,完成以下工作

      填写比赛结果(每项目取前三名,分别为积7,5,4分),输入各项目获奖运动员的信息

2)可以按各系院名称输出该学院获得的总分,并按总分排序

3)输出男子团体,女子团体总分排序结果

4)实现按院系名称,运动项目名称查询比赛成绩


普通用户:

普通用户可以查询运动员个人比赛成绩,查看参赛院系的成绩和各比赛项目最终名次等。


以下代码运行须知:

1.在vc6.0下fstream头文件要改成fstream.h

2.在工程目录下手动新建三个.txt文件

1) password.txt (输入******并保存)

2) game_data.txt (空文件)

3) department_data.txt (空文件)

3.性别男为m,女为f,不能输入别的无关字符

4.部分环境不支持中文,与字符编码有关

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fstream>

typedef struct athlete
{
    char name[20];  //姓名
    char code[10]; //号码
    char department[20]; //院系
}Athlete;

typedef struct award_name
{
    char sport[20]; //项目名称
    char sex[10];       //f女 m男
    Athlete award_ath;
    int rank;
    int score;
}Award;

typedef struct statistic
{
    char department[20];
    int score_fm;
    int score_m;
    int score;
}Statistic;

int Judge_Password()
{
    char inp[20];
    char p[20];
    FILE *fp = NULL;
    fp = fopen("password.txt", "r+");
    fscanf(fp, "%s", p);
    if(strcmp(p, "******") == 0)      //输入原始密码
    {
        printf("Please input init password (no more than 15ch)\n");
        scanf("%s", p);
        fprintf(fp, "%s", p);
        fclose(fp);
        return 1;
    }
    else
    {
        printf("Please input the password\n");
        scanf("%s", inp);
        if(strcmp(inp, p + 6) == 0)
        {
            fclose(fp);
            return 1;
        }
        else
        {
            printf("wrong password!\n");
            fclose(fp);
            return 0;
        }
    }
}

void a_input_result()
{
    int i, j, flag1, flag2, d_num = 0, a_num = 0, tmpd, tmpa;
    FILE *fp1, *fp2;
    Award a[3], af[100];
    Statistic s[3], sf[100];
    memset(a, 0, sizeof(a));
    memset(s, 0, sizeof(s));
    fp1 = fopen("game_data.txt", "r");
    fp2 = fopen("department_data.txt", "r");
    fscanf(fp2, "%d\n", &d_num);
    fscanf(fp1, "%d\n", &a_num);
    for(i = 0; i < d_num; i++)
        fscanf(fp2, "%s %d %d %d\n", sf[i].department, &sf[i].score_fm, &sf[i].score_m, &sf[i].score);
    for(i = 0; i < a_num; i++)
        fscanf(fp1, "%s %s %s %s %s %d %d\n", af[i].sport, af[i].award_ath.name, af[i].award_ath.code, af[i].award_ath.department, af[i].sex, &af[i].rank, &af[i].score);
    fclose(fp1);
	fclose(fp2);
	printf("按项目输入前三名信息(项目名称 姓名 编号 院系 性别 排名):\n");
    for(i = 0; i < 3; i++)
    {
        scanf("%s %s %s %s %s %d", a[i].sport, a[i].award_ath.name, a[i].award_ath.code, a[i].award_ath.department, a[i].sex, &a[i].rank);
        if(i == 0)
        {
            if(a[i].sex[0] == 'f')
                s[i].score_fm += 7;
            else
                s[i].score_m += 7;
            s[i].score += 7;
            a[i].score += 7;
        }
        else if(i == 1)
        {
            if(a[i].sex[0] == 'f')
                s[i].score_fm += 5;
            else
                s[i].score_m += 5;
            s[i].score += 5;
            a[i].score += 5;
        }
        else if(i == 2)
        {
            if(a[i].sex[0] == 'f')
                s[i].score_fm += 4;
            else
                s[i].score_m += 4;
            s[i].score += 4;
            a[i].score += 4;
        }
        strcpy(s[i].department, a[i].award_ath.department);
    }
    for(i = 0; i < 3; i++)
    {
        af[a_num + i] = a[i];
        sf[d_num + i] = s[i];
    }
    a_num += 3;
    d_num += 3;
	fp1 = fopen("game_data.txt", "w");
    fp2 = fopen("department_data.txt", "w");
    fprintf(fp2, "%d\n", d_num);
    fprintf(fp1, "%d\n", a_num);
    for(i = 0; i < a_num; i++)
        fprintf(fp1, "%s %s %s %s %s %d %d\n", af[i].sport, af[i].award_ath.name, af[i].award_ath.code, af[i].award_ath.department, af[i].sex, af[i].rank, af[i].score);
    for(i = 0; i < d_num; i++)
        fprintf(fp2, "%s %d %d %d\n", sf[i].department, sf[i].score_fm, sf[i].score_m, sf[i].score);
    fclose(fp1);
    fclose(fp2);
}

void Swap(Statistic x, Statistic y)
{
    Statistic tmp;
    tmp = x;
    x = y;
    y = tmp;
}

void Sort(Statistic *s, int num, int op) //0总分 1男 2女
{
    int i, j, mi, idx;
    for(i = 0; i < num; i++)
    {
        mi = 1000000;
        for(j = i; j < num; j ++)
        {
            if(op == 0)
            {
                if(s[j].score < mi)
                {
                    mi = s[j].score;
                    idx = j;
                }
            }
            else if(op == 1)
            {
                if(s[j].score_m < mi)
                {
                    mi = s[j].score_m;
                    idx = j;
                }
            }
            else
            {
                if(s[j].score_fm < mi)
                {
                    mi = s[j].score_fm;
                    idx = j;
                }
            }
        }
        Swap(s[i], s[j]);
    }
}

void a_output_total_goal()
{
    int i, j, num, cnt = 0, flag = 0, idx;
    Statistic s[100], rs[100];
    FILE *fp;
	memset(rs, 0, sizeof(rs));
    fp = fopen("department_data.txt", "r");
    fscanf(fp, "%d", &num);
    for(i = 0; i < num; i++)
        fscanf(fp, "%s %d %d %d\n", s[i].department, &s[i].score_fm, &s[i].score_m, &s[i].score);
	for(i = 0; i < num; i++)
    {
		for(j = 0; j < cnt; j++)
		{
			flag = 0;
			if(strcmp(s[i].department, rs[j].department) == 0)
			{
				flag = 1;
				idx = j;
				break;
			}
		}
		if(flag)
        {
			rs[idx].score += s[i].score;
        }
		else
		{
			strcpy(rs[cnt].department, s[i].department);
			rs[cnt].score += s[i].score;
			cnt ++;
		}
    }
	Sort(rs, cnt, 0);
	for(i = 0; i < cnt; i++)
		printf("院系名称: %s  总分: %d\n", rs[i].department, rs[i].score);
    fclose(fp);
}

void a_output_fandfm_goal()
{
    int i, j, num, cnt1 = 0, cnt2 = 0, f1 = 0, f2 = 0, idx;
    Statistic s[100], rfs[100], rms[100];
    FILE *fp;
    fp = fopen("department_data.txt", "r");
	memset(rfs, 0, sizeof(rfs));
	memset(rms, 0, sizeof(rms));
    fscanf(fp, "%d", &num);
    for(i = 0; i < num; i++)
        fscanf(fp, "%s %d %d %d\n", s[i].department, &s[i].score_fm, &s[i].score_m, &s[i].score);
    for(i = 0; i < num; i++)
    {
		for(j = 0; j < cnt1; j++)
		{
			f1 = 0;
			if(strcmp(s[i].department, rms[j].department) == 0)
			{
				f1 = 1;
				idx = j;
				break;
			}
		}
		if(f1)
        {
			rms[idx].score_m += s[i].score_m;
            //printf("rms[%d].score_m = %d\n", idx, rms[idx].score_m);
        }
		else
		{
            //printf("rms[%d].score_m = %d\n", cnt1, rms[cnt1].score_m);
			strcpy(rms[cnt1].department, s[i].department);
			rms[cnt1].score_m += s[i].score_m;
			cnt1 ++;
		}
    }
	Sort(rms, cnt1, 1);
    for(i = 0; i < cnt1; i++)
        printf("院系名称: %s  男团分: %d\n", rms[i].department, rms[i].score_m);
    printf("\n\n");
    for(i = 0; i < num; i++)
    {
		for(j = 0; j < cnt2; j++)
		{
			f2 = 0;
			if(strcmp(s[i].department, rfs[j].department) == 0)
			{
				f2 = 1;
				idx = j;
				break;
			}
		}
		if(f2)
			rfs[idx].score_fm += s[i].score_fm;
		else
		{
			strcpy(rfs[cnt2].department, s[i].department);
			rfs[cnt2].score_fm += s[i].score_fm;
			cnt2 ++;
		}
    }
	Sort(rfs, cnt2, 2);
    for(i = 0; i < cnt2; i++)
        printf("院系名称: %s  女团分: %d\n", rfs[i].department, rfs[i].score_fm);
    fclose(fp);
}

void query_by_department()
{
    int i, num, flag = 0, sum = 0, fm_sum = 0, m_sum = 0;
    FILE *fp;
    Statistic s[20];
    char d_name[100];
    fp = fopen("department_data.txt", "r");
    fscanf(fp, "%d", &num);
    for(i = 0; i < num; i++)
        fscanf(fp, "%s %d %d %d\n", s[i].department, &s[i].score_fm, &s[i].score_m, &s[i].score);
    printf("请输入查询的院系名称:\n");
    scanf("%s", d_name);
    for(i = 0; i < num; i++)
    {
        if(strcmp(d_name, s[i].department) == 0)
        {
            flag = 1;
            sum += s[i].score;
            m_sum += s[i].score_m;
            fm_sum += s[i].score_fm;
        }
    }
    if(!flag)
        printf("没有该院系的相关信息\n");
    else
        printf("院系名称: %s\n", d_name);
        printf("总分: %d\n", sum);
        printf("男子总分: %d\n", m_sum);
        printf("女子总分: %d\n", fm_sum);
    fclose(fp);
}

void a_query_by_aname()
{
    int i, num, flag = 0, cnt = 0;
    FILE *fp;
    Award ad[100], Tar[100];
    char a_name[100];
    memset(Tar, 0, sizeof(Tar));
    fp = fopen("game_data.txt", "r");
    fscanf(fp, "%d", &num);
    for(i = 0; i < num; i++)
        fscanf(fp, "%s %s %s %s %s %d %d\n", ad[i].sport, ad[i].award_ath.name, ad[i].award_ath.code, ad[i].award_ath.department, ad[i].sex, &ad[i].rank, &ad[i].score);
    printf("请输入查询的项目名称:\n");
    scanf("%s", a_name);
    for(i = 0; i < num; i++)
    {
        if(strcmp(a_name, ad[i].sport) == 0)
        {
            flag = 1;
            Tar[cnt ++] = ad[i];
        }
    }
    if(!flag)
        printf("没有该项目的相关信息\n");
    else
    {
        printf("项目名称: %s\n", a_name);
        for(i = 0; i < cnt; i++)
        {
            printf("运动员姓名: %s  编号: %s  学院: %s\n", Tar[i].award_ath.name, Tar[i].award_ath.code, Tar[i].award_ath.department);
            printf("运动员性别: %s  得分: %d  排名: %d\n", Tar[i].sex, Tar[i].score, Tar[i].rank);
            printf("\n");
        }
    }
    fclose(fp);
}

int Admin_opt() //管理员选项
{
    int opt = 0;
    printf("请选择操作\n");
    printf("1 - 填写比赛结果\n");
    printf("2 - 输出学院总分\n");
    printf("3 - 输出男子团体,女子团体的总分\n");
    printf("4 - 按院系名称查询比赛成绩\n");
    printf("5 - 按运动项目名称查询比赛成绩\n");
    printf("6 - 退出\n");
    scanf("%d", &opt);
    switch(opt)
    {
        case 1:
            a_input_result();
            break;
        case 2:
            a_output_total_goal();
            break;
        case 3:
            a_output_fandfm_goal();
            break;
        case 4:
            query_by_department();
            break;
        case 5:
            a_query_by_aname();
            break;
        case 6:
            return 0;
    }
    return 1;
}

void u_query_by_person()
{
    int i, num, flag = 0, cnt = 0;
    FILE *fp;
    Award ad[100], Tar[100];
    char p_name[100];
    memset(Tar, 0, sizeof(Tar));
    fp = fopen("game_data.txt", "r");
    fscanf(fp, "%d", &num);
    for(i = 0; i < num; i++)
        fscanf(fp, "%s %s %s %s %s %d %d\n", ad[i].sport, ad[i].award_ath.name, ad[i].award_ath.code, ad[i].award_ath.department, ad[i].sex, &ad[i].rank, &ad[i].score);
    printf("请输入查询的运动员姓名:\n");
    scanf("%s", p_name);
    for(i = 0; i < num; i++)
    {
        if(strcmp(p_name, ad[i].award_ath.name) == 0)
        {
            flag = 1;
            Tar[cnt ++] = ad[i];
        }
    }
    if(!flag)
        printf("没有该运动员的相关信息\n");
    else
    {
        printf("姓名: %s  编号: %s  学院: %s  性别: %s\n", p_name, Tar[0].award_ath.code, Tar[0].award_ath.department, Tar[0].sex);
        for(i = 0; i < cnt; i++)
            printf("项目名称: %s  得分: %d  排名: %d\n", Tar[i].sport, Tar[i].score, Tar[i].rank);
    }
    fclose(fp);
}

void u_query_final_rank()
{
    int i, num, flag = 0, cnt = 0;
    FILE *fp;
    Award ad[100], Tar[100];
    char s_name[100];
    fp = fopen("game_data.txt", "r");
    fscanf(fp, "%d", &num);
    for(i = 0; i < num; i++)
        fscanf(fp, "%s %s %s %s %s %d %d\n", ad[i].sport, ad[i].award_ath.name, ad[i].award_ath.code, ad[i].award_ath.department, ad[i].sex, &ad[i].rank, &ad[i].score);
    printf("请输入查询的项目名称:\n");
    scanf("%s", s_name);
    for(i = 0; i < num; i++)
    {
        if(strcmp(s_name, ad[i].sport) == 0)
        {
            flag = 1;
            Tar[cnt ++] = ad[i];
        }
    }
    if(!flag)
        printf("没有该项目的相关信息\n");
    else
    {
        printf("项目名称: %s\n", Tar[0].sport);
        for(int i = 0; i < cnt; i++)
        {
            printf("姓名: %s  编号: %s  学院: %s\n",  Tar[i].award_ath.name, Tar[i].award_ath.code, Tar[i].award_ath.department);
            printf("性别: %s  得分: %d  排名: %d\n", Tar[i].sex, Tar[i].score, Tar[i].rank);
            printf("\n");
        }
    }
    fclose(fp);
}

int user_opt()
{
    int opt = 0;
    printf("请选择操作\n");
    printf("1 - 查询运动员个人比赛成绩\n");
    printf("2 - 查看参赛院系的成绩\n");
    printf("3 - 各比赛项目最终名次\n");
    printf("4 - 退出\n");
    scanf("%d", &opt);
    switch(opt)
    {
        case 1:
            u_query_by_person();
            break;
        case 2:
            query_by_department();
            break;
        case 3:
            u_query_final_rank();
            break;
        case 4:
            return 0;
    }
    return 1;
}

int main()
{
    char id[20];    //管理员or用户
    printf("You can enter Q to quit\n\nPlease enter admin or user\n");
    while(scanf("%s", id))
    {
        if(strcmp(id, "admin") == 0)
        {
            while(!Judge_Password());
            while(Admin_opt());
            exit(0);
        }
        else if(strcmp(id, "user") == 0)
        {
            while(user_opt());
            exit(0);
        }
        else if(strcmp(id, "Q") == 0)
        {
            exit(0);
        }
        else
        {
            printf("invalid input\n");
        }
    }
    return 0;
}







  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值