C++通讯录设计.docx
《C++通讯录设计.docx》由会员分享,可在线阅读,更多相关《C++通讯录设计.docx(28页珍藏版)》请在冰豆网上搜索。
C++通讯录设计
宜宾职业技术学院
信
息
系
统
开
发
课题:
简单通讯录系统设计
小组成员:
肖家磊、吴娟、张倩
一、引言
1、设计系统的目的
随着当今世界经济的迅猛发展,通讯技术日益成熟,个人间的联系增加,个人对自己联系人信息的管理成为了一个重要的环节。
与此同时,通讯录系统就产生了。
设计这个系统的目的是为了设计一个能够便捷使用的电子通讯录,能够方便的存储信息,可以将这个系统应用到手机或其他电子设备中,方便存储联系人,为方便查找联系人的各种信息提供方便。
用C++语言设计一个通讯录的程序,具有输入、输出、查找、删除、退出等功能,其中通讯录至少应该有以下数据项:
姓名、地址和电话。
2、实现功能:
1)输入功能:
输入人员信息,并保存到文件中
2)查询功能:
能够根据电话精确查询人员信息
3)列出通讯录中所有记录
4)根据电话删除记录
5)删除某一记录
6)退出通讯录系统
3、设计系统的意义
电子通讯录系统没有使用纸张等,做到了环保,符合当今汉堡理念,这个系统使用户能够方便快捷的使用存储和查找等优势功能,且具有较高的安全性,能够有效保护用户联系人资料。
二、系统需求及功能分析
1、问题描述
根据需求,该系统所应包含的信息有以下一些:
通讯录的基本信息:
姓名、地址、电话
根据需求,该系统缩影实现的功能有以下一些:
各种基本数据的录入。
如通信录基本信息的录入。
各种基本数据的修改。
即允许对已录入的数据重新进行编译、修改。
列如修改通讯录中张三的电话信息
各种基本数据的删除。
列如将张三的信息从通讯录中删除。
基于各种数据的查询。
列如输入张三电话,查询张三的姓名和地址。
2、系统环境
采用C++语言实现,开发环境为VC++6.0
3、运行要求
能输入1000左右的通讯录信息
界面友好,操作方便。
三、该方案可行性分析及说明
1、经济可行性:
现在计算机的价格已经十分低廉,新能却有了长足的进步。
而本系统的开发,为学校的工作效率带来了一个质的飞越,为此主要表现有以下几个方面:
1)本系统的运行可以代替人工进行许多繁杂的劳动;
2)本系统的运行可以节省许多资源;
3)本系统的运行可以大大的提高学校的工作效率;
所以,本系统在经济上是可行的
2、技术可行性
本系统为一综合集成系统。
通过上面的新系统技术方案的分析,本系统的综合集成开发在技术上是完全可行的。
为方便的设计这个班级通讯录,我们选用的工具是VC++6.0软件,近年来随着因特网技术的飞速发展即用户需求的不断提升,VC++技术也不断推陈出新,使得VC++的功能越来越强大,能够提供的服务种类越来越繁多。
本系统的开发我们小组特地对本校进行了深入的调查研究。
学校拥有自己的网络及机房,并且各部门也有自己的电脑。
并且我们对用户提出的要求也都能满足。
综上所述,本系统的设计与开发在技术上和硬件设备上的条件都是满足的,因此,在技术上是可行的。
3、使用维护可行性
本系统用户目前最广泛的数据库开发工具记事本和PC计算机及WINDOWS操作系统,一般工作人员均可熟练的使用和维护,不需要更多地技术操作人员维护。
4、管理上的可行性
主要是管理人员是否支持,现有的管理制度和方法是否科学,规章制度是否齐全,。
原始数据是否正确等。
规章制度和管理方法为系统的建设提供了制度保障。
5、运行上的可行性
本系统为一个小型的新生管理系统,所耗费的资源非常的小,学校的电脑无论是硬件还是软件都能够满足条件,因此,本系统在运行上是可行的。
6、社会可行性
为方便同学之间的联系,不需要付费就可以免费获取班级同学的联系方式。
没有访问时间的限制可以随时随地查询班级同学的联系方式。
本系统设计花费较少,容易设计。
7、结论
综上所述,此系统开发目标已明确,在技术、社会和经济等方面都可行,并且投入少、见效快。
因此班级通讯录管理系统的开发是完全可行的。
四、系统设计
1、系统流程设计
根据系统要求,设计如下的系统流程
2、系统模块设计
根据系统的功能设计,主菜单包括这6个子菜单,1)创建,2)插入,3)删除,4)查找5)列出,6)退出。
详细内容如下模块所示:
1)主界面显示:
完成系统菜单的显示。
2)功能选择:
根据用户的选择,完成相应的功能。
3)通讯录信息的录入:
完成用户从界面输入通讯录,保存入系统的功能。
4)通讯录信息删除:
完成用户从界面输入需要的通讯录信息的姓名,并将其从系统中删除。
5)通讯录信息的搜索:
完成用户从界面输入通讯录的查询条件,在系统查询符合条件的通讯录信息,并在界面上显示的功能。
6)通讯录信息的退出:
完成用户从界面输入通讯录的信息,从系统界面中退出。
3、数据测试表
姓名
电话
地址
肖家磊
642243
四川省自贡市牛佛镇
吴娟
658806
四川省广安市武胜县
张倩
658581
贵州省贵阳市
张珊
652679
四川省宜宾市
以上就是一个主要的设计思路,对于管理系统的设计,我们采用结构体类型函数的嵌套结构来完成一步一步的来实现整个系统的完善性和可行性。
五、软件设计(源代码)
#include
#include
#include
#defineMAX1000//通讯录长度上限
usingnamespacestd;
classInformation//记录信息
{
public:
longlPhone;//电话
stringstrName;//姓名
stringstrAddress;//住址
public:
Information();
Information(long,string,string);
voidinsert(Information*);//在通讯录中插入记录
voidcreate(Information*);//创建通讯录
voidsearch(Information*);//查询记录
voidlist(Information*);//列出当前通讯录中所有信息
voiddel(Information*);//删除记录
voidmenu(Information*);//菜单
voidquit();//退出通讯录系统
voidprint(Information);//打印出一条记录
};
/////////////////////////
//Information构造函数
//////////////////////
Information:
:
Information()
{
//初始化各信息
lPhone=0;
strName="";
strAddress="";
}
/////////////////////////
//Information构造函数
//////////////////////
Information:
:
Information(longlPhone,stringstrName,stringstrAddress)
{
//初始化各信息
this->lPhone=lPhone;
this->strName=strName;
this->strAddress=strAddress;
}
////////////////
//Insert函数
/////////////
//在table中插入记录
voidInformation:
:
insert(Informationtable[])
{
//所需插入记录的信息
longlPhone;
stringstrName;
stringstrAddress;
cout<<"请输入信息:
\n\n";
cout<<"电话:
";
cin>>lPhone;
cout<<"姓名:
";
cin>>strName;
cout<<"住址:
";
cin>>strAddress;
intindex=lPhone%MAX;//以记录的电话为对象,进行哈希,方法为h(key)=keymodMAX
if(table[index].lPhone==0)//table中index所指的地方是空位
{
//插入
table[index].lPhone=lPhone;
table[index].strName=strName;
table[index].strAddress=strAddress;
}else//index所指的地方已其他记录被占用,发生冲突
{
for(inti=1;i{
intindex1=(index+i*i)%MAX;//二次探测再散列
intindex2=(index-i*i+MAX)%MAX;//二次探测再散列
if(table[index1].lPhone==0)//table中index1所指的地方是空位
{
//插入
table[index1].lPhone=lPhone;
table[index1].strName=strName;
table[index1].strAddress=strAddress;
break;
}
if(table[index2].lPhone==0)//table中index2所指的地方是空位
{
//插入
table[index2].lPhone=lPhone;
table[index2].strName=strName;
table[index2].strAddress=strAddress;
break;
}
}//for
}//else
}
/////////////////
//create函数
//////////////
//创建通讯录,通过往table中插入记录实现
voidInformation:
:
create(Informationtable[])
{
cout<<"开始创建通讯录...\n\n";
while(true)
{
insert(table);//插入记录到table
charYOrN;
cout<<"您想继续添加信息吗?
(Y/N)\n\n";
cin>>YOrN;
if(YOrN=='N')
{
cout<<"添加信息完毕!
\n\n";
break;
}elseif(YOrN!
='Y')
{
cout<<"输入不合法!
\n\n";
return;
}
}
}
//search函数
/////////////
//在table中查找记录,查找关键项为lPhone(电话)
voidInformation:
:
search(Informationtable[])
{
longlNum;
cout<<"请输入您要查找的电话号码\n\n";
cin>>lNum;
//试探从table中获取查找信息
intindex1=lNum%MAX;
if(table[index1].lPhone!
=0)
{
if(table[index1].lPhone==lNum)//找到所查记录
{
cout<<"您要的通讯录资料为:
\n\n";
print(table[index1]);
}else
{
intindex2,index3;
for(inti=1;i{
index2=(index1+i*i)%MAX;
if(table[index2].lPhone==lNum)//找到所查记录
{
cout<<"您要的通讯录资料为:
\n\n";
print(table[index2]);
break;
}
index3=(index1-i*i+MAX)%MAX;
if(table[index3].lPhone==lNum)//找到所查记录
{
cout<<"您要的通讯录资料为:
\n\n";
print(table[index3]);
break;
}
}
if(i>MAX)//没有找到
{
cout<<"对不起,没有您要的通讯录资料!
\n\n";
}
}
}else//没有找到
{
cout<<"对不起,没有您要的通讯录资料!
\n\n";
}
}
//////////////
//list函数
////////////
//列出table中当前所有记录
voidInformation:
:
list(Informationtable[])
{
cout<<"----------以下为表中所有信息------------\n\n";
intflag=0;
for(inti=0;i{
if(table[i].lPhone!
=0)
{
flag++;
print(table[i]);
}
}
if(flag==0)//空表
{
cout<<"当前通讯录中没有记录!
\n\n";
}
}
////////////
//del函数
//////////
//在table中删除记录,以lPhone(电话)为关键项
voidInformation:
:
del(Informationtable[])
{
cout<<"请输入您要删除记录的电话:
";
longlPhone;
cin>>lPhone;
intflag=0;
for(inti=0;i{
if(table[i].lPhone==lPhone)//找到了
{
flag++;//表示所需删除记录在通讯录中
//删除
table[i].lPhone=0;
table[i].strName="";
table[i].strAddress="";
}
}
if(flag==0)//没有找到
{
cout<<"通讯录中不存在此记录!
\n\n";
}
}
///////////////
//menu函数
/////////////
//菜单
voidInformation:
:
menu(Informationtable[])
{
cout<<"--------欢迎进入通讯录系统--------\n\n";
cout<<"create-------创建通讯录\n\n";
cout<<"insert-------插入记录\n\n";
cout<<"delete-------删除某一记录\n\n";
cout<<"list-------列出通讯录中所有记录\n\n";
cout<<"search-------根据电话查询记录\n\n";
cout<<"quit-------退出\n\n";
cout<<"请选择:
";
stringstrMenu;
cin>>strMenu;
intflag=0;//判断是否进了合法输入
if(strMenu=="create")
{
flag++;
create(table);
}
if(strMenu=="insert")
{
flag++;
insert(table);
}
if(strMenu=="delete")
{
flag++;
del(table);
}
if(strMenu=="list")
{
flag++;
list(table);
}
if(strMenu=="search")
{
flag++;
search(table);
}
if(strMenu=="quit")
{
flag++;
quit();
}
if(flag==0)
{
cout<<"输入不合法!
\n\n";
}
}
/////////////
//quit函数
///////////
//退出通讯录
voidInformation:
:
quit()
{
return;
}
//////////////
//print函数
////////////
//打印出记录record的信息
voidInformation:
:
print(Informationrecord)
{
cout<<"电话:
"<<<"姓名:
"<<<"住址:
"<<}
//////////////
//main函数
////////////
intmain()
{
Informationtable[MAX];
Informationobj;
charYOrN;
while(true)
{
obj.menu(table);//进入通讯录系统
cout<<"您想退出吗?
(Y/N)\n\n";
cin>>YOrN;
if(YOrN=='Y')
break;
elseif(YOrN!
='N')
cout<<"输入不合法!
\n\n\n";
}
return0;
}
六、测试情况
运行程序,首页显示如下
1)创建通讯录人员:
输入create创建通讯录,弹出电话号码、姓名、住址,并填入相关信息,一个简单的学生信息录入完毕。
运行后结果如下:
当一个同学的信息录入完毕后,窗口会弹出“你想要继续添加信息吗?
”输入Y后,窗口会弹出“请输入信息——电话、姓名、地址,”输入完毕后,窗口会再一次弹出“你想要继续添加信息吗?
”运行结果如下图所示:
2)插入通讯录人员记录:
创建完成通讯录后,想要再录入信息,可以输入insert就可以插入信息记录,程序也和创建通讯录一样,运行结果如下图所示:
3)删除通讯录人员记录:
想要删除某个同学的信息,可以手动输入delete,窗口弹出“请输入你要删除记录的电话”手动录入后,窗口会弹出“你想要退出吗?
”
输入Y后,任意一个键按下,窗口就会消失。
如果输入N,则重新进入通讯录系统。
运行图如下图所示:
4)列出通讯录中所有人员记录:
在通讯录系统界面,请选择list列出通讯录中所有记录,系统根据所创建的通讯录,调出所有同学的电话号码、姓名、地址等信息。
具体信息如下图所示:
5)根据电话查询记录:
在请选择区域输入search,系统会弹出“请输入您要查找的电话号码”,输入电话号码后,系统会调取以前建好的通讯录记录,显示“您要的通讯录资料为”。
结果如下图所示:
6)显示搜索查询的记录:
显示完毕后,系统会弹出“你想退出吗?
”如果输入N,则返回主菜单,否则按任意键,退出该系统。
运行结果如下图所示:
7)退出通讯录系统:
输入quit系统弹出“您想要退出吗?
”输入Y系统显示“Pressanykeytocontinue”按任意键退出改程序,运行如下图所示:
七、总结
通过设计通讯录系统,我体会到很多,完成一个程序的设计必须要有同伴的支持和合作,必须要跟同伴讨论商量,共同努力才有可能设计出一个好的程序,遇到困难不能轻易放弃,在编这个程序的时候遇到了很多难题,后来在和同学的商量和帮助之下终于将遇到的难题一一解决,我们深深体会到遇到难题不要轻易放弃,还有要多借鉴别人的经验,多阅读一些书籍,编写程序的时候要细心,一点点的错误程序就可能导致程序编译失败,所以要做到一丝不苟。
我们在这次实训中这个程序让我巩固了C++所学的基本课程,提高了C++语言编程的综合应用能力以及C++语言程序的编译、调试方式。
不仅如此,它让我掌握到了C++语言中的基本数据输入、输出;熟练使用C++语言中的三种基本结构的使用,使用数组和函数调用;还有学习与熟练使用C++语言的指针和结构体。
该实训的过程既漫长又艰苦,因为我们花了很多的时间去完成,在这个过程中是一个艰苦的过程,我们克服了困难。
而经过小组讨论和分析之后,我们大概清楚了作此项目的基本过程,首先先编写程序并调试程序,创建联系人,插入联系人,显示所有联系人的信息,查找联系人信息,删除联系人的信息,退出系统的头文件和源文件。
经过小组的努力,我们终于完成了这个项目。
课程设计是培养我们的综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
随着科学技术发展的日异月新,而我们作为学生需要跟上时代的发展,而这就要我们通过这些实训来锻炼自己了。
通过学习,使我们小组人员对C++编程语言有了更进一步的认识和了解,要想学好C++重在实践才能更好的编写程序,通过实践,发现我们存在很多的不足,首先就是对C++程序语言的一些标准函数还不够了解,还有就是对函数的调用的正确使用不够熟悉,还有对变成过程中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。
用C++语言做项目,我们收获的心得颇多,的确,从理论到实践需要花费很多时间。
可以说是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上没有学到过的知识。
通过哦这次课程设计使我懂得了理论和实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正的为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,同时在设计中发现自己的不足之处,对以前所学过的知识理解不够深刻,掌握不够牢固,通过这次课程设计之后,一定把以前所学到过的知识重新温故。