




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
简易文本编辑器摘要:简易文本编辑是最常用的文档提取和编辑工具,通过对简易文本的研究,利用C语言实现对文本的查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除;可正确存盘、取盘;正确显示总行数等功能。关键字:文件提取,替换,查找,插入,删除,块移动.前言 数据结构这门课程是打开程序设计知识宝库的金钥匙,其主要目的是培养将现实世界偶像为数据和数据模型的能力以及利用计算机进行数据存储和数据加工的能力。学好数据结构,可以使我们掌握更多的程序设计技巧,为以后学习计算机专业课程打下良好的基础。然而,要学习好数据结构这门课,就必须加强自己动手写程序的能力,在这方面除了上课期间的课后实验,一个完整的课程设计也是一项提高自己抽象思维能力和编程能力的重要方法。 这次学习中,我选择了简易文本编辑器这个课题,根据对这个题目的研究,做了以下分析:在操作系统中,外存中数据,文档或程序,都是以文件的形式保存。因此对文件的操作就要首先从文件中读取数据,然后对读取的文件进行其他操作。最后,当操作完成后,再将文件从新写入文件中,在此过程中需要掌握以下信息。1. 文件当前的读写位置。2. 与该文件对应的内存缓冲区的位置。3. 缓冲区中未被处理的字符串。4. 文件操作方式。 最后完成对文件数据的操作,重新调用文件指针将文件写入文件操作。数据结构课程设计任务书一、设计目的通过数据结构课程设计,使学生能够将课堂上学到数据结构理论知识与实际问题相联系,在提高学生学习兴趣的同时逐渐培养实际操作技能,强化对课程内容的了解。本课程设计不仅有助于学生提高学生的编程能力,而且也有助于培养学生抽象思维能力和动手能力。二、设计教学内容完成简单的文本编辑功能,最好具有图形菜单界面。包括:查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除;可正确存盘、取盘;正确显示总行数。三、设计时间20112012学年第1学期: 第16周共计1周 教师签名: 2010年12月19日第一章需求分析一个简易文本编辑器应该具有图形菜单界面,包括查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除文本信息等功能并可正确存盘、取盘,正确显示总行数。第二章概要设计2.1结构与算法分析为实现数据的有序存储,该编辑器应该用顺序表来存储输入的信息。顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。其特点为:在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;在顺序表上可以随即存取表中的元素。在编辑器的主界面中应有如下提示信息:2.11 清空以前的文本信将用数组存的数据内容全部置为0,显示当前文本信息:遍历顺序表中存入的信息,并输出到显示器上。2.12 编辑信息:定义一个结构体,并在结构体中定义一个字符型的一维数组和两个整型变量,整型变量用于记录一维数组中存入数据的的行数与列数。typedef struct char srMAXSIZE; int hang; int lie;shuru ;2.13 替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息。2.14 插入文本信息:首先在数组中查找要插入点,如果找到该插入点,提示输入插入信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置。2.15 移动文本信息:首先在数组中查找要移动的信息,如果找到该信息,提示是进行列移动还是进行行移动,否则提示未找到要移动的信息。2.16 删除文本信息:首先在数组中查找要删除的信息,如果找到该信息,提示是否确认删除该信息,通过确认来删除信息,如果未找到要删除的信息,提示未找到该信息。2.2流程图 图21文本编辑器流程第三章详细设计#include stdafx.h#includestdio.h#includemalloc.h#includestring.h#includeiostream.h#includestdlib.h#includeconio.h#include #define Link_Size 100int 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;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);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; /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指向)前移到前行 elsetemp-dataj-k+1=temp-dataj+1; 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; /将全局变量记录的行数赋值给rowint 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; elseint 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) ;/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);elseswitch(t)case 1: system(cls); temp=CreatWord(); printf(n); printf(按回车键继续); getchar(); getchar(); system(cls); break;case 2: system(cls); PrintWord(); printf(n); printf(按回车键继续); 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); 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 *)ma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 考点解析湖北省麻城市7年级上册期末测试卷章节练习试题(含答案解析)
- 大数据、“互联网+”和媒体融合试题(卷)答案解析
- 2025年基因治疗药物研发中的临床试验数据监管与合规性分析报告
- 2025年工业互联网在制造业中的应用前景与市场潜力分析报告
- 2025年沉浸式戏剧行业市场潜力与投资价值分析报告
- 2025年土壤污染监测物联网技术应用与治理策略报告
- 2025年快时尚在时尚零售行业变革中的产品包装设计趋势报告
- 2025年广播影视行业媒体融合技术发展趋势报告
- 2025至2030年中国人力资源数字化行业发展趋势预测及投资战略咨询报告
- 推拿治疗学试题附参考答案详解【考试直接用】
- 铁路专项病害课件
- 开学安全教育课件
- 2025年学历类自考专业(学前教育)学前儿童发展-学前教育原理参考题库含答案解析(5套)
- 《海上风电场工程测量规程》(NB-T 10104-2018)
- 《绣球》课件
- “隆德”概念讲解—控制脑容量为目标控制颅内高压
- 遥感图像的目视判读
- 实数单元测试卷含答案
- 轧制原理-PPT课件
- 河底管道围堰专项施工方案
- SY2BVT-1振动仪操作规程5
评论
0/150
提交评论