数据结构课程实践之通讯录程序报告Word文档下载推荐.docx

上传人:b****5 文档编号:19719060 上传时间:2023-01-09 格式:DOCX 页数:16 大小:19.43KB
下载 相关 举报
数据结构课程实践之通讯录程序报告Word文档下载推荐.docx_第1页
第1页 / 共16页
数据结构课程实践之通讯录程序报告Word文档下载推荐.docx_第2页
第2页 / 共16页
数据结构课程实践之通讯录程序报告Word文档下载推荐.docx_第3页
第3页 / 共16页
数据结构课程实践之通讯录程序报告Word文档下载推荐.docx_第4页
第4页 / 共16页
数据结构课程实践之通讯录程序报告Word文档下载推荐.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数据结构课程实践之通讯录程序报告Word文档下载推荐.docx

《数据结构课程实践之通讯录程序报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程实践之通讯录程序报告Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。

数据结构课程实践之通讯录程序报告Word文档下载推荐.docx

4.通讯者信息的修改

5.通讯者信息的删除

6.通讯者链表的输出

1.退出管理系统

请选择0-6:

(2)实现循环和功能选择

假设输入选择用变量sn存储,它作为menu_select函数的返回值提供给switch语句。

使用for循环实现重复选择,并在主函数main()中实现。

#include<

stdio.h>

string.h>

Voidmain()

{

For(;

;

){

Switch(menu_select())

Case1:

Printf(“通讯录链表的建立\n”);

Break;

Case2:

Printf(“通讯者信息的插入\n”);

Case3:

Printf(“通讯者信息的查询\n”);

Printf(“通讯者信息的修改\n”);

Case4:

Case5:

Printf(“通讯者信息的删除\n”);

Case6:

Printf(“通讯录链表的输出\n”);

Case0:

Printf(“再见!

\n”);

Return;

}

(3)得到sn的合理值

如前所述,应该设计一个函数用来输出提示信息和处理输入,这个函数应该返回一个数值sn,以便供给switch语句使用。

假设函数名为menu_select,设计的参考程序如下:

Intmenu_select()

Intsn;

Printf(“通讯录管理系统\n”);

Printf(“===========================\n”);

Printf(“1.通讯录链表的建立\n”);

Printf(“2.通讯者信息的插入\n”);

Printf(“3.通讯者信息的查询\n”);

Printf(“4.通讯者信息的修改\n”);

Printf(“5.通讯者信息的删除\n”);

Printf(“6.通讯者信息的输出\n”);

Printf(“0.退出管理系统\n”);

Printf(“请选择0-6”);

Scanf(“%d”,&

sn);

If(sn<

0||sn>

6)

Printf(“\n\t输入错误,重选0-6”);

Else

Break;

Returnsn;

对于sn输入值,在switch中case语句对应数字1-6,对于不符合要求的输入,提示输入错误并要求重新输入。

2.2算法设计

功能模块函数设计

(1)通讯录链表的建立

这个实际上是要求建立一个带头结点的单链表。

这里介绍尾插法建立链表的算法设计思想及具体算法实现。

尾插法建立链表的算法描述如下:

1)使链表的头尾指针head.rear指向新生成的头结点(也是为结点)

2)至结束标志为0

3)设计循环语句

While(结束标志不为真)

循环语句;

4)尾结点指针域置空值NULL

(2)通讯者信息的插入

插入结点的基本思想是:

使用两个指针变量p1和p2分别向当前刚访问过的结点和下一个带访问的结点,循环顺序查找链表,寻找插入结点的位置,其中p1指向待插入位置的前一个结点。

插入操作时非常简单的。

其实现算法描述如下:

1)用p1指向原链表头结点,p2指向链表的第一个结点。

2)设计循环语句如下:

While(p2!

=NULL&

&

p2->

data.num<

p->

data.num)

P1=p2;

P2=p2->

next;

3)插入新结点

(3)在有序链表中查找指定结点

基本思想是:

首先输入要查找的通讯者的编号或姓名,从表头顺序访问表中结点,若查找成功,则返回一个指向查找到的通讯者信息的结点,若查找失败,则返回一个空的指针值NULL.

(4)通讯者信息的修改

信息修改一般只需要修改通讯者的联系电话或通讯地址,因此,先查找到需要修改的通讯者,修改相应的数据项即可。

其算法如下:

VoidChangeNode(LinkListhead)

P=ListFind(head)

