1、4.通讯者信息的修改5.通讯者信息的删除6.通讯者链表的输出1.退出管理系统请选择0-6:(2)实现循环和功能选择假设输入选择用变量sn存储,它作为menu_select函数的返回值提供给switch语句。使用for循环实现重复选择,并在主函数main()中实现。#includestring.hVoid main()For(;)Switch(menu_select()Case 1:Printf(“通讯录链表的建立n”);Break;Case 2:Printf(“通讯者信息的插入n”);Case 3:Printf(“通讯者信息的查询n”);Printf(“通讯者信息的修改n”);Case 4:C
2、ase 5:Printf(“通讯者信息的删除n”);Case 6:Printf(“通讯录链表的输出n”);Case 0:Printf(“再见!n”);Return;(3)得到sn的合理值如前所述,应该设计一个函数用来输出提示信息和处理输入,这个函数应该返回一个数值sn,以便供给switch语句使用。假设函数名为menu_select,设计的参考程序如下:Int menu_select()Int sn ;Printf(“通讯录管理系统n”);Printf(“=n”);Printf(“1.通讯录链表的建立n”);Printf(“2.通讯者信息的插入n”);Printf(“3.通讯者信息的查询n”)
3、;Printf(“4.通讯者信息的修改n”);Printf(“5.通讯者信息的删除n”);Printf(“6.通讯者信息的输出n”);Printf(“0.退出管理系统n”);Printf(“请选择0-6”);)Scanf(“%d”,&sn);If(sn6)Printf(“nt输入错误,重选0-6”);ElseBreak;Return sn;对于sn输入值,在switch中case语句对应数字1-6,对于不符合要求的输入,提示输入错误并要求重新输入。2.2算法设计功能模块函数设计(1)通讯录链表的建立这个实际上是要求建立一个带头结点的单链表。这里介绍尾插法建立链表的算法设计思想及具体算法实现。尾
4、插法建立链表的算法描述如下:1)使链表的头尾指针head.rear指向新生成的头结点(也是为结点)2)至结束标志为03)设计循环语句While(结束标志不为真)循环语句;4)尾结点指针域置空值NULL(2)通讯者信息的插入插入结点的基本思想是:使用两个指针变量p1和p2分别向当前刚访问过的结点和下一个带访问的结点,循环顺序查找链表,寻找插入结点的位置,其中p1指向待插入位置的前一个结点。插入操作时非常简单的。其实现算法描述如下:1)用p1指向原链表头结点,p2指向链表的第一个结点。2)设计循环语句如下:While(p2!=NULL&p2-data.numdata.num)P1=p2;P2=p2
5、-next;3)插入新结点(3)在有序链表中查找指定结点基本思想是:首先输入要查找的通讯者的编号或姓名,从表头顺序访问表中结点,若查找成功,则返回一个指向查找到的通讯者信息的结点,若查找失败,则返回一个空的指针值NULL.(4)通讯者信息的修改信息修改一般只需要修改通讯者的联系电话或通讯地址,因此,先查找到需要修改的通讯者,修改相应的数据项即可。其算法如下:Void ChangeNode(LinkList head)P=ListFind(head)If(p!=NULL)Printf(“编号 姓名 性别 电话 地址n”);Printf(“-n”);Printf(“%s,%s,%s,%sn”,p-
6、data.num,p-data.name,data.sex,p-data.phone,p-data.addr);printf(“-n”);printf(“输入该通讯者正确的联系电话 通讯地址:n中间用空格分隔n”);Else printf(“没查到要查询的通讯者!(5)通讯者记录的删除链表上结点的删除时比较简单的,即先调用查询函数,查询到要删除的结点,删除结点即可。Void DelNode(LinkList head)LinkNode *p,*q;P=ListFond(head);If(p=NULL)Printf(“没有查到要删除的通讯者n”);q=head;while(q!=null&q-n
7、ext!=p)q=q-next=p-free(p)printf(“通讯者已被删除!(6)通讯录链表的输出通讯录链表的输出相对来说比较简单,只要将表头指针赋给一个指针变量p,然后用p向后扫描,直至表尾,p为空为止。Void printList(LinkList head)P=head-While(p!=NULL)printf(“-n”);p=p-完整的程序清单stdlib.htypedef structchar num5;char name9;char sex3;char phone13;char addr31;typedef struct nodestruct node *next;ListN
8、ode,*LinkList;int menu_select();LinkList CreateList(void);void InsertNode(LinkList head,ListNode *p);ListNode *ListFind(LinkList head);void DelNode(LinkList head);void PrintList(LinkList head);void ChangeNode(LinkList head);void main() for(; switch(menu_select() case 1: printf(*n); printf(* 通 讯 录 链
9、表 的 建 立 * n head=CreateList(); break; case 2:* 通 信 者 信 息 的 插 入 *n请顺序输入编号、姓名、性别、电话和地址n p=(ListNode *)malloc(sizeof(ListNode); scanf(%s%s%s%s%s,p- p- InsertNode(head,p); case 3:* 通 讯 者 信 息 的 查 询 *n p=ListFind(head); if(p! printf(编号 姓名 性别 电话 地址 n-%s %S %s %s %sn p- else没查到要查询的通讯者!n case 4:* 通 讯 者 信 息 的
10、 修 改 *n ChangeNode(head); case 5:* 通 讯 者 信 息 的 删 除 *n DelNode(head); case 6:* 通 讯 录 链 表 的 输 出 *n PrintList(head); case 0:t 再 见 ! return; int menu_select() int sn; 通讯录管理系统n=n 1.通讯录链表的建立 n 2.通信者信息的插入n 3.通讯者信息的查询n 4.通讯者信息的修改n 5.通讯者信息的删除n 6.通讯录链表的输出n 0.退出管理系统n 请 选 择 0-6: scanf(%d,& if(sn printf(nt输入错误,重
11、选0-6: else return sn;LinkList CreateList(void) LinkList head=(ListNode *)malloc(sizeof(ListNode); ListNode *p,*rear; char flag=y rear=head; while(flag= p=(ListNode *)malloc(sizeof(ListNode);-n scanf(data.name,p- rear-next=p; rear=p;继续输入么?(y/n): getchar();%cflag);next=NULL; return head;void InsertNod
12、e(LinkList head,ListNode *p) ListNode*p1,*p2; p1=head; p2=p1- while(p2!=NULL & strcmp(p2-data.num) p1- p-next=p2;ListNode *ListFind(LinkList head) ListNode *p; char num5; char name9; int xz;=n 1.按编号查询 n 2.按姓名查询 n 请 选 择: p=head-xz); if(xz=1)请输入要查找者的编码:%s,num); while(p & strcmp(p-data.num,num) if(p=NU
13、LL |strcmp(p-data.num,num) p=NULL; else if(xz=2)请输入要查找者的姓名:,name); while(p &data.name,name)!=0) p=p- return p;void DelNode(LinkList head) char jx; ListNode *p,*q; p=ListFind(head); if(p=NULL)没有查到要删除的通讯者!真的要删除该结点吗?jx); if(jx=|jx=Y q=head; while(q! q- q=q- q- free(p);通讯者已被删除!void PrintList(LinkList he
14、ad)编号 姓名 性别 电话 地址n-n while(p!%s %s %s %s %sn p-n p=p-void ChangeNode(LinkList head) if(p!输入该通讯者正确的联系电话 通讯地址:n中间用空格分隔n%s%s没查到要查找的通讯者!第3章.运行与设计运行结果如下:通讯录管理系统=1、通讯录链表的建立2、通讯者信息的插入3、通讯者信息的查询4、通讯者信息的修改5、通讯者信息的删除6、通讯录链表的输出1、退出管理系统=选1后按回车,显示:*通 讯 录 链 表 的 建 立*请顺序输入编号、姓名、性别、电话和地址-第4章.设计心得添加功能:通讯者信息的查重基本思想如下:调用查找函数找出姓名相同的两个通讯者,对其中一个进行修改以示不同。其基本算法如下:void checkagain(LinkList head)P=ListFind(head);Printf(“没有查到要修改的通讯者n”);Printf(“-n”);Printf(“-n”);Printf(“输入该通讯者正确的姓名”);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1