链表实现学生学籍管理系统.docx

上传人:b****6 文档编号:8156856 上传时间:2023-01-29 格式:DOCX 页数:36 大小:22.73KB
下载 相关 举报
链表实现学生学籍管理系统.docx_第1页
第1页 / 共36页
链表实现学生学籍管理系统.docx_第2页
第2页 / 共36页
链表实现学生学籍管理系统.docx_第3页
第3页 / 共36页
链表实现学生学籍管理系统.docx_第4页
第4页 / 共36页
链表实现学生学籍管理系统.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

链表实现学生学籍管理系统.docx

《链表实现学生学籍管理系统.docx》由会员分享,可在线阅读,更多相关《链表实现学生学籍管理系统.docx(36页珍藏版)》请在冰豆网上搜索。

链表实现学生学籍管理系统.docx

链表实现学生学籍管理系统

#include

#include

#include

#defineN15//学号位数

#defineM15//姓名字节数

Forpersonaluseonlyinstudyandresearch;notforcommercialuse

#defineL4//成绩的科数

intaa=0;

//记录筛选时打开的文

voidprintf_(structstu*);//输出单个的学生数据

structstu*scanf1_();//接收单个的学生数据,返回指针,

structstu*scanf_();//得到学生的数据,并放入到链表中

voidprint_(structstu*);//输出链表中的学生信息

structstu*num_paixu(structstu*);//用链表给学生排序

voidchaxun(structstu*);//根据学生的学号查询学生的信息,并把学生的数据输出

structstu*charu(structstu*);//将学生的数据插入到顺序排放的链表中,并且插入后也是顺序排放的。

structstu*shanchu(structstu*);//删除数据

voidxiugai(structstu*);//修改学生的信息。

voidfprint_(structstu*);//把数据写入到文件

intto_ji(structstu*);//统计学生的总人数

intt_ji_tj(structstu*);//统计成绩在某一区间内的人数

structstu*ch_ji_paixu(structstu*);//按成绩排序,默认的是按总成绩排序

structs*shaixuan(structstu*);//筛选符合条件的数据,得到符合条件的结构体数据的指针。

voidshuchu_shai(structs*);//输出筛选出来的数据

voidfb_shu_shai(structs*);//将筛选出来的数据输入到文件中

voidavrage(structstu*head,float*);//计算平均成绩

voidfb_avrage(float*);//将平均成绩放在文件的最后面

//建立学生结构体

structstu

{

charnum[N];

charname[M];

intch_ji[L];

structstu*next;

};

//建立一个链表,存放学生结构体的指针

structs

{

structstu*p;

structs*ps;

};

voidmain()

