超好的学生成绩管理系统顺序表实现的代码含详细注释哦.docx

上传人:b****6 文档编号:5256150 上传时间:2022-12-14 格式:DOCX 页数:18 大小:17.69KB
下载 相关 举报
超好的学生成绩管理系统顺序表实现的代码含详细注释哦.docx_第1页
第1页 / 共18页
超好的学生成绩管理系统顺序表实现的代码含详细注释哦.docx_第2页
第2页 / 共18页
超好的学生成绩管理系统顺序表实现的代码含详细注释哦.docx_第3页
第3页 / 共18页
超好的学生成绩管理系统顺序表实现的代码含详细注释哦.docx_第4页
第4页 / 共18页
超好的学生成绩管理系统顺序表实现的代码含详细注释哦.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

超好的学生成绩管理系统顺序表实现的代码含详细注释哦.docx

《超好的学生成绩管理系统顺序表实现的代码含详细注释哦.docx》由会员分享,可在线阅读,更多相关《超好的学生成绩管理系统顺序表实现的代码含详细注释哦.docx(18页珍藏版)》请在冰豆网上搜索。

超好的学生成绩管理系统顺序表实现的代码含详细注释哦.docx

超好的学生成绩管理系统顺序表实现的代码含详细注释哦

超好的学生成绩管理系统顺序表实现的代码含详细注释哦

#include

#include

#include

#defineLIST_INIT_SIZE4//线性表存储空间的初始分配量

#defineLISTINCREMENT10//线性表存储空间的分配增量

//学生的定义

typedeftruct

{

intnum;

charname[20];

floatenglih;

floatmath;

floatdatabae;

floatum;

floataverage;

}Student;

//顺序表的定义

typedeftruct

{

Student某tu;

intlength;

intlitize;

}qlit;

//函数1录入信息

intInput(qlit某L)

