C++类实现通讯录功能_第1页
C++类实现通讯录功能_第2页
C++类实现通讯录功能_第3页
C++类实现通讯录功能_第4页
C++类实现通讯录功能_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第C++类实现通讯录功能本文实例为大家分享了C++类实现通讯录功能的具体代码,供大家参考,具体内容如下

软件使用的是MicrosoftVisualStudio

编写通讯录之前,先思考一下要实现什么功能,大概的结构,要创建几个类等等。

首先,是思考要实现什么功能。

一般的通讯录有添加,删除,修改,查找,显示等功能,一般联系人的信息包括:姓名,性别,年龄,电话号码,家庭地址。

我们首先新建一个类,用来初始化姓名,年龄,性别,电话号码,家庭地址,这几个变量

#pragmaonce

#includeiostream

#includestring

//#include"MailList.hpp"

usingnamespacestd;

classMailList

public:

voidsetName(string);//给变量赋值函数

voidsetAge(string);

voidsetSex(string);

voidsetTel(string);

voidsetAddress(string);

stringgetName();//返回变量值函数

stringgetAge();

stringgetSex();

stringgetTel();

stringgetAddress();

private:

stringname;//私有函数成员,定义变量

stringage;

stringsex;

stringtel;

stringaddress;

voidMailList::setName(stringname)

this-name=name;

voidMailList::setAge(stringage)

this-age=age;

voidMailList::setSex(stringsex)

this-sex=sex;

voidMailList::setTel(stringtel)

this-tel=tel;

voidMailList::setAddress(stringaddress)

this-address=address;

stringMailList::getName()

returnthis-name;

stringMailList::getAge()

returnthis-

stringMailList::getSex()

returnthis-

stringMailList::getTel()

returnthis-

stringMailList::getAddress()

returnthis-address;

}

这里也可以使用构造函数初始化函数成员,构造函数函数名与类名一样。

然后,创建一个通讯录管理类,先把总的结构搭建起来

classMailListManager//通讯录管理类

public:

MailListManager();//构造函数

voidinitList();//初始化通讯录功能,在通讯录里记录为空时使用

voidinsertList();//添加联系人功能,在通讯录里有记录时使用

voidshowList();//显示联系人功能,显示通讯录中所有联系人的记录

voiddeleteList();//删除联系人功能

voidselectList();//查找联系人功能

voidupdateList();//修改联系人功能

voiddropList();//清空通讯录功能

voidsave();//保存到文件,文件的写入

voidloading();//加载,读出文件

stringpw();//密码加密(我没能实现)

intexiet(string);//检查联系人是否存在

private:

MailListmail[Max];//数组,MailList类型,这属于实例化对象

intlen;//计数器

MailListManager::MailListManager()//构造函数就是用来初始化函数成员的,未初始化的函数成员不可用。这里初始化一下计数器

len=0;

intMailListManager::exiet(stringname)//定义检查函数,检查联系人是否存在,以姓名的匹配为条件

voidMailListManager::loading()//定义加载函数

voidMailListManager::save()//定义保存函数

voidMailListManager::initList()//定义初始化函数

voidMailListManager::insertList()//定义添加函数

voidMailListManager::showList()//定义显示函数

voidMailListManager::updateList()//定义修改函数

voidMailListManager::deleteList()//定义删除函数

voidMailListManager::selectList()//定义查找函数

voidMailListManager::dropList()//定义清空函数

}

总结构搭建好后,再开始编写里面的定义内容。

//这里声明部分就不显示了,直接看定义

voidMailListManager::loading()//加载函数的定义

len=0;//计数器len,每次调用加载函数的时候都要重新初始化为0,这样做是防止之后添加联系人时重复加载导致保存多次。

stringname,sex,age,tel,address;//局部变量,每次使用都要声明一下的

ifstreamin;//实例化文件类“fstream”对象

in.open("maillist/mail.txt");//打开文件

if(!in)//如果文件未打开

{

cout"--文件打开失败--"endl;

system("pause");

}

else

