偶写的一个简单行编辑程序(我的实习题)

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

/*这是清华大学《数据结构题集》实习题3中的一道题--做一个简单行编辑

程序,也是我的实习作业。现已经写出来,如大家有兴趣可以看一看。本人编

程水平不高,属于初学者,如有高手看到请不要见笑。程序在VC++6.0中调试

通过,题目的具体要求:

打开一个文件 o<行号><文件名><回车>

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

行删除格式: d<行号1>[<空格><行号2>]<回车>

活区切换格式: n<回车>

活区显示格式: p<回车>

退出编辑模式: e<回车>

其中执行打开文件命令后,需要输入要打开的文件名和要输出的文件名。

如果谁对编程,网络技术有兴趣,大家可以联系我做个朋友,一起研究学习。

联系方式:

E-mail:blackcat242@

QQ :21739034

*/

#define NULL 0

#define OK 0

#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* * * * ");

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** 作者:BLACKCAT **\n");

printf("\t\t** 单位:ZZU **\n");

printf("\t\t** E-mail:blackcat242@ **\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 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");

相关文档
最新文档