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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构课程设计之文本编辑器.docx

1、数据结构课程设计之文本编辑器大学数据结构课程设计报告题目: 简易文本编辑器 院(系): 计算机工程学院 学生姓名: 班级: 学号:_起迄日期: 2011年6月20日 至2011年6月30日指导教师: 指导教师评语: 成绩: 签名: 年 月 日20102011年度 第 2 学期 一、需求分析 1.问题描述:简易文本编辑器主要是针对文字编辑处理,对于如何编辑一个简易文本编辑器程序我们可以利用线性表示实现其功能,线性表便于插入删除查找功能,而文本编辑器需要用到这些功能,因此可以利用线性表实现。对于文本编辑器应该具有插入、删除、查找等功能,并且可以显示所有输入数据,可正确存盘、取盘,正确显示编辑的文字

2、长度。 2.基本功能:简易文本编辑器应该具有的功能:图形菜单界面:位置查找:数据查找:显示所有输入数据:插入:删除文本信息:可正确存盘、取盘:正确显示长度: 3.输入输出:输入数据,数据类型为整形,且输入的字符或数字不多于100个,输出为输出输入的数据,输出输入数据的长度,输出插入元素及插入后的数据,输出查找元素的,输出的数据均为整形。二、 概要设计1.设计思路: 首先构造一个线性表, 然后利用线性表的存储结构顺序存储方式,实现文本的编辑添加查找删除. 2.数据结构设计:程序采取了线性结构利用顺序存储的方法,采用该结构的原因是线性表利于存储、插入、删除、查找、修改等功能,使用它可以使程序运行简

3、单方便。 定义程序中用到的抽象数据类型;抽象数据类型线性表的定义如下:ADT SqList 数据对象:D=ai| ai data,i=1,2,3,n,n0数据关系:R1=| ai-1,ai D,i=1,2,3,,n基本操作:InitList(*L)操作结果:构造一个空的线性表L。GetLength(L)初始条件:线性表L已存在。操作结果:返回L中数据元素的个数。GetElem( L, i,*e)初始条件:线性表L已存在,1iL.Length.操作结果:查找指定的某元素i,并将值赋给e,用e 输出。Locate( L, i,x)初始条件:线性表L已存在,1iL.Length.操作结果:用i返回元

4、素x在线性表中的位置。InsElem( *L, x, i)初始条件:线性表L已存在,1iL.Length。操作结果:在L中第i个位置之前插入新的数据元素j,L的长度加1。DelElem(*L, i)初始条件:线性表L已存在,1iL.Length。操作结果:删除L的第i个数据元素,L的长度减1。DispList( L)初始操作:线性表L已存在。操作结果:输出线性表中的所有元素。save( *L)初始条件:线性表L已存在。 操作结果:将线性表中的数据写入文件,文件保存。 read( *L)初始条件:线性表L已存在。 操作结果:读出文件中的数据。2主程序 Void main() 初始化; do 接受

5、命令; 处理命令; while(“命令”!=“退出”) 3.软件结构设计: 主程序模块: int main() 线性表模块: void InitList(SqList *L); 文本编辑模块: int GetLength(SqList L);/长度int GetElem(SqList L, int i, int *e);/位置查找int Locate(SqList L, int i,int x) ;/数据查找int InsElem(SqList *L, int x, int i);/插入位置i数据jint DelElem(SqList *L, int i);/删除void DispList(S

6、qList L);/显示三、 详细设计 1. 定义程序中所有用到的数据及其数据结构,及其基本操作的实现;#define MaxSize 100class SqListpublic: int dataMaxSize; int length;public:SqList();void InitList(SqList *L);/初始化int GetLength(SqList L);/长度int GetElem(SqList L, int i, int *e);/位置查找int Locate(SqList L, int i,int x) ;/数据查找int InsElem(SqList *L, int

