链表实现学生信息管理Word格式.docx
《链表实现学生信息管理Word格式.docx》由会员分享,可在线阅读,更多相关《链表实现学生信息管理Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
(4)输入数字“3”进入删除信息功能模块。
程序提示并由用户输入学号,最终实现按照学号删除某个学生信息。
(5)输入数字“4”进入修改信息功能模块。
程序提示并由用户输入学号,最终实现按照学号修改某个学生信息。
(6)通过输入数字“0”使得程序结束。
(7)当用户执行浏览、插入、删除功能后,程序应继续提示用户通过数字键选择相应功能,直到用户输入数字“0”程序才结束。
3.实验编程指导
(1)可仿照本章单链表的定义形式,建立学生信息结点数据,并建立一个空的单链表。
(2)参考本章中单链表的算法描述和例题中的算法实现,在本程序中增加信息浏览、插入结点、删除结点、修改结点内容的算法实现函数。
(3)编写主函数,可通过在while循环结构中嵌入switch分支结构实现操作选择功能。
(4)完善插入、删除功能。
实现插入信息的录入、删除记录的定位等细节。
并完善用户操作界面,给出详细的操作提示。
5.实验报告要求
实验报告要求以word文件形式发到老师邮箱。
内容包括:
(1)报告封面包括实验名称、班级、姓名、学号以及实验完成日期。
(2)各程序模块名称及功能说明。
并绘制出主要功能函数的程序流程图。
(3)个人小结。
包括实验难点分析、进一步的工作、个人希望等。
(4)完整的程序清单。
各程序模块名称及功能说明:
主函数通过在while循环结构中嵌入switch分支结构实现操作选择功能。
scanning(head)函数:
通过头指针的输入,以每个指针的下个指针域是否为空位循环标志,按链表中的每一个单位输出数据。
insert(head)函数:
按输入的数据存储在一个NODE类型的指针里,若原来链表里没有元素,则将此作为第一个元素;
若原来的链表里有元素,则将该指针的next存储head->
next的地址,又将head->
next存储该指针的地址,返回head的首地址。
del(head)函数:
以输入学号为判断标准,在NODE型指针的next不为空的大循环中,建立两个相邻的NODE型的指针,若后一个指针指向的元素的学号与输入的相等,则将前一个指针的next赋为后指针的next,释放后指针所指地址的内容。
fix(head)函数:
以输入学号为判断标准,在NODE型指针的next不为空的大循环中,若存在某个元素的学号与输入的相等,则相应的将要修改的内容用新内容覆盖。
主要功能函数流程图:
insert(head)
scanning(head):
del(head):
Fix(head):
个人小结:
实验难点分析:
这个实验用的链表,若是前几天编可能会有疑惑,但做了课后的作业后,对链表也熟悉了,链表在第一个地方插入比顺序表简单。
难点与顺序表类似,也是在修改,删除的功能上。
进一步的工作:
在编译的过程中,出现了errorC1075说左侧的大括号“{”在匹配前遇到结束和errorC2601说本地函数非法,始终找不到错误,后来稀里糊涂地把函数位置换了换就又没错了,很不解,我觉得有必要再了解相关的错误原因。
个人希望:
希望能通过这个实验对单链表有更深地了解,能很熟练的运用它,同时我觉得对栈和队列还不是很熟悉,书上也不是很详细,我觉得自己有空应多看看类似的应用,以强化自己的能力。
源代码:
#include<
stdio.h>
string.h>
malloc.h>
structnode
{
intnumber;
charname[10];
charsex[5];
intclasses;
inttel;
structnode*next;
};
typedefstructnodeNODE;
voidscanning(NODE*head);
/*申明浏览函数*/
NODE*insert(NODE*head);
/*申明插入函数*/
voiddel(NODE*head);
/*申明删除函数*/
voidfix(NODE*head);
/*申明修改函数*/
intmain()
intchoice;
intflag=1;
NODE*head;
head=(NODE*)malloc(sizeof(NODE));
head->
next=NULL;
while(flag)
{
printf("
请选择功能:
\n1—信息浏览\n2—插入信息\n3—删除信息\n4-修改信息\n0—退出程序\n"
);
scanf("
%d"
&
choice);
switch(choice)
case1:
scanning(head);
break;
case2:
head=insert(head);
case3:
del(head);
case4:
fix(head);
case0:
flag=0;
break;
}
printf("
\n"
谢谢使用!
return0;
}
voidscanning(NODE*head)/*定义浏览函数*/
NODE*t;
t=head;
t=t->
next;
if(t==NULL)
无记录!
请先输入学生信息:
while(t!
=NULL)
学号:
%d\n"
t->
number);
姓名:
%s\n"
name);
性别:
sex);
班级:
classes);
联系方式:
tel);
t=t->
NODE*insert(NODE*head)/*定义插入函数*/
NODE*t,*p;
inta,b,c;
chare[10],f[5];
t=(NODE*)malloc(sizeof(NODE));
p=head;
if(p->
next==NULL)/*原本无元素*/
请输入学号:
scanf("
a);
请输入姓名:
%s"
e);
请输入性别:
f);
请输入班级:
b);
请输入号码:
c);
t->
number=a;
strcpy(t->
name,e);
sex,f);
classes=b;
tel=c;
p->
next=t;
else/*原本有元素*/
next=p->
returnhead;
voiddel(NODE*head)/*定义删除函数*/
intm;
NODE*s,*t;
s=head;
t=head->
请输入你要删除的同学的学号:
m);
if((t->
number)!
=m)
{
s=s->
t=t->
}
else
s->
next=t->
free(t);
break;
voidfix(NODE*head)/*定义修改函数*/
NODE*p,*t;
intm,q,z=1;
请输入你要修改的学生的学号:
p=p->
while(p!
if((p->
number)==m)
while(z)
printf("
你想要修改哪项数据?
\n1代表学号\n2代表姓名\n3代表性别\n4代表班级\n5代表联系方式\n(注意:
修改完毕请输入)\n"
q);
switch(q)
case1:
printf("
请输入修改后的学号!
scanf("
t->
p->
number=t->
number;
break;
请输入修改后的姓名!
strcpy(p->
name,t->
请输入修改的性别!
sex,t->
请输入修改的班级!
classes=t->
classes;
case5:
请输入修改后的联系方式!
scanf("
tel=t->
tel;
z=0;
}
p=p->