数据结构课程设计小型文本编辑器的设计说明.docx

上传人:b****5 文档编号:11653740 上传时间:2023-03-29 格式:DOCX 页数:22 大小:309.12KB
下载 相关 举报
数据结构课程设计小型文本编辑器的设计说明.docx_第1页
第1页 / 共22页
数据结构课程设计小型文本编辑器的设计说明.docx_第2页
第2页 / 共22页
数据结构课程设计小型文本编辑器的设计说明.docx_第3页
第3页 / 共22页
数据结构课程设计小型文本编辑器的设计说明.docx_第4页
第4页 / 共22页
数据结构课程设计小型文本编辑器的设计说明.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

数据结构课程设计小型文本编辑器的设计说明.docx

《数据结构课程设计小型文本编辑器的设计说明.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计小型文本编辑器的设计说明.docx(22页珍藏版)》请在冰豆网上搜索。

数据结构课程设计小型文本编辑器的设计说明.docx

数据结构课程设计小型文本编辑器的设计说明

沈阳航空航天大学

 

课程设计报告

 

课程设计名称:

数据结构课程设计

课程设计题目:

小型文本编辑器的设计

 

院(系):

计算机学院

专业:

班级:

学号:

姓名:

指导教师:

 

1程序模块说明

1.1程序模块

为了更方便地完成字符串的查找,此程序采用串的块链式存储结构存储方式。

通过主模块调用四个小模块完成文本编辑的各种功能。

用户可在主模块上循环对程序进行操作。

 

1.2模块功能说明

1.主模块:

用户可编辑任一文档,输入要在文本中查找的信息。

初始化一个字符串,并用串的块链式存储结构存储。

2.编辑文本信息:

将用户编辑的文本信息分行输出来,并输出字符串的长度和行数。

3.查找模块:

遍历整个文本,查找字符串在串中的位置,并输出其所在位置,直到遍历完整个文本结束。

4.替换模块:

先查找你要替换的字符所在位置,然后根据用户选择是否替换该字符。

5.退出模块:

退出程序,等待用户下次重行运行该程序。

2程序流程图说明

2.1主函数流程图

图2.1.主程序流程图

用户可根据此函数输入想要进行的操作来实现其相应的编辑文本信息、查找字符在文本中的所在位置、替换文本中的字符串及查看当前文本的字符数以及行数的信息等一系列功能。

详见图2.1.

 

2.2显示模块流程图

图2.2显示模块流程图

此模块主要实现用户所编辑的文本信息的行数和字符总个数,以及输出文本的字符信息。

显示出用户所编辑的文本信息,并输出到屏幕上,为满足用户需求,此模块可循环操作。

详见流程图2.2。

2.3查找模块流程图

图2.3查找流程图

此模块主要是完成字符串的查找以及替换文本中的字符信息等功能。

查找字符串主要是通过将所查找的字符串和主串开始从第一个字符开始比较,如果相同,比较下一个字符,否则将指向当前字符串中的字符指针向前移动已比较字符个数个单位,并且在想后移一个字符,然后再从头开始和和所查找字符穿一一比较。

查找成功则返回字符所在位置并输出,接着继续进行下一轮查找,一直循环到将文本中信息读完为止,详见流程图2.3。

2.4替换模块流程图.

图2.4.替换流程图

此模块主要是完成字符串的查找以及替换文本中的字符信息等功能。

查找字符串主要是通过将所查找的字符串和主串开始从第一个字符开始比较,如果相同,比较下一个字符,否则将指向当前字符串中的字符指针向前移动已比较字符个数个单位,并且在想后移一个字符,然后再从头开始和和所查找字符穿一一比较。

查找成功则返回字符所在位置并输出,接着继续进行下一轮查找,一直循环到将文本中信息读完为止。

替换功能是在查找的基础上进行的,即也就是先查找到要替换的词的位置,然后根据用户选择在此位置是否替换,同样也是一直循环到读完整个文本信息为止。

详见流程图2。

4。

2.5将文本初始化

图2.5初始化文本信息

将文本信息初始化到用块链式存储的串中

3函数的描述

3.1串的初始化

初始化一个空串,然后将输入的文本信息存储到此串中,因为这是采用的块链式存储,用户可以自定义行的大小即一个节点存储的字符串个数,所申请的总的节点数也就是字符的行数。

3.2查找函数

查找字符串主要是通过将所查找的字符串和主串开始从第一个字符开始比较,如果相同,用for循环比较下一个字符,不同则将指向当前字符串中的字符指针向前移动已比较字符个数个单位,并且再向后移一个字符,然后再从头开始和和所查找字符穿一一比较。

查找成功则返回字符所在位置并输出,接着继续进行下一轮查找,一直循环到将文本中信息读完为止。

3.3替换函数

替换功能是在查找的基础上进行的,即也就是先查找到要替换的词的位置,然后根据用户选择在此位置是否替换,若需替换,则进入for循环完成替换,然后再通过比较查找到下一个需替换的位置,同样也是一直循环到读完整个文本信息为止。

3.4串的块链存储

