超好的学生成绩管理系统链表实现的代码含详细的注释哦_第1页
超好的学生成绩管理系统链表实现的代码含详细的注释哦_第2页
超好的学生成绩管理系统链表实现的代码含详细的注释哦_第3页
超好的学生成绩管理系统链表实现的代码含详细的注释哦_第4页
超好的学生成绩管理系统链表实现的代码含详细的注释哦_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include <stdlib.h>#include <stdio.h>#include <string.h>/单链表的定义/数据元素的类型typedef struct LNode /声明结点的类型和指向结点的指针类型/int stuid;char name20;float english;float math;float database;float sum;float average;struct LNode *next; /指示结点地址的指针/LNode,*LinkList;/函数1.输入学生信息,逆向建立单链表LinkList Input()int

2、 i,n;LinkList L,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); /生成

3、新结点/printf("请输入学生的学号:");scanf("%d",&p->stuid);printf("请输入学生的姓名:");scanf("%s",p->name);printf("请输入学生的英语成绩:");scanf("%f",&p->english);printf("请输入学生的高数成绩:");scanf("%f",&p->math);printf("请输入学生的数据

4、结构成绩:");scanf("%f",&p->database);p->sum=p->english+p->math+p->database;p->average=p->sum/3;p->next=L->next;L->next=p; /把新结点插入到链表头部return L;/函数2.显示学生信息void Display(LinkList L)LinkList p;p=L->next;/ L为头指针p指向第一个结点if(L=NULL)printf("请先输入数据n");

5、elseprintf("所有同学信息如下:n");printf("学号t姓名t总分t平均分t英语成绩t高数成绩t数据结构成绩n");while(p)printf("%dt%st%.2ft%.2ft%.2ftt%.2ftt%.2fn",p->stuid,p->name,p->sum,p->average,p->english,p->math,p->database);p=p->next;/函数3.插入单个学生到表头void Insert(LinkList L)LinkList p;p=(L

6、inkList)malloc(sizeof(LNode);/p指向要插入的结点printf("请输入学生的学号:");scanf("%d",&p->stuid);printf("请输入学生的姓名:");scanf("%s",p->name);printf("请输入学生的英语成绩:");scanf("%f",&p->english);printf(" 请输入学生的高数成绩:");scanf("%f",&a

7、mp;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.删除某个学生/要知道要删除的这个结点的前一个结点的位置void Delete(LinkList L)LinkList

8、 p,q;int num,ch;char s20;if(L=NULL)printf("请先输入数据n");elsep=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&

9、;&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("%dt%st%.2ft%.2ft%.2ftt%.2ftt%.2fn",q->stuid,q->name,q->sum,q->average,

10、q->english,q->math,q->database);free(q); /释放要删除的结点qelseprintf("没有该学生的信息n");/按姓名删除elseprintf("请输入要删除学生的学号:");scanf("%10d",&num);while(q->stuid!=num&&q->next!=NULL)p=q;q=q->next;if(q->stuid=num) /q指向的结点要被删除,p指向要删除的结点的前一个位置p->next=q->

11、next;printf("被删除学生的信息如下:n");printf("学号t姓名t总分t平均分t英语成绩t高数成绩t数据结构成绩n");printf("%dt%st%.2ft%.2ft%.2ftt%.2ftt%.2fn",q->stuid,q->name,q->sum,q->average,q->english,q->math,q->database);free(q); /释放要删除的结点qelseprintf("没有该学生的信息n");/按学号删除/有学生信息/函数5.

12、顺序查找某个学生void Search(LinkList L)LinkList p;int num,ch;char sn20;p=L->next;if(!L)printf("请先输入数据n");elseprintf("1.按学号查找n2.按姓名查找n请选择:");scanf("%d",&ch);if(ch=1)printf("请输入要查找学生的学号:n");scanf("%10d",&num);while(p&&p->stuid!=num)p=p-&g

13、t;next;if(p->stuid=num)printf("学号t姓名t总分t平均分t英语成绩t高数成绩t数据结构成绩n");printf("%dt%st%.2ft%.2ft%.2ftt%.2ftt%.2fn",p->stuid,p->name,p->sum,p->average,p->english,p->math,p->database);elseprintf("没有该学生的信息n");/按学号查找ch=1elseprintf("请输入要查找学生的姓名:n");

14、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("%dt%st%.2ft%.2ft%.2ftt%.2ftt%.2fn",p->stuid,p->name,p->sum,p->average,p->english,p->math,p->database);e

15、lseprintf("没有该学生的信息n");/按姓名查找ch=2/有数据/函数6.显示各科最高分void Max(LinkList L)LinkList p1=L->next,p2=L->next,p3=L->next;float max1=0,max2=0,max3=0;printf(" *n");printf(" * 显示各科最高分 *n");printf(" *n");/英语最高分for(p1;p1->next!=NULL;p1=p1->next)if(p1->engli

16、sh>p1->next->english)max1=p1->english;elsemax1=p1->next->english;/数学最高分for(p2;p2->next!=NULL;p2=p2->next)if(p2->math>p2->next->math)max2=p2->math;elsemax2=p2->next->math;/数据结构最高分for(p3;p3->next!=NULL;p3=p3->next)if(p3->database>p3->next->

17、;database)max3=p3->database;elsemax3=p3->next->database;printf(" 英语 :t%6.1fn",max1);printf(" 高数 :t%6.1fn",max2);printf(" 数据结构:t%6.1fn",max3);/函数7.各科平均分void Average(LinkList L)float ave1,ave2,ave3,i=0;float english1=0,math1=0,database1=0;LinkList p;p=L->next;

18、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("*nn");printf("tt英

19、语t高数t数据结构n");printf("t平均分:%6.1ft%6.1ft%6.1fn",ave1,ave2,ave3);/函数0.退出void tuichu()printf("t*谢谢使用*n");exit(0);/函数8.排序void Sort(LinkList L)LinkList p,q,r;int ch1,ch2,dd1,i,j,count=0;float dd2;if(!L)printf("请先输入数据");elseprintf("1.直接插入排序t2.冒泡排序t3.直接选择排序n请选择:"

20、);scanf("%d",&ch1);switch (ch1)case 1:/L是带头结点的单链表printf("1.按学号排序n2.按英语成绩排序t3.按高数成绩排序n4.按数据结构成绩排序t5.按总分排序n请选择:");scanf("%d",&ch2);switch (ch2)case 1:p=L->next->next;/p指向第一结点的后继L->next->next=NULL;/直接插入排序,第一元素有序,从第二元素起依次插入while(p!=NULL)r=p->next;/暂存p

21、的后继q=L;while(q->next!=NULL&&q->next->stuid<p->stuid)/查找插入位置q=q->next;/将P结点链入链表p->next=q->next;q->next=p;p=r;break;case 2:p=L->next->next;L->next->next=NULL;while(p!=NULL)r=p->next;q=L;while(q->next!=NULL&&q->next->english<p->en

22、glish)q=q->next;p->next=q->next;q->next=p;p=r;break;case 3:p=L->next->next;L->next->next=NULL;while(p!=NULL)r=p->next;q=L;while(q->next!=NULL&&q->next->math<p->math)q=q->next;p->next=q->next;q->next=p;p=r;break;case 4:p=L->next->nex

23、t;L->next->next=NULL;while(p!=NULL)r=p->next;q=L;while(q->next!=NULL&&q->next->database<p->database)q=q->next;p->next=q->next;q->next=p;p=r;break;case 5:p=L->next->next;L->next->next=NULL;while(p!=NULL)r=p->next;q=L;while(q->next!=NULL&am

24、p;&q->next->sum<p->sum)q=q->next;p->next=q->next;q->next=p;p=r;break;/switch(ch2)break;case 2:p=L->next;while(p)count+;p=p->next;printf("1.按学号排序n2.按英语成绩排序t3.按高数成绩排序n4.按数据结构成绩排序t5.按总分排序n请选择:");scanf("%d",&ch2);switch (ch2)case 1:for(i=0;i<c

25、ount-1;i+)p=L->next;for(j=0;j<count-i-1;j+)if(p->stuid>p->next->stuid)dd1=p->stuid;p->stuid=p->next->stuid;p->next->stuid=dd1;p=p->next;break;case 2:for(i=0;i<count-1;i+)p=L->next;for(j=0;j<count-i-1;j+)if(p->english>p->next->english)dd2=p-

26、>english;p->english=p->next->english;p->next->english=dd2;p=p->next;break;case 3:for(i=0;i<count-1;i+)p=L->next;for(j=0;j<count-i-1;j+)if(p->math>p->next->math)dd2=p->math;p->math=p->next->math;p->next->math=dd2;p=p->next;break;case 4:fo

27、r(i=0;i<count-1;i+)p=L->next;for(j=0;j<count-i-1;j+)if(p->database>p->next->database)dd2=p->database;p->database=p->next->database;p->next->database=dd2;p=p->next;break;case 5:for(i=0;i<count-1;i+)p=L->next;for(j=0;j<count-i-1;j+)if(p->sum>p-&

28、gt;next->sum)dd2=p->sum;p->sum=p->next->sum;p->next->sum=dd2;p=p->next;break;/switch(ch2)break;case 3:/直接选择排序一趟找出一个关键字最小的结点,其数据和当前结点进行交换;/若要交换指针,需记下当前结点和最小结点的前驱指针p=L->next;printf("1.按学号排序n2.按英语成绩排序t3.按高数成绩排序n4.按数据结构成绩排序t5.按总分排序n请选择:");scanf("%d",&ch

29、2);switch (ch2)case 1:while(p)q=p->next;r=p;/设r是指向关键字最小的结点的指针while(q)if(q->stuid<r->stuid)r=q;q=q->next;if(r!=p)dd1=r->stuid;r->stuid=q->stuid;q->stuid=dd1;p=p->next;/while(p)break;case 2:while(p)q=p->next;r=p;/设r是指向关键字最小的结点的指针while(q)if(q->english<r->englis

30、h)r=q;q=q->next;if(r!=p)dd2=r->english;r->english=q->english;q->english=dd2;p=p->next;/while(p)break;case 3:while(p)q=p->next;r=p;/设r是指向关键字最小的结点的指针while(q)if(q->math<r->math)r=q;q=q->next;if(r!=p)dd2=r->math;r->math=q->math;q->math=dd2;p=p->next;/while(p)break; case 4:while(p)q=p->next;r=p;/设r是指向关键字最小的结点的指针while(q)if(q->database<r->database)r=q;q=q->next;if(r!=p)dd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论