数据结构 利用单链表实现学生基本信息管理 课程设计 实验报告.docx
- 文档编号:7391076
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:20
- 大小:236.49KB
数据结构 利用单链表实现学生基本信息管理 课程设计 实验报告.docx
《数据结构 利用单链表实现学生基本信息管理 课程设计 实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构 利用单链表实现学生基本信息管理 课程设计 实验报告.docx(20页珍藏版)》请在冰豆网上搜索。
数据结构利用单链表实现学生基本信息管理课程设计实验报告
数据结构课程设计
设计题目:
利用单链表实现学生基本信息管理
课题名称
利用单链表实现学生基本信息管理
院系
年级专业
学号
姓名
成绩
课题设计
目的与
设计意义
课题设计目的:
(1)学会单链表结点的定义
(2)掌握单链表的基本运算,熟悉对单链表的一些基本操作和具体函数的定义。
(3)加深对链表的理解,逐步培养解决实际问题的编程能力
(4)创建一个初始链表,通过调用定义的基本操作函数来实现单链表上的插入、删除元素等操作。
调试程序并对相应的输出做出分析;修改输入数据,预期输出并验证输出的结果。
加深对有关
意义:
一般来讲,课程设计教学实验复杂一些,深度更广并且更加接近实用.通过课程设计的综合训练,培养学生实际分析问题,编程和动手能力,使学生对数据结构进行更深一层的了解,培养同学们对学习数据结构这门课程的兴趣,让同学们学会如何去查找资料和整合处理这些资料的能力,也为以后的大学毕业设计论文打下了一个初步的基础.这些课程设计都是比较难的,要分成几个小项目,几个学生一组,培养团队协作精神.最终帮助学生系统掌握课程的主要内容,更好地完成教学任务.基本掌握面向过程程序设计的基本思路和方法;
(2)达到熟练掌握数据结构的基本知识和技能;(3)能够利用所学的基本知识和技能,解决简单的程序设计问题.
指导教师:
年月日
一:
课程设计目的和意义
1、课程设计目的:
(1)学会单链表结点的定义
(2)掌握单链表的基本运算,熟悉对单链表的一些基本操作和具体函数的定义。
(3)加深对链表的理解,逐步培养解决实际问题的编程能力
(4)创建一个初始链表,通过调用定义的基本操作函数来实现单链表上的插入、删除元素等操作。
调试程序并对相应的输出做出分析;修改输入数据,预期输出并验证输出的结果。
加深对有关
2、课程设计意义:
一般来讲,课程设计教学实验复杂一些,深度更广并且更加接近实用.通过课程设计的综合训练,培养学生实际分析问题,编程和动手能力,使学生对数据结构进行更深一层的了解,培养同学们对学习数据结构这门课程的兴趣,让同学们学会如何去查找资料和整合处理这些资料的能力,也为以后的大学毕业设计论文打下了一个初步的基础.这些课程设计都是比较难的,要分成几个小项目,几个学生一组,培养团队协作精神.最终帮助学生系统掌握课程的主要内容,更好地完成教学任务.基本掌握面向过程程序设计的基本思路和方法;
(2)达到熟练掌握数据结构的基本知识和技能;(3)能够利用所学的基本知识和技能,解决简单的程序设计问题.
二:
需求分析与要求:
1、程序功能:
该系统实现对学生的基本信息的管理,其中包括学生的学号、姓名、性别、年龄、身份证号、家庭住址、联系电话、总成绩等。
2、基本要求:
1.要求利用C语言面向过程的编程思想来完成系统的设计;
2.突出C语言的函数特征,以多个函数实现每一个子功能;
3.画出功能模块图;
4.进行简单界面设计,能够实现友好的交互
5.具有清晰的程序流程图和数据结构的详细定义;
6.熟练掌握C语言对文件的各种操作。
3、功能要求:
(1)信息录入功能:
主要是输入和记录学生的基本信息,包括学生的学号、姓名,性别、年龄、身份证号、家庭住址、联系电话、总成绩等。
(2)查询功能:
通过输入学生的学号,找到该学生的所有信息。
(3)插入功能:
用于实现学生信息的插入。
(4)删除功能:
用于实现学生信息的删除。
(5)输出功能:
输出所有学生的基本信息。
4、说明:
(1)功能各方面越完善越好
(2)自定义的数据结构使用数组,链表等,然后根据不同的数据结构,设计不同的排序,查找算法。
其中,排序算法至少有两种,可以使用多种数据结构来存放数据,然后在其上使用不同的排序算法。
(3)若用数组,必须动态分配空间(文本文件中最好有一行表示学生人数)
5、输入输出的形式:
本系统是一个学生成绩管理系统,采用VC++6.0编译器作为开发环境,这个环境是我们在学习C++的平台。
输入数据类型主要是char、int等数据类型,输入内容包括:
学生的学号、姓名、性别、年龄、身份证号、家庭住址、联系电话、总成绩等。
学号、姓名、性别,年龄,身份证号和电话号码。
用户在输入学生数据时要保证输入数据格式的正确性,系统不会自动检测输入的数据是否正确,输出形式与输入形式类似。
6、开发环境:
VisualC++不仅仅是是一个C++编译器,而是一个基于Windows操作系统的可视化集成开发环境IDE,这种环境开发出来的软件稳定性好、可移植性强,可以编制各种各样的Windows应用程序。
三、概要设计:
1、先编入系统所需的库函数和需要宏定义的变量以及结构体的定义,从而使程序可运行。
#include
#definemaxsize100
typedefstruct
{
intnum;//学号
charname[maxsize];//姓名
charsex[maxsize];//性别
charad[maxsize];//年龄
charadi[maxsize];//身份证号
charadr[maxsize];//家庭住址
chartel[maxsize];//联系电话
floatscore;//总成绩
}st;
typedefstructnode
{
stdata[maxsize];
structnode*next;
}list;
2、Main()函数的设计
在main()函数中主要运用switch()-case选择判断语句来调用相关功能模块。
系统的运行是在一个永远重复循环里进行的,只有在主界面并选择“退出”时,才会跳出永真循环,并退出程序。
3、主界面的设计
主界面:
在此界面用户可以选择要操作的选项,回车之后即可进入相关的页面进行操作,所有操作均有提示语,比较人性化的管理,易懂,简单。
在主界面中包括:
1、建立学生的基本信息2、查找某学生信息3、删除某学生有关的基本信息4、插入某学生的基本信息5、输出所有学生的基本信息6、退出等全部的功能。
之所以设计这么一个主界面,一是因为能使用户对程序操作的流程更加清晰简明,二是保证了用户同时只能对一个文件进行操作系统的要求,保证了系统不会打开文件紊乱或者出现致命的错误。
4、以下是函数声明:
list*create()函数功能:
输入学生信息表,建立学生信息库。
list*insert(list*h)函数功能:
插入某学生的所有相关信息。
list*reaserch(list*h)函数功能:
利用通过学号查找某学生的所有信息。
list*delet(list*h)函数功能:
利用通过学号查找某学生的所有信息病删除掉。
voidoutput(list*h)函数功能:
输出所有学生的所有信息。
四、模块图:
五、详细设计:
1、先编入系统所需的库函数和需要宏定义的变量以及结构体的定义,从而使程序可运行。
2、建立main函数大致构建在算法的过程当中所需要调用的一些函数以及利用switch—case和while循环构造一个可以永远重复调用的环境,除非用户终止循环也就退出了系统了。
并且为了界面的友好化,可以利用printf()函数输出一些来美化界面的字和提示语。
具体的函数如下
voidmain()
{
inti,j=1;
list*p;
while(j)
{
printf("-----------------------------------\n");
printf("|学生信息管理|\n");
printf("|__________________|\n");
printf("|1.登记学生信息|\n");
printf("|2.查询学生信息|\n");
printf("|3.插入学生信息|\n");
printf("|4.删除学生信息|\n");
printf("|5.输出所有学生信息|\n");
printf("------------------------------------\n");
printf("请输入你的选择:
\n");
scanf("%d",&i);
switch(i)
{
case1:
p=create();break;
case2:
p=reaserch(p);break;
case3:
p=insert(p);break;
case4:
p=delet(p);break;
case5:
output(p);break;
default:
printf("选择错误,重新开始!
\n");
}
printf("\t0:
退出\n\t1继续:
");
scanf("%d",&j);
}
}
3、建立单链表,储存学生信息。
首先是将建立的链表初始化,并在初始化以后利用printf()函数输出接下来用户接下来要做事情的一些指令即提示,目的是使界面友好化。
list*create()
{
list*p,*r;
inti,n;
head=(list*)malloc(sizeof(list));
head->next=error;
r=head;
printf("请输入学生人数:
\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
p=(list*)malloc(sizeof(list));
printf("输入学生的学号\t姓名\t性别\t年龄\t身份证号\t家庭住址\t联系电话\t总成绩:
\n");
scanf("%d%s%s%s%s%s%s%.2f",&p->data[i].num,&p->data[i].name,&p->data[i].sex,
&p->data[i].ad,&p->data[i].adi,&p->data[i].adr,&p->data[i].tel,&p->data[i].score);
p->next=error;
r->next=p;
r=r->next;
}
return(head);
}
4、根据界面的提示信息,调用不同的函数,从而实现不同的算法功能,插入函数功能是用来插入某个学生的相关信息,具体算法如下,具体操作根据提示:
list*insert(list*h)
{
list*p,*q,*r,*head;
head=h;
r=h;
p=h->next;
q=(list*)malloc(sizeof(list));
printf("输入待插入学生的学号\t姓名\t性别\t年龄\t身份证号\t家庭住址\t联系电话\t总成绩:
\n");
scanf("%d%s%s%s%s%s%s%.2f",&q->data->name,&q->data->sex,&q->data->ad,&q->data->adi
&q->data->adr,&q->data->tel,&q->data->score);
q->next=error;
while(p!
=error)
{r=p;
p=p->next;
}
r->next=q;
r=r->next;
return(head);
}
5、查找函数式为了查找某学生信息时节约时间而设计的,从而实现对该学生信息的管理,输入学生的学号即可,操作时有提示信息,具体算法如下:
list*reaserch(list*h)
{
intk;
list*p;
p=h->next;
printf("输入要查找学生的学号:
\n");
scanf("%d",&k);
while(p&&p->data->num!
=k)
p=p->next;
if(p)
{
printf("学号\t姓名\t性别\t年龄\t身份证号\t家庭住址\t联系电话\t总成绩\n");
printf("%d\t%s\t%s\t%s\t%s\t%s\t%s\t%.2f\n",
p->data->num,p->data->name,p->data->sex,p->data->ad,
p->data->adi,p->data->adr,p->data->tel,p->data->score);
returnp;
}
else
{
printf("没找到!
\n");
returnNULL;
}
}
6、若要删除某学生的所有信息即可调用删除函数,删除时根据学生的学号可找到该学生的所有信息,并对该学生所有信息进行删除。
list*delet(list*h)
{
intk;
list*p,*q;
q=h;
p=h->next;
printf("请输入待删除学生的学号:
\n");
scanf("%d",&k);
while(p&&p->data->num!
=k)
{
q=p;
p=p->next;
}
if(p)
{
q->next=p->next;
free(p);
}
else
printf("没有这个学生信息,无法删除!
\n");
return(h);
}
7、输出函数式对所有学生的所有信息进行输出。
voidoutput(list*h)
{
list*p;
p=h->next;
while(p!
=error)
{
printf("学号\t姓名\t性别\t年龄\t身份证号\t家庭住址\t联系电话\t总成绩\n");
printf("%d\t%s\t%s\t%s\t%s\t%s\t%s\t%.2f\n",
p->data->num,p->data->name,p->data->sex,p->data->ad,
p->data->adi,p->data->adr,p->data->tel,p->data->score);
p=p->next;
}
}
六、运行结果与分析:
1、主界面(图6.1)
图6.1主界面
2.建立学生信息表(图6.2)
图6.2建立信息表
3、查询某学生的所有信息。
(图6.3)
图6.3查询学生信息
4.插入学生信息。
(插入前如图6.4-1。
插入后如图6.4-2)
图6.4-1插入前
图6.4-2插入后
5、删除某学生的所有信息。
(删除前如图6.5-1,删除后如图6.5-2)
图6.5-1删除前
图6.5-2删除后
七、总结:
首先,经过这么长时间的编程及报告总结,我对C语言这门学科有了新的认识,感觉自己真的收获了很多!
要想编写一个准确、高效并有使用价值的程序,一定先要对课本知识熟悉,还要掌握必要的上机操作能力,写程序其实很容易而关键在于调试程序。
这次设计,让我重新掌握了C语言,而且还得到了用C语言解决实际问题的宝贵经验。
其次,通过此次编程我也发现了自己在学习中的错误和不足,复习了以前学过的知识。
同时也学到了一些没学过的知识,让我从中收益非浅!
更重要的是培养了独立思考问题和解决问题的能力,熟悉了一些基本操作和解决问题的方法!
第三,此次课程设计之初遇到了许多问题,我深刻体会到老师发挥的重要作用,在匆忙的学习中C语言程序对我们来说还不熟练,但在老师的帮助下我学会了如何掌握编写的思想,如何查找系统没有提示的错误,最后终于在一遍又一遍地把程序搞定,体会到原来编程也挺有意思的快感.我想没有老师的帮助我很难在短期内把程序设计做的这样好,在此特地感谢老师的帮助。
编完此程序后,我体会到学C语言不能死记硬背,一定要灵活的使用才行。
在编写程序过程中我遇到了不少问题。
也学到了不少东西。
经过两个星期的上机实践学习,使我对C语言有了更进一步的认识和了解,要想学好它重在实践,要不断的上机操作才能更好地学好C语言。
从中又发现我对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,对C语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。
在学习当中,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,以后在学习过程中,我会更加注视实践操作,使自己更好地学好计算机。
通过这次课程设计我认识了自己,学会怎样利用C语言的函数,数组,关键字来设计自己所需要程序等的收获即有了深刻的认识,对我今后的学习以及将来走向工作岗位打下了稳固的基础。
最后,非常感谢编程过程中老师的帮助和教诲。
八:
源代码
#include
#definemaxsize100
#defineerror0
typedefstruct
{
intnum;//学号
charname[maxsize];//姓名
charsex[maxsize];//性别
charad[maxsize];//年龄
charadi[maxsize];//身份证号
charadr[maxsize];//家庭住址
chartel[maxsize];//联系电话
floatscore;//总成绩
}st;
typedefstructnode
{
stdata[maxsize];
structnode*next;
}list;
list*head,*p;
list*create()
{
list*p,*r;
inti,n;
head=(list*)malloc(sizeof(list));
head->next=error;
r=head;
printf("请输入学生人数:
\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
p=(list*)malloc(sizeof(list));
printf("输入学生的学号\t姓名\t性别\t年龄\t身份证号\t家庭住址\t联系电话\t总成绩:
\n");
scanf("%d%s%s%s%s%s%s%.2f",&p->data[i].num,&p->data[i].name,&p->data[i].sex,
&p->data[i].ad,&p->data[i].adi,&p->data[i].adr,&p->data[i].tel,&p->data[i].score);
p->next=error;
r->next=p;
r=r->next;
}
return(head);
}
list*insert(list*h)
{
list*p,*q,*r,*head;
head=h;
r=h;
p=h->next;
q=(list*)malloc(sizeof(list));
printf("输入待插入学生的学号\t姓名\t性别\t年龄\t身份证号\t家庭住址\t联系电话\t总成绩:
\n");
scanf("%d%s%s%s%s%s%s%.2f",&q->data->name,&q->data->sex,&q->data->ad,&q->data->adi
&q->data->adr,&q->data->tel,&q->data->score);
q->next=error;
while(p!
=error)
{r=p;
p=p->next;
}
r->next=q;
r=r->next;
return(head);
}
list*reaserch(list*h)
{
intk;
list*p;
p=h->next;
printf("输入要查找学生的学号:
\n");
scanf("%d",&k);
while(p&&p->data->num!
=k)
p=p->next;
if(p)
{
printf("学号\t姓名\t性别\t年龄\t身份证号\t家庭住址\t联系电话\t总成绩\n");
printf("%d\t%s\t%s\t%s\t%s\t%s\t%s\t%.2f\n",
p->data->num,p->data->name,p->data->sex,p->data->ad,
p->data->adi,p->data->adr,p->data->tel,p->data->score);
returnp;
}
else
{
printf("没找到!
\n");
returnNULL;
}
}
list*delet(list*h)
{
intk;
list*p,*q;
q=h;
p=h->next;
printf("请输入待删除学生的学号:
\n");
scanf("%d",&k);
while(p&&p->data->num!
=k)
{
q=p;
p=p->next;
}
if(p)
{
q->next=p->next;
free(p);
}
else
printf("没有这个学生信息,无法删除!
\n");
return(h);
}
voidoutput(list*h)
{
list*p;
p=h->next;
while(p!
=error)
{
printf("学号\t姓名\t性别\t年龄\t身份证号\t家庭住址\t联系电话\t总成绩\n");
printf("%d\t%s\t%s\t%s\t%s\t%s\t%s\t%.2f\n",
p->data->num,p->data->name,p->data->sex,p->data->ad,
p->data->adi,p->data->adr,p->data->tel,p->data->score);
p=p->next;
}
}
intmain()
{
inti,j=1;
list*p;
while(j)
{
printf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 利用单链表实现学生基本信息管理 课程设计 实验报告 利用 单链表 实现 学生 基本信息 管理 实验 报告