通讯录设计.docx
《通讯录设计.docx》由会员分享,可在线阅读,更多相关《通讯录设计.docx(16页珍藏版)》请在冰点文库上搜索。
通讯录设计
#include
#include
#include
//usingnamespacestd;
classPerson
{
protected:
charName[20];//姓名
charcity[20];//城市
inteip;//邮编
charstate[20];//国家
charstreet[20];//街道
Person*next,*prior;
public:
Person(char*Name,inteip,char*state,char*city,char*street)
{strcpy(this->Name,Name);
strcpy(this->state,state);
strcpy(this->city,city);
strcpy(this->street,street);
this->eip=eip;
}
friendclassManage;
};
classManage
{
private:
Person*person;
public:
Manage()
{
person=NULL;
Load();
}
~Manage()
{
Person*p;
p=person;
while(p)
{
p=p->next;
deleteperson;
person=p;
}
person=0;
}
voidFind(charName[20]);//按姓名查找
voidAdd();//添加加信息
voidDelete();//删除信
voidsearch();//查询信息
voidSave();//保存数据
voidLoad();//读入数据
voiddisplay();//显示信息
voidModify(charName[20]);
voidOutput(Person*p)
{
cout<<"\t\t姓名:
"<Name<cout<<"\t\t邮政:
"<eip<cout<<"\t\t国家:
"<state<cout<<"\t\t城市:
"<city<cout<<"\t\t街道"<street<cout<}
};
voidManage:
:
Add()
{
Person*p,*p2;//新结点指
charstate[20];
charcity[20];
charstreet[20];
inteip;
charname[20];
charc;
cout<<"\n**新增学生通讯录**\n";
//输入学生信息
cout<<"输入姓名:
\t";
cin>>name;
cout<cout<<"输出邮政:
\t";
cin>>eip;
cout<<"输入国家:
\t";
cin>>state;
cout<cout<<"输入城市:
\t";
cin>>city;
cout<<"输入街道:
\t";
cin>>street;
cout<p=newPerson(name,eip,state,city,street);
p->next=0;
//学生结点加入链表
if(person)//若已经存在结点
{
p2=person;
while(p2->next)//查找尾结点
{
p2=p2->next;
}
p->prior=p2;
p2->next=p;//连接
}
else//若不存在结点(表空)
{
person=p;//连接
}
cout<<"\t\t\t***添加成功***\n"<while
(1)
{
cout<<"是否继续添加(Y/N)"<cin>>c;
if(c=='Y')
{
Add();
return;
}
else
return;
}
}
voidManage:
:
Delete()//删除人员
{
Person*p1,*p2;
intcount=0;
charName[20];
p1=person;
cout<<"请输入要删除人的名字:
"<cin>>Name;
if(person)
{
while(p1)
{
if(strcmp(p1->Name,Name)==0)
{
count++;
Output(p1);
if(p1==person)//若要删除的结点是第一个结点
{
if(p1->next==NULL)
{
person=NULL;
p1=NULL;//把p1置空,不然会死循环!
}
else{
person=p1->next;
person->prior=NULL;
deletep1;
p1=person;
}
}
else//若要删除的结点是后续结点
{
p2=p1->next;
if(p2==NULL)
{
p1->prior->next=NULL;
}
else
{
p1->prior->next=p1->next;
p1->next->prior=p1->prior;
}
deletep1;
p1=p2;//替代原先的"p1=p1->next"
}
cout<<"\t\t***删除成功***\n";
}
else
p1=p1->next;
}
if(count==0)
cout<<"查无此人无法删除\n";
}
}
voidManage:
:
Save()//数据写入到文件
{
ofstreamfPerson("tongxun.txt",ios:
:
out);
charc;
cout<<"\n保存数据,是否继续?
[Y/N]:
";
cin>>c;
if(c!
='Y')
return;
Person*p=person;
while(p)
{
fPerson<Name<<""<eip<<""<state<<""<city<<""<street<p=p->next;
}
fPerson.close();
cout<<"\n保存成功...\n";
cout<<"输出数据"<display();
}
voidManage:
:
Load()//数据读入
{
ifstreamfPerson;
Person*p=person;
charName[20],state[20],city[20],street[20];
inteip;
fPerson.open("tongxun.txt",ios:
:
in);
fPerson>>Name>>eip>>state>>city>>street;
while(fPerson.good())
{
p=newPerson(Name,eip,state,city,street);
p->next=0;
//员工结点加入链表
if(person)//若已经存在结点
{
Person*p2;
p2=person;
while(p2->next)//查找尾结点
{
p2=p2->next;
}
p2->next=p;//连接
}
else//若不存在结点(表空)
{
person=p;//连接
}
fPerson>>Name>>eip>>state>>city>>street;
}
fPerson.close();
}
voidManage:
:
Find(charName[20])
{
Person*p1;
intcount=0;
p1=person;
while(p1)
{
if(strcmp(p1->Name,Name)==0)
{
count++;
Output(p1);
}
p1=p1->next;
}
if(count)
{
cout<<"\t查询成功!
!
!
"<cout<<"\n共找到"<}
else
cout<<"\n\t\t未找到该学生!
!
!
\n"<}
voidManage:
:
search()
{
charc;
charName[20];
do{
cout<<"1按名字查找,2退出查找"<cin>>c;
cout<switch(c)
{
case'1':
{
cout<<"输入姓名Name:
";
cin>>Name;
Find(Name);
};break;
case'2':
break;
default:
cout<<"输入有误请重新输入!
!
!
\n"<}
}while(c!
='1'&&c!
='2');
cout<<"\t\t\t***查找成功***\n"<cout<<"是否继续查找(Y/N)"<cin>>c;
if(c=='Y')
search();
else
return;
}
voidManage:
:
display()
{
Person*p;
p=person;
while(p)
{
cout<Name<<""<state<<""<city<<""<street<<""<eip<p=p->next;
cout<}
}
voidManage:
:
Modify(charName[20])
{
Person*p1;
charc,name[20];
p1=person;
while(p1)
{
if(strcmp(p1->Name,Name)==0)
break;
else
{
p1=p1->next;
}
}
if(p1!
=NULL)//若找到结
{
cout<<"所要修改的学生的信息如下:
\n"<Output(p1);
cout<<"1.修改姓名2修改邮政3修改国家4修改城市,5修改街道,6退出修改\n"<cout<<"请选择(1-6)要修改的信息\n"<cin>>c;
if(c!
='6')
cout<<"请输入新的信息:
";
switch(c)
{
case'1':
cin>>p1->Name;break;
case'2':
cin>>p1->eip;break;
case'3':
cin>>p1->state;break;
case'4':
cin>>p1->city;break;
case'5':
cin>>p1->street;break;
default:
break;
}
cout<<"\t***修改成功***\n"<cout<<"\t修改后的信息如下"<Output(p1);
cout<<"是否继续修改(Y/N):
"<cin>>c;
if(c=='Y')
{
cout<<"请输入要修改人员的name:
";
cin>>name;
cout<Modify(name);
return;
}
else
return;
}
else//未找到结点
cout<<"未找到该学生!
\n";
}
intmain()
{
Managem;
charname[20];
intc;
cout<<"★*******★★★★★★*******★"<cout<<"****★辽宁科技大学计11-2班通讯录★************"<cout<<"★*******★★★★★★*******★"<do
{
cout<<"=========================================="<cout<<"★☆\t1.新增通讯录\t☆★"<cout<<"★☆\t2.删除通讯录\t☆★"<cout<<"★☆\t3.查询详细信息\t☆★"<cout<<"★☆\t4.保存数据\t☆★"<cout<<"★☆\t5.输出信息\t☆★"<cout<<"★☆\t6.修改信息\t☆★"<cout<<"=========================================="<cout<<"0-退出\t请选择(1-6):
";
cin>>c;
switch(c)
{
case1:
m.Add();break;
case2:
m.Delete();break;
case3:
{
m.search();
};break;
case4:
m.Save();break;
case5:
m.display();break;
case6:
cout<<"请输入要修改的人员的姓名"<cin>>name;
m.Modify(name);
}
}while(c!
=0);
chars;
cout<<"\n★是否要保存您的所有操作(Y/N):
"<cin>>s;
if(s=='Y')
m.Save();
return0;
}