参考简单行编辑程序报告

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

沈阳航空工业学院

课程设计

简单的行编辑程序

班级 / 学号 *******/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,表示插入当前屏幕中第一行之前,否则命令参数非法。

指导教师年月日

负责教师年月日

学生签字年月日

简单的行编辑

一、题目分析

通过对该软件课设的分析,了解到该课设要求设计一个程序,能够实现行插入、行删除、活区显示、活区切换四项功能。分别设计出四个模块,用主函数集中调度,这样就可以方便快捷的实现各个函数以及整体函数的功能。其具体做法是,先在程序的开始定义一个结构体,其中包括五个数据项,分别是存储每一行元素的项char string[80]、指向前一个结点的指针struct text *pre、指向后一个结点的指针struct text *next、记录每一行元素的长度int num以及判断是否删除的标志int flat。当flat=0时,该行被删除;当flat=1时,该行不删除。对文本的编辑,每次都采用先打开文本文件的形式,因为这样可以更直观的看出编辑后文本的变化。实现活区显示的做法是建立一个链表,该链表有20个结点,在一页中放不下的部分为活区,执行p后可以显示出第一页的部分,在continue之后选择Y 便可以显示出活区的部分,即第二页的内容。实现活区切换的做法是执行n后,先判断活区的内容,如果没被删除就把文本中内容读入到链表中,便可以直接显示出获取部分,即第二页的内容。实现删除的做法是执行d,定义两个指针分别指向要删除的结点,删除两个结点之间的内容,最后将删除后的结果存盘并显示下一页内容。实现插入的做法是执行i,定义一个指针变量插入行的前一行,然后给插入行分配存储空间,将插入行的内容插入到链表中,便实现行插入的功能。程序还定义了一个函数来释放所占链表的内存,在退出程序后利用保存函数将内容存盘.

二、设计过程(程序流程图)

1.主函数的设计

主函数采用do—while循环,循环体主要调用三个子函数:1 EDIT(),2 HELP (),3 EXIT()。行编辑程序的四种主要功能都在EDIT()编辑函数中执行。HELP()函数是提示用户各种功能的执行方式,主函数通过给字符变量cmd赋初值来选择是结束程序还是继续执行循环体中的内容。主程序流程图如1所示。

图1 主函数流程图

2.帮助函数HELP ()子程序设计

帮助函数的主要作用是在用户忘记如何操作的情况下在屏幕上给用户显示提示操作的信息,使行插入,行删除,活区显示,活区切换的执行方式,其流程图如图2所示。

图2 帮助函数HELP ()流程图

3.编辑函数EDIT ()子程序设计

简单行编辑程序的各种功能在编辑函数中实现。首先给字符型变量cmd 赋初值,通过switch(cmd)来选择执行哪种功能。退出编辑函数:E(e),调用save all cmd=1

开始 定义字符变

量cmd

给cmd 赋初值

switch(cmd)

1编辑函数

EDTT () 2帮助函数 HELP () 3退出

结束

cmd=2 cmd=3 开始

结束

()函数将内容存盘,然后调用freemem()释放链表空间。打开文件:O(o),调用openfiles()函数打开文件。执行活区显示:P(p)。执行行删除:D(d)。执行行插入:I(i)。执行活区切换显示:N(n)。程序流程图如图3所示。

图3 编辑函数流程图

4.活区显示函数display()子程序设计

在活区显示中首先把文本内容链入链表,函数中用page来实现页码的自增。函数种定义了一个指向struct text结构体的指针变量p ,在文件fp非空和行号小于20的情况下,利用fgets函数使p->string从打开的文件fp中得到字符的值,然后输出每一行的行号和每一行的内容,在此函数的最后还可以利用Y和N来决定是否继续显示下一个活区的内容。其程序流程图如图4所示。

N

图4 活区显示函数流程图

5.活区切换函数saveanddisplay(20)子函数设计

活区切换函数实现活区之间的切换,把文本的每一页(20行)作为一个活区,可以逐页的把活区内容显示出来。在活区切换函数中定义了一个指向struct text 结构体的指针变量p赋初值*p=NULL,当i小于20时,如果行没有被删除(flag=1)就通过fputs函数把活区内容写入到文件(out).打开文件fp,如果文件非空,用fgets函数从文件fp读入字符串,并用puts函数输出。如果文件fp为空就输出file end!。程序流程图如图5所示。

图5 活区切换函数流程图

相关文档
最新文档