C++简单通讯录管理程序Word文档格式.docx
《C++简单通讯录管理程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《C++简单通讯录管理程序Word文档格式.docx(19页珍藏版)》请在冰点文库上搜索。
![C++简单通讯录管理程序Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/2aa27303-5b52-4fe8-9f2c-7e23fd870772/2aa27303-5b52-4fe8-9f2c-7e23fd8707721.gif)
setw(12)
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&
addrlist);
//按姓名或办公室电话排序
};
voidAddrList:
:
AddSort(char*id,char*name,char*op,char*hp,char*mp,char*email)
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->
Name,name)!
=0&
x2!
=NULL){x仁x2;
x2=x2->
}if(x1!
=x2)
{if(x2)
x1->
Next=x2->
deletex2;
"
已删除"
endl;
else{cout<
未找到,请确认后再输入"
else{HeadPtr=x1->
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[O];
i=0;
while(i<
m-1)
p[i]->
Next=p[i+1];
i++;
Tag=1;
break;
case2:
x=x->
ID,p[k]->
ID)<
=0){
HeadPtr=p[0];
i++;
Tag=2;
}}
ShowAII()//显示全部结点,每10个显示一屏
if(x);
inti=1;
while
(1)
cout<
setw(12)<
学号"
姓名"
办公电话setw(12)<
家庭电话"
"
移动电话"
电子邮件"
=10)
x->
Show();
if(x=x->
Next);
elsebreak;
system("
pause"
);
i=1;
释放链表空间
AddrList:
~AddrList()//
Node*x仁HeadPtr;
while(x2=x2->
Next)
deletex1;
x仁x2;
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:
binary);
out<
p->
;
OfficePhone<
MobilePhone<
while(p=p->
HomePhone<
out.close();
WriteToTxtFile(char*filename)//将链表写到文本文件中
Node*x=HeadPtr;
ofstreamout(filename);
out<
办公电话"
家庭电话"
E-mail"
MobilePhone<
while(x=x->
setw(12)<
显示菜单
}voidDisplayMenu()//{
inti;
char*menu[]={"
IIII
*************II
II
******************************************II
AA"
NULL};
cls"
for(i=0;
menu[i];
i++)
menu[i]<
请选择(1--9):
voidadd(AddrList&
addrlist)//按当前Tag标志插入结点,插入结点后,链表仍然保持
升序
添加记录"
endl<
**************************************"
endl<
请输入一个联系人数据"
学号"
家庭
电话"
电子邮件"
cin>
a»
c>
addrlist.AddSort(a,b,c,d,e,f);
cout<
添加完成"
system("
删除一个结点
删除记录"
voiddel(AddrList&
addrlist)//{
charp[30];
'
请输入一个联系人的姓名
p;
addrlist.Delete(p);
删除完成"
显示所有结点
显示所有联系人
voidshowall(AddrList&
addrlist)//{
cin»
name;
if(p=addrlist.LookUp(name))
移动电话"
电子邮件
elsecout<
未找到"
voidmodify(AddrList&
charname[30];
修改一个结点
修改联系人
请输入修改后的联系人"
ID»
Name»
OfficePhone»
HomePhone»
MobilePhone>
Email
修改完成"
}
voidaddfromtxtfile(AddrList&
charfilename[30];
从正文文件增加记录
filename;
从TXT文档中增加记录
请输入要加入的文件名
addrlist.CreateFromTxt(filename);
载入完成"
将链表写到正文文件中
}voidwritetotxtfile(AddrList&
导出联系人到Txt文档
请输入要导出的文件名
addrlist.WriteToTxtFile(filename);
导出完成"
voidsort(AddrList&
addrlist)//按姓名或办公室电话排序
intT_T;
intchoice=0;
switch(addrlist.Tag)
case0:
{cout<
此文档未排序"
case1:
此文档已按"
姓名"
排序,将按另一种方式排序"
}case2:
请输入排序方式:
1.姓名2.学号"
T_T;
if(addrlist.Sort(T_T))
已排序"
空记录!
voidquit(AddrList&
addrlist)//退出前将链表写入二进制文件中
addrlist.WriteToFile(”通讯录数据文件.bin"
}voidmain()
color0A"
intchoice=0,state;
charch;
通讯录数据文件.bin"
//从二进制文件中读入数据,构建链
显示主菜单
AddrListaddrlist;
addrlist.CreateList(”表
while(choice!
=9)
DisplayMenu();
//cin>
ch;
if(ch<
'
1'
||ch>
9)continue;
choice=ch-'
O'
switch(choice)
add(addrlist);
break;
del(addrlist);
case3:
showall(addrlist);
case4:
query(addrlist);
case5:
modify(addrlist);
case6:
addfromtxtfile(addrlist);
case7:
writetotxtfile(addrlist);
case8:
sort(addrlist);
case9:
quit(addrlist);
}system("