⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sports.c

📁 数据结构课程设计:(1)民航航班信息服务系统 (2)运动会分数统计 包括源代码、EXE文件、课程设计报告!比较全。
💻 C
字号:
/*运动会分数统计*/
/*本程序在Microsoft Visual C++ 6.0运行通过*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define M_NUM 1      /*男子项目编号*/
#define W_NUM 1      /*女子项目编号*/
#define S_NUM 3      /*学校数目*/
void input();
void pritotal();
void count();
void Sort_menu();
void Search_sch();
void Search_pro();
void Sort_sch();
void Sort_total();
void Sort_man();
void Sort_woman();
void Save();
void Load();
void Exit();
struct project          /*项目的结构体数组*/
{
    char school_name[10][10];    /*获奖学校名*/
    char name[10];     /*项目名*/
    int flag;         /*flag为0,取前五名;否则取前三名*/
  }pArray[M_NUM+W_NUM];
struct school         /*学校的结构体数组*/
{
    char name[10];
    int total;        /*学校总分*/
    int m_total;      /*男子团体总分*/
    int w_total;      /*女子团体总分*/
  }sArray[S_NUM];
int school_num = 0;
int s_array1[5] = {7,5,3,2,1};   /*取前五名时的各名次得分情况*/
int s_array2[3] = {5,3,2};     /*取前三名时的各名次得分情况*/

/*主菜单*/
void main_menu()
{
    while(1)
    {
        int key;
        system("cls");
        printf("运动会分数统计系统主菜单\n");
        printf("\n1.输入数据\n");
		printf("2.保存数据\n");
		printf("3.载入数据\n");
        printf("4.统计各学校总分\n");
        printf("5.各种排序\n");
        printf("6.查询某个学校在某个项目获奖情况\n");
        printf("7.查询某个项目获奖情况\n");
        printf("8.退出\n\n");
        scanf("%d",&key);
        switch(key)  {
            case 1:input();break;
			case 2:Save();break;
			case 3:Load();break;
            case 4:pritotal();break;
            case 5:Sort_menu();break;
            case 6:Search_sch();break;
            case 7:Search_pro();break;
            case 8:Exit();break;
            default:printf("输入错误,请输入1~8的数字!\n");
            getch();break;
          }
    }
}

/*排序菜单*/
void Sort_menu()
{
    while(1)  {
        int key;
        system("cls");
        printf("\n1.根据学校编号排序\n");
        printf("2.根据学校总分排序\n");
        printf("3.根据男子团体总分排序\n");
        printf("4.根据女子团体总分排序\n");
        printf("5.返回主菜单\n\n");
        scanf("%d",&key);
        switch(key)  {
            case 1:Sort_sch();break;
            case 2:Sort_total();break;
            case 3:Sort_man();break;
            case 4:Sort_woman();break;
            case 5:main_menu();break;
            default:printf("输入错误,请输入1~5的数字!\n");
            getch();break;
            }
    }
    return;
}

/*输入数据*/
void input()
{
    int i,j,k,hspos;
    system("cls");
    for(j=0;j<M_NUM+W_NUM;j++)
    {
        printf("\n输入编号为%d的项目名称:",j+1);
        scanf("%s",pArray[j].name);
        printf("该项目取前几名?\n取前五名输入1,取前三名输入0:");
        scanf("%d",&pArray[j].flag);
        if (pArray[j].flag==1)               /*判断该项目取前几名*/
        hspos=5;
        else hspos=3;
        for(i=0;i<hspos;i++)
        {
            printf("输入获第%d名学校:",i+1);
            scanf("%s",pArray[j].school_name[i]);
            for(k=0;k<school_num;k++)
            {
               if(strcmp(pArray[j].school_name[i],sArray[k].name)==0) break;
            }
            if(k==school_num)  {
                strcpy(sArray[k].name,pArray[j].school_name[i]);
                school_num++;
              }
        }
    }
   count();
   main_menu();
   return;
}

/*保存数据*/
void Save()
{
	int i,j,k,hspos;
	FILE *fp;
	fp=fopen("aaa.txt","w");
    for(j=0;j<M_NUM+W_NUM;j++)
    {
        fprintf(fp,"%s",pArray[j].name);
		fprintf(fp,"%d",pArray[j].flag);
        if (pArray[j].flag==1)               /*判断该项目取前几名*/
        hspos=5;
        else hspos=3;
        for(i=0;i<hspos;i++)
        {
			fprintf(fp,"%s",pArray[j].school_name[i]);
            for(k=0;k<school_num;k++)
            {
               if(strcmp(pArray[j].school_name[i],sArray[k].name)==0) break;
            }
            if(k==school_num)  {
                strcpy(sArray[k].name,pArray[j].school_name[i]);
                school_num++;
              }
        }
    }
	printf("保存成功!");
	getch();
    main_menu();
    return;
}

