通讯录管理系统分析

上传人:jiups****uk12 文档编号:39263779 上传时间:2018-05-13 格式:DOC 页数:21 大小:200KB
返回 下载 相关 举报
通讯录管理系统分析_第1页
第1页 / 共21页
通讯录管理系统分析_第2页
第2页 / 共21页
通讯录管理系统分析_第3页
第3页 / 共21页
通讯录管理系统分析_第4页
第4页 / 共21页
通讯录管理系统分析_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《通讯录管理系统分析》由会员分享,可在线阅读,更多相关《通讯录管理系统分析(21页珍藏版)》请在金锄头文库上搜索。

1、 通讯录管理系统分析通讯录管理系统分析一、问题描述一、问题描述1题目内容:使用有关单链表的操作来实现通讯录信息系统的管理。2基本要求:首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。这几种操作功能包括单通讯录链表的建立,通讯者的插入,通讯者的删除,通讯者的查询,通讯录表的输出,通讯者人数的统计以及按通讯者编号排序等。3实验目的:掌握线性表这一数据结构中最简单、最常用的一种线性结构既线性表的顺序存储结构。4数据测试:见(七测试结果)5完成人员:郭湫钍完成日期:2011-1-4二、需求分析二、需求分析1本程序的功能包括单通讯录链表的建立,通讯录的插入,通讯者的删除,通讯

2、者的查询,通讯录表的输出,通讯者人数的统计以及按通讯者编号排序等。2程序运行后显现提示信息,等候用户输入 07 以进入相应的1操作功能。3用户输入数据完毕,程序将输出运行结束。4测试数据应为通讯者的编号、姓名、性别、联系电话、地址。三、概要设计三、概要设计1带头结点的单链表抽象数据类型定义为:ADT hlink_list数据集合 K:K=k1,k2,kn,n0,K 中的元素是 DataType 类型;数据关系 R:R=rr=|i=1,2,n-1。操作集合:(1)LinkList CreateList(void) 建立一个带头结点的通讯录单链表;(2)void InserNode(LinkLis

3、t head ,ListNode *p) 在带头结点的通讯录链表中插入结点;(3)ListNode *ListFind(LinkList head) 在带头结点的通讯录链表中查找结点;(4)void DelNode(LinkList head) 在带头结点的通讯录链表中删除结点;(5)void PrintList(LinkList head) 输出带头结点的通讯录链表中各2个结点的值;(6)void Bubblesort(LinkList head) 将带头结点的通讯录链表中各个结点按通讯者编号排序。ADT hlink_list;2见图3见图3四、详细设计四、详细设计1元素类型,结点类型,指针

4、类型typedef struct /通讯录结点类型int num; /编号char name9; /姓名char sex3; /性别char phone13; /电话char addr31; /地址DataType; typedef struct node /结点类型定义4DataType data; /结点数据域struct node *next; /结点指针域ListNode;typedef ListNode *LinkList;LinkList head; /定义指向单链表的头指针ListNode *p; /定义一个指向结点的指针变量int n=0;int person10;2部分基本操

5、作的伪码算法如下:int menu_select() / /菜单选择函数程序int sn;printf(“ 通讯录管理系统n“);printf(“=n“);printf(“ 1 通讯录链表的建立n“);printf(“ 2 通讯录结点的插入n“);printf(“ 3 通讯录结点的查询n“);printf(“ 4 通讯录结点的删除n“);printf(“ 5 通讯录链表的输出n“);5printf(“ 6 通讯录链表的人数n“);printf(“ 7 按通讯者编号排序n“);printf(“ 0 退出管理系统n“);printf(“=n“);printf(“ 请选择 0-7:“);for(;)