{

while(!in.eof())//如果未达到文件末尾

{

innameagesexteladdress;

if(in.fail())break;//ifstream类的作用是从文件中读出数据到控制台上,但没有显示出来,这就相当于再次赋值给数组,就是给之前声明的MailList类的数组,所以这里使用数组mail[*].***保存数据,因为不知道到底有多少数据,所以用死循环来控制,跳出条件是达到文件末尾就跳出,这样就可以保证将文件中的内容全部存到数组里

mail[len].setName(name);

mail[len].setAge(age);

mail[len].setSex(sex);

mail[len].setTel(tel);

mail[len].setAddress(address);

len++;

}

}

in.close();

intMailListManager::exiet(stringname)//检验联系人是否存在

for(inti=0;ilen;i++)//每当调用检验联系人的函数之前,一定要加载一下,让数据全部保存到控制台的数组中,且要从控制台输入一个名字传给检验联系人函数,让传入的名字与数组中的数据逐一对比,从而检验联系人是否存在

{

if(mail[i].getName()==name)

{

returni;//如果存在,返回数组下标

}

}

return-1;//不存在,返回-1

voidMailListManager::save()//保存文件函数

ofstreamout;//ofstream类的作用是把控制台上的数据写入文件

out.open("maillist/mail.txt");//打开文件

if(!out)//如果文件未打开

{

cout"--文件打开失败--"endl;

}

else

{

for(inti=0;ilen;i++)//这里的计数器len的值来自之后定义的函数中,len的值取决于谁调用的保存函数

{

outmail[i].getName()""mail[i].getAge()""mail[i].getSex()""mail[i].getTel()""mail[i].getAddress()endl;

}

}

out.close();

voidMailListManager::initList()//初始化联系人。之前我先写了添加,修改,删除,在解决一些问题的时候发现添加功能调用加载函数与删除修改功能调用加载函数有冲突,导致重复显示,所以在老师的帮助下加入了这个初始化联系人功能,当然有更好的方法,只是我暂时还不会用(TvT)

stringname,age,sex,tel,address;

cout"请输入联系人的信息(在姓名后输入stop停止输入):"endl;

while(true)

{

cout"姓名:";

cinname;

if(name=="stop")break;

else

{

mail[len].setName(name);//简单的调用函数,不想讲了

cout"年龄:";

cinage;

mail[len].setAge(age);

cout"性别:";

cinsex;

mail[len].setSex(sex);

cout"电话号码:";

cintel;

mail[len].setTel(tel);

cout"家庭地址:";

cinaddress;

mail[len].setAddress(address);

len++;//这个len最终的值会给到save.....emmm..说“给”好像不太准确,找不到合适的词了,反正代码顺着往下执,len加到最后不会再变了,save直接用它。

}

}

save();

voidMailListManager::insertList()//添加联系人函数

this-loading();//加载一下初始化联系人的数据

stringname,age,sex,tel,address;//局部变量要重新声明

cout"请输入插入联系人的数量:"endl;

intcount=0;//再来个计数器,控制每次想要添加的联系人的数量

cincount;//让用户来指定每次添加多少人

for(inti=0;icount;i++)

{

cout"姓名:";

cinname;

mail[i].setName(name);//函数调用过程,还是说一下吧。mail[]数组的类型是MailList,然后它是MailListManager这个类的函数成员,通过它作为桥梁来调用MailListManager类成员函数

cout"年龄:";

cinage;

mail[i].setAge(age);

cout"性别:";

cinsex;

mail[i].setSex(sex);

cout"电话号码:";

cintel;

mail[i].setTel(tel);

cout"家庭地址:";

cinaddress;

mail[i].setAddress(address);

}

ofstreamout;//添加有单独的保存文件定义,因为只有添加功能需要使用文件追加

out.open("maillist/mail.txt",ios::app);

if(!out)

{

cout"--文件打开失败--"endl;

}

else

{

for(inti=0;icount;i++)

{

outmail[i].getName()""mail[i].getAge()""mail[i].getSex()""mail[i].getTel()""mail[i].getAddress()endl;

}

out.close();

}

