通讯录管理系统Word格式文档下载.docx

上传人:b****6 文档编号:22246918 上传时间:2023-02-03 格式:DOCX 页数:19 大小:49.55KB
下载 相关 举报
通讯录管理系统Word格式文档下载.docx_第1页
第1页 / 共19页
通讯录管理系统Word格式文档下载.docx_第2页
第2页 / 共19页
通讯录管理系统Word格式文档下载.docx_第3页
第3页 / 共19页
通讯录管理系统Word格式文档下载.docx_第4页
第4页 / 共19页
通讯录管理系统Word格式文档下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

通讯录管理系统Word格式文档下载.docx

《通讯录管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《通讯录管理系统Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。

通讯录管理系统Word格式文档下载.docx

从键盘输入数据

是链表为空否

插入表头

插入表尾

输出数据,存入磁盘文件

关闭文件

(显示信息)

FILE*fp,打开该文件

p=head,使p指向第一个结点

P指向的不是尾结点

真假

输出p所指向的结点

P指向下一个结点

关闭文件

(按姓名查找)

打开磁盘文件

是链表为空否

输出“尚无记录信息”

p=head

当name2=p->

name

是P是要找的结点否

输出此结点

输出“查无此人“的信息

(按编号查找)

当num2=p->

nun

(按地址查找)

当address2=p->

address

四.源程序代码:

#include<

stdio.h>

#include<

stdlib.h>

string.h>

#defineHEADER1"

--------------------------------所有记录--------------------------------------\n"

#defineHEADER2"

|num|name|phone|age|address|email|\n"

#defineHEADER3"

|------|---------------|---------------|---|----------|--------------------|\n"

#defineFORMAT"

|%-6s|%-15s|%-12s|%d|%-10s|%-20s|\n"

#defineDATAp->

data.num,p->

data.name,p->

data.phone,p->

data.age,p->

data.address,p->

data.email

#defineEND"

------------------------------------------------------------------------------\n"

intsave=0;

/*是否需要存盘的标志变量*/

/*定义与联系人有关的数据结构*/

structperson/*标记为person*/

{

charnum[6];

/*联系人编号*/

charname[15];

/*联系人姓名*/

charphone[12];

/*联系人电话号码*/

intage;

/*联系人年龄*/

charaddress[10];

/*联系人地址*/

charemail[20];

/*联系人电子邮箱*/

};

/*定义每条记录或结点的数据结构,标记为:

node*/

typedefstructnode

{

structpersondata;

structnode*next;

}Node,*Link;

voidmenu()/*主菜单*/

printf("

Mobiephonedirectory\n"

);

Madebyjianjiacangcang\n"

*************************Menu********************************\n"

*1Addrecordsto2Deletingrecords*\n"

*3Modifyrecords4Inquirerecords*\n"

*5Showrecords6Keeprecords*\n"

*0Exit*\n"

*************************************************************\n"

}

voidprinthead()/*格式化输出表头*/

printf(HEADER1);

printf(HEADER2);

printf(HEADER3);

voidprintdata(Node*pp)/*格式化输出表中数据*/

Node*p;

p=pp;

printf(FORMAT,DATA);

/*显示单链表l中存储的联系人记录,内容为person结构中定义的内容*/

voidDisp(Linkl)

Node*p;

p=l->

next;

/*l存储的是单链表中头结点的指针,该头结点没有存储联系人信息,指针域指向的后继结点才有联系人信息*/

if(!

p)/*p==NULL,NUll在stdlib中定义为0*/

{

printf("

\n=====>

没有记录!

\n"

return;

}

\n\n"

printhead();

/*输出表格头部*/

while(p)/*逐条输出链表中存储的联系人信息*/

printdata(p);

p=p->

/*移动直下一个结点*/

printf(HEADER3);

}

/*************************************************************

作用:

用于定位链表中符合要求的节点,并返回指向该节点的指针

参数:

findmess[]保存要查找的具体内容;

nameornum[]保存按什么查找;

在单链表l中查找;

**************************************************************/

Node*Locate(Linkl,charfindness[],charnameornum[])

Node*r;

if(strcmp(nameornum,"

num"

)==0)/*按编号查询*/

r=l->

while(r)

{

if(strcmp(r->

data.num,findness)==0)/*若找到findmess值的学号*/

returnr;

r=r->

}

elseif(strcmp(nameornum,"

name"

)==0)/*按姓名查询*/

r=l->

data.name,findness)==0)/*若找到findmess值的联系人姓名*/

address"

)==0)/*按地址查询*/

data.address,findness)==0)/*若找到findmess值的联系人地址*/

return0;

/*若未找到,返回一个空指针*/

/*输入字符串*/

voidstringinput(char*t,intlengths,char*attention)

charn[255];

do{

printf(attention);

/*显示提示信息*/

scanf("

%s"

n);

/*输入字符串*/

if(strlen(n)>

lengths)printf("

\nOverflow\n"

/*进行长度校验,超过lengths值重新输入*/

}while(strlen(n)>

lengths);

strcpy(t,n);

/*将输入的字符串拷贝到字符串t中*/

/*输入age中的数字*/

intnumberinput(char*attention)

intt=0;

%d"

&

t);

