用链表的方法实现一个简单的电话本.docx
- 文档编号:23765745
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:12
- 大小:16.51KB
用链表的方法实现一个简单的电话本.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< "< 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'< < <<"电话: "< 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< < 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; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 用链表 方法 实现 一个 简单 电话本
![提示](https://static.bdocx.com/images/bang_tan.gif)