数据结构实验一 通讯录Word格式.docx

上传人:b****3 文档编号:17936450 上传时间:2022-12-12 格式:DOCX 页数:19 大小:200.30KB
下载 相关 举报
数据结构实验一 通讯录Word格式.docx_第1页
第1页 / 共19页
数据结构实验一 通讯录Word格式.docx_第2页
第2页 / 共19页
数据结构实验一 通讯录Word格式.docx_第3页
第3页 / 共19页
数据结构实验一 通讯录Word格式.docx_第4页
第4页 / 共19页
数据结构实验一 通讯录Word格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

数据结构实验一 通讯录Word格式.docx

《数据结构实验一 通讯录Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构实验一 通讯录Word格式.docx(19页珍藏版)》请在冰豆网上搜索。

数据结构实验一 通讯录Word格式.docx

4.编写main()函数测试操作的正确性

2.程序分析

编程完成通讯录的一般性管理工作如通讯录中记录的增加、修改、查找、删除、输出等功能。

每个记录包含姓名、电话号码、住址等个人基本信息。

用《数据结构》中的链表做数据结构结合c语言基本知识编写一个通讯录管理系统。

本程序为使用方便,几乎不用特殊的命令,只需按提示输入即可,适合更多的用户使用。

对于建立通讯录管理系统,则需了解并掌握数据结构与算法的设计方法,提高综合运用所学的理论知识和方法独立分析和解决问题的能力。

2.1存储结构

节点结构:

存储结构:

带头结点和尾结点的单链表

front

2.2关键算法分析

本实验从整体上分为七大模块:

(1)输入联系人信息;

(2)添加联系人信息;

(3)查找联系人信息;

(4)查看联系人信息;

(5)删除联系人信息;

(6)修改联系人信息;

(7)退出通讯录管理。

通讯录系统图

2.2.1通讯录的建立

伪代码:

1.在堆中申请新的结点;

2.新节点的数据域为a[i];

3.将新节点加入到链表中;

4.修改尾指针;

5.全部结点插入后需要将终结结点的指针域设为空。

C++实现:

ContactBook:

:

ContactBook(DataTypea[],intn)//尾插法

front=newNode;

rear=newNode;

rear=front;

//构造空单链表

for(inti=0;

i<

n;

i++)

{

Node*s=newNode;

//建立新节点

s->

data=a[i];

//写入数据域

rear->

next=s;

//将新节点加入到链表中

rear=s;

//修改尾指针

}

rear->

next=NULL;

//终端节点的指针域设为空

}

时间复杂度:

o(n)

2.2.2通讯录的插入

插入为建立的一种特殊形式,即插入一个单独的结点,方法与上述类似

voidContactBook:

Add(DataTypea)//尾插法

Node*s=newNode;

s->

data=a;

rear=s;

o

(1)

2.2.3按ID查找

查找操作是指用户输入要查找的用户的ID,系统该函数内找到该用户,返回用户数据域的指针,在主函数中输出该用户的全部信息。

1.初始化工作指针p;

2.循环以下操作直到p为空或找到用户

1.如果p的数据等于i,则返回P的数据域指针;

2.P指针指向下一个节点;

3.若找不到返回空指针。

//通讯簿按ID查找

DataType*ContactBook:

Get(inti)

Node*p=front->

next;

while(p)

if(p->

data.ID==i)return&

(p->

data);

//根据ID找到被查元素,返回位置

p=p->

returnNULL;

//若找不到,返回空指针

2.2.4通讯录的删除

删除操作是指根据用户输入要删除用户的ID,找到该用户结点,返回该用户的数据域,删除此节点

1.从第一个节点开始,查找到要删用户的的前一个用户节点,设P指向该节点;

2.设q指向要删除的用户:

q=p->

next;

3.摘链:

p->

next=q->

4.保存q节点的数据域:

x=q->

data;

5.释放q节点:

deleteq;

要指出的是若在整个通讯录找不到该ID,直接跳过删除步骤,输出查无此人

DataTypeContactBook:

Delete(inti)

Node*p=front;

while(p->

next)

next->

data.ID==i)break;

//找到要删除的用户,跳出循环

Node*q=p->

//找到该用户

if(q)

p->

DataTypex=q->

//记录用户信息

deleteq;

//删除用户

cout<

<

"

删除成功!

endl;

returnx;

else{

cout<

该用户不存在!

}

2.2.5通讯录的修改

当用户要进行修改用户操作时,会在主函数输入要修改用户的ID,调用查询模块,若用户存在,系统会显示找到的用户信息,然后要求依次输入该用户新的的编号,姓名,性别,手机号,地址,输入这些后,用户信息被修改

//通讯簿修改

Modify(DataTypea,inti)

