简单行编辑系统数据结构课程设计Word格式.docx
- 文档编号:14226266
- 上传时间:2022-10-20
- 格式:DOCX
- 页数:27
- 大小:83.95KB
简单行编辑系统数据结构课程设计Word格式.docx
《简单行编辑系统数据结构课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《简单行编辑系统数据结构课程设计Word格式.docx(27页珍藏版)》请在冰豆网上搜索。
1.1设计目的
被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的作法既不经济,也不总能实现。
所以设计这一种以行为单位进行的编辑程序。
主要是逐段地编辑。
任何时刻只把待编辑文件的一段放在内存,称为活区。
需要用到的数据结构是链表。
1.2设计目标及要求设计要求
(1)行插入:
格式:
i<
回车>
<
行号>
文本>
功能:
在指定行之后插入一行或几行。
(2)行删除:
d<
行号1>
[<
空格>
行号2>
]<
(3)行替换:
(4)活区切换:
n<
将活区写入文件,并从文件中读入下一段,作为新的活区。
(5)活区显示:
p<
逐页地(每页20行)显示活区内容,每显示一页之后请用户决定是否继续显示以后备页(如果存在)。
印出的每一行要前置行号和一个空格符,行号固定占4位,增量为1。
(6)模式匹配:
k<
匹配文本>
1.3设计进度
1》2012.8.20——2012.8.21需求分析
2》2012.8.21下午交需求分析,主要分析课题的内容,需要用的数据结构,小组分工情况
3》2012.8.22——2012.8.29编写源代码
4》2012.8.30完成设计并书写课程设计说明书
5》2012.8.31等待老师验收
1.4分工
薛建明:
进行插入功能的编写。
丛前:
进行删除功能的编写。
甘炀:
进行活区的切换功能的编写。
杨志文:
进行活区显示,KMP算法,界面的编写。
2.需求分析及总体设计
2.1数据结构
用到数据结构的双向链表:
typedefstructtext
{
charstring[80];
structtext*next;
structtext*pre;
intflat;
}text;
2.2功能框架
在指定行之后插入一行或几行。
将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。
逐页地(每页20行)显示活区内容,每显示一页之后请用户决定是否继续显示以后备页(如果存在)。
在当前活区中查找所要匹配的文本。
3.功能模块详细设计
3.1设计流程
行插入功能:
找到要插入的结点对应的指针,然后开辟新的空间,把开辟出的新的空间,与刚才的结点连接,同时再把新节点的指针域只向出入的下一个节点。
主要思想:
p=(text*)malloc(sizeof(text));
//p为新插入节点
p->
next=p1->
next;
//p1为要出入结点的
pre=p1;
p1->
next->
pre=p;
next=p;
3.2主要源代码
voidinsert()
{
inti,j,hang,increhang=1,incre;
chars;
text*p,*p1,*p2;
printf("
(Note:
thei-throwinserttextinthei-throw!
!
Insertedtextin#Pleaseenterthelinenumberfortheendoftheflag):
\n"
);
scanf("
%d"
&
hang);
p=p1=NULL;
if(hang==0)
flat=1;
next=head;
head->
head=p;
}
if(hang!
=0)
for(i=0,p1=head;
hang-1;
i++,p1=p1->
next);
//找到要插入行的前一行
//为插入行分配空间
}//从此行将插入行插入到链表中
string[0]=getchar();
i=0;
incre=1;
while(p->
string[i]!
='
#'
)
if(incre==80)
s=getchar();
if(s=='
i++;
string[i]=s;
break;
p1=p;
//从此行将插入行插入到链表中
incre++;
string[i]=getchar();
string[i]='
\n'
;
string[i+1]='
\0'
puts("
Modifiedtext:
for(p2=head,j=1;
(j<
=20)&
&
(p2!
=NULL);
j++,p2=p2->
next)//显示出修改后的链表
if(p2->
flat==1)
printf("
line%2d:
%s"
j,p2->
string);
if(feof(fp))
Filehasended!
"
}
4.功能模块详细设计
4.1设计流程
行删除:
找到要删除的第一行和要删除的最后一行,分别把他们的指针域记录下来,把要删除的最后一行之后的文本往前移使的一页达到20行。
4.2主要源代码
voiddel()
text*p1,*p2,*p3,*p4;
inti,j;
xiugai=1;
thefirstlineandthelastlineyouwanttodelete\n"
%d%d"
min,&
max);
if(head==NULL)
\nlistnull!
\n"
p1=p2=head;
if(min==1)
p1=head;
else
for(i=0;
min-1;
i++)/*找到要删除的第一行*/
p1=p1->
p3=p1;
max;
i++)/*找到要删除的最后一行*/
p2=p2->
p4=p2;
for(;
p4!
=NULL;
p3=p3->
next)/*删除中间节点,将flat赋值0*/
strcpy(p3->
string,p4->
p3->
flat=p4->
flat;
p4=p4->
p3!
next)
fgets(p3->
string,sizeof(p3->
string),fp);
Modifiedtext:
for(i=0,j=0,p3=head;
20;
i++,p3=p3->
if(p3->
line%2d:
j+1,p3->
j++;
5.功能模块详细设计
5.1设计流程
活区切换:
5.2主要源代码
voidsaveshow()
inti=0,j=0;
charconti='
y'
text*p=NULL,*p1,*p2,*p3;
for(i=0,p=head;
(p!
=NULL)&
(i<
20);
i++,p=p->
if(p->
fputs(p->
string,out);
p3=p1=head;
if(p==NULL)
i++)
if(p!
=NULL)
{for(i=0;
strcpy(p1->
string,p->
j=j+1;
flat=0;
}
if(j<
20)
p2=p1;
20)&
(!
feof(fp));
next)//从文件读入活区
fgets(p2->
string,sizeof(p2->
if(j<
20&
(feof(fp)))
{p2=p2->
pre;
for(;
p2!
p2=p2->
next)
p2->
6.功能模块详细设计
6.1设计流程
模式匹配KMP算法,编辑函数,用来接受处理编辑命令,活区显示,行替换,活区显示,保存
6.2主要源代码
//活区显示
voidappear()
voidEXIT();
Y'
text*p2;
if(!
feof(fp))
page++;
*******************************page%d*****************************************\n"
page);
for(i=0,p2=head;
i++,p2=p2->
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 编辑 系统 数据结构 课程设计