简单行编辑程序_第1页
简单行编辑程序_第2页
简单行编辑程序_第3页
简单行编辑程序_第4页
简单行编辑程序_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、简单行编辑程序题目:简单行编辑程序班级:计算机科学与技术(非师范)姓名:学号:完成日期:2010-6-25需求分析以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?并明确规定:文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等 修改操作。限制这些操作以行为单位进行的编辑程序称为行编辑程序。输入的形式和输入值的范围;无范围输出的形式;字符串程序所能达到的功能;实现以下4条基本编辑命令:行插入。格式:i行号回车文本回车将 文本 插入活区中第 行号行之后行删除。格式:d行号1口行号2回车删除活区中第行号1行(到第行号2行)。两种格式的例子是:“d10/”和 “d1

2、0E4/”活区切换。格式:n回车将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。活区显示。格式:p回车测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。-M-开文伯成行号X文件名X回车* 插入稽式:X行专回车X文本X回车)* 删除喑式:(K符导1*空格X行号回年* 区切悲螫式:成回车 区显正号式;P-M-意;4t所有命令前必须先用。命令打开文件,并 P命令显示出狷I !XXNJCXXNJC概要设计说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。typedef struct textchar string80;/存储每一行的

3、元素struct text *next;/指向后一个节点的指针struct text *pre;/指向前一个节点的指针int num;/每一行元素的长度int flat;/确定此行是否被删除的标志text;FILE *fp,*out;/fp是执行被打开的文件,out指向被写入的文件text *head;/链表的头指针int n=0,sum,delnum,xiugai=0,page=0;/file:/修改用来指示文件是否被修改过,如果修改过才回存盘。page用来计算显示的/file:/页数.delnum用来存储被删除的字节数,sum存储一页的总字节数详细设计实现概要设计中定义的所有数据类型,对每

4、个操作只需要写出伪码算法;对主程序和其他模块也都需 要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计 语言程序);画出函数和过程的调用关系图。cmd=getchar();printf(n请输入命令(按E键退出):);cmd=getchar();switch(cmd)case e:case E:if(xiugai=1)saveall();freemem();if(fp) fclose(fp);if(out) fclose(out);system(cls);return 0;case o:case O:Openfiles();break;case p:

5、case P:Createlist();display();break;case n:case N:saveanddisplay(10);break;case d:case D:del();break;case i:case I:insert();break;default:printf(nnn输入错误);调试分析当我调试程序时发现前面的子程序调用后面的子程序竟然是错误的,明明巳经定义了的子程序竟然没有 定义这令我大为不解不过后来当我把被调用的程序放到前面,程序就顺利运行了。用户使用说明说明如何使用你编写的程序,详细列出每一步的操作步骤。当你使用这个程序时,会出现一个简单的提示界面,你可以选择

