|
|
#include<stdio.h>
|
|
|
#include<stdlib.h>
|
|
|
#define N 2
|
|
|
#define M 1
|
|
|
#define W 1
|
|
|
typedef struct score
|
|
|
{
|
|
|
int mark[5];
|
|
|
int itmnum;
|
|
|
int itmkind;
|
|
|
char itmname[20];
|
|
|
char name[10];
|
|
|
int level;
|
|
|
int range[5];
|
|
|
}sc;
|
|
|
typedef struct school
|
|
|
{
|
|
|
int sclnum;
|
|
|
char sclname[20];
|
|
|
sc a[M+W];
|
|
|
int mscore;
|
|
|
int wscore;
|
|
|
int sum;
|
|
|
struct school *next;
|
|
|
}scl;
|
|
|
scl *p,*q,*head,*g,*s,*u;
|
|
|
void menu()
|
|
|
{
|
|
|
system("cls");
|
|
|
printf("★----------------------------------------运动会比赛计分系统------------------------------------- ★\n");
|
|
|
printf("** 1-------------------键盘输入 **\n");
|
|
|
printf("** 2-------------------输出 **\n");
|
|
|
printf("** 3-------------------查询 **\n");
|
|
|
printf("** 4-------------------退出 **\n");
|
|
|
printf("**该系统计分方式为: **\n");
|
|
|
printf("**男子前三名依次得分:5分 3分 2分 **\n");
|
|
|
printf("**女子前五名依次得分:7分 5分 3分 2分 1分 **\n");
|
|
|
printf("★----------------------------------------------------------------------------------------------- ★\n");
|
|
|
}
|
|
|
/*******************************计 分 函 数*******************************/
|
|
|
void calculate(int i,int x,int k)
|
|
|
{
|
|
|
if(k==5)
|
|
|
{
|
|
|
switch(p->a[x].range[i])
|
|
|
{
|
|
|
case 0: p->a[x].mark[p->a[x].range[i]]=0;break;
|
|
|
case 1: p->a[x].mark[p->a[x].range[i]]=5;break;
|
|
|
case 2: p->a[x].mark[p->a[x].range[i]]=3;break;
|
|
|
case 3: p->a[x].mark[p->a[x].range[i]]=2;break;
|
|
|
default: printf("输入有误!\n");
|
|
|
exit(0);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
switch(p->a[x].range[i])
|
|
|
{
|
|
|
case 0: p->a[x].mark[p->a[x].range[i]]=0;break;
|
|
|
case 1: p->a[x].mark[p->a[x].range[i]]=7;break;
|
|
|
case 2: p->a[x].mark[p->a[x].range[i]]=5;break;
|
|
|
case 3: p->a[x].mark[p->a[x].range[i]]=3;break;
|
|
|
case 4: p->a[x].mark[p->a[x].range[i]]=2;break;
|
|
|
case 5: p->a[x].mark[p->a[x].range[i]]=1;break;
|
|
|
default: printf("输入有误!\n");break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
/***********************输 入 函 数***********************/
|
|
|
scl *input()
|
|
|
{
|
|
|
int i,x,y=1,k;
|
|
|
p=(scl*)malloc(sizeof(scl));
|
|
|
printf("\n**-------------------按如下格式输入(请勿输入重复编号)-----------------------**\n");
|
|
|
printf("**-----------------项目类型有:222---男子 111---女子-----------------------**\n");
|
|
|
printf("***学校编号\n**学校名称\n**项目编号**项目类型**项目名称**获得名次数**名次**姓名***\n");
|
|
|
p->mscore=0;p->wscore=0;
|
|
|
scanf("%d",&p->sclnum);
|
|
|
scanf("%s",p->sclname);
|
|
|
for(x=0;x<W+M;x++)
|
|
|
{
|
|
|
scanf("%d",&p->a[x].itmnum);
|
|
|
scanf("%d",&p->a[x].itmkind);
|
|
|
scanf("%s",p->a[x].itmname);
|
|
|
scanf("%d",&p->a[x].level);
|
|
|
for(i=0;i<p->a[x].level;i++)
|
|
|
{
|
|
|
scanf("%d",&p->a[x].range[i]);
|
|
|
scanf("%s",p->a[x].name);
|
|
|
}
|
|
|
if(p->a[x].itmkind==222)
|
|
|
k=5;
|
|
|
else
|
|
|
k=3;
|
|
|
for(i=0;i<p->a[x].level;i++)
|
|
|
{
|
|
|
calculate(i,x,k);
|
|
|
if(p->a[x].itmkind==222 )
|
|
|
p->mscore+=p->a[x].mark[p->a[x].range[i]];
|
|
|
else
|
|
|
p->wscore+=p->a[x].mark[p->a[x].range[i]];
|
|
|
}
|
|
|
}
|
|
|
p->sum=p->mscore+p->wscore;
|
|
|
head=p;
|
|
|
q=p;
|
|
|
while(y<N)
|
|
|
{
|
|
|
y=y+1;
|
|
|
p=(scl*)malloc(sizeof(scl));
|
|
|
p->mscore=0;p->wscore=0;
|
|
|
scanf("%d",&p->sclnum);
|
|
|
scanf("%s",p->sclname);
|
|
|
for(x=0;x<M+W;x++)
|
|
|
{
|
|
|
scanf("%d",&p->a[x].itmnum);
|
|
|
scanf("%d",&p->a[x].itmkind);
|
|
|
scanf("%s",p->a[x].itmname);
|
|
|
scanf("%d",&p->a[x].level);
|
|
|
for(i=0;i<p->a[x].level;i++)
|
|
|
{
|
|
|
scanf("%d",&p->a[x].range[i]);
|
|
|
scanf("%s",p->a[x].name);
|
|
|
}
|
|
|
if(p->a[x].itmkind==222)
|
|
|
k=5;
|
|
|
else
|
|
|
k=3;
|
|
|
for(i=0;i<p->a[x].level;i++)
|
|
|
{
|
|
|
calculate(i,x,k);
|
|
|
if(p->a[x].itmkind==222)
|
|
|
p->mscore+=p->a[x].mark[p->a[x].range[i]];
|
|
|
else
|
|
|
p->wscore+=p->a[x].mark[p->a[x].range[i]];
|
|
|
}
|
|
|
}
|
|
|
p->sum=p->mscore+p->wscore;
|
|
|
q->next=p;
|
|
|
q=p;
|
|
|
}
|
|
|
p->next=NULL;
|
|
|
menu();
|
|
|
return head;
|
|
|
}
|
|
|
/********************输 出 函 数********************/
|
|
|
void output(scl *head)
|
|
|
{
|
|
|
scl *q=head;
|
|
|
int i,x,y=1;
|
|
|
FILE *fp;
|
|
|
int number;
|
|
|
printf("****1---------不输出,存入文件\n");
|
|
|
printf("****2---------输出,不存入文件\n");
|
|
|
scanf("%d",&number);
|
|
|
switch(number)
|
|
|
{
|
|
|
case 1:
|
|
|
{
|
|
|
fp=fopen("d:\\clanguage.txt","w+");
|
|
|
if(fp==NULL)
|
|
|
{printf("无法打开文件!");exit(0);}
|
|
|
while(q!=NULL)
|
|
|
{
|
|
|
fprintf(fp,"学校编码为:%d",q->sclnum);
|
|
|
fprintf(fp,"学校名称为:%s\n",q->sclname);
|
|
|
for(x=0;x<W+M;x++)
|
|
|
{
|
|
|
fprintf(fp,"项目种类为:%d",q->a[x].itmkind);
|
|
|
fprintf(fp,"项目名称为:%s\n",q->a[x].itmname);
|
|
|
fprintf(fp,"获奖数目为:%d\t\n",q->a[x].level);
|
|
|
for(i=0;i<q->a[x].level;i++)
|
|
|
fprintf(fp,"第%d名",q->a[x].range[i]);
|
|
|
fprintf(fp,"得主:%s\n",q->a[x].name);
|
|
|
fprintf(fp,"\n");
|
|
|
}
|
|
|
q=q->next;
|
|
|
}
|
|
|
fclose(fp);
|
|
|
}break;
|
|
|
case 2:
|
|
|
while(q!=NULL)
|
|
|
{
|
|
|
printf("★-------------------------------------结果公示-------------------------------------★\n");
|
|
|
printf("*--------------------------------------学校编号:\t");
|
|
|
printf("%d\n",q->sclnum);
|
|
|
printf("*--------------------------------------学校名称:\t");
|
|
|
printf("%s\n",q->sclname);
|
|
|
for(x=0;x<W+M;x++)
|
|
|
{
|
|
|
printf("*--------------------------------------项目编号:\t");
|
|
|
printf("%d\n",q->a[x].itmnum);
|
|
|
printf("*--------------------------------------项目类型:\t");
|
|
|
printf("%d\n",q->a[x].itmkind);
|
|
|
printf("*--------------------------------------项目名称:\t");
|
|
|
printf("%s\n",q->a[x].itmname);
|
|
|
printf("*--------------------------------------有%d个获奖名次:\t",q->a[x].level);
|
|
|
for(i=0;i<q->a[x].level;i++)
|
|
|
{
|
|
|
printf("第%d名\t",q->a[x].range[i]);
|
|
|
//printf("%s",q->a[x].name);
|
|
|
}
|
|
|
printf("\n\n");
|
|
|
}printf("男子团体项目总分:\t%d\n",q->mscore);
|
|
|
printf("女子团体项目总分:\t%d\n",q->wscore);
|
|
|
printf(" 学校项目总得分:\t%d\n\n",q->sum);
|
|
|
printf("望再接再厉!\n");
|
|
|
printf("\n");
|
|
|
q=q->next;
|
|
|
}break;
|
|
|
default :
|
|
|
puts("输入有误!");
|
|
|
exit(0);
|
|
|
}
|
|
|
}
|
|
|
int main() //主函数1
|
|
|
{
|
|
|
int ch;
|
|
|
menu();
|
|
|
while(1)
|
|
|
{
|
|
|
printf("--------------请选择\t");
|
|
|
scanf("%d",&ch);
|
|
|
switch(ch)
|
|
|
{
|
|
|
case 1: menu();g=input(); break;
|
|
|
case 2: menu();output(g); break;
|
|
|
//case 3: menu();find(g); break;
|
|
|
case 4: menu();printf("******************************谢谢您的使用!******************************\n");
|
|
|
printf("******************************生命在于运动!******************************\n");exit(0);
|
|
|
default: menu();printf("对不起!输入有误!\n");exit(0);
|
|
|
}
|
|
|
}
|
|
|
}
|