通讯录的制作数据结构c语言版_第1页
通讯录的制作数据结构c语言版_第2页
通讯录的制作数据结构c语言版_第3页
通讯录的制作数据结构c语言版_第4页
通讯录的制作数据结构c语言版_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、通讯录的设计、设计思路:经过一个学期的程序设计学习,我逐渐了解了计算机的基本原理和 c语言的 基本常识,并可以逐渐自己来实现一些简单的程序任务。此次程序设计我选择了通讯录设计,通过函数、结构体的定义以及一些基本操作运用,经过一个多月的编写、调试、测试,最终完成了该程序的设计。以下为我的设计思路:首先,确定通讯录的功能,我初步设计了六项功能:输入(程序中对应enter ()、删除(程序中对应delete ()、显示通讯录(程序中对应list ()、 搜索(程序中对应search ()、保存(程序中对应save ()、装载(程序 中对应load ()。其次,对于存储的数据结构,我则主要选择了一下几

2、个方面的信息:姓名、 性别年龄、籍贯、手机、下一个指针(用于链表的操作与实现)、当前指针(用于链表的操作与实现)。二、程序源代码:#include struct address/*创建一个address结构*/char name10;/* 姓名*/char sex2;/* 性别*/char age2;/* 年龄*/char native10;/* 籍贯*/char telephone12; /* 手机*/struct address *next; /* 下一个入口的指针*/struct address *prior; /*当前记录的指针*/ list_entry;struct address

3、*start; /* 指向列表中第一个入口 */struct address *last; /*指向列表中最后一个入口 */voidenter(),display(),search(),save(),load();menu_select(),list(),delet(),inputs();break;main()char s20,choice;struct address *info;start=last=NULL; /* 列表长度清零*/for(;) /*列循环的一个用法*/switch(menu_select()case 1: enter(); /*输入 1, 进入enter()程序,是输

4、入通讯录*/break;case 2:delet(); /* 输入 2, 进入delete()程序,是删除一个记录*/break;case 3:list();/* 输入3,进入list()程序,是列表显不通 信录*/break;case 4:search(); /*输入4 ,进入search()程序,搜索一个街道*/case 5:save();/*输入5,保存列表到磁盘文件*/break;case 6:load();/* 输入6,从磁盘文件读入列表*/break;case 7:return(0);/*选择一个选项*/menu_select()char s20;int c;printf(1.输入

5、一个名字(直接回车则退出)n);printf(2.删除一个名字 n);printf(3.列表显示 n);printf(4.搜索查询 n);printf(5.保存文件 n);printf(6.装入文件 n);printf(7.退出 n);doprintf(n 输 入您 的选择:”);gets(s);c=atoi(s);while (c7);return c;/*输入名字和地址*/void enter()structaddress*info,*dls_store();for(;)info=(struct address *) malloc(sizeof(list_entry);if (!info)

6、 printf(n 内存溢出);return;inputs( 输 入 姓 名:,info-name,10);if (!info-name0)break;/*名字长度为0,停止输入*/ TOC o 1-5 h z inputs(输入性别:,info-sex,2);inputs(输入年龄:,info-age,2);inputs(输入籍贯:,info-native,10);inputs(输入电iS:,info-telephone,12);start=dls_store(info,start);/*保存在第一个记录里*/*输入循环*/inputs(prompt,s,count) /*这个函数用于输入长

7、度为count的一个 字符串,用于防止字符串长度超过它的空间,并提出警告*/char *prompt;char *s;int count;char p255;doprintf(prompt);/*显示这个函数的字符用*/gets(p);/* 从键盘获得255个输入*/if(strlen(p)count)printf(n 字符串超过长度!);/*如果数组P中的长度超过调用 函数中的参数count ,提示*/while (strlen(p)count);/*如果输入的字符串长度超过 count ,循环重新输入,否则退出,返 回调用者*/strcpy(s,p); /*s 是目标字符申,输出时字符串在

8、s中*/return(0);/*产生一个又链接表,当一个新元素插入到列表的开始时,一个指向第一个元素的指针被返回*/struct address *dls_store(i,top)/*存贮顺序*/struct address *i;/*新的元素*/struct address *top;/*列表中的第一个元素*/struct address *old,*p;if(last=NULL) /* 列表中的第一个元素*/i-next=NULL;i-prior=NULL;last=i;return i;p=top; /*从列表的顶部开始*/old=NULL;while(p)if(strcmp(p-nam

9、e,i-name)next;elseif (p-prior) p-prior-next=i;i-next=p;i-prior=p-prior;p-prior=i;return top;i-next=p; /* 新的第一个元素*/i-prior=NULL;p-prior=i;return i;old-next=i;/* 设置未尾*/i-next=NULL;i-prior=old;last=i;return start;/*从列表中删除一个元素*/delet()struct address *info,*find();char s10;printf(输入姓名:);gets(s);info=find

10、(s);if(info)if (start=info)start=info-next;if(start)start-prior=NULL;else last=NULL;else info-prior-next=info-next;if (info!=last)info-next-prior=info-prior;elselast=info-prior;free(info); /* 释放空问*/return(0);struct address *find(name)/* 一个查找姓名的结构*/char *name;struct address *info;info=start;while(inf

11、o)if(!strcmp(name,info-name) return info;info=info-next;/*获得下一个地址*/printf(姓名没有发现!n);return NULL; /* 没有发现女4名*/list()/* 列表*/register int t;struct address *info;info=start;while(info)display(info);info=info-next;/*获得下一个地址*/printf(nn);return(0);void display(info) /* 显示通信录*/struct address *info;printf(%s

12、n,info-name);printf(%sn,info-sex);printf(%sn,info-age);printf(%sn,info-native);printf(%sn,info-telephone);printf(nn);void search() /* 搜索一个名字*/char name10;struct address *info,*find();printf(输入查找的名字!);gets(name);if(!(info=find(name)printf(没有找到!n);else display(info);void save()/*保存通信录*/register int t;

13、struct address *info;FILE *fp;if(fp=fopen(mlist,wb)=NULL) /*打开文件名mlist如果错误*/printf( 没有找到文 件.n);exit;printf(n 正在 保存文 件n);info=start;while(info)fwrite(info,sizeof(structaddress),1,fp);info=info-next;/*获得下一个地址*/fclose(fp);void load()/* 打开一个文件*/register int t;structaddress*info,*temp=NULL;FILE *fp;if(fp

14、=fopen(mlist,rb)=NULL)printf( 打开文件失 败n);exit(1);while(start)info=start-next;free(info);start=info;printf(n 正在 读取文 件n);start=(struct address*)malloc(sizeof(struct address);if(!start)printf(存贮溢出n);return;info=start;while(!feof(fp)if(1!=fread(info,sizeof(structaddress ),1,fp) break;/*为下一个分配空间*/ info-ne

15、xt=(structaddress*)malloc (sizeof(structaddress);if(!info-next) printf( 存贮溢temp-next=NULL; /* 最后一个输入*/last=temp;start-prior=NULL;fclose(fp);出n);return;info-prior=temp;temp=info;info=info-next;三、调试结果调试结果初始状态如下图所示:以下介绍五大重点功能: 步骤一:输入功能。选才 1,输入名字“张三”,会出现一系列需要输入的信息,输入完毕后接回车,再重复以上动作输入两个人:王五、李四。如下图所示。步骤二:保存功能。按两次回车,退出输入状态,按 5保存。如图1所示。图1图2步骤三:删除功能。选才 2,输入“张三”,回车;选择5 “保存”,回车。如图2所示。步骤四:查看功能。选才3,回车,得到图3所示。图3图4步骤五:搜索功能。选才4,输入“李四”,回车,得到图4所示。四、设计过程中存在的问题在设计的过程中,不免出现过很多问题。首先,设计第一个输入操作时没有 考虑到返回的问题,所以如果选择了第一个操作则会无止境的重复输入, 后来就 在第一项

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论