版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
经典word整理文档,仅参考,双击此处可删除页眉页脚。本资料属于网络整理,如有侵权,请联系删除,谢谢!超好的学生成绩管理系统顺序表实现的代码含详细注释哦#include<tdlib.h>#include<tdio.h>#include<tring.h>#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;i<L->litize;++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;i<L->length;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&&i<L->length)i++;}ele{printf("请输入学号:");canf("%d",&n);while(L->tu[i].num!=n&&i<L->length)i++;}if(i>=L->length){printf("要删除记录不存在!");return0;}for(j=i;j<L->length;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型floataver,tuum=0,tuum1=0,tuum2=0,tuum3=0,count1=0,count2=0,count3=0;if(L->length<=1){printf("请先输入数据!\n");return0;}for(i=1;i<L->length;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].um<L->tu[i].um)j=i;//查找总分最低分if(L->tu[k].um>L->tu[i].um)k=i;//查找英语最高分if(L->tu[j1].englih<L->tu[i].englih)j1=i;//查找高数最高分if(L->tu[j2].math<L->tu[i].math)j2=i;//查找数据结构最高分if(L->tu[j3].databae<L->tu[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&&i<L->length)i++;}ele{printf("请输入姓名:");canf("%",n);while(trcmp(L->tu[i].name,n)!=0&&i<L->length)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;i<L->length;i++)if(L->tu[i].num<L->tu[i-1].num){L->tu[0]=L->tu[i];L->tu[i]=L->tu[i-1];for(j=i-2;L->tu[0].num<L->tu[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;}eleif(num<L->tu[mid].num)high=mid-1;//继续在前半区间进行查找elelow=mid+1;//继续在后半区间进行查找}printf("查找失败!\n");return0;}ele{//二分查找,先按姓名排序for(i=2;i<L->length;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;}eleif(trcmp(n,L->tu[mid].name)<0)high=mid-1;//继续在前半区间进行查找elelow=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;i<L->length;i++)if(L->tu[i].num<L->tu[i-1].num){L->tu[0]=L->tu[i];L->tu[i]=L->tu[i-1];for(j=i-2;L->tu[0].num<L->tu[j].num;j--)L->tu[j+1]=L->tu[j];L->tu[j]=L->tu[0];}break;cae2:for(i=2;i<L->length;i++)if(L->tu[i].englih<L->tu[i-1].englih){L->tu[0]=L->tu[i];L->tu[i]=L->tu[i-1];for(j=i-2;L->tu[0].englih<L->tu[j].englih;j--)L->tu[j+1]=L->tu[j];L->tu[j]=L->tu[0];}break;cae3:for(i=2;i<L->length;i++)if(L->tu[i].math<L->tu[i-1].math){L->tu[0]=L->tu[i];L->tu[i]=L->tu[i-1];for(j=i-2;L->tu[0].math<L->tu[j].math;j--)L->tu[j+1]=L->tu[j];L->tu[j]=L->tu[0];}break;cae4:for(i=2;i<L->length;i++)if(L->tu[i].databae<L->tu[i-1].databae){L->tu[0]=L->tu[i];L->tu[i]=L->tu[i-1];for(j=i-2;L->tu[0].databae<L->tu[j].databae;j--)L->tu[j+1]=L->tu[j];L->tu[j]=L->tu[0];}break;cae5:for(i=2;i<L->length;i++)if(L->tu[i].um<L->tu[i-1].um){L->tu[0]=L->tu[i];L->tu[i]=L->tu[i-1];for(j=i-2;L->tu[0].um<L->tu[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;i<L->length;i++){if(L->tu[i].num<L->tu[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].num<L->tu[mid].num)high=mid-1;/某插入点在低半区某/elelow=mid+1;/某插入点在高半区某/}/某whilefor(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;i<L->length;i++){if(L->tu[i].englih<L->tu[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].englih<L->tu[mid].englih)high=mid-1;/某插入点在低半区某/elelow=mid+1;/某插入点在高半区某/}/某whilefor(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;i<L->length;i++){if(L->tu[i].math<L->tu[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].math<L->tu[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;i<L->length;i++){if(L->tu[i].databae<L->tu[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].databae<L->tu[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;i<L->length;i++){if(L->tu[i].um<L->tu[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].um<L->tu[mid].um)high=mid-1;/某插入点在低半区某/elelow=mid+1;/某插入点在高半区某/}/某whilefor(j=i-1;j>=low;--j)L->tu[j+1]=L->tu[j];/某记录后移某/L->tu[high+1]=L->tu[0];/某插入到正确位置某/}/某if某/}/某for某/break;}//wich(ch2)break;cae3:printf("1.按学号排序\n2.按英语成绩排序\t3.按高数成绩排序\n4.按数据结构成绩排序\t5.按总分排序\n请选择:");canf("%d",&ch2);witch(ch2){cae1://采用自前向后扫描的方法,对顺序表L做冒泡排序i=L->length-1;while(i>1){k=1;for(j=1;j<i;j++)if(L->tu[j+1].num<L->tu[j].num){L->tu[0]=L->tu[j];L->tu[j]=L->tu[j+1];L->tu[j+1]=L->tu[0];k=j;/某交换的位置某/}i=k;}break;cae2://采用自前向后扫描的方法,对顺序表L做冒泡排序i=L->length-1;while(i>1){k=1;for(j=1;j<i;j++)if(L->tu[j+1].englih<L->tu[j].englih){L->tu[0]=L->tu[j];L->tu[j]=L->tu[j+1];L->tu[j+1]=L->tu[0];k=j;/某交换的位置某/}i=k;}break;cae3://采用自前向后扫描的方法,对顺序表L做冒泡排序i=L->length-1;while(i>1){k=1;for(j=1;j<i;j++)if(L->tu[j+1].math<L->tu[j].math){L->tu[0]=L->tu[j];L->tu[j]=L->tu[j+1];L->tu[j+1]=L->tu[0];k=j;/某交换的位置某/}i=k;}break;cae4://采用自前向后扫描的方法,对顺序表L做冒泡排序i=L->length-1;while(i>1){k=1;for(j=1;j<i;j++)if(L->tu[j+1].databae<L->tu[j].databae){L->tu[0]=L->tu[j];L->tu[j]=L->tu[j+1];L->tu[j+1]=L->tu[0];k=j;/某交换的位置某/}i=k;}break;cae5://采用自前向后扫描的方法,对顺序表L做冒泡排序i=L->length-1;while(i>1){k=1;for(j=1;j<i;j++)if(L->tu[j+1].um<L->tu[j].um){L->tu[0]=L->tu[j];L->tu[j]=L->tu[j+1];L->tu[j+1]=L->tu[0];k=j;/某交换的位置某/}i=k;}break;}//wich(ch2)break;cae4:printf("1.按学号排序\n2.按英语成绩排序\t3.按高数成绩排序\n4.按数据结构成绩排序\t5.按总分排序\n请选择:");canf("%d",&ch2);witch(ch2){cae1:for(i=1;i<L->length-1;i++){k=i;for(j=i+1;j<L->length;j++)if(L->tu[k].num>L->tu[j].num)k=j;/某k中存放关键字最小的记录的下标某/if(k!=i){L->tu[0]=L->tu[k];L->tu[k]=L->tu[i];/某关键字最小的记录与第i个记录某/L->tu[i]=L->tu[0];}/某if某/}/某for某/break;cae2:for(i=1;i<L->length-1;i++){k=i;for(j=i+1;j<L->length;j++)/某在i开始的L.length-i+1个记录中选关键字最小的记录某/if(L->tu[k].englih>L->tu[j].englih)k=j;/某k中存放关键字最小的记录的下标某/if(k!=i){L->tu[0]=L->tu[k];L->tu[k]=L->tu[i];/某关键字最小的记录与第i个记录某/L->tu[i]=L->tu[0];}/某iffor某/break;cae3:for(i=1;i<L->length-1;i++){k=i;for(j=i+1;j<L->length;j++)/某在i开始的L.length-i+1个记录中选关键字最小的记录某/if(L->tu[k].math>L->tu[j].math)k=j;/某k中存放关键字最小的记录的下标某/if(k!=i){L->tu[0]=L->tu[k];L->tu[k]=L->tu[i];/某关键字最小的记录与第i个记录某/L->tu[i]=L->tu[0];}/某if某/}break;cae4:for(i=1;i<L->length-1;i++){k=i;for(j=i+1;j<L->length;j++)/某在i开始的L.length-i+1个记录中选关键字最小的记录某/if(L->tu[k].databae>L->tu[j].databae)k=j;/某k中存放
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论