简单行编辑程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构程序设计

实验报告

院系:计算机科学与技术学院

专业:软件工程1班

**:***

学号:E********

日期:2014/9/19

一、需求分析

1、问题描述:文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。限制这些操作以行为单位进行的编辑程序称为行编辑程序。

被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的做法即不经济,又不总能实现。一种解决方法是逐段的编辑。任何时刻只把待编辑文件的一段放在内存,称为活区。试按这种方法实现一个简单的行编辑程序,设文件每行不超过320个字符,很少超过80个字符。

2、此程序具备以下功能:

(1)行插入。格式:i<行号><回车><文本>. <回车>

将<文本>插入活区中第<行号>行之后。

(2)行删除。格式:d<行号1>[<空格><行号2>]<回车>;

删除活区中第<行号1>行(到第<行号2>行)。

(3)活区切换。格式:n<回车>

将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。

(4)活区显示。格式:p<回车>

逐页地(每页20行)显示活区内容,在每显示的一页之后请用户决定是否继续显示以后各页(如果存在)。印出的每一行要前置行号和一个空格符,行号固定占4位,增量为1。

各条命令中的行号均须在活区中各行号范围之内,只有插入命令

的行号可以等于活区第一行行号减一,表示插入当前的屏幕中第一行之前,否则命令参数非法。

二、概要设计

1、主页面设计

2、存储结构设计

typedef struct text

{

char string[SIZE];//存储每一行的元素

struct text *next;//指向后一个节点的指针

int length;

}text,*textp;

3、系统功能设计

1)行插入

2)行删除

3)活区切换

4)活区显示

5)结束

4、程序调用关系

程序结构流程图:

三、详细设计

1 、数据结构存储定义

typedef struct text

{

char string[SIZE];//存储每一行的元素

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)malloc(sizeof(text));//为插入行分配空间

fflush(stdin);

fgets(p->string,80,stdin); /*输入插入行的内容*/

p1=head->next;

if(head->length==ActiveMaxLen)

fputs(p1->string,out);

else{

if(hang==1)

{

p->next=head->next;

head->next=p;

head->length++;

}

else

{

for(i=2;i

p1=p1->next;

p->next=p1->next;

p1->next=p;

head->length++;

}

}

printf("在第%d行前插入完成\n",hang);

return OK;

}

3、行删除

int del(textp &head) //删除d命令对应的函数,用来删max-min中的行,用结构体中的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

p=p->next;

for(i=i-1,q=p->next;i

{

p->next=q->next;

free(q);

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&&(!feof(fp));p=p->next)

{

if(!fgets(p->string,80,fp)) break;

p->flat=1;

}

return 0;

}

Status SaveFile(textp head,FILE *out) /*存储活区的函数*/

{

textp p;

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命令对应的函数,用来显示活区的内容

{

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

相关文档
最新文档