数据结构课程设计报告 手机个人通讯录信息管理系统正文终稿Word下载.docx
《数据结构课程设计报告 手机个人通讯录信息管理系统正文终稿Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告 手机个人通讯录信息管理系统正文终稿Word下载.docx(50页珍藏版)》请在冰豆网上搜索。
3.3函数原型设计8
3.4主算法设计9
3.5用户界面设计10
4方案实现11
4.1开发环境与工具11
4.2程序设计关键技术11
4.3个人设计实现(按组员分工)
4.3.1黄红清设计实现11
4.3.2邢伟设计实现26
4.3.3王帅设计实现28
5测试与调试31
5.1个人测试(按组员分工)32
5.1.1黄红清测试31
5.1.2邢伟测试31
5.1.3王帅测试31
5.2组装与系统测试32
5.3系统运行32
6课题总结38
6.1课题评价38
6.2团队协作38
6.3个人设计小结(按组员分工)39
6.3.1黄红清设计小结39
6.3.2邢伟设计小结39
6.3.3王帅设计小结39
7附录A课题任务分工40
A-1课题程序设计分工40
A-2课题报告分工43
附录B课题设计文档(光盘)44
B-1课程设计报告(电子版)44
B-2源程序代码(*.H,*.CPP)44
B-3工程与可执行文件)44
B-4屏幕演示录像文件(可选)44
附录C用户操作手册(可选)45
C.1运行环境说明45
C.2操作说明45
1课题概述
1.1课题任务
【问题描述】
【设计要求】
1.2课题原理
利用数据结构中的顺序表或链表对手机通讯录的联系人信息进行存储,同时通过图形界面的设计制作对手机通讯录的各个功能进行模拟。
1.3相关知识
(1)顺序表或链表的基本结构;
(2)顺序表和链表的基本操作,如:
插入、删除、查找;
(3)C++MFC可视化程序设计的基本知识;
2需求分析
2.1课题调研
我们的课题是手机通讯录的模拟,我们对身边同学手机通讯录进行了基本的调查,发现这些通讯录的基本功能大致相同:
(1)均带有分组功能。
将联系人可以分为多个组存储。
(2)可以直观地展示各组联系人以及每个联系人的详细信息。
点击每个条目后,自动展开分组或者直接显示出联系人的详细信息。
(3)可以对分组进行修改、删除、添加等操作。
(4)可以对联系人进行添加、删除、修改、移动等操作。
(5)可以进行姓名和号码的查询。
(6)拥有人性化的操作界面。
所以我们便以此为设计目标,进行手机通讯录的模拟程序设计。
2.2用户需求分析
如今手机越来越成为人们生活、学习和工作中不可缺少的一员,但其最基本的功能是通话,通讯录的存在是及其必要和重要的,一个合理的手机通讯录能够更方便地对用户进行服务,用户使用它可以更便捷地查找和添加联系人,修改其信息等等,因此需求十分巨大。
在计算机还未普及之前通讯管理都是由联系人采用名片,笔录手工记帐的方式来操作的.现在一般的通讯录管理都是采用计算机作为工具的实用的计算机通讯录管理程序来帮助人们进行更有效的通讯录信息管理。
通讯录管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。
要求应用程序功能完备,易使用等特点。
功能上,需要实现通讯录管理系统的基本功能,如课题调研中所述的功能。
性能上,应当考虑更多的更快捷的查找操作,保证程序的运行速度。
3方案设计
3.1总体功能设计
(1)新建联系人、新建组功能
(2)删除、编辑联系人和组的功能
(3)移动联系人到其他分组的功能
(4)按姓名查询联系人功能
(5)按号码查询联系人功能
(6)显示联系人和组的详细信息功能
(7)联系人数量、分组数的基本统计功能
(8)帮助功能
3.2数据结构设计
为了方便文件存储操作,整个程序数据结构采用顺序表来设计。
classContact//最基本单位为联系人类,其中有每个联系人的具体信息条目
{
public:
Contact();
~Contact();
intCreate(char*n,char*p,char*c,char*r);
charname[25];
//姓名
charphonenumber[12];
//号码
charcity[25];
//城市
charremark[MAX_REMARK];
//备注
intnumberofcalls;
//通话次数
structrecord{
structdate{
intyear;
intmonth;
intday;
inthour;
intminute;
}date;
//通话日期时间
structtalktime{
intsecond;
}talktime;
//通话时长
}record[MAX_RECORD];
//通话记录
};
classGroup//组类包含联系人类数组,每组包含一定数目的联系人
Group();
~Group();
intCreate(char*groupname);
intAddContact(char*n,char*p,char*c,char*r);
intSearchContactName(char*key);
intSearchContactPhonenumber(char*key);
intDeleteContact(intc);
voidHeapAdjust(ints,intm);
intOrder();
charname[MAX_GROUPNAME];
//组名
intnumberofmenber;
//成员数
Contactcontact[MAX_NUMBEROFMENBER];
//联系人数组
classPhoneBook//通讯录类包含组数组,只有一个通讯录,其下包含多个组
PhoneBook();
~PhoneBook();
intAddGroup(char*groupname);
intSearchGroup(char*key);
intDeleteGroup(char*key);
intSearchContactName(char*key,int&
g,int&
c);
intSearchContactPhonenumber(char*key,int&
intDeleteContact(char*key);
intorder();
intnumberofgroup;
//组数
Groupgroup[MAX_NUMBEROFGROUP];
//组数组
3.3函数原型设计
Contact:
:
Contact();
//联系人类的构造函数
~Contact();
//联系人类的析构函数
intContact:
Create(char*n,char*p,char*c,char*r);
//联系人对象的创建函数
Group:
Group();
//组类的构造函数
~Group();
//组类的析构函数
intGroup:
Create(char*groupname);
//组类的创建函数,创建一个组
AddContact(char*n,char*p,char*c,char*r);
//当前组添加一个联系人
SearchContactName(char*key);
//搜索当前组指定姓名的联系人
SearchContactPhonenumber(char*key);
//搜索当前组指定号码联系人
DeleteContact(intc);
//删除当前组指定序号为c的联系人
voidGroup:
HeapAdjust(ints,intm);
//HeapAdjust()sub-function
Order();
//当前组按联系人姓名堆排序函数
intPhoneBook:
order();
//当前通讯录下对组进行排序
PhoneBook:
PhoneBook();
//通讯录构造函数,包含读文件数据的操作
~PhoneBook();
//通讯录析构函数,包含数据写入文件操作
AddGroup(char*groupname);
//为当前通讯录添加一个组
SearchGroup(char*key);
//在当前通讯录搜索指定组名
DeleteGroup(char*key);
//删除当前通讯录中的指定组
SearchContactName(char*key,int&
c);
//在整个通讯录中搜索指定姓名的联系人,并将其组号和联系人号保存在g和c中
SearchContactPhonenumber(char*key,int&
//在整个通讯录中搜索指定号码的联系人,并将其组号和联系人号保存在g和c中
DeleteContact(char*key);
//搜索通讯录中指定联系人并删除
voidCPhoneBookDlg:
UpdateTree();
//更新TreeControl列表
OnBnClickedButton1();
//新建组按钮
OnBnClickedButton2();
//新建联系人按钮
OnCbnDropdownCombo1();
//下拉列表选择框动态刷新
OnBnClickedButton4();
//删除联系人按钮
OnBnClickedButton5();
//删除组按钮
OnTvnSelchangedTree1(NMHDR*pNMHDR,LRESULT*pResult);
//单击树控件中具体联系人或组显示对应信息
OnBnClickedButton3();
//保存修改
OnBnClickedButton6();
//编辑按钮
OnBnClickedButton7();
//按姓名查询
OnBnClickedButton8();
//按电话查询
OnBnClickedButton9();
//关于
OnBnClickedButton10();
//帮助
OnCbnDropdownCombo2();
//动态刷新下方下拉列表
OnBnClickedButton11();
//移动功能
OnBnClickedButton12();
//删按钮功能
3.4主算法设计
3.5用户界面设计
说明:
中央上方为通讯录显示区,右上侧为联系人信息显示区,其余部分为功能区,整个界面紧凑而不拥挤,方便用户的操作。
4方案实现
4.1开发环境与工具
采用VS2013进行C++编程与MFC可视化程序设计。
4.2程序设计关键技术
(1)对顺序表的基本操作技术;
(2)折半查找技术;
(3)堆排序技术;
(4)MFC可视化程序开发技术;
(5)前端与后台的结合技术;
(6)联系人信息存储文件与读取文件技术;
4.3.1黄红清设计实现
(1)我设计了由联系人到组、由组到通讯录的顺序表数据结构。
采用顺序表原因有二:
其一,用户使用手机通讯录主要是为了查找和存储联系人信息,需要进行较多的查找操作,用顺序表效率更高;
其二,顺序表存储到文件与从文件读取到顺序表的操作易于设计完成,简化了文件的存取操作。
整个结构示意图:
通讯录
组一
组二
组三
联系人一
联系人二
顺序表的结构实现:
classContact
classGroup
classPhoneBook
(2)我进行了程序的可视化界面设计,包括界面的分布美化、每个按钮、编辑框、下拉框、树框功能的实现,以及其他人性化功能的添加。
其间将所有后台函数进行必要的修改以适合MFC设计的需要,从而设计出人性化的图形界面,使程序更为直观地执行。
各个控件功能的实现:
OnBnClickedButton1()
//TODO:
在此添加控件通知处理程序代码
chargroupname[MAX_GROUPNAME];
CEdit_groupname.GetWindowTextA(groupname,MAX_GROUPNAME);
if(groupname[0]!
='
\0'
)
{
if(phonebook.AddGroup(groupname))
{
phonebook.order();
CEdit_groupname.SetWindowTextA("
"
);
UpdateTree();
MessageBox("
新建组成功!
}
else
组数已达上限!
}
else
MessageBox("
请输入组名!
}
OnBnClickedButton2()
charn[25],p[12],c[25],r[MAX_REMARK];
CEdit_n.GetWindowTextA(n,25);
CEdit_p.GetWindowTextA(p,12);
CEdit_c.GetWindowTextA(c,25);
CEdit_r.GetWindowTextA(r,MAX_REMARK);
if(n[0]!
if(Combo1.GetCurSel()+1!
=0)
if(phonebook.group[Combo1.GetCurSel()+1].AddContact(n,p,c,r))
phonebook.group[Combo1.GetCurSel()+1].Order();
CEdit_n.SetWindowTextA("
CEdit_p.SetWindowTextA("
CEdit_c.SetWindowTextA("
CEdit_r.SetWindowTextA("
UpdateTree();
新建联系人成功!
该组联系人已满!
请先选择一个组!
请输入联系人姓名!
OnCbnSelchangeCombo1()
OnCbnDropdownCombo1()
Combo1.ResetContent();
for(inti=0;
i<
phonebook.numberofgroup;
i++)
Combo1.InsertString(i,phonebook.group[i+1].name);
OnEnChangeEdit1()
如果该控件是RICHEDIT控件,它将不
//发送此通知,除非重写CDialogEx:
OnInitDialog()
//函数并调用CRichEditCtrl().SetEventMask(),
//同时将ENM_CHANGE标志“或”运算到掩码中。
OnBnClickedButton4()
charkey[25];
CEdit_delcontact.GetWindowTextA(key,25);
if(key[0]!
if(phonebook.DeleteContact(key))
CEdit_sn.SetWindowTextA("
CEdit_sp.SetWindowTextA("
CEdit_sc.SetWindowTextA("
CEdit_sr.SetWindowTextA("
CEdit_sg.SetWindowTextA("
CEdit_delcontact.SetWindowTextA("
删除成功!
没有找到该联系人!
请输入要删除的联系人姓名!
OnBnClickedButton5()
charkey[MAX_GROUPNAME];
CEdit_delgroup.GetWindowTextA(key,MAX_GROUPNAME);
if(phonebook.DeleteGroup(key))
CEdit_sn.SetWindowTextA("
CEdit_sp.SetWindowTextA("