简单行编辑程序设计.doc

上传人:星星 文档编号:1081783 上传时间:2024-04-14 格式:DOC 页数:20 大小:223KB
下载 相关 举报
简单行编辑程序设计.doc_第1页
第1页 / 共20页
简单行编辑程序设计.doc_第2页
第2页 / 共20页
简单行编辑程序设计.doc_第3页
第3页 / 共20页
简单行编辑程序设计.doc_第4页
第4页 / 共20页
简单行编辑程序设计.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、目 录摘 要2前 言3正 文41.问题描述42.逻辑设计43.详细设计54.程序编码85.程序调试与测试136.结果分析:137.软件安装和使用说明书17设 计 总 结18参考文献19致 谢20摘 要 简单行编辑程序通过我们所熟悉的数据结构中的线性结构的基本算法的实现、树型结构的基本算法的实现、图型结构的基本算法的实现、查找的基本算法的实现以及排序的基本算法的实现来用栈实现简单的行编辑程序。通过该题目的设计过程,可以加深我们对数据结构中的线性表及栈的逻辑结构、存储结构,掌握线性表及栈上基本运算的实现,进一步理解和熟练掌握课本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题,还可以培养

2、我们的动手能力。关键词:逻辑结构 查找 排序20前 言通过简单行编辑程序的设计过程,我们学会了分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构机相应的算法,并初步掌握算法的时间分析和空间分析的技术。另一方面,通过该题目的设计过程,也是复杂程序设计的训练过程,要求我们编写的程序设计结构清楚和正确易读,符合软件工程的规范。该题目通过用规范的数学语言描述数据结构的定义,以突出其数学特性,同时,通过对若干数据结构实例的参考和学习,为今后学习面向对象的程序设计作了一些铺垫。正 文1. 问题描述文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删

3、除等修改操作。限制这些操作以行为单位进行的编辑程序称为行编辑程序。被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的做法即不经济,又不总能实现。一种解决方法是逐段的编辑。任何时刻只把待编辑文件的一段放在内存,称为活区。试按这种方法实现一个简单的行编辑程序,设文件每行不超过320个字符,很少超过80个字符。2. 逻辑设计ADT line基本操作:enter(linenum) 初始条件:有内存。 操作结果:linenum +1. delete_text( ) 初始条件:line存在。操作结果:若删除的最后一行,则直接删除。 若删除中间一行,则后面的linenum -1。 Load( )

4、初始条件:存在文件file 操作结果:打开文件。 ADT line图2-13. 详细设计1)将文本插在指定行端部enter(int linenum) struct line *info; for(;) info=(struct line *)malloc(sizeof(struct line); if(!info) printf(t! 内存不够!n); return(NULL); printf(%d:,linenum); gets(info-text); info-num=linenum; if(*info-text) if(find(linenum) patchup(linenum,1);

5、if(*info-text) start=dls_store(info); else break; linenum+; return(linenum); 2)删除一行 void delete_text() struct line *info; char s80; int linenum; printf(tlinenum :); gets(s); linenum=atoi(s); info=find(linenum); if(info) if(start=info) start=info-next; if(start) start-prior=NULL; else last=NULL; else

6、 info-prior-next=info-next; if(info!=last) info-next-prior=info-prior; else last=info-prior; free(info); patchup(linenum+1,-1); 3)存文件 void save(char *fname) struct line *info; char *p; FILE *fp; if(fp=fopen(fname,w)=NULL) printf(t Cant open the file !n); exit(0); printf(t Saving :n); info=start; whi

7、le(info) p=info-text; while(*p) putc(*p+,fp); putc(n,fp); info=info-next; fclose(fp); 4)读取文件 void load(char *fname) struct line *info,*temp; char *p; FILE *fp; int size,inct; if(fp=fopen(fname,r+)=NULL) printf(t Cant open the file !n); exit(0); while(start) temp=start; start=start-next; free(temp);

