学生管理系统链表版.docx

上传人:b****5 文档编号:11855075 上传时间:2023-04-06 格式:DOCX 页数:23 大小:19.26KB
下载 相关 举报
学生管理系统链表版.docx_第1页
第1页 / 共23页
学生管理系统链表版.docx_第2页
第2页 / 共23页
学生管理系统链表版.docx_第3页
第3页 / 共23页
学生管理系统链表版.docx_第4页
第4页 / 共23页
学生管理系统链表版.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

学生管理系统链表版.docx

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

学生管理系统链表版.docx

学生管理系统链表版

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

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

当前位置:首页 > 工程科技 > 能源化工

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

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