2022年2022年简易文本编辑器 .pdf
简易文本编辑器摘要 :简易文本编辑是最常用的文档提取和编辑工具,通过对简易文本的研究,利用 C 语言实现对文本的查找,替换(等长,不等长),插入(插串,文本块的插入) 、块移动(行块,列块移动),删除;可正确存盘、取盘;正确显示总行数等功能。关键字 :文件提取 ,替换 ,查找 ,插入 ,删除 ,块移动 . 前言数据结构这门课程是打开程序设计知识宝库的金钥匙,其主要目的是培养将现实世界偶像为数据和数据模型的能力以及利用计算机进行数据存储和数据加工的能力。 学好数据结构, 可以使我们掌握更多的程序设计技巧,为以后学习计算机专业课程打下良好的基础。然而,要学习好数据结构这门课, 就必须加强自己动手写程序的能力, 在这方面除了上课期间的课后实验,一个完整的课程设计也是一项提高自己抽象思维能力和编程能力的重要方法。这次学习中,我选择了简易文本编辑器这个课题,根据对这个题目的研究,做了以下分析:在操作系统中,外存中数据,文档或程序 ,都是以文件的形式保存。因此对文件的操作就要首先从文件中读取数据,然后对读取的文件进行其他操作。最后,当操作完成后 ,再将文件从新写入文件中,在此过程中需要掌握以下信息。1. 文件当前的读写位置。2. 与该文件对应的内存缓冲区的位置。3. 缓冲区中未被处理的字符串。4. 文件操作方式。最后完成对文件数据的操作,重新调用文件指针将文件写入文件操作。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 17 页 - - - - - - - - - 数据结构课程设计任务书一、设计目的通过数据结构课程设计,使学生能够将课堂上学到数据结构理论知识与实际问题相联系, 在提高学生学习兴趣的同时逐渐培养实际操作技能, 强化对课程内容的了解。 本课程设计不仅有助于学生提高学生的编程能力,而且也有助于培养学生抽象思维能力和动手能力。二、设计教学内容完成简单的文本编辑功能, 最好具有图形菜单界面。 包括:查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除;可正确存盘、取盘;正确显示总行数。三、设计时间20112012学年第 1 学期: 第 16 周共计 1 周教师签名 : 2010 年 12 月 19 日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 17 页 - - - - - - - - - 第一章需求分析一个简易文本编辑器应该具有图形菜单界面,包括查找,替换(等长,不等长) ,插入(插串,文本块的插入) 、块移动(行块,列块移动) ,删除文本信息等功能并可正确存盘、取盘,正确显示总行数。第二章概要设计2.1 结构与算法分析为实现数据的有序存储, 该编辑器应该用顺序表来存储输入的信息。顺序表是数据结构中线性表的一种, 它是用一块地址连续的存储空间依次存储线性表的元素。其特点为: 在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。在编辑器的主界面中应有如下提示信息:2.11清空以前的文本信将用数组存的数据内容全部置为0, 显示当前文本信息:遍历顺序表中存入的信息,并输出到显示器上。2.12 编辑信息:定义一个结构体,并在结构体中定义一个字符型的一维数组和两个整型变量,整型变量用于记录一维数组中存入数据的的行数与列数。typedef struct char srMAXSIZE; int hang; int lie; shuru ; 2.13替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息, 提示输入要替换的信息内容,否则提示未找到要被替换的信息。2.14插入文本信息:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 17 页 - - - - - - - - - 首先在数组中查找要插入点, 如果找到该插入点, 提示输入插入信息, 确认插入信息后, 提示选择向前插入信息还是向后插入信息,如果未找到插入点, 显示未找到要插入的位置。2.15移动文本信息:首先在数组中查找要移动的信息,如果找到该信息, 提示是进行列移动还是进行行移动,否则提示未找到要移动的信息。2.16删除文本信息:首先在数组中查找要删除的信息,如果找到该信息, 提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息。2.2 流程图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 17 页 - - - - - - - - - 图 21 文本编辑器流程第三章详细设计#include stdafx.h #includestdio.h #includemalloc.h #includestring.h #includeiostream.h #includestdlib.h #includeconio.h #include #define Link_Size 100 int NUM,C,N; typedef struct list /1 、定义链表结点char data50; /记录一行字符int length; /记录一行字符长度struct list *next; struct list *prior; int row; LinkList; LinkList *head; / LinkList *CreatWord() / 编辑文本内容LinkList *temp; char ch; int i,j; head-next=(LinkList *)malloc(sizeof(LinkList); head-prior=NULL; temp=head-next; temp-prior=NULL; temp-length=0; for(i=0;idatai=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 17 页 - - - - - - - - - printf( 开始创建文本,请输入文章(输入#号结束) :n); for(j=0;jLink_Size;j+) / 控制一页 for(i=0;idatai=ch; temp-length+; if(ch=#) NUM=j; break; /文章结束时, Num 来记录整个文章的行数 if(ch=#) temp-length=i; temp-next=NULL; break; temp-next=(LinkList *)malloc(sizeof(LinkList) ; temp-next-prior=temp; temp=temp-next; for(i=0;idatai=0; temp-row=NUM+1; system(cls); return temp; / void PrintWord() / 显示当前文章内容int i,j; /定义文本行数变量j,每行字符数i LinkList *p; p=head-next; system(cls); printf(n 当前文章的内容是:); for(j=0;j=NUM&p!=NULL;j+) for(i=0;(idatai)!=#;i+) printf(%c,p-datai); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 17 页 - - - - - - - - - p=p-next; / void SearchWord(char *str1,LinkList* temp) / 查找文章中的字符或者字符串char Data20 ; /记录需要查找的字符内容int i,j,k=0,sum=0; int l=1; temp=head-next; strcpy(Data,str1); for(i=0;i=NUM;i+) for(j=0;jdataj)=Datak) k+;/ 将输入的查找字符与链表中信息比较,找到第一个相同的字符else if(Datak!=0) j=j-k; k=0; if(Datak=0) sum+; j=j-k+1; /从主串第j-k 个位置重新查找printf(tt第%d 次出现在第 %d 行第 %d 列n,l,i+1,j+1); l+; k=0; continue; temp=temp-next; printf(ttt字符串总共出现次数为:%dnn,sum); C=sum; N=i*50+j; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 17 页 - - - - - - - - - / void DeleteWord(char *str2) / 从主串第j-k 个位置重新查找char Data20; /存储需要删除的字符或者字符串LinkList *temp,*term; int i,j,k,m,y,num; strcpy(Data,str2); for(y=0;yC;y+) num=50; k=0,m=0; temp=head; for(i=0;inext; for(j=0;jdataj)=Datak) k+; else if(Datak!=0) j=j-k;k=0; if(Datak=0) num=j; break; if(num50) break; for(;i=NUM;i+) for(;j50;j+) if(j+1data50-k+num=temp-dataj+1; /删除的字符串不在最后一行,将下一行的字符(由temp 指向)前移到前行 else temp-dataj-k+1=temp-dataj+1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 17 页 - - - - - - - - - term=temp; temp=temp-next; j=0; / LinkList * InsertWord(LinkList *temp) / 向文章中插入字符或者字符串char Data20; int h,l; printf(ntt请输入要插入的字符或字符串:); getchar(); gets(Data); printf(ntt当前文章内容为:); PrintWord(); printf(ntt请输入要插入的行:); scanf(%d,&h); printf(ntt请输入要插入的列:); scanf(%d,&l); int i=(h-1)*50+l; LinkList *a; int n=strlen(Data); int m ; int insertRow=i/50+1;/ 确定插入位置的行数int row=temp-row; /将全局变量记录的行数赋值给row int j; if(insertRow=row) for(m=temp-length-1;m=(i%50)&n0;m-) temp-datam+n=temp-datam; for(m=(i%50),j=0;mdatam=Dataj; else 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 17 页 - - - - - - - - - int r=0; for(int p=insertRow; plength-1-r;m=0&n0;m-) temp-datam+n=temp-datam; a=temp; temp = temp-prior; temp-length = 50; for(m = temp-length-n,j=0;mlength;m+,j+) a-dataj=temp-datam; for(m=temp-length-n-1;m=(i%50);m-) temp-datam+n=temp-datam; for(m=(i%50),j=0;mdatam =Dataj; return temp; / int CountWord(LinkList *temp) / 文章中所有字数char ch; int i,j; int sum=0; temp=head-next; for(j=0;jdatai)!=#;i+) ch=temp-datai; sum+; return (sum-1) ; / 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 17 页 - - - - - - - - - void StorageWord() /存盘LinkList *t; char ch; t=head-next; int i,j; ofstream outFile(b.txt,ios:out); if(!outFile) cerrOpen file or create file error.endl; else for(j=0;j=NUM;j+) for(i=0;(idatai)!=#;i+) ch=t-datai; outFilech; coutendl; / void ReadWord() /取盘ifstream inFile; inFile.open(b.txt); if(!inFile) couterror!endl; abort(); char ch; while(inFile.get(ch) coutch; inFile.close(); cout9)&(t1) printf( 对不起,无此功能,请输入正确的功能序号!n); else switch(t) case 1: system(cls); temp=CreatWord(); printf(n); printf( 按回车键继续 ); getchar(); getchar(); system(cls); break; case 2: system(cls); PrintWord(); printf(n); printf( 按回车键继续 ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 17 页 - - - - - - - - - getchar(); getchar(); system(cls); break; case 3: system(cls); printf(ttt请输入您需要查找的字符或字符串:); getchar(); gets(str1); SearchWord(str1,temp); printf( 按回车键继续 ); getchar(); getchar(); system(cls); break; case 4: system(cls); printf(ttt请输入您需要删除的字符或字符串:); getchar(); gets(str2); SearchWord(str2,temp); DeleteWord(str2); printf(ttt删除%s 后的文章为 :,str2); PrintWord(); printf( 按回车键继续 ); getchar(); getchar(); system(cls); break; case 5: system(cls); InsertWord(temp); printf(ttt插入字符或字符串后文章为:); PrintWord(); printf(n); printf( 按回车键继续 ); getchar(); getchar(); system(cls); break; case 6: system(cls); printf(ntt文章中所有字数:%dn,CountWord(temp); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 17 页 - - - - - - - - - printf( 按回车键继续 ); getchar(); getchar(); system(cls); break; break; case 7: system(cls); printf(ttt文档存盘成功:); StorageWord(); printf( 按回车键继续 ); getchar(); getchar(); system(cls); break; case 8: system(cls); printf(ttt文档取盘成功:); ReadWord(); printf( 按回车键继续 ); getchar(); getchar(); system(cls); break; if(t=9) break; while(1); / void main() head=(LinkList *)malloc(sizeof(LinkList); LinkList *temp; menu(temp); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 17 页 - - - - - - - - - 测试结果测试文章 :For todays Christian, the origin of Christmas is, and should be, the birth of Jesus Christ as recorded in the Bible. Nothing more and nothing less. However, most of what we witness on December 25th each year has absolutely nothing to do with that blessed day, which probably occurred in late summer or early fall about 2,000 years ago. In fact, most of the customs and traditions of Christmas actually pre-date the birth of Jesus, and many of them are downright deceptive in their meaning and origin. Anyway, who cares when Christ was born? 运行程序后:2、显示当前文章内容名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 17 页 - - - - - - - - - 3、查找文章中的字符或者字符串6、文章中所有字数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 17 页 - - - - - - - - - 7、文章存盘8、文章取盘名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 17 页 - - - - - - - - -