通讯录管理系统的设计与实现.docx
- 文档编号:22882886
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:37
- 大小:90.84KB
通讯录管理系统的设计与实现.docx
《通讯录管理系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《通讯录管理系统的设计与实现.docx(37页珍藏版)》请在冰豆网上搜索。
通讯录管理系统的设计与实现
课程设计报告
通讯录管理系的设计与实现
姓名:
钟婷英班级:
计122
学号:
39时间:
2014年1月10日
1,问题描述
通讯录是用来记载和查询联系人通讯信息的工具,电子通讯录已经为手机,电子词典等设备中不可缺少的工具软件,请设计一个能够满足这种需求的软件,基本功能模块如下图所示。
输入:
记录的录入。
显示:
通讯录的显示。
查找:
按指定方式,输入关键字,查找指定记录。
插入:
实现记录的添加或在指定位置插入记录。
保存:
将内存中正在被操作的通讯录以文件形式保存到磁盘。
读入:
保存的逆操作,讲存在磁盘中的通讯录文件读到内存中。
排序:
按指定关键字对通讯录数据进行排序。
修改:
提供修改某条记录的功能。
移动:
移动记录在通讯录中的存储位子,使其被查找或显示时的位序前移或后移。
退出:
结束程序运行。
2,设计要求
(1)设计通讯录数据的逻辑结构和物理结构。
(2)通讯录至少包括下列数据信息:
姓名,电话,单位等。
(3)完成图示基本功能。
(4)软件易用,操作简单。
(5)根据自己使用通讯录体会扩充其他功能,如按姓名查找,按号码查找,按序号删除等。
(6)设计足够多的测试用例
(7)数据输入有效性检验:
如姓名不能为空,号码中不能有非法字符等。
(8)提供分组管理的相关功能,如:
分组显示,加入组,组创建,组查询等。
(9)可视化的界面设计。
3,概要设计
1,使用structdatastructaddressList定义结构体类型,structdata结构体中包括年月日的定义,strcutaddressList中包括联系人ID账号,名字,性别,名族,生日,手机号码,QQ号码和家庭地址等。
structdate
{
intyear;
intmonth;
intday;
};
structaddressList
{
charID[10];
charname[10];
chargender[4];
charminzu[2];
datebirthday;
charshoujihao[14];
charQQ[11];
charaddress[40];
};
2,程序设计过程中用到的函数有:
intzhujiemian();
voidtianjia(fstream&);
voidxiugai(fstream&);
voidshanchu(fstream&);
voidchazhao(fstream&);
voidliulan(fstream&);
intfindRecord(fstream&,constchar*);
intgetAmount(fstream&);
3,整个程序用的是面向对象的方法,在主函数中调用各种函数,来实现通讯录的功能。
在主函数中,使用的是c++语言中的开关语句(switch)用来选择通讯录的各种功能。
4,在各个函数的编译过程中使用了system(“cls)命令,进项清屏工作,在利用各种输出命令。
5,主界面设计为
采用了单链表形式,使得选择更加方便,快速。
程序段为:
intzhujiemian()
{
system("cls");
intselection=0;
cout<<"***********************************************"< cout<<"※通讯录※"< cout<<"***********************************************"< cout< cout<<"1、添加联系人信息"< cout< cout<<"2、删除联系人信息"< cout< cout<<"3、修改联系人信息"< cout< cout<<"4、查询联系人信息"< cout< cout<<"5、浏览联系人信息"< cout< cout<<"6、退出"< cout<<"**********************************************"< cout<<"请选择: "; cin>>selection; return(selection); } 6,下面开始写各个函数,在函数中,采用了边做边存的思想,减少了工作量。 提供了是否正确打开通讯录的程序 7,调用函数voidtianjia(fstream&listFile)当打开方式正确时,输入联系人的信息ID账号,姓名,性别(男/女)民族,出生年月,手机号,QQ号,家庭住址等。 以防信息的重复添加,还提供了添加提醒,当添加好一个联系人之后会提醒是否继续添加,或者是回到主界面,运用了while,if,选择语句,进行操作。 程序代码如下: voidtianjia(fstream&listFile) { system("cls"); cout<<"*********************************************"< cout<<"※添加界面※"< cout<<"*********************************************"< addressLista; charb,c; do { ("",ios: : out|ios: : app|ios: : binary); if()) { cout<<"打开通讯录失败! "< exit(0); } cout<<"请输入以下信息: "< cout<<"学号: "< cin>>; cout<<”姓名: "< cin>>; cout<<"性别(男/女): "< cin>>; cout<<"民族: "< cin>>; cout<<"出生年-月-日: "< cin>>"手机号: "< cin>>; cout<<"QQ号: "< cin>>; cout<<"家庭住址: "< cin>>; cout<<"此信息已经添加! "< ((char*)&a,sizeof(a)); (); cout<<"是否继续添加? (Y/N)"< cin>>b; (); (); } while(toupper(b)=='Y'); cout<<"***************************************"< cout<<"是否返回到主界面? (Y/N)"< cin>>c; if(toupper(c)=='Y') main(); else exit(0); } 8,调用voidxiugai(fstream&listFile)函数进行对通讯录的修改。 用了ifelse语句判断输入的联系人信息是否正确,嵌套while语句,再用switch语句选择要修改的信息。 程序片段如下: voidxiugai(fstream&listFile) { system("cls"); cout<<"************************************************"< cout<<"※修改界面※"< cout<<"***********************************************"< boolisExit=false; charmodifyName[10]; cout<<"\n请输入要修改的联系人的姓名: "; cin>>modifyName; ("",ios: : out|ios: : in|ios: : binary); if()) { cout<<"打开通讯录失败! "< exit(0); } intpos=findRecord(listFile,modifyName); if(-1==pos) cout<<"对不起,没有"< "< else { addressListtemp; ((long)(sizeof(addressList)*pos),ios: : beg); ((char*)&temp,sizeof(addressList)); while(! isExit) { intselection=0; cout<<"***********************************"< cout<<"1、ID"< cout<<"2、姓名"< cout<<"3、性别"< cout<<"4、民族"< cout<<"5、出生年-月-日"< cout<<"6、手机号"< cout<<"7、QQ"< cout<<"8、家庭住址"< cout<<"9、返回上一层"< cout<<"***********************************"< cout<<"\n请输入要修改的选项: "; cin>>selection; cout< switch(selection) { case1: cout<<"原ID: "<<< cout<<"新ID: "; cin>>; (); cout<<"修改成功! "< break; case2: cout<<"原姓名: "<<< "; cin>>; (); cout<<"修改成功! "< break; case3: cout<<"原性别: "<<< cout<<"新性别: "; cin>>; (); cout<<"修改成功! "< break; case4: cout<<"原民族: "<<< "; cin>>; (); cout<<"修改成功! "< break; case5: cout<<"原出生年-月-日: "< <<"新出生年-月-日: "; cin>>"修改成功! "< break; case6: cout<<"原手机号: "<<< cout<<"新手机号: "; cin>>; (); cout<<"修改成功! "< break; case7: cout<<"原QQ: "<<< cout<<"新QQ: "; cin>>; (); cout<<"修改成功! "< break; case8: cout<<"原地址: "<<< cout<<"新地址: "; cin>>; (); cout<<"修改成功! "< break; case0: isExit=true; break; } } ((long)(sizeof(addressList) pos),ios: : beg); ((char*)&temp,sizeof(addressList)); (); (); } cout< } 9,调用用函数voidshanchu(fstream&listFile)进行对联系人的删除,整个函数使用while,ifelse语句进行操作,未免误删,还要进行提示,是否确认删除并确定是否删除成功,用到语句仍是选择和循环语句。 程序片段如下; 、 10,调用函数voidchazhao(fstream&listFile)来查询联系人信息,程序通过联系人的姓名来查找。 程序片段如下: voidchazhao(fstream&listFile) { system("cls"); cout<<"***********************************************"< cout<<"※查询界面※"< cout<<"***********************************************"< charfindName[21]={'\0'},c; ("",ios: : out|ios: : in|ios: : binary); if()) { cout<<"打开通讯录失败! "< exit(0); } cout<<"\n请输入要查找的同学的姓名: "; cin>>findName; intpos=findRecord(listFile,findName); if(-1==pos) cout<<"对不起,没有"< "< else { addressListtemp; ((long)(sizeof(addressList)*pos),ios: : beg); ((char*)&temp,sizeof(addressList)); cout<<"***************************************"< cout<<"学号: "<<< cout<<"姓名: "<<< cout<<"性别(男/女): "<<< cout<<"民族: "<<< cout<<"出生年-月-日: " < "<<< cout<<"QQ: "<<< cout<<"家庭住址: "<<< } (); cout<<"***************************************"< cout<<"是否返回到主界面? (Y/N)"< cin>>c; if(toupper(c)=='Y') main(); else exit(0); } 11,调用函数voidliulan(fstream&listFile)来浏览之前添加并保存过的联系人。 程序片段如下: voidliulan(fstream&listFile) { system("cls"); cout<<"***********************************************"< cout<<"※浏览界面※"< cout<<"***********************************************"< addressLista; charb; intcount=0; ("",ios: : in); if()) { cout<<"打开通讯录失败! /n"; exit(0); } while(! ()) { ((char*)&a,sizeof(a)); if()) break; cout<<"********************************************"< cout<<"学号: "<<< cout<<"姓名: "<<< cout<<"性别(男/女): "<<< cout<<"民族: "<<< cout<<"出生年-月-日: " < cout<<"手机号: "<<< cout<<"QQ: "<<< cout<<"家庭住址: "<<< cout<<"********************************************"< count++; } (); if(count==0) cout<<"该通讯录里没有记录! "< cout<<"是否返回到主界面? (Y/N)"< cin>>b; if(toupper(b)=='Y') main(); else exit(0); } 12,调用函数voiddineRecord(fstream&listFile,constchar*pName)来进行通讯录内储存过联系人的查找。 调出存储在电脑内指定位置的文件,进行查找。 并用函数intgetAmount(fstream&listFile)在查找之后返回文件中记录的个数。 程序片段如下: //查找记录的记录号 intfindRecord(fstream&listFile,constchar*pName) { intpos=-1; addressListTemp; (0L,ios: : beg); ((char*)&Temp,sizeof(addressList)); while(! ()) { pos++; if(strcmp,pName)==0) return(pos); ((char*)&Temp,sizeof(addressList)); } (); return(-1); } //返回文件中记录的个数 intgetAmount(fstream&listFile) { intamount=0; addressListtemp; (0L,ios: : beg); ((char*)&temp,sizeof(addressList)); while(! ()) { amount++; ((char*)&temp,sizeof(addressList)); } (); returnamount; } 4,设计与体会 一星期的课程设计就这样面临尾声,在课程设计之前,总觉得自己学的c++,java和数据结构没什么用武之地,直到课程设计让我们设计通讯录管理系统,才发现原来学好计算机语言和数据结构是一件多么有趣的事,不仅可以设计通讯录,还可设计游戏,这激发了我好好学习计算机语言的兴趣。 在这次的课程设计当中,很多东西我都不太懂,除了会用一些基本的语句,编写一些函数之外,大部分程序还是向同学请教和网上参考的,在设计过程中遇到过很多的难题,最多的一次,碰上了100多个错误,和n多警告,在经过很多次的调试修改之后,还是没调出理想的结果,当时就想放弃了。 但是,看着同学们那么激情洋溢的调试程序,给了我继续下去的勇气。 终于调出了基本符合的程序,用的是最简单语法。 借鉴了边看边存的程序语段,才提升了我程序的档次。 尽管这次课程设计快要结束了,但是我还是会继续完善我做的程序,让它变得更加全面。 源程序附录: #include #include #include #include<> #include #include usingnamespacestd; constcharfileName[]=""; //定义结构体 structdate { intyear; intmonth; intday; }; structaddressList { charxuehao[10]; charname[10]; chargender[4]; charminzu[2]; datebirthday; charshoujihao[14]; charQQ[11]; charaddress[40]; }; //函数声明 intzhujiemian(); voidtianjia(fstream&); voidxiugai(fstream&); voidshanchu(fstream&); voidchazhao(fstream&); voidliulan(fstream&); intfindRecord(fstream&,constchar*); intgetAmount(fstream&); //主函数 intmain() { boolExit=false; fstreamlistFile; while(! Exit) switch(zhujiemian()) { case1: tianjia(listFile); break; case2: shanchu(listFile); break; case3: xiugai(listFile); break; case4: chazhao(listFile); break; case5: liulan(listFile); break; case0: Exit=true; break; } return0; } intzhujiemian() { system("cls"); intselection=0; cout<<"***********************************************"< cout<<"※通讯录※"< cout<<"***********************************************"< cout< cout<<"1、添加联系人信息"< cout< cout<<"2、删除联系人信息"< cout< cout<<"3、修改联系人信息"< cout< cout<<"4、查询联系人信息"< cout< cout<<"5、浏览联系人信息"< cout< cout<<"6、退出"< cout<<"**********************************************"< cout<<"请选择: "; cin>>selection; return(selection); } //添加联系人信息 voidtianjia(fstream&listFile) { system("cls"); cout<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通讯录 管理 系统 设计 实现