1通讯录管理系统报告Word格式.docx
《1通讯录管理系统报告Word格式.docx》由会员分享,可在线阅读,更多相关《1通讯录管理系统报告Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
建立通讯录信息,信息包括编号、姓名、性别、电话、地址等
能够提供插入、删除、查询通讯录信息等功能
能够输出该通讯录的功能
2.2测试数据
请输入您要进行的操作序号:
1
请输入编号/姓名/性别/电话号码/地址:
01沈佳萍女694002浙江省杭州市
结束输入按0,其他键继续
2.3整体算法思想
(1)、首先要定义结构体、结构体指针,初始化链表,以便于在后面的查找、插入、删除、输出操作的实现。
(2)、插入操作:
ListInsert(ListL)利用该函数进行插入操作,可以用后插节点:
s->
next=p->
next;
p->
next=s;
前插节点:
q=L;
while(q=q->
next!
=p)q=q->
next=q->
q->
next=s;
该函数被主函数调用。
(3)、查找操作,可以按编号查找:
voidsearchnum(LlistL,inti)或是按姓名查找:
voidsearchname(LlistL,charn[10])该函数被主函数调用。
(4)、删除操作:
DelLinkList(L,i)利用该函数进行删除操作,按姓名删除voiddelname(LlistL,char[10]),该函数被主函数调用。
(5)、主函数中依次调用相关函数即可。
三、系统设计
3.1概要设计
主程序模块中的对于表达式的存储结构调用了二叉树模块,而在构造表达式的二叉树模块中又调用了顺序栈SqStack模块,主程序中在将原表达式形式输入表达式转换为前缀表达式操作中调用了顺序栈SqStack1模块。
3.2详细设计
建立链表及结构类型:
#include<
iostream>
cstring>
cstdlib>
usingnamespacestd;
typedefstructlnode//定义节点和单链表的数据类型
{
intnum;
//编号
charname[10];
//姓名
charsex[2];
//性别
charpho[13];
//电话
charadd[23];
//地址
lnode*next;
//结构体指针域,存放后继的地址
}lnode,*Llist;
//lnode是节点的类型,*Llist是指向该类型节点的的指针类型
建立单链表:
LinkListCreatLinkListl()
Llistcreat(LlistL)//初始化单链表
{//尾插法
lnode*s,*r;
//定义工作指针r为尾指针s为头指针
inta;
//设置元素的类型为int
r=newlnode;
//生成头结点
L=newlnode;
L->
next=NULL;
//将链表置空
L=r;
while(a!
=0)
{
s=newlnode;
//生成新的节点
cout<
<
"
endl;
cin>
>
num>
name>
sex>
pho>
add;
r->
//新节点的处理
r=s;
//r指向新的尾节点
结束输入按0,其他键继续"
a;
}
r->
//对于非空表,最后节点的指针域放空指针
returnL;
}
查找操作:
GetLinkList(L,i)
voidsearch_num(LlistL,inti)//通过编号进行检索
lnode*s;
s=L->
//指向链表的头节点
while(s&
&
i!
=s->
num)
{
s=s->
//s指向链表的第一个数据节点,s沿着next指针向后移动
if(s!
=NULL)
num<
"
name<
sex<
pho<
add<
else
查无记录"
voidsearch_name(LlistL,charn[10])//通过姓名进行检索
=NULL){while(s&
strcmp(s->
name,n))
查无记录!
voidsearch(LlistL)//设置是通过编号还是通过姓名查找数据
intj,i;
charn[10];
cout<
编号查找1"
姓名查找2"
cin>
j;
switch(j)
case1:
输入要查询的记录编码"
i;
search_num(L,i);
//调用searchnum函数,查找数据
break;
case2:
输入要查询的姓名"
n;
search_name(L,n);
//调用searchname函数,查找数据
default:
输入错误"
插入操作:
InsertLinkList(L,i,x)
LlistInsert(LlistL)//向链表中插入元素
lnode*p=L;
请输入要插入的编号/姓名/性别/电话号码/地址:
s=newlnode;
//申请新的节点
while(p->
next)
p=p->
//先将p的后继指向p
p->
//再将s指向p的后继
s->
//尾节点、指针域置空
删除操作:
DelLinkList(L,i)
voiddel_num(LlistL,inti)//删除功能,通过编号删除
lnode*p,*q;
if(i<
1)
输入位置错误!
return;
q=L;
p=L->
//p指向链表的第一个数据节点
next&
=p->
num)//如果p没有到达链表的末尾,并且p的数据域不是i,则继续循环
q=p;
//p沿着next指针向后移动,移动前p指向q
i除成功!
ef(p!
=NULL)//删除p
q->
//删除节点p
deletep;
删ndl;
不存在该记录!
voiddel_name(LlistL,charn[10])//通过姓名删除
while(p&
strcmp(p->
if(p!
删除成功!
else
voiddel(LlistL)//编写是通过编号,还是通过姓名删除
编号删除1"
姓名删除2"
输入要删除的记录编码"
del_num(L,i);
输入要删除的姓名"
del_name(L,n);
3.3函数说明
主函数:
voidmain()//主函数包括界面设置
LlistL;
//申明链表L
欢迎使用通讯录管理系统"
endl<
********************************************************************************"
;
请输入您要进行的操作序号:
操作前请先建立通讯录!
1、建立通讯录"
2、插入通讯录"
3、查询通讯录"
4、通讯录删除"
5、输出通讯录"
6、退出系统"
while
(1)
intq;
q;
switch(q)//swith语句
{
case1:
L=creat(L);
break;
case2:
Insert(L);
case3:
search(L);
case4:
del(L);
case5:
output(L);
case6:
exit(0);
default:
break;
}
system("
pause"
);
cls"
四、系统实现
4.1、进入演示程序主界面
4.2、第一次输入,需要选择1功能
4.7、选择6功能:
经过对各个操作的测试,可以这样总结的说,基本完成了课程设计的要求,虽说其中有一些操作还存在BUG需要去完善改进。
五、实验总结与展望
遇到的问题:
明明是已经编写好了链表的初始化,也在链表里进行了数据输入,但是执行时出现错误,查找了很多资料,也请教了同学,但最后发现是由于没有在主函数中进行声明。
在加上了声明之后,程序便可以运行了。
其实,有好多编译错误都是很细节的地方,并不是我们的知识不够,而是我们不够仔细造成的。
诸如此类的编译错误,在我编写代码的时候出现好多,甚至第一次执行的时候,出现十多个错误,包括丢失‘;
’,分函数没有声明,链表中的指针运用不当等,但是经过一次次调试,一次次修改之后,终于差不多完成了。
总之,编写这样的一个通讯录管理系统是很不容易的,虽然对于一些能力比较强的同学以及老师们来说,这样的代码不难,但对于我来说还是做了很久才做好的,它是我辛勤劳动的成果,所以,我也很希望能得到老师的肯定!