ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:334.47KB ,
资源ID:10990104      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10990104.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(通讯录管理系1.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

通讯录管理系1.docx

1、通讯录管理系1通讯录管理系统1. 引言数据结构是一门理论性强、思维抽象、难度较大的课程,是基础课和专业课之间的桥梁。该课程的先行课程是计算机基础、程序设计语言、离散数学等,后续课程有操作系统、编译原理、数据库原理、软件工程等。 通过本门课程的学习,我们应该能透彻地理解各种数据对象的特点,学会数据的组织方法和实现方法,并进一步培养良好的程序设计能力和解决实际问题的能力,而且该课程的研究方法对我们学生在校和离校后的学习和工作,也有着重要的意义。2.系统设计2.1. 设计目的本课程设计可加深对课堂理论学习的理解,增强动手能力,以培养学生合作的能力,为毕业设计作好实践环节上的准备。通讯录系统是在学校常

2、见的计算机信息管理系统。它的主要任务是对学生信息进行管理,如学生信息的输入、查询、修改、增加、删除,迅速准确地完成各种学生信息的统计和查询。 2.2.设计内容(1)数据包括:姓名(name)街道(street)城市(city)邮编(eip)国家(state)。(2)可删除记录。(3)可显示所有保存的记录。(4)可按人的姓名进行查询。2.3.设计思路通过visual c+(用的是C语言)编写的一个控制台程序,该程序通过链表的操作,文件存储来实现通讯录的基本功能。struct address /*定义结构*/ char name10; /*姓名*/ char street50; /*街道*/ ch

3、ar city10; /*城市*/ char state15; /*国家*/ char eip7; /*邮编*/ struct address *next; /*后继指针*/ struct address *prior; /*前驱指针*/链表的插入,删除来实现通讯录里的内容的插入删除,当操作完成通过文件件来存储链表的信息,下次打开程序时,读取文件里的内容到内存中,放在链表,然后又可以对链表进行操作;2.4. 详细设计1.主界面设计通过switch语句调用各种函数,实现各种操作。然后把switch嵌套到无限的for循环(for(;))中,使完成每一步操作都回到到选择操作的主界面函数之间的相互调用

4、void main() start = last = NULL; for(;) /*无限循环*/ 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) /*主

5、目录*/ char s80; int c;printf(欢迎使用DOS通讯录系统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); /*将获取的字符串

6、转换成整型*/ while(c7); return c; /*返回输入值*/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; /*如果输入姓名为空,结束循

7、环*/ inputs(请输入 街道:,info-street,50); 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,标准输入缓存,获取

8、键盘输入信息*/ if(strlen(p)count) printf(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;

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

10、(*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;else *last=info-prior;free(info); printf(-Ok,删除成功!n);与删除相比,查找就简单的多,只需要调用find的函数,找到该节点记录并显示出来就行了,在search本身里面只要调整下输出的界面就行了struct address *find(char

11、 *name) /*查找函数,形参为欲查找结点的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街道t城市t国家t邮编tn);while(info)display(info);/*display为输出节点函数,一些列print组成*/i

12、f(info-next=NULL) break; 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文件中。写

13、入完毕后即关闭文件fclose(fp);导入导入时先建立链表,为节点分配内存空间然后打开文件,将文件的内容写入内存链表中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 *

14、)malloc(size); if(!start) /*如果读取失败,返回*/ 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=tem

15、p; start-prior=0; fclose(fp);3.程序清单#include#include#includestruct address /*定义结构*/ char name10; char street50; char city10; char state15; char eip7; struct address *next; /*后继指针*/ struct address *prior; /*前驱指针*/;struct address *start; /*首结点*/struct address *last; /*尾结点*/struct address *find(char *);

16、 /*声明查找函数*/void enter(); /*函数声明*/void search();void save(); void load();void list();void ddelete(struct address *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);

17、void main() start = last = NULL; for(;) 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(欢

18、迎使用DOS通讯录系统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; /*返回输入值*/void e

19、nter() /*输入函数,本函数循环输入资料,当输入姓名为空时退出*/ 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; /*如果输入姓名为空,结束循环*/ inp

20、uts(请输入 街道:,info-street,50); inputs(请输入 城市:,info-city,15); inputs(请输入 国家:,info-state,15); inputs(请输入 邮编:,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

21、Longn); while(strlen(p)count); pstrlen(p)-1=0; strcpy(s,p);void insert( /*数据插入函数*/ struct address *i, struct 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

22、)-next; void ddelete(struct address *start,struct address *last) /*删除函数*/ struct address *info; char s80; inputs(请输入 姓名:,s,10); /*输入欲删除结点的name域内容*/ info=find(s); /*查找该内容*/ if(info) /*如果找到*/ printf(Deleting.n); if(*start=info) /*如果该结点为首结点,把该结点的下驱作为新的首结点(入口)*/ *start=info-next; if(*start) (*start)-pri

23、or=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 *na

24、me) /*查找函数,形参为欲查找结点的name域*/ struct address *info; info=start; while(info) if(!strcmp(name,info-name)return info; info=info-next; printf(未找到相关信息.n); return NULL; /*输出整个链表*/void list(void) struct address *info; info=start; if(info=NULL) printf(当前记录为空!); else printf(姓名t街道tt城市t国家t邮编tn); while(info) disp

25、lay(info); if(info-next=NULL)break; info=info-next; ; printf(nn); void display(struct address *info) /*输出传入结点函数*/ printf(%st,info-name); printf(%st,info-street); printf(%st,info-city); printf(%st,info-state); printf(%st,info-eip); printf(n);void search(void) /*查找函数*/ char name40; struct address *info; printf(请输入要查找的姓名:); /*输入欲查找的姓名*/ gets(name); info=find(name); if(!info) printf(姓名不存在n); /*如果没找到,显示Not found*/ else display(info); /*如果找到,显示该结点资料*/void save(void) /*保存函数*/ struct address *info; FILE *fp; fp=fop

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

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