心宿二人物:电话本,可添加,删除,查找
来源:百度文库 编辑:偶看新闻 时间:2024/10/02 18:41:33
12、 电话本
编写C++程序完成以下功能:
(1) 实现简单电话本功能,用姓名来搜索电话号码;
(2) 用户输入姓名,程序查找并输出结果;
(3) 用户可以通过输入,添加姓名和电话号码;
(4) 用户可以删除姓名和电话号码;
(5) 电话本可以保存在指定文件中;
(6) 电话可被从指定文件中读入到内存。
#include
#include
#include
#include
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<<"请输入姓名:"<
cin>>NAME;
cout<
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<
cin>>NAME;
currentPtr=HeadPtr;
if(currentPtr==NULL)
{
cout<
}
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<
cin>>NAME;
previousPtr=NULL;
currentPtr=HeadPtr;
if(currentPtr==NULL)
{
cout<
}
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<
cout<<(currentPtr->num);
cout<
j++;
}
previousPtr=currentPtr;
currentPtr=currentPtr->nextPtr;
}
if(j==0)
{
cout<
}
}
}
void operate::print()
{
ListPtr currentPtr;
currentPtr=HeadPtr;
if(currentPtr==NULL)
{
cout<
}
else
{
cout<
while(currentPtr!=NULL)
{
cout<<(currentPtr->name);
cout<<": ";
cout<<(currentPtr->num);
cout<
currentPtr=currentPtr->nextPtr;
}
}
}
void operate::outfile()
{
ListPtr previousPtr=NULL,currentPtr=NULL;
ofstream outf;
outf.open("file",ios::out);
if(outf.fail())
{
cout<<"文件打开失败!"<
return;
}
currentPtr=HeadPtr;
while(currentPtr!=NULL)
{
outf<<(currentPtr->name)<<" "<<(currentPtr->num)<
previousPtr=currentPtr;
currentPtr=currentPtr->nextPtr;
}
outf.close();
}
void operate::infile()
{
ListPtr previousPtr=NULL,currentPtr=NULL;
ifstream inf("file",ios::in);
if(inf.fail())
{
cout<<"文件打开失败!"<
return;
}
if(inf.eof())
{
cout<<"文件file为空文件!"<
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-》删除;"<
cout<<" 1-》查找;"<
cout<<" 2-》添加;"<
cout<<" 3-》查看电话本;"<
cout<<" 4-》读取文件file中的数据;"<
cout<<" 其他-》退出;"<
cout<<"请输入指令:"<
cin>>x;
Phion.setoperate(M);
while(x=='0'||x=='1'||x=='2'||x=='3'||x=='4')
{
Phion.setoperate(x);
Phion.select();
cout<
cin>>x;
if(x!='0'&&x!='1'&&x!='2'&&x!='3'&&x!='4')
{
goto PRT2;
}
}
PRT2:
Phion.outfile();
system("pause");
return 0;