超好的学生成绩管理系统链表实现的代码含详细的注释哦.doc
- 文档编号:1665959
- 上传时间:2022-10-23
- 格式:DOC
- 页数:16
- 大小:13.20KB
超好的学生成绩管理系统链表实现的代码含详细的注释哦.doc
《超好的学生成绩管理系统链表实现的代码含详细的注释哦.doc》由会员分享,可在线阅读,更多相关《超好的学生成绩管理系统链表实现的代码含详细的注释哦.doc(16页珍藏版)》请在冰豆网上搜索。
#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;
//数学最高分
fo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 实现 代码 详细 注释