运动会积分系统

运动会积分系统

问题描述:学生运动会成绩数据库系统记录某校运动会上全部运动项目,各系获得的分数及排名情况,运动会项目包括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

#include

#include

#include

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;

}

大数据驱动的足球运动员表现评估模型研究
欧洲杯再取6连胜,总18中15分析意大利男篮