研究生初试录取管理系统

/*程序运行时首先要求

输入:考生姓名,准考证号,报考专业,是否应届生,4门课程(政治、数学、外语、专业基础课)成绩。这些原始数据应保存到一个文件中。

然后输入:录取的总分要求,各课程的最低分数要求。

输出要求(总分由高到低的顺序):过线考生的姓名,准考证号,报考专业,是否应届生,
4门课程(政治、数学、外语、专业基础课)成绩及总分,这些信息应存放到另一个文件中。*/


#include
#include
#include
#include

#define N 100
int count=0; //全局变量,记录信息的条数

typedef struct Student //学生的结构体
{
char name[20]; //考生姓名
char num[15]; //准考证号
char major[20]; //报考专业
int current; //是否应届生,应届生为"1",否则为"0"

float politics; //政治
float math; //数学
float english; //外语
float subject; //专业基础课
float sum; //总分
}STUDENT; //自定义数据结果类型

int menu()
{
int select; //存放客户的选择变量
system("cls"); //刷新屏幕

printf(" **************欢迎使用“研究生初试录取管理系统”**************\n");
printf(" --- 1、输入考生信息 ---\n");
printf(" --- 2、查询考生录取情况 ---\n");
printf(" --- 3、输出全部考生信息 ---\n");
printf(" --- 0、退出本系统 ---\n");
printf(" **************************************************************\n\n");
printf("现在请输入您想进行的操作功能:");
scanf("%d",&select);
if(select!=0&&select!=1&&select!=2&&select!=3)
{
do
{
printf("请重新输入您的选择(0~3):");
scanf("%d",&select);
if(select==0||select==1||select==2||select==3)
break;
}
while(1);
}
return select; //返回客户的选择
}

