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

📄 tool_str.c

📁 sco unix下c语言开发工具库
💻 C
📖 第 1 页 / 共 3 页
字号:


/****

函数名: 	ChangeMoney
用  途:  	将接收的是字符串型数据,则转换为double型
变量名: 
		InserChar:	接收要转换的字符串 char; 
		OutMoney:	输出转换后的金额 double;
调用函数: 
返回值:	  	OutMoney	double;

****/

double ChangeMoney(char InserChar[19],double OutMoney,int DotLen)
{

	double		atof();       //定义将字符转换为double类型
	double		Middle;
	long		CharLen,i,j,Baseint,CharInt;
	char 		Ch;
	int		atoi();
        int             DotFlag=0;
	Ch=InserChar[0];
	if (Ch !='-' && Ch != '.' )
	if ( Ch >'9' || Ch<'0')
	    {
		return(0);
	    }
	CharLen=strlen(InserChar);
        if (CharLen>18)
         {   CharLen=18;
             InserChar[18]='\0';
         }
	for (i=1;i<CharLen;i++)
	   {
		Ch=InserChar[i];
		refresh();
                if (Ch == '.' && DotFlag == 1)
		if (Ch > '9' || Ch < '0')
		    {
		//	mvprintw(20,3,"输入数据非法! for %c-",Ch);
			return(0);
		    }
	   }	
	Middle=atof(InserChar);
        if (DotLen>7)
            DotLen=7;
        switch (DotLen)
        {
          case 1:
	          OutMoney=Middle/10;
		  break;
          case 2:
	          OutMoney=Middle/100;
		  break;
          case 3:
	          OutMoney=Middle/1000;
		  break;
          case 4:
	          OutMoney=Middle/10000;
		  break;
          case 5:
	          OutMoney=Middle/100000;
		  break;
          case 6:
	          OutMoney=Middle/1000000;
		  break;
          case 7:
	          OutMoney=Middle/10000000;
		  break;
        }
	return(OutMoney);

}


/*****

函数名:  GetChar
用  途:  在屏幕(X,Y)处接收一串字符串,如果要接收的是货币型数据,则转换为double型
变量名: 
  x:    第 x 行                         int; 
  y:    第 y 列                         int;
        Len:    接收数据长度                    int; 
        EnterChar:  接收及返回数据串                char *;
  Chflag :    0--字符型数据,   1--货币型数据  2-密码 int 3--正整型;
调用函数: ChangeMoney();
返回值:    EnterChar
接收变量:  char * : ->   char * No=GetChar(x,y,len,Enterchar,0);

*****/

char * GetChar( int x,int  y,int  Len,char * EnterChar,int Chflag)

