数据结构课程设计文章编辑附录中有全部代码.docx

上传人:b****3 文档编号:4671983 上传时间:2022-12-07 格式:DOCX 页数:25 大小:174.18KB
下载 相关 举报
数据结构课程设计文章编辑附录中有全部代码.docx_第1页
第1页 / 共25页
数据结构课程设计文章编辑附录中有全部代码.docx_第2页
第2页 / 共25页
数据结构课程设计文章编辑附录中有全部代码.docx_第3页
第3页 / 共25页
数据结构课程设计文章编辑附录中有全部代码.docx_第4页
第4页 / 共25页
数据结构课程设计文章编辑附录中有全部代码.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

数据结构课程设计文章编辑附录中有全部代码.docx

《数据结构课程设计文章编辑附录中有全部代码.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计文章编辑附录中有全部代码.docx(25页珍藏版)》请在冰豆网上搜索。

数据结构课程设计文章编辑附录中有全部代码.docx

数据结构课程设计文章编辑附录中有全部代码

课程设计任务书

专业名称:

计算机科学与技术(软件工程)

课程名称:

数据结构课程设计

设计题目:

文章编辑问题

起止时间:

2013年6月24日至2013年7月12日

问题描述

静态存储一页文章,每行最多不超过80个字符,共N行,程序可以统计出文字、数字、空格的个数,并且可以对文章中特定内容进行查找及替换,同时也可以删除指定内容。

基本要求

(1)分别统计出其中英文字母数和空格数及整篇文章总字数;

(2)统计某一字符串在文章中出现的次数,并输出该次数;

(3)查找出文章中某一段文字,并用其他文字进行替换;

(4)删除某一子串,并将后面的字符前移。

输出形式:

(1)分行输出用户输入的各行字符;

