数据结构学生信息管理系统.docx
《数据结构学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构学生信息管理系统.docx(16页珍藏版)》请在冰豆网上搜索。
数据结构学生信息管理系统
//该程序健壮性不强,使用时请注意输入在链表以外的数值会发生错误!
谨记
#include
#include
#include
typedefstructstudent
{
intage;
intscore;
charname[10];
structstudent*next;
}st1;
voidcreat(st1*head);//创建链表
voidprint(st1*head);//打印链表
st1*find(st1*head,intindex);//链表查找
st1*insert(st1*head);//插入信息
voidinterface();//主菜单
voiddele(st1*head);//删除信息
voidchange(st1*head);//修改信息
voidreverse(st1*head);//反序输入信息
voidsort(st1*head);//链表排序(用值交换的方式)
voidinterface()
{
inti;
printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
printf("*学生信息管理系统*\n");
printf("\n");
printf("请选择你的操作\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
printf("\n");
for(i=0;i<3;i++)
printf("");
for(i=0;i<7;i++)
printf("*****");
printf("\n");
printf("*1.初始化系统信息*\n");
printf("*2.插入学生信息*\n");
printf("*3.删除学生信息*\n");
printf("*4.修改学生信息*\n");
printf("*5.查找学生信息*\n");
printf("*6.显示所有学生信息*\n");
printf("*7.逆序显示学生信息*\n");
printf("*0.退出系统*\n");
for(i=0;i<3;i++)
printf("");
for(i=0;i<7;i++)
printf("*****");
printf("\n");
printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
printf("请输入以上序号(0-7):
");
}
intmain()
{
intk;
inta;
inti;
intindex;//用于选择
intexit=1;
intchoose;//用于判断
st1*head=NULL,*p;
head=(st1*)malloc(sizeof(st1));//分配头指针空间
do
{
system("cls");
interface();
scanf("%d",&a);
system("cls");
if(a==0)//退出系统
{
for(k=1;k>0;k--)
{system("cls");
printf("正在退出系统,请稍等");
for(i=0;i<89999999;i++)
{};
printf("....");
for(i=0;i<89999999;i++)
{};
}
printf("\n\n");
printf("是否退出系统(1/0):
");
scanf("%d",&choose);
if(choose==1)
{system("cls");
exit=0;
for(i=0;i<3;i++)
printf("");
printf("\n\n\n\n");
for(i=0;i<89999999;i++)
{};
printf("欢迎下次使用学生信息管理系统!
!
!
!
\n\n\n");
}
}
switch(a)//选择7以内的数字进行链表操作system("cls");
{
case1:
//创建链表
printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n*初始化系统信息*\n\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
creat(head);
printf("\n初始化信息完毕!
,请输入1返回主菜单:
");
scanf("%d",&choose);
while(choose!
=1)
{
printf("请输入1返回主菜单:
");
scanf("%d",&choose);
}
break;
case2:
//插入学生信息
printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n*插入学生信息*\n\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
insert(head);
printf("\n插入学生信息完毕!
,请输入1返回主菜单:
");
scanf("%d",&choose);
while(choose!
=1)
{
printf("请输入1返回主菜单:
");
scanf("%d",&choose);
}
break;
case3:
//删除学生信息
printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n*删除学生信息*\n\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
dele(head);
printf("\n删除信息完毕,请输入1返回主菜单:
");
scanf("%d",&choose);
while(choose!
=1)
{
printf("请输入1返回主菜单:
");
scanf("%d",&choose);
}
break;
case4:
//修改信息
printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n*修改学生信息*\n\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
change(head);
printf("\n修改信息完毕!
,请输入1返回主菜单:
");
scanf("%d",&choose);
while(choose!
=1)
{
printf("请输入1返回主菜单:
");
scanf("%d",&choose);
}
break;
case5:
//查找学生信息
printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n*查找学生信息*\n\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
printf("输入你要查找第几位学生:
");
scanf("%d",&index);
p=find(head,index);//查找学生信息并返回地址
printf("姓名:
%s年龄:
%d分数:
%d\n",p->name,p->age,p->score);
printf("\n查找信息完毕!
,请输入1返回主菜单:
");
scanf("%d",&choose);
while(choose!
=1)
{
printf("请输入1返回主菜单:
");
scanf("%d",&choose);
}
break;
case6:
//排序
printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n*显示所有学生信息*\n\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
sort(head);
print(head);//打印排序后的学生信息
printf("\n信息输出完毕!
,请输入1返回主菜单:
");
scanf("%d",&choose);
while(choose!
=1)
{
printf("请输入1返回主菜单:
");
scanf("%d",&choose);
}
break;
case7:
//链表反转
printf("\n");
for(i=0;i<20;i++)
printf("====");
printf("\n*逆序显示学生信息*\n\n");
for(i=0;i<20;i++)
printf("====");
printf("\n");
reverse(head);
printf("\n信息输出完毕!
,请输入1返回主菜单:
");
scanf("%d",&choose);
while(choose!
=1)
{
printf("请输入1返回主菜单:
");
scanf("%d",&choose);
}
break;
default:
break;
}
}while(1&&exit);
}
voidcreat(st1*head)
{
inti;
intn;
st1*p,*q;
printf("输入学生人数:
");
scanf("%d",&n);
for(i=0;i{
printf("输入第%d个学生信息:
\n",i+1);
p=(st1*)malloc(sizeof(st1));
printf("输入姓名:
");
scanf("%s",&p->name);
printf("输入年龄:
");
scanf("%d",&p->age);
printf("输入分数:
");
scanf("%d",&p->score);
printf("输入第%d个学生信息完成",i+1);
printf("\n\n");
if(0==i)
{
head->next=p;
}
else
{
q->next=p;
}
q=p;
}
p->next=NULL;
}
voidprint(st1*head)
{
st1*x;
x=head->next;
printf("学生信息如下:
\n");
while(x)
{
printf("姓名:
%s年龄:
%d分数:
%d\n",x->name,x->age,x->score);
x=x->next;
}
printf("\n");
}
st1*find(st1*head,intidex)
{
st1*p;
inti=1;
p=head->next;
while(p)
{
if(i{
p=p->next;
i++;
}
else
returnp;
}
returnp;
}
st1*insert(st1*head)
{
st1*newst,*p;
inti=1;
intindex;
printf("要插入的位置:
");
scanf("%d",&index);//所要插入第几位学生信息
p=head->next;
newst=(st1*)malloc(sizeof(st1));
printf("输入姓名:
");
scanf("%s",&newst->name);
printf("输入年龄:
");
scanf("%d",&newst->age);
printf("输入分数:
");
scanf("%d",&newst->score);
printf("输入学生信息完成\n\n");
if(1==index)
{
st1*q=head->next;
head->next=newst;
newst->next=q;
}
else
while(p)
{
if(i==(index-1))
{
st1*q=p->next;
p->next=newst;
newst->next=q;
}
p=p->next;
i++;
}
returnp;
}
voiddele(st1*head)
{
st1*p,*q;
inti=1;
intindex;
printf("输入删除第几位学生信息:
");
scanf("%d",&index);//所要删除第几位学生信息
p=head->next;
if(1==index)
{
p=head->next;
head->next=p->next;
free(p);
p=NULL;
}
else
while(p)
{
if(i==(index-1))
{
q=p->next;
p->next=q->next;
free(q);
}
p=p->next;
i++;
}
printf("第%d位学生信息已经删除\n",index);
}
voidchange(st1*head)
{
st1*p=NULL;
inta;
printf("输入修改第几位学生信息:
\n");
scanf("%d",&a);
p=find(head,a);//修改之前调用find函数找到该学生信息
printf("输入姓名:
");
scanf("%s",&p->name);
printf("输入年龄:
");
scanf("%d",&p->age);
printf("输入分数:
");
scanf("%d",&p->score);
printf("输入学生信息完成\n");
}
voidreverse(st1*head)
{
st1*p=head->next,*q;
head->next=NULL;
while(p!
=NULL)
{
q=p->next;
p->next=head->next;
head->next=p;
p=q;
}
print(head);//打印学生信息
}
voidsort(st1*head)
{
st1*p,*q;
intm;
inttemp;//交换score临时变量
inttemp1;//交换age临时变量
chartemp2[10];//交换name临时变量
printf("选择1.按成绩2.按年龄排序\n");
scanf("%d",&m);
switch(m)
{
case1:
for(p=head;p!
=NULL;p=p->next)
{
for(q=p->next;q!
=NULL;q=q->next)
{
if(p->score>q->score)
{
temp=q->score;
q->score=p->score;
p->score=temp;
temp1=q->age;
q->age=p->age;
p->age=temp1;
strcpy(temp2,q->name);
strcpy(q->name,p->name);
strcpy(p->name,temp2);
}
}
}
break;
case2:
for(p=head;p!
=NULL;p=p->next)
{
for(q=p->next;q!
=NULL;q=q->next)
{
if(p->age>q->age)
{
temp=q->score;
q->score=p->score;
p->score=temp;
temp1=q->age;
q->age=p->age;
p->age=temp1;
strcpy(temp2,q->name);
strcpy(q->name,p->name);
strcpy(p->name,temp2);
}
}
}
break;
}
}