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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构课程设计说明书模板.docx

1、数据结构课程设计说明书模板中北大学数据结构与算法课程设计说 明 书学 院、系:软件学院专 业:软件工程班 级:13140A01学 生 姓 名:景贝贝学 号:1314011438设 计 题 目:通讯录的制作 起 迄 日 期:2015年1月12日- 2015年1月29日指 导 教 师:杨顺民2015 年1月 29 日1 需求分析1)每条信息至包含 :姓名(NAME )街道(STREET)城市(CITY)邮编(EIP)国家(STATE)几项2)作为一个完整的系统,应具有友好的界面和较强的容错能力3)上机能正常运行,并写出课程设计报告通讯录的基本活动包括:对一个人的采编、删除、查找和显示等等。由于上述

2、四项基本活动都是通过人名(即关键字)进行的。作为通讯录,就需要一个模块来完成对别人的登记和记录情况,本程序使用文件来完成上述操作。2 设计内容本系统应完成一下几方面的功能:1)输入信息enter();2)显示信息display( );3)查找以姓名作为关键字 search( );4)删除信息delete( );5)存盘save ( );6)装入load( ) ;3 设计目的用数据结构中的双向链表作数据结构,结合C语言基本知识。编写一个通讯录管理系统。以把所学数据结构知识应用到实际软件开发中去。线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素。因此,为了表示每个数据元素与其后

3、继元素之间的逻辑关系,对于数据元素来说,除了存储数据本身信息之外,还需要存储一个指示其后继的信息。这两部分组成数据的存储映像,称为结点。4.系统流程图5.7exit()退出6.详细设计及(1) 结构体:(构造一个结构体来存储和使用数据)struct address /*定义结构*/ char name30; /姓名 char street100; /街道 char city30; /城市 char state30; /国家 char zip11; /邮政编码 struct address *next; /*后继指针*/ struct address *prior; /*前导指针*/;struc

