线性表通讯录实验Word文档下载推荐.docx
《线性表通讯录实验Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《线性表通讯录实验Word文档下载推荐.docx(46页珍藏版)》请在冰豆网上搜索。
![线性表通讯录实验Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/9/e5980ecc-b51c-403b-9b11-f69ff7bf7a5a/e5980ecc-b51c-403b-9b11-f69ff7bf7a5a1.gif)
初始化通讯录表用函数voidInitAddressBook(SqList&
TXL)、浏览所有通讯录成员函数BrowseAddressBook(SqListTSL)等等,将这些子函数放在头文件test3_Seq.h中。
③建立主函数文件test3.cpp,通过调用上述头文件中的函数来实现该系统。
④给出系统数据类型的定义、存储结构定义以及各个函数之间的调用关系。
⑤实验内容中设置的功能要求必须实现,此外可自行增加合适的功能,可作为额外的实验成绩进行加分:
例如:
●通讯录和被删成员数据可用文件保存,程序运行时可从文件读入相应数据,程序结束时可写入文件保存。
●通讯录分组,可自行考虑把通讯录成员进行分组,如同学组、亲戚组、同事组等。
2、以小组为单位认真填写实验报告,实验报告必须包括各类数据类型的结构定义说明,各类数据的组织方式,系统的功能结构,各个操作的定义以及实现方法,运行结果与分析,难点如何解决,存在问题以及可改进之处等。
同时,在实验报告中需写明小组每位同学的分工,得分(小组总分不超过12分)等。
实验报告文件取名为report3.doc。
每组还必须制作一个答辩PPT,该PPT的命名为PPT_通讯录管理系统_(各小组成员名字).PPT。
3、每位组长上传实验报告文件report3.doc、源程序文件test3.cpp及test3_Seq.h、test3_Link.h,以及答辩PPT压缩打包后到BB平台上。
小组分工:
陈正融
程序设计
1、抽象数据类型
ADTSqlist
{数据对象:
D={ai|aiElemSet,i=1,2,3,……,n,n≥0}
数据关系:
R1={<
ai-1,ai>
|ai-1,ai∈D,i=1,2,3,……,n}
基本操作:
(1)intnewContactPerson(Sqlist&
S)
//输入函数
(2)intSearchContacts(Sqlist&
S,LinklistL)
//查询函数
(3)intOper_updata(Sqlist&
//修改函数
(4)intOper_detele(Sqlist&
//删除函数
(5)intInitList_Sq(Sqlist&
//初始化函数
(6)intsort_Sq(Sqlist&
S,Contactsi)
//排序函数
(7)intDestoryList_Sq(Sqlist&
//销毁函数
ADTLinklist
(1)intinsert_L(LinklistL,Contactsi,Sqlist&
(2)intInitList_L(Linklist&
L)
(3)intBrowselist(LinklistL)
//显示函数
(4)intremoveContact(LinklistL,Sqlist&
//恢复函数
(5)intDestoryList_L(Linklist&
2、存储结构
typedefstruct
{
intno;
//编号
charname[20];
//信息
chartel_1[20];
//电话1
chartel_2[20];
//电话2
charEmail[50];
//邮箱
chargroup[20];
//分组信息
}Contacts;
Contacts*elem;
intlength;
intlistsize;
}Sqlist;
typedefstructNode{
Contactsdata;
structNode*next;
}LNode,*Linklist;
intnum;
//分组序号
chargroname[20];
//分组名
}grouping;
grouping*gr;
}grolist;
3、函数定义
voidmain_menu()//菜单
intInitList_Sq(Sqlist&
S)//顺序表初始化
intInitList_gro(grolist&
G)//分组表初始化
intDestoryList_Sq(Sqlist&
S)//通途录销毁
intDestoryList_Gro(grolist&
G)//分组表销毁
intin_Seq(Sqlist&
S,Contactsa,inti)//本地输入处理
intzero_Sq(Sqlist&
S)//通讯录本地输入
intzero_Gro(grolist&
G)//分组表本地输入
intout_Seq(Sqlist&
S,Contactsa,inti)//通讯录输出处理
intprinttotxt_Sq(Sqlist&
S)//通讯录输出
intprinttotxt_Gro(grolist&
G)//分组表输出
Contactshandle(Sqlist&
S,Contactsi)//新建信息处理
intsort_Sq(Sqlist&
S,Contactsi)//排序
intnewContactPerson(Sqlist&
S)///新建联系人
intnewGro(grolist&
G)//新建分组
intContactdetails(Sqlist&
S,intno)//显示联系人详情
intDelete_Sq(Sqlist&
S,LinklistL,inti,intj)//删除联系人
intDelete_Gro(grolist&
G,Sqlist&
S)//删除分组
intupdata_Sq(Sqlist&
S,LinklistL,intno)//修改联系人
intBrowseContacts(Sqlist&
S)//显示联系人
intBrowseGro(grolist&
G)//显示分组
intOperation_2(Sqlist&
S,LinklistL,intno)//查询后操作
intfind_out(Sqlist&
S,inti,intj)//查询输出处理
intfindContact(Sqlist&
S,intno[],charna[])//查询输出
intBrowseGroCon(Sqlist&
S,charna[],intk[20])//显示分组联系人
intSearchContacts(Sqlist&
S,LinklistL)//查询联系人
intjoingro(grolist&
S,inti,intj)//分组加入联系人
intOper_updata(Sqlist&
S,LinklistL)//修改联系人
intOper_detele(Sqlist&
S,LinklistL)//删除联系人
intOperation_Gro2(Sqlist&
S,grolist&
G)//分组综合操作
intupdataGroname(grolist&
S)//修改分组名
intOperation_Gro(grolist&
S)//分组操作
intDestory(Sqlist&
S,LinklistL,grolist&
G)//销毁
intInitList_L(Linklist&
L)//初始化链表
intDestoryList_L(Linklist&
L)//销毁链表
intBrowselist(LinklistL)//显示误删表联系人
intin_link(Linklistp)//本地输入修改
intzero_Link(LinklistL)//本地输入
intout_Link(Linklistp)//本地输出修改
intprintotxt_link(LinklistL)//本地输出
intinsert_L(LinklistL,Contactsi,Sqlist&
S)//插入联系人
intsort_Link(Sqlist&
S,Contactsi)//恢复联系人排序
intremoveContact(LinklistL,Sqlist&
S)//恢复联系人
4、程序描述
本通讯录所有的操作都是基于联系人的编号,未避免编号出错,采用自动编号。
主界面直接显示通讯录联系人和操作选项,可直接通过编号进行操作。
也可以先查找联系人,然后再进行修改,删除操作。
支持本地保存和读取,模糊查找,插入排序
5、实验结果
1、主菜单
2、添加联系人
3、查询联系人
4、修改联系人
5、联系人分组
6、删除联系人
7、恢复删除联系人
6、代码
主函数
#include<
stdio.h>
string.h>
math.h>
stdlib.h>
#defineLIST_INIT_SIZE100
#defineLISTINCREMEMT10
#include"
test3_link.h"
test3_seq.h"
intmain()
inti=1;
SqlistS;
LinklistL;
grolistG;
InitList_Sq(S);
InitList_L(L);
InitList_gro(G);
zero_Gro(G);
zero_Sq(S);
zero_Link(L);
while
(1)
{
BrowseContacts(S);
main_menu();
printf("
输入选项:
"
);
scanf("
%d"
&
i);
if(i>
=0&
&
i<
=6)
{
switch(i)
{
case1:
newContactPerson(S);
break;
case2:
SearchContacts(S,L);
case3:
Oper_updata(S,L);
case4:
Operation_Gro(G,S);
case5:
Oper_detele(S,L);
case6:
removeContact(L,S);
break;
case0:
Destory(S,L,G);
exit(0);
default:
break;
}
}
else
i=1;
printf("
请输入有效数字\n"
system("
pause"
}
return0;
}
头文件1
voidmain_menu()
printf("
\t\t菜单\n"
\t\t1.添加联系人\n"
\t\t2.查询联系人\n"
\t\t3.修改联系人\n"
\t\t4.联系人分组\n"
\t\t5.删除联系人\n"
\t\t6.恢复联系人\n"
\t\t0.保存并退出\n"
}//主菜单
S.elem=(Contacts*)malloc(LIST_INIT_SIZE*sizeof(Contacts));
S.length=0;
S.listsize=LIST_INIT_SIZE;
return1;
}//构造顺序空表。
G)
G.gr=(grouping*)malloc(LIST_INIT_SIZE*sizeof(grouping));
G.length=0;
G.listsize=LIST_INIT_SIZE;
}//构造分组表
if(S.elem)
free(S.elem);
S.elem=NULL;
S.length=S.listsize=0;
}//销毁顺序表
if(G.gr)
free(G.gr);
G.gr=NULL;
G.length=G.listsize=0;
}//销毁分组表
S,Contactsa,inti)
if(!
strcmp(a.name,"
00000000"
))
strcpy(S.elem[i].name,"
\t"
strcmp(a.tel_1,"
strcpy(S.elem[i].tel_1,"
strcmp(a.tel_2,"
strcpy(S.elem[i].tel_2,"
strcmp(a.Email,"
strcpy(S.elem[i].Email,"
strcmp(a.group,"
strcpy(S.elem[i].group,"
}//对值为“”进行处理
inti=0;
Contactsa;
FILE*fp;
if((fp=fopen("
Contacts_Sq.txt"
"
r"
))==NULL)
error!
\n"
exit(0);
while(!
feof(fp))
fscanf(fp,"
%d%s%s%s%s%s"
S.elem[i].no,S.elem[i].name,S.elem[i].tel_1,S.elem[i].tel_2,S.elem[i].Email,S.elem[i].group);
a=S.elem[i];
in_Seq(S,a,i);
i++;
S.length=i;
fclose(fp);
}//从Contacts_Sq文本初始化
Contacts_Gro.txt"
))==NULL)
%d%s"
G.gr[i].num,G.gr[i].groname);
}
G.length=i;
}//从文本Contacts_Gro文本初始化
}//对值为“\t”的数据进行处理
if(S.elem==NULL)
return0;
fp=fopen("
w"
a=S.elem[i];
out_Seq(S,a,i);
fprintf(fp,"
%d\t%s\t%s\t%s\t%s\t%s"
S.elem[i].no,S.elem[i].name,S.elem[i].tel_1,S.elem[i].tel_2,S.elem[i].Email,S.elem[i].group);
while(i<
S.length)
if((fp=fopen("
"
a"
out_Seq(S,a,i);
fprintf(fp,"
\n%d\t%s\t%s\t%s\t%s\t%s"
}//输出联系人到文本
groupinga;
if(G.gr==NULL)
%d\t%s"
G.gr[i].num,G.gr[i].groname);
(G.length-1))
if((fopen("
\n%d\t%s"
}//输出分组目录到文本
strcmp(i.name,"
无"
strcpy(i.name,"
strcmp(i.tel_1,"
strcpy(i.tel_1,"
strc