数据结构课程设计通讯录制作Word文档下载推荐.docx

上传人:b****2 文档编号:15082037 上传时间:2022-10-27 格式:DOCX 页数:23 大小:155.18KB
下载 相关 举报
数据结构课程设计通讯录制作Word文档下载推荐.docx_第1页
第1页 / 共23页
数据结构课程设计通讯录制作Word文档下载推荐.docx_第2页
第2页 / 共23页
数据结构课程设计通讯录制作Word文档下载推荐.docx_第3页
第3页 / 共23页
数据结构课程设计通讯录制作Word文档下载推荐.docx_第4页
第4页 / 共23页
数据结构课程设计通讯录制作Word文档下载推荐.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

数据结构课程设计通讯录制作Word文档下载推荐.docx

《数据结构课程设计通讯录制作Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计通讯录制作Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。

数据结构课程设计通讯录制作Word文档下载推荐.docx

charcity[10];

/*城市*/

charstate[15];

/*国家*/

chareip[7];

/*邮编*/

structaddress*next;

/*后继指针*/

structaddress*prior;

/*前驱指针*/

}

链表的插入,删除来实现通讯录里的内容的插入删除

当操作完成通过文件件来存储链表的信息,下次打开程序时,读取文件里的内容到内存中,放在链表,然后又可以对链表进行操作;

 

在这里面,文件内容不可以在外部更改,只能通过读取到内存链表中,通过程序进行更改,然后再写入到文件,写入过程会覆盖上次的内容。

structaddress*start;

/*首结点*/

structaddress*last;

/*尾结点*/

structaddress*find(char*);

/*声明查找函数*/

voidenter();

/*函数声明*/

voidsearch();

/*查找,查找过程中调用find函数*/

voidsave();

/*存盘,将链表信息保存到文件中*/

voidload();

/*导入,将文件内容导入到内存链表中*/

voidlist();

/*显示当前链表中信息*/

voidddelete(structaddress**,structaddress**);

voidinsert(structaddress*i,structaddress**start,

structaddress**last);

voidinputs(char*,char*,int);

voiddisplay(structaddress*);

intmenu_select(void);

三.详细设计

1.主界面设计

通过switch语句调用各种函数,实现各种操作。

然后把switch嵌套到无限的for循环(for(;

;

))中,使完成每一步操作都回到到选择操作的主界面

voidmain()

{

start=last=NULL;

for(;

)/*无限循环*/

{

switch(menu_select())/*调用主界面的选择函数,带回返回值*/

case1:

enter();

continue;

case2:

ddelete(&

start,&

last);

case3:

list();

case4:

search();

case5:

save();

case6:

load();

case7:

exit(0);

}

intmenu_select(void)/*主目录*/

chars[80];

intc;

printf("

………………^欢迎使用DOS通讯录系统^………………\n"

);

************请在做其它操作前先导入*************\n"

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

printf("

*****************1.输入信息******************\n"

*****************2.删除信息******************\n"

*****************3.显示信息******************\n"

*****************4.查找******************\n"

*****************5.存盘******************\n"

*****************6.导入******************\n"

*****************7.退出******************\n"

do{

\nPleaseenteryourchoice:

\n"

gets(s);

c=atoi(s);

/*将获取的字符串转换成整型*/

}while(c<

0||c>

7);

returnc;

/*返回输入值*/

2.输入信息函数

输入函数:

structaddress*info;

/*定义当前结点*/

for(;

info=(structaddress*)malloc(sizeof(structaddress));

/*为当前结点分配空间*/

if(!

info)

{

printf("

\nOutofmemory"

exit(0);

/*如果分配空间失败,退出程序*/

}

输入空姓名结束:

inputs("

请输入姓名:

"

info->

name,10);

info->

name[0])break;

/*如果输入姓名为空,结束循环*/

请输入街道:

street,50);

请输入城市:

city,15);

请输入国家:

state,15);

请输入邮编:

eip,7);

insert(info,&

/*调用结点插入函数*/

输入函数调用到另外两个函数,inputs和insert

其中inputs中还用到fgets(str,n,fp),把键盘的输入信息传到

字符串中

charp[255];

do

printf(prompt);

fgets(p,254,stdin);

/*stdin,标准输入缓存,获取键盘输入信息*/

if(strlen(p)>

count)

printf("

\nTooLong\n"

}while(strlen(p)>

count);

p[strlen(p)-1]=0;

strcpy(s,p);

insert是关键函数,每当输入完一条信息都会调用到insert函数,将信息插入到链表中

if(*last==NULL)/*如果尾结点为空,意味着当前链表为空*/

{/*则将该结点赋给头尾结点*/

i->

next=NULL;

prior=NULL;

*last=i;

*start=i;

return;

else/*如果链表不为空,则将信息插入到链表尾,作为尾结点*/

{

(*last)->

next=i;

prior=*last;

i->

*last=(*last)->

next;

NULL

插入信息会显示在链表最后

3.删除·

查找·

显示函数

删除函数调用find函数,通过姓名,查找到该节点,然后删除该节点信息,这其中涉及到头尾节点,及其变化;

先判断是否为头结点,如果为头结点,则把原头结点的后继作为新的头结点

如果不为头结点,则该节点的前驱的next指向该节点的后继

如果该节点为尾结点,则让该节点的前驱作为新的尾结点

chars[80];

inputs("

s,10);

info=find(s);

if(info)

Deleting......\n"

if(*start==info)

*start=info->

if(*start)

(*start)->

else*last=NULL;

else

{info->

prior->

next=info->

if(info!

=*last)

next->

prior=info->

prior;

else

*last=info->

free(info);

-Ok,删除成功!

与删除相比,查找就简单的多,只需要调用find的函数,找到该节点记录并显示出来就行了,在search本身里面只要调整下输出的界面就行了

structaddress*find(char*name)/*查找函数,形参为欲查找结点的name域*/

info=start;

while(info)

if(!

strcmp(name,info->

name))

returninfo;

info=info->

Namenotfound.\n"

returnNULL;

输出函数更简单,直接输出链表即可

if(info==NULL)

当前记录为空!

else

姓名\t街道\t\t城市\t国家\t邮编\t\n"

while(info)

display(info);

/*display为输出节点函数,一些列print组成*/

if(info->

next==NULL)

{break;

}info=info->

};

4.存储与导入

存储

存储时通过fopen打开文件(没有该文件时则创建)

fp=fopen("

record.txt"

"

wb"

/*生成文件*/

fp)

{printf("

Cannotopenfile.\n"

return}

然后通过fwrite将链表信息写入文件

while(info)/*把链表写入文件*/

{fwrite(info,sizeof(structaddress),1,fp);

fwrite每次从info读取一个sizeof(structaddress)长度的数据,

写入fp文件中。

写入完毕后即关闭文件

fclose(fp);

导入

导入时先建立链表,为节点分配内存空间

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

当前位置:首页 > 初中教育 > 初中作文

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

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