/*载入数据*/
void Load()
{
	int i,j,k,hspos;
	FILE *fp;
	if((fp=fopen("aaa.txt","r"))==NULL)
    {
        printf("找不到文件!\n");
		getch();
        main_menu();
    }
    for(j=0;j<M_NUM+W_NUM;j++)
    {
		fread(pArray[j].name,sizeof(char),4,fp);
		fscanf(fp,"%d",&pArray[j].flag);

        if (pArray[j].flag==1)
        hspos=5;
        else hspos=3;
        for(i=0;i<hspos;i++)
        {
			fread(pArray[j].school_name[i],sizeof(char),8,fp);
            for(k=0;k<school_num;k++)
            {
               if(strcmp(pArray[j].school_name[i],sArray[k].name)==0) break;
            }
            if(k==school_num)  {
                strcpy(sArray[k].name,pArray[j].school_name[i]);
                school_num++;
              }
        }
    }
   count();
   printf("载入成功!");
   getch();
   main_menu();
   return;
}

/*统计总分*/
void count()
{
    int i,j,k,hspos,sc;
    for(i=0;i<school_num;i++)
    {
        sArray[i].total=0;
        sArray[i].m_total=0;
        sArray[i].w_total=0;
    }
   for(i=0;i<M_NUM+W_NUM;i++)
   {
    if(pArray[i].flag==1) hspos=5;
    else hspos=3;
    for(j=0;j<hspos;j++)
    {
        for(k=0;k<school_num;k++)
        {
            if(strcmp(pArray[i].school_name[j],sArray[k].name)==0) break;
        }
        if(hspos==5) sc=s_array1[j];
        else sc=s_array2[j];
        sArray[k].total+=sc;
        if(i>=M_NUM)  sArray[k].w_total+=sc;
        else sArray[k].m_total+=sc;
    }
   }
  return;
}

/*显示总分*/
void pritotal()
{
  int i;
  system("cls");
  printf("有%d个学校\n",school_num);
  printf("学校名称    学校总分    男子团体    女子团体\n");
  for(i=0;i<school_num;i++)
  printf("%-12s  %-10d  %-10d  %-4d\n",sArray[i].name,sArray[i].total,sArray[i].m_total,sArray[i].w_total);
  getch();
  main_menu();
}

/*按学校查找*/
void Search_sch()
{
    char s_name[10],p_name[10];
    int i,j,hspos;
    system("cls");
    printf("请输入要查询的学校名称:");
    scanf("%s",s_name);
    printf("请输入要查询的项目名称:");
    scanf("%s",p_name);
    for(i=0;i<M_NUM+W_NUM;i++)
    {
        if(strcmp(pArray[i].name,p_name)==0) break;
    }
    if(pArray[i].flag==1) hspos=5;
    else hspos=3;
    if(i==M_NUM+W_NUM)   printf("您查找的项目不存在!");
    else {
        for(j=0;j<hspos;j++)
		{
            if(strcmp(pArray[i].school_name[j],s_name)==0) break;
        }
        if(j==hspos) printf("%s在%s项目中没有取到名次!\n",s_name,p_name);
        else printf("%s在%s项目中取到第%d名!\n",s_name,p_name,j+1);
    }
    getch();
    main_menu();
}

/*按项目查找*/
void Search_pro()
{
    char p_name[10];
    int i,j,hspos,flag;
    system("cls");
    printf("请输入要查询的项目名:");
    scanf("%s",p_name);
    flag=0;
    for(i=0;i<M_NUM+W_NUM;i++)
    {
        if(strcmp(pArray[i].name,p_name)==0)  {
            if(i>=M_NUM) printf("\n%s是女子项目!\n\n",p_name);
            else  printf("\n%s是男子项目!\n\n",p_name);
            if(pArray[i].flag==1) hspos=5;
            else hspos=3;
            for(j=0;j<hspos;j++)
            {
                printf("第%d名:%s\n",j+1,pArray[i].school_name[j]);
            }
            flag=1;
        }
    }
    if(flag==0)   printf("您查找的项目不存在!");
    getch();
    main_menu();
}

