欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    数据结构课程设计通讯录制作.docx

    • 资源ID:18317502       资源大小:144.54KB        全文页数:26页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构课程设计通讯录制作.docx

    1、数据结构课程设计通讯录制作一 设计内容(通讯录)本系统应完成一下几方面的功能:1)输入信息enter();2)显示信息display( );3)查找以姓名作为关键字 search( );4)删除信息delete( );5)存盘save ( );6)装入load( ) ;设计要求:1)每条信息至包含 :姓名(NAME )街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项2)作为一个完整的系统,应具有友好的界面和较强的容错能力二设计思路通过visual c+6.0(用的是C语言)编写一个dos界面的控制台程序,该程序通过链表的操作,文件存储来实现通讯录的基本功能struct

    2、address /*定义结构*/ char name10; /*姓名*/ char street50; /*街道*/ char city10; /*城市*/ char state15; /*国家*/ char eip7; /*邮编*/ struct address *next; /*后继指针*/ struct address *prior; /*前驱指针*/链表的插入,删除来实现通讯录里的内容的插入删除当操作完成通过文件件来存储链表的信息,下次打开程序时,读取文件里的内容到内存中,放在链表,然后又可以对链表进行操作;在这里面,文件内容不可以在外部更改,只能通过读取到内存链表中,通过程序进行更改

    3、,然后再写入到文件,写入过程会覆盖上次的内容。struct address *start; /*首结点*/struct address *last; /*尾结点*/struct address *find(char *); /*声明查找函数*/void enter(); /*函数声明*/void search(); /*查找,查找过程中调用find函数*/void save(); /*存盘,将链表信息保存到文件中*/void load(); /*导入,将文件内容导入到内存链表中*/void list(); /*显示当前链表中信息*/void ddelete(struct address *,s

    4、truct address *);void insert(struct address *i,struct address *start, struct address *last);void inputs(char *,char *,int);void display(struct address *);int menu_select(void);三详细设计1.主界面设计通过switch语句调用各种函数,实现各种操作。然后把switch嵌套到无限的for循环(for(;))中,使完成每一步操作都回到到选择操作的主界面void main() start = last = NULL; for(;

    5、) /*无限循环*/ switch(menu_select() /*调用主界面的选择函数,带回返回值*/ case 1:enter(); continue; case 2:ddelete(&start,&last); continue; case 3:list(); continue; case 4:search(); continue; case 5:save(); continue; case 6:load(); continue; case 7:exit(0); int menu_select(void) /*主目录*/ char s80; int c;printf(欢迎使用DOS通讯录

    6、系统n);printf(*请在做其它操作前先导入*n);printf(*n); printf(* 1.输入信息 *n); printf(* 2.删除信息 *n); printf(* 3.显示信息 *n); printf(* 4.查找 *n); printf(* 5.存盘 *n); printf(* 6.导入 *n); printf(* 7.退出 *n); printf(*n); do printf(nPlease enter your choice:n); gets(s); c = atoi(s); /*将获取的字符串转换成整型*/ while(c7); return c; /*返回输入值*/

    7、2.输入信息函数输入函数:struct address *info; /*定义当前结点*/for(;) info=(struct address *)malloc(sizeof(struct address); /*为当前结点分配空间*/ if(!info) printf(n Out of memory); exit(0); /*如果分配空间失败,退出程序*/ printf(输入空姓名结束:n); inputs(请输入 姓名:,info-name,10); if(!info-name0)break; /*如果输入姓名为空,结束循环*/ inputs(请输入 街道:,info-street,50

    8、); inputs(请输入 城市:,info-city,15); inputs(请输入 国家:,info-state,15); inputs(请输入 邮编:,info-eip,7);insert(info,&start,&last); /*调用结点插入函数*/ 输入函数调用到另外两个函数,inputs和insert其中inputs中还用到fgets(str,n,fp),把键盘的输入信息传到字符串中char p255; do printf(prompt); fgets(p,254,stdin);/*stdin,标准输入缓存,获取键盘输入信息*/ if(strlen(p)count) printf

    9、(nToo Longn); while(strlen(p)count); pstrlen(p)-1=0; strcpy(s,p);insert是关键函数,每当输入完一条信息都会调用到insert函数,将信息插入到链表中if(*last=NULL) /*如果尾结点为空,意味着当前链表为空*/ /*则将该结点赋给头尾结点*/ i-next=NULL; i-prior=NULL; *last=i; *start=i; return; else /*如果链表不为空,则将信息插入到链表尾,作为尾结点*/ (*last)-next=i; i-prior=*last; i-next=NULL; *last=

    10、(*last)-next; NULL NULL插入信息会显示在链表最后3.删除查找显示函数删除函数调用find函数,通过姓名,查找到该节点,然后删除该节点信息,这其中涉及到头尾节点,及其变化;先判断是否为头结点,如果为头结点,则把原头结点的后继作为新的头结点如果不为头结点,则该节点的前驱的next指向该节点的后继如果该节点为尾结点,则让该节点的前驱作为新的尾结点struct address *info;char s80;inputs(请输入 姓名:,s,10); info=find(s); if(info) printf(Deleting.n);if(*start=info) *start=i

    11、nfo-next; if(*start)(*start)-prior=NULL; else *last=NULL; else info-prior-next=info-next; if(info!=*last) info-next-prior=info-prior;else *last=info-prior;free(info); printf(-Ok,删除成功!n);与删除相比,查找就简单的多,只需要调用find的函数,找到该节点记录并显示出来就行了,在search本身里面只要调整下输出的界面就行了struct address *find(char *name) /*查找函数,形参为欲查找结

    12、点的name域*/struct address *info; info=start; while(info) if(!strcmp(name,info-name)return info; info=info-next; printf(Name not found.n); return NULL;输出函数更简单,直接输出链表即可if(info=NULL)printf(当前记录为空!);else printf(姓名t街道tt城市t国家t邮编tn);while(info)display(info);/*display为输出节点函数,一些列print组成*/if(info-next=NULL) bre

    13、ak; info=info-next;4.存储与导入存储存储时通过fopen打开文件(没有该文件时则创建)fp=fopen(record.txt,wb); /*生成文件*/if(!fp)printf(Cannot open file.n);return然后通过fwrite将链表信息写入文件while(info) /*把链表写入文件*/fwrite(info,sizeof(struct address),1,fp); info=info-next;fwrite每次从info读取一个sizeof(struct address)长度的数据,写入fp文件中。写入完毕后即关闭文件fclose(fp);导

    14、入导入时先建立链表,为节点分配内存空间然后打开文件,将文件的内容写入内存链表中register int t, size; struct address *info,*temp=0; char *p; FILE *fp; /*打开文件*/if(fp=fopen(record.txt,r)=NULL) printf(Cannot open file!n);return; printf(nnLoading.n); /*调用文件*/ size=sizeof(struct address); /*为结点分配内存*/start= (struct address *)malloc(size); if(!st

    15、art) /*如果读取失败,返回*/ printf(Out of memory!n); exit(0); info=start; p=(char*)info; while(*p+=getc(fp)!=EOF) for(t=0;tnext=(struct address *)malloc(size); if(!info-next) printf(Out of memory!n); return; info-prior=temp; temp=info; info=info-next; p=(char*)info; temp-next=0; last=temp; start-prior=0; fcl

    16、ose(fp);注意:每次文件存储的时候都会覆盖以前存在文件里的内容,而每次导入的时候都会改变链表的内容。因此每次打开程序时请先导入存储在文件里的数据,或者将record.txt备份存储起来,避免数据丢失。四设计总结通过本次课程设计,我学到了很多东西。以前从没有用过文件方面的知识,而这次设计中用到了,刚开始使用时出了很多问题,在文件存储时经常遇到意外错误而导致程序终止了。这次的实验使我对结构体,链表的认识更深刻,使用更熟练,刚开始时在链表插入时遇到好多次内存方面的错误,还有插入操作时对指针的使用不太熟练。通过一次次的思考与实验,思路更加清晰,程序的容错能力也越来越强。这次实验让我学到很多书本上

    17、没有的东西。程序里多次用到for(;)循环,还有(struct address *)malloc(sizeof(struct address)为节点分配内存空间。在文件操作中主要涉及到的函数有:fopen(”文件名”,”使用文件方式”);fwrite(info,sizeof(struct address),1,fp) ;fclose(文件指针);五参考资料C程序设计(第三版) 谭浩强 清华大学出版社数据结构(C+版) 李根强 中国水利水电出版社附完整源码:#include#include#includestruct address /*定义结构*/ char name10; char stre

    18、et50; char city10; char state15; char eip7; struct address *next; /*后继指针*/ struct address *prior; /*前驱指针*/;struct address *start; /*首结点*/struct address *last; /*尾结点*/struct address *find(char *); /*声明查找函数*/void enter(); /*函数声明*/void search();void save(); void load();void list();void ddelete(struct a

    19、ddress *start,struct address *last);void insert(struct address *i,struct address *start, struct address *last);void inputs(char *,char *,int);void display(struct address *);int menu_select(void);void main() start = last = NULL; for(;) switch(menu_select() case 1:enter(); continue; case 2:ddelete(&st

    20、art,&last); continue; case 3:list(); continue; case 4:search(); continue; case 5:save(); continue; case 6:load(); continue; case 7:exit(0); int menu_select(void) /*主目录*/ char s80; int c; printf(欢迎使用DOS通讯录系统n); printf(*请在做其它操作前先导入*n); printf(*n); printf(* 1.输入信息 *n); printf(* 2.删除信息 *n); printf(* 3.显

    21、示信息 *n); printf(* 4.查找 *n); printf(* 5.存盘 *n); printf(* 6.导入 *n); printf(* 7.退出 *n); printf(*n); do printf(nPlease enter your choice:n); gets(s); c = atoi(s); while(c7); return c; /*返回输入值*/void enter() /*输入函数,本函数循环输入资料,当输入姓名为空时退出*/ struct address *info; /*定义当前结点*/ for(;) info=(struct address *)mallo

    22、c(sizeof(struct address); /*为当前结点分配空间*/ if(!info) printf(n Out of memory); exit(0); /*如果分配空间失败,退出程序*/ printf(输入空姓名结束:n); inputs(请输入 姓名:,info-name,10); if(!info-name0) break; /*如果输入姓名为空,结束循环*/ inputs(请输入 街道:,info-street,50); inputs(请输入 城市:,info-city,15); inputs(请输入 国家:,info-state,15); inputs(请输入 邮编:,

    23、info-eip,7); insert(info,&start,&last); /*调用结点插入函数*/ void inputs(char *prompt,char *s,int count) /*输入函数,有越界检测功能*/ char p255; do printf(prompt); fgets(p,254,stdin); if(strlen(p)count) printf(nToo Longn); while(strlen(p)count); pstrlen(p)-1=0; strcpy(s,p);void insert( /*数据插入函数*/ struct address *i, str

    24、uct address *start, struct address *last ) if(*last=NULL) /*如果尾结点为空,意味着当前链表为空*/ i-next=NULL; i-prior=NULL; *last=i; *start=i; return; else (*last)-next=i; i-prior=*last; i-next=NULL; *last=(*last)-next; void ddelete(struct address *start,struct address *last) /*删除函数*/ struct address *info; char s80;

    25、 inputs(请输入 姓名:,s,10); /*输入欲删除结点的name域内容*/ info=find(s); /*查找该内容*/ if(info) /*如果找到*/ printf(Deleting.n); if(*start=info) /*如果该结点为首结点,把该结点的下驱作为新的首结点(入口)*/ *start=info-next; if(*start) (*start)-prior=NULL; else *last=NULL; else /*如果欲删除的结点不是首结点*/ info-prior-next=info-next; /*令该结点的前驱的next指针指向该结点的后驱, *又令该结点的后驱的prior指点指向该结点的前驱*/ if(info!=*last) /*如果该结点是尾结点,则令该结点的前驱为尾结点*/ info-next-prior=info-prior; else *last=info-prior; free(info); /*释放该结点所占用的内存*/ printf(-Ok,删除成功!n); struct address *find(char *name) /*查找函数,形参为欲查找结点的name域*/ struct address *info; info=


    注意事项

    本文(数据结构课程设计通讯录制作.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


    收起
    展开