数据结构课程设计简易文本编辑器Word格式文档下载.docx

上传人:b****5 文档编号:19353625 上传时间:2023-01-05 格式:DOCX 页数:18 大小:25.95KB
下载 相关 举报
数据结构课程设计简易文本编辑器Word格式文档下载.docx_第1页
第1页 / 共18页
数据结构课程设计简易文本编辑器Word格式文档下载.docx_第2页
第2页 / 共18页
数据结构课程设计简易文本编辑器Word格式文档下载.docx_第3页
第3页 / 共18页
数据结构课程设计简易文本编辑器Word格式文档下载.docx_第4页
第4页 / 共18页
数据结构课程设计简易文本编辑器Word格式文档下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数据结构课程设计简易文本编辑器Word格式文档下载.docx

《数据结构课程设计简易文本编辑器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计简易文本编辑器Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。

数据结构课程设计简易文本编辑器Word格式文档下载.docx

(3)插入新的信息到文本中;

(4)删除不再需要的文本信息;

(5)查看所有的文本信息。

二、概要设计

为了完成需求分析的基本任务,主要从以下3个方面进行设计:

2.1主界面设计

为了实现简易文本编辑器的各项功能,设计了一个含有多个菜单项的主控菜单模块以操作系统的各项功能,以方便用户使用系统。

系统进入菜单运行界面如图所示:

简易文本编辑器主菜单

2.2数据结构设计

系统采用线性表的顺序存储结构表示和存储“简易文本编辑器”中的信息。

实现文本的输入,删除,插入,查找,显示功能。

2.3系统功能设计

运行程序,提示进入菜单,按“回车键”进入主菜单,再可以在主菜单上进行各项操作。

每次进入菜单,选择“1键”新建文本,然后才可以进行其他操作,或者按“0键”选择退出。

三、模块设计

3.1模块设计

系统主要包含主程序模块和其它操作模块。

其调用关系如图所示。

模块调用示意图

3.2系统子模块及其功能设计

本系统共设计了16个子模块,各程序的函数名及功能说明如下:

1、/*由模式串nextval值*/

voidGetNextval(SqVStringT,intnextval[])

2、/*模式匹配KMP算法*/

intKMPIndex(SqVStringS,intpos,intnext[],SqVStringT)

3、/*初始化串*/

voidInitString(SqVString*S,char*str)

4、/*串插入*/

intStrInsert(SqVString*S,intpos,SqVStringT)

5、/*串删除*/

intStrDelete(SqVString*S,intpos,intlen)

6、/*求子串*/

intSubStr(SqVStringS,intpos,intlen,SqVString*T)

7、/*串连接*/

intConcat(SqVString*S,SqVStringT)

8、/*串赋值*/

intStrAssign(SqVString*S,char*value)

9、voidInputString()//新建

10、voidDeleteString()//删除

11、voidDeleteSubstring()//删除

12、voidInsertSubstring()//查找

13、voidDisplayString()//显示

14、voidcd()//进入界面

15、voidts()//主菜单

16、voidtc()//退出

3.3系统模块之间的调用关系

系统的16个子模块之间的主要调用关系所示:

系统函数调用关系图

四、详细设计

4.1数据结构设计

系统采用线性表的顺序存储结构存储通讯录信息。

4.2系统主要模块设计

(1)建立文本模块,由voidInitString(SqVString*S,char*str)函数实现。

该模块的算法思想是:

按照给定的线性表存储空间的初始化分配量分配存储空间,若分配成功,则往下进行;

令线性表长为0;

令线性表当前存储容量为给定的线性表存储空间的初始化分

配量。

该模块的算法描述如下:

见源程序

(2)查看文本中得所有记录,需要一个模式匹配intKMPIndex(SqVStringS,intpos,intnext[],SqVStringT)函数实现。

在此略

(其它模块设计略)

五、调试分析

5.1、调试方法:

首先打开MicrosoftVisualC++6.0,运行程序,出现错误修改再运行,直至运行结果0error,0warning结束。

接着进入程序界面,看程序能否实现所要求的各项功能,再作下一步的修改。

5.2、调试结果

主菜单

新建

显示

删除

查找

插入

退出

5.3、程序出现的问题:

还有几个程序模块未能成功调用。

(其他问题见“第八项中未能解决的问题”)

六、用户使用说明

当用户打开程序,就会提示按【回车键】进入,按【回车键】则进入主菜单页面,进入主菜单,选择【1键】,新建文本信息,编辑好后,按照程序中的文字提示,返回到主菜单,此时在主菜单选择其他操作,当进入各项操作,均有提示。

每一操作完成,按【回车键】返回主菜单,选择【0键】,安全退出程序!

7、参考文献

《数据结构理论与实践》——杨永斌

8、对所设计的软件进行自我评价,如创新点、未解决的问题等情况说明。

拿到该课程题目,准备仿照电脑上的文本编辑器写该程序,由于我所学不是扎实,于是就借助课本上所学的串与数组,写好了这个程序,程序能够正确的完成,程序充分包含了本学期的所学内容,体现了数据结构的特点。

继续沿用了清屏函数,是屏幕看起来很舒服,不至于那么杂乱。

未解决的问题:

在完成插入,查找功能的时候,出现了问题,当程序执行到此处时,程序未能进入下一步,而是直接退出了。

当进入主菜单后,只能选择【1键】或者退出,这是未能得到优化的。

块移动(行块,列块移动),正确存盘、取盘;

正确显示总行数等功能未能完成。

九、程序源代码:

#include<

iostream.h>

stdio.h>

stdlib.h>

malloc.h>

