首页 > 代码库 > 模拟高考平行志愿投档

模拟高考平行志愿投档

//模拟高考平行志愿投档
//要求:
/*
1.在输入每个考生的成绩、志愿,学校的招生计划情况下能完成模拟平行志愿方式的高考志愿投档,
后输出每个学生的投档学校。如果考生不能投到某个学校,则输出“NO”
说明:
1.成绩总分由语文、数学、英语和综合四门课程组成,成绩排名先按总分,再按语文、数学、英语和
综合进行。
2.学生志愿可选择3个学校,如果学校名称输错则该考生无法投档。
3.平行志愿投档规则为:平行志愿按分数优先原则投档。即首先将同一科类批次线上的“自由可投”的
考生按投档成绩从高分到低分排序投档,当遇到多名考生特征成绩相同时,依次按语、数、外、综合科
目的成绩从高分到低分排序投档;对单个考生投档时,根据考生填报的平行志愿中的院校志愿顺序,投
档到排序相对在前且有计划余额的院校。*/
#include<stdio.h>
#include<math.h>
#include<String.h>

typedef struct Record{ //成绩表结构体定义
int S_numble; //学生准考证号
float S_literature; //语文
float S_math; //数学
float S_english; //英语
float S_synthesize; //综合
float S_all; //总分
int S_first; //第一平行志愿
int S_second; //第二平行志愿
int S_third; //第三平行志愿
char S_enroll; //=1被录取=0没录取
}Srecord;

 

typedef struct Enroll{ //招生表结构体定义
int N_numble; //招生人数
float N_grade; //最低分数线
int code; //学校代号
}E_college;

void Rank( Record srt[5],int rry[],int h)
{ int i,j,temp;

for(i=1;i<h;i++)
{
for(j=i+1;j<h+1;j++)
{

if(srt[rry[i]].S_all<srt[rry[j]].S_all)
{
temp=rry[i];
rry[i]=rry[j];
rry[j]=temp;
}
else if(srt[rry[i]].S_all==srt[rry[j]].S_all)
{
if(srt[rry[i]].S_literature<srt[rry[j]].S_literature) //总分相同,
{
temp=rry[i];
rry[i]=rry[j];
rry[j]=temp;
break;
}
else if(srt[rry[i]].S_literature==srt[rry[j]].S_literature) //语文分数相同,判断数学是否相同
{
if(srt[rry[i]].S_math<srt[rry[j]].S_math )
{
temp=rry[i];
rry[i]=rry[j];
rry[j]=temp;
break;
}
else if(srt[rry[i]].S_math==srt[rry[j]].S_math) //语文,数学分数相同,判断英语分数是否相同
{
if(srt[rry[i]].S_english<srt[rry[j]].S_english)
{
temp=rry[i];
rry[i]=rry[j];
rry[j]=temp;
break;
}
else if(srt[rry[i]].S_english==srt[rry[j]].S_english) //语文,数学,英语分数相同,判断综合分数是否相同
{
if(srt[rry[i]].S_all<srt[rry[j]].S_all)
{
temp=rry[i];
rry[i]=rry[j];
rry[j]=temp;
}
}
}
}
}
}


}

}
void Disply(Record S[100],int ry[5],int m,int n,int p,int t)
{ int c;
for(c=1;c<=p&&c<n;c++)
{
if(ry[c]>0&&ry[c]<10)
{
S[ry[c]].S_enroll=1;
printf("准考证号为%d——第%d平行志愿录取——录取学校代号%d----录取分数%f\n",S[ry[c]].S_numble,t,m,S[ry[c]].S_all);
}
}

for(c=1;c<n;c++)
{
ry[c]=0;
}
}

void main()
{
int MM,i,j,k,p,grade,w;
int arry[5];
printf("******************录取学校名称用学校代号显示********************\n");
printf("*****************************************************************\n");
printf("北京大学(200901)——限2人——最低分 627分\n清华大学(200902)——限3人——最低分 609分 \n南开大学(200903)——限2人——最低分 589分\n东北大学(200904)——限4人——最低分 545分\n四川大学(200905)——限5人——最低分 555分\n南京大学(200906)——限3人——最低分 578分\n贵州大学(200907)——限5人——最低分 545分 \n");
printf("*****************************************************************\n");
Srecord srecord[100];
E_college Ecollege[10];
printf("请输入学生个数");
scanf("%d",&MM);
for(i=1;i<=MM;i++)
{
printf("请输入学生准考证号(4位):");
scanf("%d",&srecord[i].S_numble);
printf("请输入学生 语文成绩:");
scanf("%f",&srecord[i].S_literature);
printf("请输入学生 数学成绩:");
scanf("%f",&srecord[i].S_math);
printf("请输入学生 英语成绩:");
scanf("%f",&srecord[i].S_english);
printf("请输入学生 综合成绩:");
scanf("%f",&srecord[i].S_synthesize);
srecord[i].S_all=srecord[i].S_literature+srecord[i].S_math+srecord[i].S_english+srecord[i].S_synthesize;
printf("请输入学生 第一志愿学校代号(20090**):");
scanf("%d",&srecord[i].S_first);
printf("请输入学生 第二志愿学校代号(20090**):");
scanf("%d",&srecord[i].S_second);
printf("请输入学生 第三志愿学校代号(20090**):");
scanf("%d",&srecord[i].S_third);
srecord[i].S_enroll=0;
}
j=200900;
k=1;
for(i=1;i<10;i++)
{
Ecollege[i].code=j+i;

}
Ecollege[1].N_numble=2;
Ecollege[1].N_grade=627;
Ecollege[2].N_numble=3;
Ecollege[2].N_grade=609;
Ecollege[3].N_numble=2;
Ecollege[3].N_grade=589;
Ecollege[4].N_numble=4;
Ecollege[4].N_grade=545;
Ecollege[5].N_numble=5;
Ecollege[5].N_grade=555;
Ecollege[6].N_numble=3;
Ecollege[6].N_grade=578;
Ecollege[7].N_numble=5;
Ecollege[7].N_grade=545;

j=j+1;
w=1;
////////////////////////选择第一志愿同一学校的学生查询
while(j<200908)
{
for(i=1;i<=MM;i++)
{

if(j==srecord[i].S_first)
if(srecord[i].S_all >=Ecollege[j-200900].N_grade)
if(srecord[i].S_enroll==0)
{
arry[k]=i;
k++;
}

}
Rank(srecord,arry,k);
p=Ecollege[j-200900].N_numble;
Disply(srecord,arry,j,k,p,w);
j++;
}

///////////////////////////////////// 选择第二志愿同学校的学生查询

j=200901;
k=1;
w=2;
while(j<200908)
{
for(i=1;i<=MM;i++)
{

if(j==srecord[i].S_second)
if(srecord[i].S_all >=Ecollege[j-200900].N_grade)
if(srecord[i].S_enroll==0)
{
arry[k]=i;
k++;
}

}

Rank(srecord,arry,k);
p=Ecollege[j-200900].N_numble;
Disply(srecord,arry,j,k,p,w);
j++;
}

///////////////////////// //选择第三志愿同一学校的学生查询
w=3;
j=200901;
k=1;
while(j<200908)
{
for(i=1;i<=MM;i++)
{

if(j==srecord[i].S_third)
if(srecord[i].S_all>=Ecollege[j-200900].N_grade)
if(srecord[i].S_enroll==0)
{
arry[k]=i;
k++;
}

}

Rank(srecord,arry,k);
p=Ecollege[j-200900].N_numble;
Disply(srecord,arry,j,k,p,w);
j++;
}

 

 

 

 

 


}