简单行编辑程序文档格式.docx
- 文档编号:16155690
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:19
- 大小:300.43KB
简单行编辑程序文档格式.docx
《简单行编辑程序文档格式.docx》由会员分享,可在线阅读,更多相关《简单行编辑程序文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
各条命令中的行号均须在活区中各行号范围之内,只有插入命令的行号能够等于活区第一行行号减一,表示插入当前的屏幕中第一行之前,否则命令参数非法。
二、概要设计
1、主页面设计
2、存储结构设计
typedefstructtext
{
charstring[SIZE];
//存储每一行的元素
structtext*next;
//指向后一个节点的指针
intlength;
}text,*textp;
3、系统功能设计
1)行插入
2)行删除
3)活区切换
4)活区显示
5)结束
4、程序调用关系
程序结构流程图:
三、详细设计
1、数据结构存储定义
typedefstructtext
charstring[SIZE];
struct text *next;
//指向后一个节点的指针
intlength;
}text,*textp;
2、行插入
intinsert(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<hang;
i++)
p1=p1-〉next;
p-〉next=p1->
next;
p1—>
next=p;
ﻩhead-〉length++;
ﻩ}
ﻩprintf("
在第%d行前插入完成\n"
hang);
returnOK;
}
3、 行删除
int del(textp &head)//删除d命令对应的函数,用来删max—min中的行,用结构体中的flat表示是否被删除
{
text *p,*q;
intmin,max,i;
scanf("
%d%d”,&
min,&
max);
if(head==NULL)
{
ﻩprintf("\nlist null!
\n”);
returnOK;
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;
}
4、活区切换
Status Load head,FILE*fp)/*从文件读内容到活区*/
textpp;
for(p=head;
p&&(!
feof(fp));
p=p-〉next)
ﻩ{
if(!
fgets(p->
string,80,fp))break;
p->flat=1;
return0;
StatusSavehead,FILE *out) /*存储活区的函数*/
{
ﻩtextpp;
for(p=head;
p;
p=p->next)
if(p-〉flat==1)
fputs(p->
string,out);
/*输出活区的内容到指定的文件*/
ﻩ p-〉flat=0;
returnOK;
}
5、活区显示
voiddisplay(textp head)//显示P命令对应的函数,用来显示活区的内容
int i;
intj=head—>length/20;
ﻩint k=0;
textpp=head->
next;
for(j=0;
j<=head->
length/20;
j++)
ﻩprintf(”**********************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("%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<stdio、h〉
#include<
stdlib、h>
#include<
io、h>
#include〈process、h〉
#defineTRUE1
#define FALSE0
#defineOK1
#defineERROR 0
#defineINFEASIBLE —1
#defineOVERFLOW—2
#defineActiveMaxLen 100
#defineSIZE 80
#define x 20
typedefstructtext
charstring[SIZE];
structtext*next;
intlength;
}text,*textp;
voidCreatelist(textp&
head)//建立一个80个节点的链表,是整个活区的大小
ﻩhead=(text *)malloc(sizeof(text));
ﻩint n=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++;
}
ﻩelse
ﻩ{
ﻩﻩp—>next=q—〉next;
ﻩﻩq-〉next=p;
ﻩq=p;
ﻩﻩhead->
length++;
ﻩ}
printf(”活区创建完成\n”);
int del(textp&head)//删除d命令对应的函数,用来删max-min中的行,用结构体中的flat表示是否被删除
ﻩtext *p,*q;
intmin,max,i;
scanf(”%d %d”,&min,&
if(head==NULL)
ﻩﻩprintf("
\nlist null!
\n");
returnOK;
p=head;
for(i=1;
min;
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);
returnOK;
voiddisplay(textphead)//显示P命令对应的函数,用来显示活区的内容
int i;
intj=head->length/20;
ﻩint k=0;
textpp=head-〉next;
for(j=0;
j〈=head->
length/20;
j++)
ﻩprintf("**********************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("%d"
&k);
if(k==0)
break;
ﻩif(j==head->
length/20—1)
ﻩﻩprintf("
没有后续页面了\n"
ﻩbreak;
voidfreemem(textp &head)//释放链表所占的内存
ﻩtext*p=head-〉next;
while(p)
ﻩhead—>
next=p->next;
free(p);
p=head->
next;
ﻩﻩhead-〉length--;
ﻩprintf("活区清除\n");
intinsert(textp&
head,FILE *out)
ﻩint hang,i;
textpp,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)
{
next=head—>next;
ﻩﻩhead->
next=p;
ﻩﻩhead—>length++;
else
for(i=2;
i〈hang;
i++)
ﻩ p1=p1—>next;
p->next=p1—〉next;
p1->next=p;
head—>
length++;
ﻩprintf(”在第%d行前插入完成\n",hang);
returnOK;
voidLoad&head,FILE *fp,inte) /*从文件读内容到活区*/
textpp=head—>next;
ﻩfor(int j=0;
j<
e;
j++)
ﻩfgets(head-〉string,81,fp);
ﻩfor(int i=0;
i〈head-〉length&
&(!
feof(fp));
fgets(p->
string,81,fp);
p=p->next;
voidSavehead,FILE *out,FILE *in,int &
e)/*存储活区的函数*/
{
textpp=head->next;
ﻩe=e+80;
for(inti=0;
head->
length;
fputs(p-〉string,out);
voidHELP()//帮助函数,显示一些命令的格式
printf("\n\t**********************************************************\n”);
printf(”\t***行插入格式:
i〈行号>〈回车>
<文本><
回车〉**\n"
printf(”\t *** 行删除格式:
d<
回车>
<
行号1〉[<
空格>
行号2>
]<
**\n");
printf("
\t *** 活区切换格式:
n<回车>
**\n"
printf(”\t ***活区显示格式:
p<
**\n"
printf("\t *** 退出格式:
e<
回车〉**\n"
printf(”\t**********************************************************\n"
voidmain()//主函数,用来接受命令
//编辑函数,用来接受处理编辑命令
ﻩint e=0;
textphead;
FILE*in,*out;
char c,inname[30],outname[30];
printf("
################################欢迎使用行编辑程序#############################\n");
HELP();
/*打开输入、输出文件*/
printf("Enterthe in:
”);
scanf("
%s"
inname);
printf(”Enter theout:
scanf("
%s",outname);
if((in=fopen("
in、txt"
"r"
))==NULL)
ﻩprintf(”can't open thefile!
\n"
if((out=fopen(outname,”w"
))==NULL)
{
ﻩprintf("can’tiiopenthefile!
\n");
exit(0);
}
Createlist(head);
Load);
do
ﻩﻩprintf(”inputorder:
"
fflush(stdin);
c=getchar();
switch(c)
ﻩ{
case'
p'
:
display(head);
break;
case’n’:
Save);
Load);
ﻩﻩprintf("
活区切换、、、\n完成\n");
break;
case '
d'
del(head);
break;
case’i':
/*插入行*/
insert(head,in);
ﻩﻩ break;
ﻩﻩcase'e’:
printf(”结束!
break;
default:
printf("
\n\n\n!
!
inputerror!
!
");
break;
/*命令格式非法提示*/
ﻩ}while(c!
=’e'
freemem(head);
六、用户手册
(1)进入程序的界面,出现命令的帮助信息,按任意键开始程序编辑、
(2)输入INPUT文件与OUTPUT文件的名字打开相应的文件。
(3)输入P命令显示活区的内容。
(4)其它的命令操作如下:
行插入格式:
i〈行号〉<回车>
<文本〉〈回车>
行删除格式:
d〈回车><
行号1>[<空格>
〈行号2>
]<
活区切换格式:
n〈回车>
(5)最后输入e命令退出程序。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 编辑 程序