/*课程设计思路: 参赛选手信息输入: 姓名 性别 年龄 学校 项目(项目中的名次,及项目中获得的分数) 总分数 学校信息输入: 学校名称 学校编号 学校参加总数 学校总分数 项目信息输入: 选择名次方案:a种还是b种 各名次获得者姓名: 先输项目信息后输学校信息最后输选手信息 选手最大人数:max=50;每人允许参加的项目最大数为:max=5; 学校最大数目:max=10; 项目最多数:max=15; 建立模块之前应做: 首先问今年共有多少学生参加比赛?及每人最多参加几个项目? 问共有多少学校参加比赛? 问共有多少项目? 菜单: 输入选手信息: 输入学校信息: 输入项目信息: 寻找并输出选手信息: 寻找并输出项目信息: 寻找并输出学校信息: 学校排行输出: 参赛选手排行输出:*/ #include #include #include #include #include FILE *fp; //定义文件指针 struct xmform1{ char name[20]; char mc1[10]; char mc2[10]; char mc3[10]; char mc4[10]; char mc5[10]; }; struct xmform2{ char name[20]; char mc1[10]; char mc2[10]; char mc3[10]; }; struct schoolform{ char name[20]; char id[10]; int number; int scoer=0; }; struct studentform{ char name[20]; char xb[10]; char number[10]; int age; char name1[20]; //name1是选手所处学校名 struct { char name[20]; char mc[50]="无名次"; int scoer=0; } xm; int allscoer; }; int ggy(struct studentform student[]){ printf("请输入参加比赛的选手个数\n"); int n; scanf("%d",&n); getchar(); int i; for(i=0;imax){ max=school1[i].scoer; maxnumber=i;} } t=school1[schoolgs-1].scoer; school1[schoolgs-1].scoer=max; school1[maxnumber].scoer=t; strcpy(i2,school1[schoolgs-1].name); strcpy(school1[schoolgs-1].name,school1[maxnumber].name); strcpy(school1[maxnumber].name,i2); schoolgs-=1; //ph[i1]=maxnumber; max=school1[0].scoer; maxnumber=0; } printf("学校排行由高到低输出依次是:\n\a"); //printf("学校个数是%d\n",schoolgs); for(i=t1-1;i>=0;i--){ printf("名称:%s 分数:%d\n",school1[i].name,school1[i].scoer); } printf("*************************\n"); } void studentph(struct studentform student[],int studentrs){ // int max=student[0].xm.scoer;int maxnumber=0; struct studentform student1[studentrs]; //int ph[50]; int i,i1,t,t1; char i2[10]; t1=studentrs; for(i=0;imax){ max=student1[i].xm.scoer; maxnumber=i;} } t=student1[studentrs-1].xm.scoer; student1[studentrs-1].xm.scoer=max; student1[maxnumber].xm.scoer=t; strcpy(i2,student1[studentrs-1].name); strcpy(student1[studentrs-1].name,student1[maxnumber].name); strcpy(student1[maxnumber].name,i2); studentrs-=1;max=student1[0].xm.scoer; maxnumber=0; } printf("学生排行由高到低输出依次是:\n\a"); for(i=t1-1;i>=0;i--){ printf("姓名:%s 分数:%d\n",student1[i].name,student1[i].xm.scoer); } printf("*************************\n"); } void dudan1(struct schoolform school[],int *schoolgs1){ int schoolgs; printf("开始打开密匙\n"); if((fp=fopen("schoolgs","rb+"))==NULL){ printf("密匙未能安全打开\n"); exit(0); }else{ printf("密匙已经安全打开了\n"); } rewind(fp); fscanf(fp,"%5d",&schoolgs); *schoolgs1=schoolgs; fclose(fp); int i; printf("开始打开文件\n"); if((fp=fopen("schoolform","rb+"))==NULL){ printf("文件未能安全打开\n"); exit(0); }else{ printf("文件已经安全打开了\n"); } //printf("%d",schoolgs); rewind(fp); //将文件指针移到最前面 for(i=0;i>\n"); printf("====此系统有以下功能选项:====\n"); struct studentform student[50]; struct schoolform school[10]; struct xmform1 xm1[15]; struct xmform2 xm2[15]; int studentrs; int schoolgs; int xmgs1; int xmgs2; char name[10]; int a,a1,a2; //a2为方便switch退出时用的字符 int i; int b1=1,b2=1; ///b1和b2作为“锁”必须对程序进行初始化输入才能解开 //scanf("%d",&a); do{ printf("==*提示*==:赛前请对程序进行基本信息的输入\n(\n1.没档的,请先完成选手信息的输入和学校信息的输入\n2.若已完成存档的,则只需对选手信息和学校信息读档\n )\n"); printf("*************************\n"); printf("====输入选手信息并存档(请按0)\n====输入学校信息并存档(请按1)\n====输入项目信息(请按2)\n====寻找并输出选手信息(请按3)\n=====寻找并输出项目信息(请按4)\n=====寻找并输出学校信息(请按5)\n====学校排行输出(请按6)\n====参赛选手排行输出(请按7)\n"); printf("====读档(请按8)\n"); printf("====退出(请按9)\n"); printf("*************************\n"); scanf("%d",&a); do{ if(a==0||a==1||a==8||a==9) { break ;} else{ if(b1==0&&b2==0){ break; } else{ printf("请先完成程序初始化操作(按提示操作)\n"); printf("*************************\n"); printf("请重新按一次(0、1、8)\n"); scanf("%d",&a); }}}while(1); switch(a){ case 0: //struct studentform student[50]; printf("你选择了输入选手信息功能\n"); //printf("共有多少位选手参赛?\n") //int n; //scanf("%d",&n); studentrs=ggy(student); b1=0 ; break; case 1: //struct schoolform school[10]; printf("你选择了输入学校信息功能\n"); schoolgs=ggy1(school); b2=0; break; case 2: printf("你选择了输入项目信息功能\n\n"); printf("项目有两种一类取前五名,另一类取前三名。\n\n"); printf("开始第一类项目信息输入\n"); xmgs1=ggy2(xm1,student,school,schoolgs,studentrs); printf("开始第二类项目信息输入\n"); xmgs2=ggy3(xm2,student,school,schoolgs,studentrs); break; case 3: printf("你选择了寻找并输出选手信息的功能\n"); printf("有两种寻找方式 第一种根据选手姓名查找(按0) 第二种根据选手编号查找(按1) 请选择其中一种:\n"); scanf("%d",&a1); getchar(); a2=1; do{ switch(a1){ case 0: printf("你选择了按选手姓名查找\n"); xscz(student,studentrs); a2=0; break; case 1: printf("你选择了根据选手编号查找\n"); xscz1(student,studentrs); a2=0; break; default: printf("请输入(0~1)以内的数\n"); scanf("%d",&a1); getchar(); } }while(a2); break; case 4: printf("你选择了寻找并输出项目功能\n"); printf("有两种项目:第一类(分前五名)第二类(分前三名),请选择你要查找那类项目的信息(第一类按0)(第二类按1)\n"); scanf("%d",&a1); getchar(); a2=1; do{ switch(a1){ case 0: printf("你选择了按第一类查找\n"); xmcz1(xm1,xmgs1); a2=0; break; case 1: printf("你选择了按第二类查找\n"); xmcz2(xm2,xmgs2); a2=0; break; default: printf("请输入(0~1)以内的数\n"); scanf("%d",&a1); getchar(); } }while(a2); break; case 5: printf("你选择了寻找并输出学校信息的功能\n"); printf("有两种寻找方式 第一种根据学校名称查找(按0) 第二种根据学校编号查找(按1) 请选择其中一种:\n"); scanf("%d",&a1); getchar(); a2=1; do{ switch(a1){ case 0: printf("你选择了按学校名称查找\n"); xxcz1(school,schoolgs); a2=0; break; case 1: printf("你选择了根据学校编号查找\n"); xxcz2(school,schoolgs); a2=0; break; default: printf("请输入(0~1)以内的数\n"); scanf("%d",&a1); getchar(); } }while(a2); break; case 6: printf("你选择了学校排行输出功能\n"); schoolph(school,schoolgs); break; case 7: printf("你选择了参赛选手排行输出功能\n"); studentph(student,studentrs); break; case 8: printf("你选择了读档功能\n"); printf("请选择对:学校数据读档(请按0) 学生数据读档(请按1) 两个都读档(请按2)\n"); scanf("%d",&a1); getchar(); a2=1; do{ switch(a1){ case 0: printf("你选择对学校数据读档\n"); dudan1(school,&schoolgs); b2=0; a2=0; break; case 1: printf("你选择了对学生数据读档\n"); dudan2(student,&studentrs); b1=0; a2=0; break; case 2: printf("你选择了两个都读档\n"); dudan1(school,&schoolgs); dudan2(student,&studentrs); b1=0; b2=0; printf("都读取完毕了\n"); a2=0; break; default: printf("请输入(0~2)以内的数\n"); scanf("%d",&a1); getchar(); } }while(a2); break; case 9: printf("成功退出,感谢使用!\n\a"); return 0; default: printf("请按(0~9)以内的数字\n\n"); } }while(1); return 0; }