高校最低录取分数线的查询源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高校最低录取分数线的查询
问题描述:
现要开发一个开放式的高校本科招生最低录取分数线的查询系统,供师生和学生家长等查询,高校自愿放入该校的信息,可能随时有高校加入。
功能要求:
要求实现的查询功能有:
(1)查询等于用户给定分数的高校;
(2)查询大于(或小于)用户给定分数的高校;
(3)查询最低录取分数线在用户给定的分数段中的高校。
(注:为了省下打字的工夫,函数功能相似的都压缩到了一起,所以个别函数会显得烦琐!)
/*************** 头文件 ***************/
#include"stdio.h"
#include"windows.h"
#define OK 1
#define ERROR 0
typedef struct node //学校名称
{
char SchoolName[10],SchoolNum[5];
struct node *next;
}SchoolList;
typedef struct //录取分数对应的学校
{
int PassMark;
SchoolList A;
}PassMark_Info;
typedef struct Node //二叉树节点定义
{
PassMark_Info data;
struct Node *lchild,*rchild;
}Btree,*QBtree;
void xy(int x, int y)
{
COORD c;
c.X=x-1;
c.Y=y-1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}
/************** 保存文件 ******************/
void InOrder_(QBtree bt,FILE *fp)
{
if(bt!=NULL)
{
InOrder_(bt->lchild,fp);
fprintf(fp,"%s\t%s\t%d\t",bt->data.A.SchoolNum,bt->data.A.Scho olName,bt->data.PassMark);
InOrder_(bt->rchild,fp);
}
}
int SaveFiles(QBtree bt)
{
FILE *fp;
if((fp=fopen("passmark","wb"))==NULL)
{
printf("\tERROR...");
return 0;
}
else InOrder_(bt,fp);
fclose(fp);
return OK;
}
/*************************************/
void Print(QBtree bt)//输出
{
SchoolList *p=&(bt->data.A);
while(p)
{
printf("%10s\t%10s\t%10d\n",p->SchoolNum,p->SchoolName,bt->data. PassMark);
p=p->next;
}
}
void InOrder(QBtree bt,int PassMark,int PassMark_,int k)
{
if(bt!=NULL)
{
InOrder(bt->lchild,PassMark,PassMark_,k);
{
if((k==1&&bt->data.PassMark<=PassMark)||(k==2&&bt->data.PassMa rk>=PassMark)||(k==0&&PassMark<=bt->data.PassMark&&bt->data.PassMark< =PassMark_))
//printf("%10s\t%10s\t%10d\n",bt->data.A.SchoolNum,bt->data.
A.SchoolName,bt->data.PassMark);
Print(bt);
}
InOrder(bt->rchild,PassMark,PassMark_,k);
}
}
Btree* Search(QBtree bt,int PassMark)
{
if((bt==NULL)||(bt->data.PassMark==PassMark))
return bt;
else if(bt->data.PassMark>PassMark)
return Search(bt->lchild,PassMark);
else return Search(bt->rchild,PassMark);
}
Btree* Bt_Insert(QBtree *bt,FILE *fp)
{
Btree *p,*pre,*q;
q=(Btree *)malloc(sizeof(Btree));
if(q!=NULL)
{
if(fp==NULL)
{
puts("请输入高校名称、学校代码和最低录取分数线:");
scanf("%s%s%d",q->data.A.SchoolName,q->data.A.SchoolNum,&q->da ta.PassMark);
}
else
fscanf(fp,"%s\t%s\t%d\t",q->data.A.SchoolNum,q->data.A.SchoolName,&q->data.PassMark);
q->lchild=q->rchild=NULL;
q->data.A.next=NULL;
}
if(*bt==NULL) {*bt=q;return *bt;}
p=*bt;
while(p!=NULL)
{
pre=p;
if(p->data.PassMark>q->data.PassMark) p=p->lchild;
else p=p->rchild;
}
if(pre->data.PassMark>q->data.PassMark) pre->lchild=q;
else if(pre->data.PassMark<q->data.PassMark) pre->rchild=q;
else pre->data.A.next=&(q->data.A);
return q;
}
/************** 读取文件 ****************/
int ReadFiles(QBtree *bt)
{
FILE *fp;
if((fp=fopen("passmark","rb"))==NULL)
{
printf("\tERROR...");
return 0;
}
else
while(!feof(fp))
Bt_Insert(bt,fp);
fclose(fp);
return 1;
}
/***************************************/
void help()
{
printf("\n\n\t不好意思暂时没什么能帮助你的!");
system("pause");
}
int Menu()
{
int i;system("cls");
printf("\n");
printf(" 高校最低录取分数线查询系统菜单\n");
printf("┌──────────────────┬───────────────────┐");
printf("│ 1:按考生分数查
询│ 2:按分数线查
询│");
printf("├──────────────────┼───────────────────┤");
printf("│ 3:按分数段查
询│ 4:添加高校信
息│");
printf("├──────────────────┼───────────────────┤");
printf("│ 5:系统帮
助│ 6:退
出│");
printf("├──────────────────┴───────────────────┤");
printf("│选择操作项
(1~6):
│");
printf("└──────────────────────────────────────┘");
xy(23,10);
for(;;)
{
scanf("%d",&i);
getchar();
if(i<1||i>6)
{
xy(5,10);
puts(" 数据不合法!请重新选择操作项
(1~6): ");
xy(40,10);
continue;
}
else return i;
}
}
void main()
{
int i,j;
QBtree temp,bt=NULL;
ReadFiles(&bt);
while(1)
{
i=Menu();
system("cls");
switch(i)
{
case 1:
printf("输入成绩:");
scanf("%d",&i);
temp=Search(bt,i);
if(temp==NULL)
{
printf("没有相关信息,建议选择2或3方式查找!");
system("pause");
}
else
{
printf("有以下高校的最低录取线是 %d 分:\n 高校代码\t 高校名称\t最低录取线\n",i);
Print(temp);
system("pause");
}break;
case 2:
printf("输入分数线:");
scanf("%d",&i);
printf("选择方向:1,录取线在%d分以下的高校; 2,录取线在%d分以上的高校:\n",i,i);
scanf("%d",&j);
while(j>2||j<1)
{
printf("输入错误,请重新选择:");
scanf("%d",&j);
}
printf("有以下高校满足查询条件:\n");
printf(" 高校代码\t 高校名称\t最低录取线\n");
InOrder(bt,i,0,j);system("pause");
break;
case 3:
printf("请分别输入最低分和最高分:");
scanf("%d%d",&i,&j);
if(i>j) {i=i+j;j=i-j;i=i-j;}
printf("有以下高校满足查询条件:\n 高校代码\t 高校名称\t最低录取线\n");
InOrder(bt,i,j,0);system("pause");
break;
case 4:
Bt_Insert(&bt,NULL);
break;
case 5:help();break;
case 6:SaveFiles(bt);exit(0);
}
}
}。