采用串的块链式存储的优点是用户可根据自已的实际需要来定义每个节点的大小,这样可减少空间浪费,除此之外,链式存储还方便查找。

×

 

4程序测试和运行的结果

为方便查阅,所以选一串比较短的字符串为例,以英文字符“ABCDEFGHIJKLMN”为例,来实现下面的所有功能

4.1初始化一个串

4.1.1首先用户可输入用户所需要的文本信息,如“ABCDEFGHIJKLMN”

程序开始运行界面如图4.1.1所示。

截图4.1.1初始化一字符串

4.1.2.初始化“ABCDEFGHIJKLMN”后,结果如下图4.1.2所示,分行输出文本的字符信息以及文本长度和行数。

截图4.1.2初始化一字符串

4.2查找与替换字符串

4.2.1.编辑完文本后,用户可自定义查找和替换字符,选择查找和替换选项(即第二个选项),;如下图4.2.1所示。

根据说明输入指令2进行查找××××××

截图4.2.1查找字符串

4.2.2输入你要查找的字符串,以回车结束。

如图4.2.2所示。

根据提示,输入你要查找的字符,如“L”;

截图4.2.2查找字符串

4.2.3输入你需要替换后的的字符,如“S”;详见图4.2.3所示。

截图4.2.3查找字符串

4.2.4查找出所查找词在串中的第一个位置,输出该位置并弹出指令用户是否需要替换此位置的词。

如图4.2.4所示。

截图4.2.4替换字符串

4.2.5根据用户选择,如输入Y;则替换掉该位置的词并接着查找下一个所查找字符的所在位置或查找结束,如图4.2.5所示。

截图4.2.5替换字符串

4.2.6若用户不需要替换该位置的字符,输入“N”程序将跳过该位置替换直接进入下一轮查找。

如图4.2.6所示。

截图4.2.6不替换字符串

回到主程序,查找下一个字符,或继续进行下一轮操作。

 

参考文献

[1]高富平,张楚.电子商务法[M].北京:

北京大学出版社,2002

[2]谭浩强著.C程序设计(第三版).北京:

清华大学出版社,2005

[3]数据结构:

C语言版/严蔚敏,吴伟明编著.—北京:

清华大学出版社,2007

 

附录(关键部分程序清单)

查找和替换函数

voidchazhao(LString*T,char*chars,char*chars1)//所查找字符和替换后的字符

