1、通讯录管理系统的设计与实现课程设计报告通讯录管理系的设计与实现姓名:钟婷英 班级:计122学号:39 时间:2014年1月10日 1,问题描述通讯录是用来记载和查询联系人通讯信息的工具,电子通讯录已经为手机,电子词典等设备中不可缺少的工具软件,请设计一个能够满足这种需求的软件,基本功能模块如下图所示。 输入:记录的录入。显示:通讯录的显示。查找:按指定方式,输入关键字,查找指定记录。插入:实现记录的添加或在指定位置插入记录。保存:将内存中正在被操作的通讯录以文件形式保存到磁盘。读入:保存的逆操作,讲存在磁盘中的通讯录文件读到内存中。排序:按指定关键字对通讯录数据进行排序。修改:提供修改某条记录
2、的功能。移动:移动记录在通讯录中的存储位子,使其被查找或显示时的位序前移或后移。退出:结束程序运行。2,设计要求(1)设计通讯录数据的逻辑结构和物理结构。(2)通讯录至少包括下列数据信息:姓名,电话,单位等。(3)完成图示基本功能。(4)软件易用,操作简单。(5)根据自己使用通讯录体会扩充其他功能,如按姓名查找,按号码查找,按序号删除等。(6)设计足够多的测试用例(7)数据输入有效性检验:如姓名不能为空,号码中不能有非法字符等。(8)提供分组管理的相关功能,如:分组显示,加入组,组创建,组查询等。(9)可视化的界面设计。3,概要设计1,使用struct data struct addressL
3、ist定义结构体类型,struct data结构体中包括年月日的定义,strcut addressList中包括联系人ID账号,名字,性别,名族,生日,手机号码,QQ号码和家庭地址等。struct date int year; int month; int day; ; struct addressList char ID10; char name10; char gender4; char minzu2; date birthday; char shoujihao14; char QQ11; char address40; ;2,程序设计过程中用到的函数有:int zhujiemian( )
4、; void tianjia(fstream & ); void xiugai(fstream & );void shanchu(fstream & ); void chazhao(fstream & ); void liulan(fstream & ); int findRecord(fstream &, const char *); int getAmount(fstream & );3,整个程序用的是面向对象的方法,在主函数中调用各种函数,来实现通讯录的功能。在主函数中,使用的是c+语言中的开关语句(switch)用来选择通讯录的各种功能。4,在各个函数的编译过程中使用了system(“
5、cls)命令,进项清屏工作,在利用各种输出命令。,5,主界面设计为采用了单链表形式,使得选择更加方便,快速。程序段为:int zhujiemian( ) system(cls); int selection=0; cout*endl; cout 通讯录 endl; cout*endl; coutendl; cout 1、添加联系人信息endl; coutendl; cout 2、删除联系人信息endl; coutendl; cout 3、修改联系人信息endl; coutendl; cout 4、查询联系人信息endl; coutendl; cout 5、浏览联系人信息endl; couten
6、dl; cout 6、退出endl; cout *endl; coutselection; return(selection); 6,下面开始写各个函数,在函数中,采用了边做边存的思想,减少了工作量。,提供了是否正确打开通讯录的程序7,调用函数void tianjia(fstream &listFile )当打开方式正确时,输入联系人的信息ID账号,姓名,性别(男/女)民族,出生年月,手机号,QQ号,家庭住址等。以防信息的重复添加,还提供了添加提醒,当添加好一个联系人之后会提醒是否继续添加,或者是回到主界面,运用了while,if,选择语句,进行操作。程序代码如下:void tianjia(f
7、stream &listFile ) system(cls); cout*endl; cout 添加界面 endl; cout*endl; addressList a; char b,c; do (,ios:out|ios:app|ios:binary);if() cout打开通讯录失败!endl; exit(0); cout 请输入以下信息:endl;cout 学号:;cout”姓名:;cout 性别(男/女):;cout 民族:;cout 出生年-月-日: 手机号:;cout QQ号:;cout 家庭住址:;cout此信息已经添加!endl;(char *)&a,sizeof(a);( )
8、;cout是否继续添加?(Y/N)b;();();while(toupper(b)=Y);cout*endl;cout是否返回到主界面?(Y/N)c;if(toupper(c)=Y)main();elseexit(0);8,调用void xiugai (fstream&listFile)函数进行对通讯录的修改。用了if else语句判断输入的联系人信息是否正确,嵌套while语句,再用switch语句选择要修改的信息。程序片段如下:void xiugai(fstream &listFile )system(cls);cout*endl;cout 修改界面 endl;cout*endl;bool
9、 isExit=false;char modifyName10;coutmodifyName;(,ios:out|ios:in|ios:binary);if()cout打开通讯录失败!endl;exit(0);int pos=findRecord(listFile, modifyName);if(-1=pos)cout对不起,没有modifyName的信息!endl;elseaddressList temp;(long)(sizeof(addressList) * pos),ios:beg);(char*)&temp,sizeof(addressList);while(!isExit)int
10、selection=0;cout*endl;cout 1、IDendl;cout 2、姓名endl;cout 3、性别endl;cout 4、民族endl; cout 5、出生年-月-日endl; cout 6、手机号endl;cout 7、QQendl; cout 8、家庭住址endl; cout 9、返回上一层endl;cout*endl;coutselection;coutendl;switch(selection)case 1:cout原ID:endl;cout;();cout修改成功!endl; break;case 2:cout原姓名:endl; cout;( );cout修改成功
11、!endl;break;case 3:cout原性别:endl;cout;();cout修改成功!endl;break;case 4:cout原民族:endl;cout;();cout修改成功!endl;break;case 5:cout原出生年-月-日:setw(5)修改成功!endl;break;case 6:cout原手机号:endl;cout;();cout修改成功!endl;break;case 7:cout原QQ:endl;cout;();cout修改成功!endl;break;case 8:cout原地址:endl;cout;();cout修改成功!endl;break;case
12、 0:isExit=true;break;(long)(sizeof(addressList)pos),ios:beg);(char*)&temp,sizeof(addressList);( );();coutendl;9,调用用函数void shanchu(fstream&listFile)进行对联系人的删除,整个函数使用 while ,if else语句进行操作,未免误删,还要进行提示,是否确认删除并确定是否删除成功,用到语句仍是选择和循环语句。程序片段如下;、10,调用函数void chazhao (fstream &listFile )来查询联系人信息,程序通过联系人的姓名来查找。程序
13、片段如下:void chazhao(fstream &listFile )system(cls);cout*endl;cout 查询界面endl;cout*endl;char findName21=0,c;(,ios:out|ios:in|ios:binary);if()cout打开通讯录失败!endl;exit(0);coutfindName;int pos=findRecord(listFile, findName);if(-1=pos)cout对不起,没有findName 的信息!endl;elseaddressList temp;(long)(sizeof(addressList) *
14、 pos),ios:beg);(char*)&temp,sizeof(addressList);cout*endl;cout学号:endl;cout姓名:endl;cout性别(男/女):endl;cout民族:endl;cout出生年-月-日:setw(5)手机号:endl;coutQQ:endl;cout家庭住址:endl;();cout*endl;cout是否返回到主界面?(Y/N)c;if(toupper(c)=Y)main();elseexit(0);11,调用函数void liulan(fstream &listFile )来浏览之前添加并保存过的联系人。程序片段如下:void l
15、iulan(fstream &listFile )system(cls);cout*endl;cout 浏览界面 endl;cout*endl;addressList a;char b;int count=0;(,ios:in);if()cout打开通讯录失败!/n;exit(0);while(!()(char *)&a,sizeof(a);if()break;cout*endl;cout学号:endl;cout姓名:endl;cout性别(男/女):endl;cout民族:endl;cout出生年-月-日:setw(5) endl;cout手机号:endl;coutQQ:endl;cout家
16、庭住址:endl;cout*endl;count+;();if(count=0)cout该通讯录里没有记录!endl;cout是否返回到主界面?(Y/N)b;if(toupper(b)=Y)main();elseexit(0);12,调用函数void dineRecord(fstream &listFile, const char *pName)来进行通讯录内储存过联系人的查找。调出存储在电脑内指定位置的文件,进行查找。并用函数int getAmount(fstream &listFile )在查找之后返回文件中记录的个数。程序片段如下:/查找记录的记录号int findRecord(fstr
17、eam &listFile, const char *pName)int pos=-1;addressList Temp;(0L,ios:beg);(char*)&Temp,sizeof(addressList);while(!( )pos+;if(strcmp,pName)=0)return(pos);(char*)&Temp,sizeof(addressList);( );return(-1);/返回文件中记录的个数int getAmount(fstream &listFile )int amount=0;addressList temp;(0L,ios:beg);(char*)&temp
18、,sizeof(addressList);while(!( )amount+;(char*)&temp,sizeof(addressList);( );return amount;4,设计与体会一星期的课程设计就这样面临尾声,在课程设计之前,总觉得自己学的c+,java和数据结构没什么用武之地,直到课程设计让我们设计通讯录管理系统,才发现原来学好计算机语言和数据结构是一件多么有趣的事,不仅可以设计通讯录,还可设计游戏,这激发了我好好学习计算机语言的兴趣。在这次的课程设计当中,很多东西我都不太懂,除了会用一些基本的语句,编写一些函数之外,大部分程序还是向同学请教和网上参考的,在设计过程中遇到过很
19、多的难题,最多的一次,碰上了100多个错误,和n多警告,在经过很多次的调试修改之后,还是没调出理想的结果,当时就想放弃了。但是,看着同学们那么激情洋溢的调试程序,给了我继续下去的勇气。终于调出了基本符合的程序,用的是最简单语法。借鉴了边看边存的程序语段,才提升了我程序的档次。尽管这次课程设计快要结束了,但是我还是会继续完善我做的程序,让它变得更加全面。源程序附录:#include #include #include #include #include #include using namespace std; const char fileName=; /定义结构体struct date in
20、t year; int month; int day; ; struct addressList char xuehao10; char name10; char gender4; char minzu2; date birthday; char shoujihao14; char QQ11; char address40; ; /函数声明int zhujiemian( ); void tianjia(fstream & ); void xiugai(fstream & ); void shanchu(fstream & ); void chazhao(fstream & ); void li
21、ulan(fstream & ); int findRecord(fstream &, const char *); int getAmount(fstream & ); /主函数int main( ) bool Exit=false; fstream listFile; while(!Exit) switch(zhujiemian( ) case 1: tianjia(listFile); break; case 2: shanchu(listFile); break; case 3: xiugai(listFile); break; case 4: chazhao(listFile); b
22、reak; case 5: liulan(listFile); break; case 0: Exit=true; break; return 0; int zhujiemian( ) system(cls); int selection=0; cout*endl; cout 通讯录 endl; cout*endl; coutendl; cout 1、添加联系人信息endl; coutendl; cout 2、删除联系人信息endl; coutendl; cout 3、修改联系人信息endl; coutendl; cout 4、查询联系人信息endl; coutendl; cout 5、浏览联系人信息endl; coutendl; cout 6、退出endl; cout *endl; coutselection; return(selection); /添加联系人信息void tianjia(fstream &listFile ) system(cls); cout
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1