4、t address *start; /*首结点*/struct address *last; /*尾结点*/struct address *find(char *); /*声明查找函数*/(2)包含被调用函数: 功能void enter(); /输入信息 /*函数声明*/void search(); /查找信息void save(); /存盘 void load(); /装入void list(); /显示信息void mldelete(struct address *,struct address *); /删除信息void dls_store(struct address *i,struc

5、t address *start, struct address *last);void inputs(char *,char *,int);void display(struct address *);int menu_select(void);(3)实现主程序与各模块的调用关系:主函数通过调用各个函数来连接各个函数,从而实现程序功能的实现。int main(void) start = last = NULL; for(;) switch(menu_select() case 1:enter(); continue; case 2:mldelete(&start,&last); contin

6、ue; case 3:list(); continue; case 4:search(); continue; case 5:save(); continue; case 6:load(); continue; case 7:exit(0); 7.部分调试界面8.程序源码#include#include#includestruct address /*定义结构*/ char name30;/姓名 char street100;/街道 char city30;/城市 char state30;/国家 char zip11;/邮编 struct address *next; /*后继指针*/ st

7、ruct address *prior; /*前导指针*/;struct address *start; /*首结点*/struct address *last; /*尾结点*/struct address *find(char *); /*声明查找函数*/void enter(); /*函数声明*/void search();void save(); void load();void list();void mldelete(struct address *,struct address *);void dls_store(struct address *i,struct address *

8、start, struct address *last);void inputs(char *,char *,int);void display(struct address *);int menu_select(void);int main(void) start = last = NULL; for(;) switch(menu_select() case 1:enter(); continue; case 2:mldelete(&start,&last);/删除 continue; case 3:list();/显示 continue; case 4:search();/查找 conti

9、nue; case 5:save();/保存 continue; case 6:load();/装入 continue; case 7:exit(0);/退出 int menu_select(void) /*主目录*/ char s80; int c; 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);

10、printf(*n); do printf(n请选择:n); gets(s); c = atoi(s);/是把字符串转换成长整型数的一个函数 while(c7); /*超出选项范围时,提示重新输入*/ return c; /*返回输入值*/void enter() /*输入函数,本函数循环输入资料,当输入姓名为空时退出*/ struct address *info; /*定义当前结点*/ for(;) info=(struct address *)malloc(sizeof(struct address); /*为当前结点分配空间*/ if(!info) printf(n 分配空间失败); e

11、xit(0); /*如果分配空间失败,退出程序*/ printf(输入空姓名结束:n); inputs(姓名:,info-name,30); if(!info-name0) break; /*如果输入姓名为空,结束循环*/ inputs(街道:,info-street,100); inputs(城市:,info-city,30); inputs(国家:,info-state,30); inputs(邮编:,info-zip,11); dls_store(info,&start,&last); /*调用结点插入函数*/ void inputs(char *prompt,char *s,int c

12、ount) /*输入函数,有越界检测功能*/ char p255; do printf(prompt); fgets(p,254,stdin); if(strlen(p)count) printf(n太长n); while(strlen(p)count); pstrlen(p)-1=0; strcpy(s,p);void dls_store( /*数据插入函数,也是本例的关键函数*/ struct address *i, /*接受传入的当前输入结点地址*/ struct address *start, /*接受传入的首结点地址*/ struct address *last /*接受传入的尾结点

13、地址*/ ) struct address *old,*p; if(*last=NULL) /*如果尾结点为空,意味着当前链表为空*/ i-next=NULL; i-prior=NULL; *last=i; *start=i; return; /*如果链表不为空*/ p=*start; /*p取入口地址(也就是首结点地址)*/ old=NULL; /*old赋空*/ while(p) /*如果p不为空时,执行特循环体,查找比当前结点应该插入的位置*/ if(strcmp(p-name,i-name)next; else /*如果当前输入数据中的name域比p小时,把数据插入结点p之前*/ if

14、(p-prior) /*如果p的前驱不为空时*/ p-prior-next=i; i-next=p; i-prior=p-prior; p-prior=i; return; i-next=p; /*如果p的前驱为空时,把当前结点作为首结点,并令当前结点的后驱为p*/ i-prior=NULL; p-prior=i; *start=i; return; /*循环体结束*/ old-next=i; /*如果在整个链表都找不到name域比当前数据的name域大的结点, *把当前数据放在作为尾结点放在最后*/ i-next=NULL; i-prior=old; *last=i; /*尾结点取i地址*/

15、void mldelete(struct address *start,struct address *last) /*删除函数*/ struct address *info; char s80; inputs(要删除的姓名:,s,30); /*输入欲删除结点的name域内容*/ info=find(s); if(info) printf(删除ing.n); if(*start=info) /*如果该结点为首结点,把该结点的下驱作为新的首结点(入口)*/ *start=info-next; if(*start) (*start)-prior=NULL; /*如果新入口不为空,把入口的前驱置空*

16、/ else *last=NULL; /*如果新入口为空,把尾结点置空,链表为空*/ else /*如果欲删除的结点不是首结点*/ info-prior-next=info-next; if(info!=*last) /*如果该结点是尾结点,则令该结点的前驱为尾结点*/ info-next-prior=info-prior; else *last=info-prior; free(info); printf(删除成功!n); struct address *find(char *name) /*查找函数,形参为欲查找结点的name域*/ struct address *info; info=s

17、tart; 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(没有信息); while(info) display(info); info=info-next; printf(nn);void display(struct address *info) /*输出传入结点函数*/ prin

18、tf( -n); printf( %-18s%-18s%-18s%-15s%sn,姓名,街道,城市,邮编,国家);/格式控制输出 printf( %-18s%-18s%-18s%-15s%sn,info-name,info-street,info-city,info-zip,info-state); /*printf(%sn,info-name); printf(%sn,info-street); printf(%sn,info-city); printf(%sn,info-state); printf(%sn,info-zip);*/ /printf(nn);void search(void

19、) /*查找函数*/ 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=fopen(mlist,wb); /*生成文件*/ if(!fp) printf(不能打开文件.n

20、); return; printf(n正在保存 n); info=start; while(info) /*把链表写入文件*/ fwrite(info,sizeof(struct address),1,fp); info=info-next; printf(-ok!n); fclose(fp);/*链表全部写入文件后,关闭文件*/ void load() /*调用预存文件函数*/ register int t, size; /register变量的值是存放在CPU中的寄存器中,调用时直接从寄存器中取出参加运算,存放在寄存器中的变量值调用需要的时间短 struct address *info,*

21、temp=0; char *p; FILE *fp; /*打开文件*/ if(fp=fopen(mlist,r)=NULL) printf(没有打开文件!n); exit(0); printf(nn正在加载.n); /*调用文件*/ size=sizeof(struct address); /*为结点分配内存*/ start=(struct address*)malloc(size); if(!start) /*如果读取失败,返回*/ printf(Out of memory!1n); exit(0); info=start; p=(char*)info; while(*p+=getc(fp)

22、!=EOF) for(t=0;tnext=(struct address*)malloc(size); if(!info-next) printf(Out of memory!2n); return; info-prior=temp; temp=info; info=info-next; p=(char*)info; temp-next=0; last=temp; start-prior=0; fclose(fp); /*关闭文件,释放内存*/ printf(-OK!n); 8 心得体会这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验。自己动手,自己发现和解决问题。发现

23、了自己的许多不足。平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。我相信在以后的学习能够解决好它们。但是,收获还是不小的,我不仅对C的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式。书上和老师教的内容是有限的,我们需要不断地靠自己去学习,向他人请教,了解和掌握更多的知识,这样我们才能编出更好的C程序。而且程序的编写应是:三分编写,七分调试。程序编写之前需求分析,至关重要,将关系这整个项目的成败。一名优秀程序员的成长,需要付出很多很多,编程是每天必做,所以在今后的编程之中,尽可能把基本技能练习熟练。做软件最终是满足用户的需求,所以做软件时应一切应以用记为导向。总体来说,这次C语言程序设计实验还是比较成功的,虽然最终程序还存在一些不足,但能取得这样的成绩我还是比较高兴的。在本次课程设计的制作过程中,全组成员都学习了很有关的知识。这样的项目对我们学习数据结构,C语言,是一个综合性很高的实践。一些以前没有学的很杂实的课程内容,也得到的很好的完善。 由于我们的知识浅薄,经验不足及阅历颇浅,因此,在该程序的设计方面还有很多的不足,会在以后的学习过程中,根据所学的知识不断的修改、完善,争取慢慢趋于完美。在此感谢,在本程序的设计过程和报告编写过程中,帮助过我的同学以及老师。

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

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