8、printf(nt Reading.n); size=sizeof(struct line); start=(struct line*)malloc(size); if(!start) printf(nt内存已经用完 !); return; info=start; p=info-text; inct=1; while(*p=getc(fp)!=EOF) p+; while(*p=getc(fp)!=n) p+; *p=0; info-num=inct+; info-next=(struct line*)malloc(size); if(!info-next) printf(nt内存已经用完 !

9、); return; info-prior=temp; temp=info; info=info-next; p=info-text; temp-next=NULL; last=temp; free(info); start-prior=NULL; fclose(fp); 4. 程序编码/*将文本插在指定行端部*/ enter(int linenum) struct line *info; for(;) info=(struct line *)malloc(sizeof(struct line); if(!info) printf(t! 内存不够!n); return(NULL); print

10、f(%d:,linenum); gets(info-text); info-num=linenum; if(*info-text) if(find(linenum) patchup(linenum,1); if(*info-text) start=dls_store(info); else break; linenum+; return(linenum); /*当文本内容插在文件中间时其下面的内容的行号必须增加1,而 */ /*删除时,被删除的文本后面的行号必须减1 */ void patchup(int n,int incr) struct line *i; i=find(n); while

11、(i) i-num=i-num+incr; i=i-next; /*按行号排序后插入 */ struct line *dls_store(struct line *i) struct line *old,*p; if(last=NULL) i-next=NULL; i-prior=NULL; last=i; return(i); p=start; old=NULL; while(p) if(p-num) old=p; p=p-next; else if(p-prior) p-prior-next=i; i-next=p; p-prior=i; return start; i-next=p; i

12、-prior=NULL; p-prior=i; return(i); old-next=i; i-next=NULL; i-prior=old; last=i; return start; /*删除一行 */ void delete_text() struct line *info; char s80; int linenum; printf(tlinenum :); gets(s); linenum=atoi(s); info=find(linenum); if(info) if(start=info) start=info-next; if(start) start-prior=NULL;

13、 else last=NULL; else info-prior-next=info-next; if(info!=last) info-next-prior=info-prior; else last=info-prior; free(info); patchup(linenum+1,-1); /*查找一行文本 */ struct line *find(int linenum) struct line *info; info=start; while(info) if(linenum=info-num) return(info); info=info-next; return(NULL);

14、/*显示文本 */ void list() struct line *info; info=start; while(info) printf(%d:%sn,info-num,info-text); info=info-next; printf(nn); /*存文件 */ void save(char *fname) struct line *info; char *p; FILE *fp; if(fp=fopen(fname,w)=NULL) printf(t Cant open the file !n); exit(0); printf(t Saving :n); info=start;

15、while(info) p=info-text; while(*p) putc(*p+,fp); putc(n,fp); info=info-next; fclose(fp); /*读取文件 */ void load(char *fname) struct line *info,*temp; char *p; FILE *fp; int size,inct; if(fp=fopen(fname,r+)=NULL) printf(t Cant open the file !n); exit(0); while(start) temp=start; start=start-next; free(t

16、emp); printf(nt Reading.n); size=sizeof(struct line); start=(struct line*)malloc(size); if(!start) printf(nt内存已经用完 !); return; info=start; p=info-text; inct=1; while(*p=getc(fp)!=EOF) p+; while(*p=getc(fp)!=n) p+; *p=0; info-num=inct+; info-next=(struct line*)malloc(size); if(!info-next) printf(nt内存

17、已经用完 !); return; info-prior=temp; temp=info; info=info-next; p=info-text; temp-next=NULL; last=temp; free(info); start-prior=NULL; fclose(fp); 5. 程序调试与测试这个程序的源程序是我在图书馆资料上找的,当时不能运行,main的界面也不是现在这样。源程序里面也没有存文件和读取文件的功能,我先对源程序进行调试分析,把里面的错误一一改正,编写出mian程序。然后在里面添加了存文件和打开文件的功能,使的程序更加完善。本程序在运行时,必须选择“3.Display

18、 a line”才能将输入,删除或者打开后的文件显示出来,这就有点浪费时间,使得操作有点复杂。6. 结果分析: 程序运行的界面: 输入行界面: 删除行界面: 文件打开界面: 显示界面: 文件保存界面: 退出界面:7. 软件安装和使用说明书 1本程序在win-tc下运行。 2在进行输入,删除或者打开文件的操作后,再选择“3.Display a line”将输入,删除或者想要打开的文件内容显示出来。3在执行“5.Open the file”时,输入想要打开文件的正确路径,回车。如果想要打开的文件不存在,则跳出运行。 4在进行保存文件的操作时,在提示后输入想要保存的正确路径名,再按回车,文件即被保存

19、。设 计 总 结通过对数据结构的课程设计,我了解并发现了很多调试程序的方法,而且懂得了如何处理错误的方法。对C语言以及C+的使用得到了进一步的提高。针对数据结构的书本知识得到了进一步的巩固。对程序的深层理解,清楚程序中每一步的功能,在程序的运行中是十分重要的,一个好的结构在运行中能够充分的发挥程序的功能。结构设计的合理性决定了这个程序的价值。在今后的学习中我要注意这方面,使得我的编程能力能有进一步的提高。但是我在写程序的时候也有很多困难,上网和在图书馆找相关的C函数,由于代码分别保存在不同的头文件中,如何协调各个头文件之间代码的通讯是个很难解决的问题,曾经一度想放弃使用头文件,但如此一来会造成

20、代码全部堆在一起,很难阅读和编写。最后通过声明的方法终于解决了问题。通过这次课程设计,对C语言的掌握提高到了一个新的水平,能够利用C语言编写出一个实用的程序,很大程度提高了程序综合设计能力、分析能力和编程能力。掌握了很多新的编程技巧,积累了一些编程经验。我更学到了编程的思想,这对于以后的学习以至到以后的工作中都是很有用的。 同时我认为我们以后的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。某个人的离群都可能导致导致整项工作的失败。实习中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。团结协作是我们实习成功的一项非常

21、重要的保证。而这次实习也正好锻炼我们这一点,这也是非常宝贵的。 参考文献1 严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社.2 严蔚敏,吴伟民.数据结构题集(C语言版).清华大学出版社.3 DATA STRUCTURE WITH C+. William Ford,William Topp .清华大学出版社(影印版). 4 谭浩强.c语言程序设计. 清华大学出版社.5数据结构与算法分析(Java版) , A Practical Introduction to Data Structures and Algorithm Analysis Java Edition Clifford A. Shaffer , 张铭,刘晓丹译电子工业出版社 2001 年1月致 谢通过这段时间的学习,我学会了很多东西。根据老师的指导,在设计中我们基本能按照规范的方法和步骤进行,并查阅有关资料,最后确定设计方案,然后设计并制作。在实践过程中我们深刻的认识到汇编语言的重要性。在此过程中,我更加深入的理解了数据结构中的线性结构的基本算法的实现、树型结构的基本算法的实现、图型结构的基本算法的实现、查找的基本算法的实现以及排序的基本算法的实现来用栈实现简单的行编辑程序。这次的课程设计对我来说也是一次尝试与挑战的过程。在此我向您们致以最诚挚的谢意!

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业论文

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922