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

📄 tools.h

📁 该包是数据结构的实验软件,来源于合肥工业大学人工智能与数据挖掘实验室,用来实现数据结构.
💻 H
📖 第 1 页 / 共 5 页
字号:

  void Insert(int k,string s,int i)
  {

   int len1=strlen(s),j;


   for( j=len1;j>i;j--)
     s[j]=s[j-1];
     s[i]=k;
     if(s[len1+1]!='\0')
       s[len1+1]='\0';
  }



  void  Stringobj_edit(stringobj& strobj,int newx,int newy,int lens,int& lastk,boolean& funckey)//var lastk:byte;
    {int key,m;
    int i,j,k;
    boolean inthisstring=true;
    boolean insstate;
	i=1;
	inthisstring=true;
	Stringobj_moveto(strobj,newx,newy);
	Stringobj_displaystringxy(strobj,newx,newy);
	cursor cur1;
	Cursor_init(cur1,1,2,2,0);

	Cursor_show(cur1);
	Stringobj_movetoword(strobj,i,cur1);//Cursor_moveto(cur1,newx,newy);


	do
	  {   Getkey(key,funckey);

		     if (!funckey )//      {== data ==}
				if   (key==10||key==13||key==ctrlw)
						       inthisstring=false;
			       else if (key==8)
					  {  if (i>1) //    {backspace key}
						{  if (Isascii(strobj.s[i-2]))

							 { Delete(strobj.s,i-2,1);
								i--;
							   Stringobj_displaystringxy(strobj,strobj.scrx1,strobj.scry1);
							  Clear_byte_disp(newx+strlen(strobj.s),newy);
							  Stringobj_movetoword(strobj,i,cur1);
							   }
						    else
							   { Delete(strobj.s,i-3,2);
								 i=i-2;
							     Stringobj_displaystringxy(strobj,strobj.scrx1,strobj.scry1);
							     Clear_byte_disp(newx+strlen(strobj.s),newy);
							     Clear_byte_disp(newx+strlen(strobj.s)+1,newy);
							     Stringobj_movetoword(strobj,i,cur1);
							       }



						   }

					    }

			      else  {


						if ( strlen(strobj.s)>lens-1)
							 inthisstring=false;

						else{
						      if(insstate)
							 Insert(key,strobj.s,i-1);
						       else
							  strobj.s[i-1]=key;

							  i=i+1;

							  Stringobj_displaystringxy(strobj,strobj.scrx1,strobj.scry1);
							  Stringobj_movetoword(strobj,i,cur1);
						      }


				    }
	      else {  if (key==left||key==right||key==shiftleft||key==shiftright)
				{     switch (key)
				    {
			   case   left:  {
					i=i-1;
					if ((i>1)&&!Isascii(strobj.s[i-1]) )
					  i=i-1;
					break;
				       }
			    case   right:
					   if (i>strlen(strobj.s))
							if ( (Isascii(strobj.s[i-1])||strobj.s[i-1]=='\0'))
							     i=i+1;
							else
							      i=i+2;

					    else
							 if (Isascii(strobj.s[i])||strobj.s[i]=='\0'||(!Isascii(strobj.s[i])&&Isascii(strobj.s[i-1]) ) )
								i=i+1;
							 else
								 i=i+2;
					 break;
			     case  shiftleft:   i=1; break;
			     case  shiftright:  i=strlen(strobj.s); break;
			  }
			   if  (i<1)
			       i=1 ;

			   Stringobj_movetoword(strobj,i,cur1);
		       }

		    else if (key==up||key==down||key==pgup||key==pgdn||key==home||key==f10kb)
				  inthisstring=false;
			 else if (key==del||key==ins)

				  switch(key)
				    {

					case del: {
						       if (strobj.s[i-1]=='\0')
								;
							else
							     {
							      if(Isascii(strobj.s[i-1]) )
								 {
								  Delete(strobj.s,i-1,1);
								  Stringobj_displaystringxy(strobj,strobj.scrx1,strobj.scry1);
								  Clear_byte_disp(newx+strlen(strobj.s),newy);
								  Stringobj_movetoword(strobj,i,cur1);
								 }
							      else
								 {      Delete(strobj.s,i-1,2);
									Stringobj_displaystringxy(strobj,strobj.scrx1,strobj.scry1);
									Clear_byte_disp(newx+strlen(strobj.s),newy);
									Clear_byte_disp(newx+strlen(strobj.s)+1,newy);
									Stringobj_movetoword(strobj,i,cur1);

								    }


								 }
							    break;
						      }
					 case ins: {
						      insstate=boolean(!insstate);
						       if (insstate)

							  Displaytextxy(70,2,"insert");
						       else
							  Displaytextxy(70,2,"      ");
							  break;
							}
				      }
		    }
	     }

	    while(inthisstring);
	   lastk=key;
	   Cursor_hide(cur1);
	   Cursor_done(cur1);
     }







