




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构程序设计实验报告简单行编辑程序院系:计算机科学与技术学院专业:软件工程1班姓名:丁珊珊学号:E01214269日期:2014/9/19一、需求分析1、问题描述:文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。限制这些操作以行为单位进行的编辑程序称为行编辑程序。被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的做法即不经济,又不总能实现。一种解决方法是逐段的编辑。任何时刻只把待编辑文件的一段放在内存,称为活区。试按这种方法实现一个简单的行编辑程序,设文件每行不超过320个字符,很少超过80个字符。2、此程序具备以下功能:(1)行插入。
2、格式:i. 将插入活区中第行之后。(2)行删除。格式:d; 删除活区中第行(到第行)。(3)活区切换。格式:n将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。(4)活区显示。格式:p 逐页地(每页20行)显示活区内容,在每显示的一页之后请用户决定是否继续显示以后各页(如果存在)。印出的每一行要前置行号和一个空格符,行号固定占4位,增量为1。 各条命令中的行号均须在活区中各行号范围之内,只有插入命令的行号可以等于活区第一行行号减一,表示插入当前的屏幕中第一行之前,否则命令参数非法。二、 概要设计1、 主页面设计 2、 存储结构设计 typedef struct text char s
3、tringSIZE;/存储每一行的元素 struct text *next;/指向后一个节点的指针 int length;text,*textp;3、 系统功能设计1)行插入2)行删除3)活区切换4)活区显示5)结束4、 程序调用关系程序结构流程图:开始输入命令e输入命令p输入命令n输入命令d输入命令i结束程序显示活区切换活区删除一行内容插入一行文字三、 详细设计 1 、 数据结构存储定义typedef struct text char stringSIZE;/存储每一行的元素 struct text *next;/指向后一个节点的指针 int length;text,*textp;2、 行插
4、入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);elseif(hang=1) p-next=head-next;head-next=p;head-length+; elsefor(i=2;inext;
5、p-next=p1-next;p1-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;inext; for(i=i-1,q=p-next;inext=q-next;free(
6、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-nex
7、t)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;jlength/20;j+)printf(*page%d*n,j+1); for(i=20*j+1;ilength;p=p-next,i+)printf(%2d,i); printf( %s,p-string);if(i%
8、20=0)break;printf(是否继续显示下一页,是输入1,否输入0.n);scanf(%d,&k);if(k=0)break;if(j=head-length/20-1)printf(没有后续页面了n);break; 四、 测试分析 1.开始界面 2.用户输入一个已经存在的文本文件名称in.txt并回车,程序将读出内容并存入一个新的文本文件out中。并输入命令p,显示。3.输入命令i,在文本文件中插入文本。4.输入命令d,删除选中文本。并输入命令p,显示当前活区。5.输入命令n,切换活区。并输入命令平,显示。6.输入命令e,结束程序并清除活区。五、 源程序设计#include#incl
9、ude#include#include#include#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 char stringSIZE;/存储每一行的元素 struct text *next;/指向后一个节点的指针 int length;text,*textp;void Createlist(textp &head
10、)/建立一个80个节点的链表,是整个活区的大小head=(text *)malloc(sizeof(text); int n=0;head-length=0; textp p,q; while(nnext=p;p-next=NULL;q=p;head-length+; else p-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,&m
11、in,&max); if(head=NULL)printf(nlist null!n); return OK; p=head; for(i=1;inext; for(i=i-1,q=p-next;inext=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-length/20;int k=0; textp p=head-next;for(j=0;jlength/
12、20;j+)printf(*page%d*n,j+1); for(i=20*j+1;ilength;p=p-next,i+)printf(%2d,i); printf( %s,p-string);if(i%20=0)break;printf(是否继续显示下一页,是输入1,否输入0.n);scanf(%d,&k);if(k=0)break;if(j=head-length/20-1)printf(没有后续页面了n);break;void freemem(textp &head)/释放链表所占的内存text *p=head-next; while(p)head-next=p-next; free(
13、p); p=head-next;head-length-;printf(活区清除n);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);elseif(hang=1) p-next=head-next;he
14、ad-next=p;head-length+; elsefor(i=2;inext;p-next=p1-next;p1-next=p;head-length+;printf(在第%d行前插入完成n,hang); return OK;void LoadFile(textp &head,FILE *fp,int e) /*从文件读内容到活区*/ textp p=head-next;for(int j=0;jstring,81,fp);for(int i=0;ilength&(!feof(fp);i+) fgets(p-string,81,fp); p=p-next;void SaveFile(te
15、xtp head,FILE *out,FILE *in,int &e) /*存储活区的函数*/ textp p=head-next;e=e+80; for(int i=0;ilength;p=p-next,i+)fputs(p-string,out); void HELP()/帮助函数,显示一些命令的格式 printf(nt *n); printf(t * 行插入格式: i *n); printf(t * 行删除格式: d *n); printf(t * 活区切换格式: n *n); printf(t * 活区显示格式: p *n); printf(t * 退出格式: e *n); print
16、f(t *n);void main()/主函数,用来接受命令/编辑函数,用来接受处理编辑命令int e=0;textp head; FILE *in,*out; char c,inname30,outname30; printf(#欢迎使用行编辑程序#n); 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(cant open the
17、 file! n); if(out=fopen(outname,w)=NULL) printf(cant iiopen the file!n); exit(0); Createlist(head); LoadFile(head,in,e); doprintf(input order:); fflush(stdin); c=getchar(); switch(c) case p: display(head); break; case n: SaveFile(head,out,in,e); LoadFile(head,in,e); printf(活区切换.n完成n); break; case d: del(head); break; case i: /*插入行*/ insert
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内部审计机构管理办法
- 制盐公司基金管理办法
- 冬天暖棚蜜蜂管理办法
- 公益互助基金管理办法
- 单片机驱动电梯控制系统设计
- 畜禽肌内脂肪沉积与代谢调控基因的研究进展
- 民企退休人员管理办法
- 体检信息保密管理办法
- 目标设定:投资发展部绩效考核指标
- 北京首个露营管理办法
- 湖南长沙长郡中学高一分班考试化学试卷
- 衡水市武强县事业单位考试历年真题
- 髋臼周围截骨术治疗成人髋关节发育不良
- 各科门诊诊所技术操作规程
- 新教材人教版高中化学选择性必修1全册课时练习及章末检测含解析
- 浙江省建设工程施工费用定额相关费用计算程序表及费用取费费率换算表【实用文档】doc
- 《Windows网络操作系统》教学教案
- GB/T 23280-2009开式压力机精度
- GB/T 20041.21-2008电缆管理用导管系统第21部分:刚性导管系统的特殊要求
- GB/T 17213.4-2015工业过程控制阀第4部分:检验和例行试验
- 教师师风师德培训 课件
评论
0/150
提交评论