#include <stdio.h>
#include <stdio.h> #include <malloc.h> struct DATA { int ID; char name[4]; char sex[3]; int score; }; void paixu(int*,DATA*,int); int sishewuru(double); void func1(int*,int*,DATA*,int*,int,int,int,int);//统计男女比例 int func2(int*,int,DATA*);//查找考生序号 void print(); void main() { int length=0,i,yiben,erben,sanben,dazhuan,male[4],female[4]; int yi,er,san,si; char input; FILE* file=fopen("f1.txt","r"),*file1; if(file==NULL) { printf("No such file!\n"); return; } while(EOF!=fscanf(file,"%*[^\n]\n")) length++;//自动计算考生数罝ATA* data=(DATA*)malloc(length*sizeof(DATA)); int* pai=(int*)malloc(length*sizeof(int)); rewind(file); for(i=0;i<length;i++) {fscanf(file,"%d %s %s %d",&data[i].ID,&data[i].name,&data[i].sex,&data[i].score); pai[i]=i; } paixu(pai,data,length);//将1-1000的学生按成绩排序 yiben=sishewuru(length*0.1)-1;//分别按比例进行计算并四舍五入为整数 erben=yiben+sishewuru(length*0.15); sanben=erben+sishewuru(length*0.2); dazhuan=sanben+sishewuru(length*0.25); yi=data[pai[yiben]].score;er=data[pai[erben]].score; san=data[pai[sanben]].score;si=data[pai[dazhuan]].score; while(1) { print(); printf("\n请输入查询码:"); for(input=getchar();;input=getchar()) { if(!(input>='0'&&input<='4')) { printf("非法输入,请重新输入\n请输入:"); fflush(stdin); } else break; } getchar(); switch(input) { case '0': printf("\n一类本科招生线:%d\n二类本科招生线:%d\三类本科招生线:%d\\n高职高专招生线:%d\n",yi,er,san,si); printf("是否打印为文件?(y/n):"); if(getchar()=='y') { file1=fopen("各批次录取分数线.txt","w"); fprintf(file1,"一类本科招生线:%d\n二类本科招生线:%d\\n三类本科招生线:%d\n高职高专招生线:%d\n",yi,er,san,si); fclose(file1); } fflush(stdin); break; case '1': func1(male,female,data,pai,yiben,erben,sanben,dazhuan); printf("一类本科招生线男女比例:%d:%d\n",male[0],female[0]); printf("二类本科招生线男女比例:%d:%d\n",male[1],female[1]); printf("三类本科招生线男女比例:%d:%d\n",male[2],female[2]); printf("高职高专招生线招生线男女比例:%d:%d\n",male[3],female[3]); printf("是否打印为文件?(y/n):"); if(getchar()=='y') { file1=fopen("各批次录取男女比例.txt","w"); fprintf(file1,"一类本科招生线男女比例:%d:%d\n",male[0],female[0]); fprintf(file1,"二类本科招生线男女比例:%d:%d\n",male[1],female[1]); fprintf(filel,"三类本科招生线男女比例:%d:%d\n",male[2],female[2]); fprintf(file1,"高职高专招生线招生线男女比例:%d:%d\n",male[3],female[3]); fclose(file1); } fflush(stdin); break; case '2': printf("按考号查询输入0 按姓名查询输入1\n请输入查询码:"); for(input=getchar();;input=getchar()) { if(input!='0'&&input!='1') { printf("非法输入,请重新输入\n请输入:"); fflush(stdin); } else break; } getchar(); int shuru,j,ss[10];//假设最多10个重名的 for(j=0;j<10;j++) ss[i]=0; if(input=='0') { start1: printf("请输入考号:"); for(j=scanf("%d",&shuru);j!=1||shuru/10000!=4211;j=scanf("%d",&shuru)) {//假设考号开头为4211 printf("非法输入,请重新输入\n请输入:"); fflush(stdin); } getchar(); j=shuru000;//假设考号和序号的关系 printf("该生考号:%d 姓名:%s 性别:%s 分数:%d 录取情况:", shuru,data[j].name,data[j].sex,data[j].score); if(data[j].score>=yi) printf("一本\n"); else if(data[j].score>=er) printf("二本\n"); else if(data[j].score>=san) printf("三本\n"); else if(data[j].score>=si) printf("高职高专\n"); else printf("未过线,请继续努力!\n"); printf("是否继续查询?(y/n):"); if(getchar()=='y') { fflush(stdin); goto start1; } } else { start2: printf("请输入姓名:"); j=func2(ss,length,data);//查找考生序号 if(j==0) printf("查无此人!\n"); else if(j==1) { printf("该生考号:%d 姓名 %s 性别:%s 分数:%d 录取情况:", data[ss[0]].ID,data[ss[0]].name,data[ss[0]].sex,data[ss[0]].score); if(data[ss[0]].score>=yi) printf("一本\n"); else if(data[ss[0]].score>=er) printf("二本\n"); else if(data[ss[0]].score>=san) printf("三本\n"); else if(data[ss[0]].score>=si) printf("高职高专\n"); else printf("未过线,请继续努力!\n"); } else { printf("有多个考生姓名为%s,数据如下:\n",data[ss[0]].name); for(j=j-1;j>=0;j--) { printf("该生考号:%d 姓名:%s 性别:%s 分数:%d 录取情况:", data[ss[j]].ID,data[ss[j]].name,data[ss[j]].sex,data[ss[j]].score); if(data[ss[j]].score>=yi) printf("一本\n"); else if(data[ss[j]].score>=er) printf("二本\n"); else if(data[ss[j]].score>=san) printf("三本\n"); else if(data[ss[j]].score>=si) printf("高职高专\n"); else printf(" 未过线,请继续努力!\n"); } } printf("是否继续查询?(y/n):"); if(getchar()=='y') { fflush(stdin); goto start2; } } break; case '3': fclose(file); free(data); return; case '4': print(); break; } } fclose(file); free(data); } void paixu(int* pai,DATA* data,int length) { int i,j,temp; for(i=0;i<length;i++) for(j=i+1;j<length;j++) if(data[pai[i]].score<data[pai[j]].score) { temp=pai[i]; pai[i]=pai[j]; pai[j]=temp; } } int sishewuru(double l) { if(l>1) { if((l-(int)l)<0.5) return (int)l; else return (int)l+1; } else return 1; } void func1(int* male,int* female,DATA* data,int* pai,int a,int b,int c,int d) { int i; for(i=0;i<4;i++) {male[i]=0;female[i]=0;} for(i=0;i<=a;i++) { if(data[pai[i]].sex[0]==-60) male[0]++; else female[0]++; } for(;i<=b;i++) { if(data[pai[i]].sex[0]==-60) male[1]++; else female[1]++; } for(;i<=c;i++) { if(data[pai[i]].sex[0]==-60) male[2]++; else female[2]++; } for(;i<=d;i++) { if(data[pai[i]].sex[0]==-60) male[3]++; else female[3]++; } } void print() { printf("--------------------------------高考招生录取程序-------------------------------\n"); printf("今年招生计划:一类本科招生计划为10%\n 二类本科招生计划为15%\n\ 三类本科招生计划为20%\n 四类高职高专招生计划为20%\n"); printf("查询:\n各类招生分数线输入0 各批次男女比例输入1\ \n单个学生录取情况输入2 退出系统输入3\n重新打印初试界面输入4\n"); } int func2(int* ss,int length,DATA* data) { int i,j=0; char s[4]; while(1) { i=scanf("%s",s); fflush(stdin); if(i!=1) { printf("非法输入,请重新输入\n请输入:"); continue; } for(i=0;i<length;i++) { if(data[i].name[0]==s[0]&&data[i].name[1]==s[1]&&data[i].name[2]==s[2]) { ss[j++]=i; } } break; } return j; }