《简易文本编辑器(共8页).doc》由会员分享,可在线阅读,更多相关《简易文本编辑器(共8页).doc(8页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上数据结构 课 程 设 计题 目 简易文本编辑的探究 系 (部) 电子与信息工程系 班 级 姓 名 学 号 指导教师 王 静 2011年01月03日专心-专注-专业电子与信息工程系数据结构课程设计任务书设计题目简易文本编辑器已知技术参数和设计要求要求:1、具有图形菜单界面;2、查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块),删除3、可正确存盘、取盘;正确显示总行数。设计内容与步骤1、结点结构的设计2、算法设计与分析3、程序设计、实现、调试4、课程设计说明书设计工作计划与进度安排1、设计工作 4 学时2、实现与调试 16 学时3、课程设计说明书 8
2、 学时设计考核要求1、考勤 30%2、课程设计说明书 70%计算机教研室制简易文本编辑的探究张 权安康学院 计算机科学与技术09级 陕西省 安康市 摘要:简易文本编辑是最常用的文档提取和编辑工具。通过对简易文本的研究,利用C语言实现了从文件中读取数据,并进行的提取和简易编辑的功能。没有脱离C语言下数组长度的有限性。关键字:文件提取、存储;字符串替换、查找;插入;删除;行移动;1 引言在操作系统中,外存中的数据、文档或程序,都是以文件的形式保存,甚至对目录和各种设备的操作也都等同于文件的操作。因此对文件的操作就要求首先从文件中读取数据,然后对读取的数据进行操作,最后,当操作完成后再将数据重新写入
3、文件中。在此过程中必须熟练掌握文件的基本操作。首先要调用一个文件,需要有以下的信息:1、文件当前的读写位置,文件存放在哪个磁介质中,含盘符及路径。2、与该文件对应的内存缓冲区的地址。3、缓冲区中未被处理的字符串。4、文件操作方式,是读数据还是写数据。从文件中读取数据,然后以链表的形式放入内存中,对文件数据进行查找替换删除操作。找到要进行操作的字符串的位置,然后再进行一系列的操作。最后,完成对文件数据的操作,重新调用文件指针将数据写入文件操作,完成实验。将数据从文件中读取出来以后,在进行操作。2 问题分析一个简易文本编辑器应该具有图形菜单界面,包括查找,替换(等长,不等长),插入(插串,文本块的
4、插入)、块移动(行块),删除文本信息等功能并可正确存盘、取盘,正确显示总行数。3 数据结构与算法分析3.1 结构与算法分析为实现数据结构的有序存储,该编辑器应该用顺序表来存储输入的信息。顺序表是数据结构中线性表的一种,它是用一块地址连续的存储空间依次存储线性表的元素。其特点为:在顺序表上逻辑关系相邻的俩个元素在物理位置上也相邻;在顺序表上可以随即存储表中的元素。在编辑器的主界面中如下提示信息: 3.11 清空以前的文本信息:将用数据内容全部置为0;显示当前文本信息:遍历用数组存入的信息,并输出到显示器上: 3.12 编辑信息:定义一个结构体,并在结构体中定义一个字符型的一维数组和一个整型变量,
5、这个整型变量用于记录一维数组中存入数据的个数; 3.13 替换文本信息:首先在数组中查找要被替换的信息,如果找到该信息,提示输入要替换的信息内容,否则提示未找到要被替换的信息: 3.14 插入文本信息:首先在数组中查找要插入的点,如果找到该插入点,提示输入插入信息,确认插入信息后,提示选择向前插入信息还是向后插入信息,如果未找到插入点,显示未找到要插入的位置; 3.15 移动文本信息:首先在数组中查找要移动的信息,如果找到该信息,提示是进行列移动还是行移动,否则提示未找到要移动的信息; 3.16 删除文本信息:首先在数组中查找要删除的信息,如果找到该信息,提示是否确认删除该信息,通过确认来删除
6、信息,如果未找到要删除的信息,提示未找到该信息;4 结语本实验通过对文件数据的操作,主要考查了一下几个方面的知识:1、对文件的基本操作,包括数据的读取和重新写入;2、要求掌握对数组的熟练运用,包括数组的,查找,替换,删除,插入等;3、重点要求掌握在函数调用。通过对本实验的学习,熟练掌握了以上的知识,我们才能继续进行以后的程序学习。附件:#include stdio.h#include stdlib.h#include string.hint index(char s1,char s2) /查找 int i=0,j,m,f=0;while(s1i!=0)m=i;j=0;while(s2j!=0)
7、 if(s1m!=s2j) break; else m+; j+; if(s2j=0) return(i); else i+;return(-1);void th(char s,char t,char r) /替换 int j,p,m,n,i=1,a=1;while(index(s,t)!=-1) i=index(s,t);p=strlen(s); m=strlen(t); n=strlen(r); if(in) for(j=i+m;j=p;j+) sj-m+n=sj; else if(m=i+m;j-) sj-m+n=sj; for(j=0;j=i-1;k-) s1l2+k=s1k; for
8、(k=0;kl2;k+) s1i-1+k=s2k; s1l1+l2-1=0; printf(运行后数据为:n); puts(s1);void shanchu(char s1,char s2) /删除int n=1,s,m,i;while(index(s1,s2)!=-1)n=index(s1,s2);s=strlen(s1);m=strlen(s2);for(i=n;i=s;i+)s1i=s1i+m; printf(运行后数据为:n);puts(s1);void yidong(char s,char t,int i) /移动int n,a,m,f;n=index(s,t);a=strlen(s
9、);m=strlen(t);for(f=n;f=a;f+)sf=sf+m;cr(s,t,i); void main()char s100; int i=0,n=0,q,c,f=0;char ch,a100,r100,m100,t100,y=y;FILE *fp; fp=fopen(d:k4.txt,r+); while(!feof(fp) /读取数据ch=fgetc(fp);si+=ch;si=0;printf(原文本内容为:n);puts(s); /读盘while(y=y|y=Y)printf(*n);printf(1、查找与替换n);printf(2、插入n);printf(3、块移动n)
10、;printf(4、删除n);printf(*n);printf(请选择(14):);scanf(%d,&c);getchar();switch(c)case 1:printf(输入查找的数据:n);gets(a);if(index(s,a)!=-1) printf(找到n);elseprintf(找不到!n);break; printf(输入要替换的数据:n);gets(r);th(s,a,r);break; /替换case 2:printf(输入要插入的数据:n);gets(m);printf(输入要插入的位置:n);scanf(%d,&q);cr(s,m,q);getchar();bre
11、ak; /插入case 3:printf(输入要移动的数据:n);gets(t);if(index(s,t)=-1)break;printf(输入要移动的位置:n);scanf(%d,&q);yidong(s,t,q);getchar();break;case 4:printf(输入要删除的数据:n);gets(t);if(index(s,t)!=-1) printf(找到n);elseprintf(找不到!n); shanchu(s,t);break;printf(*n);printf(是否继续:Y/Nn);scanf(%c,&y); rewind(fp); /指针复位fputs(s,fp); /存盘fclose(fp); 运行结果:任务总结:这是不成功的课程设计有待提高, 本来想用链表来实现,但最后百般调试仍无结果,不能脱离C语言下数组长度的有限性。我只能无奈的宣布失败,知道自己所学胜少,能力范围,只能这样。课程设计成绩评定表出勤情况出勤天数 缺勤天数成绩评定出勤情况及设计过程表现(20分)论文(20分)设计成果(60分)总成绩(100分)综合评定 指导教师签名: 年 月 日
限制150内