数据结构专业课程设计建文本编辑器样本文档格式.docx
- 文档编号:16065520
- 上传时间:2022-11-18
- 格式:DOCX
- 页数:32
- 大小:189.84KB
数据结构专业课程设计建文本编辑器样本文档格式.docx
《数据结构专业课程设计建文本编辑器样本文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构专业课程设计建文本编辑器样本文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
2011年12月
简易文本编辑器
网工10101班
学号:
起止日期:
设计地点:
一.设计的目的和要求……………………………………………………………1
课程设计的目的………………………………………………………………1
基本要求………………………………………………………………………1
二.课程设计任务要求……………………………………………………………1
需求分析………………………………………………………………………1
三.具体设计………………………………………………………………………1
主程序流程图…………………………………………………………………1
详细设计功能分析……………………………………………………………1
函数分析源程序代码………………………………………………………6
四.调试分析和测试结果………………………………………………………19
代码测试截图结果分析……………………………………………………19
问题解决与分析……………………………………………………………23
五.总结心得与体会……………………………………………………………24
附录一参考文献…………………………………………………………25
一.课程设计目的和要求
●设计目的
数据结构课程设计是一门实践性非常强的课程,不但结合了C语言的设计基本知识,更加注重技能的培养,是学生能够允许渐进的把握C语言C++的程序设计的技能。
通过此课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高,同时提以下几个方面的能力。
1.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
●设计要求
1.在C环境下可以运行
2.完成老师任务书上面的要求
二.课程设计任务要求
●需求分析
1.具有图形菜单界面;
2.查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除
3.可正确存盘、取盘;
4.正确显示总行数。
三.具体设计
●主程序流程图如(图1)所示
●程序中用链表来保存文本,每一行为一个单向链表,每一行的表头保存在一个行链表中,形成了一个2维链表,结构如下(图2)所示:
●详细设计功能实现
(一)打开文件
1.提示用户输入文件路径
2.判断文件路径是否有效,若无效,则提示错误信息并返回,否则继续执行。
3.若文件成功打开并且文件指针没有到文件尾,则从文件中一次读取一个字符,并将该字符添加到一列单链表节点中,直至遇到换行符(ASCII码10)。
当列单链表形成后,它的首地址将被保存至行单链表的相应节点的数据域中,如此动作,直至文件指针指向文件尾部而结束。
(二)新建文件
1.若行链表中有数据存在,则提示用户保存文件。
2.提示用户输入新建文件的保存路径。
3.测试新文件路径是否有效。
(三)保存文件
1.打开文件。
2.遍历行单链表,遍历行单链表节点指向的列单链表,并将数据输出到文件,每个列单链表遍历完后,输出换行符到文件。
3.关闭文件
(图1)
(四)插入字符串
1.提示用户输入要插入字符串的位置(行号row,列号col)以及要插入的字符串。
2.先在行单链表中找到该行(第row行),若超出现有行数,则添加空行补齐;
3.将字符串插入该行(第row行)节点指向的列链表中的col-1位置,若超出现有节点数,则添加保存字符为空格的节点补齐。
(五)删除字符串
(1)提示用户输入要删除字符串的开始位置(行号row,列号col)以及要插入的字符串的长度len。
(2)在链表中定位到该行节点,若不存在,则提示无法删除并返回;
否则继续执行。
(3)在该行中定位到该col字符节点node,若不存在,则提示无法删除并返回;
(4)删除从node字符节点开始的len个节点。
若不满len个,则全部删除。
(六)查找替换
1.提示用户输入要查找的字符串。
2.遍历链表,找到每一个出现此字符串的位置并输出。
3.询问用户是否要进行替换。
若选是,则提示用户输入要替换后的字符串,然后先在链表中删除原字符串,再在该位置插入要替换为的字符串。
(七)行移动
1.提示用户输入要移动的行row和移动后的位置pos。
2.将行链表中的row-1节点移动到pos-1位置。
(八)列移动
1.提示用户输入要移动的列col和移动后的位置pos。
2.遍历每一行(列链表),将每一行的col-1节点移动到pos位置处;
若col-1节点不存在则不处理。
(九)显示文本
(1)遍历行、列链表,并将数据输出到控制台;
(图2)
●函数分析源程序代码
#include<
iostream>
#include<
fstream>
string>
usingnamespacestd;
//#include"
"
//1、具有图形菜单界面;
//2、查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移动),删除
//3、可正确存盘、取盘;
//4、正确显示总行数。
//字符节点
structNode
{
charch;
Node*next;
};
//行节点
structRow
Node*line;
Row*next;
//创建一个Node对象
Node*createNode(charch)
Node*p=newNode;
p->
ch=ch;
next=NULL;
returnp;
}
//创建一个Row对象
Row*createRow(Node*line)
Row*p=newRow;
line=line;
//定位到index处
Node*locate(Node*line,intindex)
Node*p=line;
inti=-1;
while(p!
=NULL&
&
i<
index)
{
p=p->
next;
i++;
}
Row*locate(Row*list,intindex)
Row*p=list;
//插入节点
boolinsert(Node*list,intindex,charc)
Node*p=locate(list,index-1);
if(p)
Node*node=createNode(c);
node->
next=p->
p->
next=node;
returntrue;
returnfalse;
boolinsert(Row*list,intindex,Node*line)
Row*p=locate(list,index-1);
Row*row=createRow(line);
row->
next=row;
//删除节点
boolremove(Node*list,intindex)
Node*p=locate(list,index-1);
Node*q=NULL;
if(p&
p->
next)
q=p->
next=q->
deleteq;
//清空链表
voidclear(Node*line)
Node*p=line->
Node*q;
while(p)
q=p->
deletep;
p=q;
boolremove(Row*list,intindex)
Row*p=locate(list,index-1);
Row*q=NULL;
clear(q->
line);
//清空字符链表
deleteq->
line;
//删除字符链表表头
voidclear(Row*text)
Row*p=text->
Row*q;
clear(p->
deletep->
voidLine(inti)
if(i==1)
cout<
<
-----------------------------------------------------------------------"
endl;
elseif(i==2)
======================================================================="
intYesOrNo()
charc;
cin>
>
c;
if(c=='
Y'
||c=='
y'
)
return1;
elseif(c=='
N'
n'
return0;
return-1;
//主菜单
voidMenu()
cout<
********************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 专业课程 设计 文本 编辑器 样本