超好的学生成绩管理系统顺序表实现的代码含详细注释哦文档格式.docx
《超好的学生成绩管理系统顺序表实现的代码含详细注释哦文档格式.docx》由会员分享,可在线阅读,更多相关《超好的学生成绩管理系统顺序表实现的代码含详细注释哦文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
i<
L->
litize;
++i)
printf("
请输入第%d个同学的信息:
\n"
L->
length);
学号:
"
);
ffluh(tdin);
canf("
%d"
&
tu[L->
length].num);
姓名:
%"
length].name);
英语成绩:
%f"
length].englih);
高数成绩:
length].math);
数据结构成绩:
length].databae);
length].um=L->
length].englih+L->
length].math+L->
length].databae;
length].average=L->
length].um/3;
length++;
是否继续[Y/N]..."
flag=getchar();
if(flag=='
N'
n'
break;
}
return0;
//函数2显示所有学生信息
intDiplay(qlit某L)
inti;
if(L->
length<
=1)
请先输入数据!
所有同学信息如下:
学号\t姓名\t总分\t平均分\t英语成绩\t高数成绩\t数据结构成绩\n"
length;
i++)
%d\t%\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n"
tu[i].num,L->
tu[i].name,L->
tu[i].um,L->
tu[i].average,L->
tu[i].englih,L->
tu[i].math,L->
tu[i].
databae);
//函数3插入一条记录到表尾
voidInert(qlit某L)
学号:
姓名:
//函数4删除一条记录
intDelete(qlit某L)
char[20];
inti=1,j,ch,n;
//第一个是哨兵
1.按姓名删除\n2.按学号删除\n请选择:
ch);
if(ch==1)
请输入姓名:
);
while(trcmp(L->
tu[i].name,)!
=0&
&
length)
i++;
ele
请输入学号:
n);
while(L->
tu[i].num!
=n&
if(i>
=L->
要删除记录不存在!
for(j=i;
j<
j++)
tu[j]=L->
tu[j+1];
删除成功!
length--;
//函数5统计成绩
intStatitic(qlit某L)
inti,j=1,j1=1,j2=1,j3=1,k=1,k1=1,k2=1,k3=1;
//要算及格率两个整数相除可能会是0所以float型
float
aver,tuum=0,tuum1=0,tuum2=0,tuum3=0,count1=0,count2=0,count3=0;
//用于计算全班平均成绩
tuum+=L->
tu[i].um;
//用于计算各科平均成绩
tuum1+=L->
tu[i].englih;
tuum2+=L->
tu[i].math;
tuum3+=L->
tu[i].databae;
//查找总分最高分if(L->
tu[j].um<
tu[i].um)j=i;
//查找总分最低分if(L->
tu[k].um>
tu[i].um)k=i;
//查找英语最高分if(L->
tu[j1].englih<
tu[i].englih)j1=i;
//查找高数最高分if(L->
tu[j2].math<
tu[i].math)j2=i;
//查找数据结构最高分if(L->
tu[j3].databae<
tu[i].databae)j3=i;
//查找英语最低分if(L->
tu[k1].englih>
tu[i].englih)k1=i;
//查找高数最低分if(L->
tu[k2].math>
tu[i].math)k2=i;
//查找数据结构最低分if(L->
tu[k3].databae>
tu[i].databae)k3=i;
//用于计算及格率if(L->
tu[i].englih>
=60)count1++;
tu[i].math>
=60)count2++;
tu[i].databae>
=60)count3++;
}aver=tuum/L->
共有%d条记录.\n"
总分最高的记录:
tu[j].num,L->
tu[j].name,L->
tu[j].um,L->
tu[j].average,L->
tu[j].englih,L->
tu[j].math,L->
tu[j].databae);
总分最低的记录:
tu[k].num,L->
tu[k].name,L->
tu[k].um,L->
tu[k].average,L->
tu[k].englih,L->
tu[k].math,L->
tu[k].databae);
全体同学平均成绩:
%.2f\n"
aver);
英语及格率:
count1/(L->
length-1));
高数及格率:
count2/(L->
数据结构及格率:
count3/(L->
英语最高分:
tu[j1].englih);
高数最高分:
tu[j2].math);
数据结构最高分:
tu[j3].databae);
英语最低分:
tu[k1].englih);
高数最低分:
tu[k2].math);
数据结构最低分:
tu[k3].databae);
//函数6查找
intSearch(qlit某L)
charn[20];
inti=1,ch1,ch2,j,num,low,high,mid;
1.顺序查找\n2.二分查找\n请选择:
ch1);
if(ch1==1){
1.按学号查找\n2.按姓名查找\n请选择:
ch2);
if(ch2==1)
请输入学号:
num);
=num&
ele{
n);
tu[i].name,n)!
查找失败!
查找成功!
tu[i].databae);
if(ch1==2){
{//二分查找,先按学号排序
for(i=2;
tu[i].num<
tu[i-1].num)
tu[0]=L->
tu[i];
tu[i]=L->
tu[i-1];
for(j=i-2;
tu[0].num<
tu[j].num;
j--)
tu[j+1]=L->
tu[j];
tu[0];
low=1;
high=L->
length-1;
//置区间初值
while(low<
=high)
{mid=(low+high)/2;
tu[mid].num==num){
tu[mid].num,L->
tu[mid].name,L->
tu[mid].um,L->
tu[mid].average,L->
tu[mid].englih,L->
tu[mid].math,L->
tu[mid].databae);
if(num<
tu[mid].num)high=mid-1;
//继续在前半区间进行查找ele
low=mid+1;
//继续在后半区间进行查找
{//二分查找,先按姓名排序
if(trcmp(L->
tu[i-1].name)<
0)
trcmp(L->
tu[0].name,L->
tu[j].name)<
0;
j--)L->
请输入姓名:
mid=(low+high)/2;
tu[mid].name,n)==0){
if(trcmp(n,L->
tu[mid].name)<
0)high=mid-1;
//继续在前半区间进行查找
}//ele
}//if(ch1==2)
//函数7排序
intSort(qlit某L)
inti,ch1,ch2,j,k;
intlow,high,mid;
1.直接插入排序\t2.折半插入排序\n3.冒泡排序\t4.直接选择排序\n请选择:
witch(ch1){
cae1:
1.按学号排序\n2.按英语成绩排序\t3.按高数成绩排序\n4.按数据结构成绩排序\t5.按总分排序\n请选择:
witch(ch2){
cae2:
tu[i].englih<
tu[i-1].englih)
tu[0].englih<
tu[j].englih;
}break;
cae3:
i++)if(L->
tu[i].math<
tu[i-1].math){L->
tu[0].math<
tu[j].math;
cae4:
tu[i].databae<
tu[i-1].databae){L->
tu[0].databae<
tu[j].databae;
cae5:
tu[i].um<
tu[i-1].um){L->
tu[0].um<
tu[j].um;
}//wich(ch2)break;
1.按学号排序\n2.按英语成绩排序\t3.按高数成绩排序\n4.按数据结
构成绩排序\t5.按总分排序\n请选择:
/某设置监测哨某/
high=i-1;
{/某在r[low..high]中折半查找有序插入的位置某/
tu[mid].num)
high=mid-1;
/某插入点在低半区某/
/某插入点在高半区某/
}/某while某/
for(j=i-1;
j>
=low;
--j)
/某记录后移某/
tu[high+1]=L->
/某插入到正确位置某/}/某if某/
}/某for某/
tu[mid].englih)high=mid-1;
/某插入到正确位置某/
}/某if某/}/某for某/break;
i++){if(L->
/某设置监测哨某/low=1;
=high){/某在r[low..high]中折半查找有序插入的位置某/mid=(low+high)/2;
tu[mid].math)high=mid-1;
/某插入点在低半区某/elelow=mid+1;
/某插入点在高半区某/}/某while某/for(j=i-1;
--j)L->
/某记录后移某/L->
/某插入到正确位置某/}/某if某/}/某for某/break;
tu[mid].databae)high=mid-1;
}/某if某/
tu[i-1].um)
tu[mid].um)
break