voidMailListManager::showList()//显示联系人

loading();

MailListtemp;

for(intj=0;jj++)//这里是给联系人排序,通过名字排序

{

for(inti=j+1;ilen;i++)

{

if(mail[j].getName()mail[i].getName())

{

temp=mail[i];

mail[i]=mail[j];//交换

mail[j]=temp;

}

}

}

for(inti=0;ilen;i++)//这里的len值来自loading()

{

coutsetw(10)mail[i].getName()"

"setw(8)mail[i].getAge()"

"setw(4)

mail[i].getSex()"

"setw(15)mail[i].getTel()"

"setw(20)mail[i].getAddress();//setw()是格式控制函数

coutendlendl;

}

voidMailListManager::updateList()//修改联系人,修改联系人之前要找到这个联系人,存在才能删除

loading();//加载一下

stringname,age,sex,tel,address;

cout"请输入要修改的联系人姓名:";

cinname;

intret=exiet(name);//检验一下是否存在,存在exiet()会返回该联系人所在的数组下标,在这个数组下标里重新输入一遍数据覆盖掉原有数据就是修改联系人了

if(ret!=-1)

{

cout"请重新输入联系人信息:"endl;

cout"姓名:";

cinname;

mail[ret].setName(name);

cout"年龄:";

cinage;

mail[ret].setAge(age);

cout"性别:";

cinsex;

mail[ret].setSex(sex);

cout"电话号码:";

cintel;

mail[ret].setTel(tel);

cout"家庭地址:";

cinaddress;

mail[ret].setAddress(address);

}

else

cout"啊哦~联系人不存在喔(-o-)";

save();//改完记得重新保存一下,不然是没有任何改动的哦

voidMailListManager::deleteList()//删除联系人,理同修改一样,只不过是信息的覆盖变为了内容前移覆盖

loading();

stringname;

into;

cout"请输入要删除的联系人的姓名:

";

cinname;

intret=exiet(name);

if(ret==-1)

{

cout"啊哦~联系人不存在喔(-o-)";

}

else

{

cout"确定要删除吗?"endl"1.确定""

""2.我再想想"endl"请选择:";

cino;

if(o==2)

cout"好的~";

else

{

for(inti=ret;ilen;i++)

{

mail[i]=mail[i+1];

}

cout"删除成功!";

}

}

save();

voidMailListManager::selectList()//查找联系人,查找联系人就更简单啦,调用一下检验存在的函数,然后根据下标直接输出此联系人信息就好

loading();

stringname;

cout"请输入要查找的人的姓名:

";

cinname;

intret=exiet(name);

if(ret!=-1)

{

cout"姓名:"mail[ret].getName()endl;

cout"年龄:"mail[ret].getAge()endl;

cout"性别:"mail[ret].getSex()endl;

cout"电话号码:"mail[ret].getTel()endl;

cout"家庭地址:"mail[ret].getAddress()endl;

}

else

cout"啊哦~联系人不存在喔(-o-)";

voidMailListManager::dropList()//清空通讯录,重新写入文件,写入一个空字符覆盖之前的数据,就清空啦

intn;

cout"确定清空吗?"endl"

""1.YES""

""2.NO""请选择:";

cinn;

if(n==2)

{

cout"好的~";

}

else

{

ofstreamout;

out.open("maillist/mail.txt");

if(!out)

{

cout"--文件打开失败--"endl;

}

else

{

out"";

cout"清除成功"endl;

}

out.close();

}

stringMailListManager::pw()//密码加密,未完成

charpsw[100]={0},c;

inti=0;

/*

cinc*/;

while((c=getch())!='\r')

{

if(c!='\b')

{

cout"*";

psw[i++];

}

else

{

cout"\b\b";

i--;

}

}

psw[i]='\0';

coutpsw;

}

然后再写个登陆类

#includeiostream

#includefstream

#includestring

usingnamespacestd;

classUser

public:

User();

voidloading();

intcheck(string);

intlogin(string,string);

voidsign(string,string);

private:

strings[50];

intlen;

User::User()

len=0;

voidUser::loading()//加载函数

stringname,password;

ifstreamin;

in.open("User/user.txt");

if(!in)

{

cout"错误!";

}

else

{

while(!in.eof())

{

ins[len];

if(in.fail())break;

len++;

}

}

in.close();

intUser::check(stringname)//检验函数

loading();

for(inti=0;ilen;i=i+2)

{

if(name==s[i])

{

returni;

}

else

{

return-1;

}

}

intUser::login(stringname,stringpassword)//登陆函数

if(check(name)==-1)

{

cout"用户根本不存在喔!";

}

else

{

if(s[check(name)+1]==password)

{

return1;

}

else

{

cout"密码输入错误!";

}

}

voidUser::sign(stringname,stringpassword)//注册函数

loading();

if(check(name)!=-1)//已有用户名

{

cout"用户名已存在!";

}

else

{

ofstreamout;

out.open("User/user.txt",ios::app);

if(!out)

{

cout"文件打开失败!";

}

else

{

outendlname""password;

}

out.close();

cout"

注册成功!";

system("pause");

}

}

登陆类的加载函数,检验函数逻辑同之前管理类的一样,登陆函数与注册函数,实际上就是文件读出与写入。

最后,写主函数

#include"MailListManager.hpp"

#include"userl.hpp"

voidmenu()

coutendlendlendl;

cout"

-----------(^O^)---------"endl;

cout"

-

1、初始化联系人

-"endl;

cout"

-

2、显示联系人

-"endl;

cout"

-

3、删除联系人

-"endl;

cout"

-

4、查找联系人

-"endl;

cout"

-

5、修改联系人

-"endl;

cout"

-

6、清空联系人

-"endl;

cout"

-

7、添加联系人

-"endl;

cout"

-

0、退出通讯录

-"endl;

cout"

---------(·v·)---------"endl;

}//手动格式控制O(∩_∩)O哈哈~

intmain()

Useru;//实例化对象

inte;

coutendlendlendlendlendlendl;

cout"

******************欢迎使用通讯录管理系统~******************"endl;

cout"

*

*"endl;

cout"

*

*"endl;

cout"

*

*"endl;

cout"

**********************

***********************"endl;

cout"

**1.我已有账户,登录**""

""**2.我没有账户,注册**"endl;

cout"

**********************

***********************"endl;//这是一个登陆界面,有账户才能管理通讯录哦

coutendlendl;

cout"

请选择:";

cine;

if(e==1)

{

while(true)

{

MailListManager*m=newMailListManager;//来个指针指向堆区

system("cls");

stringname,password;

coutendlendl"

请输入:"endl"

用户名:";

cinname;

coutendl"

密码:";

cinpassword;

/*password=getch();*/

//这两段本来是用来密码加密的,但我没实现所以注释掉了

/*m-pw();*/

/*password=putch(getch());*/

inti=u.login(name,password);//调用User里的登陆函数,并将返回值给i,i=1就证明用户名密码输入正确,反之就是输入错误

if(i==1)

{

intn;

while(true)

{

system("cls");

coutendlendl"

登录成功!欢迎"nameendl;

cout"

通讯录管理系统功能选项"endl;

menu();

cout"

请选择:";

cinn;

switch(n)

{

case7:system("cls");m-insertList();system("pause");break;

case2:system("cls");m-showList();system("pause");break;

case3:system("cls");m-deleteList();

system("pause");break;

case4:system("cls");m-selectList();system("pause");break;

case5:system("cls");m-updateList();system("pause");break;

case6:system("cls");m-dropList();system("pause");break;

case1:system("cls");m-initList();system("pause");break;//调用各种函数

case0:exit(0);break;

}

}

deletem;

m=NULL;

}

else

{

coutendlendl"

请重新输入"endl;

system("pause");

}

}

}

else

{

u.loading();//调用User类里的加载函数

while(true)

{

system("cls");

stringname,password;

coutendlendl"

请输入:"endl"

用户名:";

cinname;

if(u

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论