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