简单的行编辑器.docx
- 文档编号:11082640
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:25
- 大小:431.94KB
简单的行编辑器.docx
《简单的行编辑器.docx》由会员分享,可在线阅读,更多相关《简单的行编辑器.docx(25页珍藏版)》请在冰豆网上搜索。
简单的行编辑器
计算机工程学院
课程设计报告
设计名称:
数据结构课程设计
选题名称:
简单的行编辑器
姓名:
学号:
专业班级:
软件工程软件102
系(院):
计算机工程学院
设计时间:
2011.12.19~2011.12.30
设计地点:
软件工程实验室、教室
成绩:
指导教师评语:
签名:
年月日
1.课程设计目的
1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。
2.课程设计任务与要求:
任务
根据教材《数据结构-C语言描述》(耿国华主编)和参考书《数据结构题集(C语言版)》(严蔚敏、吴伟民主编)选择课程设计题目,要求通过设计,在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解和综合运用。
设计题目从任务书所列选题表中选取,每班每题不得超过2人。
学生自选课题
学生原则上可以结合个人爱好自选课题,要求课题有一定的深度与难度,有一定的算法复杂性,能够巩固数据结构课程所学的知识。
学生自选课题需在18周前报课程设计指导教师批准方可生效。
要求:
1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。
前期准备工作完备与否直接影响到后序上机调试工作的效率。
在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。
2、.设计的题目要求达到一定工作量(300行以上代码),并具有一定的深度和难度。
3、程序设计语言推荐使用C/C++,程序书写规范,源程序需加必要的注释;
4、每位同学需提交可独立运行的程序;
5、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于10页(代码不算);
6、课程设计实践作为培养学生动手能力的一种手段,单独考核。
3.课程设计说明书
一需求分析
该程序的工作是模拟文本编辑,为用户提供简单的字符编辑。
(1)数据分析:
用户输入要编辑的字符要在系统给数组分配的空间之内,每行步超过80个字符,字符可以是大写,小写的英文字母,任何数字及标点符号。
在创建数组时,用户要从键盘上输入char型字符,
统计某一字在文章中出现次数时要输入一个char型变量k,定义两个整型变量i和n,i是数组中标识位置的变量,n是统计变量若k在文章中出现一次责则n加1,k就是要统计的字符。
统计空格,数字,字母个数只要定义两个整型变量i和n,
删除某一字串时要从键盘输入两个整型变量pos和len,pos是位置变量,len是长度变量。
在主函数中设计了3个功能;需要输入char型字符进行功能选择调用,
(2)功能分析:
设计的程序能够实现以下功能:
(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符在文章中出现的次数,并输出该次数;
(3)删除某一子串,并将后面的字符前移。
(4)输出形式:
1)分行输出用户输入的各行字符;
2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"
3)输出删除某一字符串后的文章;
(3)性能分析:
此程序性能一般。
二概要设计
系统用到的抽象数据类型定义:
ADTString{
数据对象:
D={ai|ai^CharacterSet,i=1,2,…,n;n>=0;}//D是一个集合,集合中所有元素具有相同的性质。
数据关系:
R={
基本操作:
(1)StrAsign(S,chars)
(2)StrDelete(S,pos,len)
(3)StrLength(S)
}ADTString
系统中子程序及功能要求:
(1)CreatStr(HString*s)//创建字符串
(2)tongjishuzi(HString*s)//统计数字数
(3)tongjizimu(HStrings)//统计字母数
(4)tongjikongge(HString*s)//统计空格数
(5)tongjizongzifushu(HStrings)//统计总字数
(6)tongjimouyyizifu(HStrings,chark)//统计某某一字符出现的次数
(7)shanshuzichan(HStrings,intpos,intlen)删除某一子串后的文章
三详细设计
(1)CreatStr(HString*s)//创建字符数组
{
定义字符变量k;
定义整型变量i,n;//i是字符在数组中位置变量;
给字符数组分配空间(1000);
给定一个控制符*;
从键盘输入字符,储存到字符数组中,当输入字符是控制符时输入结束;
把用户吃呢个键盘上输入入的字符输出到显示器上;
结束数组的创建几赋值;
}
(2)tongjishuzi(HString*s)//统计数字数
{
定义两个整型变量i,n;//i是数组中位置变量,n是统计变量即统计数组中数字的个数
if(s->ch[i]==数字字符)
那么,n++;
}
(3)tongjizimu(HStrings)//统计字母数
{
定义两个整型变量i,n;//i是数组中位置变量,n是统计变量即统计数组中数字的个数
if(s->ch[i]==字母字符)
那么,n++;
}
(4)tongjikongge(HString*s)//统计空格数
{
定义两个整型变量i,n;//i是数组中位置变量,n是统计变量即统计数组中数字的个数
if(s->ch[i]==空格字符)
那么,n++;
}
(5)tongjizongzifushu(HStrings)//统计总字数
{
返回字符数组的长度;//即为输入的总字数
}
(6)tongjimouyyizifu(HStrings,chark)//统计某某一字符出现的次数
{
定义两个整型变量i,n;
从键盘上输入要统计的字符;
从数组中第一个字符开始比较;
当数组中字符与输入字符一致时
n++;
把n的值返回给调用函数;
}
(7)shanshuzichan(HStrings,intpos,intlen)删除某一子串后的文章
{
定义一个整型变量i;
定义一个字符数组*temp;
把主函数中传来的实参pos与0和s.len-len比较//len也是主函数中传来的实参
如果pos<0或者pos>s.len-len
把0返回给主函数//也可以返回ERROR
给数组temp分配空间大小为s.len-len;
如果数组temp是空数组,即temp的空间大小为零;
那么把0返回给主函数//也可以返回ERROR;
If上面情况都没出现
那么将ch数组中pos之前的字符赋给数组temp对应位置;
将ch数组中pos之后的pos+len位置的元素赋给temp数组中第pos位置
把ch数组长度变为s.len-len;
清空数组ch
把temp数组中元素赋给ch数组;
输出数组temp;或者s.ch
返回1;
}
四测试用例设计与测试分析
<1>当程序运行时会出现如下界面“请输入要编辑的字符”提示用户输入字符。
<2>用户可从键盘上输入字符,以*结尾表示输入字符结束,界面上会输出用户输入的字符,以及行编辑的功能选择项。
(如输入如下字符beijinghuanyingni*)
<3>输入选择1,则依次输出:
字母个数:
17
数字个数:
0
空格个数:
4
字符总数:
21
是否继续使用(Y/N):
<4.1>选择Y,则出现行编辑器的功能选择,
<4.2>如果第三步结束选择N,则输出**********谢谢使用**********
<4.1.1>第三步结束选Y后,再次需要进行行编辑器功能选择:
输入选择2;
则输出“请输入要统计的某一字符”提示用户输入要查找的字符
假如输入i;
则输出:
i在文章中出现次数为:
4;
是否继续使用(Y/N)
<4.1.2>选择N则输出
**********谢谢使用**********
<4.1.3>选择Y
则输出行编辑器的功能选择项目;
选择3;
输出“请输入要删除子串的起始位置和长度:
”
提示用户输入,如果输入07
输出“删除某一子串后:
”
huanyingni
**********谢谢使用**********
<5>其他字符测试;
例如用户输入:
beijingBEIJING520*
输出
字母个数:
14
数字个数:
3
空格个数:
2
字符总数:
19
统计字符i出现次数为2;
删除从8号位器长度为7的字串后输出字符为beijing520
五用户手册
1.运行程序,首先出现主界面。
主界面首行显示“欢迎使用文本编辑器”,输出提示信息“请输入要编辑的字符”,然后界面显示用户输入的字符。
然后主界面文本编辑器的功能菜单,功能菜单包括三个选项:
选项一:
统计字数,选择该项可进字数统计,当用户输入字符结束后,选择功能选项一,主界面回自动统计各字符数,然后输出。
2;选项二:
统计出现次数,选择该项可进行对文章中某一字符出现字数的统计,当用户选择功能二时,主界面回输出提示信息,提示用户输入要统计的字符,用户可从键盘任意输入字符,以回车键结束。
然后主界面就会输出用户输入的字符在出现的次数。
3;选项三:
删除字符,选择该项可删除文章中的某一字符及字串,当用户选择功能三时,主界面输出提示,提示用户输入,要删除字符的起始位置,以及删除字串的长,输入后以回车键结束,主界面会输出删除字串后的文章。
六测试成果
七附录(源程序清单)
#include
#include
#include
#include
typedefstruct
{
char*ch;
intlen;
//chark;
}HString;
intCreatStr(HString*s)
{
chark;
inti=0,n;
s->ch=(char*)malloc(1000);
do
{
scanf("%c",&k);
s->ch[i]=k;
i++;
}while(k!
='*');
s->len=i-1;
cout<<"用户输入的字符:
"< for(n=0;n cout< cout< return0; } inttongjikongge(HString*s)//统计空格个数 { inti,n=0; for(i=0;i<=s->len;i++) { if(s->ch[i]=='') n++; } returnn; } inttongjishuzi(HString*s)//统计数字个数 { inti,n=0; for(i=0;i { if(s->ch[i]>='0'&&s->ch[i]<='9') n++; } returnn;} inttongjizimu(HStrings)//统计字母个数 { inti,n=0; for(i=0;i { if(s.ch[i]>='A'&&s.ch[i]<='Z'||s.ch[i]>='a'&&s.ch[i]<='z') n++; } returnn;} inttongjizongzifushu(HStrings)//统计总字符个数 { return(s.len); } inttongjimouyyizifu(HStrings,chark) { inti,n=0; for(i=0;i<=s.len;i++) { if(s.ch[i]==k) n++; } returnn; } /* intshanshuzichan(HStrings,intpos,intlen)//删除某一子串后 { inti; char*temp; if(pos<0||pos>(s.len-len)) return0; temp=(char*)malloc(s.len-len); if(temp==NULL) return0; for(i=0;i temp[i]=s.ch[i]; for(i=pos;i temp[i]=s.ch[i+len]; s.len=s.len-len; free(s.ch); s.ch=temp; for(i=0;i cout< cout< return1; } */ intshanchu(HStrings,intpos,intlen)//删除 { inti,j=0; if(pos<0||pos>(s.len-len)) return0; for(i=0;i { if(i { s.ch[j]=s.ch[i]; j++; } else { j=pos; s.ch[j]=s.ch[i+len]; pos++; } } for(i=0;i { cout< } cout< return0; } //函数统计一个长度任意的字符 /* intStrIn(HStrings) { char*temp; chart; inti=0,n=0,k,j=0; cout<<"输入要统计字符长度: "; cin>>k; temp=(char*)malloc(k*sizeof(char)); if(k<=s.len) { cout<<"输入要统计字符: "; for(i=0;i<=k;i++) { cin>>t; temp[i]=t; } i=0; for(j=0;j { i=0; while(temp[i]==s.ch[j]) { i++; j++; if(k==i) n++; } } } else { cout<<"error! "< } cout<<"字符在文章中出现次数: "< return0; } */ /* inttongji(HStrings)//函数,统计每个字符出现次数 { inti,j,n=0,k;// intselect=0; for(i=0;i { for(j=i;j { if(s.ch[i]==s.ch[j]) { n++; } } if(i<1) { cout< "< n=0; } else { for(k=0;k { if(s.ch[k]==s.ch[i]) select++; } if(select>0) { select=0; n=0; continue; } else { cout< "< n=0; } } continue; } return0; } */ voidmain() { intp,l;//删除子串时用; HStrings;//定义对象 cout<<"欢迎使用文本编辑器"< cout<<"************************"< cout<<"************************"< cout<<"请输入要编辑的字符(以*结束): "< CreatStr(&s);//创建字符串 cout<<"************************"< cout<<"************************"< top: cout<<"________________________"< cout<<"1.统计字符"< cout<<"2.统计次数"< cout<<"3.删除字符"< cout<<"________________________"< charselect; cout<<"请输入选择: "; cin>>select; switch(select) { case'1': cout<<"字母个数: "< cout<<"数字个数: "< cout<<"空格个数: "< cout<<"字符总数: "< cout<<"是否继续使用? (Y/N)"; charback; cin>>back; if(back=='Y'||back=='y') gototop; else gotobottom; break; case'2': chark;//统计字符出险次数时用 cout<<"请输入要统计的某一字符: "; cin>>k; cout< "; cout< //tongji(s);//函数,统计每个字符出现次数 //StrIn(s);//函数,统计某个字符串出现次数 cout<<"是否继续使用? (Y/N)"; charback1; cin>>back1; if(back1=='Y'||back1=='y') gototop; else gotobottom; break; case'3': cout<<"请输入要删除子串的起始位置和长度: "; cin>>p>>l; cout<<"删除某一子串后: "< //shanshuzichan(s,p,l); shanchu(s,p,l); } bottom: cout<<"**********谢谢使用*********"< } 4.课程设计心得 又一次课程设计,与去年相比,课程设计的内容变难了,这不仅表现在所用的知识上,进行设计代码长度也增加很多,从以前的几十行,到现在的几百行,甚至几千行…。 这次课程设计老师要求我们要用本学期所学知识编写程序。 在程序设计初期老师详细讲解了题目及要求。 除此之外老师还给我们介绍了软件工程思想。 这使我对软件工程有了新的认识,软件工程不仅仅是程序的编写,更多的是对逻辑思维的一种考验,编写一个程序,需要有严谨的思维。 这次课程设计,使我认识了软件工程的模式: 首先,根据客户要求,结合实际,进行需求分析,需求分析包括数据分析,功能分析,性能分析。 数据分析,在程序开发阶段可能用到数据。 功能分析,对将要设计的程序功能进行初步设计。 性能分析,要初步计算自己将要设计的程序的性能,形成程序开发的方向。 定下方向后要进行程序设计,开发此程序的目的,想要实现的功能,以这个为基本要求,开始设计程序。 程序设计分为概要设计和详细设计,在概要设计中要定义程序开发中用到的数据结构和这个数据结构上的基本操作,之后定义一些子系统和功能函数。 详细设计,是对子系统,和各功能函数进行详细的伪代码编写,一般用文字说明。 然后,进行程序编写,把详细设计阶段的设计的伪代码转换成计算机语言,然后运行实现结果。 本次课程设计,我做的是简单的行编辑器,在编写程序过过程中遇到了一些问题。 首先,数据结构本身是一门比较难的科目,内容很难理解,其次上课时没有认真听讲,课后没自习复习加以理解,导致在课程设计的时候不能灵活的运用数据结构知识。 在程序设计时,我在用户输入设计时比较纠结,我想用串的只是做的,但是在输入结束时,我本想用enter结束的,但是在输入的时候,输入enter时并不是输入结束,而是换行。 后来就加了控制符*,在储存问题上有出现一点问题,最后,同学教我把输入的字符储存在指针数组中。 最终实现储存… 统计字符的一些函数上没有遇到什么难处,程序很顺手,删除字符串是参考数据结构书上的设计思想,也没遇到难题。 在统计某一字符串时,我在初始设计阶段,只考虑了单个字符的统计,也就是在统计时只能输入单个字符。 后来我又加了可以同计多个字符的函数intStrIn(HStrings),即可以统计有一定长度的字符串和统计所有字符出现次数的函数inttongji(HStrings),即用户输入的字符中统一字符出现的次数(后加的两个函数在测试时没有给出,但在数据结构.cpp有这些函数,运行时可以根据用户要求任意调用。 ) 此外,在设计阶段还有个思想上的错误,就是,在删除那个部分,我原来是将没有删除的字符储存到另一个空间然后再输出,但是后来发现题目要求是在原数组中改变,所以后来又重新写了一个函数,由于测试结果相同,所以测试用例没有改变。 这次课程设计,感觉上比较简单,没有参考网上提供的程序代码,只有在储存设计时和同学讨论过,其他的代码都是自己思考写的,所以感觉很有成就感,虽然这
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 编辑器