high=mid-1;
else
low=mid+1;
}
return0;
}
voidHash()//建立HS表的函数
{
intk,i;
for(i=0;i<=stustuSIZE;i++)
{
if(stud[i].num!
=0)//学号为0表示已经删除
{
k=(stud[i].name[0]-96)+(stud[i].name[1]-96);//HS函数
if(HS[k].name==0)
{
strcpy(HS[k].name,stud[i].name);
HS[k].num=stud[i].num;
strcpy(HS[k].sex,stud[i].sex);
strcpy(HS[k].subject,stud[i].subject);
HS[k].score=stud[i].score;
}
else
{
strcpy(HS[k].name,stud[i].name);//用HS1[]当作溢出表,处理冲突
HS[k].num=stud[i].num;
strcpy(HS[k].sex,stud[i].sex);
strcpy(HS[k].subject,stud[i].subject);
HS[k].score=stud[i].score;
}
}
}
}
intmaxscore()//搜索分数最高的学生,返回值为其在结构体数组中的序号
{
inti=0,n,j;
n=b[i];//m记录当前的最高分数
j=i;//j记录最高分数项的序号
for(i=1;i<=stustuSIZE;i++)
{
if(n
{
n=b[i];
j=i;
}
}
b[j]=0;//找到分数最高项后,将最高分数项的分数置0,以便不影响下次的寻找
returnj;
}
intmain()
{
intserve,i,u,v,w,t=0,n,r;
intflag=0;//flag记录学生信息是否已经输入过
intflag1=0;
intsearch,searchnum,j;
charnamesearch[10];
while(flag!
=2)
{
printf("-----------------------------学生信息管理系统--------------------------------\n\n\n");
printf("表单排序选项\n\n");
printf("【1】学生信息输入\n");
printf("【2】学生信息浏览\n");
printf("【3】学生信息查询\n");
printf("【4】学生成绩区间段查询和统计\n");
printf("【5】学生成绩排序\n");
printf("【6】学生信息修改\n");
printf("【7】学生信息增加\n");
printf("【8】学生信息删除\n");
printf("【9】结束\n");
printf("-------------------------------------------------------------------------\n\n");
printf("请选择您要进入的功能:
");
scanf("%d",&serve);
switch(serve)
{
case1:
{
system("cls");
printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");
printf("请输入学生的个数:
");
scanf("%d",&i);
stustuSIZE=i-1;
printf("请按姓名,学号,性别(m||w),选课科目,成绩的顺序输入信息,以空格隔开\n");
for(i=0;i<=stustuSIZE;i++)
{
scanf("%s%d%s%s%d",stud[i].name,&stud[i].num,stud[i].sex,stud[i].subject,&stud[i].score);
if(stud[i].score<0||stud[i].score>100||stud[i].sex[0]!
='m'&&stud[i].sex[0]!
='w')
{
printf("输入数据不合法!
请重新输入.\n");
scanf("%s%d%s%s%d",stud[i].name,&stud[i].num,stud[i].sex,stud[i].subject,&stud[i].score);
}
};
flag=1;
system("cls");
break;
}
case2:
{
if(flag==0)
{
printf("还没有输入信息,无法浏览\n");
break;
}
system("cls");
printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");
for(i=0;i<=stustuSIZE;i++)
{
if(stud[i].num!
=0)//学号为0表示该生信息已经被删除
printf("姓名:
%s学号:
%d性别:
%s科目:
%s成绩:
%d\n",stud[i].name,stud[i].num,stud[i].sex,stud[i].subject,stud[i].score);
}
system("pause");
system("cls");
break;
}
case3:
{
while(flag==0)
{
printf("还没有输入信息,无法浏览\n");
break;
}
system("cls");
printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");
printf("请输入查询信息的方式:
\n");
printf("【1】按学号查询\n");
printf("【2】按姓名查询\n");
printf("【3】按成绩查询\n");
printf("");
scanf("%d",&search);
if(search==1)
{
printf("请输入学生的学号:
");
scanf("%d",&searchnum);
sort();
j=Bsearch(searchnum);
for(i=0;i<=stustuSIZE;i++)
{
if(stud[i].num==c[j])
break;
}
printf("该生信息如下:
\n");
printf("姓名:
%s学号:
%d性别:
%s科目:
%s成绩:
%d\n",stud[i].name,stud[i].num,stud[i].sex,stud[i].subject,stud[i].score);
system("pause");
system("cls");
break;
}
elseif(search==2)
{
Hash();
printf("请输入学生的姓名:
\n");
scanf("%s",namesearch);
r=(namesearch[0]-96)+(namesearch[1]-96);
if(strcmp(namesearch,HS[r].name)==0)
{
printf("该生信息如下:
\n");
printf("姓名:
%s学号:
%d性别:
%s科目:
%s成绩:
%d\n",HS[r].name,HS[r].num,HS[r].sex,HS[r].subject,HS[r].score);
system("pause");
system("cls");
break;
}
elseif(strcmp(namesearch,HS1[r].name)==0)
{
printf("该生信息如下:
\n");
printf("姓名:
%s学号:
%d性别:
%s科目:
%s成绩:
%d\n",HS1[r].name,HS1[r].num,HS1[r].sex,HS1[r].subject,HS1[r].score);
system("pause");
system("cls");
break;
}
else
{
printf("找不到该生信息!
\n");
system("pause");
system("cls");
break;
}
}
else
{
for(i=0;i<=stustuSIZE;i++)
{
if(stud[i].num!
=0)
d[i]=stud[i].score;
}
printf("请输入要查询的成绩:
\n");
scanf("%d",&searchscore);
S=creat(S);
S->date=NULL;
root=treecreat(i);
trav(root);
system("pause");
system("cls");
break;
}
}
case4:
{
while(flag==0)
{
printf("还没有输入信息,无法浏览\n");
break;
}
system("cls");
printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");
printf("请输入要统计区间的下限:
");
scanf("%d",&m);
printf("请输入要统计区间的上限:
");
scanf("%d",&n);
for(i=0;i<=stustuSIZE;i++)
{
if((stud[i].score>=m)&&(stud[i].score<=n))
{
printf("姓名:
%s学号:
%d性别:
%s科目:
%s成绩:
%d\n",stud[i].name,stud[i].num,stud[i].sex,stud[i].subject,stud[i].score);
t++;
}
}
printf("该区间段学生的个数为%d\n",t);
system("pause");
system("cls");
break;
}
case5:
{
while(flag==0)
{
printf("还没有输入信息,无法浏览\n");
break;
}
system("cls");
printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");
for(i=0;i<=stustuSIZE;i++)
{
if(stud[i].num!
=0)
b[i]=stud[i].score;
}
for(i=0;i<=stustuSIZE;i++)
{
u=maxscore();
printf("姓名:
%s分数:
%d\n",stud[u].name,stud[u].score);
}
system("pause");
system("cls");
break;
}
case6:
{
while(flag==0)
{
printf("还没有输入信息,无法浏览\n");
break;
}
system("cls");
printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");
printf("请输入要修改信息的学生的学号:
");
scanf("%d",&v);
for(i=0;i<=stustuSIZE;i++)
{
if(flag1==2)
break;
while(stud[i].num==v)
{
printf("该生当前信息如下:
\n");
printf("姓名:
%s学号:
%d性别:
%s科目:
%s成绩:
%d\n",stud[i].name,stud[i].num,stud[i].sex,stud[i].subject,stud[i].score);
printf("请按姓名,学号,性别(m||w),选课科目,成绩的顺序输入新的信息:
\n");
scanf("%s%d%s%s%d",stud[i].name,&stud[i].num,stud[i].sex,stud[i].subject,&stud[i].score);
flag1=2;
break;
}
}
system("pause");
system("cls");
break;
}
case7:
{
while(flag==0)
{
printf("还没有输入信息,无法浏览\n");
break;
}
system("cls");
printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");
i=stustuSIZE+1;
printf("请输入该生的信息:
\n");
scanf("%s%d%s%s%d",stud[i].name,&stud[i].num,stud[i].sex,stud[i].subject,&stud[i].score);
stustuSIZE++;
system("pause");
system("cls");
break;
}
case8:
{
while(flag==0)
{
printf("还没有输入信息,无法浏览\n");
break;
}
system("cls");
printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");
printf("请输入要删除信息的学生的学号:
");
scanf("%d",&w);
for(i=0;i<=stustuSIZE;i++)
{
if(stud[i].num==w)
stud[i].num=0;//学号置0表示该项被删除
}
system("pause");
system("cls");
break;
}
case9:
{
flag=2;
break;
}
default:
{
printf("输入数字错误!
\n");
system("pause");
system("cls");
break;
}
}
}
system("cls");
printf("-----------------------------学生信息管理系统-------------------------------\n\n\n");
printf("\n\n\n\n谢谢使用!
\n\n\n\n\n");
}