参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)

经过两天的艰苦奋战,我终于完成了这项工作,排错和输入等方面做了很多改进,用户输入的时候会有很大的容错和拍错空间。

第二次选择1的时候就可以输入0--X(X=20-【已经录入的学校个数】)不再是5了

代码如下:

注意:文章可能会出现 intint  FILE 重复的情况 如果出现了  直接改为 int  FILE 即可  这是网页的问题

有问题QQ群:1037814669

因个人经济不行---xian向大家推荐一些编程语言视频,要的加我QQ-

目录如下:

2011版SSH框架视频教学【项目实战-校内网】附源码.关系图.数据库 主讲-韩顺平 完全版 视频教程
Altium Designer6.9 PCB设计教程 全31讲 主讲-郭天祥 视频教程
AutoForm视频教程及书籍教程大合集 8G文件 教程资源
C++快速入门视频教学 全48讲 完整版 主讲-小甲鱼 附课件 视频教程.rar
C语言视频教学 主讲-郝斌 全180讲 完整版 附代码.笔记.大纲 视频教程
delphi视频教学 完整版 主讲-小甲鱼 视频教程
Excel实战技巧精粹:Excel模板大全1000例
Java视频教学 全107讲 完整版 主讲-郝斌 附源代码.课件 视频教程
Photoshop软件 超实用修图调色集合  全172讲 视频教程
PHP从入门到精通掌握网站核心技术 全149讲 主讲-韩顺平 附笔记 视频教程
PHP培训第二版完整版视频教学 大型门户网站核心技术-Mysql优化 主讲-韩顺平 视频教程
proteus入门到精通 全29集 视频教程
spring视频教学讲座 全28讲 主讲-韩顺平 附笔记-图解-代码-开发包 视频教程
Université de Paris-Sud XI cAMP信号和兴奋收缩耦联的磷酸二酯酶控制 全3讲 主讲-Rodolphe 视频教程
WIN32汇编语言视频教学 全56讲 完整版 主讲-小甲鱼 视频教程

以上只是编程,其他方面的资源,ru~如果你需要其他资源,也加我QQ,我都能给你找到,大学的专业资源都有想加一个---

如果你xian想加个界面,点击此处链接:c语言模拟html登陆 可以将这个一部分代码整合进去。这部分代码适合win7,如果win10的话maybe得改一下

如果运行时出现debug error,可以将所有的free语句都去掉即可(百度云下载)。

