通讯录管理系统的设计与实现.docx
《通讯录管理系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《通讯录管理系统的设计与实现.docx(34页珍藏版)》请在冰豆网上搜索。
通讯录管理系统的设计与实现
课程设计报告
通讯录管理系的设计与实现
姓名:
钟婷英班级:
计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语句进行操作,未免误删,还要进行提示,是否确认删除并确定是否删除成功,用到语句仍是选择和循环语句。
程序片段如下;
、
开始
是否删除
已删除
结束
y
n
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<<"***"<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<<"出生年-月-日:
"<