发布时间 : 星期一 文章数据结构课程设计建文本编辑器更新完毕开始阅读b92a0b1aa7c30c22590102020740be1e650ecc00
目录
一. 设计的目的和要求……………………………………………………………3
课程设计的目的………………………………………………………………3 基本要求………………………………………………………………………3 二. 课程设计任务要求……………………………………………………………3
需求分析………………………………………………………………………3 三. 具体设计………………………………………………………………………3
主程序流程图…………………………………………………………………4 详细设计功能分析……………………………………………………………4 函数分析 源程序代码………………………………………………………6 四. 调试分析和测试结果………………………………………………………20
代码测试截图结果分析……………………………………………………20 五. 总结心得与体会……………………………………………………………25
一.课程设计目的和要求
? 设计目的
数据结构课程设计是一门实践性非常强的课程,不但结合了C语言的设计基本知识,更加注重技能的培养,是学生能够允许渐进的把握C语言C++的程序设计的技能。通过此课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高,同时提以下几个方面的能力。
1. 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; 2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; 3. 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4. 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科
学的工作方法和作风。
二.课程设计任务要求
? 需求分析
1. 具有图形菜单界面;
2. 查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块移
动),删除
3. 可正确存盘、取盘; 4. 正确显示总行数。
三.具体设计
? 主程序流程图 如(图1)所示
? 程序中用链表来保存文本,每一行为一个单向链表,每一行的表头保存在一个行链表中,形成了一个2维链表,结构如下(图2)所示: ? 详细设计功能实现
(一)
1. 2. 3.
打开文件
(二)
1. 2. 3. (三)
1.
提示用户输入文件路径
判断文件路径是否有效,若无效,则提示错误信息并返回,否则继续执行。
若文件成功打开并且文件指针没有到文件尾,则从文件中一次读取一个字符,并将该字符添加到一列单链表节点中,直至遇到换行符(ASCII码10)。当列单链表形成后,它的首地址将被保存至行单链表的相应节点的数据域中,如此动作,直至文件指针指向文件尾部而结束。 新建文件
若行链表中有数据存在,则提示用户保存文件。 提示用户输入新建文件的保存路径。 测试新文件路径是否有效。 保存文件 打开文件。
2
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. 询问用户是否要进行替换。若选是,则提示用户输入要替换后的字符串,然后先在链
3
表中删除原字符串,再在该位置插入要替换为的字符串。
(七) 行移动
1. 提示用户输入要移动的行row和移动后的位置pos。 2. 将行链表中的row-1节点移动到pos-1位置。 (八) 列移动
1. 提示用户输入要移动的列col和移动后的位置pos。 2. 遍历每一行(列链表),将每一行的col-1节点移动到pos位置处;若col-1节点不存
在则不处理。
(九) 显示文本
(1)遍历行、列链表,并将数据输出到控制台;
行链表表头Node* lineRow* next列链表表头行1Node* lineRow* nextchar chNode* next列1char chNode* next列2char chNode* next列3char chNode* next行2Node* lineRow* nextchar chNode* nextchar chNode* next行3Node* lineRow* nextchar chNode* next行4Node* lineRow* nextchar chNode* nextchar chNode* next (图2)
? 函数分析 源程序代码
#include
4