数据结构课程设计文章编辑附录中有全部代码.docx
- 文档编号:11340332
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:27
- 大小:57.61KB
数据结构课程设计文章编辑附录中有全部代码.docx
《数据结构课程设计文章编辑附录中有全部代码.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计文章编辑附录中有全部代码.docx(27页珍藏版)》请在冰豆网上搜索。
数据结构课程设计文章编辑附录中有全部代码
课程设计任务书
专业名称:
计算机科学与技术(软件工程)
课程名称:
数据结构课程设计
设计题目:
文章编辑问题
起止时间:
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;/*如果发现输入AE,则退出输入*/
p=p->next=newLINE;
p->data=newchar[strlen(ch)+1];/*为结点分配空间*/
strcpy(p->data,ch);
if(ch[strlen(ch)-1]==5)/*除去最后一个控制符AE*/
{
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
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 &&p->data[i]<='z'||p->data[i]>='A' //计算字母个数 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 错误类型: 文件流输入输出符号使用错误,错误使用>>作为文件写入操作 符。 改正方法: 将>>改为<<。 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: 文本字符统计 “"CiVncuMEiitamidSettines\B5I\*[fi>Drbut\? Dl20233D1267-于祗号-京伞编苗… 士n21吉2H§…扯丄: 信裁-;数计 总 「新建文本臥浏览锥入文木仁文未宇讶统计肛損定字讶串前统F畀摘定字符串的删除务指定宇筍申旳替换入退出 'Mi 请愉入刁記序匕 图5.4文本字符统计界面 输入4: 指定字符串统计 图5.5指定字符串统计界面 输入5: 指定字符串删除 -口|x| adC: 2andSE±tinEsWSI\-3^-[Ei\DEbu£\2Dl20233DI26T-T畚号一~ST半SiSl- 清输h腆划俸眄壬'宇椅甲… 文本文件希出如下I 刪義唱文世文'嘯出如下; l^kdjfKL<: k321Lai23 i.新建文本 趴測览怖入文木 匸文本宇符銃计 ,担定宇讶甲旳纸计 队指定字持串的刪除 氣指定字符串旳替换 7-退出 “MHMHK 请荷入初気序旨 输入6: 指定字符串替换 图5.6指定字符串删除界面 "CiM^nciiMEiitazmdSettinEs\VSI\^[lQ>Dtbuz\? Dl20233D126T~于砥号-京羊愛毎..・ ltlcUfkUdJfdkIfJdak32113123 淸輸人矍替義质旳宇舌串: ■ 文本文件祈出如下;lakdljfklsdJfdklfjdskaZliaiSJ替换為文本文吐麹出如下,lsTdjf*]<: 匚新建文本 札損定字符 「指定字符 「拒定宇符 F; H; 7.退 H4CMHMHM耳XHHHI4K4MMMMHNMMMM-KMKtfMMMMVK*IKKMKHtKMMHKHMMKM 背輪入功能序号I■ 输入7: 退出 图5.7指定字符串替换界面 图5.8退出界面 6总结 感谢老师的指导和讲解。 通过老师的讲解,让我对这门课程有了深刻的认识和了解,也让我对这门课程有了重新的认识。 通过近两周的课程设计中,我学到了数据结构程序设计中对类的设计方法,及对磁盘文件的操作,从中理解了数据结构中的设计思想。 经过这次集中上机实习,我充分意识到了数据结构的用途是非常广的,功能也非常强大,是学计算机不可缺少的知识;更重要的是,在这次编程中熟悉了编写一个比较复杂程序的流程,以及发现问题、解决问题的能力,为了下一次学习一门新的计算机语言做了充分准备。 在之前感觉还是遥不可及的功能,现在可以实现了,这自然要感谢老师和同学们的热心帮助,这是我得以及时完成这个程序的重要因素。 最后还是要感谢老师对我们孜孜不倦的教导。 成绩: 预习报告分,系统分,课设报告分,总分分,总评: 评语: 批阅教师签字: 附录: 全部代码 #inelude #include #include #inelude typedefstructline { char*data;structline*next; voidCreate(LINE*&head) { printf("请输入一页文章,以 LINE*p=newLINE; head=p; charch[100]; while (1) { gets(ch); if(strlen(ch)>80) { Ctrl+E为结尾(每行最多输入80字符! ): \n"); /*首先为链表建立一个附加表头结点*/ /*将p付给 表头指针*/ /*输入字符串! */ printf(”每行最多输入break; 80字符”); } if(ch[0]==5)break; p=p->next=newLINE; p->data=newchar[strlen(ch)+1]; /*如果发现输入AE,则退出输入*/ /*为结点分配空间*/ strcpy(p->data,ch);if(ch[strlen(ch)-1]==5) /*除去最后一个控制符ae*/ }LINE; { 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 }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*&he
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 文章 编辑 附录 全部 代码