{

Chunk*p,*q;

intm=0,c=0,a=1,b=0,d=0,a1=0,c1=0,c2=0,x=0;

charu;

p=q=T->head;

while

(1)

{

if(c==CHUNKSIZE)

{

q=q->next;

a++;

c=0;

}

for(x=0;q->ch[c]==chars[m];x++)

{

m++;c++;

if(x==0)

{

b=a;d=c-1;}

if(c==CHUNKSIZE)

{

q=q->next;c=0;

}

if(chars[m]=='\0')//字符查完

{

printf("所查字符所在行位置是%d,第%d个位置开始\n",b,d+1);

printf("若需替换该字符,输入Y,否则输入N\n");

scanf("%c",&u);

fflush(stdin);

if(u!

='N')

{

p=T->head;

a=b;c=d;

for(a1=1;a1

p=p->next;

q=p;

for(;c1

{

if(c==CHUNKSIZE)

{

q=q->next;

c=0;

}

q->ch[c]=chars1[c2];

c2++;c++;

}

c2=0;c1=0;

StrPrint(*T);

}//替换完毕

c=d;a=b;

}

}

if(!

*(q->ch+c+1+m))//串查完/

{

printf("查找完成,已无匹配字符\n");

break;

}

else

{

p=T->head;

for(a1=1;a1

{

p=p->next;q=p;

}

c=c+1;m=0;

}

}

}

生成一个其值等于chars的串T,成功返回1,否则返回0

intStrAssign(LString*T,char*chars)

{

inti,j,k,l,m=0;

Chunk*p,*q;

i=strlen(chars);//i为串的长度

if(!

i)

return0;

(*T).curlen=i;

j=i/CHUNKSIZE;//j为块链的结点数,块的个数,即行数

if(i%CHUNKSIZE>0)//不足一个块的,当成一个块即块数加1

j++;

printf("长度是%d\n行数是%d\n",i,j);

for(k=0;k

{

p=(Chunk*)malloc(sizeof(Chunk));

if(!

p)

return0;

if(k==0)

(*T).head=q=p;

else

{

q->next=p;

q=p;

}

for(l=0;l

{

q->ch[l]=chars[m];m++;}

if(!

*chars)

{

(*T).tail=q;

q->next=NULL;

for(;l

*(q->ch+l)=blank;

}

}

return1;

}

输出字符串T

voidStrPrint(LStringT)

{

inti=0,j;

Chunk*h;

h=T.head;

while(i

{

for(j=0;j

if(*(h->ch+j)!

=blank)//不是填补空余的字符

{

printf("%c",*(h->ch+j));

i++;

}

printf("\n");

h=h->next;

}

printf("\n");

}

 

课程设计总结:

指导教师评语:

 

指导教师(签字):

      年月日

课程设计成绩

源代码

#include

#include

#include

#include

#include

#defineCHUNKSIZE4

#definen26

charblank='#';//全局变量,用于填补空余

typedefstructChunk

{

charch[CHUNKSIZE];

structChunk*next;

}Chunk;

typedefstruct

{

Chunk*head,*tail;

intcurlen;

}LString;

voidInitString(LString*T)//初始化(产生空串)字符串T。

{

(*T).curlen=0;

(*T).head=NULL;

(*T).tail=NULL;

}

intStrAssign(LString*T,char*chars)//生成一个其值等于chars的串T,成功返回1,否则返回0

{

inti,j,k,l;

Chunk*p,*q;

i=strlen(chars);//i为串的长度

if(!

i||strchr(chars,blank))//串长为0或chars中包含填补空余的字符

return0;

(*T).curlen=i;

j=i/CHUNKSIZE;//j为块链的结点数,块的个数

if(i%CHUNKSIZE)//不足一个块的,当成一个块即块数加1

j++;

printf("长度是%d\n行数是%d\n",i,j);

for(k=0;k

{

p=(Chunk*)malloc(sizeof(Chunk));

if(!

p)

return0;

if(k==0)//第一个链块

(*T).head=q=p;

else

{

q->next=p;

q=p;

}

for(l=0;l

*(q->ch+l)=*chars++;

if(!

*chars)//最后一个链块

{

(*T).tail=q;

q->next=NULL;

for(;l

*(q->ch+l)=blank;

}

}

return1;

}

intStrEmpty(LStringS)

{

if(S.curlen)

return0;

else

return1;

}

voidStrPrint(LStringT)//输出字符串T

{

inti=0,j;

Chunk*h;

h=T.head;

while(i

{

for(j=0;j

if(*(h->ch+j)!

=blank)//不是填补空余的字符

{

printf("%c",*(h->ch+j));

i++;

}

printf("\n");

h=h->next;

}

printf("\n");

}

voidchazhao(LString*T,char*chars,char*chars1)///查找和替换函数///

{

Chunk*p,*q;

intm=0,c=0,a=1,b=0,d=0,a1=0,c1=0,c2=0,x=0;

charu;

p=q=T->head;

while

(1)

{

if(c==CHUNKSIZE)

{

q=q->next;

a++;

c=0;

}

for(x=0;q->ch[c]==chars[m];x++)

{

m++;c++;

if(x==0)

{

b=a;d=c-1;}

if(c==CHUNKSIZE)

{q=q->next;c=0;}

if(chars[m]=='\0')//字符查完

{

printf("所查字符所在行位置是%d,第%d个位置开始\n",b,d+1);

printf("若需替换该字符,输入Y,否则输入N\n");

scanf("%c",&u);

fflush(stdin);

if(u!

='N')

{

p=T->head;

a=b;c=d;

for(a1=1;a1

p=p->next;

q=p;

for(;c1

{

if(c==CHUNKSIZE)

{

q=q->next;

c=0;

}

q->ch[c]=chars1[c2];

c2++;c++;

}

c2=0;c1=0;

StrPrint(*T);

}//替换完毕

c=d;a=b;

}

}

if(!

*(q->ch+c+1+m))//串查完/

{

printf("查找完成,已无匹配字符\n");

break;

}

else

{

p=T->head;

for(a1=1;a1

{p=p->next;q=p;}

c=c+1;m=0;

}

}

}

voidmain()

{

chars1[n],s2[n],s3[n];//char*s3="22",*s2="aa";

LStringt1;

intk,meum=0,L,h;

printf("\t=========说明:

首先连续输入几个字符初始化串,以回车结束.======\n");

printf("\t=====================1:

查看串的信息=====================\n\n");

printf("\t=====================2:

查找与替换=====================\n\n");

printf("\t=====================3:

退出=====================\n\n");

printf("请输入文本信息!

\n");

scanf("%s",&s1);fflush(stdin);

L=strlen(s1);

h=L/CHUNKSIZE;h++;

InitString(&t1);printf("初始化串t1后,\n");

k=StrAssign(&t1,s1);

StrEmpty(t1);

if(k==1)

{

printf("串t1为:

\n");

StrPrint(t1);

}

else

printf("出错\n");//不能生成空串

while

(1)

{

printf("\t请输入命令!

(参照说明)\n");

scanf("%d",&meum);fflush(stdin);

switch(meum)

{

case1:

{

printf("初始化串t1后,\n");

StrEmpty(t1);

k=StrAssign(&t1,s1);

if(k==1)

{

printf("串t1为:

\n");

StrPrint(t1);

}

else

printf("出错\n");//不能生成空串

}break;

case2:

{

printf("请输入查找的字符!

\n");

scanf("%s",&s2);

fflush(stdin);

printf("请输入替换后的字符!

\n");

scanf("%s",&s3);

fflush(stdin);

chazhao(&t1,s2,s3);

}break;

case3:

{exit(0);}break;

default:

printf("输入错误!

!

请重新输入!

\n");

break;

}

}

}

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

当前位置:首页 > 职业教育 > 职业技术培训

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

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