If(p!

=NULL){

Printf(“编号姓名性别电话地址\n”);

Printf(“-------------------------------------------\n”);

Printf(“%s,%s,%s,%s\n”,p->

data.num,p->

data.name,

data.sex,p->

data.phone,p->

data.addr);

printf(“------------------------------------------\n”);

printf(“输入该通讯者正确的联系电话通讯地址:

\n中间用空格分隔\n”);

Elseprintf(“没查到要查询的通讯者!

(5)通讯者记录的删除

链表上结点的删除时比较简单的,即先调用查询函数,查询到要删除的结点,删除结点即可。

VoidDelNode(LinkListhead)

LinkNode*p,*q;

P=ListFond(head);

If(p=NULL){

Printf(“没有查到要删除的通讯者\n”);

q=head;

while(q!

=null&

q->

next!

=p)

q=q->

next=p->

free(p)

printf(“通讯者已被删除!

(6)通讯录链表的输出

通讯录链表的输出相对来说比较简单,只要将表头指针赋给一个指针变量p,然后用p向后扫描,直至表尾,p为空为止。

VoidprintList(LinkListhead)

P=head->

While(p!

=NULL)

printf(“----------------------------------------------\n”);

p=p->

完整的程序清单

stdlib.h>

typedefstruct{

charnum[5];

charname[9];

charsex[3];

charphone[13];

charaddr[31];

typedefstructnode{

structnode*next;

}ListNode,*LinkList;

intmenu_select();

LinkListCreateList(void);

voidInsertNode(LinkListhead,ListNode*p);

ListNode*ListFind(LinkListhead);

voidDelNode(LinkListhead);

voidPrintList(LinkListhead);

voidChangeNode(LinkListhead);

voidmain()

for(;

switch(menu_select())

{

case1:

printf("

**************************************\n"

);

printf("

*通讯录链表的建立*\n"

head=CreateList();

break;

case2:

*通信者信息的插入*\n"

请顺序输入编号、姓名、性别、电话和地址\n"

p=(ListNode*)malloc(sizeof(ListNode));

scanf("

%s%s%s%s%s"

p->

p->

InsertNode(head,p);

case3:

*通讯者信息的查询*\n"

p=ListFind(head);

if(p!

printf("

编号姓名性别电话地址\n"

-------------------------------------"

%s%S%s%s%s\n"

p->

}

else

没查到要查询的通讯者!

\n"

case4:

*通讯者信息的修改*\n"

ChangeNode(head);

case5:

*通讯者信息的删除*\n"

DelNode(head);

case6:

*通讯录链表的输出*\n"

PrintList(head);

case0:

\t再见!

return;

}

}

intmenu_select()

intsn;

通讯录管理系统\n"

=====================\n"

1.通讯录链表的建立\n"

2.通信者信息的插入\n"

3.通讯者信息的查询\n"

4.通讯者信息的修改\n"

5.通讯者信息的删除\n"

6.通讯录链表的输出\n"

0.退出管理系统\n"

请选择0-6:

"

{

scanf("

%d"

&

if(sn<

0||sn>

printf("

\n\t输入错误,重选0-6:

else

returnsn;

LinkListCreateList(void)

LinkListhead=(ListNode*)malloc(sizeof(ListNode));

ListNode*p,*rear;

charflag='

y'

rear=head;

while(flag=='

{p=(ListNode*)malloc(sizeof(ListNode));

-----------------------------------------\n"

scanf("

data.name,p->

rear->

next=p;

rear=p;

继续输入么?

(y/n):

getchar();

%c"

flag);

next=NULL;

returnhead;

voidInsertNode(LinkListhead,ListNode*p)

ListNode*p1,*p2;

p1=head;

p2=p1->

while(p2!

=NULL&

strcmp(p2->

data.num)<

0)

p1=p2;

p2=p2->

p1->

p->

next=p2;

ListNode*ListFind(LinkListhead)

ListNode*p;

charnum[5];

charname[9];

intxz;

================\n"

1.按编号查询\n"

2.按姓名查询\n"

请选择:

p=head->

xz);

if(xz==1){

请输入要查找者的编码:

%s"

num);

while(p&

strcmp(p->

data.num,num)<

p=p->

if(p==NULL||strcmp(p->

data.num,num)>

p=NULL;

else

if(xz==2){

请输入要查找者的姓名:

name);

while(p&

data.name,name)!

=0)

p=p->

returnp;

voidDelNode(LinkListhead)

charjx;

ListNode*p,*q;

p=ListFind(head);

if(p==NULL){

没有查到要删除的通讯者!

真的要删除该结点吗?

jx);

if(jx=='

||jx=='

Y'

q=head;

while(q!

q->

q=q->

q->

free(p);

通讯者已被删除!

voidPrintList(LinkListhead)

编号姓名性别电话地址\n"

---------------------------\n"

while(p!

%s%s%s%s%s\n"

p->

---------------------------------\n"

p=p->

voidChangeNode(LinkListhead)

if(p!

输入该通讯者正确的联系电话通讯地址:

\n中间用空格分隔\n"

%s%s"

没查到要查找的通讯者!

第3章.运行与设计

运行结果如下:

通讯录管理系统

===================

1、通讯录链表的建立

2、通讯者信息的插入

3、通讯者信息的查询

4、通讯者信息的修改

5、通讯者信息的删除

6、通讯录链表的输出

1、退出管理系统

====================

选1后按回车,显示:

*************************

*通讯录链表的建立*

请顺序输入编号、姓名、性别、电话和地址

-------------------------------------------------------------------

第4章.设计心得

添加功能:

通讯者信息的查重

基本思想如下:

调用查找函数找出姓名相同的两个通讯者,对其中一个进行修改以示不同。

其基本算法如下:

voidcheckagain(LinkListhead)

P=ListFind(head);

Printf(“没有查到要修改的通讯者\n”);

Printf(“---------------------------------------\n”);

Printf(“------------------------------------------\n”);

Printf(“输入该通讯者正确的姓名”);

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职高对口

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1