摘要本课程设计是实现“简单的行编辑程序”,此编辑程序的主要用处是接受用户从终端输入的程序和数据,并存入用户的数据区。
这个行编辑程序需要实现的功能包括:能够设立一个输入缓冲区,用于接受用户输入的一行字符然后逐行存入用户数据区;用户在输入出差错时,并在发现有误时可以及时更改。
此程序是一个课程设计的程序,只是模拟的一个简单的行编辑器,如需要真正设计一个行编辑器,那么还需要更为完善的程序。
关键词:行编辑;数据结构;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课程设计的题目及内容本次课程设计的题目为:简单的行编辑程序。
被编辑的文本文件可能很大,全部读入内存的做法既不经济也不总能实现。
一种解决办法是逐行地编辑,任何时刻只把待编辑文件的一行放在内存,称为活区。
允许输入出错时发现错误并及时更正。
试按照这种方法实现一个简单的行编辑程序。
通过该题目的设计过程,可以加深理解线性表及栈的逻辑结构、存储结构,掌握线性表及栈上基本运算的实现,进一步理解和熟练掌握课本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题,培养学生的动手能力。
通过对该软件课设的分析,了解到该课设要求设计一个程序,能够实现行插入、行删除、活区显示、活区切换四项功能。
分别设计出四个模块,用主函数集中调度,这样就可以方便快捷的实现各个函数以及整体函数的功能。
其具体做法是,先在程序的开始定义一个结构体,其中包括五个数据项,分别是存储每一行元素的项char string[80]、指向前一个结点的指针struct text *pre、指向后一个结点的指针struct text *next、记录每一行元素的长度int num以及判断是否删除的标志int flat。
当flat=0时,该行被删除;当flat=1时,该行不删除。
对文本的编辑,每次都采用先打开文本文件的形式,因为这样可以更直观的看出编辑后文本的变化。
实现活区显示的做法是建立一个链表,该链表有20个结点,在一页中放不下的部分为活区,执行p后可以显示出第一页的部分,在之后输入n便可以显示出活区的部分,即第二页的内容。
实现活区切换的做法是执行n后,先判断活区的内容,如果没被删除就把文本中内容读入到链表中,便可以直接显示出获取部分,即第二页的内容。
实现删除的做法是执行d,定义两个指针分别指向要删除的结点,删除两个结点之间的内容,最后将删除后的结果存盘并显示下一页内容。
实现插入的做法是执行i,定义一个指针变量插入行的前一行,然后给插入行分配存储空间,将插入行的内容插入到链表中,便实现行插入的功能。
1.2 题目要求1.用栈实现简单的行编辑程序,主要功能有:行插入(格式:i<行号><回车><文本><回车>,即将<文本>插入活区中的第<行号>行之后);行删除(格式:d<行号1>[ <行号2>]<回车>,删除活区中第<行号1>行(到第<行号2>行),两种格式的例子是:“d10 ”和“d10 14 ”);活页切换(格式:n<回车>,将活区写入输出文件,并从输入文件中读入下一段,作为新的活区);活区显示(格式:p<回车>,逐页地(每页20行)显示活区内容,每显示一页之后由用户决定是否继续显示以后各页(如果存在)。
印出的每一行要前置行号和一个空格符,行号固定占4位,增量为1);2.设文件每行不超过320个字符,很少超过80个字符,由学生依据软件工程的测试技术自己确定,注意测试边界数据,如首行、尾行。
算法对于合法的输入数据都能产生满足规格说明要求的结果;3.算法对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;对算法实现过程中的异常情况能给出出错信息;4.较高要求:加入复杂操作,如对某行进行串替换等。
2概要设计2.1存储结构的定义typedef struct text{char string[80]; //存储每一行的元素struct text *next;//指向后一个节点的指针int flat; //确定此行是否被删除的标志}text,*textp;2.2功能函数Status Createlist(textp &head);功能:建立一个80个节点的链表,是整个活区的大小int del(textp head);功能:删除显示的活区的任意一行。
int display(textp &head);功能:按照每页20行的规格显示活区的内容。
void freemem(textp &head);功能:销毁链表,释放内存。
int insert(textp &head);功能:在显示的活区插入一行内容。
Status SaveFile(textp head,FILE *out);功能:将活区的内容保存到输出文件。
Status LoadFile(textp head,FILE *fp);功能:从输入文件读取内容到活区。
void HELP();功能:提供命令的格式。
2.3主函数void main(){初始化;输入命令;Switch(c){case ‘e’:退出并保存编辑的内容case ‘p’:显示活区case ‘n’: 活区切换case ‘d’: 删除一行case ‘i’: 插入一行case ‘h’: 获得帮助case ‘t’:行替换}}2.4 函数设计2.4.1 主函数界面设计void main()//主函数,用来接受命令{char c;printf("\n\t\t\t*****简单行编辑系统******\n");printf("\n\t\t\t*************************\n");printf("\t\t\t*** 1 EDIT ***\n");printf("\t\t\t*** 2 EXIT ***\n");printf("\t\t\t*************************\n");printf("\n*******请选择1,2:*********\n");c=getchar();switch(c){case '2':EXIT();break;case '1':EDIT();break;default:printf("\n\n\n!!!输入错误!!!\n");}}2.4.2帮助函数界面设计帮助函数的主要作用是在用户忘记如何操作的情况下在屏幕上给用户显示提示操作的信息,使行插入,行删除,活区显示,活区切换的执行方式。
void HELP()//帮助函数,显示一些命令的格式{printf("\n\t*******************************************************\n"); printf("\t ** 行插入格式:i<行号><回车><文本><回车> **\n"); printf("\t ** 行删除格式:d<回车><行号1>[<空格><行号2>]<回车> **\n"); printf("\t ** 活区切换格式:n<回车> **\n"); printf("\t ** 活区显示格式:p<回车> **\n"); printf("\t ** 清屏格式:c<回车> **\n"); printf("\t ** 帮助格式:h<回车> **\n"); printf("\t*********************************************************\n");}2.4.3用户操作界面设计简单行编辑程序的各种功能在编辑函数中实现。