6、相应的help选项,来 看操作说明。测试结果列出你的测试结果,包括输入和输出。这里的测试数据应该完整和严格,最好多于需求分析中所列。-M-开文伯成行号X文件名X回车* 插入稽式:X行专回车X文本X回车)* 删除喑式:(K符导1*空格X行号回年* 区切悲螫式:成回车 区显正号式;P-M-意;4t所有命令前必须先用。命令打开文件,并 P命令显示出狷I !XXNJC附录带注释的源程序。如果提交源程序软盘,可以只列出程序文件名的清单。#define NULL 0#define OK 0#include #include #include #include #include #include typed

7、ef struct textchar string80;/存储每一行的元素struct text *next;/指向后一个节点的指针struct text *pre;/指向前一个节点的指针int num;/每一行元素的长度int flat;/确定此行是否被删除的标志text;FILE *fp,*out;/fp是执行被打开的文件,out指向被写入的文件text *head;/链表的头指针int n=0,sum,delnum,xiugai=0,page=0;/file:/修改用来指示文件是否被修改过,如果修改过才回存盘。page用来计算显示的/file:/页数.delnum用来存储被删除的字节数,

8、sum存储一页的总字节数void byebye()/没有具体用处,只是写着玩的,在屏幕上显示一个byeputs(ttt*puts(ttt* );puts(ttt* );puts(ttt* * );puts(ttt*puts(ttt* );puts(ttt* );puts(ttt*);void HELP()/帮助函数,显示一些命令的格式printf(nt*n);printf(t*打开文件:o行号文件名 回车 *n);printf(t* 行插入格式:i行号 回车文本 回车 *n);printf(t*行删除格式:d行号1空格行号2回车 *n);printf(t*活区切换格式:n回车*n);print

9、f(t*活区显示格式:p回车*n);printf(t*注意:在执行所有命令前必须先用。命令打开文件,并*n);printf(t*用p命令显示出来*n);-i, - *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* *!*!* printf(t*n),system(pause);printf(nnn);void A

10、BOUT()/也是写着玩的 printf(ntt*n);printf(tt* welcome to the program*n);printf(tt* all work and no play make jack adull boy *n);printf(tt* enjoy your work*n);printf(tt*n);system(pause);system(cls);printf(nnn);void Createlist()/建立一个十个节点的链表,是文本中的一页text *p1,*p2;p1=p2=(text *)malloc(sizeof(text);head=NULL;whil

11、e(nnext=p1;p1-pre=p2;p1-flat=0;p2=p1;p1=(text *)malloc(sizeof(text);p2-next=NULL;void freemem()/释放链表所占的内存text *p;for(p=head;head!=NULL;)head=p-next;free(p);p=head; int Openfiles()/打开文件的函数char name30,outname30;puts(请输入要打开的文件名:);scanf(%s”,name);if(fp=fopen(name,r+)=NULL)printf(打不开原文件! n);exit(0);puts(

12、-请输入要写入的文件名:);scanf(%s”,outname);if(out=fopen(outname,w+)=NULL)printf(打不开目标文件! n);exit(0);return 0;int display()/从文件中读入到链表中,并显示出来int i;char conti=y;text *p;while(!feof(fp)&(conti=y|conti=Y)page+;printf(tt 第%d n,page);for(i=0,p=head,sum=0;(inext)fgets(p-string,sizeof(p-string),fp);puts(p-string);p-fl

13、at=1;p-num=strlen(p-string);sum=sum+p-num;puts(Continue?(Y/N):);conti=getche();if(feof(fp)puts(n文件巳经结束!);return 0;return 0;int saveanddisplay(int hang)/命令n执行的函数,用来将活区的内容显示并读入下一页内容int i,endflat=0;char conti=y;text *p=NULL;page+;for(i=0,p=head;inext) /file:/将活区写入文件if(p-flat=1)fputs(p-string,out);p-fla

14、t=0;if(!feof(fp)printf(tt 第%d n,page);for(i=0,p=head,sum=0;(inext)/从文件读入活区if(fgets(p-string,sizeof(p-string),fp)puts(p-string);p-flat=1;p-num=strlen(p-string);sum=sum+p-num;if(feof(fp)printf(文件巳经结束!);return 0;int saveall()/退出编辑函数后执行的函数,将所有的内容存盘int i,endflat=0;char conti=y;text *p;for(i=0,p=head;inex

15、t) /file:/将活区写入文件if(p-flat=1)fputs(p-string,out);p-flat=0;while(!feof(fp)/将其余的内容写入文件fputc(fgetc(fp),out);return 0;int del()/删除d命令对应的函数,用来删minmax中的行,用结构体中的flat表示是否被删除text *p1,*p2,*p3;int min,max,i;xiugai=1;scanf(%d %d”,&min,&max);if(head=NULL)printf(nlist null!n);return 0;p1=p2=head;for(i=0;inext;for

16、(i=0;inext;for(delnum=0;p1!=p2;p1=p1-next)/*删除中间的节点,将 flat 赋值 0*/p1-flat=0;delnum=delnum+p1-num;for(i=0,p3=head;inext)/显示删除后的结果if(p3-flat=1)puts(p3-string);saveanddisplay(10);/将删除后的结果存盘并显示下一页内容(十行)xiugai=1;return 0; int insert()/插入i命令对应的函数,在i行后插入文本int hang,i,increhang=1,number=1;text *p,*p1,*p2;xiug

17、ai=1;scanf(%d”,&hang);p=p1=NULL;for(i=0,p1=head;inext);/找到要插入行的前一列p=(text *)malloc(sizeof(text);/为插入行分配空间p-flat=1;p-next=p1-next;/从此行向下四行将插入行插入到链表中p-pre=p1;p1-next-pre=p;p1-next=p;p-string0=getchar();p-string0=getchar();for(i=1;(istringiT!=);i+)p-stringi=getchar();if(i+1=80)&(p-stringi!=、)/如果插入的内容超过

18、一彳亍/file:/的容量,则分配下一行空间p1=p;/file:/并将其连入链表p=(text *)malloc(sizeof(text);p-flat=1;p-next=p1-next;p-pre=p1;p1-next-pre=p;p1-next=p;i=0;increhang+;p-num=i;p-stringi-1=n;p-stringi=0;puts(-修改后的链表:”);for(p2=head;p2!=NULL;p2=p2-next)/显示出修改后的链表puts(p2-string);saveanddisplay(10+increhang);/将修改后的链表存盘并显示下一页内容xiugai=1;return 0;int EDIT()/编辑函数,用来接受处理编辑命令char cmd;docmd=getchar();printf(n请输入命令(按E键退出):);cmd=getchar();switch(cmd)case e:case E:if(xiugai=1)saveall();freemem();if(fp) fclose(fp);if(out) fclose(ou

温馨提示

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

评论

0/150

提交评论