You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

235 lines
6.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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);
}
}
}