#include<iostream>
#include<malloc.h>
#include<string>
#include<iomanip>
#include<fstream>
#include <conio.h>
#include <stdlib.h>
using namespace std;
unsigned int num=0;
struct information
{
string name;
string phone;
string street;
string city;
string eip;
string state;
};
struct information a[120];
typedef struct doublelink //定义
{
struct information data;
struct doublelink *Llink,*Rlink;
} dlink;
dlink *enter(dlink *h);
dlink *insert(dlink *h) ;
int menu_select();
dlink *add(dlink *h);
void search(dlink *h) ;
dlink *deletebyname(dlink *h);
dlink *deletebyphone(dlink *h) ;
void output(dlink *h);
dlink *creatlist()
{
dlink *head,*p,*r;
p=new dlink;
head=p;
r=head;
p->Rlink=NULL;
return head;
}
创建*************************************************
dlink *enter(dlink *h)
{
dlink *head,*r,*p,*q;
head=h;
r=h;
q=h->Rlink;
system("cls");
p=new dlink;
cout<<"\n\t\t**************** 请输入联系人信息 ****************"<<endl;
cout<<"请输入姓名:"<<endl;
cin>>p->data.name;
cout<<"请输入电话:"<<endl;
cin>>p->data.phone;
cout<<"请输入街道名: "<<endl;
cin>>p->data.street;
cout<<"请输入城市名: "<<endl;
cin>>p->data.city;
cout<<"请输入邮编: "<<endl;
cin>>p->data.eip;
cout<<"请输入国家名: "<<endl;
cin >>p->data.state;
p->Rlink=NULL;
while(q!=NULL)
{
r=q;
q=q->Rlink;
}
p->Llink=r;
r->Rlink=p;
r=p;
num++;
char z;
cout<<" 是否要继续插入新联系人信息? (Y/N):"<<endl;
cin>>z;
if((z=='y')||(z=='Y'))
head=insert(head);
else if((z!='n')&&(z!='N'))
{
cout<<"输入有误,返回主菜单"<<endl;
}
else
return 0;
return head;
}
//***********************************************************************
dlink *insert(dlink *h) //插入新用户信息
{
dlink *head=h;
if(num==0)
{
cout<<"\n\t通讯录中没有任何联系人信息,确认要添加吗?(Y/N)"<<endl;
char z;
cin>>z;
if((z=='y')||(z=='Y'))
head=add(head);
else if((z!='n')&&(z!='N'))
{
cout<<"输入有误,返回主菜单"<<endl;
}
else
{
return 0;
}
}
else
head=add(head);
return head;
}
//*****************************************************************
dlink *add(dlink *h)
{
dlink *head,*r,*p,*q;
head=h;
r=h;
q=h->Rlink;
system("cls");
//新建用户信息
p=new dlink;
cout<<"\n\t\t**************** 请输入联系人信息 ****************"<<endl;
cout<<"请输入姓名:"<<endl;
cin>>p->data.name;
cout<<"请输入电话:"<<endl;
cin>>p->data.phone;
cout<<"请输入街道名: "<<endl;
cin>>p->data.street;
cout<<"请输入城市名: "<<endl;
cin>>p->data.city;
cout<<"请输入邮编: "<<endl;
cin>>p->data.eip;
cout<<"请输入国家名: "<<endl;
cin >>p->data.state;
p->Rlink=NULL;
while(q!=NULL)
{
r=q;
q=q->Rlink;
} //while
p->Llink=r;
r->Rlink=p;
r=p;
num++;
char z;
cout<<" 是否要继续插入新联系人信息? (Y/N):"<<endl;
cin>>z;
if((z=='y')||(z=='Y'))
head=insert(head);
else if((z!='n')&&(z!='N'))
cout<<"输入有误,返回主菜单"<<endl;
else;
return head;
}
//*******************************************************************************************
void searchbyname(dlink *h) //按姓名查找
{
if(num==0)
{
cout<<"\n\t当 前 通 讯 录 没 有 任 何 联 系 人 信 息!!!"<<endl;
cout<<"\n**********无法执行查找操作***********"<<endl;
cout<<endl;
}
else
{
dlink *head,*p,*q;
string nam;
head=h;
p=h->Rlink;
int i,j=1,k=1,mark=0;
system("cls");
cout<<"请输入要查找的联系人姓名: "<<endl;
cin>>nam;
for(i=k; i<=num; i++,p=p->Rlink)
{
while(p&&p->data.name!=nam)
{
q=p;
p=p->Rlink;
j++;
}
if(p)
{
cout<<"您要查找的联系人信息为:"<<endl;
cout<<"*******************************************************************************"<<endl;
cout<<"\n\t姓名: "<<p->data.name<<endl;
cout<<"\n\t电话号码:"<<p->data.phone<<endl;
cout<<"\n\t街道名: "<<p->data.street<<endl;
cout<<"\n\t城市名: "<<p->data.city<<endl;
cout<<"\n\t邮编: "<<p->data.eip<<endl;
cout<<"\n\t国家: "<<p->data.state<<endl;
cout<<"*******************************************************************************"<<endl;
cout<<endl;
mark=1;
if(p->Rlink==NULL)
{
cout<<"\n\t已无重名信息"<<endl;
cout<<"\n\t您是否继续下一个查找?(Y/N)"<<endl;
char z;
cin>>z;
if((z=='y')||(z=='Y'))
search(head);
else if((z!='n')&&(z!='N'))
{
cout<<"输入错误"<<endl;
break;
}
else
break;
}
}
if(p==NULL)
{
if(mark==1)
{
if(q->data.name!=nam)
{
cout<<"\n\t已无重名信息"<<endl;
cout<<"\n\t您是否继续下一个查找?(Y/N)"<<endl;
char z;
cin>>z;
if((z=='y')||(z=='Y'))
search(head);
else break;
}
}
else
{
cout<<"\n搜索的联系人不存在!"<<endl;
cout<<endl;
cout<<"\n\t您是否继续下一个查找?(Y/N)"<<endl;
char z;
cin>>z;
if((z=='y')||(z=='Y'))
search(head);
else if((z!='n')||(z!='N'))
{cout<<"输入有误,返回主菜单"<<endl;
break;}
else
break;
;
}
}
}
}
}
//**************************************************************************
void searchbyphone(dlink *h) //按电话号码查找
{
if(num==0)
{
cout<<"\n当前通讯录没有任何联系人信息!!!"<<endl;
cout<<"\n*****无法执行查找操作!******"<<endl;
cout<<endl;
}
else
{
dlink *head,*p,*q;
string callnum;
head=h;
p=h->Rlink;
int j=0,k=1;
system("cls");
cout<<"请输入要查找的联系人电话号码: "<<endl;
cin>>callnum;
while(p&&p->data.phone!=callnum)
{
q=p;
p=p->Rlink;
j++;
}
if(p)
{
cout<<"您要查找的联系人信息为:"<<endl;
cout<<"*******************************************************************************"<<endl;
cout<<"\n\t姓名: "<<p->data.name<<endl;
cout<<"\n\t电话号码:"<<p->data.phone<<endl;
cout<<"\n\t街道名: "<<p->data.street<<endl;
cout<<"\n\t城市名: "<<p->data.city<<endl;
cout<<"\n\t邮编: "<<p->data.eip<<endl;
cout<<"\n\t国家: "<<p->data.state<<endl;
cout<<"*******************************************************************************"<<endl;
cout<<endl;
}
else
{
cout<<"\n\t\t搜索的联系人不存在!"<<endl;
cout<<endl;
cout<<"\n\t您是否继续下一个查找?(Y/N)"<<endl;
char z;
cin>>z;
if((z=='y')||(z=='Y'))
search(head);
else if((z!='n')||(z!='N'))
cout<<"输入有误,返回主菜单"<<endl;
else ;
}
}
}
//*********************************************************************************
void search(dlink *h)
{
dlink *head;
head=h;
int choic;
cout<<"\n-按电话号码查找 2-按姓名查找";
cout<<"\n请选择:";
cin>>choic;
switch (choic)
{
case 1:
searchbyphone(head);
break;
case 2:
searchbyname(head);
break;
}
}
//按姓名删除****************************************************************
dlink *deletebyname(dlink *h)
{
dlink *head,*p,*q;
if(num==0)
{
cout<<"\n当前通讯录没有任何联系人信息"<<endl;
cout<<"\n删除操作无法执行"<<endl;
}
else
{
string nam;
int flag=1,k=1,i,j=1;
head=h;
p=h->Rlink;
system("pause");
system("cls");
cout<<"请输入要删除的联系人姓名: "<<endl;
cin>>nam;
for(i=k; i<=num; i++,p=p->Rlink)
{
while(p&&p->data.name!=nam)
{
q=p;
p=p->Rlink;
j++;
}
if(p)
{
cout<<"您要删除的联系人信息为:"<<endl;
cout<<"weiyu"<<j+1<<"weizhi"<<endl;
cout<<"*******************************************************************************"<<endl;
cout<<"\n\t姓名: "<<p->data.name<<endl;
cout<<"\n\t电话号码:"<<p->data.phone<<endl;
cout<<"\n\t街道名: "<<p->data.street<<endl;
cout<<"\n\t城市名: "<<p->data.city<<endl;
cout<<"\n\t邮编: "<<p->data.eip<<endl;
cout<<"\n\t国家: "<<p->data.state<<endl;
cout<<"*******************************************************************************"<<endl;
char z;
cout<<"您确定要删除该联系人信息吗?(Y/N)"<<endl;
cin>>z;
if((z=='y')||(z=='Y'))
{
if(num==1)
{
p->Llink->Rlink=NULL;
free(p);
num--;
}
else if(p->Llink==head)
{
p->Rlink->Llink=head;
p->Llink->Rlink=p->Rlink;
free(p);
num--;
}
else if(p->Rlink==NULL)
{
p->Llink->Rlink=NULL;
free(p);
num--;
}
else
{
p->Rlink->Llink=p->Llink;
q->Rlink=p->Rlink;
free(p);
num--;
}
cout<<"\n\t\t已删除成功!"<<endl;
break;
}
else
{
cout<<"\n已放弃删除!!"<<endl;
char d;
cout<<"\n您是否继续删除相同姓名的联系人?(Y/N)"<<endl;
cin>>d;
if((d=='y')||(d=='Y'))
continue;
else break;
}
}//waiif
else
{
cout<<"没有此联系人信息"<<endl;
char a;
cout<<"\n您是否要继续删除?(Y/N)"<<endl;
cin>>a;
if((a=='y')||(a=='Y'))
head=deletebyname(head);
else if((a!='n')||(a!='N'))
cout<<"输入有误,返回主菜单"<<endl;
else
break;
}
}
}
cout<<endl;
return head;
}
//按电话号码删除***************************************************
dlink *deletebyphone(dlink *h)
{
dlink *head,*p,*q;
if(num==0)
{
cout<<"\n没有联系人信息 请先输入"<<endl;
cout<<"\n删除操作无法执行!"<<endl;
}
else
{
string callnum;
int flag=1,k=1,j=0;
head=h;
p=h->Rlink;
system("pause");
system("cls");
cout<<"请输入要删除的联系人电话号码: "<<endl;
cin>>callnum;
while(p&&p->data.phone!=callnum)
{
q=p;
p=p->Rlink;
j++;
}
if(p)
{
cout<<"您要删除的联系人信息为:"<<endl;
cout<<"*******************************************************************************"<<endl;
cout<<"\n\t姓名: "<<p->data.name<<endl;
cout<<"\n\t电话号码:"<<p->data.phone<<endl;
cout<<"\n\t街道名: "<<p->data.street<<endl;
cout<<"\n\t城市名: "<<p->data.city<<endl;
cout<<"\n\t邮编: "<<p->data.eip<<endl;
cout<<"\n\t国家: "<<p->data.state<<endl;
cout<<"*******************************************************************************"<<endl;
char z;
cout<<"您确定要删除该联系人信息吗?(Y/N)"<<endl;
cin>>z;
if((z=='y')||(z=='Y'))
{
if(num==1)
{
p->Llink->Rlink=NULL;
free(p);
num--;
}
else if(p->Llink==head)
{
p->Rlink->Llink=head;
p->Llink->Rlink=p->Rlink;
free(p);
num--;
}
else if(p->Rlink==NULL)
{
p->Llink->Rlink=NULL;
free(p);
num--;
}
else
{
p->Rlink->Llink=p->Llink;
q->Rlink=p->Rlink;
free(p);
num--;
}
cout<<"\n\t\t已删除成功!"<<endl;
char a;
cout<<"\n您是否要继续删除???(Y/N)"<<endl;
cin>>a;
if((a=='y')||(a=='Y'))
head=deletebyphone(head);
else if((a!='n')||(a!='N'))
cout<<"输入有误,返回主菜单"<<endl;
else ;
}
else
{
cout<<"\n\t\t已放弃删除!!"<<endl;
char a;
cout<<"\n您是否要继续删除?(Y/N)"<<endl;
cin>>a;
if((a=='y')||(a=='Y'))
head=deletebyphone(head);
else if((a!='n')&&(a!='N'))
cout<<"输入有误,返回主菜单"<<endl;
else
return 0;
}
}
else
{
cout<<"\n\t没有此联系人信息"<<endl;
char a;
cout<<"\n\n您是否要继续删除???(Y/N)"<<endl;
cin>>a;
if((a=='y')||(a=='Y'))
head=deletebyphone(head);
else if((a!='n')||(a!='N'))
cout<<"输入有误,返回主菜单"<<endl;
else ;
}
}
cout<<endl;
return head;
}
dlink *dele(dlink *h)
{
dlink *head;
head=h;
int choic;
cout<<"\n 1-按电话号码删除 2-按姓名删除";
cout<<"\n请选择:";
cin>>choic;
switch (choic)
{
case 1:
head=deletebyphone(head);
break;
case 2:
head=deletebyname(head);
break;
}
return head;
}
void output(dlink *h) // 输出
{
dlink *p;
if(num==0)
{
cout<<"\n\t\t当 前 通 讯 录 没 有 任 何 联 系 人 信 息!!!"<<endl;
cout<<"\n\t\t\t*****无法执行显示操作!!!!******"<<endl;
}
else
{
int i=0;
p=h->Rlink;
system("pause");
system("cls");
cout<<"\n\t\t输出所有联系人的信息:"<<endl;
cout<<"\n\t\t\t当前通讯录共有"<<num<<"个联系人信息"<<endl;
for(i=1; i<=num; i++)
{
cout<<"\n\t\t\t第 "<<i<<"个联系人信息为:"<<endl;
cout<<"*******************************************************************************"<<endl;
cout<<"\n\t姓名: "<<p->data.name<<endl;
cout<<"\n\t电话号码:"<<p->data.phone<<endl;
cout<<"\n\t街道名: "<<p->data.street<<endl;
cout<<"\n\t城市名: "<<p->data.city<<endl;
cout<<"\n\t邮编: "<<p->data.eip<<endl;
cout<<"\n\t国家: "<<p->data.state<<endl;
cout<<"*******************************************************************************"<<endl;
p=p->Rlink;
}
}
cout<<endl;
}
int menu_select()
{
int b;
cout<<"********欢迎使用通讯录管理软件 请按任意键进入主菜单!********"<<endl;
getch();
system("cls");
cout<<"\t\t*****WELCOME TO USE THIS SOFTWARE *****************"<<endl;
cout<<"\t\t*****************通讯录管理软件********************"<<endl;
cout<<"\t\t************* COPYRIGHT 2011 *********************"<<endl;
cout<<"\t\t******DESIGNED BY DaiJunYou O (∩_∩)O哈哈~ *****"<<endl;
cout<<"\t\t***************** MENU *************************"<<endl;
cout<<"\n\t\t1: 输入联系人信息"<<endl;
cout<<"\n\t\t2: 查找联系人信息"<<endl;
cout<<"\n\t\t3: 显示联系人信息"<<endl;
cout<<"\n\t\t4: 增加联系人信息"<<endl;
cout<<"\n\t\t5: 删除联系人信息"<<endl;
cout<<"\n\t\t6: 存储联系人信息"<<endl;
cout<<"\n\t\t7: 退出本程序"<<endl;
for(;;)
{
cout<<"\n****Please make your choice(1~7)**** "<<endl;
cout<<"\nYour choice is : ";
cin>>b;
if(b<1||b>7)
continue;
else
{
return b;
break;
}
}
}
int WriteLinklistToFile(dlink *h)
{
ofstream fin("E:\\学习\\数据结构(C)\\课设资料\\链表\\test.txt",ios::app);
dlink *head = h;
dlink *p;
p=head->Rlink;
while(p)
{
//fprintf(fpFile,"%s\t%s\t%s\t%s\t%s\t%s\t\n",p->data.name,p->data.phone,p->data.street,p->data.city,p->data.eip,p->data.state);
fin<<p->data.name<<" "<<p->data.phone<<" "<<p->data.street<<" "<<p->data.city<<" "<<p->data.eip<<" "<<p->data.state<<" "<<endl;
p=p->Rlink;
}
fin.close();
return 1;
};
int main()
{
dlink *head;
head=creatlist();
system("cls");
for(;;)
{
switch(menu_select())
{
case 1:
head=enter(head);
break;
case 2:
search(head);
break;
case 3:
output(head);
break;
case 4:
head=insert(head);
break;
case 5:
head=dele(head);
break;
case 6:
WriteLinklistToFile(head) ;
break;
case 7:
exit(0);
}
}
return 0;
}
通讯录实现代码 C++ 链表
最新推荐文章于 2021-05-21 07:48:28 发布