{

      char     SingleCh;
      char     EntryChar[255];
      int      Count,i,j,Flag;
      char     Space[40];
      double   ShowMone;

      i=0;  
      ShowMone=0;
      echo();
      memset(EntryChar,0x00,sizeof(EntryChar));
      i = strlen(EnterChar);
      if (Chflag==1 )
      {
         if (Len>16 || i >16 ) //当代入的字符串是数字型时,其长度不应>16
           *EnterChar=NULL;
      EnterChar=TrimDot(EnterChar);
      Len=16;
      }
      if (Chflag==2)
      {
         *EnterChar=NULL;
      }
      i=0;  
      if (*EnterChar == NULL)
	sprintf(EntryChar,"%s","");
      else
      {
        while (*EnterChar)
        {
          if (*EnterChar == '\0' )
             break;
          EntryChar[i]=*EnterChar;
          i++;*EnterChar++; 
        }
      }
      EntryChar[i+1]='\0'; 
      for (j=0;j<=Len-1;j++)  //添充空格
      {
         Space[j]=' ';
         Space[j+1]='\0';
      }
      if (Chflag==1)
      {
         mvprintw(x,y-1,"[$");
         mvprintw(x,y+Len+1,"]");
      }
      else
      {
         mvprintw(x,y,"[");
         mvprintw(x,y+Len+1,"]");
      }
       wstandout(stdscr);      //高亮显示
       mvprintw(x,y+1,"%s",Space);
       mvprintw(x,y+1,"%s",EntryChar);
       Count=strlen(EntryChar);      //计算需要转换字符串的长度
       refresh();
       i=Count;
       EntryChar[i+1]='\0';
       while( i < Len)
       {
          if (Chflag==2)
             noecho();
          SingleCh=getch();
          j=(int) SingleCh;
          switch(j)       //判断输入键的键盘数
          {
             case 9: 
                      //printf("tab");
             case 2: 
                      //printf("↓");
             case 3: 
                      //printf("↑");
             case 4: 
                      //printf("←");
             case 5: 
                      // printf("→");
             case 10:                  //回车
 
                      EntryChar[i]='\0';
                      wstandend(stdscr);
                      mvprintw(x,y+1,"%s",Space);
                      if (Chflag==2)
                      {
                         Len=strlen(EntryChar);
                         for (i=0;i<Len;i++)
                           mvprintw(x,y+i+1,"*");
                      }
                      else 
                      {
                      if (Chflag==1)
                      {
                         if (EntryChar[0]=='\0')
                            sprintf(EntryChar,"%s","0");
                         ShowMone=ChangeMoney(EntryChar,ShowMone,2);
                         mvprintw(x,y+1,"%16.2f",ShowMone);  //回显数据
                       }
                       else
                         mvprintw(x,y+1,"%s",EntryChar);  //回显数据
                       }
                       refresh();
		       EnterChar=EntryChar;
                       return(EnterChar);
               case 8:     //回删字符
        
                          if (i==0) i=1;
                            mvprintw(x,y+i," ");  //将回删的字符替换为空
                            move(x,y+i);
                            i--;
                            if (i <0)
                            {
                              if (Chflag==1) //是否为数值型?
                              {    
                                 mvprintw(x,y,"$");
                                 move(x,y+1);
                              }
                              else
                              {
                                 move(x,y+1);
                              }
                                 i=0;
                             }
                           refresh();
                          EntryChar[i]='\0';
                          continue;
          }    // case {}

     if (Chflag==2)  //判断是否输入密码
      {
           mvprintw(x,y+i+1,"*");
           move(x,y+i+2);
      }
     else
     {
     if (Chflag==1 || Chflag==3)    //判断是否要数值型数据
      if (i==0)            //判断输入数据的合法性!
      {
        if (SingleCh != '-' ) 
        if (SingleCh < '0' || SingleCh > '9')
        {
           mvprintw(x,y+i+1," ");
           move(x,y+i+1);
           EntryChar[i]='\0';
           continue;
        }
      }
     else
     {
       if (SingleCh < '0' || SingleCh > '9')
       {
          mvprintw(x,y+i+1," ");
          move(x,y+i+1);
          EntryChar[i]='\0';
          continue;
       }
     }
    }
    EntryChar[i]=SingleCh;
    Flag=0;   //表示是第一次回删数据
    i++;
    }   // End of While 
  
    EntryChar[i]='\0';
    wstandend(stdscr);
    if (Chflag==2)
    {
       Len=strlen(EntryChar);
       for (i=0;i<Len;i++)
        mvprintw(x,y+i+1,"*");
    }
    else
    {
    if (Chflag==1)
     {
       if (EntryChar[0]=='\0')
          sprintf(EntryChar,"%s","0");
       ShowMone=ChangeMoney(EntryChar,ShowMone,2);
       mvprintw(x,y+1,"%16.2f",ShowMone);  //回显数据
     }
    else
     if ( Chflag == 0 || Chflag == 3 )
       mvprintw(x,y+1,"%s",EntryChar);  //回显数据
    }
    refresh();
    EnterChar=EntryChar;
    return(EnterChar);
}

 void SetColor( int Color)
{
    if (Color < 0 || Color >16)
       return;
    
    switch(Color)
    {
      case 1: 
             system("setcolor -n blue");
             break;
      case 2: 
             system("setcolor -n lt_blue");
             break;
      case 3: 
             system("setcolor -n cyan");
             break;
      case 4: 
             system("setcolor -n lt_cyan");
             break;
      case 5: 
             system("setcolor -n magenta");
             break;
      case 6: 
             system("setcolor -n lt_magenta");
             break;
      case 7: 
             system("setcolor -n white");
             break;
      case 8: 
             system("setcolor -n hi_white");
             break;
      case 9: 
             system("setcolor -n green");
             break;
      case 10:
             system("setcolor -n lt_green");
             break;
      case 15:
             system("setcolor -n red");
             break;
      case 16:
             system("setcolor -n lt_red");
             break;
      case 11:
             system("setcolor -n brown");
             break;
      case 13:
             system("setcolor -n black");
             break;
      case 12:
             system("setcolor -n yellow");
             break;
      case 14:
             system("setcolor -n gray");
             break;
    }
  // return ;
}



