c++通讯录系统.docx

上传人:b****1 文档编号:2644851 上传时间:2023-05-04 格式:DOCX 页数:19 大小:18.73KB
下载 相关 举报
c++通讯录系统.docx_第1页
第1页 / 共19页
c++通讯录系统.docx_第2页
第2页 / 共19页
c++通讯录系统.docx_第3页
第3页 / 共19页
c++通讯录系统.docx_第4页
第4页 / 共19页
c++通讯录系统.docx_第5页
第5页 / 共19页
c++通讯录系统.docx_第6页
第6页 / 共19页
c++通讯录系统.docx_第7页
第7页 / 共19页
c++通讯录系统.docx_第8页
第8页 / 共19页
c++通讯录系统.docx_第9页
第9页 / 共19页
c++通讯录系统.docx_第10页
第10页 / 共19页
c++通讯录系统.docx_第11页
第11页 / 共19页
c++通讯录系统.docx_第12页
第12页 / 共19页
c++通讯录系统.docx_第13页
第13页 / 共19页
c++通讯录系统.docx_第14页
第14页 / 共19页
c++通讯录系统.docx_第15页
第15页 / 共19页
c++通讯录系统.docx_第16页
第16页 / 共19页
c++通讯录系统.docx_第17页
第17页 / 共19页
c++通讯录系统.docx_第18页
第18页 / 共19页
c++通讯录系统.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

c++通讯录系统.docx

《c++通讯录系统.docx》由会员分享,可在线阅读,更多相关《c++通讯录系统.docx(19页珍藏版)》请在冰点文库上搜索。

c++通讯录系统.docx

c++通讯录系统

#include

#include

usingnamespacestd;

#defineLIST_INIT_SIZE100

#defineLISTINCREMENT10

intOK=1;

intOVER=0;

intERROR=0;

typedefstruct

{

charnum[10];//编号

charname[20];//姓名

charsex[6];//性别

charphone[13];//电话

charaddr[31];//地址

}DataType;

typedefstruct

{

DataType*elem;

intlength;//当前长度

intlistsize;//线性表的长度

}SqList;

/*主菜单*/

intmenu_select()

{

intchoice;

cout<<"\t\t个人通讯录管理系统\t\t\n";

cout<<"***************************************************\n";

cout<<"*1.建立"<<"2.插入"<<"3.查询"<<"4.删除"<<"5.输出"<<"0.退出*\n";

cout<<"***************************************************\n";

cout<<"请选择操作0-5:

";

for(;;)

{

cin>>choice;

if(choice<0||choice>5)//小于0大于5

cout<<"输入错误,重选0-5:

";

else

break;

}

cout<

returnchoice;

}

voidInitList(SqList&L)//初始化线性表

{

L.elem=(DataType*)malloc(LIST_INIT_SIZE*sizeof(DataType));

if(!

L.elem)

exit(OVER);

L.length=0;

L.listsize=LIST_INIT_SIZE;

}

voidCreateList(SqList&L)//建立通讯录

{

L.elem=(DataType*)malloc(LIST_INIT_SIZE*sizeof(DataType));

if(!

L.elem)

exit(OVER);

L.length=0;

L.listsize=LIST_INIT_SIZE;//因为建立一个通讯录,即重新开始建立一个,所以要初始化

inti=0;

intflag=1;

while(flag==1)

{

cout<<"编号(4)-姓名(8)-性别(3)-电话(11)-地址(31)\n";

cin>>L.elem[i].num>>L.elem[i].name>>L.elem[i].sex>>L.elem[i].phone>>L.elem[i].addr;

i++;

L.length++;

cout<<"是否还要继续添加?

(0or1):

";

cin>>flag;

cout<

}

}

intInsertNode(SqList&L,inti,DataTypex)

{

if(i<1||i>L.length+1)//这里L.length加1的目的是,用户可能会在最后边接上元素,并不插,

returnERROR;

DataType*newbase;

DataType*p,*q;

if(L.length>=L.listsize)

{

newbase=(DataType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(DataType));

if(!

newbase)

exit(OVER);

L.elem=newbase;

L.listsize+=LISTINCREMENT;

}

/*插入操作*/

q=&(L.elem[i-1]);//q为第i个元素的位置

for(p=&(L.elem[L.length-1]);p>=q;p--)

{

strcpy_s((p+1)->num,p->num);

strcpy_s((p+1)->name,p->name);

strcpy_s((p+1)->sex,p->sex);

strcpy_s((p+1)->phone,p->phone);

strcpy_s((p+1)->addr,p->addr);//i-1之后的元素依次后移一位

}

strcpy_s(q->num,x.num);

strcpy_s(q->name,x.name);

strcpy_s(q->sex,x.sex);

strcpy_s(q->phone,x.phone);

strcpy_s(q->addr,x.addr);

L.length++;

returnOK;

}