6、scanf(“%d“,if(sn7)printf(“nt 输入错误,重选 0-7:“);elsebreak;return sn;LinkList CreateList(void) / /尾插法建立带头结点的通讯录链表算法LinkList head=new ListNode; /申请头结点ListNode *p,*rear;int flag=0; /结束标志置 06rear=head; /尾指针初始指向头结点while(flag=0) p=(ListNode *)malloc(sizeof(ListNode); /申请新结点printf(“编号 姓名(8) 性别(2) 电话(11) 地址(31)

7、n“);printf(“-n“);scanf(“%d%s%s%s%s“,n+;rear-next=p; /新结点连接到尾结点之后rear=p; /尾指针指向新结点printf(“结束建表吗?(1/0):“);scanf(“%d“, /读入一个标志数据rear-next=NULL; /终端结点指针域置空return head; /返回链表头指针void InsertNode(LinkList head,ListNode *p) / /在通讯录链表 head 中插入结点7ListNode *p1, *p2;p1=head;p2=p1-next;while(p2!=NULL /p1 指向刚访问过的结

8、点p2=p2-next; /p2 指向表的下一个结点 p1-next=p; /插入 p 所指向的结点n+;p-next=p2; /连接表中剩余部分ListNode *ListFind(LinkList head) / /有序通讯链表的查找ListNode *p;int num;char name9;int xz;printf(“=n“);printf(“1.按编号查询 n“);8printf(“2.按姓名查询 n“);printf(“=n“);printf(“ 请 选 择 : “);p=head-next; /假定通讯录表带头结点scanf(“%d“,if(xz=1)printf(“请输入要查

9、找者的编号:“);scanf(“%d“,while(p if(p=NULL | p-data.numnum)p=NULL; /没有查到要查找的通讯者elseif(xz=2) printf(“请输入要查找者的姓名:“);scanf(“%s“,name);while(p return p;9void DelNode(LinkList head) / /通讯录链表上结点的删除char jx;ListNode *p,*q;p=ListFind(head); /调用查找函数if(p=NULL)printf(“没有查到要删除的通讯者!n“);return;printf(“真的要删除该节点吗?(1/0):“

10、);scanf(“%d“,if(jx=1)q=head;while(q!=NULL q-next=p-next; /删除结点free(p); /释放被删除的结点空间n-;printf(“该通讯者已被删除!n“);10void PrintList(LinkList head) / /通讯录链表的输出函数ListNode *p;p=head-next; /因为链表带头结点,使 p 指向链表开始结点printf(“编号 姓 名 性别 联系电话 地 址n“);printf(“-n“);while(p!=NULL)printf(“%d,%s,%s,%s,%sn“,p-data.num,p-data.na

11、me,p-data.sex,p-data.phone,p-data.addr);printf(“-n“);p=p-next; /后移一个结点void Bubblesort(LinkList head) /11 /将带头结点的通讯录链表中各个结点按通讯者编号排序 int i,j,k;ListNode *p;p=head-next;for(i=1;idata.num;p=p-next;for(i=1;i=i+1;j-)if(personjnext;while(p-data.num!=personk)12p=p-next;printf(“%s,%s,%s,%sn“,p-data.name,p-dat

12、a.sex,p-data.phone,p-data.addr);printf(“-n“);3主函数的伪码算法:void main() /for(;)switch(menu_select()case 1:printf(“-n“);printf(“- 通讯录链表的建立 -n“);printf(“-n“);head=CreateList();break;case 2:13printf(“-n“);printf(“- 通讯者信息的添加 -n“);printf(“-n“);printf(“编号 姓名(8) 性别 电话(11) 地址(31)n“);printf(“-n“);p=(ListNode*)malloc(sizeof(ListNode);scanf(“%d %s%s%s%s“,InsertNode(head,p);break;case 3:printf(“-n“);printf(“- 通讯录信息的查询 -n“);printf(“-n“);p=ListFind(head);if(p!=NULL)printf(“编号 姓名 性别 联系电话 地址n“);printf(“-n“);printf(“%d,%s,%s,%s,%sn“,p-data.nu

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号