郑州轻工业学院本科数据结构毕业课程设计总结报告.docx
- 文档编号:26455585
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:31
- 大小:25.11KB
郑州轻工业学院本科数据结构毕业课程设计总结报告.docx
《郑州轻工业学院本科数据结构毕业课程设计总结报告.docx》由会员分享,可在线阅读,更多相关《郑州轻工业学院本科数据结构毕业课程设计总结报告.docx(31页珍藏版)》请在冰豆网上搜索。
郑州轻工业学院本科数据结构毕业课程设计总结报告
(此文档为word格式,下载后您可任意编辑修改!
)
郑州轻工业学院本科
数据结构课程设计总结报告
设计题目:
文本编辑器
学生姓名:
罗启福
系别:
计算机科学与工程
专业:
计算机科学与技术
班级:
06-1
学号:
指导教师:
金保华
2008年12月20日
郑州轻工业学院
课程设计任务书
题目文本编辑器
专业、班级计科06-1学号26姓名罗启福
主要内容:
(1)打开文本文件
(2)显示文本内容(3)插入文本行(可一次性插入多行)(4)删除指定文本行(可一次性删除多行)(5)拷贝指定的多行(6)修改行(7)查找指定的字符串(8)替换指定的字符串(支持全部替换)(9)统计字数(10)存盘(11)另存为(12)系统菜单、右键菜单(右击显示框或其它地方)(13)附带功能(游戏、系统时间、绘图、记事本)
基本要求:
要求完成:
输出整篇文章内容;在文章尾部追加一行;在文章指定行插入新行;修改文章指定行;删除文章指定行;统计某一字符串在文章中出现的次数;统计文章的全部字母数;统计文章的数字个数;保存文章到磁盘指定文件;加载磁盘文章文件。
运行环境:
WindowsXP,带有MFC基础类库的VC++6.0
操作数据:
打开与应用程序在同目录下的me.txt或file.dat,也可使用浏览功能打开任意文本文件,然后进行各种操作。
主要参考资料等:
《数据结构(C语言版)》作者:
严蔚敏吴伟民出版社:
清华大学出版社
《VisualC++程序设计--基础与实例分析》作者:
朱晴婷等出版社:
清华大学出版社
《数据结构算法实现及解析》作者:
高一凡出版社:
西安电子科技大学出版社
完成期限:
一周
指导教师签名:
课程负责人签名:
2008年12月20日
目录
一、设计题目(任选其一)
二、需求分析
三、运行环境(软、硬件环境)
四、算法设计的思想
五、算法的流程图
六、算法设计分析
七、源代码
八、运行结果分析
九、收获及体会
一.设计题目
设计目的:
文本编辑程序是一个面向用户的系统服务程序,广泛用于源程序的输入和修改,甚至用于报刊和书籍的编辑排版以及办公室的公文书信的起草和润色。
设计内容:
文章编辑
功能:
输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;要求
(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:
可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:
(1)分行输出用户输入的各行字符;
(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;要求完成:
输出整篇文章内容;在文章尾部追加一行;在文章指定行插入新行;修改文章指定行;删除文章指定行;统计某一字符串在文章中出现的次数;统计文章的全部字母数;统计文章的数字个数;保存文章到磁盘指定文件;加载磁盘文章文件。
二.需求分析
随着个人电脑的迅速普及,各种实用的小型软件的开发和设计也变得更要必要了。
本软件是为电脑使用者做文本编辑而精心设计的,可以满足文本操作的大部分要求。
文本编辑程序是一个面向用户的系统服务程序,广泛用于源程序的输入和修改,甚至用于报刊和书籍的编辑排版以及办公室的公文书信的起草和润色。
功能模块描述:
1打开文件:
该模块的功能主要是用于打开文本文件用于编辑。
用户可直接输入与之在同一个目录下的说有文本文件,也可以实用浏览按钮打开其它任何地方的任何文本文件。
默认文件名为me.txt,默认路径为同目录。
可使用“打开文件”按钮,也可使用系统菜单中的“文件\打开”
2.显示文本内容:
该模块的功能是显示已经打开的文本文件。
可使用“显示文件内容”按钮,也可使用系统菜单中的“编辑\显示”
3.插入行:
可使用“插入行”按钮,也可使用系统菜单中的“编辑\插入行”或右键菜单中的“插入行”打开插入行数据的对话框。
在第一个输入框中输入插入的位置,在第二个输入框中输入插入的总行数。
然后可以在弹出的输入框中输入要插入的数据。
4.删除行:
可使用“删除行”按钮,也可使用系统菜单中的“编辑\删除行”或右键菜单中的“删除行”打开删除行数据的对话框。
在第一个输入框中输入删除的起始位置,在第二个输入框中输入删除的总行数。
5.拷贝行:
可使用“拷贝行”按钮,也可使用系统菜单中的“编辑\拷贝行”打开拷贝行数据的对话框。
在第一个输入框中输入拷贝的起始位置,在第二个输入框中拷贝删除的总行数.在第三个输入框中输入要吧拷贝的数据插入的位置。
6.修改行:
可使用“修改行”按钮,也可使用系统菜单中的“编辑\修改行”打开修改行数据的对话框。
在第一个输入框中输入修改的行位置,在弹出输入框中输入新数据内容。
7.查找字符串:
可使用“查找字符串”按钮,也可使用系统菜单中的“编辑\查找字符串”打开查找字符串数据的对话框。
在输入框中输入要查找的字符串。
8.替换字符串:
可使用“替换字符串”按钮,也可使用系统菜单中的“编辑\替换字符串”打开替换字符串数据的对话框。
在第一个输入框中输入要替换的字符串,在第二个输入框中输入新数据内容。
9.存盘或另存为:
该模块可以保存文本内容到指定的文件。
10.统计各种字符的个数:
该模块可以统计出中文、英文、空格、数字及其它字符的个数和总字符数。
11.附加功能:
附加功能有游戏、绘图、记事本及查看系统时间。
功能分析:
本系统主要是用于文本编辑者的文档编辑,文本编辑程序是一个面向用户的系统服务程序,广泛用于源程序的输入和修改,甚至用于报刊和书籍的编辑排版以及办公室的公文书信的起草和润色。
三.运行环境
×VisualC++6.0带MFC基础类库,WindowsXP环境
×IntelPentium以上CPU、64MB以上内存
×推荐使用PIII以上CPU、128MB以上内存
四.算法设计的思想
计算机上的非数值处理的对象基本上都是字符串数据,随着语言加工程序的发展,产生了字符串处理的一系列的操作。
本软件所使用的基本操作和存储结构为采用串的堆分配存储结构,并定义相应的操作函数。
文本编辑的操作函数调用这些方法并结合MFC的库函数实现文本编辑的图形界面。
串的堆分配存储:
structHString
{
char*ch;若是非空串,则按串长分配存储区,否则ch为NULL
intlength;串长度
};
串的堆分配存储的实现函数:
StatusStrAssign(HString&T,char*chars);
StatusStrCopy(HString&T,HStringS);
StatusStrEmpty(HStringS);
intStrCompare(HStringS,HStringT);
intStrLength(HStringS);
StatusClearString(HString&S);
StatusConcat(HString&T,HStringS1,HStringS2);
StatusSubString(HString&Sub,HStringS,intpos,intlen);
voidInitString(HString&T);
intIndex(HStringS,HStringT,intpos);严蔚敏《数据结构》算法4.1
StatusStrInsert(HString&S,intpos,HStringT);算法4.4;
StatusStrDelete(HString&S,intpos,intlen);
StatusReplace(HString&S,HStringT,HStringV);
voidDestroyString();
voidStrPrint(HStringT);
现在主要分析一下Index(S,T,pos)和StrInsert的基本思想:
Index(S,T,pos):
在主串S中取第i(i的初值为pos)个字符起、长度和串T相等的字串和串T比较,若相等,则求出函数值为i,否则i值增1直至串S中不存在和串T相等的子串为止。
StrInsert(&S,pos,T):
为串S重新分配大小等于串S和串T长度之和的存储空间,然后进行复制。
文本编辑的操作函数:
voidOpen();
char*List();
voidInsert();
voidDelete();
voidCopy();
voidModify();
voidSearch();
voidReplace();
voidSave();
五.算法的流程图
主程序的流程图:
六.算法设计分析
本软件所使用的基本操作和存储结构为采用串的堆分配存储结构,并定义相应的操作函数。
文本编辑的操作函数调用这些方法并结合MFC的库函数实现文本编辑的图形界面。
串的堆分配存储:
structHString
{
char*ch;若是非空串,则按串长分配存储区,否则ch为NULL
intlength;串长度
};
串的堆分配存储的主要实现函数分析:
StatusStrCopy(HString&T,HStringS)
{初始条件:
串S存在。
操作结果:
由串S复制得串T
inti;
if(T.ch)
free(T.ch);释放T原有空间
T.ch=(char*)malloc(S.length*sizeof(char));分配串空间
if(!
T.ch)分配串空间失败
exit(OVERFLOW);
for(i=0;i T.ch[i]=S.ch[i]; T.length=S.length; returnOK; } 此函数可以把一个串T释放,然后吧串S复制到T,得到新串。 时间复杂度为O(S.length); intIndex(HStringS,HStringT,intpos)严蔚敏《数据结构》算法4.1 {T为非空串。 若主串S中第pos个字符之后存在与T相等的子串, 则返回第一个这样的子串在S中的位置,否则返回0 intn,m,i; HStringsub; InitString(sub); if(pos>0) { n=StrLength(S); m=StrLength(T); i=pos; while(i<=n-m+1) { SubString(sub,S,i,m); if(StrCompare(sub,T)! =0) ++i; else returni; } } return0; } 利用判等、求串长和求子串的操作可以实现求子串位置定位函数Index(HStringS,HStringT,intpos),T为非空串。 若主串S中第pos个字符之后存在与T相等的子串,则返回第一个这样的子串在S中的位置,否则返回0,时间复杂度为O( ); 文本编辑器的主要功能函数的基本操作: #defineMAX_LEN200文件最大行数 #defineLINE_LEN200每行字符数最大值+1 #defineNAME_LEN50文件名最大长度(包括盘符、路径)+1 voidOpen(); char*List(); voidInsert(); voidDelete(); voidCopy(); voidModify(); voidSearch(); voidReplace(); voidSave(); 文本编辑器的主要功能函数算法分析: voidInsert() {插入行 inti,l,m; CInsertDlgdlg; if(IDOK==dlg.DoModal())在第l行前插m行,请输入lm: { l=dlg.m_insertl; m=dlg.m_insertm; } if(n+m>MAX_LEN) { MessageBox(","提示", MB_OK|MB_ICONEXCLAMATION); return; } if(n>=l-1&&l>0) { for(i=n-1;i>=l-1;i--) T[i+m]=T[i]; n+=m; for(i=l-1;i { CInsertInforDlgindlg; if(IDOK==indlg.DoModal())顺序输入待插入内容: { strcpy(str,indlg.m_insertinfor.GetBuffer(0)); } InitString(T[i]); StrAssign(T[i],str); } } else MessageBox(", "提示",MB_OK|MB_ICONEXCLAMATION); } 上述算法是对插入行数据函数的定义,它和MFC的一些库函数有很多的嵌套调用,需要包含很多头文件。 先调用输入框的对话框输入插入的起始位置,第二个输入框是插入的总行数,它可以支持插入多行。 voidReplace() {替换字符串 inti,k,f=1,count=0;f为继续替换标志 HStrings,t; CReplaceDlgdlg; if(dlg.DoModal()==IDOK)输入待替换的字符串: { strcpy(str,dlg.m_replacey.GetBuffer(0)); strcpy(strr,dlg.m_replaceh.GetBuffer(0)); } InitString(s); StrAssign(s,str); InitString(t); StrAssign(t,strr); for(i=0;i { k=1;由每行第1个字符起查找 while(k) { k=Index(T[i],s,k);由本行的第k个字符开始查找 if(k)找到 { count++; CStringstrS; strS.Format("第%d行: %s\n第%d个字符处找到。 是否替换(YN)? ",i+1,T[i].ch,k); if(IDYES==MessageBox(","提示", MB_YESNO|MB_ICONQUESTION)) {中断查找、替换 f=0; break; } else k+=StrLength(t); } } } if(f) MessageBox(","提示",MB_OK); CStringstrT; strT.Format("共替换%d个\n",count); strT+=dlg.m_replacey; MessageBox( 函数结果状态代码 #defineTRUE1 #defineFALSE0 #defineOK1 #defineERROR0 #defineINFEASIBLE-1 #defineOVERFLOW-2因为在math.;Boolean是布尔类型,其值是TRUE或FALSE c4-2.(HString&T,char*chars); StatusStrCopy(HString&T,HStringS); StatusStrEmpty(HStringS); intStrCompare(HStringS,HStringT); intStrLength(HStringS); StatusClearString(HString&S); StatusConcat(HString&T,HStringS1,HStringS2); StatusSubString(HString&Sub,HStringS,intpos,intlen); voidInitString(HString&T); intIndex(HStringS,HStringT,intpos);算法4.1 StatusStrInsert(HString&S,intpos,HStringT);严蔚敏《数据结构》算法4.4; StatusStrDelete(HString&S,intpos,intlen); StatusReplace(HString&S,HStringT,HStringV); voidDestroyString(); voidStrPrint(HStringT); textedit.(); char*List(); voidInsert(); voidDelete(); voidCopy(); voidModify(); voidSearch(); voidReplace(); voidSave(); 以下为自己添加的源文件程序(即各种函数的实现部分): c4_2.cpp文件 #include"StdAfx.(HString&T,char*chars) {生成一个其值等于串常量chars的串T inti,j; if(T.ch) free(T.ch);释放T原有空间 i=strlen(chars);求chars的长度i if(! i) {chars的长度为0 T.ch=NULL; T.length=0; } else {chars的长度不为0 T.ch=(char*)malloc(i*sizeof(char));分配串空间 if(! T.ch)分配串空间失败 exit(OVERFLOW); for(j=0;j T.ch[j]=chars[j]; T.length=i; } returnOK; } StatusStrCopy(HString&T,HStringS) {初始条件: 串S存在。 操作结果: 由串S复制得串T inti; if(T.ch) free(T.ch);释放T原有空间 T.ch=(char*)malloc(S.length*sizeof(char));分配串空间 if(! T.ch)分配串空间失败 exit(OVERFLOW); for(i=0;i T.ch[i]=S.ch[i]; T.length=S.length; returnOK; } StatusStrEmpty(HStringS) {初始条件: 串S存在。 操作结果: 若S为空串,则返回TRUE,否则返回FALSE if(S.length==0&&S.ch==NULL) returnTRUE; else returnFALSE; } intStrCompare(HStringS,HStringT) {若S>T,则返回值>0;若S=T,则返回值=0;若S inti; for(i=0;i if(S.ch[i]! =T.ch[i]) returnS.ch[i]-T.ch[i]; returnS.length-T.length; } intStrLength(HStringS) {返回S的元素个数,称为串的长度 returnS.length; } StatusClearString(HString&S) {将S清为空串 if(S.ch) { free(S.ch); S.ch=NULL; } S.length=0; returnOK; } StatusConcat(HString&T,HStringS1,HStringS2) {用T返回由S1和S2联接而成的新串 inti; if(T.ch) free(T.ch);释放旧空间 T.length=S1.length+S2.length; T.ch=(char*)malloc(T.length*sizeof(char)); if(! T.ch) exit(OVERFLOW); for(i=0;i T.ch[i]=S1.ch[i]; for(i=0;i T.ch[S1.length+i]=S2.ch[i]; returnOK; } StatusSubString(HString&Sub,HStringS,intpos,intlen) {用Sub返回串S的第pos个字符起长度为len的子串。 其中,1≤pos≤StrLength(S)且0≤len≤StrLength(S)-pos+1 inti; if(pos<1||pos>S.length||len<0||len>S.length-pos+1) returnERROR; if(Sub.ch) free(Sub.ch);释放旧空间 if(! len)空子串 { Sub.ch=NULL; Sub.length=0; } else {完整子串 Sub.ch=(char*)malloc(len*sizeof(char)); if(! Sub.ch) exit(OVERFLOW); for(i=0;i<=len-1;i++) Sub.ch[i]=S.ch[pos-1+i]; Sub.length=len; } returnOK; } voidInitString(HString&T) {初始化(产生空串)字符串T。 另加 T.length=0; T.ch=NULL; } intIndex(HStringS,HStringT,intpos)算法4.1 {T为非空串。 若主串S中第pos个字符之后存在与T相等的子串, 则返回第一个这样的子串在S中的位置,否则返回0 intn,m,i; HStringsub; InitString(sub); if(pos>0) { n=StrLength(S); m=StrLength(T); i=pos; while(i<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 郑州轻工业学院 本科 数据结构 毕业 课程设计 总结报告