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

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

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

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

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

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

#include

#include

#include

//单链表的定义

//数据元素的类型

typedefstructLNode

{//声明结点的类型和指向结点的指针类型//

intstuid;

charname[20];

floatenglish;

floatmath;

floatdatabase;

floatsum;

floataverage;

structLNode*next;//指示结点地址的指针//

}LNode,*LinkList;

 

//函数1.输入学生信息,逆向建立单链表

LinkListInput()

{

inti,n;

LinkListL,p;

L=(LinkList)malloc(sizeof(LNode));

L->next=NULL;//建立一带头结点的空单链表//

//单链表初始化结束

printf("请输入要输入的学生个数:

\n");

scanf("%2d",&n);

//逆序建立

for(i=n;i>0;i--)

{

printf("**************************************\n");

printf("**请输入第%d个学生的信息**\n",i);

printf("**************************************\n");

p=(LinkList)malloc(sizeof(LNode));//生成新结点//

printf("请输入学生的学号:

");

scanf("%d",&p->stuid);

printf("请输入学生的姓名:

");

scanf("%s",p->name);

printf("请输入学生的英语成绩:

");

scanf("%f",&p->english);

printf("请输入学生的高数成绩:

");

scanf("%f",&p->math);

printf("请输入学生的数据结构成绩:

");

scanf("%f",&p->database);

p->sum=p->english+p->math+p->database;

p->average=p->sum/3;

p->next=L->next;

L->next=p;//把新结点插入到链表头部

}

returnL;

}

 

//函数2.显示学生信息

voidDisplay(LinkListL)

{

LinkListp;

p=L->next;//L为头指针p指向第一个结点

if(L==NULL)

printf("请先输入数据\n");

else{

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

\n");

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

while(p)

{

printf("%d\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",p->stuid,p->name,p->sum,p->average,p->english,p->math,p->database);

p=p->next;

}

}

}

//函数3.插入单个学生到表头

voidInsert(LinkListL)

{

LinkListp;

p=(LinkList)malloc(sizeof(LNode));//p指向要插入的结点

printf("请输入学生的学号:

");

scanf("%d",&p->stuid);

printf("请输入学生的姓名:

");

scanf("%s",p->name);

printf("请输入学生的英语成绩:

");

scanf("%f",&p->english);

printf("请输入学生的高数成绩:

");

scanf("%f",&p->math);

printf("请输入学生的数据结构成绩:

");

scanf("%f",&p->database);

p->sum=p->english+p->math+p->database;

p->average=p->sum/3;

p->next=L->next;//将p插入L中

L->next=p;

printf("插入成功!

");

}

 

//函数4.删除某个学生

//要知道要删除的这个结点的前一个结点的位置

voidDelete(LinkListL)

{

LinkListp,q;

intnum,ch;

chars[20];

if(L==NULL)

printf("请先输入数据\n");

else{

p=L;//L是头结点的头指针,最后p指向要删除的结点的前一个位置

q=p->next;//q指向p的下一个结点,即最后指向要删除的结点

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

");

scanf("%d",&ch);

if(ch==1)

{

printf("请输入姓名:

");

scanf("%s",s);

while(strcmp(q->name,s)!

=0&&q->next!

=NULL){

p=q;

q=q->next;

}

if(strcmp(q->name,s)==0)//q指向的结点要被删除,p指向要删除的结点的前一个位置

{

p->next=q->next;

printf("被删除学生的信息如下:

\n");

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

printf("%d\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",q->stuid,q->name,q->sum,q->average,q->english,q->math,q->database);

free(q);//释放要删除的结点q

}

else

printf("没有该学生的信息\n");

}//按姓名删除

else

{

printf("请输入要删除学生的学号:

");

scanf("%10d",&num);

while(q->stuid!

=num&&q->next!

=NULL){

p=q;

q=q->next;

}

if(q->stuid==num)//q指向的结点要被删除,p指向要删除的结点的前一个位置

{p->next=q->next;

printf("被删除学生的信息如下:

\n");

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

printf("%d\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",q->stuid,q->name,q->sum,q->average,q->english,q->math,q->database);

free(q);//释放要删除的结点q

}

else

printf("没有该学生的信息\n");

}//按学号删除

}//有学生信息

}

 

//函数5.顺序查找某个学生

voidSearch(LinkListL)

{

LinkListp;

intnum,ch;

charsn[20];

p=L->next;

if(!

L)

printf("请先输入数据\n");

else

{

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

");

scanf("%d",&ch);

if(ch==1){

printf("请输入要查找学生的学号:

\n");

scanf("%10d",&num);

while(p&&p->stuid!

=num)

p=p->next;

if(p->stuid==num)

{

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

printf("%d\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",p->stuid,p->name,p->sum,p->average,p->english,p->math,p->database);

}

else

printf("没有该学生的信息\n");

}//按学号查找ch==1

else

{

printf("请输入要查找学生的姓名:

\n");

scanf("%s",sn);

while(p&&strcmp(p->name,sn)!

=0)

p=p->next;

if(strcmp(p->name,sn)==0)

{

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

printf("%d\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\t\t%.2f\n",p->stuid,p->name,p->sum,p->average,p->english,p->math,p->database);

}

else

printf("没有该学生的信息\n");

}//按姓名查找ch==2

}//有数据

}

//函数6.显示各科最高分

voidMax(LinkListL)

{

LinkListp1=L->next,p2=L->next,p3=L->next;

floatmax1=0,max2=0,max3=0;

printf("************************************************\n");

printf("*显示各科最高分*\n");

printf("************************************************\n");

//英语最高分

for(p1;p1->next!

=NULL;p1=p1->next)

if(p1->english>p1->next->english)

max1=p1->english;

else

max1=p1->next->english;

//数学最高分

for(p2;p2->next!

=NULL;p2=p2->next)

if(p2->math>p2->next->math)

max2=p2->math;

else

max2=p2->next->math;

//数据结构最高分

for(p3;p3->next!

=NULL;p3=p3->next)

if(p3->database>p3->next->database)

max3=p3->database;

else

max3=p3->next->database;

 

printf("英语:

\t%6.1f\n",max1);

printf("高数:

\t%6.1f\n",max2);

printf("数据结构:

\t%6.1f\n",max3);

}

 

//函数7.各科平均分

voidAverage(LinkListL)

{

floatave1,ave2,ave3,i=0;

floatenglish1=0,math1=0,database1=0;

LinkListp;

p=L->next;

if(!

L)

printf("请先输入数据");

while(p!

=NULL)

{

i++;

english1=english1+p->english;

math1=math1+p->math;

database1=database1+p->database;

p=p->next;

}

ave1=english1/i;

ave2=math1/i;

ave3=database1/i;

printf("************************************************\n");

printf("*各科平均分的统计*\n");

printf("************************************************\n\n");

printf("\t\t英语\t高数\t数据结构\n");

printf("\t平均分:

%6.1f\t%6.1f\t%6.1f\n",ave1,ave2,ave3);

}

//函数0.退出

voidtuichu(){

printf("\t**********谢谢使用**********\n");

exit(0);

}

//函数8.排序

voidSort(LinkListL){

LinkListp,q,r;

intch1,ch2,dd1,i,j,count=0;

floatdd2;

if(!

L)

printf("请先输入数据");

else{

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

");

scanf("%d",&ch1);

switch(ch1){

case1:

//L是带头结点的单链表

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

");

scanf("%d",&ch2);

switch(ch2){

case1:

p=L->next->next;//p指向第一结点的后继

L->next->next=NULL;//直接插入排序,第一元素有序,从第二元素起依次插入

while(p!

=NULL){

r=p->next;//暂存p的后继

q=L;

while(q->next!

=NULL&&q->next->stuidstuid)//查找插入位置

q=q->next;//将P结点链入链表

p->next=q->next;

q->next=p;

p=r;

}

break;

case2:

p=L->next->next;

L->next->next=NULL;

while(p!

=NULL){

r=p->next;

q=L;

while(q->next!

=NULL&&q->next->englishenglish)

q=q->next;

p->next=q->next;

q->next=p;

p=r;

}

break;

case3:

p=L->next->next;

L->next->next=NULL;

while(p!

=NULL){

r=p->next;

q=L;

while(q->next!

=NULL&&q->next->mathmath)

q=q->next;

p->next=q->next;

q->next=p;

p=r;

}

break;

case4:

p=L->next->next;

L->next->next=NULL;

while(p!

=NULL){

r=p->next;

q=L;

while(q->next!

=NULL&&q->next->databasedatabase)

q=q->next;

p->next=q->next;

q->next=p;

p=r;

}

break;

case5:

p=L->next->next;

L->next->next=NULL;

while(p!

=NULL){

r=p->next;

q=L;

while(q->next!

=NULL&&q->next->sumsum)

q=q->next;

p->next=q->next;

q->next=p;

p=r;

}

break;

}//switch(ch2)

break;

 

case2:

p=L->next;

while(p){

count++;

p=p->next;

}

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

");

scanf("%d",&ch2);

switch(ch2){

case1:

for(i=0;i

{

p=L->next;

for(j=0;j

{

if(p->stuid>p->next->stuid)

{

dd1=p->stuid;

p->stuid=p->next->stuid;

p->next->stuid=dd1;

}

p=p->next;

}

}

break;

case2:

for(i=0;i

{

p=L->next;

for(j=0;j

{

if(p->english>p->next->english)

{

dd2=p->english;

p->english=p->next->english;

p->next->english=dd2;

}

p=p->next;

}

}

break;

case3:

for(i=0;i

{

p=L->next;

for(j=0;j

{

if(p->math>p->next->math)

{

dd2=p->math;

p->math=p->next->math;

p->next->math=dd2;

}

p=p->next;

}

}

break;

case4:

for(i=0;i

{

p=L->next;

for(j=0;j

{

if(p->database>p->next->database)

{

dd2=p->database;

p->database=p->next->database;

p->next->database=dd2;

}

p=p->next;

}

}

break;

case5:

for(i=0;i

{

p=L->next;

for(j=0;j

{

if(p->sum>p->next->sum)

{

dd2=p->sum;

p->sum=p->next->sum;

p->next->sum=dd2;

}

p=p->next;

}

}

break;

}//switch(ch2)

break;

 

case3:

//直接选择排序一趟找出一个关键字最小的结点,其数据和当前结点进行交换;

//若要交换指针,需记下当前结点和最小结点的前驱指针

p=L->next;

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

");

scanf("%d",&ch2);

switch(ch2){

case1:

while(p){

q=p->next;

r=p;//设r是指向关键字最小的结点的指针

while(q)

{

if(q->stuidstuid)

r=q;

q=q->next;

}

if(r!

=p)

{

dd1=r->stuid;

r->stuid=q->stuid;

q->stuid=dd1;

}

p=p->next;

}//while(p)

break;

case2:

while(p){

q=p->next;

r=p;//设r是指向关键字最小的结点的指针

while(q)

{

if(q->englishenglish)

r=q;

q=q->next;

}

if(r!

=p)

{

dd2=r->english;

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

当前位置:首页 > 表格模板 > 调查报告

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

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