/*按学校编号排序*/
void Sort_sch()
{
    int i;
    system("cls");
    for(i=0;i<school_num;i++)
    {
        printf("NO.%d:%s\n",i+1,sArray[i].name);
    }
    getch();
    Sort_menu();
}

/*按总分排序*/
void Sort_total()
{
    struct school sArray1[S_NUM];
    int i,j;
    int total,m_total,w_total;
    char name[10];
    for(i=0;i<school_num;i++)
    {
      strcpy(sArray1[i].name,sArray[i].name);
      sArray1[i].total=sArray[i].total;
      sArray1[i].m_total=sArray[i].m_total;
      sArray1[i].w_total=sArray[i].w_total;
    }
    for(i=0;i<school_num;i++)
    for(j=i+1;j<school_num;j++)
    {
       if(sArray1[i].total<sArray1[j].total)  {
        total=sArray1[i].total;
        m_total=sArray1[i].m_total;
        w_total=sArray1[i].w_total;
        strcpy(name,sArray1[i].name);
        sArray1[i].total=sArray1[j].total;
        sArray1[i].m_total=sArray1[j].m_total;
        sArray1[i].w_total=sArray1[j].w_total;
        strcpy(sArray1[i].name,sArray1[j].name);
        sArray1[j].total=total;
        sArray1[j].m_total=m_total;
        sArray1[j].w_total=w_total;
        strcpy(sArray1[j].name,name);
       }
    }
   printf("学校名称    学校总分\n");
   for(i=0;i<school_num;i++)
   printf("%-12s  %-6d\n",sArray1[i].name,sArray1[i].total);
   getch();
   Sort_menu();
}

/*按男子总分排序*/
void Sort_man()
{
    struct school sArray1[S_NUM];
    int i,j;
    int total,m_total,w_total;
    char name[10];
    for(i=0;i<school_num;i++)
    {
      strcpy(sArray1[i].name,sArray[i].name);
      sArray1[i].total=sArray[i].total;
      sArray1[i].m_total=sArray[i].m_total;
      sArray1[i].w_total=sArray[i].w_total;
    }
    for(i=0;i<school_num;i++)
    for(j=i+1;j<school_num;j++)
    {
       if(sArray1[i].m_total<sArray1[j].m_total)  {
        total=sArray1[i].total;
        m_total=sArray1[i].m_total;
        w_total=sArray1[i].w_total;
        strcpy(name,sArray1[i].name);
        sArray1[i].total=sArray1[j].total;
        sArray1[i].m_total=sArray1[j].m_total;
        sArray1[i].w_total=sArray1[j].w_total;
        strcpy(sArray1[i].name,sArray1[j].name);
        sArray1[j].total=total;
        sArray1[j].m_total=m_total;
        sArray1[j].w_total=w_total;
        strcpy(sArray1[j].name,name);
       }
    }
	system("cls");
   printf("学校名称    男子总分\n");
   for(i=0;i<school_num;i++)
   printf("%-12s  %-6d\n",sArray1[i].name,sArray1[i].m_total);
   getch();
   Sort_menu();
}

/*按女子总分排序*/
void Sort_woman()
{
    struct school sArray1[S_NUM];
    int i,j;
    int total,m_total,w_total;
    char name[10];
    for(i=0;i<school_num;i++)
    {
      strcpy(sArray1[i].name,sArray[i].name);
      sArray1[i].total=sArray[i].total;
      sArray1[i].m_total=sArray[i].m_total;
      sArray1[i].w_total=sArray[i].w_total;
    }
    for(i=0;i<school_num;i++)
    for(j=i+1;j<school_num;j++)
    {
       if(sArray1[i].w_total<sArray1[j].w_total)  {
        total=sArray1[i].total;
        m_total=sArray1[i].m_total;
        w_total=sArray1[i].w_total;
        strcpy(name,sArray1[i].name);
        sArray1[i].total=sArray1[j].total;
        sArray1[i].m_total=sArray1[j].m_total;
        sArray1[i].w_total=sArray1[j].w_total;
        strcpy(sArray1[i].name,sArray1[j].name);
        sArray1[j].total=total;
        sArray1[j].m_total=m_total;
        sArray1[j].w_total=w_total;
        strcpy(sArray1[j].name,name);
         }
    }
	system("cls");
   printf("学校名称    女子总分\n");
   for(i=0;i<school_num;i++)
   printf("%-12s  %-6d\n",sArray1[i].name,sArray1[i].w_total);
   getch();
   Sort_menu();
}

/*退出*/
void Exit()
{
    exit(0);
}

/*主函数*/
int main()
{
    main_menu();
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -