链表实现学生学籍管理系统.docx
- 文档编号:8156856
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:36
- 大小:22.73KB
链表实现学生学籍管理系统.docx
《链表实现学生学籍管理系统.docx》由会员分享,可在线阅读,更多相关《链表实现学生学籍管理系统.docx(36页珍藏版)》请在冰豆网上搜索。
链表实现学生学籍管理系统
#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("
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实现 学生 学籍 管理 系统