# include <stdio.h>     //程序界面函数jiemian()有控制台宽度高度设置代码(第190行左右)
# include <stdlib.h>
# define N 12             //大学和项目名称的长度=汉字个数*sizeof(char)
# define M 20             //大学的数量
# define Q 20             //项目的数量
# define H 5               //调整每一行输出的学校或项目数量 现在一行输出5个
# define MIN(a,b) (a)<(b)?(a):(b)
const char wenjian[]="out.bin";//文件名
typedef struct link
{int gram[3][Q];       //每一个项目gram[0]存男生,gram[1]存女生,gram[2]存这个学校中男女在此项目上的总分int sum[3];
} AA,*Aa;
typedef struct HEAD
{int b[4];                     //b[0-3]依次为(学校个数,项目个数,男生项目个数,女生项目个数char xuexiao[M][N+1];  //M个学校的名称int sex[M];                 //sex[i]//录入性别,0为男,1为女struct link spot[M];   //接上M个学校的信息char xiangmu[Q][N+1]; //Q个项目的名称int  power[Q];           //每一个项目都有选择前三名或前五名的机会 POW存 3 或者 5int cun[Q][5];            //M个项目的学校编号排名1--3 或者 1--5
} HEAD;
char sex[][3]= {"男","女"};
int power[][5]= {{5,3,2,0,0},{7,5,3,2,1}}; //积分
char ss[][5]= {"男团","女团","学校"};
int gainchar(char A[],int min,int max);   //输入字符串的字节范围[min,max]
int gainint(int *p,int a,int b);//输入int *p直至满足[a,b]输入结束,并返回*p的位数
int BF(char a[],char b[]);//BF算法 a为主串,b为被检验的串`返回b在a中的第一个下标 若无返回0
void record(char school[][N+1],char game[][N+1],int b[],HEAD *temp);//记录数据最重要的一个函数,a为项目数组,b为记录,c为学校,Temp结构体
int jiemian();//用户显示界面
int jianyan(char b[],int T);//检验b[]是否符合实际,T=0检验当前字符串是否全为汉字 T=1检验学校,T=2检验比赛 检验符合返回0
void xuanzepai(HEAD *temp,int select);//选择排序
/*下面是检查用的数组 用在jianyan 函数中*/
char key[][3]= {"!","。","?","《","》",",","{","}","(",")","¥","‘","’",":",";","—","”","“","、","·","~","\0"};
char school[][5]= {"大学","学院","华侨","校区","政法","管理","经济","科学","理工","科技","技术","职业","师范","中国","海洋","石油","分区","分校","建筑","工业","\0"};
char program[][3]= {"跳","滑","冰","射","骑","跑","拉","球","举","水","摔","爬","泳","踩","接","划","体","田","人","\0"};
int DU(HEAD *head)
{FILE *fp;if ((fp = fopen(wenjian, "rb")) == NULL){if ((fp = fopen(wenjian, "wb+")) != NULL){fclose(fp);if ((fp = fopen(wenjian, "rb")) == NULL)return printf("文件读取失败!\n");}}fread(head,sizeof(HEAD), 1, fp);fclose(fp);// free(fp);return 0;
}
int XIE(HEAD *head)
{FILE *fp;if ((fp = fopen(wenjian, "wb")) == NULL)return printf("文件打开失败!\n");if(fwrite(head,sizeof(HEAD), 1, fp)!=1)return printf("文件写入失败!\n");fclose(fp);// free(fp);return 0;
}
int main()
{HEAD SG= {0},*head=&SG;int i,j,k,select,choice,now,next;if(DU(head)){printf("请按任意键继续…\n");getchar();}do{system("cls");//清屏select=jiemian();if(select==1)record(head->xuexiao,head->xiangmu,head->b,head);  //记录学校和项目else if(head->b[0]){if(select>=2&&select<=4)xuanzepai(head,select-2);//选择排序else if(select==5){for(k=0; k<head->b[0]; k++) //输出学校名称选项 每五个一行printf("%d:%-13s%c",k+1,head->xuexiao[k],(k+1)%H?' ':'\n');printf("\n输入学校前的编号[1,%d]:",head->b[0]);choice=gainint(&choice,1,head->b[0])-1;next=0;while(next<head->b[1]){now=next;next=MIN(next+H,head->b[1]);for(i=now; i<next; i++) //输出项目信息printf("(%s-%d>%-8s ",sex[head->sex[i]],head->power[i],head->xiangmu[i]);printf("\n");for(j=0; j<3; j++){printf("%-s:  ",ss[j]);for(k=now; k<next; k++){if(j==head->sex[k]||j==2)printf("%02d分    \t",(head->spot+choice)->gram[j][k]);elseprintf("******  \t");}printf("\n");}printf("\n");}}else if(select==6){for(i=0; i<head->b[1]; i++){printf("\t\t第%d个比赛项目: %-13s<%s子> 只录入前%d名\n",i+1,head->xiangmu[i],sex[head->sex[i]],head->power[i]);for(j=0; j<head->power[i]; j++){printf("\t第%d名:%-13s%02d分",j+1,head->xuexiao[head->cun[i][j]],power[(head->power[i])/4][j]);}printf("\n\n");}}else  //保存文件{if(select==9){printf("确认清空请按1 否则请按0:");if(gainint(&choice,0,1))for(k=0; k<Q; k++) //对申请出来的结构体中的所有项目初始化 M*2*M次for(i=0; i<3; i++){(head->spot+k)->sum[i]=0;   //sum[]初始化for(j=0; j<Q; j++)(head->spot+k)->gram[i][j]=0; //项目初始化head->b[i]=0;}}if(XIE(head))return 0;DU(head);}}printf("\n请按任意键继续…\n");getchar();}while(select!=8);return 0;
}
int BF(char a[],char b[])//BF算法 a为主串,b为被检验的串`返回b在a中的第一个下标 若无返回0
{int i=0,j=0;while (a[i]&&b[j])if (a[i++]==b[j])++j;   // 继续比较后继字else (i-=j)&&(j=0);return b[j]?0:i-j+1;
}
int gainint(int *p,int a,int b)//输入int *p直至满足[a,b]输入结束,并返回*p的值
{do{*p=a-1;    //此处是为了减少意外情况的发生 虽然那种意外情况不常见scanf("%d",p);while(getchar()!='\n');if(*p>b||*p<a)printf("输入有误,请重新输入[%d--%d]:",a,b);}while(*p>b||*p<a);return *p;
}
int gainchar(char A[],int min,int max)//长度在[min,max]  <闭区间>  之间时 函数结束 返回字符串A的长度
{int B,C;do{A[max]=B=C=0;while((A[B++]=getchar())!='\n'&&B<max);if(A[B-1]!='\n')while(getchar()!='\n'&&++C);else A[--B]=0;if(C||B&&B<min)printf("您录入的字符串长度:%d字节\n只录入(%d--%d)个字节!\n",B+C,min,max);}while(C||B<min);return B;
}
int jiemian()
{int a;system("mode con cols=135 lines=20");//控制台 宽度135 高度20printf("\t\t\t\t运动会分数统计\n");printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n");printf("\t* 1.添加 学校  项目                *三名制(1,2,3)\n");printf("\t* 2.按 男团体 总分排序输出         *score--5,3,2\n");printf("\t* 3.按 女团体 总分排序输出         *\n");printf("\t* 4.按 学校   总分排序输出         *五名制(1,2,3,4,5)\n");printf("\t* 5.按 编号或名称 查询学校情况     *score--7,5,3,2,1\n");printf("\t* 6.显示比赛项目各学校名次情况     *\n");printf("\t* 7.保存录入信息                   *一个汉字两个字节\n");printf("\t* 8.保存信息并退出                 *可分多次选择1\n");printf("\t* 9.清空+恢复初始化                *录入项目时默认先男后女\n");printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t");printf("链接:https://pan.baidu.com/s/1FEtJZOJ3mqp5O5h9x3JK6A 提取码:k5ru");printf("输入您的选择(1-9):");return gainint(&a,1,9);           //调用函数输入整形(1--6)
}
void record(char school[][N+1],char game[][N+1],int b[],HEAD *temp)//记录数据最重要的一个函数,a为项目数组,b为记录,c为学校,Temp结构体
{char choose[][13]= {"录入几个学校","总共几个项目","男生多少项目"}; //提示用户输入内容int scope[][3]= {{5,1,0},{M,Q,M}}; //输入的各个内容的范围int i,j,k,pan,cun,choice,man;scope[1][0]=M-b[0];//剩余录入的学校的数量scope[1][1]=Q-b[1];//剩余录入的项目的数量if(b[0])scope[0][0]=scope[0][1]=0;//当用户已经进入此函数输入过一次后,改变条件将学校个数项目个数下限改为0for(i=0; i<3; i++){printf("\t%s(%d--%d)?\n\t:",choose[i],scope[0][i],scope[1][i]);gainint(&b[i],scope[0][i],scope[1][i]);if(i==1){scope[1][2]=b[1];//当输入项目完毕时,改变男生项目的长度if(!b[0]&&!b[1]){b[2]=b[1];i++;}}if(i==2)    b[3]=b[1]-b[2];    //男生输入完毕时,女生的项目=总项目-男生项目}for(i=M-scope[1][0]; i<b[0]+M-scope[1][0]; i++) //每次要在结构体末尾加入学校do{k=0;printf("请输入第%d个学校的名称(只录入%d-%d字符):\n",i+1,8,N);gainchar(school[i],8,N);for(j=0; j<i; j++)  //对输入的学校名称进行判重if(BF(school[j],school[i])&&BF(school[i],school[j]))//当有之前的学校和当前录入的学校重复k++;if(k)printf("学校已经录入过!");}while(jianyan(school[i],1)||k);b[0]+=M-scope[1][0];//计算出目前的学校总数for(i=Q-scope[1][1]; i<b[1]+Q-scope[1][1]; i++) //录入项目{temp->sex[i]=(b[1]+Q-scope[1][1]-i)<=b[3];//确定性别,0为男,1为女do{k=0;printf("请输入第%d个项目(%s)名称(只录入%d-%d字符):\n",i+1,sex[temp->sex[i]],4,N); //输入项目名称gainchar(game[i],4,N);for(j=0; j<i; j++)if(BF(game[j],game[i]))k++;if(k)   printf("项目已经录入过!");//情况同学校pan=(k||jianyan(game[i],2));    //因为项目还要分录入前三名还是前五名if(!pan)//当输入满足要求时 继续询问项目的录入名次do{printf("该项目只录入: 3:前三名  5:前五名:");//询问录入的时前几名gainint(&(temp->power[i]),3,5);//将第i+1个项目的分数情况放在头节点的power[i]数组里}while((temp->power[i])==4);    //只录入3和5}while(pan);    //当输入不满足要求时重新输入system("cls");for(k=0; k<b[0]; k++) //输出学校名称选项 每五个一行printf("%d:%-13s%c",k+1,school[k],(k+1)%H?' ':'\n');printf("\n\n获得 %s:(%s子)的前%d名(填学校前的编号):\n",game[i],sex[temp->sex[i]],temp->power[i]);for(j=0; j<temp->power[i]; j++) //每次录入的项目个数=temp->power[i]{do{pan=0;printf("第%d名(%d-%d):",j+1,1,b[0]);cun=gainint(&cun,1,b[0])-1;//范围1-b[0](temp->cun[i][j])=cun;//temp->cun[i][j]中的数值就是第i个学校,名次为jfor(k=0; k<j; k++) //检验名次是否录入重复if(temp->cun[i][k]==cun)pan=printf("一个学校只有一个名次!\n");}while(pan);choice=power[(temp->power[i])/4][j];man=temp->sex[i];(temp->spot+cun)->gram[man][i]=choice;//把choice积分存入第cun个学校的第i个项目 的gram[man][i]里(temp->spot+cun)->gram[2][i]+=choice;//修改第cun个学校的该项目总分(temp->spot+cun)->sum[man]+=choice;//修改第cun个学校的m男女团体总积分(temp->spot+cun)->sum[2]+=choice;//修改学校的总积分}}b[1]+=Q-scope[1][1];//修改录入的项目的总数量
}
int jianyan(char b[],int T)//检验b[]是否符合实际,T=1检验学校,T=2检验比赛
{int d=0,i,LEN=-1,F;while(b[++LEN]);//求b的字节for(i=0; i<LEN; i++) //汉字的ascll编码每一个字节为负数if(b[i]>0)return printf("输入中有含中文以外的字符!");for(i=0; key[i][0]; i++){F=BF(b,key[i]);//匹配中文标点符号if(F&&F%2)return  printf("有非汉字的中文字符!");}if(T==1)//检验学校的名称{for(i=0; school[i][0]; i++){F=BF(b,school[i]);if(F&&F%2)d++;}if(!d)return printf("学校名称太奇葩!");}if(T==2)//检验比赛的名称{for(i=0; program[i][0]; i++){F=BF(b,program[i]);if(F&&F%2)d++;}if(!d)return printf("项目名称太奇葩!");}return 0;//没问题返回0
}
void xuanzepai(HEAD *temp,int select)//选择排序
{int i,j,k,m,a,b,n,school[2][M]= {0};n=temp->b[0];printf("升序请按0 降序请按1:");gainint(&b,0,1);for(i=0; i<n; i++){school[1][i]=i;//记录学校当前的位置编号school[0][i]=(temp->spot+i)->sum[select];}printf("%s排名如下\t<以第%d列分数为准>:\n\n",ss[select],select+1);for(i=0; i<n-1; i++){k=i;for(j=i+1; j<n; j++)if(b?school[0][j]>school[0][k]:school[0][j]<school[0][k])k=j;if(k!=i)for(m=0; m<2; m++)          //a[][M]的两行都交换{a=school[m][k];school[m][k]=school[m][i];school[m][i]=a;}}printf("名次: 学校名称   男团   女团   学校总分\n");for(i=0; i<n; i++){k=(b?i+1:n-i);//计算排名的名次显示方向j=school[1][i];//j记录学校的编号printf("第%02d:%-13s%02d分\t%02d分\t%02d分\n",k,temp->xuexiao[j],(temp->spot+j)->sum[0],(temp->spot+j)->sum[1],(temp->spot+j)->sum[2]);}
}

复制代码 直接运行即可:


/*数据结构结业课程设计*/
/*  参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)【基本要求】(1)可以输入各个项目的前三名或前五名的成绩;(2)能统计各学校总分,(3)可以按学校编号或名称、学校总分、男女团体总分排序输出;(4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。(5)存储结构自选,但要求运动会的相关数据存入并能随时查询 (6)规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称(7)输出形式:有中文提示,各学校分数为整形
(8)界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。*/

运动会分数统计(数据结构课程设计)相关推荐

  1. java数据结构运动会分数统计,数据结构实验报告(运动会分数统计系)..doc

    数据结构实验报告(运动会分数统计系). 运动会分数统计系统 问题描述: 参加运动会有n个学校,学校编号为1--n.比赛分成m个男子项目,和w个女子项目.项目编号为男子1--m,女子m+1--m+w.不 ...

  2. 详解数据结构课程设计———运动会分数统计

    题目一:运动会分数统计 问题描述:参加运动会有n个学校,学校编号为1--n.比赛分成m个男子项目,和w个女子项目.项目编号为男子1--m,女子m+1--m+w. 不同的项目取前五名或前三名积分:取前五 ...

  3. 数据结构课程设计 运动会成绩统计

    运动会成绩统计 1.问题描述 任务:参加运动会有n个学校,学校编号为1--n.比赛分成m个男子项目,和w个女子项目.项目编号为男子1--m,女子m+1--m+w.不同的项目取前五名或前三名积分:取前五 ...

  4. 数据结构课程设计-运动会

    数据结构结业课程设计--运动会计分系统 /* 参加运动会有n个学校,学校编号为1--n.比赛分成m个男子项目,和w个女子项目.项目编号为男子1--m,女子m+1--m+w.不同的项目取前五名或前三名积 ...

  5. 数据结构实训——运动会分数统计

    题目1: 运动会分数统计(限1 人完成) 任务: 参加运动会有n个学校,学校编号为1--n.比赛分成m个男子项目,和w个女子项目.项目编号为男子1--m,女子m+1--m+w.不同的项目取前五名或前三 ...

  6. 数据结构课设----运动会分数统计系统

    1.运动会分数统计 [问题描述] 参加运动会的n个学校编号为1 ~ n.比赛分成m个男子项目和w个女子项 目,项目编号分别为1~ m和m+1~ m+w.由于各项目参加人数差别较大,有 些项目取前五名, ...

  7. 运动会分数统计系统(数据结构)C++

    运动会分数统计系统(数据结构)C++ 参加运动会有n个学校,学校编号为1--n.比赛分成m个男子项目,和w个女子项目.项目编号为男子1--m,女子m+1--m+w.不同的项目取前五名或前三名积分:取前 ...

  8. 运动会分数统计——C语言数据结构题目

    C语言数据结构题目 1.问题描述 参加运动会有n个学校,学校编号为1--n.比赛分成m个男子项目,和w个女子项目.项目编号为男子1--m,女子m+1--m+w.不同的项目取前五名或前三名积分:取前五名 ...

  9. 数据结构实训-运动会分数统计

    任务:参加运动会有n个学校,学校编号为1--n.比赛分成m个男子项目,和w个女子项目.项目编号为男子1--m,女子m+1--m+w.不同的项目取前五名或前三名积分:取前五名的积分分别为:7.5.3.2 ...

最新文章

  1. 数据结构[单链表]操作大全(初始化,创建,插入,查询,删除,长度,输出)c++代码实现
  2. 殊途同归!招聘软件与社交软件最终都要走向约P宿命?
  3. TCP服务器:多进程
  4. android功能导航布局,安卓9.0新功能 屏幕旋转将与导航栏同窗
  5. Deep Learning(深度学习)学习笔记整理系列之LeNet-5卷积参数个人理解
  6. html中js设置密码长度,JS判断邮箱格式,密码输入是否一致,不能为空,长度控制等...
  7. [转]C++类成员修饰const和mutable
  8. php异步处理下载文件,php异步处理-上传文件
  9. swoole 服务端heartbeat_check_interval心跳检测 客户端 swoole_timer_tick 发送心跳包 这里只是个demo参考
  10. 详解MySQL双活同步复制四种解决方案
  11. 【Computer Organization笔记09】x86 / Pentium 指令系统,MIPS 指令系统,数据通路的设计,CPU设计思路
  12. MFC编程入门之二十一(常用控件:编辑框Edit Control)
  13. iOS经典讲解之Apple Pay开发
  14. 计算机无法链接打印机共享,在打印机共享中无法链接打印机错误
  15. html站点根目录怎么改,通过重定向把子目录设置为网站根目录
  16. VBA批量导入图片到多Word文档并加标题(会飞的鱼)
  17. 使用phpQuery采集图片示例–php采集方式之一
  18. 摸索一下午,终于解决Tomcat9中文乱码问题!!
  19. java edt,java并发之EDT测试
  20. java参考中文站(在原有1094个中文示例)下的近期更新!

热门文章

  1. 球球大作战显示短信服务器出错,《球球大作战》新版本常见问题解决方案汇总...
  2. SSR(服务端渲染)
  3. 服务器 战地4 无限载入,战地4卡在loading界面无限载入的解决方法_快吧单机游戏...
  4. ECDH secp256k1 集成
  5. win10电脑如何下载安装.net Framework 3.5 sp1多台电脑亲测有效
  6. ai将会怎样影响计算机的发展,AI再升级!人工智能会对我们的未来产生怎样的影响?...
  7. Gangs(附C语言实现)
  8. P1967 货车运输( 最大生成树+LCA or Kruskal重构树)
  9. su,su -,sudo
  10. Dede URL优化拼音命名