📄 bjq.cpp
字号:
#include "stdio.h"
#include "stdlib.h"
struct line
{
char text[81]; /*一行的空间*/
int num;
struct line *next; /*指向下一个输入项目的指针*/
struct line *prior; /*指向前一个项目的指针*/
};
struct line *start; /*指向链表中所输入文本的头指针*/
struct line *last; /*指向链表中所输入文本的尾指针*/
struct line *find(int); /*指向链表中要查找的一行的指针*/
struct line *dls_store(struct line *); /*指向链表中输入文本的指针*/
void patchup(int,int); /*行号的增加*/
void delete_text();
void ListAllLines();
void ListOneLine();
void modify();
int insert(struct line *);
int enter(int linenum);
/*菜单功能的实现与命令调用子函数*/
main()
{
char s[80];
int c;
int linenum=0;
start=NULL;
last=NULL;
while(1)
{
printf("\n\n");
printf("\t\t\t* * Jian Dan Wen Ben Bian Ji Qi* *\t\t\t\n\n") ;
printf(" =========================================================================== \n\n") ;
printf("|\t* 1 * * 2 * * 3 * * 4 * * 5 * * 6 * * 7 *\t |\n") ;
printf("|\t \t |\n") ;
printf("|\t* | * * | * * | * * | * * | * * | * * | *\t |\n") ;
printf("|\t* | * * | * * | * * | * * | * * | * * | *\t |\n") ;
printf("|\t \t |\n") ;
printf("|\t*edit* *delete* *list* *seek* *insert* *modify* *exit*\t |\n\n");
printf(" ===========================================================================\n") ;
printf("\n\n\t\tPlease choise the number:1-7: ") ;
gets(s);
c=atoi(s);
switch(c)
{
case 1:
enter(linenum); /*输入函数*/
break;
case 2:
delete_text(); /*除函数*/
break;
case 3:
ListAllLines(); /*显示文本*/
break;
case 4:
ListOneLine(); /*查找并显示一行文本*/
break;
case 5:
insert(0); /*插入一行文本*/
break;
case 6:
modify(); /*修改一行文本*/
break;
case 7:
printf("\t\tExit,Goodbye!\n");
exit(0);
}
}
return 0;
}
/*将文本插在指定行端部 */
enter(int linenum)
{
struct line *info;
char s[80];
printf("\tPlease input the linenum to edit:" );
gets(s);
linenum=atoi(s);
for(; ;)
{
info=(struct line *)malloc(sizeof(struct line));
printf("%d:",linenum);
gets(info->text);
info->num=linenum;
if(*info->text) /*输入的内容不为空*/
{
if(find(linenum)) /*当前存在行行号所对应的指针*/
{
patchup(linenum,1); /*行号的自增*/
}
start=dls_store(info);
}
else
{
break;
}
linenum++;
}
return(linenum);
}
/*当文本内容插在文件中间时其下面的内容的行号必须增加1,而 */
/*删除时,被删除的文本后面的行号必须减1 */
void patchup(int n,int incr) /*行数自增函数*/
{
struct line *i;
i=find(n);
while(i)
{
i->num=i->num+incr;
i=i->next;
}
}
/*按行号排序后插入 */
struct line *dls_store(struct line *i)
{
struct line *old,*p;
if(last==NULL) /*输入的文本的尾指针为空*/
{
i->next=NULL;
i->prior=NULL;
last=i;
return(i);
}
p=start;
old=NULL;
while(p)
{
if(p->num)
{
old=p;
p=p->next;
}
else
{
if(p->prior)
{
p->prior->next=i;
i->next=p;
p->prior=i;
return start;
}
i->next=p;
i->prior=NULL;
p->prior=i;
return(i);
}
}
old->next=i;
i->next=NULL;
i->prior=old;
last=i;
return start;
}
/*删除一行 */
void delete_text()
{
struct line *info;
char s[80];
int linenum;
printf("\tlinenum:" );
gets(s);
linenum=atoi(s);
info=find(linenum);
if(info){
if(start==info) /*删除顶行文本*/
{
start=info->next;
if(start) start->prior=NULL;
else last=NULL;
}
else
{
info->prior->next=info->next; /*删除中间文本*/
if(info==last) /*删除最后一行文本*/
last=info->prior;
}
free(info);
patchup(linenum+1,-1);
}
}
/*显示文本 */
void ListAllLines()
{
struct line *info;
info=start;
while(info)
{
printf("%d:%s\n",info->num,info->text);
info=info->next;
}
printf("\n" );
}
/*查找一行文本 */
struct line *find(int linenum)
{
struct line *info;
info=start;
while(info)
{
if(linenum==info->num)
return(info);
info=info->next;
}
return(NULL);
}
/*显示一行文本 */
void ListOneLine()
{
int linenum ;
struct line *info;
char s[80];
printf("\tlinenum:" );
gets(s);
linenum=atoi(s);
info=find(linenum);
if(info)
{
printf("%d:%s\n",info->num,info->text);
}
printf("\n\n" );
}
/*插入一行文本*/
insert (struct line *i)
{
struct line *info;
char s[80];
int linenum;
printf("\tlinenum:");
gets(s);
linenum=atoi(s);
info=find(linenum);
i=(struct line *)malloc(sizeof(struct line)); /*分配动态内存空间*/
i->num=linenum;
i->prior=NULL;
i->next=NULL;
if(info)
{
if(start==info)
{
start=i;
i->next=info;
info->prior=i;
i->prior=NULL;
}
else
{
info->prior->next=i;
i->next=info;
}
}
i=find(linenum);
gets(i->text);
while(i->next)
{
(i->next)->num=(i->next)->num+1;
i=i->next;
}
return 0;
}
/*修改一行文本*/
void modify()
{
struct line *info;
char s[80];
int linenum;
struct line *i;
info=(struct line * )malloc(sizeof(struct line));
info->prior=NULL;
info->next=NULL;
printf("\tlinenum:");
gets(s);
linenum=atoi(s);
i=find(linenum);
if(start==i)
{
start=info;
info->next=i->next;
info->prior=NULL;
info->num=linenum;
while(i)
{
i=i->next;
}
}
else
{
info->next=i->next ;
i->prior->next=info;
info->num=linenum;
}
gets(info->text);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -