简单行编辑程序——课程设计

合集下载

C++课程设计简单行编辑器

C++课程设计简单行编辑器

目录第一章课程设计的目的和要求 (1)1.1 课程设计的目的 (1)1.2 课程设计的要求 (1)第二章课程设计任务内容 (3)2.1 课程设计要求 (3)2.2 功能需求 (3)2.3 功能模块图 (4)第三章详细设计说明 (5)3.1 程序设计思路 (5)3.2 函数说明 (5)3.2.1 main()主函数 (5)3.2.2 menu_select菜单选择函数 (7)3.2.3 enter输入函数 (8)3.2.4 delete_text删除函数 (9)3.2.5 find函数 (10)3.2.6 list函数 (11)3.2.7 save函数 (12)3.2.8 load函数 (12)3.3 调试 (14)第四章软件使用说明 (15)第五章课程设计心得与体会 (18)附录1 参考文献 (19)附录2 程序清单 (20)简单的行编辑器第一章课程设计的目的和要求此章节详细介绍了课程设计的目的和要求。

1.1 课程设计的目的课程设计的目的是通过实践环节的训练,使学生进一步加深对C语言知识的综合理解,提高C语言应用技能,并结合专业特点培养学生计算机程序的应用能力。

结合计算机科学专业的特点是培养学生阅读本专业相关领域C语言程序的能力,分析并掌握程序的设计思想和方法。

通过课程设计,培养学生查阅C语言相关资料能力、分析和阅读程序的能力,应用C语言基本知识设计小型应用程序的能力。

其中,需要掌握C语言中的结构体,指针,函数(系统函数,自定义函数),文件操作等知识,通过对系统的分析和设计,进一步巩固C语言的学习,以提高对开发环境的进一步认识和综合编程能力。

在学习课程设计之前,要掌握好程序设计的基本概念、方法和思维方式。

开发程序的目的是为了解决问题,而解决问题首先需要找出合适的解决方案,然后用合适的语言把方案描述出来。

显然,该过程的关键是分析问题并找出解决方案,而不是描述方案。

因此,程序设计的首要目标,是培养解决问题的基本思维方式,其次才是语言知识。

简单行编辑程序说明书

简单行编辑程序说明书

摘要文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。

限制这些操作以行为单位进行的编辑程序称为行编辑程序。

行编辑器只能从事最简单的输入输出。

输入、编辑、文档显示并不能同步地进行。

编辑的文本文件可能很大,全部读入内存的做法既不经济也不总能实现。

一种解决办法是逐行地编辑,任何时刻只把待编辑文件的一行放在内存,称为活区。

允许输入出错时发现错误并及时更正。

一般而言,用户无法直接输入文本,而只能在文本终端上通过简要的命令,对已有的文档进行添加或编写。

现利用字符串来定义,设计并实现了一个简单行编辑程序,具备行编辑器的行插入,行删除等基本功能。

关键词:行编辑器;文本;字符串AbstractText editor is the basic software tools, the use of computers for word processing, to achieve the insertion of text files, delete modify operation. Restrictions on these operating units to conduct the editor called line editing process. Line editor can be engaged in the input and output of the most simple. The input, editing, document display can not synchronously. Edit text files can be quite large, all read into memory is neither economic nor can always achieve. One solution is to edit line by line, any moment only put a line to edit the file in memory, known as the living area. Allow the discovery of the error input errors and corrected in time. In general, the user cannot enter text directly, but only through the brief commands in the text terminal, the document may be added or write. We use the string to define, design and realize a simple line editor, with the line editor row insert, delete and other basic functions.Keywords: line editor; text; string目录1.概述 (1)1.1设计背景 (1)1.2内容 (2)1.3要求 (2)2.概要设计 (3)2.1程序模块图 (3)2.2 存储结构的定义 (4)2.3功能函数 (4)2.4主函数 (5)3.详细设计 (5)3.1数据结构设计 (5)3.2程序说明 (7)3.3主要函数设计 (7)3.3.1行删除函数del()子程序设计 (7)3.3.2行插入行数insert()子程序的设计 (10)3.3.3活区切换函数saveanddisplay(20)子函数设计 (12)3.3.4显示函数display()子程序设计 (13)4.调试过程及实验结果 (16)4.1调试过程 (16)5总结 (21)参考文献 (22)致谢 (23)1.概述1.1设计背景行编辑器是文本编辑器的一种,针对行进行编辑。

简单行编辑课程设计

简单行编辑课程设计

简单行编辑课程设计一、教学目标本课程的目标是让学生掌握简单文本编辑的基本知识和技能,培养他们独立进行文本编辑的能力,并提高他们对计算机操作的兴趣和信心。

具体目标如下:知识目标:使学生了解文本编辑的基本概念、原理和方法,包括文本的插入、删除、复制、粘贴等功能;掌握常用的文本编辑软件的使用方法,如Notepad、Word等。

技能目标:培养学生能够熟练运用文本编辑软件进行文本的编辑和排版,能够运用基本的查找和替换功能,掌握简单的代码编写和运行。

情感态度价值观目标:通过文本编辑的学习,使学生感受到计算机技术的实用性和趣味性,增强他们对计算机技术的热爱和探索精神,培养他们独立思考和解决问题的能力。

二、教学内容本课程的教学内容主要包括以下几个部分:1.文本编辑的基本概念和原理:介绍文本编辑的概念、原理和方法,使学生了解文本编辑在计算机应用中的重要性。

2.文本编辑软件的使用:详细讲解常用的文本编辑软件如Notepad、Word的使用方法,包括文本的插入、删除、复制、粘贴等功能。

3.文本的排版和格式设置:介绍如何进行文本的排版和格式设置,使学生能够熟练掌握文本编辑软件的排版功能。

4.代码编写和运行:讲解简单的代码编写和运行,使学生了解计算机编程的基本过程,培养他们的编程思维。

三、教学方法为了提高教学效果,我们将采用多种教学方法相结合的方式进行教学:1.讲授法:通过讲解文本编辑的基本概念、原理和方法,使学生了解文本编辑的基础知识。

2.案例分析法:通过分析实际案例,使学生掌握文本编辑软件的使用方法和技巧。

3.实验法:让学生亲自动手进行文本编辑的实践,培养他们独立进行文本编辑的能力。

4.讨论法:学生进行小组讨论,分享学习心得和经验,提高他们的合作能力和沟通能力。

四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选用适合学生程度的文本编辑教材,为学生提供系统的学习材料。

2.参考书:提供相关的参考书籍,丰富学生的学习资源。

简单行编辑器 数据结构 课程设计

简单行编辑器 数据结构 课程设计

简单行编辑器数据结构课程设计概述:本文旨在设计一种简单的行编辑器,以满足基本的文本编辑需求。

行编辑器是一种常见的文本编辑工具,它允许用户在文本中进行插入、删除、挪移光标等操作。

为了实现这一目标,我们将采用数据结构来管理文本的存储和操作。

1. 数据结构设计:1.1 文本存储:我们可以使用链表作为文本的基本数据结构,每一个节点存储一个字符。

链表的每一个节点包含一个字符和指向下一个节点的指针。

这样的设计可以方便地进行插入和删除操作,同时保持文本的顺序。

1.2 光标位置:光标的位置可以用一个指针指向链表中的某个节点。

这个指针可以指向一个字符之前、之后或者字符本身的位置。

通过挪移光标指针,用户可以在文本中进行插入、删除和挪移操作。

2. 功能实现:2.1 插入操作:用户可以在光标当前位置插入一个字符。

插入操作包括以下步骤:- 创建一个新节点,存储要插入的字符。

- 将新节点插入到光标所在节点的前面或者后面,更新链表的指针。

2.2 删除操作:用户可以删除光标当前位置的字符。

删除操作包括以下步骤:- 找到光标所在节点。

- 更新链表的指针,将光标所在节点从链表中移除。

2.3 光标挪移操作:用户可以通过挪移光标来改变插入和删除操作的位置。

光标挪移操作包括以下步骤:- 根据用户输入的指令,将光标指针向前或者向后挪移一个节点。

2.4 文本显示:用户可以查看当前编辑的文本内容。

通过遍历链表,将字符挨次输出即可。

3. 用户界面设计:为了方便用户操作,我们可以设计一个简单的用户界面,包括以下组件:- 文本显示区域:显示当前编辑的文本内容。

- 光标位置指示器:显示光标当前位置。

- 命令输入框:接收用户输入的命令。

4. 实例演示:假设用户输入以下命令序列:- 插入字符 'A':光标指向开头,文本变为 "A"。

- 插入字符 'B':光标指向 'A' 后面,文本变为 "AB"。

简单行编辑系统课程设计

简单行编辑系统课程设计
gotoxy(57,1+i);
cprintf("%c",179);
}
for(i=1;i<=11;i++)
{
gotoxy(46+i,2);
if(value==0) value=300; /*此value为局部变量*/
{
case 0:gotoxy(22,3); cprintf(" Open "); break;
case 1:gotoxy(22,4); cprintf(" Save "); break;
case 2:gotoxy(22,5); cprintf(" Exit "); break;
{
case 0:gotoxy(47,3); cprintf(" del "); break;
case 1:gotoxy(47,4); cprintf(" insert "); break;
{
gotoxy(21,1+i);
cprintf("%c",179); /*窗口内文本的输出函数,在窗口左边输出 | */
gotoxy(32,1+i);
cprintf("%c",179); /*窗口内文本的输出函数,在窗口右边输出 | */
gotoxy(47,3); cprintf(" del ");
gotoxy(47,4); cprintf(" insert ");
gotoxy(47,5); cprintf(" change ");
}

行编辑程序说明书

行编辑程序说明书

摘要本课程设计是实现“简单的行编辑程序”,此编辑程序的主要用处是接受用户从终端输入的程序和数据,并存入用户的数据区。

这个行编辑程序需要实现的功能包括:能够设立一个输入缓冲区,用于接受用户输入的一行字符然后逐行存入用户数据区;用户在输入出差错时,并在发现有误时可以及时更改。

此程序是一个课程设计的程序,只是模拟的一个简单的行编辑器,如需要真正设计一个行编辑器,那么还需要更为完善的程序。

关键词:行编辑;数据结构;VC++;线性结构AbstractThis course is designed to achieve "a simple line editor", the main use of this editing program is to accept input from the terminal user programs and data, and the data stored in the user's area. This program needs to achieve line editing features include: the ability to set up an input buffer for receiving a line of characters entered by the user and stored in the user data area progressive; awry when the user input, and can be found in time to change the wrong time . This program is a curriculum design process, just simulate a simple line editor, such as the need to really design a line editor, you also need a more comprehensive program.Keyword:Line editing; data structure; VC + +; linear structure目录1课题设计要求 (1)1.1课程设计的题目及内容 (1)1.2 题目要求 (2)2概要设计 (3)2.1存储结构的定义 (3)2.2功能函数 (3)2.3主函数 (4)2.4 函数设计 (4)2.4.1 主函数界面设计 (4)2.4.2帮助函数界面设计 (5)2.4.3用户操作界面设计 (5)3详细设计 (10)3.1主函数的设计 (10)3.2帮助函数子程序设计 (10)3.3编辑函数子程序设计 (11)3.4活区显示函数子程序设计 (12)3.5活区切换函数子函数设计 (13)3.6行删除函数子程序设计 (14)3.7行插入行数子程序的设计 (15)4调试过程及实验结果 (16)4.1调试过程 (16)4.2实验结果 (16)4.2.1帮助函数调试结果 (16)4.2.2打开文件函数调试结果 (17)4.2.3活区显示函数调试结果 (17)4.2.4活区切换函数调试结果 (18)4.2.5行删除函数调试结果 (18)4.2.6行插入函数调试结果 (19)5结论 (20)参考文献 (21)致谢 (22)附录1:用户使用说明 (23)附录2:源程序 (24)1课题设计要求1.1课程设计的题目及内容本次课程设计的题目为:简单的行编辑程序。

行编辑程序课程设计

行编辑程序课程设计

行编辑程序课程设计一、课程目标知识目标:1. 学生能理解行编辑程序的基本概念,掌握其功能和用途。

2. 学生能掌握行编辑程序的基本操作,如插入、删除、替换和查找。

3. 学生了解行编辑程序与文本处理软件(如记事本、Word等)的区别和联系。

技能目标:1. 学生能够独立使用行编辑程序进行文本编辑和操作。

2. 学生能够运用行编辑程序解决实际问题,如修改代码、配置文件等。

3. 学生通过行编辑程序的学习,培养逻辑思维和问题解决能力。

情感态度价值观目标:1. 学生对计算机编程产生兴趣,树立编程学习的自信心。

2. 学生培养良好的编程习惯,注重代码规范和团队协作。

3. 学生认识到行编辑程序在实际应用中的价值,激发学习计算机科学的热情。

分析课程性质、学生特点和教学要求:1. 课程性质:本课程为信息技术学科,以实践操作为主,理论讲解为辅。

2. 学生特点:六年级学生具备一定的计算机操作基础,思维活跃,好奇心强。

3. 教学要求:结合学生实际,注重实践操作,提高学生的动手能力和解决问题的能力。

二、教学内容1. 行编辑程序基本概念:介绍行编辑程序的定义、功能和用途,结合课本第二章第一节内容,让学生了解行编辑程序在计算机编程中的重要性。

2. 行编辑程序基本操作:详细讲解插入、删除、替换和查找等操作,对应课本第二章第二节,通过实例演示和练习,使学生熟练掌握操作方法。

3. 行编辑程序与文本处理软件的对比:分析行编辑程序与文本处理软件的异同,以课本第二章第三节为例,让学生明白两者在实际应用中的适用场景。

4. 实践操作:安排学生进行行编辑程序的操作练习,结合课本第二章练习题,巩固所学知识,提高实际操作能力。

5. 行编辑程序在实际应用中的案例:介绍行编辑程序在编程、配置文件等领域的应用,参照课本第二章案例分析,激发学生学习兴趣,培养实际应用能力。

6. 编程习惯与规范:讲解编程过程中应注意的规范和习惯,结合课本相关内容,培养学生良好的编程素养。

简单行编辑

简单行编辑

电子信息工程学院
课程设计报告
设计名称:数据结构课程设计
简单行编辑程序
姓名:学号:
专业班级:电子信息工程学院
系(院):
设计时间:
设计地点:EDA实验室
要打开的文件内容显示出来。

3.在执行“5.Open the file”时,输入想要打开文件的正确路径,回车。

如果想要打开的文件不存在,则跳出运行。

4.在进行保存文件的操作时,在提示后输入想要保存的正确路径名,再按回车,文件即被保存。

六测试成果
图(1):
图(2):
图(3):
图(4):
七附录(源程序清单)
#include "stdio.h"
#include "stdlib.h" #include "string.h" struct line{。

数据结构课程设计——简单行编辑程序

数据结构课程设计——简单行编辑程序

数据结构课程设计——简单行编辑程序电子信息工程学院课程设计报告设计名称: 数据结构课程设计简单行编辑程序姓名: 学号:专业班级: 电子信息工程学院系 (院):设计时间:设计地点: EDA实验室指导教师评语:成绩:签名:年月日数据结构课程设计报告第 1 页,共 15 页1(课程设计目的1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。

2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。

2(课程设计任务与要求:任务问题描述:文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。

限制这些操作以行为单位进行的编辑程序称为行编辑程序。

被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的做法即不经济,又不总能实现。

一种解决方法是逐段的编辑。

任何时刻只把待编辑文件的一段放在内存,称为活区。

试按这种方法实现一个简单的行编辑程序,设文件每行不超过320个字符,很少超过80个字符。

要求:实现以下4条基本的编辑命令:(1)行插入。

格式:i<行号><回车><文本>. <回车>将<文本>插入活区中第<行号>行之后。

(2)行删除。

格式:d<行号1>[<空格><行号2>.]<回车>例如删除活区中第<行号1>行(到第<行号2>行)。

例如:例如:“d10?”和d1014?”。

(3)活区切换。

格式:n<回车>将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。

简单型编辑程序课程设计

简单型编辑程序课程设计

简单型编辑程序课程设计一、课程目标知识目标:1. 学生能理解简单型编辑程序的基本概念和功能。

2. 学生能掌握简单型编辑程序的操作步骤和使用方法。

3. 学生能了解简单型编辑程序在日常生活和学习中的应用场景。

技能目标:1. 学生能运用简单型编辑程序进行文本的创建、编辑和保存。

2. 学生能通过简单型编辑程序实现文本格式的调整,如字体、字号、颜色等。

3. 学生能运用简单型编辑程序进行基本的文本排版,如对齐、缩进、行距等。

情感态度价值观目标:1. 学生培养对计算机编程的兴趣,增强学习编程的自信心。

2. 学生在学习过程中,养成合作、探究、解决问题的良好习惯。

3. 学生能意识到编程在生活中的重要作用,认识到编程对个人和社会的价值。

课程性质:本课程为信息技术课程,旨在培养学生的编程兴趣和基本技能。

学生特点:六年级学生具有一定的计算机操作基础,对新鲜事物充满好奇心,但注意力集中时间较短。

教学要求:结合学生特点,课程设计应注重实践性、趣味性和互动性,以激发学生的学习兴趣和积极性。

通过分解课程目标为具体的学习成果,使学生在实践中掌握简单型编辑程序的使用方法,提高编程素养。

同时,注重培养学生的合作精神、创新意识和解决问题的能力。

二、教学内容1. 简单型编辑程序概述- 了解编辑程序的定义及作用- 掌握简单型编辑程序的特点2. 编辑程序的基本操作- 文本创建、编辑和保存- 文本格式调整(字体、字号、颜色等)- 文本排版(对齐、缩进、行距等)3. 实践操作与案例分析- 使用简单型编辑程序进行文本编辑与排版- 分析实际案例,了解编辑程序在生活中的应用4. 课堂互动与讨论- 学生互相分享学习心得和操作技巧- 针对实际问题进行讨论,提高解决问题的能力5. 教学内容安排与进度- 第一课时:简单型编辑程序概述,了解编辑程序的基本功能- 第二课时:编辑程序的基本操作,学习文本编辑与排版方法- 第三课时:实践操作与案例分析,巩固所学知识,提高实际操作能力- 第四课时:课堂互动与讨论,分享经验,解决实际问题教材章节关联:本教学内容与教材中“简单型编辑程序”章节相关,涵盖了该章节的核心内容,包括编辑程序的基本概念、操作方法及实践应用等。

软件技术基础课程设计——简单行编辑程序

软件技术基础课程设计——简单行编辑程序

沈阳航空工业学院课程设计简单的行编辑程序班级 / 学号 6402103/077_ 学生姓名赵壮指导教师张雷沈阳航空工业学院课程设计任务书课程名称软件技术基础课程设计院(系)电子信息工程学院专业电子信息工程班级6402103 学号200604021077 姓名赵壮课程设计题目简单行编辑程序课程设计时间: 2008 年7 月14 日至2008 年7 月27 日课程设计的内容及要求:[问题描述]文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。

限制这些操作以行为单位进行的编辑程序称为行编辑程序。

被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的作法既不经济,也不总能实现。

一种解决方法是逐段地编辑。

任何时刻只把待编辑文件的一段放在内存,称为活区。

试按照这种方法实现一个简单的行编辑程序。

设文件每行下超过320字符,很少超过80字符。

[基本要求]实现以下4条基本编辑命令:(1)行插入。

格式:i<行号><回车><文本>.<回车>将<文本>插入活区中第<行号>行之后。

(2)行删除。

格式:d<行号l>[<空格><行号2>=<回车>删除活区中第<行号1>行(到第<行号2>行=。

例如:“d10┛”和d1014┛”(3)活区切换。

格式: n<回车>将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。

(4)活区显示。

格式:p<回车>逐页地(每页20行)显示活区内容,每显示一页之后请用户决定是否继续显示以后各页(如果存在)。

印出的每一行要前置以行号和一个空格符,行号固定占4位.增量为l。

各条命令中的行号均须在活区中各行行号范围之内,只有插入命令的行号可以等于活区第一行行号减l,表示插入当前屏幕中第一行之前,否则命令参数非法。

指导教师年月日负责教师年月日学生签字年月日简单的行编辑一、题目分析通过对该软件课设的分析,了解到该课设要求设计一个程序,能够实现行插入、行删除、活区显示、活区切换四项功能。

简单行编辑系统数据结构课程设计

简单行编辑系统数据结构课程设计

数据结构课程设计说明书2012 年 8月 30 日1. 概述 (1)1.1 设计目的 (1)1.2 设计目标及要求设计要求 (1)1.3 设计进度 (1)1.4 分工 (2)2. 需求分析及总体设计 (2)2.1 数据结构 (2)2.2 功能框架 (2)3.功能模块详细设计 (2)3.1设计流程 (3)3.2主要源代码 (3)4.功能模块详细设计 (5)4.1设计流程......................................................................... 错误!未定义书签。

4.2主要源代码 (5)1. 概述1.1 设计目的被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的作法既不经济,也不总能实现。

所以设计这一种以行为单位进行的编辑程序。

主要是逐段地编辑。

任何时刻只把待编辑文件的一段放在内存,称为活区。

需要用到的数据结构是链表。

1.2 设计目标及要求设计要求(1)行插入:格式: i<回车><行号><回车><文本><回车>功能:在指定行之后插入一行或几行。

(2)行删除:格式: d<回车><行号1>[<空格><行号2>]<回车>功能:在指定行之后插入一行或几行。

(3)行替换:格式: i<回车><行号><回车><文本><回车>功能:在指定行之后插入一行或几行。

(4)活区切换:格式: n<回车>功能:将活区写入文件,并从文件中读入下一段,作为新的活区。

(5)活区显示:格式: p<回车>功能:逐页地(每页20行)显示活区内容,每显示一页之后请用户决定是否继续显示以后备页(如果存在)。

印出的每一行要前置行号和一个空格符,行号固定占4位,增量为1。

简单行编辑课课程设计

简单行编辑课课程设计

简单行编辑课课程设计一、教学目标本课程旨在让学生掌握简单行编辑的基本知识和技能,包括文本的复制、剪切、粘贴、撤销和redo 操作。

通过本课程的学习,学生应能够熟练使用文本编辑软件,提高学习和工作效率。

在情感态度价值观方面,学生应培养对计算机操作的兴趣和自信心,养成良好的计算机使用习惯。

二、教学内容本课程的教学内容主要包括以下几个部分:1.简单行编辑的基本概念和术语。

2.文本编辑软件的使用方法,如 Notepad、Word 等。

3.文本的基本操作,包括复制、剪切、粘贴、撤销和 redo。

4.实践练习,通过实际操作巩固所学知识。

三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,包括:1.讲授法:讲解简单行编辑的基本概念和术语。

2.讨论法:引导学生讨论文本编辑软件的使用方法和技巧。

3.案例分析法:分析实际案例,展示文本编辑在生活和工作中的应用。

4.实验法:让学生动手实践,进行文本编辑操作。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:选用符合课程要求的教材,如《计算机基础操作教程》。

2.参考书:提供相关的参考书籍,如《文本编辑与处理》。

3.多媒体资料:制作PPT、视频等多媒体资料,帮助学生更好地理解和学习。

4.实验设备:准备计算机、投影仪等实验设备,确保学生实践操作的顺利进行。

五、教学评估为了全面、客观、公正地评估学生的学习成果,我们将采用以下评估方式:1.平时表现:观察学生在课堂上的参与程度、提问回答等情况,记录并给予评价。

2.作业:布置与课程内容相关的作业,要求学生独立完成,并对作业质量进行评价。

3.考试:安排一次课程结束后的考试,测试学生对简单行编辑知识的掌握程度。

六、教学安排本课程的教学安排如下:1.教学进度:按照教材的章节顺序进行教学,确保每个章节都有足够的教学时间。

2.教学时间:每周安排两节课,每节课45分钟,共90分钟。

简单的行编辑器课程设计报告--学弟学妹们不用这么辛苦找了

简单的行编辑器课程设计报告--学弟学妹们不用这么辛苦找了

长春工程学院C语言课程设计题目编号和名称简单的行编辑器教师姓名学生姓名学生学号学生班级所在院系日期2011 年 6 月日简单的行编辑器目录1.题目要求…………………………………………2.需求分析………………………………………....3.总体设计…………………………………………4.详细设计…………………………………………5.总结……………………………………………….1.【题目要求】设计一个简单的行编辑器【要求】(1)设置一个简单的行编辑器,每行以回车结束(2)数据以文件形式存储(3)编辑器具有查找、替换、修改数据的功能2.【需求分析】根据题目要求,行编辑器的数据以文本文件存放在文件中,故需要提供文件的输入、输出等操作;在程序运行过程中要实现查找、替换、修改数据的功能应提供查找、替换、修改数据等操作;另外还应提供键盘式选择菜单功能选择。

3.【总体设计】根据上面的需求分析,可以将这一系统的设计分为输入、查找、替换修改数据、退出等四个模块(系统功能模块如图1所示)图1 行编辑器功能模块图4.【详细设计】1. 主函数主函数的设计一般较简单,一般只提供输入、功能处理和输出部分的函数调用其中各功能模块用菜单方式选择。

主函数流程图如图1-1 程序如下 void main() { cout<<"\t\t\t 简单行编辑.\n"; Str s1; Str s2; Str ss; Str ss1; Str ss2; int n; s1.input_str(); int choice=-1;while(choice!=0) 图1-1 行编辑器主函数流程 { //system("cls");cout<<"\t\t\t *******简单行编辑******\n"; cout<<"\t\t\t ***********************\n";cout<<"\t\t\t 1: 打印字符串.\n";cout<<"\t\t\t 2: 插入字符串.\n"; cout<<"\t\t\t 3: 删除字符串.\n";cout<<"\t\t\t 4: 复制整个字符串.\n";cout<<"\t\t\t 5: 替换字符串.\n";cout<<"\t\t\t 6: 查找一个字符串的位置.\n"; cout<<"\t\t\t 7: 继续输入. \n"; cout<<"\t\t\t 0: 退出.\n";cout<<"\t\t\t ************************\n";cout<<"\t\t\t 请选择: ";cin>>choice;switch(choice){case 1: cout<<"\t\t\t1: 打印出字符串.\n";s1.print_str(s1);break;case 2: cout<<"\t\t\t2: 插入字符串.\n";s1.insert_str(s1,s2,ss);break;case 3: cout<<"\t\t\t3: 删除字符串.\n";s1.delete_str(s1,s2);break;case 4: cout<<"\t\t\t4: 复制整个字符串.\n";s1.copy_str(s1,s2);break;/*case 5: cout<<"\t\t\t5: 替换字符串.\n";s1.instead_str(s1,s2,ss1,ss2,n);break;*/case 6: cout<<"\t\t\t6: 查找一个字符串的位置.\n";s1.find_position(s1,ss,n);break;case 7: cout<<"\t\t\t7: 继续输入.\n";s1.go_on_input(s1);break;case 0: cout<<"\t\t\t0: 退出.\n";break;default:cout<<"\t\t\terror.\n";break;}}}2.各功能模块的设计(1)输入、打印模块该程序需要输入一段字符串作为其待处理数据,所以通过键盘输入字符串作为待处理数据,以回车进入主函数界面。

数据结构课程设计:行编辑程序

数据结构课程设计:行编辑程序

一、需求分析由于被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的作法既不经济,也不总能实现。

而用行编辑把待编辑文件的一段放进内存,称为活区。

本行编辑程序是以每行不超过320个字符为前提的。

每次编辑会读入80行,活区每次只显示20行。

1.该程序要实现以下基本编辑命令和一些相关的命令:(1)行插入。

格式:i<回车><行号><回车><文本><回车>。

将<文本>插入活区第<行号>行之后。

(2)行删除。

格式:d<回车><行号1>,<行号2><回车>。

删除活区中第<行号1>行到第<行号2>行。

(3)活区切换。

格式:n<回车><页数><回车>。

由于每次从输入文件读入80行,而活区每页显示20行,而活区切换就是要切换到需编辑的页面上去。

(4)活区显示。

格式p<回车>。

显示当前要编辑的活区内容。

印出的每一行都有一个前置行号和一个空格符,行号固定为2位,增量为1。

(5)清屏。

格式:c<回车>。

(6)获得帮助。

格式:h<回车>。

(7)退出。

格式:e<回车>。

二、概要设计程序结构流程图:存储结构的定义如下:typedef struct text{char string[80];//存储每一行的元素struct text *next;//指向后一个节点的指针int flat;//确定此行是否被删除的标志}text,*textp;功能函数:Status Createlist(textp &head);功能:建立一个80个节点的链表,是整个活区的大小int del(textp head);功能:删除显示的活区的任意一行。

int display(textp &head);功能:按照每页20行的规格显示活区的内容。

C语言课程设计简单的行编辑器.

C语言课程设计简单的行编辑器.

语言程序设计报告姓名:班级:学号:指导教师:课题:简单的行编辑器简单的行编辑器题目要求1.设置一个简单的行编辑器,每行以回车结束。

2.数据以文件形式存储。

3.编辑器具有查找,替代,修改数据的功能。

需求分析根据题目要求,数据以文件的形式存储,所以应提供文件的输入,输出等操作;还需要文件具有查找,替换,修改数据的功能。

总体设计根据上面的需求分析,可以将这个系统的设计分为如下七大模块: 编辑,查找,修改,,删除,替换,保存,退出。

四.详细设计1.主函数为了各模块的独立性,主函数一般设计得比较简单,本系统主要用主函数打开上次保存的数据和进入主菜单函数流程图打开上次保存文件程序{FILE *pfiiepfile=fope n( "L in edit.txt","a+");readfile(l in es,pfile);fclose(pfile);menu (I in es);}int readfile(char (*lines)[MAXC],FILE*pfile) { int i=0;while(!feof(pfile)){fgets(li nes[i],MAXC,pfile); /*if(!strstr(li nes[i],"\n")) return 1;*/i++;} return 0;}2. 主菜单函数流程图程序void men u(char (*li nes)[MAXC]){ int selection;do{/************* main() ********************* z 主^函^数 ************************************ 进入主菜单函数system("cls");puts("\t\t***********************MUNU***************** puts("\t\t1.Edit new line");puts("\t\t2.Replace line");puts("\t\t3.Delete line"); puts("\t\t4.Searchline");puts("\t\t5.Modify data");puts("\t\t6.Save");puts("\t\t0.Exit");printf("Please select a number:[ ]\b\b"); do{scanf("%d",&selection);if(selection<0||selection>6) { printf("Invalidselection!Please try again "); printf("andselect a number:[]\b\b\n");}else break;}while(true);switch(selection){case 1:edit(lines);break;case 5:modify(lines);break;case 3:mydelete(lines);break;case 4:search(lines);break;case 2:replace(lines);break; case6:savetofile(lines);break;case 0:myexit(lines);}} while(true); }3. 各功能模块设计 (1) 编辑模块 流程图puts("\n\n\t\t ****************************************** **\n");mt 1=0,01^81=0清屏 clisciQ ; hnes[g(U]!=O经7二.八 iidBx++,pint 旷兀d:pmtfij "ynlnPlease type a new luteffliEhtstdin),i=0; ~「一-_ 晦[MT : /—辱 ts(liiue s[i) ,MAXC^tdii^cantiKiE,retEm;i++;程序void edit(char (*li nes)[MAXC]){int i,i ndex;/*system("cls");*/clrscr(); for(i=0,i ndex=O;i<MAXL;i++) if(li nes[i][0]!=0){in dex++;printf("%d: %s",index,lines[i]);}prin tf("\n\n Please type a new lin e:\n"); fflush(stdi n);for(i=0;i<MAXL;i++)/** ***************************编辑 ***********************************{if(li nes[i][O]=='\O'){ /*每行第一个字符作为标志位 fgets(li nes[i],MAXC,stdi n);return;}elsecon ti nue;}}(2) 替换模块niti; mtindEne,血tj,k,II1 clisci();i=0;k-H-: |〜 ------ _ k-=indliiw /输由騎选定行pmtf[ "Flease tj/pe youf new line :ln")memseXlinesljl.O^XC),fflush( stdin);堆tsOiite 即,MAXQ stdii^;breek ;程序void replace(char (*li nes)[MAXC]){空行可写入*/ /** **************************** 替换 ****************************************/ i<MAXL1卄scant 洛;jO,k=Q;int i;int indline;int j,k;do{/*system("cls"); */clrscr();/* 打印所有 */for(i=0;i<MAXL;i++)if(lines[i][0]!=0)printf("%d: %s",i+1,lines[i]);printf("\n\nWhich line do you prefer to replace?(To quit please input0)[ ]\b\b");scanf("%d",&indline);if(indline==0)return;else{for(j=0,k=0;j<MAXL;j++){if(lines[j][0]!=0) k++;if(k==indline){printf("\n\nThe line to be replaced is: \n%s",lines[j]);printf("Please type your new line:\n");memset(lines[j],0,MAXC);fflush(stdin);fgets(lines[j], MAXC, stdin);break;}}}}while(true);}(3) 删除模块流程图删除即在查找到某行的基础上再删掉,其具体流程图可参照查找的流程图do{/*system("cls");*/clrscr();for(i=0,i ndex=O;i<MAXL;i++)if(li nes[i][0]!=0){in dex++;printf("%d: %s",index,lines[i]);}prin tf("\n\nWhich line do you prefer to delete?(To quit please in put0)[ ]\b\b");scan f("%d",&in dli ne);if(i ndli ne==O)return;else for(j=0,k=0;j<MAXL;j++){if(lines[j][0]!=0) k++;if(k==in dli ne)查找行删除行程序/*******************************void mydelete(char (*l ines)[MAXC]) {int i,i ndex;int in dli ne;int j,k;删 *************************************{printf("The line to be deleted is: \n%s\n",lines[j]);memset(li nes[j],O,MAXC);system("pause");break;}}}while(true);}查^找 ****************************************/ void search(char (*lin es)[MAXC]) { irudjex++;pnntft^d : 丫鼎;ihAx, lines®);丄卄/************************** (4)查找模块流程图 程序int i,index; int indline; int j,k;do{/*system("cls");*/ clrscr();for(i=0,index=0;i<MAXL;i++)if(lines[i][0]!=0){index++;printf("%d: %s",index,lines[i]);}printf("\n\nWhich line do you want to search?(To quit please input0)[ ]\b\b");scanf("%d",&indline); if(indline==0)return; elsefor(j=0,k=0;j<MAXL;j++){if(lines[j][0]!=0) k++; if(k==indline){printf("The line to be searched is: \n%s\n",lines[j]);system("pause");break;}}}while(true);}(5)修改模块流程图删除模块的流程图也是在查找模块的基础上稍加改动,在此不再赘述其流程图可简单写为查找行修改行程序/******************************修尖^改 ********************************/* 在 sSrc 中用 sReplaceStr 替换 sMatchStr */int modifystr(char *sSrc,char *sMatchStr,char *sReplaceStr){int Strin gLe n;char caNewStri ng[MAXC];char *Fi ndPos = strstr(sSrc,sMatchStr);if((!Fi ndPos )|| (!sMatchStr))return -1;while(Fi ndPos){memset(caNewStri ng,0,sizeof(caNewStri ng));Strin gLe n=Fin dPos-sSrc;strn cpy(caNewStri ng,sSrc,Stri ngLe n); strcat(caNewString,sReplaceStr);strcat(caNewStri ng,Fi ndPos+strle n(sMatchStr)); strcpy(sSrc,caNewString);Fin dPos = strstr(sSrc,sMatchStr); }return 0;}void modify(char (*li nes)[MAXC]){int i,indline;char buf[MAXC];int k;int j;char* token=0;char search[MAXC],replace[MAXC];do{ /*system("cls"); */ clrscr();for(i=0;i<MAXL;i++) if(lines[i][0]!='\0') printf("%d: %s",i+1,lines[i]);printf("\n\nWhich line do you prefer to modify?(To quit please input 0)[ ]\b\b");scanf("%d",&indline); if(indline==0) return;else{ for(j=0,k=0;j<MAXL;j++){ if(lines[j][0]!=0) k++; if(k==indline){ printf("\n\nThe line to be replaced is: \n%s",lines[j]);printf("\n\nInput the search string and the replace ");printf("(To quitplease inputq):");memset(buf,0,MAXC); fflush(stdin);fgets(buf, MAXC, stdin); k= strlen(buf)-1;if(buf[k]=='\n') buf[k]='\0'; if(*buf=='q'&&*(buf+1)=='\0') return;memset(search,0,MAXC); memset(replace,0,MAXC);token =strtok(buf, " "); strcpy(search,token);token =strtok(NULL," ”); strcpy(replace,toke n);modifystr(l in es[j],search,replace); break;}}}}while(true);}(6)保存模块流程图FILE inti;i=0fclose(pfile)fpriiitf("^The lilies liasbeensave tUti');那协诚"pa use");程序void savetofile(char (*lin es)[MAXC]){FILE *pfile;int i;pfile=fope n("Li nedit.txt","w+");for(i=0;i<MAXL;i++)if(lines[i][O]!='\O') fputs(lines[i],pfile);fclose(pfile);prin tf("\nThe lines has bee n saved.' n"); system("pause"); }(7)退出模块流程图程序void myexit(char (*l in es)[MAXC]){char c;prin tf("Save the lines to the file?(y/n 门; fflush(stdi n);c=getchar();if(c=='n') exit(1);savetofile(l in es);exit(1);}五.上机操作1.主菜单函数邑C;\DOCUME-1 \ADMINI^ 1、梟面\TU EXE哄*JC JOCKNU 艮■ X;M 算J*X;M 耳図 8< JC 耳:M St X 耳>t1.Edit new line2.Kepiace line 』・Dftlete line4.Searcli line5-Modif y data6.S AUSB.ExitPlta^e seLeet a nunber:f_]2.编辑模块Which line do prefer to* replace? CTo quit please input 11 JThe line to be replaced is: 1234567B9Please type your neu lime: 555556789.3 •替换模块Mhiich line do you prefer to replace? CTa quit please input L ]吓C:\DOCUME-1 \ADMINI-1 '桌面\TCJE XE X 4查找模块.Which line do ^ou ifant to search?<To> quit please input 0> L^J5.修改模块區 匚:\DO ajMEellADMINL-l 、車面\TC*E5C£ Ulrich line do you pref er ta de leteYCTo quit please input U> 12 i Ths lina to be daletsd is:Press *ny keu to continue * ” * 7 •保存模块匡 C ;\DOCUME^l\ADMINI-vl \J£ 面\TUFXEiMXlIHiKJfIgSOCXMEKHJtJitJMIXXX 胃 HXXNIUNII X 赳 NKXJMIKXX 宾?CiMXWiMNXX1. Edit new line2. Replace line 3delete line 4.Search line 5■用odif y data来:K X Mi K 半耳壬 14 岳耳X Jt 胃 KIHt-ME MrSKHMX 胃 梵汪水胃■:・HM :M KN 来Please select 帚 number*(61 Tlie lines Ttas been saved.Press 凰ny key to continus ・- <H>125555567B99B8884321 6.SaveB.Exit6 •删除模块&退出模块。

数据结构-课程设计-简单行编辑程序

数据结构-课程设计-简单行编辑程序
3)测试数据
由学生依据软件工程的测试技术自己确定。注意测试边界数据,如首行、尾行。
4)实现提示
(1) 设活区的大小用行数activemaxlen(可设为100)来描述。考虑到文本文件行长通常为正态分布,且峰值在60到70之间,用320×activemaxlen大小的字符数组实现存储将造成大量浪费。可以以标准行块为单位为各行分配存储,每个标准行块含81个字符。这些行块可以组成一个数组,也可以利用动态链表连接起来。一行文字可能占多个行块。行尾可用一个特殊的ASCII字符(如(012)8)标识。此外,还应记住活区起始行号。行插入将引起随后各行行号的顺序下推。
(2) 初始化过程包括:请用户提供输入文件名(空串表示无输入文件)和输出文件名,两者不能相同。然后尽可能多地从输入文件中读入各行,但不超过activemaxlen-x。x的值可以自定。
(3) 在执行行插入命令的过程中,每接收到一行时到要检查活区大小是否已达activemaxlen。如果是,则为了在插入这一行之后仍保持活区大小不超过activemaxlen,应将插入点之前的活区部分中第一行输出到输出文件中;若插入点为第一行之前,则只得将新覆盖后一个。然后将要插入的内容写入插入处即可。
行与行之间交换,这个比较容易实现。只需将要交换的两行的内容交换即可。
三、总体设计
程序的功能图:
程序流程图


四、详细设计
struct Row行的结构体,包含行的内容,行的编号;
class Active活区的类,包含活区内行的总数量、行的结构体;
2)基本要求
实现以下4条基本编辑命令:
(1) 行插入。格式:i<行号><回车><文本><回车>

简单行编译程序

简单行编译程序

摘要此次课程设计设计了一个简易的行编辑器,该程序主要用于行编辑的几个操作,插入,前一个字符删除,前一行删除。

主要由C语言实现。

基于对行编辑的需求,该程序的功能在于,能够编写一段字符,若出现错误,可以及时的进行改正,若整体错误比较多,还可以直接删除一整行,进行修改。

程序算法立足于书本并适当改良就能够实现文本的一些特定操作。

关键词行编辑C语言程序算法引言目前社会上文字编辑系统发展飞快,文本编辑软件在人们的日常生活和学习、科研、生产等各个方面有着重要的应用。

因此开发一款使用的编辑器是很必要的。

此次设计拟开发一个简易行编辑器以提高对所学知识的掌握程度。

在实际应用中往往需要在编辑不同的文本信息时可完成文字信息录入、统计出文字、数字、空格的个数等使用功能。

因此需要一个有类似功能的简易行编辑器以便实现对文本信息录入、子串删除的功能。

而随着计算机科学的日渐成熟对于复杂的文字编辑计算机已经能充分发挥其优越性。

作为计算机应用的一部分使用计算机对这些功能的实现可以大大提高工作的效率。

因此开发此类软件是一件很有必要的事情。

通过根据现有的知识对软件所需的功能进行评估分析编写算法最终编写出此程序本系统实现在编辑不同的文本信息时可完成文字信息录入、即时修改错误。

目录摘要 (I)引言............................................................... I I 一用类c语言定义相关的数据类型. (1)1.先定义本实验中用到的栈的ADT表示为: (1)2. 栈表示: (1)二各模块的伪码算法 (2)1. 构造空栈 (2)2. 销毁栈 (2)3. 清空栈 (2)4. 进栈 (2)5. 出栈 (3)6. 判断栈是否为空 (3)三函数的调用关系图 (4)四调试分析 (5)调试中遇到的问题及对问题的解决方法: (5)五测试结果 (5)1. 程序主界面 (5)2. 数据测试 (6)设计总结 (6)主要参考文献 (8)致谢 (9)源程序 (10)一用类c语言定义相关的数据类型1.先定义本实验中用到的栈的ADT表示为:ADT Stack{数据对象:D={ai |ai为字符,i=1,2,…n,n>=0 }数据关系:R={<ai-1,ai> |ai-1,ai∈D,i=2,…,n}基本操作:initstack(&s) 构造一个空栈destroystack(&s) 销毁栈push(&s,e) 元素e入栈pop(&s,e) 栈顶元素出栈,用e返回其值clearstack(&s); 栈的清空stacklength(s); 栈的长度gettop(s,&e); 取栈顶元素stackempty(s) 判断栈是否为空2. 栈表示:#define stack_init_size 100#define stackincrement 10#define error 0#define ok 1typedef struct sqstack{//栈的存储表示char *base;char *top;int stacksize;}sqstack;status initstack(sqstack &s);void destorystack(sqstack &s);void clearstack(sqstack &s);//栈的清空int stacklength(sqstack s);//求栈的长度status gettop(sqstack s,selemtype &e);//取栈顶元素status stackempty(sqstack s);//判断栈是否为空status push(sqstack &s,selemtype e);//出栈status pop(sqstack &s,selemtype &e);//进栈二各模块的伪码算法1.构造空栈int initstack(sqstack s){//构造空栈s.base=(char*)malloc(stack_init_size*sizeof(char));if(!s.base)return error;s.top = s.base;s.stacksize=stack_init_size;return ok;}2.销毁栈void destorystack(sqstack s){//销毁栈free(s.base);s.stacksize=0;}3.清空栈void clearstack(sqstack s){//栈的清空s.stacksize=0;}4.进栈int push(sqstack s,char e){//进栈if(s.top-s.base>=s.stacksize){s.base=(char*)realloc(s.base,(s.stacksize+stackincrement)*sizeof(char)); if(!s.base)return error;s.top=s.base+s.stacksize;s.stacksize+=stackincrement;}*s.top++=e;return ok;}5.出栈int pop(sqstack s,char e){//出栈if(s.top=s.base)return error;e=*--s.top;return e;}6.判断栈是否为空i nt stackempty(sqstack s){//判断栈是否为空if(s.top=s.base)return ok;else return error;}三函数的调用关系图四调试分析调试中遇到的问题及对问题的解决方法:这次数据结构的课设中我们小组做的是行编辑器,主要在于对栈活用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简单行编辑程序题目:简单行编辑程序班级:计算机科学与技术(非师范)姓名:学号:完成日期:2010-6-251.需求分析以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?并明确规定:文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。

限制这些操作以行为单位进行的编辑程序称为行编辑程序。

(1) 输入的形式和输入值的范围;无范围(2) 输出的形式;字符串(3) 程序所能达到的功能;实现以下4条基本编辑命令:(1)行插入。

格式:i<行号><回车><文本><回车>将<文本>插入活区中第<行号>行之后(2)行删除。

格式:d<行号1>[□<行号2>]<回车>删除活区中第<行号1>行(到第<行号2>行)。

两种格式的例子是:“d10↙”和“d10□14↙”(3)活区切换。

格式:n<回车>将活区写入输出文件,并从输入文件中读入下一段,作为新的活区。

(4)活区显示。

格式:p<回车>(4) 测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。

2.概要设计说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。

typedef struct text{char string[80];//存储每一行的元素struct text *next;//指向后一个节点的指针struct text *pre;//指向前一个节点的指针int num;//每一行元素的长度int flat;//确定此行是否被删除的标志}text;FILE *fp,*out;//fp是执行被打开的文件,out指向被写入的文件text *head;//链表的头指针int n=0,sum,delnum,xiugai=0,page=0;//file://修改用来指示文件是否被修改过,如果修改过才回存盘。

page用来计算显示的//file://页数.delnum用来存储被删除的字节数,sum存储一页的总字节数3.详细设计实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数和过程的调用关系图。

cmd=getchar();printf("\n请输入命令(按E键退出):");cmd=getchar();switch(cmd){case 'e':case 'E':if(xiugai==1)saveall();freemem();if(fp) fclose(fp);if(out) fclose(out);system("cls");return 0;case 'o':case 'O':Openfiles();break;case 'p':case 'P':Createlist();display();break;case 'n':case 'N':saveanddisplay(10);break;case 'd':case 'D':del();break;case 'i':case 'I':insert();break;default:printf("\n\n\n输入错误");4.调试分析当我调试程序时发现前面的子程序调用后面的子程序竟然是错误的,明明已经定义了的子程序竟然没有定义这令我大为不解不过后来当我把被调用的程序放到前面,程序就顺利运行了。

5.用户使用说明说明如何使用你编写的程序,详细列出每一步的操作步骤。

当你使用这个程序时,会出现一个简单的提示界面,你可以选择相应的help选项,来看操作说明。

6.测试结果列出你的测试结果,包括输入和输出。

这里的测试数据应该完整和严格,最好多于需求分析中所列。

7.附录带注释的源程序。

如果提交源程序软盘,可以只列出程序文件名的清单。

#define NULL 0#define OK 0#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <conio.h>typedef struct text{char string[80];//存储每一行的元素struct text *next;//指向后一个节点的指针struct text *pre;//指向前一个节点的指针int num;//每一行元素的长度int flat;//确定此行是否被删除的标志}text;FILE *fp,*out;//fp是执行被打开的文件,out指向被写入的文件text *head;//链表的头指针int n=0,sum,delnum,xiugai=0,page=0;//file://修改用来指示文件是否被修改过,如果修改过才回存盘。

page用来计算显示的//file://页数.delnum用来存储被删除的字节数,sum存储一页的总字节数void byebye()//没有具体用处,只是写着玩的,在屏幕上显示一个bye{puts("\t\t\t******** * * ********");puts("\t\t\t* * * * * ");puts("\t\t\t* * * * * ");puts("\t\t\t* * * * * ");puts("\t\t\t******** * ********");puts("\t\t\t* * * * ");puts("\t\t\t* * * * ");puts("\t\t\t* * * * ");puts("\t\t\t******** * ********");}void HELP()//帮助函数,显示一些命令的格式{printf("\n\t**********************************************************\n"); printf("\t** 打开文件: o<行号><文件名><回车> **\n");printf("\t** 行插入格式: i<行号><回车><文本><回车> **\n");printf("\t** 行删除格式: d<行号1>[<空格><行号2>]<回车> **\n");printf("\t** 活区切换格式: n<回车> **\n");printf("\t** 活区显示格式: p<回车> **\n");printf("\t** 注意:在执行所有命令前必须先用o命令打开文件,并 **\n");printf("\t** 用p命令显示出来 **\n");printf("\t**********************************************************\n"); system("pause");printf("\n\n\n");}void ABOUT()//也是写着玩的{printf("\n\t\t*****************************************\n");printf("\t\t** welcome to the program **\n");printf("\t\t** all work and no play make jack adull boy **\n"); printf("\t\t** enjoy your work **\n"); printf("\t\t*****************************************\n");system("pause");system("cls");printf("\n\n\n");}void Createlist()//建立一个十个节点的链表,是文本中的一页{text *p1,*p2;p1=p2=(text *)malloc(sizeof(text));head=NULL;while(n<10){n=n+1;if(n==1) head=p1;else{p2->next=p1;p1->pre=p2;p1->flat=0;}p2=p1;p1=(text *)malloc(sizeof(text)); }p2->next=NULL;}void freemem()//释放链表所占的内存{text *p;for(p=head;head!=NULL;){head=p->next;free(p);p=head;}}int Openfiles()//打开文件的函数{char name[30],outname[30];puts("请输入要打开的文件名:");scanf("%s",name);if((fp=fopen(name,"r+"))==NULL){printf("打不开原文件! \n");exit(0);}puts("请输入要写入的文件名:");scanf("%s",outname);if((out=fopen(outname,"w+"))==NULL){printf("打不开目标文件!\n");exit(0);}return 0;}int display()//从文件中读入到链表中,并显示出来{int i;char conti='y';text *p;while((!feof(fp))&&(conti=='y'||conti=='Y')){page++;printf("\t\t第%d页\n",page);for(i=0,p=head,sum=0;(i<10)&&(!feof(fp));i++,p=p->next){fgets(p->string,sizeof(p->string),fp);puts(p->string);p->flat=1;p->num=strlen(p->string);sum=sum+p->num;}puts("Continue?(Y/N):");conti=getche();if(feof(fp)){puts("\n文件已经结束!");return 0;}}return 0;}int saveanddisplay(int hang)//命令n执行的函数,用来将活区的内容显示并读入下一页内容{int i,endflat=0;char conti='y';text *p=NULL;page++;for(i=0,p=head;i<hang;i++,p=p->next) //file://将活区写入文件if(p->flat==1){fputs(p->string,out);p->flat=0;}if(!feof(fp))printf("\t\t第%d页\n",page);for(i=0,p=head,sum=0;(i<10)&&(!feof(fp));i++,p=p->next)//从文件读入活区 if(fgets(p->string,sizeof(p->string),fp)){puts(p->string);p->flat=1;p->num=strlen(p->string);sum=sum+p->num;}if(feof(fp))printf("文件已经结束!");return 0;}int saveall()//退出编辑函数后执行的函数,将所有的内容存盘{int i,endflat=0;char conti='y';text *p;for(i=0,p=head;i<10;i++,p=p->next) //file://将活区写入文件if(p->flat==1){fputs(p->string,out);p->flat=0;}while(!feof(fp))//将其余的内容写入文件fputc(fgetc(fp),out);return 0;}int del()//删除d命令对应的函数,用来删min-max中的行,用结构体中的flat表示是否被删除{text *p1,*p2,*p3;int min,max,i;xiugai=1;scanf("%d %d",&min,&max);if(head==NULL){printf("\nlist null!\n");return 0;}p1=p2=head;for(i=0;i<min-1;i++)/*找到要删除的第一行*/p1=p1->next;for(i=0;i<max;i++)/*找到要删除的最后一行*/p2=p2->next;for(delnum=0;p1!=p2;p1=p1->next)/*删除中间的节点,将flat赋值0*/ {p1->flat=0;delnum=delnum+p1->num;}for(i=0,p3=head;i<10;i++,p3=p3->next)//显示删除后的结果if(p3->flat==1)puts(p3->string);saveanddisplay(10);//将删除后的结果存盘并显示下一页内容(十行)xiugai=1;return 0;}int insert()//插入i命令对应的函数,在i行后插入文本{int hang,i,increhang=1,number=1;text *p,*p1,*p2;xiugai=1;scanf("%d",&hang);p=p1=NULL;for(i=0,p1=head;i<hang-1;i++,p1=p1->next);//找到要插入行的前一列 p=(text *)malloc(sizeof(text));//为插入行分配空间p->flat=1;p->next=p1->next;//从此行向下四行将插入行插入到链表中p->pre=p1;p1->next->pre=p;p1->next=p;p->string[0]=getchar();p->string[0]=getchar();for(i=1;(i<80)&&(p->string[i-1]!='^');i++){p->string[i]=getchar();if((i+1==80)&&(p->string[i]!='^'))//如果插入的内容超过一行{ //file://的容量,则分配下一行空间p1=p; //file://并将其连入链表p=(text *)malloc(sizeof(text));p->flat=1;p->next=p1->next;p->pre=p1;p1->next->pre=p;p1->next=p;i=0;increhang++;}p->num=i;}p->string[i-1]='\n';p->string[i]='\0';puts("修改后的链表:");for(p2=head;p2!=NULL;p2=p2->next)//显示出修改后的链表puts(p2->string);saveanddisplay(10+increhang);//将修改后的链表存盘并显示下一页内容 xiugai=1;return 0;}int EDIT()//编辑函数,用来接受处理编辑命令{char cmd;do{cmd=getchar();printf("\n请输入命令(按E键退出):"); cmd=getchar();switch(cmd){case 'e':case 'E':if(xiugai==1)saveall();freemem();if(fp) fclose(fp);if(out) fclose(out);system("cls");return 0;case 'o':case 'O':Openfiles();break;case 'p':case 'P':Createlist();display();break;case 'n':case 'N':saveanddisplay(10);break;case 'd':case 'D':del();break;case 'i':case 'I':insert();break;default:printf("\n\n\n输入错误");}}while(cmd!='e'&&cmd!='E');return 0;}int main()//主函数,用来接受命令{char cmd;do{printf("\n\t\t****************************\n"); printf("\t\t** 1 EDIT **\n");printf("\t\t** 2 HELP **\n");printf("\t\t** 3 ABOUT **\n");printf("\t\t** 4 EXIT **\n");printf("\t\t****************************\n");printf("\n\n请选择1,2,3,4:");cmd=getche();switch(cmd){case '4' : system("cls"); byebye(); break;case '2' : system("cls"); HELP(); cmd=0; break; case '3' : system("cls"); ABOUT(); cmd=0; break; case '1' : EDIT(); cmd=0; break;default : printf("\n\n\n输入错误\n");}}while(cmd!='4');return 0;}。

相关文档
最新文档