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