7、x, int i);/插入位置i数据jint DelElem(SqList *L, int i);/删除void DispList(SqList L);/显示void save(SqList *L); /文件保存void read(SqList *L); /文件读取void showmenu();/菜单 ;2主函数和其他函数的伪码算法;int main()/-主函数 SqList L; int i; int j; int e; L.InitList(&L); / 参数是指针时,实参应为地址-空表 printf(nnnntttWelcom to use our TXT edition syste

8、m!n); printf(nnttt 欢迎您使用文本编辑器软件!n); printf(nnnnnnnpress Enter to continue.n); L.read(&L); int chr; while (chr = getchar()!= n) L.InsElem(&L, chr, L.length+1); /连续插入元素 printf(输入数据:); L.DispList(L); system(pause); while(1) system(cls);/清屏 L.showmenu(); int n; cinn; switch(n) case 0: printf( 输入数据的长度为:%

9、dn, L.GetLength(L); system(pause); break; case 1: couti; if(iL.length) i=L.length+1; cout输入要插入的字符:; getchar(); fflush(stdin);/清除键盘缓冲区的内容 j= getchar(); fflush(stdin); L.InsElem(&L, j,i); printf( 在数据的第%d个位置插入元素%c:n,i,j); printf( 插入后的数据:); L.DispList(L); system(pause); break; case 2: couti; L.GetElem(L

10、, i, &e); printf( 在输入的数据中第%d个元素是: %cn, i, e); system(pause); break; case 3: coute; printf( 查找的元素%d是:第%d个元素n, e,L.Locate(L,i,e); system(pause); break; case 4: couti; printf( 在数据中删除第%d个元素n, i); L.DelElem(&L, i); printf( 删除后的数据:); L.DispList(L); system(pause); break; case 5: cout 谢谢使用 endl length = 0;

11、return;int SqList:GetLength(SqList L)/-求表的长度 return L.length;int SqList:GetElem(SqList L, int i, int *e)/-求表中某个数据元素 if (iL.length) /*无效的i值*/ return 0; else *e = L.datai-1; /改变指针的值前面用* return 1; return 1;int SqList:Locate(SqList L,int i, int x) /-按值查找 for(i=0;iL.length;i+)if(L.datai=x) return i;int S

12、qList:InsElem(SqList *L,int x, int i) /-插入 int j; if (iL-length +1) /*无效的参数i*/ return 0; for (j=L-length;j=i;j-) /*将位置为i的结点及之后的结点后移*/ L-dataj=L-dataj-1; L-datai-1 = x; /*在位置i处放入x*/ L-length+; /*线性表长度增1*/ return 1;int SqList:DelElem(SqList *L, int i)/-删除 int j; if (iL-length) /删除时,i大于线性表的长度 return 0;

13、 for (j=i;jlength;j+) L-dataj-1=L-dataj; L-length-; return 1;void SqList:DispList(SqList L)/-显示 int i; for (i=1;i=L.length;i+) printf(%c, L.datai-1); printf(n); return;void SqList:save(SqList *L) int i; FILE* file ; file = fopen(C:data.txt,wb); if(!file) printf(打开文件出错!); return ; else fseek(file,0,0

14、); for( i = 1; i length ; i+) fwrite(L-data)+(i-1),sizeof(int ),1,file); fclose(file);void SqList:read(SqList *L) int i ; int tem; FILE* file; i = L-length ; file = fopen(C:data.txt,rb); if(!file) printf(打开失败); return ; else fseek(file,0,0); while(!feof(file) fread(&tem,sizeof(int),1,file); InsElem(

15、L,tem,L-length+1); L-DelElem(L,L-length); fclose(file); return ;void SqList:showmenu()couttt endl tt endl tt 简易文本编辑器 endl tt endl tt 0. 数据长度. endl tt 1. 插入数据. endl tt 2. 查找位置. endl tt 3. 查找元素. endl tt 4. 删除元素. endl tt 5. 退出. endl tt endl endl ttt选择 : ; fflush(stdin); /清除键盘缓冲区的内容 return ;3.主要函数的程序流程图

16、,实现设计中主程序和其他子模块的算法,以流程图的形式表示。1.查找位置函数. Y N2.查找元素函数. N Y N Y3.插入元素函数. N Y N Y4.删除元素函数. N Y N Y4. 画出函数之间的调用关系图。 四、调试分析 1.实际完成的情况说明(完成的功能,支持的数据类型等); (1)本程序可以对一段文字进行插入、删除、查找、显示保存文件等操作。 (2)程序支持整形,输入的数据均为整形,且输入数据不超过100组数据。 2.程序的性能分析,包括时空分析;程序的时间和空间复杂度在线性表算法上,由于线性表的存储结构是顺序存储,所以时间复杂度为O(L.Length),n线性表长度,空间复杂

17、度为O(n)。 3.上机过程中出现的问题及其解决方案;(1)开始文本编辑器的存储结构选的是串,利用模式匹配进行查找,后来因为模式匹配掌握的不够好,写出的算法错误太多,且不能实现太多的功能,故而后来选择利用掌握较熟练的线性表实现文本编辑器的功能。 (2)程序没有编译错误,但是不出结果,利用步步调试,改正逻辑错误,有些函数的参数须加引用。4.程序中可以改进的地方说明; (1)该程序可以利用链表或串,存取数据实现文本编辑器的各项功能,可以 使程序功能更完善。 5. 程序中可以扩充的功能及设计实现假想。 (1)可以实现替换功能。在线性表的所有数据中,选择某一位置的数据,替换为想要的数据,可以先利用查找

18、功能,查找选取的位置,然后删除该位置的数据,最后在该位置插入替换后的数据。五、测试结果合法数据:输入要连续插入的数据:xingmingbanjizhuanyenianjixuehao。 执行0操作,输入0,输出为32。执行1操作,输入1,输入插入位置为12,插入数据为1,输出为xingmingban1jizhuanyenianjixuehao。执行2操作,输入2,输入要查找的位置为4,输出为g。执行3操作,输入3,输入要查找的元素为g,输出为第4个位置。执行4操作,输入4,输入要删除的位置为4,输出为xinmingban1jizhuanye nianjixuehao。执行5操作,输入5,输出“

19、谢谢使用 ”。 非法数据: 没有保存文件时,输出为“打开文件失败!”。 六、用户手册 1.本程序的运行环境为DOS操作系统 。2.进入演示程序后首先要在D盘里建一个文件,文件名为“data.txt”,并在其中添加要操作的数据(也可以不添加数据,仅建一个文件),来存储数据使用。 3.提示输入线性表要在原文件基础上要添加的数据。4.以整形的形式输入线性表数据的值。5.之后显示线性表的所有元素。 6.之后提示输入要操作的功能选项(05)。7.之后提示执行所选功能所需输入的数据。8.执行完所有功能后选择5退出并保存数据。 (1)开始窗口。(2)输出线性表的长度。(3) 插入数据。(4) 查找某一位置的

20、数据(5) 查找某一元素的位置。(6) 删除某一数据。(7)退出文本编辑器七、体会与自我评价 本程序是在线性表的基础上改进的,线性表的操作数是浮点形,而文本编辑器的操作数是整形,在线性表的程序上加进插入删除查找数据结构,然后建立一个文件保存线性表中的数据,就是我写的程序。本次课程设计还算顺利,但是在设计过程中由于自己的不细心,忽略了一些关键的细节,导致了在编写过程中出现了一些错误。例如:少了分号,或忘了定义函数,又如能运行但输出结果错误,结果不正确。又由于自己打字时犯得小错误,导致出现不易发现的错误,最终在老师及编程能力比较强的同学帮助下,查找到并及时改正。该程序不仅可以利用线性表还可以利用串

21、、单链表司实现,通过做该程序,我又对课本做了新的解读,加深了对所学知识的印象及了解,同时也了解了我还有许多不足,对许多所学过的知识掌握得不够透彻,不够深入,应用不够灵活,今后我会弥补这方面的不足,加深理解课本知识,同时注重应用。通过本次课程设计,我对课本知识又了解了新的内容,对该掌握的的知识加深了了解。通过对线性表的应用,查找课本资料加深了对线性表的了解,并学会了灵活运用。通过调试,我学会了借助逐步调试功能和数据窗口,加快找到程序中的错误点,调试能力有所提高。本程序中运用了大量的循环结构和条件结构,在编写程序时要注意条件的判断和循环条件的正确编写。通过本次课程设计,不仅锻炼了我的实际操作能力,

22、而且培养了严密的思维能力和严谨的态度。本次课程设计的确令我受益匪浅,而且增加了编程的兴趣。源代码:#include#include#include#include#include#includeusing namespace std;#define MaxSize 100class SqListpublic: int dataMaxSize; int length;public:SqList();void InitList(SqList *L);/初始化int GetLength(SqList L);/长度int GetElem(SqList L, int i, int *e);/位置查找in

23、t Locate(SqList L, int i,int x) ;/数据查找int InsElem(SqList *L, int x, int i);/插入位置i数据jint DelElem(SqList *L, int i);/删除void DispList(SqList L);/显示void save(SqList *L); /文件保存void read(SqList *L); /文件读取void showmenu();/菜单 ;SqList:SqList() data0=0; length=0;void SqList:InitList(SqList *L) / 传入的参数用指针- 构造空

24、表 L-length = 0; return;int SqList:GetLength(SqList L)/求表的长度 return L.length;int SqList:GetElem(SqList L, int i, int *e)/求表中某个数据元素 if (iL.length) /*无效的i值*/ return 0; else *e = L.datai-1; /改变指针的值前面用* return 1; return 1;int SqList:Locate(SqList L,int i, int x) /*按值查找*/ for(i=0;iL.length;i+)if(L.datai=x

25、) return i;int SqList:InsElem(SqList *L,int x, int i) /插入 int j; if (iL-length +1) /*无效的参数i*/ return 0; for (j=L-length;j=i;j-) /*将位置为i的结点及之后的结点后移*/ L-dataj=L-dataj-1; L-datai-1 = x; /*在位置i处放入x*/ L-length+; /*线性表长度增1*/ return 1;int SqList:DelElem(SqList *L, int i)/删除 int j; if (iL-length) /删除时,i大于线性表的长度 return 0; for (j=i;jlength;j+) L-dataj-1=L-dataj; L-length-; return 1;void SqList:DispList(SqList L)/显示 int i; for (i=1;i=L.length;i+) printf(%c, L.datai-1); printf(

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

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