




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构程序设计实验报告简单行编辑程序院系:计算机科学与技术学院专业:软件工程1班姓名:丁珊珊学号:E01214269日期:2014/9/19一、需求分析1 、问题描述:文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。限制这些操作以行为单位进行的编辑程序称为行编辑程序。被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的做法即不经济,又不总能实现。一种解决方法是逐段的编辑。任何时刻只把待编辑文件的一段放在内存,称为活区。试按这种方法实现一个简单的行编辑程序,设文件每行不超过320个字符,很少超过80个字符。2 、此程序具备以下功能:(1) 行
2、插入。格式:i行号回车文本.回车将文本插入活区中第行号行之后。(2)行删除。格式:d行号1空格行号2卜回车,;删除活区中第行号1行(到第行号2行)。(3)活区切换。格式:门回车将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。活区显示。格式:p回车逐页地(每页20行)显示活区内容,在每显示的一页之后请用户决定是否继续显示以后各页(如果存在)。印出的每一行要前置行号和一个空格符,行号固定占4位,增量为1。各条命令中的行号均须在活区中各行号范围之内,只有插入命令的行号可以等于活区第一行行号减一,表示插入当前的屏幕中第一行之前,否则命令参数非法。二、概要设计1、 主页面设计2、 存储结构设
3、计typedefstructtextcharstringSIZE;/存储每一行的元素structtext*next;/指向后一个节点的指针intlength;text,*textp;3、 系统功能设计1)行插入2)行删除3)活区切换4)活区显示5)结束4、 程序调用关系程序结构流程图:1、数据结构存储定义typedefstructtextcharstringSIZE;/存储每一行的元素structtext*next;/指向后一个节点的指针intlength;text,*textp;5、 行插入intinsert(textp&head,FILE*out)inthang,i;textpp,
4、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;i<hang;i+)p
5、1=p1->next;p->next=p1->next;p1->next=p;head->length+;printf("在第%d行前插入完成n",hang);returnOK;6、 行删除intdel(textp&head)删除d命令对应的函数,用来删maxmin中的行,用结构体中flat表示是否被删除text*p,*q;intmin,max,i;scanf("%d%d",&min,&max);if(head=NULL)printf("nlistnull!n");returnOK
6、;p=head;for(i=1;i<min;i+)/*找到要删除的第一行的前一行*/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);returnOK;7、 活区切换StatusLoadFile(textphead,FILE*fp)/从文件读内容到活区*/textpp;for(p=head;p&&(!
7、feof(fp);p=p->next)if(!fgets(p->string,80,fp)break;p->flat=1;return0;StatusSaveFile(textphead,FILE*out)/*存储活区的函数*/textpp;for(p=head;p;p=p->next)if(p->flat=1)fputs(p->string,out);p->flat=0;/* 输出活区的内容到指定的文件 */returnOK;8、 活区显示voiddisplay(textphead)/显示P命令对应的函数,用来显示活区的内容inti;intj=hea
8、d->length/20;intk=0;textpp=head->next;for(j=0;j<=head->length/20;j+)printf("I *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("%
9、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<string.h>#include<
10、stdio.h>#include<stdlib.h>#include<io.h>#include<process.h># defineTRUE1# defineFALSE0# defineOK1# defineERROR0# defineINFEASIBLE-1# defineOVERFLOW-2# defineActiveMaxLen100# defineSIZE80# definex20typedefstructtextcharstringSIZE;/存储每一行的元素structtext*next;/指向后一个节点的指针intlength;text
11、,*textp;voidCreatelist(textp&head)/健立一个80个节点的链表,是整个活区的大小head=(text*)malloc(sizeof(text);intn=0;head->length=0;textpp,q;while(n<80)p=(text*)malloc(sizeof(text);n+;if(n=1)head->next=p;p->next=NULL;q=p;head->length+;elsep->next=q->next;q->next=p;q=p;head->length+;printf(&
12、quot;活区创建完成n");intdel(textp&head)/删除d命令对应的函数,用来删maxmin中的行,用结构体中的flat表示是否被删除text*p,*q;intmin,max,i;scanf("%d%d",&min,&max);if(head=NULL)printf("nlistnull!n");returnOK;p=head;for(i=1;i<min;i+)/*找到要删除的第一行的前一行*/p=p->next;for(i=i-1,q=p->next;i<max;i+)/*删除到
13、最后一行*/p->next=q->next;free(q);q=p->next;head->length-;printf("第d行到第d行删除完成!n",min,max);returnOK;voiddisplay(textphead)/显示P命令对应的函数,用来显示活区的内容inti;intj=head->length/20;intk=0;textpp=head->next;for(j=0;j<=head->length/20;j+)printf("I*page%d*n",j+1);for(i=20*j+1
14、;i<=head->length;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;voidfreemem(textp&head)释放链表所占的内存te
15、xt*p=head->next;while(p)head->next=p->next;free(p);p=head->next;head->length-;printf("活区消除n");intinsert(textp&head,FILE*out)inthang,i;textpp,p1;scanf("%d",&hang);p=(textp)malloc(sizeof(text);为插入行分配空间fflush(stdin);fgets(p->string,80,stdin);/*输入插入行的内容*/p1=
16、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->next=p;head->length+;printf("在第d行前插入完成n",hang);returnOK;voidLoadFile(textp
17、&head,FILE*fp,inte)/*从文件读内容到活区*/textpp=head->next;for(intj=0;j<e;j+)fgets(head->string,81,fp);for(inti=0;i<head->length&&(!feof(fp);i+)fgets(p->string,81,fp);p=p->next;voidSaveFile(textphead,FILE*out,FILE*in,int&e)/*存储活区的函数*/textpp=head->next;e=e+80;for(inti=0
18、;i<head->length;p=p->next,i+)fputs(p->string,out);voidHELP()/帮助函数,显示一些命令的格式printf("nt*n");printf("t*行插入格式:i<行号><回车><文本><回车>*n");printf("t*行删除格式:d<回车><行号1>卜空格><行号2>卜回车*n");printf("t*活区切换格式:n<回车>*n")
19、;printf("t*活区显示格式:p<回车>*n");printf("t*退出格式:e<回车>*n");printf("t*n");voidmain()/主函数,用来接受命令/编辑函数,用来接受处理编辑命令inte=0;textphead;FILE*in,*out;charc,inname30,outname30;printf("#欢迎使用行编辑程序#n");HELP();/*打开输入、输出文件*/printf("Entertheinfilename:");scanf(
20、"%s",inname);printf("Entertheoutfilename:");scanf("%s",outname);if(in=fopen("in.txt","r")=NULL)printf("can'topenthefile!n");if(out=fopen(outname,"w")=NULL)printf("can'tiiopenthefile!n");exit(0);Createlist(head);Lo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 计算机二级MySQL考试的相关软件工具试题及答案
- 通过模拟考试提升Python技能的试题及答案
- 工业银行笔试题目及答案
- 高效提分计算机Photoshop试题及答案
- 法律自学考试试题及答案
- 法律专项二试题及答案
- 法律知识培训试题及答案
- 法律投行面试题及答案解析
- 法律事务面试试题及答案
- 法律面试题目及答案解析
- 医院后勤考试试题及答案
- 纺织设备电气控制技术考核试卷
- 县人民医院老住院楼装修改造项目可行性研究报告申请报告编写
- 肾内科健康科普护理
- 第1课 中华文明的起源与早期国家 课件 人教版必修上册中外历史纲要
- 互联网运营思维
- T∕CACM 1085-2018 中医治未病技术操作规范 调神益智针法预防血管性认知障碍
- 装修销售培训课件
- 案例研究-海洋水产养殖(海洋牧场及渔业综合体)项目投资方案可行性
- 暗挖开挖技术交底
- 2025年临床执业医师考试的院前急救知识试题及答案
评论
0/150
提交评论