{

inti,n,x=1,k=0;

floata[L]={0};

structstu*head=NULL;

structs*shead=NULL;

charch;

while(x)

{system("cls");

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

printf("0---退出系统1---录入数据\n");

printf("2---保存文件3---按成绩排序\n");

printf("4---查看信息5---按学号排序\n");

printf("6---统计人数7---按条件筛选\n");

printf("8---查询信息9---显示筛选结果\n");

printf("10---插入数据11---保存筛选结果\n");

printf("12---删除数据13---计算平均成绩\n");

printf("14---修改数据15---保存平均成绩\n");

printf("16---按条件统计人数\n");

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

scanf("%d",&n);

getchar();//有啥作用

switch(n)

{

case0:

x=0;break;

case1:

head=scanf_();break;

case2:

if(head==NULL||head->next==NULL)

{

printf("请先录入学生的数据!

");

getchar();

break;

}

else

fprint_(head);break;

case3:

if(head==NULL||head->next==NULL)

{

printf("请先录入学生的数据!

");

getchar();

break;

}

else

{

head=ch_ji_paixu(head);

break;

}

case4:

if(head==NULL||head->next==NULL)

{

printf("请先录入学生的数据!

");

getchar();

break;

}

else

print_(head);break;

case5:

if(head==NULL||head->next==NULL)

{

printf("请先录入学生的数据!

");

getchar();

break;

}

else

{

head=num_paixu(head);

printf("是否显示排序结果Y/N?

");

ch=getchar();getchar();

if(ch=='y'||ch=='Y')

{

printf("\n");

print_(head);

}

break;

}

case6:

if(head==NULL||head->next==NULL)

{

printf("请先录入学生的数据!

");

getchar();

break;

}

else

{

k=to_ji(head);

printf("总共有%3d名学生",k);

getchar();

break;

}

case7:

if(head==NULL||head->next==NULL)

{

printf("请先录入学生的数据!

");

getchar();

break;

}

else

{

shead=shaixuan(head);

if(shead!

=NULL&&shead->ps!

=NULL)

{

printf("是否显示筛选结果Y/N?

");

ch=getchar();

if(ch=='y'||ch=='Y')

{

printf("\n");

shuchu_shai(shead);

getchar();

}

}

break;

}

case8:

if(head==NULL||head->next==NULL)

{

printf("请先录入学生的数据!

");

getchar();

break;

}

else

{

chaxun(head);

getchar();

break;

}

case9:

if(head==NULL||head->next==NULL)

{

printf("请先录入学生的数据!

");

getchar();

break;

}

else

{

printf("\n");

shuchu_shai(shead);

getchar();

break;

}

case10:

if(head==NULL||head->next==NULL)

{

printf("请先录入学生的数据!

");

getchar();

break;

}

else

head=charu(head);break;

case11:

if(head==NULL||head->next==NULL)

{

printf("请先录入学生的数据!

");

getchar();

break;

}

else

{

fb_shu_shai(shead);

getchar();

break;

}

case12:

if(head==NULL||head->next==NULL)

{

printf("请先录入学生的数据!

");

getchar();

break;

}

else

{

head=shanchu(head);

break;

}

case13:

if(head==NULL||head->next==NULL)

{

printf("请先录入学生的数据!

");

getchar();

break;

}

else

{

avrage(head,a);

printf("平均值计算成功!

\n是否显示平均成绩Y/N?

");

ch=getchar();

if(ch=='y'||ch=='Y')

{

printf("\n语文数学英语总成绩\n");

printf("%-8.2f%-8.2f%-8.2f%-8.2f",a[0],a[1],a[2],a[L-1]);

getchar();

}

break;

}

case14:

if(head==NULL||head->next==NULL)

{

printf("请先录入学生的数据!

");

getchar();

break;

}

else

{

xiugai(head);

break;

}

case15:

if(head==NULL||head->next==NULL)

{

printf("请先录入学生的数据!

");

getchar();

break;

}

else

{

fb_avrage(a);

printf("平均值保存成功!

");

getchar();

break;

}

case16:

if(head==NULL||head->next==NULL)

{

printf("请先录入学生的数据!

");

getchar();

break;

}

else

{

k=t_ji_tj(head);

if(k>0)

{

printf("符合条件的有%3d名学生!

",k);

getchar();

}

elseif(k==0)

{

printf("没有符合条件的学生!

");

getchar();

}

elseif(k==-2)

getchar();

break;

}

default:

printf("输入有误,请重新输入!

");

getchar();

break;

}

}

}

//输出单个的学生数据

voidprintf_(structstu*p0)

{

inti;

printf("学号:

");

puts(p0->num);

printf("姓名:

");

puts(p0->name);

printf("语文数学英语总成绩\n");

for(i=0;i

printf("%-8d",p0->ch_ji[i]);

printf("\n");

}

//接收单个的学生数据,返回指针,

structstu*scanf1_()

{

inti,sum=0;

structstu*p0;

p0=(structstu*)malloc(sizeof(structstu));

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

");

gets(p0->num);

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

");

gets(p0->name);

printf("请输入学生的三科成绩(语文、数学、英语):

");

for(i=0;i

{

scanf("%d",&p0->ch_ji[i]);

sum+=p0->ch_ji[i];

}

getchar();

p0->ch_ji[L-1]=sum;

returnp0;

}

//得到学生的数据,并放入到链表中

structstu*scanf_()

{

structstu*p1,*p2,*head;

inti,sum=0,n=0;

printf("注意:

当学生学号为0时输入结束\n\n");

p1=(structstu*)malloc(sizeof(structstu));/*得到学生信息*/

head=p2=p1;

do

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

");

gets(p1->num);

if(strcmp(p1->num,"0")==0)

break;

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

");

gets(p1->name);

printf("请输入学生的三科成绩(语文、数学、英语):

");

for(i=0;i

{

scanf("%d",&p1->ch_ji[i]);

sum+=p1->ch_ji[i];

}

getchar();

printf("\n");

p1->ch_ji[L-1]=sum;

sum=0;

p1=(structstu*)malloc(sizeof(structstu));

p2->next=p1;

p2=p1;

n++;

}while

(1);

p1->next=NULL;

printf("成绩输入结束!

\n");

getchar();/*学生的数据被放在链表中*/

returnhead;

}

/*输出链表中的学生信息*/

voidprint_(structstu*head)

{

inti;

structstu*p1,*p2;

p1=p2=head;

while(p1->next!

=NULL)

{

printf("学号:

");

puts(p1->num);

printf("姓名:

");

puts(p1->name);

printf("语文数学英语总成绩\n");

for(i=0;i

printf("%-8d",p1->ch_ji[i]);

printf("\n");

p1=p2->next;

p2=p1;

}

getchar();

}

/*用链表给学生排序*/

structstu*num_paixu(structstu*head)

{

structstu*p1,*p2,*p3,*p4,*p5,*p6,*p7;

intx=1;

for(p1=head;p1->next!

=NULL;p4=p1,p1=p1->next)

{

p3=p1;

for(p2=p1->next,p5=p7=p2;p2->next!

=NULL;p7=p2,p2=p2->next)

{

if(strcmp(p3->num,p2->num)>0)

{

p3=p2;

p5=p7;

}

}

if(p3!

=p1)

{

if(x&&p1==head)

{

p6=p1->next;

p1->next=p3->next;

p3->next=p6;

p5->next=p1;

head=p3;

p1=p3;

x=0;

}

else

{

p6=p1->next;

p1->next=p3->next;

p3->next=p6;

p4->next=p3;

p5->next=p1;

p1=p3;

}

}

}

printf("排序成功!

\n");

returnhead;

}

//根据学生的学号查询学生的信息,并把学生的数据输出

voidchaxun(structstu*head)

{

chara[N];

structstu*p1;

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

");

gets(a);

p1=head;

while(p1->next!

=NULL)

{

if(strcmp(p1->num,a)==0)

break;

p1=p1->next;

}

if(p1->next==NULL)

printf("没有找到学号为%s的学生!

\n",a);

else

{

printf("要查询的学生信息如下:

\n\n");

printf_(p1);

}

}

//将学生的数据插入到顺序排放的链表中,并且插入后也是顺序排放的。

structstu*charu(structstu*head)

{

structstu*p1,*p2,*p3;

p1=scanf1_();

p2=head;

p3=p2;

while((strcmp(p2->num,p1->num)<0)&&p2->next!

=NULL)

{

p3=p2;

p2=p2->next;

}

if(p2==head)

{

p1->next=head;

head=p1;

}

else

{

p3->next=p1;

p1->next=p2;

}

printf("插入成功!

\n");

getchar();

returnhead;

}

//删除数据

structstu*shanchu(structstu*head)

{

chara[N];

structstu*p1,*p2,*p3;

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

");

gets(a);

p1=head;

p2=p1;

while((strcmp(p2->num,a)!

=0)&&p2->next!

=NULL)

{

p3=p2;

p2=p2->next;

}

if(p2->next==NULL)

printf("没有找到要删除的数据!

\n");

elseif(p2==head)

{

head=p2->next;

printf("删除成功!

\n");

}

else

{

p3->next=p2->next;

printf("删除成功!

\n");

}

getchar();

returnhead;

}

//修改学生的信息。

voidxiugai(structstu*head)

{

chara[N];

structstu*p1;

inti,k;

printf("输入要修改的学生的学号");

gets(a);

p1=head;

while(p1->next!

=NULL)

{

if(strcmp(p1->num,a)==0)

break;

p1=p1->next;

}

if(p1->next==NULL)

{

printf("没有要找的学生信息!

\n");

getchar();

}

else

{

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

printf("*0---放弃修改*\n");

printf("*1---修改学号*\n");

printf("*2---修改姓名*\n");

printf("*3---修改成绩*\n");

printf("*4---修改全部*\n");

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

scanf("%d",&k);

getchar();

switch(k)

{

case0:

break;

case1:

printf("

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

当前位置:首页 > 高等教育 > 工学

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

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