数据结构单链表实现班级通讯录实验报告Word文件下载.docx
《数据结构单链表实现班级通讯录实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构单链表实现班级通讯录实验报告Word文件下载.docx(26页珍藏版)》请在冰点文库上搜索。
概要设计
2.1单链表结构
变量名
数据类型
描述
num
int
学号
name
char
姓名
sex
Int
性别
year
年
month
月
day
日
address
联系地址
tell
电话
qq
QQ
2.2系统结构图
详细设计
3.1单链表的编写
开发项目时,以单链表的形式来组织、封装一些常用的方法,以便提高代码的重用率,大大方便了代码的管理。
本系统创建了一个单链表:
list。
主要用来定义学生基本信息。
3.2定义单链表的程序
typedefstructlist
{
intyear,month,day,qq,num,sex;
chartel[20];
charname[10];
charaddress[100];
structlist*next;
}node,*link;
3.3操作函数的定义
3.3.1菜单输出函数voiddisplay()
3.3.2结果输入函数voidprint()
3.3.3插入信息函数voidins()
3.3.4删除数据函数voiddeletestu()
3.3.5信息查询函数voidsearchstu()
3.4增加学生信息
增加学生信息运行结果如图所示:
实现思想:
录入完一条信息后,会提示输入完毕,是否继续输入,Y继续输入,N便是回主菜单。
先申请一个学生的链表空间,然后输出提示输入相关信息。
由于考虑到班级人数一般不超过1000人,因此在输入时判断小于100或大于999的均是不合法的学号,需重新输入。
在输入性别时也作了限定,只能输入1或2,1代表男生,2代表女生。
信息输入完毕后,将指向list单链表的指针向后移动一个单位。
时间复杂度为O
(1)。
3.5删除学生信息
修改学生信息运行如图所示:
此时,输入您要删除的学生的学号即可,出现如下图所示:
在删除数据时,需要先判断此系统中有无记录,若无记录则提示系统中无学生信息,请先输入,此时程序将不向下执行。
否则提示输入要删除的学生的学号,在输入学号后,先判断学号是否合法,再判断系统中有无此学号,若无则提示系统中无此记录。
否则将删除该学号的学生信息。
时间复杂度为O(S)。
3.6查询学生信息
查询学生信息运行结果如图所示:
此时会提示输入您 要查找的学号,输入正确的学号,显示对应学号信息,结果如下图所示:
在查询数据时,需要先判断此系统中有无记录,若无记录则提示系统中无学生信息,请先输入,此时程序将不向下执行。
否则根据学号查询,需要先判断学号是否合法,然后判断系统中有无此学号,最后输出相应的信息。
时间复杂度为O(s)。
3.7查看全部学生信息
查看全部学生信息运行结果如图所示:
在查看全部学生数据时,需要先判断此系统中有无记录,若无记录则提示系统中无学生信息,请先输入,此时程序将不向下执行。
否则根据把系统中的全部信息以列表的形式输出。
3.8退出
选择0键退出系统,退出时会有相应该的提示,感谢您 使用本系统,并且Pressanykeytocontinue,按任意键退出。
调试分析
4.1添加学生信息
在实现添加记录时,首先是这要这样考虑,第一次输入和第二次输入的效果是不一样的。
当第一次输入需要用指针delptr把第一个结点记录下来,这样方便以后的删除,查询和浏览操作。
第二次输入时则不需要记录。
所以在第一次输入代码中加入一个全局开关变量,这样就保证了程序的稳定性。
并且在添加学生记录这段程序中,还需要进行一些相关的判断,来检查输入的数据是否合法,如果不合法需要用户重新输入数据。
4.2删除学生信息
在删除学生这一块,遇到了比较大的问题,就是在执行删除命令时,总出现错误,无论删除第几条数据,系统只删除第二条记录,并没有达到想要的效果。
经过了两个下午的研究,和查阅相关的资料,终于把这个问题解决了,最后的删除程序如下:
voiddeletestu()
intno,i=0;
cout<
<
"
请输入您要删除的学号:
;
cin>
>
no;
q=delptr;
if(no==q->
num)
{
delptr=q->
next;
deleteq;
i=1;
cout<
删除成功!
}
if(!
i)
while(q)
{
if(q->
next)
{
if(no==q->
next->
{
temp=q->
q->
next=q->
deletetemp;
i=1;
cout<
break;
}
}
else
break;
q=q->
}
if(!
无此学号!
}
4.3查询学生信息
查询这一块的程序,实现得比较简单,因为在前面插入记录程序段中已经做了铺垫,所以当执行查询时,用户输入学号,然后让指针回到表头,从头到尾查询一遍,如有相应的记录则直接显示出来,如果没有查到,则显示无此学号。
4.4查看全部学生信息
实现方法与查询学生信息大概一致,且稍微简单,如用户选择这项功能,指针回到表头ptr=delptr;
然后利用循环语句将系统中所有学生信息以列表的形式表现出来。
使用户清晰的了解全班的学生信息。
测试结果
5.1添加学生信息运行结果截图:
5.2删除学生信息运行结果截图:
5.3查询学生信息运行结果截图:
5.4查看全部学生信息运行结果截图:
5.4退出系统运行结果截图:
源程序附录
#include<
iostream>
usingnamespacestd;
linknewnode,ptr,delptr,q,temp;
//声明表结构指针
ints=0;
staticintputt=0;
//putt记录是否为第一个输入的元素,因为要记录头结点位置
voiddisplay()
endl<
endl;
**********<
班级通讯录管理系统>
**********"
\t1:
添加学生信息"
\t2;
删除学生信息"
\t3;
查询学生信息"
\t4;
查看全部学生信息"
\t0;
退出系统"
****************************************"
voidprint()
班级全部学生信息表>
ptr=delptr;
//让ptr回到表头
while(ptr!
=NULL)
{cout<
学号:
ptr->
num<
姓名:
name;
if(ptr->
sex==1)
cout<
\t性别:
男"
else
女"
\t出生日期:
year<
年"
month<
月"
day<
日"
联系地址:
address<
\t电话:
tel<
\tQQ:
qq<
ptr=ptr->
//ptr依序往后走访表
voidins()
intcsex;
if(putt==0)
请输入学生数据:
delptr=newnode;
//建立新结点
if(!
delptr){
[Error!
!
内存申请失败!
]"
exit
(1);
请输入学号:
cin>
delptr->
num;
while(delptr->
100||delptr->
num>
=999)
学号输入错误,请重新输入学号(100-999):
cin>
请输入姓名:
请输入性别(1男/2女):
sex;
sex!
=1&
&
delptr->
=2)
性别输入错误,请重新输入性别(1男/2女):
下面输入出生日期:
请输入年:
year;
1900||delptr->
year>
2010)
出生年份输入错误,请重新输入年份(1900-2010):
请输入月:
month;
1||delptr->
month>
12)
出生月份输入错误,请重新输入月份(1-12):
请输入日:
day;
day>
31)
{cout<
出生日期输入错误,请重新输入日期:
请输入联系地址:
address;
请输入电话:
tel;
请输入QQ:
qq;
delptr->
next=NULL;
ptr=delptr;
putt=1;
s++;
else
newnode=newnode;
newnode){
newnode->
while(newnode->
100||newnode->
newnode->
1900||newnode->
1||newnode->
newnode->
ptr->
next=newnode;
//把新结点加在表后面
//让ptr保持在表的最后面
{cout<
voidsearchstu()
//回到表头
intno,p=0;
请输入您要查找的学号:
while(no<
1||no>
1000)
您输入的学号不正确,请再次输入!
<
num==no)
name<
sex<
p=1;
break;
if(p==0)
您输入的学号不存在!
voidmain()
charkey,confirmkey;
while
(1)
display();
请选择操作(1-4),退出(0)"
key;
switch(key)
case'
0'
:
{cout<
感谢您使用本系统!
exit
(1);
1'
ins();
cout<
该生已输入完毕,是否继续输入?
(y/n)"
cin>
confirmkey;
while(confirmkey=='
y'
||confirmkey=='
Y'
)
{ins();
该生已输入完毕,是否继续输入(y/n)"
cin>
};
break;
2'
{deletestu();
};
3'
{searchstu();
4'
print();
收获及体会
四个星期的数据结构课程设计,从头到尾的实践和体验下来,对于我们来说学到的不仅是那些知识,更多的是团队和合作。
写到最后的收获及体会时感触颇深,也许学校安排的课程设计有着更深层的意义。
它不仅让我们综合那些理论知识来运用到设计和创新,还让我们知道了一个团队凝聚在一起所能发挥出的巨大潜能!
通过这次课程设计,使我们学到了一些以前没有学过的知识,使我们对数据结构程序设计有了更深层次的认识和理解,懂得了灵活运用。
在计算机飞速发展的今天,懂得一门计算机语言技术是非常必要的。
同时,我们也清醒的认识到,只要自己肯努力,愿意去付出劳动,就能够得到属于我们自己所期望的东西。
这次课程设计遇到的问题远比我们想象的多,没想到这项看起来很简单的课题却是需要非常多的耐心和精力,在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。
为了让自己的设计更加完善,查阅这方面的资料是非常必要的,同时也是必不可少的。
在这次课程设计中我们运用到了以前所学的专业课知识,如c++、数据结构等。
在设计的同时,我们还发现了自己的不足之处,对以前所学的知识理解的不够深刻、掌握的不够牢固。
而且即使感觉自己的理论上已经掌握,但运用到实践过程中仍有意想不到的困难,比如删除那一块的程序,经过一番努力才得以解决。
这也激发了我们今后努力学习的兴趣。
最后,在此由衷的向我们的指导老师李英梅表示感谢,是她的悉心指导和严格要求,才使我们的课程设计有了较为完善的一面,才有了我们能力的提高,并在老师的帮助下得到了充分的锻炼。
参考文献
[1]严蔚敏《数据结构》清华大学出版社2003年
[2]XX知道
[3]XX百科
[4]XX文库