当前位置:首页>> >>


通讯录管理系统设计(论文和源码).rar

收藏

资源目录
    文档预览:
    编号:20180825164941235    类型:共享资源    大小:2.25MB    格式:RAR    上传时间:2018-08-25
      
    45
    金币
    关 键 词:
    通讯录 管理 系统 设计 论文 源码
    资源描述:
    目 录通讯录管理系统设计 .................................................................................................................................................2一、设计目标及系统功能 .................................................................................................................................21.1 设计目标 ..............................................................................................................................................21.2 文件管理功能 ......................................................................................................................................21.3 查找与替换功能 ..................................................................................................................................21.4 分组管理功能 ......................................................................................................................................21.5 对联系人的添加、编辑与删除功能 ..................................................................................................31.6 文件交互功能 ......................................................................................................................................31.7 辅助功能 ..............................................................................................................................................3二、系统开发的思路及实现 .............................................................................................................................32.1 系统执行流程 .......................................................................................................................................32.2 系统各项类的定义与使用 ..................................................................................................................42.3 添加、编辑以及删除功能的实现 ......................................................................................................62.4 数据的存储管理 ..................................................................................................................................72.5 查找与替换功能的实现 ......................................................................................................................82.6 分组管理的设计理念 ..........................................................................................................................82.7 文件交互性设计 ..................................................................................................................................92.8 辅助功能的实现 ..................................................................................................................................92.9 容错处理 ............................................................................................................................................10三、开发中的难题与创新 ...............................................................................................................................113.1 多元化数据的管理 ............................................................................................................................113.2 文件数据交互 ....................................................................................................................................113.3 特殊查询 ............................................................................................................................................113.4 界面设计 ............................................................................................................................................12四、在收获中成长 ...........................................................................................................................................124.1 MFC,新的尝试 ................................................................................................................................124.2 事件驱动与消息循环 ........................................................................................................................134.3 面向对象的设计思路 ........................................................................................................................134.4 关于程序员的思考 ............................................................................................................................13附录 ...........................................................................................................................................................................14一、程序使用简介 ...........................................................................................................................................141.1 创建、打开以及保存数据库 ............................................................................................................141.2 导入导出文件 ....................................................................................................................................141.3 新建、编辑与删除联系分组 ............................................................................................................151.4 新建、编辑与删除联系人 ................................................................................................................151.5 查找与替换 ........................................................................................................................................161.6 组成员分配 ........................................................................................................................................161.7 生日提醒和数据库信息 ....................................................................................................................16二、主要功能实现代码 ...................................................................................................................................172.1 链表节点的添加和删除功能(联系人或分组的添加,编辑和删除) ........................................172.2 CString 的字符串分离操作(文件的打开与保存、导入与导出功能) .......................................182.3 Find 函数的使用(查找和替换功能的实现) .................................................................................232.4 成员快速分配功能实现代码 ............................................................................................................242.5 拼音首字母检索功能实现代码 ........................................................................................................25通讯录管理系统设计- 2 -通讯录管理系统设计周金辉一、设计目标及系统功能1.1 设计目标现在,随着人际交往的频繁,电子信息技术的发展,通讯录程序已经很多见。这次课程设计,目标是做出一个通讯录管理系统,可以实现对多个联系人的各项信息(包括姓名、联系方式、学籍信息等)进行管理与储存。这个通讯录系统采用 Visual C++ 6.0 以及 MFC 编程,形成一个可视化的管理界面。并能实现联系人的添加、编辑以及删除,对联系人的信息进行查找与替换,按分组进行管理数据,写入单文件与数据加密,并实现与其他常用格式之间的互换等功能。1.2 文件管理功能通讯录系统能够实现对文件的集成式管理。由于设计的需要,文件中需要储存通讯录数据标题信息、密码信息(为了数据库安全可是对数据库设计密码访问) 、分组信息以及联系人信息。通过程序的新建功能,可以很容易地创建一个数据库。新建的过程中,必须要指出数据库的标题(数据库名)以及数据库的储存位置,并且同时可以指定数据库的访问密码。数据库的文件格式是文本格式,但是本系统中将数据库的拓展名定义为.txl,以和其它文件类型区分。这样,通讯录的一个数据库就建立完成。用户在对数据库的实时操作过程中,能够随时保存联系人信息,备份数据库信息,在退出程序时应提示用户保存联系人信息。1.3 查找与替换功能通讯录管理系统能实现对数据库中所存储的联系人进行逐一检索,比对需要进行查找的信息,然后将查找的结果显示出来,或者对查找的结果进行值的替换。查找的时候可以指定查找的方向,即向前查找还是向后查找,找到符合条件的记录之后将其显示出来,下一次查找将在本次查找的基础上继续查找,直到找到数据库的开头(向前查找)或者末尾(向后查找)为止。查找应该支持一定程度的模糊查询。例如,能检索出所有姓王的联系人。替换的功能应在查找的基础上实现对其中的某一个字段进行值替换。由于替换工作的需要,需要一次性检索出所有符合条件的联系人并将其列表显示。可以进行选择性替换,也可以一次性完成替换。无论查找还是替换,其针对的属性应该是联系人的全体属性,即能对联系人的每一个信息进行检索和替换。通讯录管理系统设计- 3 -1.4 分组管理功能当联系人多了,管理起来就会比较麻烦。为了解决这一问题,我在数据库管理系统引入了分组管理的功能。用户可以按照自己的喜好对联系人进行分组操作(比如分为亲人、朋友、同学等) ,然后将联系人与分组对应。分组的信息可以动态添加、删除和编辑,并且程序可以按照分组实现对联系人的筛选,以便于对联系人的快速定位。1.5 对联系人的添加、编辑与删除功能作为一个通讯录管理系统,对联系人进行添加、编辑和删除的功能是一个基本的功能。对联系人的添加没有上限,只要计算机的物理设备支持,联系人想添加多少就添加多少。对联系人还能进行实时修改与保存,并且能取消不当的修改操作。当然,也可以对联系人进行删除操作,删除之前系统会给出警告。删除是进行彻底的,即一个数据库里的所有联系人可以都被删除。1.6 文件交互功能有时候,用户为了不一个字一个字地输入联系人信息,而拥有一个 Excel 的数据表,程序应该能够支持对这张数据表的导入。同时,用户想把联系人信息统计成 Excel 数据表,程序应该也能将联系人信息导出到数据表中。所以,通讯录系统应该能实现两个功能,导入和导出。导出功能包括 TXT 格式导出(与记事本程序交互的文件格式)和 CSV 格式导出(与Excel 程序交互的文件格式) ,并且导出的时候保证所有有效信息的导出,保证对应格式的文件的有效性。导入功能包括 TXT 格式导入(与记事本程序交互的文件格式)和 CSV 格式导入(与Excel 程序交互的文件格式) ,以 TXT 方式导入的时候,系统将执行按行人名方式导入,以CSV 方式导入的时候,系统应提取列表头信息,并实现列表头与联系人属性之间的智能匹配,对联系组的智能添加等功能。1.7 辅助功能除了以上的基本功能之外,通讯录管理系统还能支持一定程度的辅助功能,以增强程序的可用性。生日提示功能。根据用户输入的联系人的生日信息,与系统时间比对,一旦到了联系人的生日的时候,系统能够提示用户哪些联系人的生日到了。按拼音首字母检索的功能。这个功能是大部分优秀的通讯录软件所具有的一个功能,把所有联系人的姓名按第一个字的首字母拼音排列。例如,通过检索 W 能够检索到所有姓王的联系人。成员快速分组功能。能够实现联系人快速分组的功能,避免挨个输入的麻烦。通讯录管理系统设计- 4 -二、系统开发的思路及实现2.1 系统执行流程程序的执行流程如右图所示,先是对程序的预处理,然后初始化各个类的信息,加载窗体及控件资源并按照设计显示出来。完成后根据用户的需要,可以进行创建数据库或者打开数据库,读入数据库的信息,并初始化各参数列表,将数据显示到窗体中。然后,根据用户的需要,对通讯录里的联系人信息、联系分组信息以及通讯录头信息进行编辑。对联系人信息可以进行添加、编辑、删除、查询以及替换操作,对联系分组信息可以进行添加、编辑以及删除操作。通讯录头信息可以进行编辑,也可以对通讯录数据库进行导入导出操作。对数据库的操作结束之后,进行保存操作将对数据库的修改信息写入到文件当中,然后退出程序。由于一切修改操作都只是在内存中进行的,所以一旦对数据库操作不当,可以选择不保存数据以恢复数据。2.2 系统各项类的定义与使用通讯录管理系统为了方便各项数据的管理,建立了八个类。CBaseInfor(管理联系人基本信息) 、CStudyInfor(管理联系人学籍信息) 、CContactInfor(管理联系人的联系方式信息)、COtherInfor (管理联系人的其它信息) 、CPerson (管理联系人信息,综合联系人的四个子信息类) 、CPGroup(管理联系分组信息) 、CNoneGroup(管理未分组的联系人信息) 、CDatabase(综合管理所有信息,包括联系人与分组信息的收集,文件的读入和写出) 。对于联系人,我定义了姓名(name) 、出生日期(birthday ) 、籍贯(province) 、性别(sex) 、所属分组(team) 、职务(position) 、专业(major ) 、学校(school ) 、班级(Class) 、院系(college) 、年级( grade) 、家庭电话(phone ) 、手机(mobi) 、家庭住址(address) 、邮编(postcode) 、QQ(qq) 、邮箱(email) 、传真(fax ) 、个人主页(homepage) 、备注(memo)这 20 个属性进行描述。类的 UML 图如下所示:程序预处理初始化信息创建数据库 打开数据库加载数据处理联系人信息 处理联系分组信息 处理通讯录头信息储存及退出通讯录管理系统设计- 5 -CDatabase# FileName : CString# title : CString# password : CString+ phead : CPerson *+ ghead : CPGroup *+ nowp : CPerson *+ FileOpened : bool+ nGroup : CNoneGroup+ CDatabase()+ ~CDatabase()+ ClearGroup() : void+ ClearPerson() : void+ Close() : void+ CreateDatabase(fn:CString 实现将这个联系人的信息插入链表的最后。同理,插入联系分组的过程也是如此。用户通过菜单命令或快捷按钮调出新建联系组的对话框。由于联系分组的确立只需要联系分组的名称就行了,所以,只要在对话框中输入联系分组的名称,再通过调用 nowData+=*g;即可向当前打开的数据库中分组链表中插入一个分组信息。删除功能则更加简单,通过调用删除对话框,让用户选择并确认删除一个联系人或者分组之后,从链表中检索出这一记录,再调用 nowData-=*p;就可以将对应的信息从链表里删除。本通讯录管理系统中的编辑功能则主要是对应于当前记录的。对于一般的编辑功能,系统会在你修改确认之后搜索链表检索出要修改的联系人,然后将其对应的信息进行修改。如右图所示。这样修改需要调出修改对话框,还得找记录,不方便,所以系统还支持了当前记录修改的方式。在数据库管理类(CDatabase)中定义了一个指向联系人类(CPerson )的指针变量 nowp,用于获得当前正在浏览或者编辑的联系人指针。如果链表中没有联系人,那么这个指针将指向 NULL。在主对话框中,有 5 个选项页分类地显示了当前浏览联系人的所有信息。当移动 nowp 指针的时候,这些信息也将及时更新。而在浏览信息的同时便可以对这些数据进行修改。为了防止误修改,每一页都设有保存修改和刷新按钮,用于保存或取消对该页内容进行的修改。这样,对联系人的编辑功能就变的十分快捷灵活。通讯录管理系统设计- 8 -2.4 数据的存储管理为了提高程序的可用性,通讯录系统还设计了对文件操作的支持。为了减少对文件的频繁操作,系统在读入文件之后,一直对内存中的数据进行修改,执行保存指令的时候才将修改结果写回文件。这样,可以防止误操作的补课恢复性。所有的联系人信息都将写入一个单一的文本文件中,为了数据的安全性,通讯录管理系统使用了自定义的文件格式(扩展名定义为*.txl) 。文件中记录着数据库的头信息,分组信息以及联系人信息。文件的格式定义如下:测试数据库 //文件的开头第一行记录数据库的名字111111 //文件第二行记录数据库的访问密码,空行表示没设定密码[Group Information] //分组信息开始的标记同学 //第一个分组的名字… //这里连续储存分组的名字,一个分组的名字一行老师 //第 n 个分组的名字[End Group] //分组信息结束的标记张三|1990-02-15|男|… //这里开始储存联系人信息,各信息按序排列,用“|”分开… //每一行储存一个联系人信息,直到文件末尾李华||男|… //第 n 个联系人信息,没设置的信息留空通讯录管理系统便依照这种格式,一次性读入所有联系人信息到内存中,以便以后对其进行各项操作。读入文件的功能在数据库管理类(CDatabase)的 OpenFile 函数中实现。实现的算法如下:先利用 fstream 流对象以读的方式打开文件,采用 getline 方法按行读入。读入第一行,将其内容存储到数据库管理类(CDatabase)的 title(标题)变量中。读入第二行,将其内容存储到数据库管理类(CDatabase)的 password(密码)变量中。然后读入分组开始标记,以分组结束标记作为循环终止条件循环按行读入,每读一行向数据库变量(nowData)中添加分组信息。将所有分组信息读入完成之后,便按行读入联系人信息直到文件末尾。每当读入一行联系人信息的时候,再利用循环把这一行数据以“|”为分隔符进行分割转存,完成后将新的联系人信息添加到数据库变量(nowData)中。如此,所有信息便都读入内存了。在读入文件之前,如果数据库设置了访问密码的话,应该先要求输入密码,确认了密码之后才能将数据读入。调用数据库管理类(CDatabase)的GetHeaderInfor 函数(只读入前两行获得重要信息)获得数据库的名字和密码,如果密码不为空的话则弹出对话框要求输入密码,密码错误的话则取消打开操作。相对于读入信息,保存信息的实现就变得简单多了,只要按照文件的格式将当前通讯录系统内存中的数据一次写入磁盘中即可。2.5 查找与替换功能的实现由于 MFC 提供的 CString 类的 Find 成员函数功能十分强大,查找的思路也变的十分简单。进行模糊查找,只要调用 CString 的变量 s.Find(要查找的内容);就可以了。如果返回值大于等于零,则说明变量 s 中包含要查找的内容,否则说明不包含。考虑到联系人可以被检索的通讯录管理系统设计- 9 -属性比较多(20 个) ,对每一个属性都添加一个检索的函数,并在检索的时候分支判断然后调用相应的检索函数需要的工作量比较大且可移植性差,所以,我在联系人类(CPerson )中添加了三个函数:GetMebValue、SetMebValue 和 CmpMebValue。这三个函数分别实现依据设置的属性名称获得属性值,设定属性值和查找属性值。GetMebValue 中需要传入一个参数标识需要获得值的属性名称,返回值为获得的值。SetMebValue 和 CmpMebValue 的第一个参数都是设置需要设置或者比对的属性名,SetMebValue 的第二个参数传入需要设置的值,CmpMebValue 的第二个参数传入需要查找的字符串,返回字符出现的位置数。这三个函数的实现只是一个多分支的 if 语句,却明显减少了代码的编写工作量。在实现查找的过程中,以 nowp 所指的联系人为查找起点,按照指定的查找方向利用next 指针或 prev 指针对链表中的每一个结点进行比对,调用 CmpMebValue(要查找的字段,要查找的内容) 函数,通过返回值是否为不小于零的整数来判断是否符合查找条件。找到之后,设置当前数据库的 nowp 指针指向这条记录,调用刷新函数将查找结果显示到窗体上。而替换的过程只要在查找到之后调用 SetMebValue 来设置其对应的值。2.6 分组管理的设计理念本通讯录管理系统支持对联系人进行分组管理。每一个联系人都指定了一个 team 属性,用来设定该联系人从属于哪个组。对于一个确定的成员,分组的信息也是唯一确定的。当分组被设置成空字符串的时候,系统就把该联系人作为未分组的联系人处理。分完组之后系统还能根据分组显示该组的联系人列表。根据列表,可以快速检索的联系人信息。对于每个人的分组归类,通过调用 CPGroup::IsInThisTeam 函数可以判断该成员是否从属于调用这个函数的组。2.7 文件交互性设计对于文本文档的导出功能,本系统采用一下格式。先输出一行标题,然后输出一条横线作为分隔线,然后一次输出每一个联系人的信息,每一行一个字段,输完一个联系人之后再后面追加一条分割线。而对于文本文档的导入功能,本系统则采用行姓名导入方式。即把文本文档的每一行文本都当成一个联系人的姓名,一次添加到一个新的数据库当中。至于对 Excel 程序的交互性,由于 XLS 数据表文件的高集成性,访问 XLS 文件的步骤十分复杂。所以,这里的和数据表进行导入导出选择的格式为 CSV 文件(逗点分隔文件) 。该文件的格式十分简单,第一行为标题行,各字段名之间用逗号分隔。以后一行为一条记录,一条记录内每个字段之间的值也用逗号分隔。了解了这一特性之后,与 Excel 的交互便可以在CSV 文件上展开。首先,导出 CSV 文件的功能比较容易实现,先把标题栏按逗号分隔导出。然后把每一个联系人的数据按照逗号分隔的格式输出到文件即可。导入 CSV 文件的时候,需要用户先对 CSV 文件中各字段与通讯录系统中使用的字段进行映射。通过两者之间是否有一者字符串包含另一者字符串来让系统实现初步地智能识别映射关系。通过 CSV 文件的文件名来智能识别导入数据库的名称。当一切参数都设定妥当之通讯录管理系统设计- 10 -后。便依照设定的映射关系,逐行读入 CSV 文件中的记录,按逗号分隔信息,调用SetMebValue 函数设置新建的联系人指定属性信息,加载完一行之后,将新建的联系人插入到链表中。如此,便完成了 CSV 文件的导入功能。2.8 辅助功能的实现按姓名首拼音进行检索。这项在知道某个联系人的姓名想要快速调出其对应信息的时候显得特别有用。首先,需要判定联系人的姓名是中文还是英文。判断姓名的第一个字符,如果介于 A 到 Z 之间或 a 到 z 之间,那么就认定联系人的姓名是英文的(对检索起影响的只有第一个字符) 。如果联系人的姓名是英文的,则按英文的首字母进行检索。如果联系人的姓名是中文,则按姓名的拼音首字母进行检索。按英文的首字母检索实现起来比较容易,利用 CString::GetAt()函数获取姓名的第一个字符,然后将其与检索的字符进行比对,如果一致就将其列出。而对于中文,由于中文字在电脑中的编码是按拼音排序的,故利用这一点,把中文汉字与临界汉字的编码进行比较,从而获得拼音首字母,再将拼音首字母与检索的字符进行比较。生日提醒功能。由于在创建和修改联系人的时候,限制了日期输入的格式,所以,系统所存储的日期都是 YYYY-MM-DD 格式的(如 1990-04-10) 。所以,设计生日提醒的功能的思路如下:先建立 CTime 类获取系统时间,得到月份和日期信息格式转化为 MM-DD 型的字符串。然后对链表里的每一个成员进行检索,获取生日信息的后 5 个字符(就是去掉年份信息) ,如果和系统的时间一直,则显示该联系人的生日到了,继续下一个检索。这样,便实现了生日提醒功能。联系人快捷分组功能。联系人信息在录入或者导入的过程中,往往是不带分组信息的,但是对每一个联系人都用编辑的方式进行分组的修改,其过程是十分繁琐的。所以,系统添加了联系人快捷分组的功能,利用两个列表框指定两个分组,用左移或者右移按钮动态修改联系人的分组信息,实现了鼠标一点,就能将联系人分组信息修改完成的功能。实现思想并不复杂,只是联系人链表逐一检索,将符合条件的联系人的分组信息设置成要移动到的分组名称。2.9 容错处理对于一些意外的事故以及一些非法的操作,程序做了一些容错处理。首先,我在主对话框类中定义了一个 EnableControls()函数,根据是否打开数据库而对界面上一些操作进行无效化处理。首先,在数据库管理类(CDatabase)中定义了一个共有的布尔型成员变量 FileOpened,用来标记当前是否已经打开一个文件了。每当打开一个文件,该变量就会被设成 true,关闭一个文件,该变量就会被设为 false。当数据库为打开的时候,一些菜单(如新建联系人之类的)将变灰无法使用。界面上的控件也将无法使用。而文件打开后,部分功能对应激活,但是如果联系人链表是空的话,部分功能依旧无法使用(如删除联系人) 。同理,分组链表是空的话预与之对应的功能(如删除分组)也无法使用。其次,对数据的有效性进行判断。首先,保证记录的无重复性。每当新建一条记录的时
    展开阅读全文
    1
      金牌文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:通讯录管理系统设计(论文和源码).rar
    链接地址:http://www.gold-doc.com/p-97674.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们
    copyright@ 2014-2018 金牌文库网站版权所有
    经营许可证编号:浙ICP备15046084号-3
    收起
    展开