数据结构通讯录管理系统链表的实现.docx
《数据结构通讯录管理系统链表的实现.docx》由会员分享,可在线阅读,更多相关《数据结构通讯录管理系统链表的实现.docx(24页珍藏版)》请在冰豆网上搜索。
![数据结构通讯录管理系统链表的实现.docx](https://file1.bdocx.com/fileroot1/2022-12/1/77880f9b-0b6c-41a6-9599-f6f155d29f81/77880f9b-0b6c-41a6-9599-f6f155d29f811.gif)
数据结构通讯录管理系统链表的实现
数据结构通讯录管理系统链表的实现
数据结构课程设计实验课程名称)班110级计科(级专业班名姓学生10410901025号学
冯韵老师师指导教
至20122013日月9年学年第一学期20122
22
/1
数据结构通讯录管理系统链表的实现
《通讯录管理链表的实现》实验报告
学期学年第一2012至2013
名姓
别系
计科系
实验地点
机房综合楼4
学号
25号
年级、班
)110级计科(班
实验时间
日月2年20129
实验项目
通讯录管理链表的实现
=====================================概述第一章
系统分析第二章=====================================
概要设计第三章=====================================
=====================================详细设计第四章
运行与测试第五章=====================================
总结与心得第六章=====================================
22
/2
数据结构通讯录管理系统链表的实现
概述第一章
本课程设计的目的
以培养本课程设计可加深对课堂理论学习的理解,增强动手能力,学生合作的能力,为毕业设计作好实践环节上的准备。
通讯录系统是在它的主要任务是对个人信息进行管理,学校常见的计算机信息管理系统。
如学生信息的输入、查询、修改、增加、删除,迅速准确地完成各种学生信息的统计和查询。
通讯录管理系统是每一个用户管理通讯录的不可缺少的一个管理所以通讯录管,信息系统,它的内容对于用户的管理者来说是至关重要的理系统应该能够为每一个用户的管理者提供充足的信息和快捷的查询手计算,随着科学技术的不断提高段大大的方便用户合理的管理通讯录。
网上通讯工具的迅速发展其强大的功能已为人们深刻,机科学日渐成熟作为它已进入人类社会的各个领域并发挥着越来越重要的作用。
认识,具有着手工管理所,使用计算机对通讯录进行管理计算机应用的一部分,
检索迅速、查找方便、可靠性高、存储量大、保密无法比拟的优点如:
性好、寿命长、成本低等。
这些优点能够极大地提高通讯录管理的效率与先进科学技术接轨的重要条件。
也是用户理财的科学化、正规化管理,因此开发这样一套管理软件成为很有必要的事情对于我们即将计算机专业毕业的学员来说也是一次将计算机应用于现实管理的一次很有意义的实践活动。
开发的意义计算机已经成为我们学习和工作的得力助手使用其可方便的管理22
/3
数据结构通讯录管理系统链表的实现
它已经今天计算机的价格已经十分低廉性能却有了长足的进步。
通讯录
现在我国的通讯录管理水平还停留在纸介质的基础被应用于许多领域。
上这样的机制已经不能适应时代的发展因为它浪费了许多人力和物力在信息时代这种传统的管理方法必然被计算机为基础的信息管理所取代。
我作为一个计算机应用专业的毕业生希望可以在这方面有所贡献。
改革的总设计师邓小平同志说过“科学技术是第一生产力”我希望能用我所开发这一学的知识编制出一个实用的程序来帮助用户进行财务管理。
:
系统的好处大约有以下几点第一、可以存储大量的通讯录信息安全、高效第二、只需一档案录入员即可操作系统节省人力为将来用户上网做好准备第三、可以迅速查到所需通讯录信息。
万互年中国电信的调查报告显示我国的上网人数已达到1870跟据2003联网已经十分普及况且现在网上通讯已经出现本系统为用户将来的上网作了先期工作。
开发环境及实现技术
以上以上内存、1GCPU100以上、64M开发环境硬件系统奔腾中VisualBasic6.0软件系统或更高版本、Windows9x硬盘、光驱。
文版。
应用程序开发工具使目前Windows是Basic微软公司的Visual6.0提供了大量最为广泛的、易学易用的面向对象的开发工具。
VisualBasic的控件这些控件可用于设计界面和实现各种功能减少了编程人员的工作量也简化了界面设计过程从而有效的提高了应用程序的运行效率和可靠22
/4
数据结构通讯录管理系统链表的实现
性。
)通讯录结点的(2
(1)通讯录链表的建立本系统有分6个功能:
)通讯录链表)通讯录结点的查询(5(4插入(3)通讯录结点的删除)退出管理系统。
其主要利用结构类型,指针,数组,函数等的输出(6语言知识来实现C系统分析第二章
)54)删除)新建2)插入3)查询该通讯录主要分为六个模块:
1。
可以按照自己想要0-56)退出。
在开始菜单中对应的功能数字是输出操作的动作选择对应的数字实现相应的功能。
对于插入主要是按学号的)按学号查询升序来插入通讯者的信息。
在查找中分为四个查找方式:
1在删除中由于学号是主关键4)按地址查询。
)按姓名查询3)按号码查询2字,是唯一的,所以删除按学号来删除会比较方便。
而输出是按一个指则结束输出。
haed,按循环来输出直到p=NULL指向头指针针p技术难点分析主要内容:
本课题在设计过程中所遇到的技术难点及在本次试验中我觉得我遇见了一些技术上的难点,刚开始解决方法。
主要要用到链表和结构体。
要用到数据结构中的知识,是通讯录的建立,在通讯录的插入的时候主要是用到学号的升值法插入,在此过程中要申在通讯录的查询插在两结点之间。
n,而且将要插入结点pm请结点和.3)..)按学号查找的函数;2)按姓名查找的函数;1当中主要分为四类:
按住址查找的函数。
其实原理一样,只是使用.按电话查找的函数;4)()函数匹配出和要查找的通讯者信息相同的结点,并且将其所strcmp有的信息输出。
在删除函数我开始觉得删除的时候很困难,后来我是按
22
/5
数据结构通讯录管理系统链表的实现
学号删除的,因为学号是关键字,主要注意在删除后对一些结点需要改q=q->next。
p=p->next;p->next=p->next->next变;free(q);如果没找到则
概要设计第三章
各模块功能的分析:
)主函数:
可让用户选择用系统的哪个功能,从而去连接到相应的子1(函数;
)写入数据:
让用户输入通讯录里的内容,并将内容保存好;
(2)读取数据:
显示通讯录里已保存的数据;(3)追加数据:
让用户在通讯录原有数据中,再加上新的数据;(4(5)查找数据:
通过用户输入需要找的名字来找到相关资料;)删除数据:
让用户删除想要删除的资料;(6总体框架:
通讯录管理系统删除浏览数据输入数据添加数据修改查找
结构框图:
变量名
数据类型
中文释义
22
/6
数据结构通讯录管理系统链表的实现
numnamesexphoneaddr
主函数框图主函数设计要求简洁,只提供部分提示语和函数的调用【程序】开始显示一系列功能选项n是否是n输入,判断的值调用各功能模块函数根据n结束建立通讯录链表的设计1.要建立链表,首先要生成结点,因此,尾插法建立链表,算法描述如下:
)使链表的头尾指针(1
int
编号
char
姓名
char
性别
int
电话
char
地址
n
?
0~5
第四章详细设计;
(也是尾结点)指向新生成的头结点、headreal
22
/7
数据结构通讯录管理系统链表的实现
;0(假)
(2)置结束标志为(结束标志不为真))while(3{
指向新生成的结点;P读入一个通讯者数据至新结点的数据域;
将新结点链到尾结点之后;使尾指针指向新结点;
提示:
是否结束建表,读入一个结束标志;
}
NULL.)尾结点指针域置空值(4具体算法实现如下:
/******************************/
*/用尾插法建立通讯录链表函数/*/*****************************/
linklistcreatelist(void)
尾插法建立带头结点通讯录链//{
表算法linklisthead=(listnode*)malloc(sizeof(listnode));
listnode*p,*rear;
0//结束标志置intflag=0;
尾指针初始指向头结点//rear=head;
while(flag==0)
申请新结点//{p=(listnode*)malloc(sizeof(listnode));
(31)\n);地址(11)姓名(8)性别电话牰湩晴尨编号(4)
printf(----------------------------------------------------------------\n);
scanf(%s%s%s%s%s,p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
//新结点连接到尾结点之后rear->next=p;
尾指针指向新结点//rear=p;
(1/0):
);牰湩晴尨结束建表吗?
//读入一个标志数据scanf(%d,&flag);
}
终端结点指针域置空//rear->next=NULL;
//返回链表头指针returnhead;
}
2.通信者信息的插入链表结点的插入,是要求将一个通讯者数据结点按其编号的次序插入有序通讯录表的相应位置,以保持通讯录表的有序性,插入结点的基
22
/8
数据结构通讯录管理系统链表的实现
分别指向当前刚访问过的结点和和p2本思想是:
使用两个指针变量p1下一个待访问的结点,循环顺序查找链表,寻找插入结点的位置,其中p1指向待插入位置的前一个结点。
算法描述如下:
p2指向链表的第一个结点;1)用p1指向原链表头结点,(While(p2!
=NULL&&p2->data.numdata.num)
2)({
//p1指向刚访问过的结点;p1=p2;
指向表的下一个结点;//p2p2=p2->next;
}
具体实现如下:
(3)插入新结点。
/********************************/
*/
/*在有序链表head中插入结点
/********************************/
voidInsertNode(LinkListhead,ListNode*p)
{
ListNode*p1,*p2;
p1=head;
p2=p1->next;
while(p2!
=NULL&&strcmp(p2->data.num,p->data.num)<0)
{
//p1指向刚访问过的结点p1=p2;
指向表的下一个结点//p2p2=p2->next;
}
p所指向的结点//插入p1->next=p;
连接表中剩余部分//p->next=p2;
}
3.在有序链表中查找指定结点在有序表中查找指定结点的算法是比较简单的,其基本思路是:
首先输入要查找的通讯者的编号或姓名,从表头顺序访问表中结点。
成功返回一个指向查找到的通讯者信息的结点;若失败,则返回一个空指针NULL.
值当按编号查找时,如果需要查找的通讯者编号不在表中,则不一定需要循环比较到表尾,因表是按编号递增有序的;按姓名查找时,则要循环比较到表尾,才能确定查不到的情况。
因此,查找算法实现如下:
22
/9
数据结构通讯录管理系统链表的实现
/********************************/
*/
/*通讯录链表上的查找
/********************************/
listnode*listfind(linklisthead)
{
listnode*p;
charnum[5];
charname[9];
intxz;
printf(=====================\n);
\n);printf(.按编号查询
\n);按姓名查询printf(.printf(=====================\n);
);请选择:
printf(
//假定通讯录表带头结点p=head->next;
scanf(%d,&xz);
if(xz==1){
:
);牰湩晴尨请输入要查找者的编号
scanf(%s,num);
while(p&&strcmp(p->data.num,num)<0)
p=p->next;
if(p==NULL||strcmp(p->data.num,num)>0)
//没有查到要查找的通讯者p=NULL;
}
else
if(xz==2){
);请输入要查找者的姓名:
牰湩晴尨scanf(%s,name);
while(p&&strcmp(p->data.name,name)!
=0)
p=p->next;
}
returnp;
}
通讯者记录的删除4.查询到要删除的链表上结点的删除是比较简单的,先调用查询函数,结点,删除结点即可。
其算法如下:
/********************************/
*/
通讯录链表上结点的删除/*
22
/10
数据结构通讯录管理系统链表的实现
/********************************/
voidDelNode(LinkListhead)
{
charjx;
ListNode*p,*q;
//调用查找函数p=ListFind(head);
if(p==NULL)
{
\n);没有查到要删除的通讯者!
printf(
return;
}
:
\n);y/n)printf(真的要删除该结点吗?
(
scanf(%c,&jx);
if(jx=='y'||jx=='Y'){
q=head;
while(q!
=NULL&&q->next!
=p)
q=q->next;
删除结点//q->next=p->next;
//释放被删除的结点空间free(p);
!
\n);printf(通迅者已被删除}
5.通讯录链表的输出通讯录链表的输出相对来说比较简单,只要将表头指针赋给一个为空为止。
因此,其输出向后扫描,直至表尾,pp,然后用p指针变量链表算法如下:
/********************************/
*/通讯录链表上结点的删除/*
/********************************/
voidprintlist(linklisthead)
{
listnode*p;
指向链表开始结点因为链表带头接点,使P//p=head->next;
\n);
址地联系电话姓别名牰湩晴尨编号姓
printf(-----------------------------------------------------------------------\n);
while(p!
=NULL)
{
printf(%s,%s,%s,%s,%s\n,p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
printf(-------------------------------------------------------\n);
p=p->next;
22
/11
数据结构通讯录管理系统链表的实现}
}
第五章运行与测试
1.通讯录链表的建立
2、通讯录结点的插入22
/12
数据结构通讯录管理系统链表的实现
通讯录结点的查询3.
22
/13
数据结构通讯录管理系统链表的实现通讯录结点的删除4.
5.通讯录链表的输出
退出管理系统6.22
/14
数据结构通讯录管理系统链表的实现
22
/15
数据结构通讯录管理系统链表的实现
附录(实验源代码)/******************************/
main2.c*/主控菜单处理测试程序/*/*****************************/
#include
#include
#include
通讯录//typedefstruct{
结点类型charnum[5];
编号//charname[9];
姓名//sex[3];char
//性别charphone[13];
//电话addr[31];char
//地址}datatype;
结点//typedefstructnode{
类型定义结//data;datatype
点数据域结点//structnode*next;
指针域}listnode;
typedeflistnode*linklist;
linklisthead;
listnode*p;
//函数说明intmenu_select();
linklistcreatelist(void);
voidinsertnode(linklisthead,listnode*p);
listnode*listfind(linklisthead);
voiddelnode(linklisthead);
voidprintlist(linklisthead);
主函数//voidmain()
{
for(;;){
switch(menu_select())
{
case1:
22
/16
数据结构通讯录管理系统链表的实现
printf(***************************\n);
*\n);通讯录链表的建立printf(*
printf(****************************\n);
head=createlist();
break;
case2:
printf(***************************\n);
*\n);通讯者信息的添加printf(*
printf(******************************************\n);
(31)\n);(11)地址(8)性别电话牰湩晴尨编号(4)姓名printf(*******************************************\n);
p=(listnode*)malloc(sizeof(listnode));
scanf(%s%s%s%s%s,p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
insertnode(head,p);
break;
case3:
printf(*************************************\n);
*\n);printf(*通讯录信息的查询
printf(***************************************\n);
p=listfind(head);
if(p!
=NULL){
\n);址联系电话地姓名性别牰湩晴尨编号
printf(----------------------------------------------------------------------------------\n);
printf(%s,%s,%s,%s,%s\n,p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
printf(----------------------------------------------------------------------------------\n);
}
else
\n);牰湩晴尨没查到要查询的通讯者!
break;
case4:
printf(************************************\n);
*\n);通讯录信息的删除printf(*
printf(*************************************\n);
delnode(head);
break;
case5:
printf(************************************\n);
*\n);通讯录链表的输出printf(*
printf(*************************************\n);
printlist(head);
break;
case0:
22
/17
数据结构通讯录管理系统链表的实现
\n);见!
printf(\再
return;
}
}
}
/*********************/
*//*菜单选择函数程序/*******************/
intmenu_select()
{
intsn;
\n);通讯录管理系统printf(
printf(============================\n);
\n);通讯录链表的建立1.printf(
\n);通讯录结点的插入2.printf(
\n);通讯录结点的查询3.printf(
\n);通讯录结点的删除4.printf(
\n);通讯录链表的输出5.printf(
\n);0.退出管理系统printf(
printf(================