学生管理系统链表版.docx
- 文档编号:11855075
- 上传时间:2023-04-06
- 格式:DOCX
- 页数:23
- 大小:19.26KB
学生管理系统链表版.docx
《学生管理系统链表版.docx》由会员分享,可在线阅读,更多相关《学生管理系统链表版.docx(23页珍藏版)》请在冰豆网上搜索。
学生管理系统链表版
//347434.cpp:
定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include
#include
#include
#include
voidMAIN()//系统的功能菜单
{
printf("\n\n\n\n\n");
printf("欢迎使用学生信息系统\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("*主菜单*\n");
printf("*1.添加学生信息*\n");
printf("*2.删除学生信息*\n");
printf("*3.查询学生信息*\n");
printf("*4.修改学生信息*\n");
printf("*5.打印全部学生信息*\n");
printf("*6.读取已保存文件*\n");
printf("*7.保存文件*\n");
printf("*8.密码修改*\n");
printf("*9.退出*\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("版权所有,翻版必究,copyright@薛诚\n\n");
}
//--------------------------------------------------------------------------------------------------------------------------------------------
structstudent//定义结构体
{
charnum[5];
charname[20];
intscore;
structstudent*next;
};
//--------------------------------------------------------------------------------------------------------------------------------------------
structstudent*createlist()//创建链表的头指针
{
structstudent*head;
head=(structstudent*)malloc(sizeof(structstudent));
head->next=NULL;
returnhead;
}
//--------------------------------------------------------------------------------------------------------------------------------------------
intSCANF(structstudent*head,structstudent*newnode)/*输入学生信息子函数并在此做出异常输入情况的判断*/
{
intLENTH;//LENTH为输入的学生学号的长度
structstudent*p;
p=head->next;
printf("请输入学生学号:
\n");
scanf("%s",newnode->num);
while(p)//第一种情况,输入的学号在系统中已经存在
{
if(strcmp(p->num,newnode->num)==0)
{
printf("您输入的学号在该系统中已经存在,请按任意键重新输入!
!
\n");
getch();
return1;
}
else
{
p=p->next;
}
}
LENTH=strlen(newnode->num);//以下第二种情况,输入的学号位数不是4位
if(LENTH!
=4)
{
printf("您输入的学生学号必须为4位请按任意键重新输入!
!
\n\n\n");
getch();
return1;//返回值为真,方便下面的调用
}
printf("请输入学生姓名:
\n");
scanf("%s",newnode->name);
printf("请输入学生成绩:
\n");
scanf("%d",&newnode->score);
return0;//返回值为假
}
//--------------------------------------------------------------------------------------------------------------------------------------------
voidInsert(structstudent*head,structstudent*newnode)/*将学生信息按照学号由高到低排序并插入到链表中*/
{
structstudent*pre=head;//pre前一个节点node后一个把newnode插入
structstudent*node=pre->next;
while(node!
=NULL)
{
if(strcmp(node->num,newnode->num)<0)//按学号由低到高插入
{
pre=node;
node=node->next;
}
else
{
break;
}
}
pre->next=newnode;//找到了结点的位置将结点插入到链表中
newnode->next=node;
}
//--------------------------------------------------------------------------------------------------------------------------------------------
intADD(structstudent*head)/*添加学生信息*/
{
structstudent*p;
p=(structstudent*)malloc(sizeof(structstudent));
while(SCANF(head,p))//异常学号输入情况的处理
{
system("cls");
}
structstudent*p1=head;
structstudent*p2=p1->next;
Insert(head,p);
printf("如果需要继续输入请按y,返回主菜单请按其它任意键\n");
chari;
i=getch();
if(i=='y')
{
system("cls");
ADD(head);
}
return0;
}
//--------------------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------
voidDELETE(structstudent*head)/*删除学生信息*/
{
structstudent*p1,*p2;/*p1为查找到要删除的结点指针,p2为其前驱指针*/
chars[256];
structstudent*p;
printf("学生信息如下:
\n\n");
for(p=head->next;p;p=p->next)/*辅助输出学生信息*/
{
printf("|学号:
%8s|姓名:
%8s|成绩:
%6d|\n",p->num,p->name,p->score);
}
printf("请输入要删除的学号Pleaseenterthedeletednum:
\n");
printf("如果要删除全部学生信息,请按0000\n");
scanf("%s",s);
p1=head->next;
p2=head;
if(strcmp(s,"0000")!
=0)
{
while(p1!
=NULL)
{
if(strcmp(p1->num,s))
{
p2=p1;/*p2为其前驱指针*/
p1=p1->next;
}
else
{
break;
}
}
if(p1!
=NULL)
{
p2->next=p1->next;
printf("您输入的学生删除成功@@@@\n请按任意键返回主菜单\n");
getch();
free((void*)p1);
}
if(p1==NULL)
{
printf("\n没有该学生Thereisnonum%sstudentonthelist.\n",s);
printf("请按任意键返回主菜单重新选择\n");
getch();
}
}
if(strcmp(s,"0000")==0)
{
head->next=NULL;
printf("全部学生信息删除成功@@@@\n");
printf("请按任意键返回主菜单重新选择\n");
getch();
}
}
//--------------------------------------------------------------------------------------------------------------------------------------------
voidMODIFY(structstudent*head)/*修改学生信息*/
{
charnum[256];
printf("请输入要修改的学生的学号:
\n");
scanf("%s",num);
structstudent*p1=head;
structstudent*p2=p1->next;
while(p2)
{
if(strcmp(p2->num,num)!
=0)
{
p1=p2;
p2=p2->next;
}
else
{
break;
}
}
if(!
p2)
{
printf("\n没有该学生Thereisnonum%sstudentonthelist.\n",num);
getch();
}
else
{
printf("|学号:
%8s|姓名:
%8s|成绩:
%6d|\n",p2->num,p2->name,p2->score);
printf("请重新输入该学生信息:
\n");
printf("请输入学生姓名:
\n");
scanf("%s",p2->name);
printf("请输入学生成绩:
\n");
scanf("%d",&p2->score);
}
}
//--------------------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------
voidQUERY(structstudent*head)/*查询学生信息,三种方式查询*/
{
structstudent*p;
chars[5];
chari;
printf("请选择查询方式:
1,按学号查找;2,按姓名查找;3.按成绩查找\n");
i=getch();
if(i=='1')
{
printf("请输入学生学号来查找.Pleaseenternumforsearching.\n");
scanf("%s",s);
printf("您要查询的学生信息如此下:
\n");
for(p=head;p;p=p->next)
{
if(strcmp(p->num,s)==0)
{
printf("|%4s|%4s|%3d|\n",p->num,p->name,p->score);
printf("查询完毕,请按任意键返回@@@\n");
getch();
break;
}
}
if(p==NULL)
{
printf("\n没有该学生Thereisnonum%sstudentonthelist.\n",s);
printf("请按任意键返回主菜单重新选择\n");
getch();
}
}
intj=0;
if(i=='2')
{
printf("请输入姓名来查找.Pleaseenternameforsearching.\n");
scanf("%s",s);
printf("您要查询的学生信息如此下:
\n");
for(p=head;p;p=p->next)
{
if(strcmp(p->name,s)==0)
{
printf("|%4s|%4s|%3d|\n",p->num,p->name,p->score);
j++;
}
}
if((p==NULL)&&(j==0))
{
printf("\n没有该学生Thereisnoname%sstudentonthelist.\n",s);
getch();
}
if(p==NULL)
{
printf("查询完毕,请按任意键返回@@@\n");
getch();
}
}
inty=0;
if(i=='3')
{intSCORE;
printf("请输入成绩来查找.Pleaseenterscoreforsearching.\n");
scanf("%d",&SCORE);
printf("您要查询的学生信息如此下:
\n");
for(p=head;p;p=p->next)
{
if(p->score==SCORE)
{
printf("|%4s|%4s|%3d|\n",p->num,p->name,p->score);
y++;
}
}
if((p==NULL)&&(y==0))
{
printf("\n没有对应该成绩的学生\n");
getch();
}
if(p==NULL)
{
printf("查询完毕,请按任意键返回@@@\n");
getch();
}
}
}
//--------------------------------------------------------------------------------------------------------------------------------------------
voidPRINT(structstudent*head)/*打印全部学生信息*/
{
floataverage=0.00000000;
structstudent*p;
intITOTAL=1;
p=head->next;
printf("学生信息如下\n");
printf("\n*******************************STUDENTLIST************************************\n");
printf("-------------------------------------------------------------------------------\n");
while(p)
{
printf("|%d|学号:
%8s|姓名:
%8s|成绩:
%6d|\n",ITOTAL++,p->num,p->name,p->score);
average=average+p->score;
p=p->next;
}
printf("-------------------------------------------------------------------------------\n");
printf("**************************************END**************************************\n\n");
if(ITOTAL!
=1)
{
printf("学生总人数为:
%d\n",ITOTAL-1);
average=average/(ITOTAL-1);
printf("学生平均成绩为:
%f\n",average);
}
if(ITOTAL==1)
{
printf("学生人数为0,不存在平均成绩\n");
}
printf("请按数字键1系统将按成绩由高到低打印学生信息\n");
charI;
I=getch();
if(I=='1')
{
intn=ITOTAL-1;//n为学生总人数
structstudent*p1,*p2;
structstudentstu[256],stu1;
inti,j;
p1=head;
p2=p1->next;
intX=0;
for(i=0;p2!
=NULL;i++)
{
strcpy(stu[i].num,p2->num);
strcpy(stu[i].name,p2->name);
stu[i].score=p2->score;
X++;
p1=p2;
p2=p2->next;
}
for(j=0;j for(i=0;i if(stu[i].score>stu[i+1].score) { stu1=stu[i]; stu[i]=stu[i+1]; stu[i+1]=stu1; } for(i=n-1;i>=0;i--) { printf("学号姓名成绩\n"); printf("%5s%5s%5d\n",stu[i].num,stu[i].name,stu[i].score); } } printf("请按任意键返回主菜单重新选择\n"); getch(); } //-------------------------------------------------------------------------------------------------------------------------------------------- FILE*MyOpenFile(char*fname,chars[5])/*打开文件子函数并返回文件头指针*/ { FILE*fp; fp=fopen(fname,s); if(fp==NULL) { printf("cannotopenfile"); returnNULL; } returnfp; } //-------------------------------------------------------------------------------------------------------------------------------------------- voidSAVE(structstudent*head)/*保存学生信息*/ { chari; FILE*fp; printf("请选择存储方式: 1,文本文件格式;2,二进制文件格式\n"); i=getch(); if(i=='1') { printf("请输入你想存储的路径及文件名\n"); charfname[256]; scanf("%s",fname); fp=MyOpenFile(fname,"w"); structstudent*p; p=head->next; while(p! =NULL) { fprintf(fp,"%s%s%d\n",p->num,p->name,p->score);/*把学生信息写入文本*/ p=p->next; } fclose(fp); printf("文本格式文件保存成功\n\n请按任意键返回主菜单\n"); getch(); } if(i=='2') { printf("请输入你想存储的路径及文件名\n"); charfname[256]; scanf("%s",fname); fp=MyOpenFile(fname,"wb");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 管理 系统 链表版