c通讯录管理系统.docx
《c通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《c通讯录管理系统.docx(31页珍藏版)》请在冰豆网上搜索。
c通讯录管理系统
《通讯录管理系统》
专业:
班级:
软件112班
姓名:
常婉娜
学号:
201101014201
指导教师:
郭永锋
4.7排序记录13
5.6查询记录源代码21
5.6排序记录源代码21
6.2增加记录23
1.课程设计目的
1.1课程设计的目的
C/C++课程设计是将C/C++理论教学与实践环节相结合的关键步骤,为学生提供了一个既动手又动脑,将课本上的理论知识和实践有机的结合起来,独立分析和解决实际问题的机会。
通过本次课程设计,使学生:
●进一步学习和巩固C/C++课程的核心内容,加深对面向过程(或对象)程序设计思想的正确理解。
●提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。
培养学生结构化程序、模块化程序设计的方法和能力。
●熟练掌握C/C++程序设计技能及上机调试方法,为今后学习其他专业课程打好基础。
具备一定的计算机应用及软件开发能力,培养独立分析问题、解决问题及查阅资料、获取新知识的能力,以适应技术不断更新的计算机行业特点
1.2课程设计的题目
通讯录管理。
1.3题目要求
1.3.1问题描述(功能要求):
学生信息包括:
编号,分组,姓名,固话,手机号,QQ号码,E-mail,家庭住址。
(1)能建立、修改和增删学生通讯录
(2)能够按多种方式进行查询
1.3.2.问题的解决方案:
根据系统功能要求,可以将问题解决分为以下步骤:
(1)分析系统中的各个实体之间的关系及其属性和行为;
(2)根据问题描述,设计系统的类层次;
(3)完成类层次中各个类的描述(包括属性和方法);
(4)完成类中各个成员函数的定义;
(5)完成系统的应用模块;
(6)功能调试;
(7)完成系统总结报告以及系统使用说明书。
2.需求分析
2.1功能需求分析
通讯录主要有以下模块:
通讯录界面设计、添加记录、删除记录、显示记录、修改记录、查询记录,排序记录。
2.1.1通讯录主菜单
主要功能是设计通讯录的界面,能够提示用户的实际操作等。
按照序号来实现相应的操作,其中:
添加记录,删除记录,显示记录,修改记录,查询记录,退出系统。
2.1.2通讯录添加记录模块
增加一个或几个人的记录,并可选择继续输入或退出
2.1.3通讯录删除记录模块
删除已输入的记录。
输入姓名查找要删除的记录,若找到,提示是否确定删除,若选择是,则删除该人信息,若选择否,则取消;若没找到,提示无此人信息。
2.1.6通讯录查询记录模块
可按姓名查找某人记录,也可查找某个组的所有记录。
若找到,则显示所有人的记录,否则提示未找到,无论查找成功否,应还可选择继续查找或退出。
2.1.4通讯录显示记录模块
主要是显示所有的联系人的信息
2.1.5通讯录修改记录模块
修改某人的记录。
输入姓名并查找,若找到,显示该人的所有信息,并可进行修改;否则提示无此人信息
2.1.6通讯录登录模块
该模块在进入主界面之前先执行,用于对进入系统的用户进行身份验证,若用户输入正确的用户名及用户密码,则进入主界面,否则输入超过3次错误则退出程序。
处理方法:
用户名及用户密码可保存在一文件中,校验时从文件中读入数据进行校验。
在系统中应增加一个用户管理模块,在其中可新增用户,修改用户信息等。
2.1.7通讯录排序记录模块
可分别按分组、编号或姓名进行排序
2.1.8通讯录系统帮助模块
显示开发者姓名、班级、开发完成日期、版本号和指导老师等信息。
2.1.8通讯录退出模块
2.2方法需求分析
该系统由于数据可能会很大,故采用文件操作,能够打开或修改指定文件及将多个文件组成一个文件。
而联系人的信息则通过类的对象来保存,它完全使用类来实现,充分体现面向对象的程序设计特点。
3.概要设计
3.1系统功能模块图
2.1系统功能模块图
通讯录系统
添加联系人
删除联系人
查询联系人
修改信息
显示所有联系人
排序联系人
系统帮助
退出
登陆
3.2设计思想
通讯录系统是用面向对象的方法设计,在类中定义add_person(),del_person(),show_all(),alter(),select(),save_new()等方法和num,name,group,phone,hpone,addr,email,QQ等属性来实现通讯录的各种操作。
3.3主要代码描述
3.31添加联系人的实现;
通过输入联系人的如下信息:
姓名、电话、QQ、邮编、地址,固化,编号,分组,并把输入的信息保存对象的属性,创建或者打开文件,并向文件中写入新添加的联系人信息
voidcomm_info:
:
add_users()
{
system("cls");
charm='Y';
cout<<"请添加联系人:
"<cout<cout<";
cin>>name;
cout<";
cin>>num;
cout<";
cin>>group;
cout<";
cin>>hphone;
cout<";
cin>>mphone;
cout<";
cin>>qq;
cout<";
cin>>email;
cout<";
cin>>addr;
save_new();
cout<"<cout<<"是否继续添加(Y/N)?
"<cin>>m;
if(m=='Y')
{
add_users();
}
else
{
menu();
}
system("cls");
}
3.32删除联系人的实现
首先输入你要删除姓名,删除操作时采用输入的姓名与文件中的姓名比较,从头到尾开始遍历,如果没有的话,将提示:
对不起!
!
!
联系人中没你要找的人!
!
!
如果找到,则提示删除联系人的所有信息和这个人的信息已经从你的通讯录中删除的信息!
voidcomm_info:
:
del_users()
{
ofstreamoutData("temp.txt",ios:
:
out);//?
?
ifstreaminData("comm_info.txt",ios:
:
in);//?
?
if(!
outData||!
inData)
{
cout<"<system("pause");
return;
}
stringsign;
cout<";
cin>>sign;
boolflag=true;
stringstr;
while(inData>>name)
//inData>>name:
从inData读入一个字符串,直到遇到文件结束符其值才为假
{
getline(inData,str);//读取一行字符,然后文件指针指向下一行开头
if(name==sign)
{
//如果删除的姓名匹配则将这个人信息输出
cout<"<cout<flag=false;
break;//跳出循环
}
//程序没有跳出出循环说明姓名不匹配,然后将这些人信息存入临时文件
outData<}
if(flag)
{
cout<"<}
else
{
while(getline(inData,str))
{
outData<}
outData.close();//关闭comm_info.txt文件
inData.close();//关闭temp.txt文件
charm='Y';
cout<"<cin>>m;
if(m=='Y')
{
//下面就将临时文件中的记录重新输出到原始文件,因为临时文件中存放的都是不匹配的信息,这样就达到了删除的效果
ofstreamout("comm_info.txt",ios:
:
out);//?
?
ifstreamin("temp.txt",ios:
:
in);
if(!
out||!
in)
{
cout<<"对不起不能打开文件!
"<system("pause");
return;
}
while(getline(in,str))
{
out<}
out.close();//?
?
in.close();
cout<<"此人的的信息已从通讯录中删除!
"<}
else
menu();
}
system("pause");
menu();
}
3.33显示所有联系人的实现:
把文件中的各种信息读取并显示出来,代码如下
voidcomm_info:
:
show_users()
{
ifstreaminData("comm_info.txt",ios:
:
in);
if(!
inData)
{
cout<<"对不起,没有找到您需要的文件!
"<system("pause");
return;
}
boolfalg=true;
stringstd;
while(getline(inData,std))//?
?
{
if(falg)
{
cout<<"所有联系人信息如下:
"<}
cout<falg=false;
}
if(falg)
{
cout<"<}
else
cout<"<inData.close();
system("pause");
menu();
3.34查询联系人模块
对文件进行遍历,将联系人的所有信息都显示出来。
具体代码见3.4中。
3.35修改联系人模块
只要输入来联系人的名字,进行文件爱你的遍历查找到联系人的信息,而后进行修改。
具体代码见3.4中。
3.36排序通讯录模块
只要输入来联系人的名字,进行文件爱你的遍历查找到联系人的信息,而后进行排序。
具体代码见3.4中。
3.37登陆通讯录模块
该模块在进入主界面之前先执行,用于对进入系统的用户进行身份验证,若用户输入正确的用户名及用户密码,则进入主界面,否则输入超过3次错误则退出程序,具体代码见3.4中。
3.38系统帮助通讯录模块
显示开发者姓名、班级、开发完成日期、版本号和指导老师等信息。
具体代码见3.4中。
3.38关闭通讯录模块
提示谢谢使用!
具体代码见3.4中。
3.4程序详细代码
#include
#include//
#include
#include//输入/输出文件流类,实现输入/输出
#include
#include//容器
#include//sort排序
usingnamespacestd;
//登录
intlogin(stringusename,stringpwd)
{
if(usename=="changwanna"&&pwd=="201")
return1;
else
return0;
}
classcomm_info//类
{
public:
stringlogin();
voidmenu();
voidadd_users();//添加
voidfind_users();//查找
voiddel_users();//删除
voidedit_users();//修改
voidsort_users();//排序
friendboolcomp(constcomm_info&a,constcomm_info&b);
voidshow_users();//显示所有人信息
voidhelp();//系统帮助
voidsave_new();//保存新增加的联系人
voidleave();
private:
stringname;//姓名
longnum;//编号
chargroup[16];//分组
charhphone[16];//固话home_phone
charmphone[16];//手机号mobile_phone
charqq[16];//QQ号码
charemail[20];//e-mail地址
stringaddr;//家庭住址或通信地址
};
//首页
voidcomm_info:
:
menu()
{
comm_infoinfo;
system("cls");//清屏
intn;
cout<cout<cout<cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<cout<<"\t※欢迎进入通讯录管理系统!
※"<cout<<"\t※1添加※"<cout<<"\t※2查询※"<cout<<"\t※3删除※"<cout<<"\t※4修改※"<cout<<"\t※5排序※"<cout<<"\t※6显示所有人信息※"<cout<<"\t※7系统帮助※"<cout<<"\t※8退出※"<cout<<"\t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★"<cout<";
cin>>n;
system("cls");
switch(n)
{
case1:
cout<case2:
cout<case3:
cout<case4:
cout<case5:
cout<case6:
cout<case7:
cout<case8:
info.leave();break;
}
}
//添加联系人
voidcomm_info:
:
add_users()
{
system("cls");
charm='Y';
cout<<"请添加联系人:
"<cout<cout<";
cin>>name;
cout<";
cin>>num;
cout<";
cin>>group;
cout<";
cin>>hphone;
cout<";
cin>>mphone;
cout<";
cin>>qq;
cout<";
cin>>email;
cout<";
cin>>addr;
save_new();
cout<"<cout<<"是否继续添加(Y/N)?
"<cin>>m;
if(m=='Y')
{
add_users();
}
else
{
menu();
}
system("cls");
}
//保存新增加的联系人
voidcomm_info:
:
save_new()
{
ofstreamoutData("comm_info.txt",ios:
:
app);//ofstreamoutData定义输出文件流对象outData;"ios:
:
app"使添加信息不被覆盖,追加文件
if(!
outData)
{
cout<<"打开文件失败!
"<system("pause");
return;
}
outData<outData.close();//文件关闭
}
//查找联系人
voidcomm_info:
:
find_users()
{
ifstreaminData("comm_info.txt",ios:
:
in);//输入文件,创建一个输入文件流对象inDate,输入文件为程序所在文件夹中的名为info.txt的文件(如同cin输入一样)
if(!
inData)
{
cout<<"对不起,没有找到您所需要的文件!
"<system("pause");
return;
}
stringsign;
cout<";
cin>>sign;
boolflag=true;
stringstr;
while(inData>>name)
{
getline(inData,str);//str存储读入的内容,必为string类
if(name==sign)
{
cout<"<cout<flag=false;
break;
}
}
if(flag)//flag==true
{
cout<cout<<"对不起,此联系人不存在!
"<}
inData.close();
//system("cls");
cout<<"是否继续查找?
(Y/N)";
charm='Y';
cin>>m;
if(m=='Y')
{
find_users();
}
else
{
menu();
}
system("cls");
}
//删除联系人
voidcomm_info:
:
del_users()
{
ofstreamoutData("temp.txt",ios:
:
out);//?
?
ifstreaminData("comm_info.txt",ios:
:
in);//?
?
if(!
outData||!
inData)
{
cout<"<system("pause");
return;
}
stringsign;
cout<";
cin>>sign;
boolflag=true;
stringstr;
while(inData>>name)
//inData>>name:
从inData读入一个字符串,直到遇到文件结束符其值才为假
{
getline(inData,str);//读取一行字符,然后文件指针指向下一行开头
if(name==sign)
{
//如果删除的姓名匹配则将这个人信息输出
cout<"<cout<flag=false;
break;//跳出循环
}
//程序没有跳出出循环说明姓名不匹配,然后将这些人信息存入临时文件
outData<}
if(flag)
{
cout<"<}
else
{
while(getline(inData,str))
{
outData<}
outData.close();//关闭comm_info.txt文件
inData.close();//关闭temp.txt文件
charm='Y';
cout<"<cin>>m;
if(m=='Y')
{
//下面就将临时文件中的记录重新输出到原始文件,因为临时文件中存放的都是不匹配的信息,这样就达到了删除的效果
ofstreamout("comm