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

上传人:b****2 文档编号:12654593 上传时间:2023-04-21 格式:DOCX 页数:36 大小:98.61KB
下载 相关 举报
链表实现学生学籍管理系统.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

#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");

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");

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);

}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();

}

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;

}

elsehead=charu(head);break;

case11:

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

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

");getchar();

break;

}

else

{fb_shu_shai(shead);getchar();break;

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;

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)

{

",k);

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

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;ich_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("请输入新学号:

");gets(p1->num);

printf("修改成功!

");getchar();

break;

case2:

printf("请输入新姓名:

");gets(p1->name);

printf("修改成功!

");

getchar();

break;

case3:

printf(

printf("*0---放弃修改

*\n");

printf("*

1--

-修改全部成绩

*\n");

printf("*

2--

-修改语文成绩

*\n");

printf("*

3--

-修改数学成绩

*\n");

printf("*

4--

-修改英语成绩

*\n");

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

scanf("%d",&k);

switch(k)

{

case0:

break;

case1:

p1->ch_ji[L-1]=0;printf("请输入学生的三科成绩(语文、数学、英语):

");for(i=0;i

{

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

p1->ch_ji[L-1]+=p1->ch_ji[i];

}printf("修改成功!

");getchar();getchar();

break;

case2:

printf("请输入新语文成绩:

");scanf("%d",&p1->ch_ji[0]);printf("修改成功!

");getchar();break;

case3:

printf("请输入新数学成绩:

");scanf("%d",&p1->ch_ji[1]);printf("修改成功!

");getchar();break;

case4:

printf("请输入新英语成绩:

");scanf("%d",&p1->ch_ji[2]);printf("修改成功!

");getchar();break;

default:

printf("您的输入有误!

");getchar();break;

}break;

}

case4:

printf("请输入新的学号:

");gets(p1->num);

printf("请输入新的姓名:

");gets(p1->name);

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

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

");for(i=0;i

{

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

}

printf("修改成功!

");

getchar();

getchar();

break;

default:

printf("您的输入有误!

");

getchar();break;

}

}

}

//把数据写入到文件

voidfprint_(structstu*head)

{

FILE*fb;

structstu*p1;

if((fb=fopen("成绩单.txt","w"))==NULL)

{

printf("文件成绩单.txt打开失败");

exit(0);

}

英语

fprintf(fb,"学号姓名语文数学总成绩\n");

for(p1=head;p1->next!

=NULL;p1=p1->next)

fprintf(fb,"%-13s%-15s%-13d%-14d%-14d%d\n",p1->num,p1->name,p1->ch_ji[0],p1->ch_ji[1],p1->ch_ji[2],p1->ch_

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

当前位置:首页 > PPT模板 > 自然景观

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

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