returnt;

/*增加联系人记录*/

voidAdd(Linkl)

Node*p,*r,*s;

charflag=0,num[6];

r=l;

s=l->

Disp(l);

/*先打印出已有的联系人信息*/

while(r->

next!

=NULL)

r=r->

/*将指针移至于链表最末尾,准备添加记录*/

while(l)/*一次可输入多条记录,直至输入学号为0的记录结点添加操作*/

while(l)/*输入编号,保证该编号没有被使用,若输入编号为0,则退出添加记录操作*/

{

stringinput(num,6,"

输入编号(按'

0'

返回主菜单):

"

/*格式化输入编号并检验*/

flag=0;

if(strcmp(num,"

0"

)==0)/*输入为0,则退出添加操作,返回主界面*/

{return;

s=l->

while(s)/*查询该编号是否已经存在,若存在则要求重新输入一个未被占用的学号*/

{

if(strcmp(s->

data.num,num)==0)

{

flag=1;

break;

}

s=s->

}

if(flag==1)/*提示用户是否重新输入*/

{

printf("

=====>

%salreadyexisttryangin?

num);

else

{break;

}

p=(Node*)malloc(sizeof(Node));

/*申请内存空间*/

if(!

p)

printf("

\nInsufficientmemoryspace"

return;

/*返回主界面*/

strcpy(p->

data.num,num);

/*将字符串num拷贝到p->

data.num中*/

stringinput(p->

data.name,15,"

Name:

stringinput(p->

data.phone,12,"

Phone:

p->

data.age=numberinput("

Age"

data.address,10,"

Address:

data.email,20,"

email:

p->

next=NULL;

/*表明这是链表的尾部结点*/

r->

next=p;

/*将新建的结点加入链表尾部中*/

r=p;

save=1;

return;

/*查询记录*/

voidFind(Linkl)

intselect;

/*1:

按编号查,2:

按姓名查,3:

按地址查找,其他:

返回主界面(菜单)*/

charsearchinput[20];

/*保存用户输入的查询内容*/

l->

next)

sorrynotfind!

\n=====>

1accordingnumtoinquire=====>

2accordingnametoinquire=====>

3accordingaddresstoinquire\n"

choose[1,2,3]:

select);

if(select==1)/*按编号查询*/

{

stringinput(searchinput,6,"

pleaseenteranumber:

p=Locate(l,searchinput,"

/*在l中查找学号为searchinput值的节点,并返回节点的指针*/

if(p)

printhead();

printdata(p);

printf(END);

printf("

pressanykeytocontinue"

else

notfind!

else

if(select==2)/*按姓名查询*/

stringinput(searchinput,15,"

pleaseenteraname:

p=Locate(l,searchinput,"

if(p)

printhead();

printf(END);

pressanykeytocontinue"

}

if(select==3)/*按地址查询*/

pleaseenteranandress:

else

\n**Errorpressanykeytocontinue**\n"

/*按姓名删除学生记录:

先找到保存该联系人记录的节点,然后删除该节点*/

voidDel(Linkl)

Node*p,*r;

charfindmess[20];

next)

{

return;

stringinput(findmess,15,"

inputtheexistingpersonname"

p=Locate(l,findmess,"

if(p)

r=l;

while(r->

=p)

r->

next=p->

free(p);

deletesuccess!

save=1;

Notfindthisperson!

/*修改电话记录。

先按输入的编号查询到该记录,然后提示用户修改编号之外的值,编号不能修改*/

voidModify(Linkl)

{

Nopersonrecord!

return;

modifypersonrecorder"

stringinput(findmess,6,"

inputtheexistingpersonnumber:

/*输入并检验该学号*/

/*查询到该节点*/

if(p)/*若p!

=NULL,表明已经找到该节点*/

Number:

%s,\n"

p->

data.num);

%s,"

data.name);

stringinput(p->

inputnewname:

p->

inputnewphonenumber:

inputnewaddress:

Email:

modifysuccess!

);

Disp(l);

save=1;

/*数据存盘*/

voidSave(Linkl)

FILE*fp;

fp=fopen("

c:

\\phonebook"

"

wb"

if(fp==NULL)/*打开文件失败*/

openfileerror!

return;

while(p)

if(fwrite(p,sizeof(Node),1,fp)==1)/*每次写一条记录或一个节点信息至文件*/

{

{break;

save=0;

fclose(fp);

/*关闭此文件*/

/*主函数*/

voidmain()

Linkl;

/*定义链表*/

FILE*fp;

/*文件指针*/

/*保存选择结果变量*/

charch;

/*保存(y,Y,n,N)*/

/*定义记录指针变量*/

l=(Node*)malloc(sizeof(Node));

l)

\napplyformemoryfailure"

/*如没有申请到,打印提示信息*/

l->

C:

ab+"

if(fp==NULL)

cannotopenfile!

exit(0);

while(!

feof(fp))

p=(Node*)malloc(sizeof(Node));

if(!

printf("

memorymallocfailure!

/*没有申请成功*/

exit(0);

/*退出*/

if(fread(p,sizeof(Node),1,fp)==1)

p->

r->

r=p;

/*r指针向后移一个位置*/

fclos

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

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1