简单行编辑程序_第1页
简单行编辑程序_第2页
简单行编辑程序_第3页
简单行编辑程序_第4页
免费预览已结束,剩余14页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.数据结构程序设计实验报告简单行编辑程序院系:计算机科学与技术学院专业:软件工程1班姓名:丁珊珊学号: E01214269日期: 2014/9/191/17.一、需求分析1、问 题描述:文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。限制这些操作以行为单位进行的编辑程序称为行编辑程序。被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的做法即不经济,又不总能实现。一种解决方法是逐段的编辑。任何时刻只把待编辑文件的一段放在内存, 称为活区。试按这种方法实现一个简单的行编辑程序, 设文件每行不超过 320 个字符,很少超过 80 个字符。2、此程

2、序具备以下功能:(1) 行插入。 格式: i< 行号 ><回车 ><文本 >. < 回车 > 将 <文本 >插入活区中第 <行号 >行之后。(2) 行删除。 格式: d<行号 1>< 空格 ><行号 2>< 回车>;删除活区中第 <行号 1>行(到第 <行号 2>行)。(3) 活区切换。 格式: n<回车 >将活区写入输出文件, 并从输入文件中读入下一段,作为新的活区。(4) 活区显示。 格式: p<回车 >逐页地(每页 20

3、行)显示活区内容,在每显示的一页之后请用户决定是否继续显示以后各页(如果存在) 。印出的每一行要前置行号和一个空格符,行号固定占 4 位,增量为 1。各条命令中的行号均须在活区中各行号范围之内,只有插入命令2/17.的行号可以等于活区第一行行号减一,表示插入当前的屏幕中第一行之前,否则命令参数非法。二、概要设计1、主页面设计2、存储结构设计typedef struct textchar stringSIZE;/ 存储每一行的元素struct text *next;/指向后一个节点的指针int length;text,*textp;3、系统功能设计1)行插入3/17.2)行删除3)活区切换4)活

4、区显示5)结束4、程序调用关系程序结构流程图:开始输入命令i输入命令d输入命令n输入命令p输入命令e插入一行删除一行内切换活区显示活区结束程序文字容三、详细设计1 、 数据结构存储定义typedef struct textchar stringSIZE;/ 存储每一行的元素struct text *next;/指向后一个节点的指针int length;text,*textp;2、 行插入int insert(textp &head,FILE *out)int hang,i;textp p,p1;scanf("%d",&hang);p=(textp)mallo