//------通讯录查询------------

voidcomputeLPSArray(char*pat,intM,int*lps);

intKMPSearch(char*pat,char*txt)

{

intM=strlen(pat);

intN=strlen(txt);

int*lps=(int*)malloc(sizeof(int)*M);

intj=0;//indexforpat[]

computeLPSArray(pat,M,lps);

inti=0;//indexfortxt[]

while(i

{

if(pat[j]==txt[i])

{

j++;

i++;

}

if(j==M)

{

j=lps[j-1];

return1;//匹配到对应字符串

}

elseif(pat[j]!

=txt[i])

{

if(j!

=0)

j=lps[j-1];

else

i=i+1;

}

}

free(lps);

return0;

}

voidcomputeLPSArray(char*pat,intM,int*lps)

{

intlen=0;//记录前一个[最长匹配的前缀和后缀]的长度

inti;

lps[0]=0;//lps[0]必须是0

i=1;

while(i

{

if(pat[i]==pat[len])

{

len++;

lps[i]=len;

i++;

}

else//(pat[i]!

=pat[len])

{

if(len!

=0)

{

len=lps[len-1];

}

else//如果(len==0)

{

lps[i]=0;//没有一个匹配的

i++;

}

}

}

}

voidListPhoneFind(chara[],SqList&L)//动态查询号码

{

intlen=0;

for(inti=0;;i++)

{

if(a[i]=='\0')

break;

elselen++;

}

DataType*p;

char*b=newchar[len];

p=L.elem;

for(inti=1;i<=L.length;i++)

{

for(intj=0;j

{

b[j]=p[i-1].phone[j];//字符串的部分复制

}

b[len]='\0';//加上字符串结尾符

if(strcmp(a,b)==0)

cout<

}

cout<<"是否继续输入号码(0/1)";

intnu;

cin>>nu;

if(nu){

cout<

char*a1=newchar[11-len];

cin>>a1;

strcat_s(a,11,a1);

ListPhoneFind(a,L);

}

elsereturn;

}

intListFind(SqList&L)

{//有序通讯录线性表上的查找

inti=1;

intxz;

DataType*p;

p=L.elem;

charSNum[5];

charSName[9];

charSPnum[11];

charSaddr[30];

do

{

cout<<"1按编号查询2按姓名查询3按电话查询4按地址查询\n";

cin>>xz;

cout<

if(xz!

=1&&xz!

=2&&xz!

=3&&xz!

=4)

cout<<"输入错误!

\n";

}while(xz!

=1&&xz!

=2&&xz!

=3&&xz!

=4);

if(xz==1)

{

intj=0;

cout<<"输入编号:

";

cin>>SNum;

cout<

while(i<=L.length&&strcmp(p[i-1].num,SNum)!

=0)

i++;

if(i>L.length)

return0;

else

returni;

}

elseif(xz==2)

{

cout<<"输入姓名:

";

cin>>SName;

cout<

while(i<=L.length&&strcmp(p[i-1].name,SName)!

=0)

i++;

if(i>L.length)

return0;

else

returni;

}

elseif(xz==3)

{

cout<<"输入电话:

";

cin>>SPnum;

ListPhoneFind(SPnum,L);//输入电话的动态查询

return-1;

}

else

{

cout<<"输入地址:

";//输入地址的KMP匹配查询

cin>>Saddr;

intflag=0;

for(inti=0;i

{

if(KMPSearch(Saddr,p[i].addr))

{

flag=1;

cout<

}

}

if(flag)return-1;

elsereturn0;

}

}

/*删除联系人*/

intDelNode(SqList&L)

{

DataType*p;

DataType*q;

inti;

cout<<"要删除哪个位置上的元素?

:

";

cin>>i;

cout<

if(i<1||i>L.length)

returnERROR;//特殊情况的处理

p=&(L.elem[i-1]);

q=L.elem+L.length-1;

for(p;p

{

strcpy_s(p->num,(p+1)->num);//i-1之后的元素依次后移一位

strcpy_s(p->name,(p+1)->name);

strcpy_s(p->sex,(p+1)->sex);

strcpy_s(p->phone,(p+1)->phone);

strcpy_s(p->addr,(p+1)->addr);

}//i之后的元素依次左移

L.length--;

returnOK;

}

voidPrintList(SqList&L)//输出通讯录

{

inti;

for(i=0;i

{

cout<

<

}

if(L.length==0)

cout<<"通讯录中没有元素!

\n";

cout<

}

//主函数

voidmain()

{

SqListL;

InitList(L);

for(;;)

{

switch(menu_select())

{

case1:

cout<<"*通讯录线性表的建立*"<

CreateList(L);

break;

case2:

cout<<"*通讯者信息的添加*"<

cout<

cout<<"编号(4)-姓名(8)-性别(3)-电话(11)-地址(31)"<

DataTypep;//申请新结点

cin>>p.num>>p.name>>p.sex>>p.phone>>p.addr;

inti;

intm;

cout<<"想插到哪个位置上?

";

cin>>i;

cout<

m=InsertNode(L,i,p);

if(m==ERROR)

cout<<"你输入的元素位置超过了界限!

"<

else

cout<<"已经插入了该元素!

\n"<

break;

case3:

inta;

cout<<"*通讯者信息的查询*\n";

a=ListFind(L);

if(a!

=0&&a!

=-1)

{

cout<<"编号(4)-姓名(8)-性别(3)-电话(11)-地址(31)"<

cout<

<

cout<

}

elseif(a==0)

cout<<"没有查到要查询的通讯者!

\n";

break;

case4:

intb;

cout<<"*通讯者信息的删除*\n";

b=DelNode(L);//删除结点

if(b==0)

cout<<"你输入的元素位置超过界限!

\n";

else

cout<<"已经成功删除了该元素!

\n";

break;

case5:

cout<<"*通讯者信息的输出*\n";

PrintList(L);

break;

case0:

cout<<"\t通讯录退出,欢迎使用!

\n";

system("pause");

return;

}

}

}

/*

运行结果:

个人通讯录管理系统

***************************************************

*1.建立2.插入3.查询4.删除5.输出0.退出*

***************************************************

请选择操作0-5:

1

*通讯录线性表的建立*

编号(4)-姓名(8)-性别(3)-电话(11)-地址(31)

1张三男1130310723哈尔滨工业大学

是否还要继续添加?

(0or1):

1

编号(4)-姓名(8)-性别(3)-电话(11)-地址(31)

2李四男11303107244黑龙江哈尔滨

是否还要继续添加?

(0or1):

1

编号(4)-姓名(8)-性别(3)-电话(11)-地址(31)

3王五男1130934哈尔滨南岗区

是否还要继续添加?

(0or1):

0

个人通讯录管理系统

***************************************************

*1.建立2.插入3.查询4.删除5.输出0.退出*

***************************************************

请选择操作0-5:

2

*通讯者信息的添加*

编号(4)-姓名(8)-性别(3)-电话(11)-地址(31)

4马良女12324西大直街哈工大

想插到哪个位置上?

4

已经插入了该元素!

个人通讯录管理系统

***************************************************

*1.建立2.插入3.查询4.删除5.输出0.退出*

***************************************************

请选择操作0-5:

3

*通讯者信息的查询*

1按编号查询2按姓名查询3按电话查询4按地址查询

1

输入编号:

1

编号(4)-姓名(8)-性别(3)-电话(11)-地址(31)

1张三男1130310723哈尔滨工业大学

个人通讯录管理系统

***************************************************

*1.建立2.插入3.查询4.删除5.输出0.退出*

***************************************************

请选择操作0-5:

3

*通讯者信息的查询*

1按编号查询2按姓名查询3按电话查询4按地址查询

2

输入姓名:

张三

编号(4)-姓名(8)-性别(3)-电话(11)-地址(31)

1张三男1130310723哈尔滨工业大学

个人通讯录管理系统

***************************************************

*1.建立2.插入3.查询4.删除5.输出0.退出*

***************************************************

请选择操作0-5:

3

*通讯者信息的查询*

1按编号查询2按姓名查询3按电话查询4按地址查询

3

输入电话:

113

1张三男1130310723哈尔滨工业大学

2李四男11303107244黑龙江哈尔滨

3王五男1130934哈尔滨南岗区

是否继续输入号码(0/1)1

113031

1张三男1130310723哈尔滨工业大学

2李四男11303107244黑龙江哈尔滨

是否继续输入号码(0/1)1

1130310724

2李四男11303107244黑龙江哈尔滨

是否继续输入号码(0/1)0

个人通讯录管理系统

***************************************************

*1.建立2.插入3.查询4.删除5.输出0.退出*

***************************************************

请选择操作0-5:

3

*通讯者信息的查询*

1按编号查询2按姓名查询3按电话查询4按地址查询

4

输入地址:

哈尔滨

1张三男1130310723哈尔滨工业大学

2李四男11303107244黑龙江哈尔滨

3王五男1130934哈尔滨南岗区

个人通讯录管理系统

***************************************************

*1.建立2.插入3.查询4.删除5.输出0.退出*

***************************************************

请选择操作0-5:

4

*通讯者信息的删除*

要删除哪个位置上的元素?

:

2

已经成功删除了该元素!

个人通讯录管理系统

***************************************************

*1.建立2.插入3.查询4.删除5.输出0.退出*

***************************************************

请选择操作0-5:

5

*通讯者信息的输出*

1张三男

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2