通讯录系统实验报告Word文件下载.docx
《通讯录系统实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《通讯录系统实验报告Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
4.实现过程9
5.系统总结11
5.1系统优点11
5.2系统不足11
6.附录11
6.1数据测试及结果11
6.2小组分工17
一、系统简介
软件名称:
通讯录系统
软件大小:
668KB
授权方式:
免费试用
软件类型:
应用软件
运行平台:
DOS界面
作者名:
徐鹏、王怀密、李明
设计目的:
鉴于电脑在人群中的广泛普及和现在人们通讯的需求,以及用记事本记录联系人信息的不方便、不安全等因素。
我们组决定运用学到的c++的知识来编写一个用于方便联系他人保存信息的通讯录系统。
软件介绍:
本系统是一个集添加、查找、删除、浏览、修改于一体,方便用户记录和联系亲朋好友、客户等,具有安全性、高容错机制、方便用户使用等功能的通讯录系统。
本通讯录可用于任何人作为联系他人的应用软件。
系统特色:
⑴具有高度的容错机制,不会因小的失误造成死循环。
⑵具有安全的保密性同时兼有密码保护机制,保证系统的安全性和密码的可找回性。
⑶错误报警机制可以提醒用户进行正确的操作。
⑷可选择性,在进行查找、删除等操作时可按不同方式进行,方便用户操作。
⑸功能齐全,充分考虑到用户的实际需求。
二、设计概要
一、主要功能设计组织图
说明:
本系统主要功能包含8项,上图已经给出了简单介绍。
以下是各个功能的具体的介绍:
1、添加功能:
在本功能中我们考虑到用户进行添加时可能遇到通讯录中已经存在一个或几个相同姓名而用户不知的情况。
因此在用户遇到这种情况时我们提示用户进行相应的操作,包括三项:
继续添加、覆盖原有信息、退出添加。
我们还将给出重名的通讯人的所有信息,让用户了解、对照,然后由用户进行选择操作。
若通讯录达到上限系统将提示用户退出添加。
功能流程图:
2、查找功能:
在本功能中我们提供给用户六种查找方式,分别按照不同属性进行查找,由用户自由进行选择。
当通讯录为空或通讯录中没有用户要查找的通讯人信息时系统将给出相应提示。
3、修改功能:
本功能中我们首先提示用户进行相应的查找,在修改时我们的设计可以让用户单独修改某一项或者修改多项,实用性强。
4、删除功能:
在此功能模块中用户可先根据我们的提示进行查找,同时可查看要删除的通讯人的信息,然后由用户决定是否进行删除。
若不存在要删除的信息提示用户退出。
5、全部输出:
执行本功能后将以列表的形式将全部信息显示出来。
6、设置密码:
此功能模块主要为了保护用户的个人信息不被非授权人所查看而设计的,用户可以对系统进行加密保护。
7、设置密码保护:
此功能是为了用户忘记密码时找回密码而设计的。
二、主界面介绍
由于编者水平有限本系统采用的是win32控制台实现的,因此界面上与可视化编程还有一定差距。
但我们在现有的知识基础上充分考虑了用户的需求,把我们的主界面设计的比较友好。
主界面抓图
当用户设置密码后首先出现下面的界面
当用户输入密码的正确时才会进入上图的主界面
三、详细内部设计介绍
本通讯录系统采用c++编程,使用面向对象的程序设计思想来编写的。
主要采用了数据结构中的顺序表来实现通讯人信息的保存和各种功能的实现。
并将记录以ASCII文件存储。
本系统主要由五个文件组成分别是:
jishu,record,pw,mb,zancun。
jishu文件是专门用来记录已经存储的通讯人的个数。
record是用来保存通讯人信息的文件。
pw是保存系统密码的文件。
mb是用来保存用户在密码保护中回答的答案。
zancun是用来保存用户输入的密码。
为了简化程序使主函数简洁,我们将本系统分成四部分分别来编写。
这四部分分别为:
类.h、成员函数.cpp、密码.cpp、主函数.cpp。
在主函数中包含“成员函数.cpp”和“密码.cpp”。
这样实现了程序分模块编写。
下面将详细介绍各模块的具体功能和实现过程以及各个函数的实现细节。
一、类.h
此头函数主要作用是定义了一个结构体和一个通讯录类。
头函数中的结构体record是一个通讯人的基本信息,在record结构体中分别定义了六个成员。
这六个成员时name、sex、phone、age、address、email。
它们分别代表一个通讯人的姓名、性别、手机号、年龄、地址、电子邮箱。
将这六个成员分别定义为string型的,这是因为如果定义成其他类型,用户在输入信息时可能会输入一些不合法的数据造成系统的死循环。
应用string型就会避免死循环情况。
在类.h中定义的类是TX,此类是本系统唯一的一个类,TX类就相当于由五个功能组成的模块。
在类的public部分由Add()、Change()、Search()、Print()、Delete()五个成员函数组成,这五个成员函数彼此独立并在成员函数.cpp中定义。
它们分别代表了通讯录中的添加信息、修改信息、查找通讯人、全部输出、和删除通讯人信息的功能。
在类的private部分定义了容量为200的结构体数组TXL,应用此数组来保存用户输入的通讯人信息,它决定了通讯录的最大容量为200个。
count是记录存储个数的计数器。
二、成员函数.cpp
在此文件中主要是定义了类的五个成员函数(Add、Search、ChangePrint、Delete),即五种功能。
这五个函数是彼此独立的功能模块。
具体介绍如下:
1、Add()
此函数是实现添加功能的成员函数,执行此函数时首先打开保存记录个数的文件jishu,如果文件不存在首先建立此文件,并将0存入文件。
然后将存储记录个数的文件中的值读出并赋给count,以count的值作为判断标准如果是0直接进行添加。
如果不为0且小于200,说明已有记录存在,用一个for循环将record中的内容读出并赋给一个结构体数组,这样就将保存的记录读到顺序表中了。
将添加的通讯人姓名与已经存储的所有通讯人的姓名进行比较。
如果有重名的通讯人存在就提示用户进行相应操作,我们提供了三种处理方法:
1、继续添加2、覆盖原有通讯人信息3、退出添加。
由用户进行选择。
如果没有重名出现就继续添加。
当count的值达到200时说明通讯录已满应退出添加。
系统将提示用户同时发出警报。
每次如果添加了一个信息成功就将count加1并将count的值送回jishu文件中覆盖原有的值。
2、Search()
本函数是实现查找功能的成员函数,在此函数中首先也是先进行打开jishu文件的判断。
如果能打开jishu文件就将内容读出并赋给count,如果打不开文件就建立此文件并赋初值为0,然后将count赋值为0。
如果count的值为0说明通讯录中没有记录,也就无法进行查找,系统将退出查找。
如果count的值不为0可以进行查找,用一个for循环将record中的记录读到顺序表中来进行查找。
考虑到用户的需要我们提供了六种查找方式,分别根据通讯人的六种属性进行查找,我们将提示用户如何操作,由用户自由选择。
根据用户输入的操作数进行不同类型的查找。
此处我们还设计了容错的处理,将用户输入的操作数定义为string型的,这样就可以容纳各种不同的字符。
然后判断用户输入的操作数是否符合要求,若不符合就提示用户重新输入直到符合要求为止。
当未查到时提示用户没有所要查找的信息,并返回主界面。
若查找到将此人信息显示,然后继续进入主界面选择其他操作。
3、Change()
此函数是实现修改功能的成员函数,同样在执行时也是先进行jishu文件能否打开的判断,若打不开就建立jishu文件并存入0。
然后将文件中的内容赋给count。
如果count为0说明通讯录为空无法进行修改,退出修改函数,系统将提示用户返回主界面。
如果count不为0可以进行修改,用一个for循环将record中的记录读到顺序表中来。
在修改前必须先找到要要修改的通讯人,为了方便用户操作,我们根据用户的实际需要提供四种查找方式:
按姓名、按手机号、按地址、按邮箱。
由用户根据提示选择操作数,在此也设计了容错机制。
查找成功的话就将此人信息显示,让用户确定。
考虑到实际需求我们又提供了六种修改方式(用switch多分支语句来实现此功能),用户可以选择性的修改某些属性,此时如果不再需要修改也可以退出修改操作。
查找失败的话,程序将提示用户不存在此通讯人信息并退出修改函数,返回主界面。
若修改成功将修改后的信息以覆盖原文件的方式保存到文件中。
(此处要用for循环实现)
4、Delete()
本成员函数是实现删除功能的函数,在执行时首先进行jishu文件打开的判断,操作同Change()。
判断count的值。
如果count为0通讯录为空无法进行删除,退出删除函数,系统提示用户返回主界面。
若count不为0,首先提示用户查找出要删除的通讯人。
此处考虑实际情况我们只提供了两种查找方式:
按姓名、按手机号。
如果通讯人信息存在,输出此人的所有信息后询问用户是否真的要删除,由用户选择。
此处同样设计了容错机制。
如果删除了通讯人信息将count减1并重新保存到jishu文件中,然后系统返回主界面。
5、Print()
此函数是实现将通讯录中全部信息输出的成员函数,在执行时首先也是进行jishu文件打开的判断操作,同上,将jishu文件中的值赋给count。
若count的值为0,通讯录为空并退出输出函数,返回主界面。
若count不为0将保存记录的文件record打开将内容赋给record结构体数组,然后用for循环将数组的内容以表格的形式显示。
三、密码.cpp
为了保护用户的个人资料不被非授权人查看或篡改,我们特为本系统进行了加密处理。
此文件主要是实现加密功能。
在此文件中定义了三个外部函数,分别是:
password()、Mibao()、Shumi()。
下面详细介绍各个函数
1、password()
此函数是实现设置密码的功能。
在执行此函数时首先定义两个字符数组大小为100,用来存储用户输入的密码以及再次输入确认的密码。
然后将两个字符数组用for循环定义为空。
为了在输入密码时显示星号,我们利用了gech()函数。
此函数具有从键盘获取信息但不显示的功能。
用while循环进行密码的输入直到遇到回车或数组达到100时退出循环。
输入一个字符就输出一个星号。
考虑到用户会用到退格键我们又专门对退格进行了设计。
当遇到退格\b时用cout输出退格然后再输出空格,最后再用cout输出退格这样就解决了退格。
然后再提示用户重新输入一次来确认密码。
若两次输入的密码相同就将密码保存到pw文件中。
若两次输入的不相同就提示用户重新输入密码,直到输入的密码相同时退出函数返回主界面。
2、Mibao()
这个函数是实现密码保护的设置,在执行此函数时系统将依次提问用户3个问题由用户来做答,并将用户回答的信息保存到mb文件中。
然后系统将返回主界面。
3、Shumi()
当用户对系统进行了密码的设定后,主函数将自动调用此函数。
此函数是实现输入密码的功能。
在此函数中主要是将用户登陆时输入的一串字符与保存密码的文件中的内容进行比较。
如果匹配将成功登陆,如果不匹配将提示重新输入密码,在函数中有一个专门记录输入密码次数的变量m,每次重新输入密码时变量加1。
如果密码错误输入次数达到五次将提示用户退出系统后用密码保护找回密码。
(此处用dowhile来实现)由用户自由选择,如果选择找回密码,将用户的答案与保存答案的文件中的内容进行比较。
如果匹配就将保存密码的文件打开并将内容输出显示给用户。
如果不匹配系统强制退出。
如果用户未进行密码保护的设定系统也将强制退出。
四、主函数.cpp
此函数为整个程序的核心部分,在此函数中将执行各个函数来实现各种功能。
本函数包含了成员函数.cpp和密码.cpp,并对主界面进行了设计。
运用switch语句分别调用各种函数实现各种功能。
并运用了while语句重复执行主界面,当选择退出系统时程序才退出while循环。
四、实现过程
运行系统时首先输出系统标题,然后系统判断是否已经设置了密码。
其算法是:
打开保存密码的文件pw,如果打不开说明系统未进行加密,系统直接进入主界面。
如果能打开文件说明系统已经进行了加密,程序将执行Shumi()函数进行密码的输入。
若密码正确系统将进入主界面。
主界面由八项构成分别代表是:
添加、查找、修改、删除、全部输出、密码的设定、密码保护的设定、退出系统。
它们分别有各自所代表的操作数。
由用户输入操作数执行相应的操作。
此功能由switch语句实现,当用户输入不同的操作数程序将进入不同的函数模块。
进入各个函数后的运作过程在“详细内部设计”中已给出此处不再赘述。
本系统主要的算法都是与顺序表有关的算法,在查找时是将文件中保存的记录读出送到一个结构体数组中。
然后将输入的信息与相应的结构体中的成员进行顺序比较。
修改时也是将结构体数组中的某个成员的属性进行修改。
删除操作对应于顺序表的删除操作,其具体过程为:
如果查到要删除的记录在数组中的位置为i就用一个for循环将i后的记录全部前移一位,然后将count减1。
全部输出是将文件中保存的记录赋给一个数组,然后用一个for循环将数组的内容全部输出显示。
实现过程流程图:
五、系统总结
一、系统优点:
1、系统具有高度的容错机制,对错误有很强的处理功能,使系统不会因用户的失误而进入死循环状态。
(说明:
容错主要是针对输入操作数为非法数据时,为此将用户输入的操作数定义为string型的,然后判断用户输入的操作数是否符合要求。
若不符合提示用户输入错误请重输。
特别是应用switch语句时,应将string型的数据变为int型的这就用到了atoi(str.c_str()函数)
2、系统界面简洁、友好,用户根据我们的提示会很容易的进行相应的操作。
3、系统考虑周到,充分满足了用户的需求。
在添加时我们对重名进行了处理,在查找时我们提供了六种不同方式的查找,修改时可按使用者的意愿具体修改某一项属性
4、系统具有错误提示功能。
当用户进行错误的操作时,系统将以文字提示用户并且发出警报引起使用者的注意。
5、系统具有安全保密性,用户可以对系统加密以及设置密码保护来找回密码。
从而使用户的个人信息不会被非授权人查看或篡改,充分保护了用户的个人资料。
6、系统功能齐全,细节考虑周到。
充分满足了用户的需求。
二、系统的不足:
1、本系统是在win32控制台环境下运行的因此界面单一。
2、本系统不支持输入空格,因为用ASCII文件保存记录是以空格为间隔符的。
3、当进入某一功能模块时退回到主界面比较困难。
4、本系统使用了大量的静态堆栈,执行效率不高。
六、附录:
一、数据测试及结果
1、在主界面中按1键进入添加操作菜单
依次输入各项信息
如果遇到重名现象:
如果选择操作时输入错误会出现:
用户选择继续添加或覆盖原有信息界面同最上图,当选择退出添加
2、按2键进入查找通讯人信息菜单
当通讯录为空时出现下面的界面:
当通讯录不为空时:
分别提供了六种查找方式现任选一种进行演示选择1
若通讯人的信息存在:
若通讯人的信息不存在会出现下图:
3、按3键进入修改通讯人菜单
系统提供了4项基本修改现选择一项进行演示选择1
此处可以循环执行,直到选择退出!
!
若没找到此人信息:
4、按4键选择输出所有信息菜单:
5、按5键选择删除菜单
系统提供了两项选择现选择第1项做示范
选择1将把此人信息删除,选择2将退出删除。
若没有找到通讯人信息:
按6进入密码设定与修改菜单
若两次密码不想同:
按7进入密码保护的设定:
按8退出系统
当设着了密码,用户输入密码正确时:
若密码输入有误时:
若输入的密码错误次数达到五次:
若选1:
系统将退出
若选2,并进行了密码保护的设置:
二、小组分工:
我们组的成员有:
徐鹏、王怀密、李明。
我们组组员之间即相互协商又有明确的分工,其中李明主要负责编写添加、删除功能函数以及实验报告的撰写。
并参与了其他函数的设计和系统分析。
王怀密主要负责主函数和全部输出函数的编写,以及系统分析工作。
并制作了幻灯片。
徐鹏主要负责其他函数的编写和类的设计,将各成员编写的函数整合在一起,解决系统存在不足的工作。