(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数";

(3)查找出指定字符串在文章中出现的所有地方并替换,输出替换后结果;

(4)输出删除某一字符串后的文章;

实现提示

存储结构使用线性表,分别用几个子函数实现相应的功能,并且使用菜单的形式,可以选择所要进行的操作(查找、替换、删除、统计等)。

文章编辑系统

1概要设计

本次课程设计的题目是文章编辑系统,本系统的功能描述如下:

用户新建文本、浏览新建文本、文本字符统计、指定字符串统计、指定字符串删除、指定字符串替换等操作。

1.新建文本

2.浏览输入文本

3.文本字符统计

4.指定字符串统计

5.指定字符串删除

6.指定字符串替换

7.退出系统

本系统包含七个功能模块,分别为:

新建文本模块,浏览输入文本模块,指定字符串统计模块,指定字符串删除模块,指定字符串删除模块,指定字符串替换模块以退出系统模块。

新建文本模块实现用户录入文本信息,并且系统自动保存录入信息。

浏览输入文本模块实现了显示用户录入信息的功能。

指定字符串统模块实现了对英文字母数和空格数及整篇文章总字数的统计。

指定字符串统计实现了统计用户自定义字符串个数的功能。

指定字符串删除模块实现了对用户自定义字符串的删除。

指定字符串替换模块实现了替换用户自定义字符串为用户定义的新字符功能。

退出系统模块实现了退出系统功能。

图1.1系统功能模块图

2详细设计

这部分详细介绍了系统中主要部分的功能实现,以及代码功能说明。

voidCreate(LINE*&head)

{

printf("请输入一页文章,以Ctrl+E为结尾(每行最多输入80字符!

):

\n");//以Ctrl+E结束文本录入,避免发生混淆

LINE*p=newLINE;/*首先为链表建立一个附加表头结点*/

head=p;/*将p付给表头指针*/

charch[100];

while

(1)

{

gets(ch);/*输入字符串!

*/

if(strlen(ch)>80)

{

printf("每行最多输入80字符");

break;

}

if(ch[0]==5)break;/*如果发现输入^E,则退出输入*/

p=p->next=newLINE;

p->data=newchar[strlen(ch)+1];/*为结点分配空间*/

strcpy(p->data,ch);

if(ch[strlen(ch)-1]==5)/*除去最后一个控制符^E*/

{

p->data[strlen(ch)-1]='\0';

break;

}

}

p->next=NULL;/*最后的一个指针为空*/

head=head->next;

}

 

/**文本字数统计**/

intCount_Space(LINE*&head)//统计空格数

{

LINE*p=head;

intasc_space=32;

intcount=0;

inti;

intLen;

do{

Len=strlen(p->data);

for(i=0;i

if(p->data[i]==asc_space)

count++;

}while((p=p->next)!

=NULL);

returncount;

}

intCount_Num(LINE*&head)//统计数字个数

{

LINE*p=head;

intcount=0;

intLen;

inti;

do{

Len=strlen(p->data);

for(i=0;i

if(p->data[i]>=48&&p->data[i]<=57)

count++;

}while((p=p->next)!

=NULL);

returncount;

}

intCount_All_Word(LINE*&head)//统计文章的总字数

{

LINE*p=head;

intcount=0;

do{

count+=strlen(p->data);

}while((p=p->next)!

=NULL);

returncount;

}

intCount_Letter(LINE*&head)//统计字母数

{

LINE*p=head;

intcount=0;

intLen;

inti;

do{

Len=strlen(p->data);

for(i=0;i

if(p->data[i]>='a'&&p->data[i]<='z'||p->data[i]>='A'&&p->data[i]<='Z')count++;//计算字母个数

}

while((p=p->next)!

=NULL);

returncount;

}

intFind_Word(LINE*&head,char*sch)//统计sch在文章中出现的次数

{

LINE*p=head;

intcount=0;

intlen1=0;

intlen2=strlen(sch);

inti,j,k;

do{

len1=strlen(p->data);//当前行的字符数

for(i=0;i

{

if(p->data[i]==sch[0])

{

k=0;

for(j=0;j<=len2-1;j++)

if(p->data[i+j]==sch[j])k=k+1;

if(k==len2){count++;i=i+k-1;}

}

}

}while((p=p->next)!

=NULL);

returncount;

}

/**特定字符串的删除**/

voiddel_string_word(char*s,char*sch)

{

char*p=strstr(s,sch);

chartmp[80];

intlen=strlen(s);

intk,kk;

inti=len-strlen(p);

intj=i+strlen(sch);

intcount=0;

for(k=0;k

tmp[count++]=s[k];

for(kk=j;kk

tmp[count++]=s[kk];

tmp[count]='\0';

strcpy(s,tmp);

}

voidDel_String(LINE*&head,char*sch)//删除指定的字符串

{

LINE*p=head;

do{

while(strstr(p->data,sch)!

=NULL)

del_string_word(p->data,sch);

}while((p=p->next)!

=NULL);

}

/**特定字符串的替换**/

voidreplace_string_word(char*s,char*sch,char*reh)

{

intStringLen;

charcaNewString[100];

char*FindPos=strstr(s,sch);

//if((!

FindPos)||(!

sch))

//return-1;

while(FindPos)

{

memset(caNewString,0,sizeof(caNewString));

StringLen=FindPos-s;

strncpy(caNewString,s,StringLen);

strcat(caNewString,reh);

strcat(caNewString,FindPos+strlen(sch));

strcpy(s,caNewString);

FindPos=strstr(s,sch);

}

/*return0;*/

}

 

voidReplace_String(LINE*&head,char*sch,char*reh)//替换指定的字符串

{

LINE*p=head;

do{

while(strstr(p->data,sch)!

=NULL)

replace_string_word(p->data,sch,reh);

}while((p=p->next)!

=NULL);

}

 

/**打印输入的文本**/

voidOutPutTxt(LINE*&head)//向屏幕输出文章

{

LINE*p=head;

printf("文本文件输出如下:

");

do{

printf("%s\n",p->data);

}while((p=p->next)!

=NULL);

}

voidCount(LINE*&head)

{

printf("文章统计信息结果:

\n");

printf("全部字母数:

%d\n",Count_Letter(head));

printf("数字个数:

%d\n",Count_Num(head));

printf("空格个数:

%d\n",Count_Space(head));

printf("文章总字数:

%d\n",(Count_All_Word(head)+Count_Num(head)+Count_Space(head)+Count_Letter(head))/2);

printf("\n");

}

voidmain()

{

LINE*head;

charsch[20];

charreh[20];

charID[10];

charch;

chartmp_sch[20];

chartmp_rch[20];

3调试报告

在本次程序设计中,在编译过程中,出现了几次问题

(1)错误提示:

errorC2660:

'search':

functiondoesnottake1parameters

错误类型:

Search函数参数错误

改正方法:

将case语句后加break语句进行返回。

(2)错误提示:

errorC2228:

leftof'.search'musthaveclass/struct/uniontype

错误类型:

指针符号使用错误

改正方法:

将s.Search(stu,s)更改为s->search(stu,s)

(3)错误提示:

errorC2676:

binary'>>':

'classstd:

:

basic_ofstream

:

char_traits>'doesnotdefinethisoperatororaconversiontoatypeacceptabletothepredefinedoperator

错误类型:

文件流输入输出符号使用错误,错误使用>>作为文件写入操作符。

改正方法:

将>>改为<<。

4测试结果

测试项目

测试数据

测试结果

登陆界面

1.新建文本

2.浏览输入文本

3.文本字符统计

4.指定字符串统计

5.指定字符串删除

6.指定字符串替换

7.退出

显示:

1.新建文本

2.浏览输入文本

3.文本字符统计

4.指定字符串统计

5.指定字符串删除

6.指定字符串替换

7.退出

新建功能

输入1:

新建文本

Abcdefg1234567

显示:

Abcdefg1234567

显示功能

输入2:

浏览输入文本

显示用户录入结果:

Abcdefg1234567

统计功能

输入3:

文本字符统计

文章统计信息结果:

全部字母数:

7

数字个数:

7

空格个数:

1

文章总字数:

15

指定字符串统计功能

输入4:

指定字符串删除

输入要统计字符串:

Ab

出现次数:

1

指定字符串删除功能

输入5:

指定字符串删除

输入要删除字符串:

Ab

删除后文本文件如下:

cdefg1234567

指定字符串替换功能

输入6:

指定字符串替换

要替换掉的字符串:

cdefg

要替换成的字符串:

替换后文本文件如下:

1234567

5使用说明

本系统开始时显示所有选择项。

选择项采用文字提示,数字选择进行选择操作。

图5.1显示运行界面

录入选项:

输入1:

新建文本

图5.2新建文本界面

输入2:

浏览输入文本

图5.3浏览输入文本界面

输入3:

文本字符统计

图5.4文本字符统计界面

输入4:

指定字符串统计

图5.5指定字符串统计界面

输入5:

指定字符串删除

图5.6指定字符串删除界面

输入6:

指定字符串替换

图5.7指定字符串替换界面

输入7:

退出

图5.8退出界面

 

6总结

感谢老师的指导和讲解。

通过老师的讲解,让我对这门课程有了深刻的认识和了解,也让我对这门课程有了重新的认识。

通过近两周的课程设计中,我学到了数据结构程序设计中对类的设计方法,及对磁盘文件的操作,从中理解了数据结构中的设计思想。

经过这次集中上机实习,我充分意识到了数据结构的用途是非常广的,功能也非常强大,是学计算机不可缺少的知识;更重要的是,在这次编程中熟悉了编写一个比较复杂程序的流程,以及发现问题、解决问题的能力,为了下一次学习一门新的计算机语言做了充分准备。

在之前感觉还是遥不可及的功能,现在可以实现了,这自然要感谢老师和同学们的热心帮助,这是我得以及时完成这个程序的重要因素。

最后还是要感谢老师对我们孜孜不倦的教导。

 

成绩:

预习报告分,系统分,课设报告分,总分分,总评:

评语:

 

批阅教师签字:

年月日

附录:

全部代码

#include

#include

#include

#include

typedefstructline

{

char*data;

structline*next;

}LINE;

voidCreate(LINE*&head)

{

printf("请输入一页文章,以Ctrl+E为结尾(每行最多输入80字符!

):

\n");

LINE*p=newLINE;/*首先为链表建立一个附加表头结点*/

head=p;/*将p付给表头指针*/

charch[100];

while

(1)

{

gets(ch);/*输入字符串!

*/

if(strlen(ch)>80)

{

printf("每行最多输入80字符");

break;

}

if(ch[0]==5)break;/*如果发现输入^E,则退出输入*/

p=p->next=newLINE;

p->data=newchar[strlen(ch)+1];/*为结点分配空间*/

strcpy(p->data,ch);

if(ch[strlen(ch)-1]==5)/*除去最后一个控制符^E*/

{

p->data[strlen(ch)-1]='\0';

break;

}

}

p->next=NULL;/*最后的一个指针为空*/

head=head->next;

}

 

/**文本字数统计**/

intCount_Space(LINE*&head)//统计空格数

{

LINE*p=head;

intasc_space=32;

intcount=0;

inti;

intLen;

do{

Len=strlen(p->data);

for(i=0;i

if(p->data[i]==asc_space)

count++;

}while((p=p->next)!

=NULL);

returncount;

}

intCount_Num(LINE*&head)//统计数字个数

{

LINE*p=head;

intcount=0;

intLen;

inti;

do{

Len=strlen(p->data);

for(i=0;i

if(p->data[i]>=48&&p->data[i]<=57)

count++;

}while((p=p->next)!

=NULL);

returncount;

}

intCount_All_Word(LINE*&head)//统计文章的总字数

{

LINE*p=head;

intcount=0;

do{

count+=strlen(p->data);

}while((p=p->next)!

=NULL);

returncount;

}

intCount_Letter(LINE*&head)//统计字母数

{

LINE*p=head;

intcount=0;

intLen;

inti;

do{

Len=strlen(p->data);

for(i=0;i

if(p->data[i]>='a'&&p->data[i]<='z'||p->data[i]>='A'&&p->data[i]<='Z')count++;//计算字母个数

}

while((p=p->next)!

=NULL);

returncount;

}

intFind_Word(LINE*&head,char*sch)//统计sch在文章中出现的次数

{

LINE*p=head;

intcount=0;

intlen1=0;

intlen2=strlen(sch);

inti,j,k;

do{

len1=strlen(p->data);//当前行的字符数

for(i=0;i

{

if(p->data[i]==sch[0])

{

k=0;

for(j=0;j<=len2-1;j++)

if(p->data[i+j]==sch[j])k=k+1;

if(k==len2){count++;i=i+k-1;}

}

}

}while((p=p->next)!

=NULL);

returncount;

}

/**特定字符串的删除**/

voiddel_string_word(char*s,char*sch)

{

char*p=strstr(s,sch);

chartmp[80];

intlen=strlen(s);

intk,kk;

inti=len-strlen(p);

intj=i+strlen(sch);

intcount=0;

for(k=0;k

tmp[count++]=s[k];

for(kk=j;kk

tmp[count++]=s[kk];

tmp[count]='\0';

strcpy(s,tmp);

}

voidDel_String(LINE*&head,char*sch)//删除指定的字符串

{

LINE*p=head;

do{

while(strstr(p->data,sch)!

=NULL)

del_string_word(p->data,sch);

}while((p=p->next)!

=NULL);

}

/**特定字符串的替换**/

voidreplace_string_word(char*s,char*sch,char*reh)

{

intStringLen;

charcaNewString[100];

char*FindPos=strstr(s,sch);

//if((!

FindPos)||(!

sch))

//return-1;

while(FindPos)

{

memset(caNewString,0,sizeof(caNewString));

StringLen=FindPos-s;

strncpy(caNewString,s,StringLen);

strcat(caNewString,reh);

strcat(caNewString,FindPos+strlen(sch));

strcpy(s,caNewString);

FindPos=strstr(s,sch);

}

/*return0;*/

}

 

voidReplace_String(LINE*&head,char*sch,char*reh)//替换指定的字符串

{

LINE*p=head;

do{

while(strstr(p->data,sch)!

=NULL)

replace_string_word(p->data,sch,reh);

}while((p=p->next)!

=NULL);

}

 

/**打印输入的文本**/

voidOutPutTxt(LINE*&head)//向屏幕输出文章

{

LINE*p=head;

printf("文本文件输出如下:

");

do{

printf("%s\n",p->data);

}while((p=p->next)!

=NULL);

}

voidCount(LIN

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

当前位置:首页 > 初中教育 > 语文

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

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