string.h>

#defineSTRSIZE100

#defineMAXSTRING60

#defineMAXLINE24

/*存储结构*/

typedefstruct

{

char*ch;

intlength;

}SqVString;

/*由模式串nextval值*/

intj=0,k=-1;

nextval[0]=-1;

while(j<

T.length)

{

if(k==-1||T.ch[j]==T.ch[k])

{

j++;

k++;

if(T.ch[j]==T.ch[k])

nextval[j]=nextval[k];

else

nextval[j]=k;

}

else

k=nextval[k];

}

}

/*模式匹配KMP算法*/

inti=pos,j=0,r;

while(i<

S.length&

&

j<

if(i<

S.ch[i]==T.ch[j])

++i;

++j;

elseif(j==0)

j=next[j];

if(j>

=T.length)

r=i-T.length;

else

r=-1;

returnr;

/*初始化串*/

inti;

char*c;

intlen=0;

c=str;

while(*c!

='

\n'

len++;

c++;

}/*求str的长度*/

S->

ch=(char*)malloc(len*sizeof(char));

/*申请动态数组空间*/

length=len;

/*置串的当前长度*/

for(i=0;

i<

S->

length;

i++)

S->

ch[i]=str[i];

/*赋值串值*/

/*串插入*/

intlen;

if(pos<

0||pos>

length)

cout<

<

"

\t\t插入位置不合法,其取值范围应该是[0,length]"

;

return0;

len=S->

length+T.length;

ch=(char*)realloc(S->

ch,len*sizeof(char));

if(!

ch)

\t\t分配空间出错,无法完成串插入操作"

for(i=S->

length-1;

i>

=pos;

i--)

ch[i=T.length]=S->

ch[i];

T.length;

ch[i+pos]=T.ch[i];

return1;

/*串删除*/

char*str;

0||len<

=0||pos>

length||S->

length<

=0)

\t\t删除位置pos及删除长度len不合法,无法完成删除操作"

length=S->

length-len;

if(length<

length=pos;

/*若pos+len大于串长,则从pos删到串尾*/

str=(char*)malloc(length*sizeof(char));

str)

\t\t分配空间出错,无法完成串的删除操作"

pos;

str[i]=S->

for(i=pos+len;

str[i-len]=S->

free(S->

ch);

length=length;

ch=str;

/*求子串*/

if(S.length<

\t\t空串,无法完成求子串操作"

S.length||len<

\t\t子串位置pos及子串长度len不合法,无法完成求子串操作"

if(pos+len>

S.length)

len=S.length-pos+1;

/*当子串长度超过主串长度,则只取到串尾即可*/

if(T->

free(T->

/*释放S的原有空间*/

T->

T->

\t\t分配空间出错,无法完成求子串操作"

len;

T->

ch[i]=S.ch[i+pos];

/*串连接*/

\t\t分配空间出错,无法完成串连接操作"

ch[i+S->

length]=T.ch[i];

/*串赋值*/

intcount=0;

//S=(SqVString*)malloc(sizeof(SqVString));

if(S->

length!

free(S->

c=value;

count++;

}/*求value的长度*/

count)/*value为空串*/

ch=NULL;

length=0;

ch=(char*)malloc(count);

if(!

{

cout<

\t\t分配空间出错,无法完成串赋值操作"

return0;

for(i=0;

count;

S->

ch[i]=value[i];

length=count;

SqVString*lines[MAXLINE];

voidInputString()

charbuffer[MAXSTRING];

SqVString*tmp;

intLineNum=0;

flushall();

cout<

\t\t================================================"

endl;

\t\t新建文本"

\t\t[请输入文本,每以回车结束,一段以#结束行]"

do

cin>

>

buffer;

tmp=(SqVString*)malloc(sizeof(SqVString));

InitString(tmp,buffer);

lines[LineNum]=tmp;

LineNum++;

}while(buffer[0]!

#'

);

//cout<

\t\tOK..."

voidDeleteString()

\t\t删除文本"

\t\t请输入要删除行的行号:

cin>

i;

free(lines[i-1]);

while(lines[i]->

ch[0]!

lines[i-1]=lines[i];

i++;

lines[i-1]=lines[i];

voidInsertSubstring()

inti=0;

intpos=0;

SqVStringtmp;

\t\t插入子串"

\t\t请输入子串所在的行号:

\t\t请输入插入位置:

\t\t请输入子串值:

InitString(&

tmp,buffer);

StrInsert(lines[i],pos,tmp);

voidDeleteSubstring()

\t\t删除子串"

\n\t\t请输入删除的起始位置:

\t\t请输入删除的字符数:

StrDelete(lines[i],pos,len);

\t\tOK..."

voidFindSubstring()

intnext[MAXSTRING];

\t\t查找文本"

\t\t请输入要查找的子串:

GetNextval(tmp,next);

if((pos=KMPIndex(*lines[i],0,next,tmp))!

=-1)

\t\t[子串"

buffer<

在第"

i+1<

行的"

pos<

位置上出现]"

return;

voidDisplayString()

\t\t显示文本"

lines[i]->

ch<

voidcd()//进入界面

endl<

\t\t"

____________________________________________"

--------------------------------------------"

♀欢·

迎·

使·

用♀"

♂————————————————————♂"

→简易文本编辑器←"

·

↓重庆工商大学派斯学院↓"

↑计算机科学系↑"

♀制作人:

10计本2班邓寅森♀"

∶2011年11月∶"

→→→点击【回车】进入←←←"

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

voidts()

\t\t--------------------------------"

\t\t主菜单"

\t\t1、输入文本"

endl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1