简单行编辑程序——课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简单行编辑程序
题目:简单行编辑程序
班级:计算机科学与技术(非师范)
姓名:
学号:
完成日期:2010-6-25
1.需求分析
以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?并明确规定:
文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。限制这些操作以行为单位进行的编辑程序称为行编辑程序。
(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
#include
#include
#include
#include
#include
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* * * * ");