5、c(sizeof(text);/ 为插入行分配空间4/17.fflush(stdin);fgets(p->string,80,stdin); /*输入插入行的内容 */p1=head->next;if(head->length=ActiveMaxLen)fputs(p1->string,out);elseif(hang=1)p->next=head->next;head->next=p;head->length+;elsefor(i=2;i<hang;i+)p1=p1->next;p->next=p1->next;p1-&

6、gt;next=p;head->length+;printf(" 在第 %d 行前插入完成 n",hang);return OK;3、行删除int del(textp &head) /删除 d 命令对应的函数, 用来删 maxmin 中的行,用结构体中的 flat 表示是否被删除text *p,*q;int min,max,i;scanf("%d %d",&min,&max);if(head=NULL)printf("nlist null!n");return OK;p=head;for(i=1;i<

7、;min;i+)/* 找到要删除的第一行的前一行*/p=p->next;for(i=i-1,q=p->next;i<max;i+)/* 删除到最后一行 */p->next=q->next;free(q);5/17.q=p->next;head->length-;printf(" 第%d 行到第 %d 行删除完成! n",min,max); return OK;4、活区切换Status LoadFile(textp head,FILE *fp) /*从文件读内容到活区 */textp p;for(p=head;p&&(

8、!feof(fp);p=p->next)if(!fgets(p->string,80,fp)break;p->flat=1;return 0;Status SaveFile(textp head,FILE *out) /* 存储活区的函数 */ textpp;for(p=head;p;p=p->next)if(p->flat=1)fputs(p->string,out);/* 输出活区的内容到指定的文件*/p->flat=0;return OK;5、活区显示void display(textp head)/ 显示 P 命令对应的函数,用来显示活区的内容

9、int i;int j=head->length/20;int k=0;textp p=head->next;for(j=0;j<=head->length/20;j+)printf("*page%d*n",j+1); for(i=20*j+1;i<=head->length;p=p->next,i+)6/17.printf("%2d",i);printf(" %s",p->string);if(i%20=0)break;printf(" 是否继续显示下一页,是输入 1,否输入

10、 0.n"); scanf("%d",&k);if(k=0)break;if(j=head->length/20-1)printf(" 没有后续页面了 n");break;四、测试分析1.开始界面7/17.2.用户输入一个已经存在的文本文件名称in.txt 并回车,程序将读出内容并存入一个新的文本文件out 中。并输入命令 p,显示。8/17.3.输入命令 i,在文本文件中插入文本。4.输入命令 d,删除选中文本。 并输入命令 p,显示当前活区。9/17.5.输入命令 n,切换活区。并输入命令平,显示。10/17.6.输入命令 e

11、,结束程序并清除活区。五、源程序设计#include<string.h>#include<stdio.h>#include<stdlib.h>#include<io.h>#include<process.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define ActiveMaxLen 100#define SIZE 80#define x 20typedef struct text

12、char stringSIZE;/ 存储每一行的元素struct text *next;/ 指向后一个节点的指针int length;11/17.text,*textp;void Createlist(textp &head)/建立一个 80 个节点的链表,是整个活区的大小head=(text *)malloc(sizeof(text);int n=0;head->length=0;textp p,q;while(n<80)p=(text *)malloc(sizeof(text);n+;if(n=1)head->next=p;p->next=NULL;q=p;

13、head->length+;elsep->next=q->next;q->next=p;q=p;head->length+;printf(" 活区创建完成 n");int del(textp &head)/ 删除 d 命令对应的函数,用来删 maxmin 中的行,用结构体中的 flat 表示是否被删除text *p,*q;int min,max,i;scanf("%d %d",&min,&max);if(head=NULL)printf("nlist null!n");return

14、 OK;p=head;for(i=1;i<min;i+)/* 找到要删除的第一行的前一行*/12/17.p=p->next;for(i=i-1,q=p->next;i<max;i+)/* 删除到最后一行 */p->next=q->next;free(q);q=p->next;head->length-;printf(" 第 %d 行到第 %d 行删除完成! n",min,max); return OK;void display(textp head)/显示 P 命令对应的函数,用来显示活区的内容int i;int j=head

15、->length/20;int k=0;textp p=head->next;for(j=0;j<=head->length/20;j+)printf("*page%d*n",j+1); for(i=20*j+1;i<=head->length;p=p->next,i+) printf("%2d",i);printf(" %s",p->string);if(i%20=0)break;printf(" 是否继续显示下一页,是输入1,否输入 0.n");scanf(&qu

16、ot;%d",&k);if(k=0)break;if(j=head->length/20-1)printf(" 没有后续页面了 n");break;void freemem(textp &head)/释放链表所占的内存13/17.text *p=head->next;while(p)head->next=p->next;free(p);p=head->next;head->length-;printf(" 活区清除 n");int insert(textp &head,FILE *ou

17、t)int hang,i;textp p,p1;scanf("%d",&hang);p=(textp)malloc(sizeof(text);/ 为插入行分配空间fflush(stdin);fgets(p->string,80,stdin); /*输入插入行的内容 */p1=head->next;if(head->length=ActiveMaxLen)fputs(p1->string,out);elseif(hang=1)p->next=head->next;head->next=p;head->length+;el

18、sefor(i=2;i<hang;i+)p1=p1->next;p->next=p1->next;p1->next=p;head->length+;printf(" 在第 %d 行前插入完成 n",hang);return OK;14/17.void LoadFile(textp &head,FILE *fp,int e) /* 从文件读内容到活区 */textp p=head->next;for(int j=0;j<e;j+)fgets(head->string,81,fp);for(int i=0;i<

19、head->length&&(!feof(fp);i+)fgets(p->string,81,fp);p=p->next;void SaveFile(textp head,FILE *out,FILE *in,int &e)/* 存储活区的函数 */textpp=head->next;e=e+80;for(int i=0;i<head->length;p=p->next,i+)fputs(p->string,out);void HELP()/ 帮助函数,显示一些命令的格式printf("nt*n");p

20、rintf("t *行插入格式:i< 行号 ><回车 ><文本 ><回车 > *n");printf("t *行删除格式:d<回车 ><行号 1>< 空格 >< 行号 2>< 回车 > *n");printf("t *活区切换格式:n<回车 >*n");printf("t *活区显示格式:p<回车 >*n");printf("t *退出格式:e<回车 >*n&qu

21、ot;);printf("t*n");void main()/ 主函数,用来接受命令/编辑函数,用来接受处理编辑命令int e=0;textp head;FILE *in,*out;char c,inname30,outname30;printf("# 欢 迎 使 用 行 编 辑 程 序#n");15/17.HELP();/* 打开输入、输出文件 */printf("Enter the infile name:");scanf("%s",inname);printf("Enter the outfile name:");scanf("%s",outname);if(in=fopen("in.txt","r")=NULL)printf("can't open the file! n");if(out=fopen(outname,"w")=NULL)printf("can't iiopen the file!n");exit(0);Createlist(hea

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论