/***信息保存函数***/
void Save(STUDENT stu[])
{
FILE* fp;
int i=0;
fp=fopen("student.txt","w");/*以只写方式打开文本文件*/
if(fp==NULL)/*打开文件失败*/
{
printf("\n=====>打开文件失败!\n");
system("PAUSE");
return;
}
for(i=0;i{
if(fwrite(&stu[i],sizeof(STUDENT),1,fp)==1)/*每次写一条记录或一个结构数组元素至文件*/
continue;
else
break;
}
if(i>0)
{
//getchar();
system("cls");
printf("=====>已经为您保存刚才对文件的操作内容,全部保存的记录有:%d条\n",count);
printf("现在回到主菜单...\n");
system("PAUSE");
//saveflag=0;
}
else
{
system("cls");
printf("无新记录被保存!\n");
printf("现在回到主菜单...");
//getchar();
system("PAUSE");
}
fclose(fp);/*关闭此文件*/
}


/****输入学生成绩函数****/
void Studentinfor(STUDENT stu[])
{


FILE *fp;
int i=0;//j=0; //控制数组位置的变量
int select; //存放客户的选择的变量

if((fp=fopen("student.txt","w+"))==NULL)
{
printf("打开文件失败!");
exit(0);
}
do
{
system("cls");
printf("-----------------------按提示输入第 %d 个考生信息-----------------------\n",count+1); //按提示输入考生信息
printf("输入考生姓名:\n");
scanf("%s",stu[count].name);

printf("输入考生准考证号:\n");
scanf("%s",stu[count].num);

printf("输入考生报考专业:\n");
scanf("%s",stu[count].major);

printf("考生是否应届生(应届生为“1”,否则为“0”)\n");
scanf("%d",&stu[count].current);
for(;stu[count].current!=1 && stu[count].current!=0;)
{
printf("考生是否应届生,注意:应届生为“1”,否则为“0”!\n");
scanf("%d",&stu[count].current);
}

printf("输入考生 政治 成绩\n");
scanf("%f",&stu[count].politics);

printf("输入考生 数学 成绩\n");
scanf("%f",&stu[count].math);

printf("输入考生 外语 成绩\n");
scanf("%f",&stu[count].english);

printf("输入考生 专业 成绩\n");
scanf("%f",&stu[count].subject);

stu[count].sum=0;
stu[count].sum=stu[count].politics+stu[count].math+stu[count].english+stu[count].subject; //记录考生总成绩
printf("\n***此考生的总分成绩:%5.2f\n",stu[count].sum);

count++; //记录信息条数自加1

if(count>=N) /*控制信息量不能过多*/
{
printf("对不起!您要输入的信息满了,不能再输入了!想增大信息存储空间就在程序头部改N的数值!!!");
break;
}

printf("\n是否结束考生信息输入?输入1继续,输入0退出:"); //询问客户是否继续
scanf("%d",&select);
for(;select!=0 && select!=1;) //限定客户输入“0”或“1”
{
printf("是否结束考生信息输入?注意:输入“1”表示继续,输入“0”表示退出!\n现在请输入您的选择:");
scanf("%d",&select);
}
}
while(select==1);
Save(stu);
return;
}


/****查询函数****/
void InQuire(STUDENT stu[])
{
FILE *fp;
int i=0,j=0,k=0; //下标控制量
int max=0; //标志最大值的下标
int pass[N]; //定义一个整形数组,存放成绩达到要求的下标
float flagsum=0; //在比较时存放总分
float minsum=0; //总分要求
float minpolitics=0; //政治要求
float minmath=0; //数学要求
float minenglish=0; //外语要求
float minsubject=0; //专业基础课要求
system("cls");

if(count==0) //如果没记录就返回到主菜单
{
printf("- - - - - - -当前文件没有记录!- - - - - - -\n\n----> 请回到主菜单进行输入操作吧!\n");
system("PAUSE");
return;
}

if((fp=fopen("student.txt","a+"))==NULL) //打开文件
{
printf("打开文件失败!");
exit(0);
}
while(!feof(fp)) //从文件中读取原

数据到内存
{
if(fread(&stu[i],sizeof(STUDENT),1,fp)==1)
i++; //记录考生人数
}
fclose(fp);

//printf("程序运行到这里啦~\n");
//system("PAUSE");

printf("\n现在请您输入录取总分的要求:"); //输入录取总分的要求
scanf("%f",&minsum);
for(;minsum<0;)
{
printf("您刚才输入有误!现在请您重新输入录取总分的要求:");
scanf("%f",&minsum);
}

printf("\n现在请您输入政治最低分的要求:"); //输入政治最低分的要求
scanf("%f",&minpolitics);
for(;minpolitics<0;)
{
printf("您刚才输入有误!现在请您重新输入政治最低分的要求:");
scanf("%f",&minpolitics);
}

printf("\n现在请您输入数学最低分的要求:"); //输入数学最低分的要求
scanf("%f",&minmath);
for(;minmath<0;)
{
printf("您刚才输入有误!现在请您重新输入数学最低分的要求:");
scanf("%f",&minmath);
}

printf("\n现在请您输入外语最低分的要求:"); //输入外语最低分的要求
scanf("%f",&minenglish);
for(;minenglish<0;)
{
printf("您刚才输入有误!现在请您重新输入外语最低分的要求:");
scanf("%f",&minenglish);
}

printf("\n现在请您输入专业基础课最低分的要求:"); //输入专业基础课最低分的要求
scanf("%f",&minsubject);
for(;minsubject<0;)
{
printf("您刚才输入有误!现在请您重新输入专业基础课最低分的要求:");
scanf("%f",&minsubject);
}

for(i=0;i{

if(stu[i].sum>=minsum) //如果大于总分要求
{
if(stu[i].politics>=minpolitics) //如果大于政治课分数要求
{
if(stu[i].math>=minmath) //如果大于数学课分数要求
{
if(stu[i].english>=minenglish) //如果大于英语课分数要求
{
if(stu[i].subject>=minsubject) //如果大于专业课分数要求
{
pass[j]=i; //标志成绩合格的人的下标
j++; //成绩合格的人的个数
}
}
}
}
}
}

for(k=0;k{
max=pass[k];
flagsum=stu[pass[k]].sum;
for(i=k+1;i{
if(flagsum<=stu[pass[i]].sum)
{
flagsum=stu[pass[i]].sum;
max=pass[i];
pass[i]=pass[k];
pass[k]=max;
}
}
}

system("cls");
printf("***************** 输出过线考生的信息(从总分的高到低排列) *****************\n");
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" 姓名 学号 专业 应届 数学 外语 政治 专业 总分 \n");
for(k=0;k{
printf(" %5s %5s %5s ",stu[pass[k]].name,stu[pass[k]].num,stu[pass[k]].major);
if(stu[pass[k]].current==1)
printf(" 是");
else
printf(" 否");
printf(" %5.2f %5.2f %5.2f %5.2f %5.2f \n",stu[pass[k]].mat

h,stu[pass[k]].english,stu[pass[k]].politics,stu[pass[k]].subject,stu[pass[k]].sum);
}
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");

if((fp=fopen("QueryResult .txt","a+"))==NULL)
{
printf("打开文件失败!");
exit(0);
}
for(k=0;k{
if(fwrite(&stu[pass[k]],sizeof(STUDENT),1,fp)!=1)
printf("文件写入出错!\n");
}
fclose(fp);
printf("现在回到主菜单...\n");
system("PAUSE");
return;
}


//***输出学生的成绩****
void Display(STUDENT temp[])
{

int i; //控制数组下标变量
FILE *fp;
system("cls");
fp=fopen("student.txt","r+");
if(fp==NULL)
{
printf("打开文件失败!\n");
exit(0);
}

if(count==0)
{
printf("- - - - - - -当前文件没有记录!- - - - - - -\n\n----> 请回到主菜单进行输入操作吧!\n\n");
system("PAUSE");
return; //返回到主菜单
}
else
{
printf("********************* 如下为全部考生的相关信息 *************************\n");
printf("\n------------------------------------------------------------------------------\n");
printf(" 姓名 学号 专业 应届 数学 外语 政治 专业 总分 \n");
for(i=0;i{
fread(&temp[i],sizeof(STUDENT),1,fp);
printf(" %5s %5s %5s ",temp[i].name,temp[i].num,temp[i].major);
if(temp[i].current==1)
printf(" 是");
else
printf(" 否");
printf(" %5.2f %5.2f %5.2f %5.2f %5.2f \n",temp[i].math,temp[i].english,temp[i].politics,temp[i].subject,temp[i].sum);
}
printf("------------------------------------------------------------------------------\n");
}
fclose(fp);
printf("\n现在回到主菜单...\n");
system("PAUSE");
return;
}


/****主函数****/
void main()
{
STUDENT stu[N]; //定义考生结构数组
int select; //存放客户选择的变量
FILE *fp; //定义文件指针
fp=fopen("student.txt","a+"); //写入方式打开一个指定的文件,如果打开失败,将创建一个相应的文件
if(fp==NULL)
{
printf("对不起,没找到你要找到文件!现在为您创建一个您要查找的文件,请稍等……");
Sleep(2000);
return;
}
else
{
while(!feof(fp)) //一次从文件中读取一条电话记录,并把记录的条数存在count中
if(fread(&stu[count],sizeof(STUDENT),1,fp)==1)
count++;
fclose(fp); //关闭文件
printf("您要打开的文件中已有 %d 条记录。\n\n即将进入主菜单......\n",count); //输出记录条数
system("PAUSE");
}
do
{
system("cls"); //刷新屏幕
select=menu();//调用menu()函数,并把客户的选择赋给select

if(select==1) Studentinfor(stu); //调用输入函数
if(select==2) InQuire(stu); //调用查询函数
if(select==3) Display(stu); //调用输出函数
if(select==0) break; //输入0是退出系统
}


while(1);

system("cls");
printf("********************** 谢谢您的使用!O(∩_∩)O ************************\n");
printf("程序正在关闭,请稍等……\n");
Sleep(3000);
system("cls");
}


相关文档
最新文档