12、 电话本
编写C++程序完成以下功能:
(1) 实现简单电话本功能,用姓名来搜索电话号码;
(2) 用户输入姓名,程序查找并输出结果;
(3) 用户可以通过输入,添加姓名和电话号码;
(4) 用户可以删除姓名和电话号码;
(5) 电话本可以保存在指定文件中;
(6) 电话可被从指定文件中读入到内存。
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
struct imformationlist
{
char name[30];
char num[20];
struct imformationlist* nextPtr;
};
typedef struct imformationlist List;
typedef struct imformationlist* ListPtr;
class operate
{
private:
char order;
ListPtr HeadPtr;
public:
operate(char a='2',ListPtr N0=NULL) {order=a;HeadPtr=N0;}
~operate() {}
void setoperate(char b='2') {order=b;}
void setoperate(ListPtr N=NULL) {HeadPtr=N;}
void seek();
void deleteit();
void input();
void print();
void select();
void outfile();
void infile();
};
void operate::select()
{
switch(order)
{
case '0':
deleteit();
break;
case '1':
seek();
break;
case '2':
input();
break;
case '3':
print();
break;
case '4':
infile();
break;
default:
break;
}
}
void operate::input()
{
ListPtr newPtr=NULL,previousPtr=NULL,currentPtr=NULL;
char NAME[30];
char NUM[20];
int i=0,j=0;
cout<<"请输入姓名:"<<endl;
cin>>NAME;
cout<<endl<<"请输入其电话号码:"<<endl;
cin>>NUM;
// newPtr=new List;
newPtr=(ListPtr)malloc(sizeof(List));
if(newPtr!=NULL)
{
while(NAME[i]!='\0')
{
(newPtr->name)[i]=NAME[i];
i++;
}
(newPtr->name)[i]='\0';
while(NUM[j]!='\0')
{
(newPtr->num)[j]=NUM[j];
j++;
}
(newPtr->num)[j]='\0';
previousPtr=NULL;
currentPtr=HeadPtr;
if(currentPtr==NULL)
{
HeadPtr=newPtr;
HeadPtr->nextPtr=NULL;
}
else
{
while(currentPtr!=NULL)
{
previousPtr=currentPtr;
currentPtr=currentPtr->nextPtr;
}
previousPtr->nextPtr=newPtr;
newPtr->nextPtr=NULL;
}
}
}
void operate::deleteit()
{
ListPtr currentPtr=NULL,previousPtr=NULL,holdPtr=NULL;
char NAME[30];
int i=0,same=0;
cout<<endl<<"请输入要删除信息的联系人名字:"<<endl;
cin>>NAME;
currentPtr=HeadPtr;
if(currentPtr==NULL)
{
cout<<endl<<"当前电话本为空,不能执行删除操作!"<<endl;
}
else
{
while(currentPtr!=NULL)
{
i=0;
while(NAME[i]!='\0'&&(currentPtr->name)[i]!='\0')
{
if(NAME[i]!=(currentPtr->name)[i])
{
same=0;
goto PRT;
}
same=1;
i++;
}
if(!(NAME[i]=='\0'&&(currentPtr->name)[i]=='\0'))
{
same=0;
}
PRT:
if(same==1)
{
if(HeadPtr==currentPtr)
{
previousPtr=HeadPtr;
HeadPtr=HeadPtr->nextPtr;
}
previousPtr->nextPtr=currentPtr->nextPtr;
//currentPtr->nextPtr=NULL;
free(currentPtr);
currentPtr=previousPtr->nextPtr;
}
else
{
previousPtr=currentPtr;
currentPtr=currentPtr->nextPtr;
}
}
}
}
void operate::seek()
{
ListPtr previousPtr,currentPtr;
char NAME[30];
int i=0,same=0,j=0;
cout<<endl<<"请输入要查找信息的联系人名字:"<<endl;
cin>>NAME;
previousPtr=NULL;
currentPtr=HeadPtr;
if(currentPtr==NULL)
{
cout<<endl<<"当前电话本为空,不能查找!"<<endl;
}
else
{
while(currentPtr!=NULL)
{
i=0;
while(NAME[i]!='\0'&&(currentPtr->name)[i]!='\0')
{
if(NAME[i]!=(currentPtr->name)[i])
{
same=0;
goto PRT1;
}
same=1;
i++;
}
if(!(NAME[i]=='\0'&&(currentPtr->name)[i]=='\0'))
{
same=0;
}
PRT1:
if(same==1)
{
cout<<endl<<"要找的电话号码为:";
cout<<(currentPtr->num);
cout<<endl;
j++;
}
previousPtr=currentPtr;
currentPtr=currentPtr->nextPtr;
}
if(j==0)
{
cout<<endl<<"没有要找的联系人信息!"<<endl;
}
}
}
void operate::print()
{
ListPtr currentPtr;
currentPtr=HeadPtr;
if(currentPtr==NULL)
{
cout<<endl<<"当前电话本为空,没有信息!"<<endl;
}
else
{
cout<<endl<<"当前电话本信息如下:"<<endl;
while(currentPtr!=NULL)
{
cout<<(currentPtr->name);
cout<<": ";
cout<<(currentPtr->num);
cout<<endl;
currentPtr=currentPtr->nextPtr;
}
}
}
void operate::outfile()
{
ListPtr previousPtr=NULL,currentPtr=NULL;
ofstream outf;
outf.open("file",ios::out);
if(outf.fail())
{
cout<<"文件打开失败!"<<endl;
return;
}
currentPtr=HeadPtr;
while(currentPtr!=NULL)
{
outf<<(currentPtr->name)<<" "<<(currentPtr->num)<<endl;
previousPtr=currentPtr;
currentPtr=currentPtr->nextPtr;
}
outf.close();
}
void operate::infile()
{
ListPtr previousPtr=NULL,currentPtr=NULL;
ifstream inf("file",ios::in);
if(inf.fail())
{
cout<<"文件打开失败!"<<endl;
return;
}
if(inf.eof())
{
cout<<"文件file为空文件!"<<endl;
return;
}
else
{
currentPtr=(ListPtr)malloc(sizeof(List));
inf.getline(currentPtr->name,30,' ');
inf.getline(currentPtr->num,20);
HeadPtr=currentPtr;
while(!inf.eof())
{
previousPtr=currentPtr;
currentPtr->nextPtr=(ListPtr)malloc(sizeof(List));
currentPtr=currentPtr->nextPtr;
inf.getline(currentPtr->name,30,' ');
inf.getline(currentPtr->num,20);
}
currentPtr->nextPtr=NULL;
}
inf.close();
}
int main()
{
char x;
ListPtr M=NULL;
operate Phion;
cout<<"请输入指令进行操作:0-》删除;"<<endl;
cout<<" 1-》查找;"<<endl;
cout<<" 2-》添加;"<<endl;
cout<<" 3-》查看电话本;"<<endl;
cout<<" 4-》读取文件file中的数据;"<<endl;
cout<<" 其他-》退出;"<<endl<<endl;
cout<<"请输入指令:"<<endl;
cin>>x;
Phion.setoperate(M);
while(x=='0'||x=='1'||x=='2'||x=='3'||x=='4')
{
Phion.setoperate(x);
Phion.select();
cout<<endl<<"请输入指令:"<<endl;
cin>>x;
if(x!='0'&&x!='1'&&x!='2'&&x!='3'&&x!='4')
{
goto PRT2;
}
}
PRT2:
Phion.outfile();
system("pause");
return 0;
联系客服