数据结构 课程设计 简易文本编辑器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
六、用户使用说明
当用户打开程序,就会提示按【回车键】进 入,按【回车键】则进入主菜单页面,进入主菜 单,选择【1键】,新建文本信息,编辑好后,按 照程序中的文字提示,返回到主菜单,此时在主 菜单选择其他操作,当进入各项操作,均有提 示。每一操作完成,按【回车键】返回主菜单,
选择【0键】,安全退出程序!
二、概要设计
为了完成需求分析的基本任务,主要从以下3 个方面进行设计: 2.1 主界面设计
为了实现简易文本编辑器的各项功能,设计了 一个含有多个菜单项的主控菜单模块以操作系统 的各项功能,以方便用户使用系统。
系统进入菜单运行界面如图所示:
简易文本编辑器主菜单
2.2 数据结构设计 系统采用线性表的顺序存储结构表示和存
{
int i;
int len;
if(pos<0 || pos>S->length)
{
பைடு நூலகம்
cout<<"
\t\t插入位置不合法,其取值范围应该是
[0,length]";
return 0;
}
len=S->length+T.length;
S->ch=(char *)realloc(S->ch,len *sizeof(char));
cout<<" \t\t删除位置pos及删除长度len不合法,无法完成删 除操作";
return 0; } length=S->length-len; if(length<=0)
length=pos;/*若pos+len大于串长,则从pos删到串尾*/ str=(char *)malloc(length*sizeof(char)); if(!str) {
系统函数调用关系图
四、详细设计
4.1 数据结构设计 系统采用线性表的顺序存储结构存储通讯录
信息。 4.2 系统主要模块设计 (1) 建立文本模块,由void InitString(SqVString
*S,char *str)函数实现。该模块的算法思想是: 按照给定的线性表存储空间的初始化分配量分配存 储空间,若分配成功,则往下进行;令线性表长为 0;令线性表当前存储容量为给定的线性表存储空 间的初始化分 配量。
3、/*初始化串*/ void InitString(SqVString *S,char *str) 4、/*串插入*/ int StrInsert(SqVString *S,int pos,SqVString T) 5、 /*串删除*/ int StrDelete(SqVString *S,int pos,int len) 6、/*求子串*/ int SubStr(SqVString S,int pos,int len,SqVString *T) 7、/*串连接*/ int Concat(SqVString *S,SqVString T) 8、/*串赋值*/ int StrAssign(SqVString *S,char *value) 9、 void InputString() //新建 10、void DeleteString()//删除 11、 void DeleteSubstring()//删除 12、 void InsertSubstring()//查找 13、void DisplayString()//显示 14、void cd()//进入界面 15、void ts()//主菜单 16、void tc()//退出 3.3 系统模块之间的调用关系 系统的16个子模块之间的主要调用关系所 示:
未解决的问题:在完成插入,查找功能的时 候,出现了问题,当程序执行到此处时,程序未 能进入下一步,而是直接退出了。当进入主菜单 后,只能选择【1键】或者退出,这是未能得到优 化的。 块移动(行块,列块移动),正确存盘、取盘;
正确显示总行数等功能未能完成。
九、程序源代码:
#include<iostream.h> #include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<string.h> #define STRSIZE 100 #define MAXSTRING 60 #define MAXLINE 24 /*存储结构*/ typedef struct {
}/*求str的长度*/
S->ch=(char *)malloc(len *sizeof(char));/*申请动态数组空间
*/
S->length=len;/*置串的当前长度*/
for(i=0;i<S->length;i++)
S->ch[i]=str[i];/*赋值串值*/
}
/*串插入*/
int StrInsert(SqVString *S,int pos,SqVString T)
char*ch; int length; }SqVString; /*由模式串nextval值*/ void GetNextval(SqVString T,int nextval[]) { int j=0,k=-1; nextval[0]=-1; while(j<T.length) {
if(k==-1||T.ch[j]==T.ch[k]) {
序,出现错误修改再运行,直至运行结果0 error ,0 warning结束。接着进入程序界面,看程序能 否实现所要求的各项功能,再作下一步的修改。 5.2、调试结果
主菜单
新建 显示
删除
查找 插入
退出
5.3、程序出现的问题:还有几个程序模块未能成 功调用。
( 其他问题 见“第八项中未能解决的问题” )
int i=pos,j=0,r; while(i<S.length && j<T.length) {
if(i<S.ch[i]==T.ch[j]) {
++i; ++j; } else if(j==0) ++i; else j=next[j]; } if(j>=T.length) r=i-T.length; else r=-1; return r; } /*初始化串*/ void InitString(SqVString *S,char *str) { int i; char *c; int len=0; c=str; while(*c!='\n') { len++; c++;
cout<<" \t\t分配空间出错,无法完成串的删除操作"; return 0; } for(i=0;i<pos;i++) str[i]=S->ch[i]; for(i=pos+len;i<S->length;i++) str[i-len]=S->ch[i]; free(S->ch); S->length=length; S->ch=str; return 1; } /*求子串*/ int SubStr(SqVString S,int pos,int len,SqVString *T) { int i; if(S.length<=0) { cout<<" \t\t空串,无法完成求子串操作"; return 0; } if(pos<0 || pos>S.length || len<=0) { cout<<" \t\t子串位置pos及子串长度len不合法,无法完成求
S->length=len;
return 1;
}
/*串删除*/
int StrDelete(SqVString *S,int pos,int len)
{
int i;
int length;
char *str; if(pos<0 || len<=0 || pos>S->length ||S->length<=0) {
if(!S->ch)
{
cout<<" \t\t分配空间出错,无法完成串插入操作";
return 0;
}
for(i=S->length-1;i>=pos;i--)
S->ch[i=T.length]=S->ch[i];
for(i=0;i<T.length;i++)
S->ch[i+pos]=T.ch[i];
cout<<" \t\t分配空间出错,无法完成求子串操作"; return 0; } for(i=0;i<len;i++) T->ch[i]=S.ch[i+pos]; T->length=len; return 1; } /*串连接*/ int Concat(SqVString *S,SqVString T) { int i; int len; len=S->length+T.length; S->ch=(char *)realloc(S->ch,len *sizeof(char)); if(!S->ch) { cout<<" \t\t分配空间出错,无法完成串连接操作"; return 0; } for(i=0;i<T.length;i++) S->ch[i+S->length]=T.ch[i]; S->length=len; return 1; } /*串赋值*/
子串操作"; return 0;
} if(pos+len>S.length)
len=S.length-pos+1;/*当子串长度超过主串长度,则只取到 串尾即可*/
if(T->length) free(T->ch);/*释放S的原有空间*/
T->ch=(char *)malloc(len *sizeof(char)); if(!T->ch) {
j++; k++; if(T.ch[j]==T.ch[k])
nextval[j]=nextval[k]; else
nextval[j]=k; }
else k=nextval[k];
} } /*模式匹配KMP算法*/ int KMPIndex(SqVString S,int pos,int next[],SqVString T) {
7、 参考文献
《数据结构理论与实践》——杨永斌
8、 对所设计的软件进行自我评
价,如创新点、未解决的问题等情
况说明。
拿到该课程题目,准备仿照电脑上的文本编辑 器写该程序,由于我所学不是扎实,于是就借助 课本上所学的串与数组,写好了这个程序,程序 能够正确的完成,程序充分包含了本学期的所学 内容,体现了数据结构的特点。继续沿用了清屏 函数,是屏幕看起来很舒服,不至于那么杂乱。

级: 10计本2班

名: 邓 寅 森

号: 2010305202
指导教师: 杨 老 师
完成日期: 2011年12月
计算机科学与技术系课程设计评分表
课程名称: 数据结构 简易文本编辑器
项目 设计方案的合 理性与创造性 设计与调试结 果 设计说明书的 质量 功能完善度 综合成绩
评价
学 号 班 级 姓 名 综合成绩
1.1 问题描述 传统的纸质文档已经不能满足大家的需求,有
容易丢失、查找不方便等缺点。计算机信息管理 为人们的生活、工作提供了方便,提高了效 率。“简易文本编辑器”是为了帮助老师、同学 或其他一些需要使用文本编辑的人员进行管理和 分析的一种计算机应用程序。 1.2 基本任务
通过用户调查分析及实际需求,系统需要实现 如下基本任务: (1)输入数据信息建立文本; (2)查询文本中满足要求的信息; (3)插入新的信息到文本中; (4)删除不再需要的文本信息; (5) 查看所有的文本信息。
该模块的算法描述如下:见源程序 (2) 查看文本中得所有记录,需要一个模式匹配 int KMPIndex(SqVString S,int pos,int next[],SqVString T)函数实现。该模块的算法思 想是:在此略
该模块的算法描述如下:见源程序 (其它模块设计 略)
五、调试分析
5.1、调试方法: 首先打开Microsoft Visual C++ 6.0 ,运行程
2010305202 10计本2 邓寅森 班
教师评 语
教师签名: 日 期:


一、需求分析 3
二、概要设计 3
三、模块设计 5
四、详细设计 7
五、调试分析 8
六、用户使用说明 11
七、 参考文献 12
八、 对所设计的软件进行自我评价,如创新点、
未解决的问题等情况说明 12
九、程序源代码: 13
一、需求分析
调用关系如图所示。
主函数 各操作模块
模块调用示意图 3.2 系统子模块及其功能设计
本系统共设计了16个子模块,各程序的函数 名及功能说明如下:
1、/*由模式串nextval值*/ void GetNextval(SqVString T,int nextval[]) 2、/*模式匹配KMP算法*/ int KMPIndex(SqVString S,int pos,int next[],SqVString T)
储“简易文本编辑器”中的信息。实现文本的输 入,删除,插入,查找,显示功能。 2.3 系统功能设计
运行程序,提示进入菜单,按“回车键”进入 主菜单,再可以在主菜单上进行各项操作。每次 进入菜单,选择“1键”新建文本,然后才可以进 行其他操作,或者按“0键”选择退出。
三、模块设计
3.1 模块设计 系统主要包含主程序模块和其它操作模块。其
相关文档
最新文档