DataType*p=Get(i);

//按ID找到要修改的用户

*p=a;

//修改用户的个人数据

2.2.6通讯录的遍历显示

用户选择输出通讯录,系统会依次输出所有用户的信息

输出的基本思想是:

只要将表头的指针赋给一个指针变量p,然后用p向后扫描,直到表尾,p为空值。

//通讯簿遍历

PrintList()

您的通讯簿信息如下:

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

data.ID<

"

data.name<

data.ch<

data.phone<

data.addr;

2.2.7通讯录的析构

通讯录的析构即为单链表的析构,比较简单

//析构函数

~ContactBook()

Node*p=front;

while(p){

front=p;

deletefront;

(n)

2.3其他

3.程序运行结果

主函数流程图:

测试截图:

1.建立通讯簿

2.添加新用户

3.查找用户

4.删除用户

5.查看所有用户

6.修改已有用户

7.退出通讯簿管理系统

4.总结

通过这次的数据结构上机试验,让我回顾了有关线性表这一章的知识,学会使用线性表解决实际问题,让我有了更深的认识和了解,能灵活的使用,同时也发现了自己的不足,有些地方理解还不够深刻,出现了不少问题

调试时问题主要出在内存错误上,有时指针悬挂,有时尾指针指向错误,这些都需要一步步耐心的调试才能发现,以后编程我会注意改正这些

依照实验要求,在不同操作时加入了异常处理,比如要查找,删除,修改用户时,如果输入的ID不存在,系统会报错并终止操作,提高了系统的操作性

这次设计的通讯簿管理系统还有些可以改进的地方,比如加入文件流后可以将每次输入的信息保存在后台的一个文件里,每次使用时读取这个文件内的信息,实现了保存每次更新的数据。

我对于文件流的使用还不是很熟悉,所以没来及加入这项功能;

还有在查询这一块,只实现了按编号查询,还未加入按姓名查找。

附:

所有源程序

#include<

iostream>

usingnamespacestd;

//个人数据结构体

structDataType{

intID;

//用户ID;

charname[10];

charch;

charphone[13];

//手机号码

charaddr[31];

//用户结点

structNode{

DataTypedata;

structNode*next;

//通讯簿类声明

classContactBook

public:

ContactBook(){front=newNode;

rear=newNode;

front->

rear=front;

}

ContactBook(DataTypea[],intn);

//建立

~ContactBook();

//析构

voidAdd(DataTypea);

//添加

DataType*Get(inti);

//查找

DataTypeDelete(inti);

//删除

voidModify(DataTypea,inti);

//修改

voidPrintList();

//遍历

private:

Node*front;

//头结点

Node*rear;

//尾结点

//通讯簿的建立

//通讯簿的添加

//通讯簿删除

voidmain()

DataTypea[5]={{1001,"

张一"

'

m'

"

188****1881"

北京"

},

{1002,"

王二"

188****1882"

上海"

{1003,"

周三"

188****1883"

广州"

{1004,"

陈四"

f'

188****1884"

天津"

{1005,"

赵五"

188****1885"

南京"

}};

ContactBookMy(a,5);

intchoose;

do{

通讯簿管理系统"

1.建立我的通讯簿"

2.添加通讯簿的成员"

3.查找通讯簿的成员"

4.删除通讯簿的成员"

5.查看我的通讯簿"

6.修改通讯簿的成员"

0.退出通讯簿管理系统"

请选择:

;

cin>

>

choose;

switch(choose)

case1:

endl<

通讯簿建立成功"

break;

case2:

DataTypex;

请输入新用户的ID、姓名、性别(m/f)、手机号、住址"

cin>

x.ID>

x.name>

x.ch>

x.phone>

x.addr;

My.Add(x);

新用户添加成功!

case3:

intsearch;

请输入要查找用户的ID:

search;

if(My.Get(search)){

查找到的信息如下:

My.Get(search)->

ID<

name<

ch<

phone<

addr;

else

cout<

case4:

intdel;

请输入要删除用户的ID:

del;

if(My.Get(del)){

My.Get(del)->

My.Get

(del)->

确定删除该用户?

(y/n):

charIsDel;

IsDel;

if(IsDel=='

y'

My.Delete(del);

取消删除!

用户不存在!

case5:

My.PrintList();

case6:

intmod;

请输入要修改用户的ID:

mod;

if(My.Get(mod)){

DataTypex;

请输入修改后的ID、姓名、性别(m/f)、手机号、住址"

My.Modify(x,mod);

修改成功!

case0:

退出成功!

default:

输入有误!

};

}while(choose!

=0);

实验报告总字数要求不少于1000字。

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

当前位置:首页 > 幼儿教育 > 育儿知识

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

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