Visual C++课程设计题目名称:手机通讯录班级:信安1101:立翼学号:**********指导教师:***完成时间:2013.1.18目录1 题目描述 (2)2 功能分析 (2)3 系统设计 (2)3.1 系统整体结构 (2)3.1.1 系统中的信息类型划分 (2)3.1.2 对分组的操作 (3)3.1.3 对人员的操作 (3)3.2 主要模块设计 (3)3.2.1 信息类的设计 (3)3.2.2 命令的设计 (4)3.2.3 主要数据结构 (5)3.2.4 文件存储 (5)3.3 程序界面设计 (6)3.3.1 树控件设计 (6)3.3.2 列表视图控件设计 (6)3.3.3 模糊查询设计 (7)3.3.4 分组框设计 (7)3.4 类与函数的设计与实现 (7)3.4.1 联系人类的设计与实现 (7)3.4.2 分组类设计与实现 (8)3.4.3 命令类设计与实现 (8)4 运行与测试结果 (10)4.1 程序主要运行界面 (10)4.2 系统测试 (13)4.2.1 界面操作测试 (13)4.2.2 功能测试 (14)4.2.3 非正常操作测试 (14)5 小结 (14)1 题目描述设计一个手机通讯录管理软件。
要求:1)分组管理。
能够添加、删除、修改,每个分组设置一个来电音乐。
2)用户管理。
包括、手机、办公,电子,QQ ,微博,来电音乐3)用户查询。
初始时按照字母顺序显示所有人员,可以输入或者数字模糊查询4)功能模拟。
当选中一个用户时,有通话和短信选项可以操作,选择后进入相应界面。
2 功能分析系统主要功能包括:(1)分组管理。
可以添加、修改、删除分组。
添加分组时可设置来电音乐,也可修改来电音乐。
(2)用户管理。
可添加、显示、修改、删除用户信息。
用户信息包括、手机、办公、电子、QQ 、微博、来电音乐。
(3)用户查询。
初始时按照字母顺序显示所有人员,可输入或数字进行模糊查询。
可按分组显示人员。
(4)功能模拟。
当选中用户时,有通话和短信选项可以操作,选择后进入相应界面。
3 系统设计3.1 系统整体结构3.1.1 系统中的信息类型划分在本系统中,主要分为两类信息:分组信息和人员信息(如图1所所示)。
其中分组信息包括分组名称及分组来电音乐。
人员信息包括人员、手机、办公、电子、QQ 、微博、分组、来电音乐。
图图1 系统中的信息类型3.1.2对分组的操作用户可以添加分组,删除分组,重命名分组,修改分组音乐。
如图2所示。
图2 分组操作3.1.3对人员的操作用户可以添加人员,删除人员,修改人员,修改人员来电音乐,功能模拟。
如图3所示。
图3 人员操作3.2主要模块设计3.2.1信息类的设计首先创建两个类CPerson和CGroup,分别存储联系人的资料和所有的分组,CPerson 类里包含联系人的、手机、办公、电子、QQ、微博、所属分组、来电音乐,CGroup类里包含分组名称及其对应的来电音乐。
3.2.2命令的设计(1)面向对象的消息响应机制消息(Message)表示为能在对象间传递的数据集,它是对象间的通讯机制。
设计一个面向对象环境的本质是:对象可以用消息在彼此之间传送控制。
在Window环境中,一个特定的消息可以代表一个简单通用的事件;而任何特定的消息可以在不同的对象中引发不同的动作。
尽管对象接收消息的顺序在程序中是不可预知的,但对象处理每个消息所采取的行为却是显式定义的。
消息可由一个对象发送给另一个对象,或是由操作环境本身发送给某个对象;一个对象也可以通过向其他对象或自己发送一条或多条新消息来处理一个消息,有时即使一个简单的动作也包含了层层叠叠的消息处理。
(2)命令和命令类的设计a.分组操作:a)添加分组:OnAddGroup();CAddGroupDlg;b)重命名分组:OnGroupModify();CModifyGroupDlg;c)删除分组:OnDeleteGroup();DeleteList(CString groupname);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(CString personname);h)显示所有人员信息:RefreshAllList();i)模糊查询:BlurFindStr(CString &strSource,CString&strFindCell);IsBlur(BYTE c1,BYTE c2,char c) (3)命令类及命令的层次如图4所示:图4 命令类及命令的层次3.2.3主要数据结构由于人员类CPerson和分组类CGroup是从MFC的CObject类派生,所以在系统实现中使用了MFC 库提供的数据结构CObList。
CObList类可以将CPerson *指针和CGroup *指针保存在双向链表中,允许双向查询,速度快。
在本系统的实现中,将联系人元素放于CObList类型变量(m_PersonList)的链表中,将分组元素放于CObList类型变量(m_GroupList)的链表中,可对其进行序列化和反序列化,方便信息的存储。
3.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函数就会对每一个非临时数据成员进行序列化。
3.3程序界面设计界面环境作为人机信息交流的通道,主要是辅助用户完成工作。
为了方便用户使用,在系统实现中进行了树控件设计、列表视图控件设计、模糊查询设计和分组框设计。
3.3.1树控件设计为了向用户可以清晰的展现通讯录的容,本系统提供了树控件对通讯录容进行显示,使用户可以清楚的了解联系人的分布状况及分组的信息,方便用户的使用和操作,使通讯录的联系人信息一目了然,简洁清晰。
3.3.2列表视图控件设计采用列表视图控件来显示联系人消息,联系人所有的信息都显示在列表视图控件中,更直观简洁,而且,本程序按照联系人的字母顺序来显示联系人消息,方便用户通过来查找联系人,使用方便简单。
3.3.3模糊查询设计本程序为用户设计了模糊查询功能,更有利于用户的使用,方便用户查询联系人信息,是查询操作更为简单方便。
3.3.4分组框设计为了使分组操作和用户操作更加醒目,易于用户操作,本系统使用分组框将分组操作和用户操作分别分开来显示,使系统界面更为美观,让用户使用过程中心情舒畅。
3.4类与函数的设计与实现3.4.1联系人类的设计与实现CPerson类为整个手机通讯录软件提供了联系人的存储记录。
CPerson类的声明如下:class CPerson : public CObject{DECLARE_SERIAL(CPerson)CString name; //CString phone; //手机CString number; //办公CString email; //电子CString qq; //QQCString weibo; //微博CString group; //联系人所属分组CString music; //联系人来电音乐public:CPerson(CString lname="",CString lphone="",CString lnumber="",CString lemail="",CString lqq="",CString lweibo="",CString lgroup="",CString lmusic="");//构造函数virtual ~CPerson(); //析构函数virtual void Serialize(CArchive& ar);bool operator=(const CPerson &person); //重载函数};CPerson类派生于CObject类,存储了联系人的信息,其中不带参数的构造函数为序列化提供了条件。
3.4.2分组类设计与实现CGroup类为整个手机通讯录软件提供了存储记录功能。