偶写的一个简单行编辑程序(我的实习题)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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");