C++简单通讯录管理 程序Word格式文档下载.docx
《C++简单通讯录管理 程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C++简单通讯录管理 程序Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
![C++简单通讯录管理 程序Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-12/9/5656fdd6-f4ac-43f3-a380-b1417a4494fa/5656fdd6-f4ac-43f3-a380-b1417a4494fa1.gif)
HomePhone<
MobilePhone<
setw(20)<
Email<
endl;
}
friendclassAddrList;
friendvoidadd(AddrList&
addrlist);
friendvoidquery(AddrList&
friendvoidmodify(AddrList&
};
classAddrList
Node*HeadPtr;
intTag;
AddrList(Node*headptr=NULL,Node*tailptr=NULL,inttag=0)
{//构造函数,创建空链表,将Tag的值置为1
HeadPtr=headptr;
Tag=tag;
}//将p指向的结点加入到链表尾部
voidAddSort(char*id,char*name,char*op,char*hp,char*mp,char*email);
//将p指向的结点按Tag指定的顺序插入到链表中
Node*LookUp(char*name);
//按姓名查找结点,返回该结点指针
voidDelete(char*name);
//删除指定姓名的结点
intSort(int);
//按tag指定的关键字重新排序
intShowAll();
//显示全部结点,每10个显示一//取Tag的值//统计链表中结点个数//取首指针
~AddrList();
//释放链表空间
voidCreateList(char*filename);
//从二进制文件中读入数据,构造链表
voidWriteToFile(char*filename);
//将链表中数据写入指定的二制文件
voidWriteToTxtFile(char*filename);
//将链表写到文本文件中
voidCreateFromTxt(char*filename);
friendvoidsort(AddrList&
//按姓名或办公室电话排序
voidAddrList:
:
AddSort(char*id,char*name,char*op,char*hp,char*mp,char*email)//将p指向的结点按Tag指定的顺序插入到链表中
Node*p;
p=newNode(id,name,op,hp,mp,email);
Node*x1=HeadPtr;
Node*x2=x1;
if(id)
{
if(HeadPtr)
{
while(x1=x1->
Next){x2=x1;
x2->
Next=p;
p->
Next=NULL;
}
elseHeadPtr=p,p->
Node*AddrList:
LookUp(char*name)//按姓名查找结点,返回该结点指针
Node*x=HeadPtr;
while(x!
=NULL&
&
strcmp(x->
Name,name)!
=0){x=x->
Next;
if(x){returnx;
elsereturn0;
Delete(char*name)//删除指定姓名的结点
Node*x2=x1;
while(strcmp(x2->
=0&
x2!
=NULL){x1=x2;
x2=x2->
if(x1!
=x2)
{if(x2)
x1->
Next=x2->
deletex2;
cout<
"
已删除"
else{cout<
未找到,请确认后再输入"
else{HeadPtr=x1->
deletex2;
intAddrList:
Sort(intT_T)//按tag指定的关键字重新排序
switch(T_T)
{case1:
Node*x=HeadPtr,*t;
if(!
HeadPtr)return0;
intm=0,n=0;
Node*p[100]={0};
while(x){p[m]=x;
m++;
x=x->
n=m;
inti,j,k;
for(i=0;
i<
n-1;
i++)
{
k=i;
for(j=i+1;
j<
n;
j++)
{
if(strcmp(p[j]->
Name,p[k]->
Name)<
=0)
{
k=j;
}
}
{t=p[k];
p[k]=p[i];
p[i]=t;
HeadPtr=p[0];
i=0;
while(i<
m-1)
p[i]->
Next=p[i+1];
i++;
p[i]->
Tag=1;
break;
case2:
ID,p[k]->
ID)<
Tag=2;
}}
ShowAll()//显示全部结点,每10个显示一屏
if(x);
inti=1;
while
(1)
cout<
setw(12)<
学号"
姓名"
办公电话"
家庭电话"
"
移动电话"
电子邮件"
=10)
x->
Show();
if(x=x->
Next);
elsebreak;
system("
pause"
);
i=1;
if(x);
elsebreak;
AddrList:
~AddrList()//释放链表空间
Node*x1=HeadPtr;
while(x2=x2->
Next)
deletex1;
x1=x2;
deletex2;
CreateList(char*filename)//从二进制文件中读入数据,构造链表
chara[30]={0},b[30]={0},c[30]={0},d[30]={0},e[30]={0},f[30]={0};
ifstreamin(filename,ios:
binary);
while(in>
>
a)
in>
b>
c>
d>
e>
f;
AddSort(a,b,c,d,e,f);
in.close();
CreateFromTxt(char*filename)//从文本文件中读入数据,构造链表
chara[30],b[30],c[30],d[30],e[30],f[30];
ifstreamin(filename);
WriteToFile(char*filename)//将链表中数据写入指定的二进制文件
Node*p=HeadPtr;
ofstreamout(filename,ios:
out<
p->
;
while(p=p->
out<
out.close();
WriteToTxtFile(char*filename)//将链表写到文本文件中
Node*x=HeadPtr;
ofstreamout(filename);
out<
E-mail"
x->
while(x=x->
setw(12)<
voidDisplayMenu()//显示菜单
inti;
char*menu[]={"
"
"
***********小巧通讯录管理系统*************"
1.新增一个联系人"
2.删除一个联系人"
3.显示所有联系人"
4.查找联系人"
5.更改联系人记录"
6.从TXT文档中增加记录"
7.导出联系人到Txt文档"
8.排序"
9.退出"
******************************************"
^_^欢迎使用^_^"
NULL};
system("
cls"
for(i=0;
menu[i];
i++)
cout<
menu[i]<
cout<
请选择(1--9):
voidadd(AddrList&
addrlist)//按当前Tag标志插入结点,插入结点后,链表仍然保持升序
添加记录"
endl<
**************************************"
请输入一个联系人数据"
cin>
a>
addrlist.AddSort(a,b,c,d,e,f);
添加完成"
voiddel(AddrList&
addrlist)//删除一个结点
charp[30];
删除记录"
请输入一个联系人的姓名"
p;
addrlist.Delete(p);
删除完成"
voidshowall(AddrList&
addrlist)//显示所有结点
显示所有联系人"
if(addrlist.ShowAll());
elsecout<
空记录!
voidquery(AddrList&
addrlist)//按姓名查找一个结点
charname[30];
查找联系人"
name;
if(p=addrlist.LookUp(name))
未找到"
voidmodify(AddrList&
addrlist)//修改一个结点
修改联系人"
请输入修改后的联系人"
cin>
ID>
Name>
OfficePhone>
HomePhone>
MobilePhone>
Email;
修改完成"
voidaddfromtxtfile(AddrList&
addrlist)//从正文文件增加记录
charfilename[30];
从TXT文档中增加记录"
请输入要加入的文件名"
filename;
addrlist.CreateFromTxt(filename);
载入完成"
voidwritetotxtfile(AddrList&
addrlist)//将链表写到正文文件中
导出联系人到Txt文档"
请输入要导出的文件名"
addrlist.WriteToTxtFile(filename);
导出完成"
voidsort(AddrList&
addrlist)//按姓名或办公室电话排序
intT_T;
intchoice=0;
switch(addrlist.Tag)
case0:
{cout<
此文档未排序"
break;
case1:
此文档已按"
排序,将按另一种方式排序"
请输入排序方式:
1.姓名2.学号"
T_T;
if(addrlist.Sort(T_T))
已排序"
voidquit(AddrList&
addrlist)//退出前将链表写入二进制文件中
addrlist.WriteToFile("
通讯录数据文件.bin"
voidmain()
color0A"
intchoice=0,state;
charch;
AddrListaddrlist;
addrlist.CreateList("
//从二进制文件中读入数据,构建链表
while(choice!
=9)
DisplayMenu();
//显示主菜单
ch;
if(ch<
'
1'
||ch>
9'
)continue;
choice=ch-'
0'
switch(choice)
add(addrlist);
break;
case2:
del(addrlist);
case3:
showall(addrlist);
case4:
query(addrlist);
case5:
modify(addrlist);
case6:
addfromtxtfile(addrlist);
case7:
writetotxtfile(addrlist);
case8:
sort(addrlist);
case