⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bjq.cpp

📁 用vc实现编辑器功能
💻 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 + -