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