📄 match.c
字号:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<malloc.h>
#include"Status.h"
//定义存储类型
#define MAX_NUM 20
typedef struct item
{
int id; //项目id
int type; //项目名次类型
int schoolid[5]; //各名次学校id
char name[6]; //项目名称
}item[MAX_NUM];
typedef struct school
{
int id; //学校id
int score; //学校总分
int mscore; //男子团体总分
int wscore; //女子团体总分
char name[10]; //学校名称
}school[MAX_NUM];
//函数声明
Status Init(item **Item, school **School);
Status ReadDat(item *Item, school *School);
Status WriteDat(item *Item, school *School);
Status InPutData(item *Item, school *School);
Status SumScore(item *Item, school *School);
Status PrintAsSchoolid(school *School);
Status PrintAsScore(school *School);
Status PrintAsMScore(school *School);
Status PrintAsWScore(school *School);
Status SearchAsSchool(item *Item, school *School);
Status SearchAsItem(item *Item, school *School);
Status PrintMenu();
Status Chose(item *Item, school *School, int i);
//初始化存储空间
Status Init(item **Item, school **School)
{
int i;
//为项目的存储分配空间
*Item = (item *)malloc(sizeof(item));
if (!(*Item)) return FALSE;
//初始化项目id
for (i=0; i<MAX_NUM; i++)
{
(**Item)[i].id = 0; //初始项目id为零
}//for
//为学校信息的存储分配空间
*School = (school *)malloc(sizeof(school));
if (!(*School)) return FALSE;
//初始化学校信息
for (i=0; i<MAX_NUM; i++)
{
(**School)[i].id = 0; //学校id为零
(**School)[i].score = 0; //学校分数为零
(**School)[i].mscore = 0; //学校男子团体分数为零
(**School)[i].wscore = 0; //学校女子团体分数为零
}//for
return OK;
}//初始化存储空间
//从文件读取数据
Status ReadDat(item *Item, school *School)
{
FILE *fp;
int i, j;
int maxSchool=0;
int maxItem, manItem;
if((fp=fopen("match.dat","r"))==NULL) return FALSE;
//读取学校数量,初始化学校id
fscanf(fp, "%d,", &maxSchool);
for (i=0; i<maxSchool; i++)
{
(*School)[i].id = i+1;
}//for
//读取项目的数量和男子项目的数量,初始化项目id
fscanf(fp, "%d,",&maxItem);
fscanf(fp, "%d,",&manItem);
for (i=0; i<manItem; i++)
{
(*Item)[i].id = i+1;
}//for
for (; i<maxItem; i++)
{
(*Item)[i].id = 0-i-1;
}//for
//读取各个项目的信息
for (i=0; i<maxItem; i++)
{
fscanf(fp, "%d,", &(*Item)[i].type); //项目名次类型
for (j=0; j<(*Item)[i].type; j++)
{
fscanf(fp, "%d,", &(*Item)[i].schoolid[j]); //项目各名次学校id
}//for
fgets((*Item)[i].name, 5, fp); //项目名称
}//for
//读取学校名称
fgets((*School)[0].name, 2, fp);
for (i=0; i<maxSchool; i++)
{
fgets((*School)[i].name, 9, fp);
}//for
fclose(fp);
return OK;
}//从文件读取数据
//将数据写入文件
Status WriteDat(item *Item, school *School)
{
FILE *fp;
int i, j;
int maxSchool, maxItem, manItem;
if((fp=fopen("match2.dat","w"))==NULL) return FALSE;
//将学校数量、总项目数量、男子项目数量写入到文件
for (maxSchool=0; (*School)[maxSchool].id; maxSchool++);//for
for (maxItem=0,manItem=0; (*Item)[maxItem].id>0; maxItem++,manItem++);//for
for (; (*Item)[maxItem].id; maxItem++);//for
fprintf(fp, "%d,%d,%d,\n", maxSchool,maxItem,manItem);
//将项目信息写入到文件
for (i=0; (*Item)[i].id; i++)
{
fprintf(fp, "%d,", (*Item)[i].type); //项目名次类型
for (j=0; j<(*Item)[i].type; j++)
{
fprintf(fp, "%d,", (*Item)[i].schoolid[j]); //项目各名次学校id
}//for
fputs((*Item)[i].name, fp); //项目名称
fprintf(fp, "\n");
}//for
//将学校名称写入到文件
for (i=0; i<maxSchool; i++)
{
fputs((*School)[i].name, fp);
}//for
fclose(fp);
return OK;
}//将数据写入文件
//依次输入所有信息
Status InPutData(item *Item, school *School)
{
int i, j;
int maxItem, manItem, maxSchool;
//输入参赛学校的数量
printf("请输入参赛学校的数量:");
scanf("%d",&maxSchool);
while(maxSchool<1 || maxSchool>MAX_NUM)
{
printf("您输入学校的数量超出范围,请重新输入:");
scanf("%d",&maxSchool);
}//while
//初始化学校id
for (i=0; i<maxSchool; i++)
{
(*School)[i].id = i+1;
printf("请输入编号为%d的学校的名称:",i+1);
scanf("%s",(*School)[i].name);
}//for
//输入项目的数量
printf("请输入项目的数量:");
scanf("%d",&maxItem);
while (maxItem<1 || maxItem>MAX_NUM)
{
printf("您输入项目的数量超出范围,请重新输入:");
scanf("%d",&maxItem);
}//while
//输入男子项目的数量
printf("请输入男子项目的数量:");
scanf("%d",&manItem);
while (manItem<1 || manItem>maxItem)
{
printf("您输入项目的数量超出范围,请重新输入:");
scanf("%d",&manItem);
}//while
for (i=0; i<manItem; i++)
{
(*Item)[i].id = i+1;
}//for
for (; i<maxItem; i++)
{
(*Item)[i].id = 0-i-1;
}//for
//输入每个项目的相关信息
for (i=0; i<maxItem; i++)
{
printf("\n现在开始输入第%d个项目的信息:\n",i+1);
printf("该项目的取的名次范围是:");
scanf("%d", &(*Item)[i].type);
while((*Item)[i].type!=3 && (*Item)[i].type!=5)
{
printf("您输入名次取项超出范围,请重新输入:");
scanf("%d", &(*Item)[i].type);
}//while
for (j=0; j<(*Item)[i].type; j++)
{
printf("第%d名学校的编号为:",j+1);
scanf("%d,", &(*Item)[i].schoolid[j]);
while((*Item)[i].schoolid[j]<1 || (*Item)[i].schoolid[j]>maxSchool)
{
printf("您输入的学校编号超出范围,请重新输入:");
scanf("%d,", &(*Item)[i].schoolid[j]);
}//while
}//for
printf("该项目的名称为:");
scanf("%s",(*Item)[i].name);
}//for
return OK;
}//依次输入所有信息
//统计各学校分数
Status SumScore(item *Item, school *School)
{
int i;
for (i=0; (*Item)[i].id; i++)
{
if ((*Item)[i].type==3) //项目取前三名
{
(*School)[(*Item)[i].schoolid[0]-1].score += 5; //第一名学校分数
(*School)[(*Item)[i].schoolid[1]-1].score += 3; //第二名学校分数
(*School)[(*Item)[i].schoolid[2]-1].score += 2; //第三名学校分数
if((*Item)[i].id > 0)
{
(*School)[(*Item)[i].schoolid[0]-1].mscore += 5; //第一名男子团体分数
(*School)[(*Item)[i].schoolid[1]-1].mscore += 3; //第二名男子团体分数
(*School)[(*Item)[i].schoolid[2]-1].mscore += 2; //第三名男子团体分数
}//if
else if((*Item)[i].id < 0)
{
(*School)[(*Item)[i].schoolid[0]-1].wscore += 5; //第一名女子团体分数
(*School)[(*Item)[i].schoolid[1]-1].wscore += 3; //第二名女子团体分数
(*School)[(*Item)[i].schoolid[2]-1].wscore += 2; //第三名女子团体分数
}//if
}//if
else if ((*Item)[i].type==5)//项目取前五名
{
(*School)[(*Item)[i].schoolid[0]-1].score += 7; //第一名学校分数
(*School)[(*Item)[i].schoolid[1]-1].score += 5; //第二名学校分数
(*School)[(*Item)[i].schoolid[2]-1].score += 3; //第三名学校分数
(*School)[(*Item)[i].schoolid[3]-1].score += 2; //第四名学校分数
(*School)[(*Item)[i].schoolid[4]-1].score += 1; //第五名学校分数
if((*Item)[i].id > 0)
{
(*School)[(*Item)[i].schoolid[0]-1].mscore += 7; //第一名男子团体分数
(*School)[(*Item)[i].schoolid[1]-1].mscore += 5; //第二名男子团体分数
(*School)[(*Item)[i].schoolid[2]-1].mscore += 3; //第三名男子团体分数
(*School)[(*Item)[i].schoolid[3]-1].mscore += 2; //第四名学校分数
(*School)[(*Item)[i].schoolid[4]-1].mscore += 1; //第五名学校分数
}//if
else if((*Item)[i].id < 0)
{
(*School)[(*Item)[i].schoolid[0]-1].wscore += 7; //第一名女子团体分数
(*School)[(*Item)[i].schoolid[1]-1].wscore += 5; //第二名女子团体分数
(*School)[(*Item)[i].schoolid[2]-1].wscore += 3; //第三名女子团体分数
(*School)[(*Item)[i].schoolid[3]-1].wscore += 2; //第四名女子分数
(*School)[(*Item)[i].schoolid[4]-1].wscore += 1; //第五名女子分数
}//if
}//if
}//for
return OK;
}//统计各学校分数
//按学校编号顺序排名
Status PrintAsSchoolid(school *School)
{
int i;
printf("按学校编号顺序排名\n\n");
printf("│学校编号/名称 │ 团体总分 │ 男子总分 │ 女子总分 │\n");
for (i=0; (*School)[i].id; i++)
{
printf("│%3d %s ",i+1,(*School)[i].name);
printf("│ %3d ",(*School)[i].score);
printf("│ %3d ",(*School)[i].mscore);
printf("│ %3d │\n",(*School)[i].wscore);
}
printf("\n\n");
system("pause");
system("cls");
return OK;
}//按学校编号顺序排名
//按学校总分顺序排名
Status PrintAsScore(school *School)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -