📄 tool_str.c
字号:
/****
函数名: 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 + -