欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    简单行编辑程序实验报告.doc

    • 资源ID:124905       资源大小:88KB        全文页数:17页
    • 资源格式: DOC        下载积分:5
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要5
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    简单行编辑程序实验报告.doc

    1、简单行编辑程序课程设计一 设计要求1.问题描述文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。限制这些操作以行为单位进行的编辑程序称为行编辑程序。被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的做法即不经济,又不总能实现。一种解决方法是逐段的编辑。任何时刻只把待编辑文件的一段放在内存,称为活区。试按这种方法实现一个简单的行编辑程序,设文件每行不超过320个字符,很少超过80个字符。2.需求分析该程序要实现以下4条基本的编辑命令:(1)行插入。格式:i. 将插入活区中第行之后。(2)行删除。格式:d.例如删除活区中第行(到第行)。(3)活区

    2、切换。格式:n将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。(4)活区显示。格式:p;逐页地(每页20行)显示活区内容,在每显示的一页之后请用户决定是否继续显示以后各页(如果存在)。印出的每一行要前置行号和一个空格符,行号固定占4位,增量为1。 各条命令中的行号均须在活区中各行号范围之内,只有插入命令的行号可以等于活区第一行行号减一,表示插入当前的屏幕中第一行之前,否则命令参数非法。二 概要设计1. 主界面设计为了实现简单行编辑程序,设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能。主控菜单运行如下:请预览后下载!2. 存储结构设计该系统采用串的顺序存储结构。3. 系

    3、统功能设计(1) 行插入(2) 行删除(3) 文本显示(4) 保存文件(5) 读取文件(6) 退出系统三 模块设计1.模块设计本程序包含主程序模块、菜单选择模块和串操作模块。调用关系如下菜单选择模块串操作模块主程序模块2.系统子程序及功能设计(1) enter(int linenum) /行插入(2) void delete_text() /行删除(3) void list() /文本显示(4) void save(char *fname) /保存文件(5) void load(char *fname) /读取文件四 详细设计1.数据结构设计ADT line基本操作:请预览后下载!enter(

    4、linenum) 初始条件:有内存。 操作结果:linenum +1. delete_text( ) 初始条件:line存在。操作结果:若删除的最后一行,则直接删除。 若删除中间一行,则后面的linenum -1。 Load( )初始条件:存在文件file 操作结果:打开文件。 ADT line2. 系统主要子程序详细设计(1) 主程序模块设计 void main(int argc,char *argv) char s80,choice,fname80; int linenum=1; start=NULL; last=NULL; if(argc=2) load(argv1); do choic

    5、e=menu_select(); switch(choice) case 1:printf(行号:); gets(s); linenum=atoi(s); enter(linenum); break; case 2:delete_text(); break; case 3:list(); break; case 4:printf(t文件名 :); gets(fname); save(fname); break; case 5:printf(t文件名:); gets(fname); load(fname);请预览后下载! break; case 6:exit(0); while(1); menu

    6、select() char s80; int c; printf(t*欢迎使用简单行编辑程序*n); printf(tttt1.行插入n); printf(tttt2.行删除n); printf(tttt3.文本显示n); printf(tttt4.保存文件n); printf(tttt5.读取文件n); printf(tttt6.退出n); printf(t*n); do printf(nntt 请选择 :); gets(s); c=atoi(s); while(c6); return(c); (2) 主要工作函数 /*将文本插在指定行端部*/ enter(int linenum) str

    7、uct line *info; for(;) info=(struct line *)malloc(sizeof(struct line); if(!info) printf(t! 内存不够!n); return(NULL); printf(%d:,linenum); gets(info-text); info-num=linenum; 请预览后下载! if(*info-text) if(find(linenum) patchup(linenum,1); if(*info-text) start=dls_store(info); else break; linenum+; return(lin

    8、enum); /*当文本内容插在文件中间时其下面的内容的行号必须增加1,而删除时,被删除的文本后面的行号必须减1 */ void patchup(int n,int incr) struct line *i; i=find(n); while(i) i-num=i-num+incr; i=i-next; /*按行号排序后插入 */ struct line *dls_store(struct line *i) struct line *old,*p; if(last=NULL) i-next=NULL; i-prior=NULL; last=i; return(i); p=start; old=

    9、NULL; while(p) if(p-num) old=p; p=p-next; else 请预览后下载! if(p-prior) p-prior-next=i; i-next=p; p-prior=i; return start; i-next=p; i-prior=NULL; p-prior=i; return(i); old-next=i; i-next=NULL; i-prior=old; last=i; return start; /*删除一行 */ void delete_text() struct line *info; char s80; int linenum; print

    10、f(行号 :); gets(s); linenum=atoi(s); info=find(linenum); if(info) if(start=info) start=info-next; if(start) start-prior=NULL; else last=NULL; else info-prior-next=info-next; if(info!=last) info-next-prior=info-prior; else last=info-prior;请预览后下载! free(info); patchup(linenum+1,-1); /*查找一行文本 */ struct li

    11、ne *find(int linenum) struct line *info; info=start; while(info) if(linenum=info-num) return(info); info=info-next; return(NULL); /*显示文本 */ void list() struct line *info; info=start; while(info) printf(%d:%sn,info-num,info-text); info=info-next; printf(nn); /*存文件 */ void save(char *fname) struct lin

    12、e *info; char *p; FILE *fp; if(fp=fopen(fname,w)=NULL) printf(t Cant open the file !n); exit(0); printf(t Saved :n);请预览后下载! info=start; while(info) p=info-text; while(*p) putc(*p+,fp); putc(n,fp); info=info-next; fclose(fp); /*读取文件 */ void load(char *fname) struct line *info,*temp; char *p; FILE *fp

    13、 int size,inct; if(fp=fopen(fname,r+)=NULL) printf(t Cant open the file !n); exit(0); while(start) temp=start; start=start-next; free(temp); printf(nt Reading.n); size=sizeof(struct line); start=(struct line*)malloc(size); if(!start) printf(nt内存已经用完 !); return; info=start; p=info-text; inct=1; whil

    14、e(*p=getc(fp)!=EOF) p+; while(*p=getc(fp)!=n) p+;请预览后下载! *p=0; info-num=inct+; info-next=(struct line*)malloc(size); if(!info-next) printf(nt内存已经用完 !); return; info-prior=temp; temp=info; info=info-next; p=info-text; temp-next=NULL; last=temp; free(info); start-prior=NULL; fclose(fp); 五 测试分析1. 主菜单2.

    15、 行插入请预览后下载!3. 行删除及文本显示4. 保存及读取文件5. 退出主菜单下输入5并回车即退出“简单行编辑程序”。六 源程序清单#include #include #include struct line char text81; int num; /*行号*/ struct line *next; /*指向下一个输入项目的指针 */ struct line *prior; /*指向前一个项目的指针 */ ;请预览后下载! struct line *start; /*指向表中第一个项目的指针 */ struct line *last; /*指向表中最后一个项目的指针 */ struct

    16、line *find(int),*dls_store(struct line *); void patchup(int,int),delete_text(),list(),save(char *),load(char *); menu_select(); enter(int linenum); void main(int argc,char *argv) char s80,choice,fname80; int linenum=1; start=NULL; last=NULL; if(argc=2) load(argv1);/*读取命令行上的文件 */ do choice=menu_selec

    17、t(); switch(choice) case 1:printf(行号:); gets(s); linenum=atoi(s); enter(linenum); break; case 2:delete_text(); break; case 3:list(); break; case 4:printf(t文件名 :); gets(fname); save(fname); break; case 5:printf(t文件名:); gets(fname); load(fname); break; case 6:exit(0); while(1); 请预览后下载! /* 显示菜单,供用户选择 *

    18、/ menu_select() char s80; int c; printf(t*欢迎使用简单行编辑程序*n); printf(tttt1.行插入n); printf(tttt2.行删除n); printf(tttt3.文本显示n); printf(tttt4.保存文件n); printf(tttt5.读取文件n); printf(tttt6.退出n); printf(t*n); do printf(nntt 请选择 :); gets(s); c=atoi(s); while(c6); return(c); /*将文本插在指定行端部*/ enter(int linenum) struct l

    19、ine *info; for(;) info=(struct line *)malloc(sizeof(struct line); if(!info) printf(t! 内存不够!n); return(NULL); printf(%d:,linenum); gets(info-text); info-num=linenum; if(*info-text) if(find(linenum) patchup(linenum,1); if(*info-text) start=dls_store(info);请预览后下载! else break; linenum+; return(linenum);

    20、 /*当文本内容插在文件中间时其下面的内容的行号必须增加1,而删除时,被删除的文本后面的行号必须减1 */ void patchup(int n,int incr) struct line *i; i=find(n); while(i) i-num=i-num+incr; i=i-next; /*按行号排序后插入 */ struct line *dls_store(struct line *i) struct line *old,*p; if(last=NULL) i-next=NULL; i-prior=NULL; last=i; return(i); p=start; old=NULL;

    21、while(p) if(p-num) old=p; p=p-next; else if(p-prior) p-prior-next=i; i-next=p;请预览后下载! p-prior=i; return start; i-next=p; i-prior=NULL; p-prior=i; return(i); old-next=i; i-next=NULL; i-prior=old; last=i; return start; /*删除一行 */ void delete_text() struct line *info; char s80; int linenum; printf(行号 :)

    22、 gets(s); linenum=atoi(s); info=find(linenum); if(info) if(start=info) start=info-next; if(start) start-prior=NULL; else last=NULL; else info-prior-next=info-next; if(info!=last) info-next-prior=info-prior; else last=info-prior; free(info); patchup(linenum+1,-1); 请预览后下载! /*查找一行文本 */ struct line *fi

    23、nd(int linenum) struct line *info; info=start; while(info) if(linenum=info-num) return(info); info=info-next; return(NULL); /*显示文本 */ void list() struct line *info; info=start; while(info) printf(%d:%sn,info-num,info-text); info=info-next; printf(nn); /*存文件 */ void save(char *fname) struct line *inf

    24、o; char *p; FILE *fp; if(fp=fopen(fname,w)=NULL) printf(t Cant open the file !n); exit(0); printf(t Saved :n); info=start; while(info) p=info-text;请预览后下载! while(*p) putc(*p+,fp); putc(n,fp); info=info-next; fclose(fp); /*读取文件 */ void load(char *fname) struct line *info,*temp; char *p; FILE *fp; int

    25、size,inct; if(fp=fopen(fname,r+)=NULL) printf(t Cant open the file !n); exit(0); while(start) temp=start; start=start-next; free(temp); printf(nt Reading.n); size=sizeof(struct line); start=(struct line*)malloc(size); if(!start) printf(nt内存已经用完 !); return; info=start; p=info-text; inct=1; while(*p=g

    26、etc(fp)!=EOF) p+; while(*p=getc(fp)!=n) p+; *p=0; info-num=inct+; info-next=(struct line*)malloc(size); if(!info-next)请预览后下载! printf(nt内存已经用完 !); return; info-prior=temp; temp=info; info=info-next; p=info-text; temp-next=NULL; last=temp; free(info); start-prior=NULL; fclose(fp); (注:可编辑下载,若有不当之处,请指正,谢谢!) 请预览后下载!


    注意事项

    本文(简单行编辑程序实验报告.doc)为本站会员(peixunshi0)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!




    宁ICP备18001539号-1

    三一文库
    收起
    展开