/*****

函数名:  AskMsg
用  途:  在屏幕上弹出信息对话框,询问是否继续或确定?返回int型结果.
变量名: 
          Msg:	接收信息字符串   char;
          AskType:    对话框类型   1  ---   确定
                                   0  ---   '是'/'否'
调用函数: 
返回值:	  Result		int;
				0----取消
				1----确定

*****/


int AskMsg(char Msg[30],int AskType)
{
	int 	Result;
	int	ChI,Flagi;
        WINDOW  *sw1;
	sw1=newwin(8,38,10,19);
	box(sw1,0,0);
	wmove(sw1,3,5);
	wprintw(sw1,"%s",Msg);
        if (AskType==1)
        {
	wmove(sw1,5,15);
	wstandout(sw1);
	wprintw(sw1,"确定");
	wstandend(sw1);
	wrefresh(sw1);
	Result=0;
        getchar();
        }
        else
        {
	wmove(sw1,5,12);
	wprintw(sw1,"是");
	wmove(sw1,5,20);
	wstandout(sw1);
	wprintw(sw1,"否");
	wstandend(sw1);
	wrefresh(sw1);
	Result=0;
	Flagi=1;
	while(Flagi==1)
	   {
		ChI=getch();	
		switch(ChI)
		   {
			case 258:
			case 259:
			case 260:
			case 261:
			case  9 :
				if (Result==0)
				   {
					wmove(sw1,5,20);
					wprintw(sw1,"否");
					wmove(sw1,5,12);
					wstandout(sw1);
					wprintw(sw1,"是");
					wstandend(sw1);
					Result=1;
				
				   }
				else
				   {
					wmove(sw1,5,12);
					wprintw(sw1,"是");
					wmove(sw1,5,20);
					wstandout(sw1);
					wprintw(sw1,"否");
					wstandend(sw1);
					Result=0;
				   }
				wrefresh(sw1);
				continue;
			case 10:
				wrefresh(sw1);
				Flagi=0;
				break;
			case 27:
				wrefresh(sw1);
				Flagi=0;
				Result=0;
				break;
				
		    }		// End of Case 
		 }    		// End of While 

        }                       // End of Else
	werase(sw1);
	wrefresh(sw1);
	return(Result);

}

void GetDate(char * _DateStr)
{
	time_t     	now;
	struct tm  	*datim;
	char	   	Date[50];

	memset(Date, 0x00, sizeof(Date));

 	time(&now);
 	datim = localtime(&now);
 	sprintf(Date, "%04d%02d%02d",  \
		datim->tm_year+1900,datim->tm_mon+1, datim->tm_mday);
	_DateStr=Date;
}
/*****

函数名:  Errlog
用  途:  将错误信息写入日志文件.
变量名: 
          _Logfile  文件存放地址
          _Msg :    接收信息字符串   char;
          _File:    错误文件名
          _Line:    发生错误的位置
调用函数: 
返回值:	  Result		int;
				0----取消
				1----确定

*****/


void Errlog(char * _Logfile, char *_File, int _Line, int _Errno, \
		char _ErrMsg[200], char _Msg[2048] )
{
	FILE	   	*FP;
	time_t     	now;
	struct tm  	*datim;
	char	   	date[50];
	char		filestr[20];
	char		Fpfile[255];

	memset(date, 0x00, sizeof(date));
	memset(filestr, 0x00, sizeof(filestr));
	memset(Fpfile, 0x00, sizeof(Fpfile));

 	time(&now);
 	datim = localtime(&now);
 	sprintf(date, "%04d年%02d月%02d日 %02d:%02d:%02d",  \
		datim->tm_year+1900,datim->tm_mon+1, datim->tm_mday,  \
		datim->tm_hour, datim->tm_min, datim->tm_sec);
 	sprintf(filestr, "%04d%02d%02d", datim->tm_year+1900, \
		datim->tm_mon+1, datim->tm_mday);
	sprintf(Fpfile,"%s.%s",_Logfile,filestr);
	FP = fopen(Fpfile, "a+");
	if( FP == NULL) return;
	fprintf(FP, "--Log Begin--\n");
	fprintf(FP,"时    间: [%s]\n", date);
	fprintf(FP,"文 件 名: %s\t\t 进程号:[%d]\n",  _File,getpid());
	fprintf(FP,"行    号: [%d]\n",  _Line );
	fprintf(FP,"错误信息: errno:[%d] message:[%s]\n",_Errno, _ErrMsg);
	fprintf(FP,"分析描述: %s\n", _Msg);
	fprintf(FP,"----------------------------------------------- Log End --\n");
	fclose(FP);
}

⌨️ 快捷键说明

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