//gmenubar
void   Gmenubar_init(gmenubar& gmnbar,int  foreclr,int width)
    {int  size;

	gmnbar.forecolor=foreclr;
	gmnbar.visible=false;
	gmnbar.w=width;
	gmnbar.col=0;
	gmnbar.row=0;
	 setfillpattern(fillmode,gmnbar.forecolor);
	 bar(1,1,8,16);
	 size=imagesize(1,1,8,16);
	gmnbar.pmem=malloc(size);
	 getimage(1,1,8,16,gmnbar.pmem);
	 putimage(1,1,gmnbar.pmem,1);

    }
   void   Gmenubar_show(gwindow& gwnd,  gmenubar& gmnbar)
      {int  xs,ys,i;
	  gmnbar.visible=true;
	  xs=gwnd.x1+gmnbar.col-1;
	  ys=gwnd.y1+gmnbar.row-1;
	      for (i=0;i<=gmnbar.w-1;i++)
	       putimage((xs+i)*charwidth,ys*charhigh,gmnbar.pmem,1);
      }
   void   Gmenubar_hide(gwindow& gwnd, gmenubar& gmnbar)
      { Gmenubar_show(gwnd,gmnbar);
	gmnbar.visible=false;
	}

   void  Gmenubar_moveto(gwindow& gwnd, gmenubar& gmnbar,int i,int j)
     { if (gmnbar.visible)
	  Gmenubar_hide(gwnd,gmnbar);
	   gmnbar.row=i;
	   gmnbar.col=(j-1)*14+1;
	   Gmenubar_show(gwnd,gmnbar);
     }




  //{ gwindow }
  void Gwindow_init(gwindow& gwnd,int newx1,int newy1,int newx2,int newy2)//:byte);
    {int w,h;

       gwnd.x1=newx1;
       gwnd.y1=newy1;
       gwnd.x2=newx2;
       gwnd.y2=newy2;
       w=charwidth;
       h=charhigh;
       gwnd.gx1=(gwnd.x1-1)*w;
       gwnd.gy1=gwnd.y1*h-h/ 2;
       gwnd.gx2=gwnd.x2*w;
       gwnd.gy2=(gwnd.y2+1)*h+h/2;
	    }

  void  Gwindow_done(gwindow& gwnd)

       { putimage(gwnd.gx1,gwnd.gy1,gwnd.pmem,0);
	 farfree(gwnd.pmem);
       }
   void   Gwindow_newwindow(gwindow& gwnd)
    {
	int   size=imagesize(gwnd.gx1,gwnd.gy1,gwnd.gx2,gwnd.gy2);
	    gwnd.pmem=farmalloc(size);
	    getimage(gwnd.gx1,gwnd.gy1,gwnd.gx2,gwnd.gy2,gwnd.pmem);
	    putimage(gwnd.gx1,gwnd.gy1,gwnd.pmem,1);
	    setcolor(YELLOW);
	    rectangle(gwnd.gx1+3,gwnd.gy1+3,gwnd.gx2-3,gwnd.gy2-3);
     }
   void   Gwindow_showstring(gwindow& gwnd,int relx,int rely,string s)
     {
	  Displaytextxy1(gwnd.x1+relx,gwnd.y1+rely,s);
       }

   void   Gwindow_editstring(gwindow& gwnd,int relx,int rely,string ss)
     { stringobj astr;
       int w;
       int lastk;;
       boolean funckey;

      Stringobj_init(astr,ss);

       w=gwnd.x2-gwnd.x1-relx;

	      Stringobj_edit(astr,gwnd.x1+relx,gwnd.y1+rely,w,lastk,funckey);

	    if (lastk!=esc)
	     {
	       unsigned char  s1[70]="";
	       Rtrim(astr.s,s1);

	       unsigned char s2[70]="";
	       Ltrim(s1,s2);
	       strcpy(ss,s2);
	       }
	 Stringobj_done(astr);
      }


   void   Gwindow_inputstring(gwindow& gwnd,int relx,int rely,string ss)

     {
	Gwindow_editstring(gwnd,relx,rely,ss);
	}
   void   Gwindow_clear_linemid(gwindow& gwnd,int relx,int rely,int len)
     {int  i;
     // with gwnd do
	  for(i=gwnd.x1+relx;i<=gwnd.x1+len;i++)
	  Clear_byte_disp(i,gwnd.y1+rely);
      }
   void   Gwindow_clear_lineleft(gwindow& gwnd,int relrow,int len)
     {   Gwindow_clear_linemid(gwnd,1,relrow,len); }
   void   Gwindow_clear_lineright(gwindow& gwnd,int relrow,int len)
     {  Gwindow_clear_linemid(gwnd,gwnd.x2-len+1,relrow,len); }

   void   Gwindow_clear_line(gwindow& gwnd,int relrow)
      { Gwindow_clear_linemid(gwnd,1,relrow,gwnd.x2-gwnd.x1-1); }

   void   Gwindow_clear(gwindow& gwnd)
     {int i;

     for (i=1;i<=gwnd.y2-gwnd.y1+1;i++)
       Gwindow_clear_line(gwnd,i);
       }
   void   Inputstrinwnd(int x1,int y1,int x2,string s0,string ss)
    {gwindow gwnd;
       Gwindow_init(gwnd,x1,y1,x2,y1);
       Gwindow_newwindow(gwnd);
       Gwindow_showstring(gwnd,1,1,s0);

       Gwindow_editstring(gwnd,1+strlen(s0),1,ss);
       Gwindow_done(gwnd);
     }
   void   Editstrinwnd(int x1,int y1,int x2,string s0,string ss)
    {gwindow gwnd;
       Gwindow_init(gwnd,x1,y1,x2,y1);
       Gwindow_newwindow(gwnd);
       Gwindow_showstring(gwnd,1,1,s0);
       Gwindow_editstring(gwnd,1+strlen(s0),1,ss);
       Gwindow_done(gwnd);
     }
   void   Dispstrinwnd(int x1,int y1,string s0)
    {gwindow gwnd;
     int w,x2;
       w=strlen(s0);
       x2=x1+w+2;
       Gwindow_init(gwnd,x1,y1,x2,y1);
       Gwindow_newwindow(gwnd);
      Gwindow_showstring(gwnd,1,1,s0);

      getch();
      Gwindow_done(gwnd);
     }

   void  Inputintinwnd(int x1,int y1,int x2, string s0,int& i)
     {
       char *endptr;
       long LI;
      gwindow gwnd;

       Gwindow_init(gwnd,x1,y1,x2,y1);
       Gwindow_newwindow(gwnd);
       unsigned char sss[70]="";
       strcpy(sss,s0);
	do
	{

	 Gwindow_showstring(gwnd,1,1,sss);
	 unsigned char s1[70]="";
	 Gwindow_inputstring(gwnd,1+strlen(sss),1,s1);
	 unsigned char  s2[70]="";
	  Rtrim(s1,s2);
	 unsigned char  s3[70]="";
	  Ltrim(s2,s3);
	  LI=strtol(s3,&endptr,10);
	  if(*endptr=='\0'&&(LI<-32768||LI>32767) )
	      {
		Error("over flow,input again!");
		Gwindow_clear_line(gwnd,1);
	      }
	     else if(*endptr!='\0')
		    { Error("format of data error,input again!");
		      Gwindow_clear_line(gwnd,1);
		      }
	 }
       while( !(*endptr=='\0'&&LI>=-32768&&LI<=32767) );
       i=LI;
       Gwindow_done(gwnd);

	}
   void  Editintinwnd(int x1,int y1,int x2,string s0,int& i)
     {    char *endptr;
	  long LI;

       gwindow gwnd;

       Gwindow_init(gwnd,x1,y1,x2,y1);
       Gwindow_newwindow(gwnd);
	unsigned char sss[70]="";
	strcpy(sss,s0);

	do
	{
	Gwindow_showstring(gwnd,1,1,sss);
	unsigned char s1[70]="";

	itoa(i,s1,10);
	Gwindow_editstring(gwnd,1+strlen(s0),1,s1);
	unsigned char  s2[70]="";
	 Rtrim(s1,s2);
	unsigned char  s3[70]="";
	 Ltrim(s2,s3);
	 LI=strtol(s3,&endptr,10);
	 if(*endptr=='\0'&&(LI<-32768||LI>32767) )
	      {
		Error("over flow,input again!");
		Gwindow_clear_line(gwnd,1);
	      }
	 else if(*endptr!='\0')
	     { Error("format of data error,input again!");
	       Gwindow_clear_line(gwnd,1);
	       }
	 }
       while( !(*endptr=='\0'&&LI>=-32768&&LI<=32767) );
       i=LI;

      Gwindow_done(gwnd);
     }
  void  Inputrealinwnd(int x1,int y1,int x2,string s0,double& r)
     { char *endptr;

      gwindow gwnd;

       Gwindow_init(gwnd,x1,y1,x2,y1);
       Gwindow_newwindow(gwnd);
       unsigned char sss[70]="";
       strcpy(sss,s0);
	do
	{

	 Gwindow_showstring(gwnd,1,1,sss);
	 unsigned char s1[70]="";
	  Gwindow_inputstring(gwnd,1+strlen(sss),1,s1);
	  unsigned char  s2[70]="";
	  Rtrim(s1,s2);
	  unsigned char  s3[70]="";
	  Ltrim(s2,s3);
	  r=strtod(s3,&endptr);
	  if(*endptr!='\0')
		    { Error("format of data error,input again!");
		      Gwindow_clear_line(gwnd,1);
		      }
	 }
       while( !(*endptr=='\0') );
       Gwindow_done(gwnd);
     }
  void  Editrealinwnd(int x1,int y1,int x2,string s0,double& r)
     {
      char *endptr;

      gwindow gwnd;

       Gwindow_init(gwnd,x1,y1,x2,y1);
       Gwindow_newwindow(gwnd);
       unsigned char sss[70]="";
       strcpy(sss,s0);
       double rr=r;
	do

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -