用链表的方法实现一个简单的电话本.docx
《用链表的方法实现一个简单的电话本.docx》由会员分享,可在线阅读,更多相关《用链表的方法实现一个简单的电话本.docx(12页珍藏版)》请在冰点文库上搜索。
用链表的方法实现一个简单的电话本
用链表的方法实现一个简单的电话本:
#include
#include
#include
#include
#include
usingnamespacestd;
//电话本单个成员
classundergraduate
{
private:
stringname;//姓名
stringno;//电话
public:
undergraduate*next_ptr;//指向下一个成员的链结
undergraduate(conststring&n=0,conststring&t=0);//构造
undergraduate(undergraduate&p);//拷贝构造函数
intFindName(conststring&str);//找到该成员是返回1,否则返回0
string&GetTel(){returntel_num;};//得到电话号码
string&GetName(){returnname;};//得到名字
};
//构造函数
undergraduate:
:
undergraduate(conststring&n,conststring&t)
{
name=na;
no=n;
next_ptr=NULL;
}
//拷贝构造函数
undergraduate:
:
undergraduate(undergraduate&p)
{
name=p.name;
no=p.no;
next_ptr=p.next_ptr;
}
//找到该成员
intundergraduate:
:
FindName(conststring&str)
{
if(str==name)
{
return1;
}
else
{
return0;
}
}
//电话本
classPhoneBook
{
private:
undergraduate*head_ptr;
public:
PhoneBook();//构造
voidCreate(undergraduatenewundergraduate);//添加记录
voidDelete(conststring&deletename);//删除记录
voidDeleteAll();//删除所有记录
voidFind(conststring&fname);//查找记录
voidSave();//保存到文件
voidLoad();//从文件读取
voidPrintAll();//全部打印
~PhoneBook();//析构
};
//构造函数
PhoneBook:
:
PhoneBook()
{
head_ptr=NULL;
}
//创建新记录
voidPhoneBook:
:
Create(undergraduatenewundergraduate)
{
if(head_ptr==NULL)//若为空链表直接添加记录
{
head_ptr=newPerson(newundergraduate);
}
else
{
Person*p=head_ptr;
while(p->next_ptr!
=NULL)//找到尾节点为p
{
p=p->next_ptr;
}
p->next_ptr=newundergraduate(newundergraduate);//添加记录
}
cout<<"已添加新纪录"<}
//删除记录
voidPhoneBook:
:
Delete(conststring&deletename)
{
if(head_ptr==NULL)//头为空
{
cerr<<"还没有任何记录!
"<system("pause");
}
elseif(head_ptr->next_ptr==NULL)//只有头
{
if(head_ptr->FindName(deletename))
{
deletehead_ptr;
head_ptr=NULL;
cout<<"已成功删除"<}
else
{
cerr<<"未找到这条记录!
"<system("pause");
}
}
else//其他情况
{
Person*last=head_ptr;//记录上一个链节
Person*p=last->next_ptr;
if(last->FindName(deletename))//删头
{
deletelast;
head_ptr=p;
cout<<"已成功删除"<}
else//其他情况
{
while(p!
=NULL&&!
(p->FindName(deletename)))//遍历
{
last=last->next_ptr;
p=last->next_ptr;
}
if(p!
=NULL)//找到了
{
last->next_ptr=p->next_ptr;
deletep;
cout<<"已成功删除"<}
else//没找到
{
cerr<<"未找到这条记录!
"<system("pause");
}
}
}
}
//删除所有记录
voidPhoneBook:
:
DeleteAll()
{
if(head_ptr==NULL)//头为空
{
cerr<<"还没有任何记录!
"<system("pause");
}
else
{
Person*temp=head_ptr;
while(head_ptr!
=NULL)
{
head_ptr=head_ptr->next_ptr;
deletetemp;
temp=head_ptr;
}
head_ptr=NULL;
cout<<"已删除所有联系人!
"<}
}
//查找记录
voidPhoneBook:
:
Find(conststring&fname)
{
if(head_ptr==NULL)//头为空
{
cerr<<"还没有任何记录!
"<system("pause");
}
else//有记录
{
Person*p=head_ptr;
while(p!
=NULL&&!
(p->FindName(fname)))//遍历
{
p=p->next_ptr;
}
if(p!
=NULL)//找到了
{
cout<"<GetTel()<system("pause");
}
else//没找到
{
cerr<<"未找到这条记录!
"<system("pause");
}
}
}
//保存到文件
voidPhoneBook:
:
Save()
{
if(head_ptr==NULL)//头为空
{
cerr<<"还没有任何记录!
"<system("pause");
}
else//有记录
{
ofstreamofile("PhoneBook.txt",ios:
:
out|ios:
:
trunc);//打开文件
if(!
ofile)
{
cerr<<"无法打开PhoneBook.txt"<system("pause");
}
else//成功打开
{
ofile.seekp(0,ios:
:
beg);//重定位
Person*p=head_ptr;
inti=1;
ofile<<"电话本:
";
while(p!
=NULL)//遍历
{
ofile<<'\n'<
<GetName()<<'\n'
<<"电话:
"<GetTel();
p=p->next_ptr;
i++;
}
ofile.close();//关闭文件
cout<<"成功保存到文件,请查看PhoneBook.txt"<}
}
}
//从文件中读取
voidPhoneBook:
:
Load()
{
stringfilename;
cout<<"请输入文件名(XXXXX.XXX):
"<cin>>filename;
ifstreamifile(filename.c_str(),ios:
:
in);//打开文件
if(!
ifile)
{
cerr<<"无法打开"<system("pause");
}
else//成功打开
{
ifile.seekg(0,ios:
:
beg);//重定位
intz;
stringstr;
getline(ifile,str);//欢迎信息
while(!
ifile.eof())
{
ifile>>z;//数字
ifile.get();//点
stringname;
stringtel;
getline(ifile,name);//名字
ifile>>tel>>tel;//电话
undergraduateper(name,tel);
Create(per);
}
Delete("");
ifile.close();
cout<<"成功从文件"<"<}
}
//全部打印
voidPhoneBook:
:
PrintAll()
{
if(head_ptr==NULL)//头为空
{
cerr<<"还没有任何记录!
"<system("pause");
}
else//有记录
{
undergraduate*p=head_ptr;
inti=1;
while(p!
=NULL)//遍历
{
cout<<GetName()<GetTel()<p=p->next_ptr;
i++;
}
system("pause");
}
}
//析构
PhoneBook:
:
~PhoneBook()
{
undergraduate*temp=head_ptr;
while(head_ptr!
=NULL)
{
head_ptr=head_ptr->next_ptr;
deletetemp;
temp=head_ptr;
}
cout<<"已删除所有联系人!
"<}
//功能选择
intChoice(void)
{
intch;
cout<<"\t\t\t请选择:
\n"
<<"\t\t\t1.添加新的联系人\n"
<<"\t\t\t2.删除某个联系人\n"
<<"\t\t\t3.删除所有联系人\n"
<<"\t\t\t4.查询某个联系人\n"
<<"\t\t\t5.查询所有联系人\n"
<<"\t\t\t6.将电话本导出到文件\n"
<<"\t\t\t7.从文件导入电话本\n"
<<"\t\t\t0.退出系统"<cin>>ch;
returnch;
}
//主函数
main()
{
cout<<"\t\t\t欢迎您使用电话本系统!
\n\n"<PhoneBookmypb;
intch;
while(ch=Choice())
{
switch(ch)
{
case1:
//新增联系人
{
stringname;
stringtel;
cout<<"请输入联系人姓名:
"<cin.get();
getline(cin,name);
cout<<"请输入联系人电话:
"<cin>>tel;
undergraduateper(name,tel);
mypb.Create(per);
break;
}
case2:
//删除联系人
{
stringdeletename;
cout<<"请输入要删除的联系人姓名:
"
<cin.get();
getline(cin,deletename);
mypb.Delete(deletename);
break;
}
case3:
//删除所有联系人
{
mypb.DeleteAll();
break;
}
case4:
//查询某个联系人
{
stringfname;
cout<<"请输入要查询的联系人姓名:
"
<cin.get();
getline(cin,fname);
mypb.Find(fname);
break;
}
case5:
//查询所有联系人
{
mypb.PrintAll();
break;
}
case6:
//将电话本导出到文件
{
mypb.Save();
break;
}
case7:
//从文件导入电话本
{
mypb.Load();
break;
}
default:
{
cerr<<"输入错误,请重新输入!
"<break;
}
}
}
cout<<"感谢您使用电话本系统,再见!
"<system("pause");
return0;
}