手机通讯录课程设计报告.docx
《手机通讯录课程设计报告.docx》由会员分享,可在线阅读,更多相关《手机通讯录课程设计报告.docx(17页珍藏版)》请在冰豆网上搜索。
手机通讯录课程设计报告
VisualC++课程设计
题目名称:
手机通讯录
班级:
信安1101
姓名:
***
学号:
**********
指导教师:
***
完成时间:
2013.1.18
1
题目描述
设计一个手机通讯录管理软件。
要求:
1)分组管理。
能够添加、删除、修改,每个分组设置一个来电音乐。
2)用户管理。
包括姓名、手机、办公电话,电子邮箱,QQ,微博,来电音乐
3)用户查询。
初始时按照字母顺序显示所有人员,可以输入姓名或者数字模糊查询
4)功能模拟。
当选中一个用户时,有通话和短信选项可以操作,选择后进入相应界面。
功能分析
系统主要功能包括:
(1)分组管理。
可以添加、修改、删除分组。
添加分组时可设置来电音乐,也可修改来电音乐。
(2)用户管理。
可添加、显示、修改、删除用户信息。
用户信息包括姓名、手机、办公电话、电子邮箱、QQ、微博、来电音乐。
(3)用户查询。
初始时按照字母顺序显示所有人员,可输入姓名或数字进行模糊查询。
可按分组显示人员。
(4)功能模拟。
当选中用户时,有通话和短信选项可以操作,选择后进入相应界面。
系统设计
1.1系统整体结构
1.1.1系统中的信息类型划分
在本系统中,主要分为两类
信息:
分组信息和人员信息(如图1所所示)。
其中分组信息包括分组名称及分组来电音乐。
人员信息包括人员姓名、手机、办公电话、电子邮箱、QQ、微博、分组、来电音乐。
图图1系统中的信息类型
1.1.2对分组的操作
用户可以添加分组,删除分组,重命名分组,修改分组音乐。
如图2所示。
图2分组操作
1.1.3对人员的操作
用户可以添加人员,删除人员,修改人员,修改人员来电音乐,功能模拟。
如图3所示。
图3人员操作
1.2主要模块设计
1.2.1信息类的设计
首先创建两个类CPerson和CGroup,分别存储联系人的资料和所有的分组,CPerson类里包含联系人的姓名、手机、办公电话、电子邮箱、QQ、微博、所属分组、来电音乐,CGroup类里包含分组名称及其对应的来电音乐。
1.2.2命令的设计
(1)面向对象的消息响应机制
消息(Message)表示为能在对象间传递的数据集,它是对象间的通讯机制。
设计一个面向对象环境的本质是:
对象可以用消息在彼此之间传送控制。
在Window环境中,一个特定的消息可以代表一个简单通用的事件;而任何特定的消息可以在不同的对象中引发不同的动作。
尽管对象接收消息的顺序在程序中是不可预知的,但对象处理每个消息所采取的行为却是显式定义的。
消息可由一个对象发送给另一个对象,或是由操作环境本身发送给某个对象;一个对象也可以通过向其他对象或自己发送一条或多条新消息来处理一个消息,有时即使一个简单的动作也包含了层层叠叠的消息处理。
(2)命令和命令类的设计
a.分组操作:
a)添加分组:
OnAddGroup();CAddGroupDlg;
b)重命名分组:
OnGroupModify();CModifyGroupDlg;
c)删除分组:
OnDeleteGroup();DeleteList(CStringgroupname);
d)显示分组人员信息:
RefreshList();
e)播放分组音乐:
OnMusic();
f)更改分组音乐:
OnMusicOk();
b.人员操作:
a)添加人员:
OnAdd();CAddDlg;
b)修改人员信息:
OnModify();CModify;
c)删除人员:
OnDelete();
d)更改来电音乐:
OnMusic();
e)发送短信:
OnMessage();CSendDlg;
f)拨打电话:
OnPhoneTo();CPhoneToDlg;
g)显示单个人员信息:
RefreshPerson(CStringpersonname);
h)显示所有人员信息:
RefreshAllList();
i)模糊查询:
BlurFindStr(CString&strSource,CString&strFindCell);IsBlur(BYTEc1,BYTEc2,charc)
基本射线图
(3)命令类及命令的层次如图4所示:
图4命令类及命令的层次
1.2.3主要数据结构
由于人员类CPerson和分组类CGroup是从MFC的CObject类派生,所以在系统实现中使用了MFC 库提供的数据结构CObList。
CObList类可以将CPerson*指针和CGroup*指针保存在双向链表中,允许双向查询,速度快。
在本系统的实现中,将联系人元素放于CObList类型变量(m_PersonList)的链表中,将分组元素放于CObList类型变量(m_GroupList)的链表中,可对其进行序列化和反序列化,方便信息的存储。
1.2.4文件存储
(1)文件存储格式
文件的存储格式主要有文本格式和二进制格式。
文本格式的一个显著优点是可以用文本编辑软件(如记事本)打开文件进行观察和读取。
与文本格式不同,二进制格式不能简单的将文件打开编辑。
但二进制文件读取速度快,并且能够利用MFC库进行序列化,是主流的文件输出格式。
(2)序列化和反序列化
序列化就是形成一个二进制文件,用于保存系统中要永久存储的对象数据。
序列化能够使程序中的对象永久保存,也就是说关闭程序重新运行后,这些对象仍然可以保留。
所谓反序列化就是从文件中读出已序列化的对象,并采用读出的数据给系统数据赋初值,即将数据从硬盘存储转换为内存存储。
在本系统中,序列化就是向一个数据文件中逐个地写入图形元素对象;反序列化就是从二进制文件中读出数据,利用读出的数据实现对CPerson对象的构造。
为了完成序列化,MFC保存了已经序列化的数据对象信息。
MFC序列化一个文件时,它采用这些信息来动态创建CEntity对象,并自动把它们加载到图形对象列表中。
类的序列化
可序列化的类必须直接或间接从CObject派生,并且满足两个条件:
第一,在类的声明中包含宏DECLARE_SERIAL;第二,在用来实现类成员函数的C++源文件(一般为.CPP文件)中包含宏IMPLEMENT_SERIAL。
集合的序列化
由于所有的集合类都是从CObject类派生出来的,并且集合类声明中都包含有DECLARE_SERIAL宏调用,因此我们就可以通过调用集合类的Serialize成员函数,很方便地使集合序列化。
例如,如果调用了有CPerson对象指针组成的CObList集合的Serialize函数,那么每个CPerson*指针所指向的对象的Serialize函数就会被自动调用。
在MFC应用程序框架中,从文档类CDocument类中派生出来的类可以很方便的实现数据序列化。
当用户选择了File菜单中的Save或者Open菜单项时,应用程序框架即会创建CArchive对象(以及内部的CFile对象),然后再调用文档类的Serialize函数,并将CArchive对象的引用传递给它。
然后文档派生类的Serialize函数就会对每一个非临时数据成员进行序列化。
1.3程序界面设计
界面环境作为人机信息交流的通道,主要是辅助用户完成工作。
为了方便用户使用,在系统实现中进行了树控件设计、列表视图控件设计、模糊查询设计和分组框设计。
1.3.1树控件设计
为了向用户可以清晰的展现通讯录的内容,本系统提供了树控件对通讯录内容进行显示,使用户可以清楚的了解联系人的分布状况及分组的信息,方便用户的使用和操作,使通讯录内的联系人信息一目了然,简洁清晰。
1.3.2列表视图控件设计
采用列表视图控件来显示联系人消息,联系人所有的信息都显示在列表视图控件中,更直观简洁,而且,本程序按照联系人姓名的字母顺序来显示联系人消息,方便用户通过姓名来查找联系人,使用方便简单。
1.3.3模糊查询设计
本程序为用户设计了模糊查询功能,更有利于用户的使用,方便用户查询联系人信息,是查询操作更为简单方便。
1.3.4分组框设计
为了使分组操作和用户操作更加醒目,易于用户操作,本系统使用分组框将分组操作和用户操作分别分开来显示,使系统界面更为美观,让用户使用过程中心情舒畅。
1.4类与函数的设计与实现
1.4.1联系人类的设计与实现
CPerson类为整个手机通讯录软件提供了联系人的存储记录。
CPerson类的声明如下:
classCPerson:
publicCObject
{
DECLARE_SERIAL(CPerson)
CStringname;//姓名
CStringphone;//手机
CStringnumber;//办公电话
CStringemail;//电子邮箱
CStringqq;//QQ
CStringweibo;//微博
CStringgroup;//联系人所属分组
CStringmusic;//联系人来电音乐
public:
CPerson(CStringlname="",CStringlphone="",CStringlnumber="",CStringlemail="",CStringlqq="",CStringlweibo="",CStringlgroup="",CStringlmusic="");//构造函数
virtual~CPerson();//析构函数
virtualvoidSerialize(CArchive&ar);
booloperator=(constCPerson&person);//重载函数
};
CPerson类派生于CObject类,存储了联系人的信息,其中不带参数的构造函数为序列化提供了条件。
1.4.2分组类设计与实现
CGroup类为整个手机通讯录软件提供了存储记录功能。
CGroup类的声明如下:
classCGroup:
publicCObject
{
DECLARE_SERIAL(CGroup)
public:
CStringgroupname;
CStringmusic;
public:
CGroup(CStringgname="",CStringgmusic="");
virtual~CGroup();
virtualvoidSerialize(CArchive&ar);
};
CGroup类派生于CObject类,存储了联系人分组的信息,其中不带参数的构造函数为序列化提供了条件。
1.4.3命令类设计与实现
手机通讯录软件将用户对联系人及分组的各种操作都视之为“命令”:
对联系人和分组的各种操作都转化为对命令的执行。
由于这些命令多基于对话框实现且分组操作与联系人操作的方式类似,此处指介绍部分分组命令类。
(1)添加分组类的实现
分组的添加通过添加分组对话框来实现,所以其类为CAddGroupDlg类,其声明如下:
classCAddGroupDlg:
publicCDialog
{
//Construction
public:
CAddGroupDlg(CWnd*pParent=NULL);//standardconstructor
//DialogData
//{{AFX_DATA(CAddGroupDlg)
enum{IDD=IDD_ADD_GROUP_DIALOG};
CStringm_strGroupName;
CStringm_GroupMusic;
//}}AFX_DATA
//Overrides
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAddGroupDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//Generatedmessagemapfunctions
//{{AFX_MSG(CAddGroupDlg)
afx_msgvoidOnCancel();
afx_msgvoidOnOk();
afx_msgvoidOnSelchangeGroupMusic();//分组音乐的选择
afx_msgvoidOnPlay();//分组音乐的试听
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
(2)分组重命名类
classCModifyGroupDlg:
publicCDialog
{
//Construction
public:
CModifyGroupDlg(CWnd*pParent=NULL);//standardconstructor
voidSetValue(CStringname);//将为修改的分组名显示到相应的位置
//DialogData
//{{AFX_DATA(CModifyGroupDlg)
enum{IDD=IDD_MODIFY_GROUP_DIALOG};
CStringm_strGroupName;
//}}AFX_DATA
//Overrides
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CModifyGroupDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//Generatedmessagemapfunctions
//{{AFX_MSG(CModifyGroupDlg)
afx_msgvoidOnOk();
afx_msgvoidOnCancel();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
2运行与测试结果
2.1程序主要运行界面
图5初始化界面
图6添加分组对话框
2.2系统测试
2.2.1界面操作测试
通过操作各个菜单项,检查各部分的功能是否与菜单提示一致。
例如首先进行联系人的存取,然后打开已存储的文件,观察联系人的显示结果是否正确,通过操作各个按钮,检查其是否能够正常工作。
2.2.2功能测试
通过分组的添加、删除、重命名、修改分组音乐、联系人的添加、删除、修改、来电音乐的修改等操作,检查通讯录功能是否正确。
通过联系人信息显示、分组信息显示、模糊查询等操作,检查通讯录的序列化是否正确。
2.2.3非正常操作测试
进行非正常操作的模拟,检查程序的健壮性。
3小结
实现了一个基本的手机通讯录软件。
主要内容包括分组的添加、删除、重命名、更改分组音乐、联系人的添加、删除、修改、各种数据的显示、模糊查询、模拟通话以及短信发送,数据文件的存储和读取。