{

inti=1;//为了查找、排序的方便将第一个当哨兵

charflag='y';

//输入数据

while(flag=='Y'||flag=='y')

{

for(i=1;ilitize;++i)

{

printf("请输入第%d个同学的信息:

\n",L->length);

printf("学号:

");

ffluh(tdin);

canf("%d",&L->tu[L->length].num);

printf("姓名:

");

ffluh(tdin);

canf("%",L->tu[L->length].name);

printf("英语成绩:

");

ffluh(tdin);

canf("%f",&L->tu[L->length].englih);

printf("高数成绩:

");

ffluh(tdin);

canf("%f",&L->tu[L->length].math);

printf("数据结构成绩:

");

ffluh(tdin);

canf("%f",&L->tu[L->length].databae);

L->tu[L->length].um=L->tu[L->length].englih+L->tu[L->length].math+L->tu[L->length].databae;

L->tu[L->length].average=L->tu[L->length].um/3;

L->length++;

printf("是否继续[Y/N]...");

ffluh(tdin);

flag=getchar();

if(flag=='N'||flag=='n')

break;

}

}

return0;

}

//函数2显示所有学生信息

intDiplay(qlit某L)

{

inti;

if(L->length<=1)

{

printf("请先输入数据!

\n");

return0;

}

printf("所有同学信息如下:

\n");

printf("学号\t姓名\t总分\t平均分\t英语成绩\t高数成绩\t数据结构成绩\n");for(i=1;ilength;i++)

printf("%d\t%\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",L->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);

return0;

}

//函数3插入一条记录到表尾

voidInert(qlit某L)

{

printf("学号:

");

canf("%d",&L->tu[L->length].num);

printf("姓名:

");

canf("%",L->tu[L->length].name);

printf("英语成绩:

");

canf("%f",&L->tu[L->length].englih);

printf("高数成绩:

");

canf("%f",&L->tu[L->length].math);

printf("数据结构成绩:

");

canf("%f",&L->tu[L->length].databae);

L->tu[L->length].um=L->tu[L->length].englih+L->tu[L->length].math+L->tu[L->length].databae;

L->tu[L->length].average=L->tu[L->length].um/3;

L->length++;

}

//函数4删除一条记录

intDelete(qlit某L)

{

char[20];

inti=1,j,ch,n;//第一个是哨兵

if(L->length<=1)

{

printf("请先输入数据!

\n");

return0;

}

printf("1.按姓名删除\n2.按学号删除\n请选择:

");

canf("%d",&ch);

if(ch==1)

{

printf("请输入姓名:

");

canf("%",);

while(trcmp(L->tu[i].name,)!

=0&&ilength)

i++;

}

ele

{

printf("请输入学号:

");

canf("%d",&n);

while(L->tu[i].num!

=n&&ilength)

i++;

}

if(i>=L->length)

{

printf("要删除记录不存在!

");

return0;

}

for(j=i;jlength;j++)

L->tu[j]=L->tu[j+1];

printf("删除成功!

\n");

L->length--;

return0;

}

//函数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;if(L->length<=1)

{

printf("请先输入数据!

\n");

return0;

}

for(i=1;ilength;i++)

{

//用于计算全班平均成绩

tuum+=L->tu[i].um;

//用于计算各科平均成绩

tuum1+=L->tu[i].englih;

tuum2+=L->tu[i].math;

tuum3+=L->tu[i].databae;

//查找总分最高分if(L->tu[j].umtu[i].um)j=i;//查找总分最低分if(L->tu[k].um>L->tu[i].um)k=i;//查找英语最高分if(L->tu[j1].englihtu[i].englih)j1=i;//查找高数最高分if(L->tu[j2].mathtu[i].math)j2=i;//查找数据结构最高分if(L->tu[j3].databaetu[i].databae)j3=i;//查找英语最低分if(L->tu[k1].englih>L->tu[i].englih)k1=i;//查找高数最低分if(L->tu[k2].math>L->tu[i].math)k2=i;//查找数据结构最低分if(L->tu[k3].databae>L->tu[i].databae)k3=i;//用于计算及格率if(L->tu[i].englih>=60)count1++;if(L->tu[i].math>=60)count2++;if(L->tu[i].databae>=60)count3++;}aver=tuum/L->length;printf("共有%d条记录.\n",L->length);printf("总分最高的记录:

\n");printf("学号\t姓名\t总分\t平均分\t英语成绩\t高数成绩\t数据结构成绩\n");

printf("%d\t%\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",L->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);

printf("总分最低的记录:

\n");

printf("学号\t姓名\t总分\t平均分\t英语成绩\t高数成绩\t数据结构成绩\n");printf("%d\t%\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",L->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);

printf("全体同学平均成绩:

%.2f\n",aver);

printf("英语及格率:

%.2f\n",count1/(L->length-1));

printf("高数及格率:

%.2f\n",count2/(L->length-1));

printf("数据结构及格率:

%.2f\n",count3/(L->length-1));

printf("英语最高分:

%.2f\n",L->tu[j1].englih);

printf("高数最高分:

%.2f\n",L->tu[j2].math);

printf("数据结构最高分:

%.2f\n",L->tu[j3].databae);

printf("英语最低分:

%.2f\n",L->tu[k1].englih);

printf("高数最低分:

%.2f\n",L->tu[k2].math);

printf("数据结构最低分:

%.2f\n",L->tu[k3].databae);

return0;

}

//函数6查找

intSearch(qlit某L)

{

charn[20];

inti=1,ch1,ch2,j,num,low,high,mid;

if(L->length<=1)

{

printf("请先输入数据!

\n");

return0;

}

printf("1.顺序查找\n2.二分查找\n请选择:

");

canf("%d",&ch1);

if(ch1==1){

printf("1.按学号查找\n2.按姓名查找\n请选择:

");

canf("%d",&ch2);

if(ch2==1)

{

printf("请输入学号:

");

canf("%d",&num);

while(L->tu[i].num!

=num&&ilength)

i++;

}

ele{

printf("请输入姓名:

");

canf("%",n);

while(trcmp(L->tu[i].name,n)!

=0&&ilength)

i++;

}

if(i>=L->length)

{

printf("查找失败!

");

return0;

}

printf("查找成功!

\n");

printf("学号\t姓名\t总分\t平均分\t英语成绩\t高数成绩\t数据结构成绩\n");printf("%d\t%\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",L->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);

}

if(ch1==2){

printf("1.按学号查找\n2.按姓名查找\n请选择:

");

canf("%d",&ch2);

if(ch2==1)

{//二分查找,先按学号排序

for(i=2;ilength;i++)

if(L->tu[i].numtu[i-1].num)

{

L->tu[0]=L->tu[i];

L->tu[i]=L->tu[i-1];

for(j=i-2;L->tu[0].numtu[j].num;j--)

L->tu[j+1]=L->tu[j];

L->tu[j]=L->tu[0];

}

printf("请输入学号:

");

canf("%d",&num);

low=1;high=L->length-1;//置区间初值

while(low<=high)

{mid=(low+high)/2;

if(L->tu[mid].num==num){

printf("查找成功!

\n");

printf("学号\t姓名\t总分\t平均分\t英语成绩\t高数成绩\t数据结构成绩\n");printf("%d\t%\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",L->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);

return0;

}

ele

if(numtu[mid].num)high=mid-1;//继续在前半区间进行查找ele

low=mid+1;//继续在后半区间进行查找

}

printf("查找失败!

\n");

return0;

}

ele

{//二分查找,先按姓名排序

for(i=2;ilength;i++)

if(trcmp(L->tu[i].name,L->tu[i-1].name)<0)

{

L->tu[0]=L->tu[i];

L->tu[i]=L->tu[i-1];

for(j=i-2;trcmp(L->tu[0].name,L->tu[j].name)<0;j--)L->tu[j+1]=L->tu[j];

L->tu[j]=L->tu[0];

}

printf("请输入姓名:

");

canf("%",n);

low=1;high=L->length-1;//置区间初值

while(low<=high)

{

mid=(low+high)/2;

if(trcmp(L->tu[mid].name,n)==0){

printf("查找成功!

\n");

printf("学号\t姓名\t总分\t平均分\t英语成绩\t高数成绩\t数据结构成绩\n");

printf("%d\t%\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",L->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);

return0;

}

ele

if(trcmp(n,L->tu[mid].name)<0)high=mid-1;//继续在前半区间进行查找

ele

low=mid+1;//继续在后半区间进行查找

}

printf("查找失败!

\n");

return0;

}//ele

}//if(ch1==2)

}

//函数7排序

intSort(qlit某L)

{

inti,ch1,ch2,j,k;

intlow,high,mid;

if(L->length<=1)

{

printf("请先输入数据!

\n");

return0;

}

printf("1.直接插入排序\t2.折半插入排序\n3.冒泡排序\t4.直接选择排序\n请选择:

");

canf("%d",&ch1);

witch(ch1){

cae1:

printf("1.按学号排序\n2.按英语成绩排序\t3.按高数成绩排序\n4.按数据结构成绩排序\t5.按总分排序\n请选择:

");

canf("%d",&ch2);

witch(ch2){

cae1:

for(i=2;ilength;i++)

if(L->tu[i].numtu[i-1].num)

{

L->tu[0]=L->tu[i];

L->tu[i]=L->tu[i-1];

for(j=i-2;L->tu[0].numtu[j].num;j--)

L->tu[j+1]=L->tu[j];

L->tu[j]=L->tu[0];

}

break;

cae2:

for(i=2;ilength;i++)

if(L->tu[i].englihtu[i-1].englih)

{

L->tu[0]=L->tu[i];

L->tu[i]=L->tu[i-1];

for(j=i-2;L->tu[0].englihtu[j].englih;j--)L->tu[j+1]=L->tu[j];L->tu[j]=L->tu[0];}break;cae3:

for(i=2;ilength;i++)if(L->tu[i].mathtu[i-1].math){L->tu[0]=L->tu[i];L->tu[i]=L->tu[i-1];for(j=i-2;L->tu[0].mathtu[j].math;j--)L->tu[j+1]=L->tu[j];L->tu[j]=L->tu[0];}break;cae4:

for(i=2;ilength;i++)if(L->tu[i].databaetu[i-1].databae){L->tu[0]=L->tu[i];L->tu[i]=L->tu[i-1];for(j=i-2;L->tu[0].databaetu[j].databae;j--)L->tu[j+1]=L->tu[j];L->tu[j]=L->tu[0];}break;cae5:

for(i=2;ilength;i++)if(L->tu[i].umtu[i-1].um){L->tu[0]=L->tu[i];L->tu[i]=L->tu[i-1];for(j=i-2;L->tu[0].umtu[j].um;j--)L->tu[j+1]=L->tu[j];L->tu[j]=L->tu[0];}break;}//wich(ch2)break;cae2:

printf("1.按学号排序\n2.按英语成绩排序\t3.按高数成绩排序\n4.按数据结

构成绩排序\t5.按总分排序\n请选择:

");

canf("%d",&ch2);

witch(ch2){

cae1:

for(i=2;ilength;i++)

{

if(L->tu[i].numtu[i-1].num)

{

L->tu[0]=L->tu[i];/某设置监测哨某/

low=1;

high=i-1;

while(low<=high)

{/某在r[low..high]中折半查找有序插入的位置某/

mid=(low+high)/2;

if(L->tu[0].numtu[mid].num)

high=mid-1;/某插入点在低半区某/

ele

low=mid+1;/某插入点在高半区某/

}/某while某/

for(j=i-1;j>=low;--j)

L->tu[j+1]=L->tu[j];/某记录后移某/

L->tu[high+1]=L->tu[0];/某插入到正确位置某/}/某if某/

}/某for某/

break;

cae2:

for(i=2;ilength;i++)

{

if(L->tu[i].englihtu[i-1].englih)

{

L->tu[0]=L->tu[i];/某设置监测哨某/

low=1;

high=i-1;

while(low<=high)

{/某在r[low..high]中折半查找有序插入的位置某/

mid=(low+high)/2;

if(L->tu[0].englihtu[mid].englih)high=mid-1;/某插入点在低半区某/

ele

low=mid+1;/某插入点在高半区某/

}/某while某/

for(j=i-1;j>=low;--j)

L->tu[j+1]=L->tu[j];/某记录后移某/

L->tu[high+1]=L->tu[0];/某插入到正确位置某/

}/某if某/}/某for某/break;cae3:

for(i=2;ilength;i++){if(L->tu[i].mathtu[i-1].math){L->tu[0]=L->tu[i];/某设置监测哨某/low=1;high=i-1;while(low<=high){/某在r[low..high]中折半查找有序插入的位置某/mid=(low+high)/2;if(L->tu[0].mathtu[mid].math)high=mid-1;/某插入点在低半区某/elelow=mid+1;/某插入点在高半区某/}/某while某/for(j=i-1;j>=low;--j)L->tu[j+1]=L->tu[j];/某记录后移某/L->tu[high+1]=L->tu[0];/某插入到正确位置某/}/某if某/}/某for某/break;cae4:

for(i=2;ilength;i++){if(L->tu[i].databaetu[i-1].databae){L->tu[0]=L->tu[i];/某设置监测哨某/low=1;high=i-1;while(low<=high){/某在r[low..high]中折半查找有序插入的位置某/mid=(low+high)/2;if(L->tu[0].databaetu[mid].databae)high=mid-1;/某插入点在低半区某/elelow=mid+1;/某插入点在高半区某/}/某while某/for(j=i-1;j>=low;--j)L->tu[j+1]=L->tu[j];/某记录后移某/L->tu[high+1]=L->tu[0];/某插入到正确位置某/

}/某if某/

}/某for某/

break;

cae5:

for(i=2;ilength;i++)

{

if(L->tu[i].umtu[i-1].um)

{

L->tu[0]=L->tu[i];/某设置监测哨某/

low=1;

high=i-1;

while(low<=high)

{/某在r[low..high]中折半查找有序插入的位置某/

mid=(low+high)/2;

if(L->tu[0].umtu[mid].um)

high=mid-1;/某插入点在低半区某/

ele

low=mid+1;/某插入点在高半区某/

}/某while某/

for(j=i-1;j>=low;--j)

L->tu[j+1]=L->tu[j];/某记录后移某/

L->tu[high+1]=L->tu[0];/某插入到正确位置某/}/某if某/

}/某for某/

break

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1