线性表通讯录实验.docx
《线性表通讯录实验.docx》由会员分享,可在线阅读,更多相关《线性表通讯录实验.docx(46页珍藏版)》请在冰豆网上搜索。
线性表通讯录实验
线性表通讯录实验
浙江大学城市学院实验报告
课程名称数据结构
实验项目名称实验三线性表的应用---通讯录管理系统的设计与实现
组长陈正融专业班级统计学1502学号31503197得分
组员1专业班级学号得分
组员2专业班级学号得分
实验成绩指导老师(签名)日期
一.实验目的和要求
1、掌握线性表的顺序存储结构;
2、掌握线性表的动态分配顺序存储结构及基本操作的实现;
3、掌握线性表的链式存储结构;
4、掌握单链表的基本操作的实现。
5、掌握线性表的应用。
二.实验内容
1、设计并实现日常生活中通讯录的管理系统。
该系统需3位同学一组,按模块分工协作完成,系统具体功能需求描述如下:
①输入数据建立通讯录表:
在系统使用前先需要创建通讯录,可以一次输入(或文件导入)多个成员的通讯录信息,建立通讯录。
要求此表为顺序存储结构。
②查看所有通讯录信息:
显示通讯录表中所有成员的通讯录信息。
③查询通讯录中满足要求的信息:
可以根据不同方式查询,如按姓名查询、按姓氏查询、按编号查询等。
④新增通讯录信息:
每次可添加一个新成员的通讯
】、录信息。
⑤修改通讯录信息:
修改通讯录中已有成员的信息。
删除通讯录成员:
删除通讯录表中已有的成员,但需要把删除的成员信息放到另一张被删成员表中,以便错误操作后允许恢复。
该被删成员表要求采用链式存储。
⑦恢复被删成员信息:
一旦发现误删,则可以在被删成员表中找到该成员,重新加入到通讯录表中。
系统实现要求:
通讯录表必须使用动态分配顺序存储结构,被删成员表必须使用链式存储结构。
②通讯录信息至少包括:
编号、姓名、电话1、电话2、邮箱等,其他可自行设置。
③用菜单方式选择相应功能,且各功能的有关操作需通过调用各函数来实现,如:
初始化通讯录表用函数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∈D,i=1,2,3,……,n}
基本操作:
(1)intnewContactPerson(Sqlist&S)
//输入函数
(2)intSearchContacts(Sqlist&S,LinklistL)
//查询函数
(3)intOper_updata(Sqlist&S,LinklistL)
//修改函数
(4)intOper_detele(Sqlist&S,LinklistL)
//删除函数
(5)intInitList_Sq(Sqlist&S)
//初始化函数
(6)intsort_Sq(Sqlist&S,Contactsi)
//排序函数
(7)intDestoryList_Sq(Sqlist&S)
//销毁函数
ADTLinklist
{数据对象:
D={ai|aiElemSet,i=1,2,3,……,n,n≥0}
数据关系:
R1={|ai-1,ai∈D,i=1,2,3,……,n}
基本操作:
(1)intinsert_L(LinklistL,Contactsi,Sqlist&S)
//输入函数
(2)intInitList_L(Linklist&L)
//初始化函数
(3)intBrowselist(LinklistL)
//显示函数
(4)intremoveContact(LinklistL,Sqlist&S)
//恢复函数
(5)intDestoryList_L(Linklist&L)
//销毁函数
2、存储结构
typedefstruct
{
intno;//编号
charname[20];//信息
chartel_1[20];//电话1
chartel_2[20];//电话2
charEmail[50];//邮箱
chargroup[20];//分组信息
}Contacts;
typedefstruct
{
Contacts*elem;
intlength;
intlistsize;
}Sqlist;
typedefstructNode{
Contactsdata;
structNode*next;
}LNode,*Linklist;
typedefstruct
{
intnum;//分组序号
chargroname[20];//分组名
}grouping;
typedefstruct
{
grouping*gr;
intlength;
intlistsize;
}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&G,Sqlist&S,inti,intj)//分组加入联系人
intOper_updata(Sqlist&S,LinklistL)//修改联系人
intOper_detele(Sqlist&S,LinklistL)//删除联系人
intOperation_Gro2(Sqlist&S,grolist&G)//分组综合操作
intupdataGroname(grolist&G,Sqlist&S)//修改分组名
intOperation_Gro(grolist&G,Sqlist&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
#include
#include