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

📄 strlib.c

📁 用C语言实现的字符型的菜单界面
💻 C
📖 第 1 页 / 共 3 页
字号:
/*----------------------------------------------------------------------------* * FUNCTION: Get login password. * Argument: *           char *string - 字符串. * Return  :  *           TRUE.                                   *----------------------------------------------------------------------------*/int get_loginpwd(char *strbuf){	static char arrbuf[]=	{" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"};	unsigned int buf[6],i,num1,num2;	rtrim(strbuf);	while(strlen(strbuf) < 6)		strcat(strbuf," ");	for(i=0; i < 6; i++)		buf[i]=0;	i=0;	while(i<6 && *(strbuf+i) !='\0')	{		buf[i]=*(strbuf+i);		i++;	}	num1=buf[0]%8;	buf[0]=buf[0]/8;	num1=num1<<5;	for(i=1;i<6;i++)	{		num2=buf[i]%8;		buf[i]=buf[i]/8;		buf[i]=buf[i]|num1;		num1=num2<<5;	}	buf[0]=buf[0]|num1;	for(i=0;i<6;i++)	{		num1=(buf[i]+i)%63;		*(strbuf+i)=arrbuf[num1];	}	return(TRUE);}/******************************************************************************  * <第三章> 日期和时间函数.                       			      *  ******************************************************************************//*----------------------------------------------------------------------------* * FUNCTION: Get System_Time(HHMMSS), Such as 110201. * Argument: *           char *hhmmss - 字符串. *           int format - SYM_COLON':'|SYM_CHINESE. * Return  :  *           char * - 字符串指针.                                   *----------------------------------------------------------------------------*/char *get_time(char *hhmmss,int format){	long time(), now;	struct tm *tms, *localtime();	time(&now);	tms = localtime(&now);	if( format & (SYM_COLON|SYM_CHINESE) )	{		if( format & SYM_CHINESE )			sprintf(hhmmss,"%.2d时%.2d分%.2d秒",tms->tm_hour,tms->tm_min,tms->tm_sec);		else			sprintf(hhmmss,"%.2d:%.2d:%.2d",tms->tm_hour,tms->tm_min,tms->tm_sec);	}	else	{		sprintf(hhmmss,"%.2d%.2d%.2d",tms->tm_hour,tms->tm_min,tms->tm_sec);	}	return hhmmss;}/*----------------------------------------------------------------------------* * FUNCTION: Get System_Date(YYMMDD), Such as 930701. * Argument: *           char *string - 字符串. *           int format - YMD: yymmdd YYMD:yyyymmdd MDY:mmddyy MDYY:mmddyyyy  *                    or SYM_SLASH'/',SYM_HYPHEN,SYM_DOT | SYM_CHINESE * Return  :  *           char * - 字符串指针.                                   *----------------------------------------------------------------------------*/char *get_date(char *date,int format){	char sym,tmp[30];	long time(), now;	struct tm *tms, *localtime();	time(&now);	tms = localtime(&now);	if( format & SYM_CHINESE_UPPER )	{		if( format & YMD )			sprintf(tmp,"%2.2d%.2d%.2d",tms->tm_year%100,tms->tm_mon+1,tms->tm_mday);		else /* default is 'yyyymmdd' */			sprintf(tmp,"%.4d%.2d%.2d",1900+tms->tm_year,tms->tm_mon+1,tms->tm_mday); 		strcpy(date,to_chinese_date(tmp,format));	} else if( format & SYM_CHINESE_LOWER )	{		if( format & YMD )			sprintf(date,"%2.2d年%.2d月%.2d日",tms->tm_year%100,tms->tm_mon+1,tms->tm_mday);		else if( format & YYMD )			sprintf(date,"%.4d年%.2d月%.2d日",1900+tms->tm_year,tms->tm_mon+1,tms->tm_mday);		else if( format & MDY )			sprintf(date,"%.2d月%.2d日%2.2d年",tms->tm_mon+1,tms->tm_mday,tms->tm_year%100);		else if( format & MDYY )			sprintf(date,"%.2d月%.2d日%.4d年",tms->tm_mon+1,tms->tm_mday,1900+tms->tm_year);		else /* default is 'yyyymmdd' */			sprintf(date,"%.4d年%.2d月%.2d日",1900+tms->tm_year,tms->tm_mon+1,tms->tm_mday);	}	else if( format & (SYM_SLASH|SYM_HYPHEN|SYM_DOT) )	{		if( format & SYM_SLASH )			sym = '/';		else if( format & SYM_HYPHEN )			sym = '-';		else if( format & SYM_DOT )			sym = '.';		else 			sym = '/';		if( format & YMD )			sprintf(date,"%2.2d%c%.2d%c%.2d",tms->tm_year%100,sym,tms->tm_mon+1,sym,tms->tm_mday);		else if( format & YYMD )			sprintf(date,"%.4d%c%.2d%c%.2d",1900+tms->tm_year,sym,tms->tm_mon+1,sym,tms->tm_mday);		else if( format & MDY )			sprintf(date,"%.2d%c%.2d%c%2.2d",tms->tm_mon+1,sym,tms->tm_mday,sym,tms->tm_year%100);		else if( format & MDYY )			sprintf(date,"%.2d%c%.2d%c%.4d",tms->tm_mon+1,sym,tms->tm_mday,sym,1900+tms->tm_year);		else /* default is 'yyyymmdd' */			sprintf(date,"%.4d%c%.2d%c%.2d",1900+tms->tm_year,sym,tms->tm_mon+1,sym,tms->tm_mday);	}	else	{		if( format & YMD )			sprintf(date,"%2.2d%.2d%.2d",tms->tm_year%100,tms->tm_mon+1,tms->tm_mday);		else if( format & YYMD )			sprintf(date,"%.4d%.2d%.2d",1900+tms->tm_year,tms->tm_mon+1,tms->tm_mday);		else if( format & MDY )			sprintf(date,"%.2d%.2d%2.2d",tms->tm_mon+1,tms->tm_mday,tms->tm_year%100);		else if( format & MDYY )			sprintf(date,"%.2d%.2d%.4d",tms->tm_mon+1,tms->tm_mday,1900+tms->tm_year);		else /* default is 'yyyymmdd' */			sprintf(date,"%.4d%.2d%.2d",1900+tms->tm_year,tms->tm_mon+1,tms->tm_mday);	}	return date;}/*----------------------------------------------------------------------------* * FUNCTION: 测试字符串是否是合法日期. * Argument: *           char *date - 字符串. * Return  :  *           TRUE - 是合法的日期. *           FALSE - 不是合法的日期. *----------------------------------------------------------------------------*/date_test(char *date){	int year,mon,day;	if( (strlen(date) == 8 || strlen(date) == 6) && numstr_test(date) )	{		date_dton(date,&year,&mon,&day);		if(mon>=1&&mon<=12&&day>=1&&day<=date_mdays(year,mon))			return(TRUE);	}	return(FALSE);}/*----------------------------------------------------------------------------* * FUNCTION: 字符日期转成数值的年月日. * Argument: *           char *date - 字符串. *           int *year - 年. *           int *mon - 月. *           int *day - 日. * Return  :  *           TRUE - 是合法的日期. *           FALSE - 不是合法的日期. *----------------------------------------------------------------------------*/date_dton(char *date,int *year,int *mon,int *day){	if( strlen(date) == 6 )	/* yymmdd */	{		*year=subnum(date,0,2)+1900;		*mon =subnum(date,2,2);		*day =subnum(date,4,2);	}	else if( strlen(date) == 8 )	/* yyyymmdd */	{		*year=subnum(date,0,4);		*mon =subnum(date,4,2);		*day =subnum(date,6,2);	}	else	{		*year=*mon=*day=0;		return(FALSE);	}	return(TRUE);}/*----------------------------------------------------------------------------* * FUNCTION: 找出某月的最大天数  * Argument: *           int year - 年. *           int mon - 月. * Return  :  *           int - 最大天数.                                   *----------------------------------------------------------------------------*/int month_maxdayset[]={0,31,28,31,30,31,30,31,31,30,31,30,31};date_mdays(int year,int mon){	int days;	days=month_maxdayset[mon];	if(mon==2)		days+=(date_ydays(year)-365);	return(days);}/*----------------------------------------------------------------------------* * FUNCTION: 找出某年的总天数. * Argument: *           int year - 年. * Return  :  *           int - 最大天数.                                   *----------------------------------------------------------------------------*/date_ydays(int year){	int days;	if(year%4==0&&year%100!=0)		days=366;	else		days=365;	return(days);}/*----------------------------------------------------------------------------* * FUNCTION: 计算两日期相隔天数. * Argument: *           char *d2 - 字符串日期. *           char *d1 - 字符串日期. * Return  :  *           TRUE - 相隔天数. *           FALSE - 不是合法的日期,或d2小于d1. *----------------------------------------------------------------------------*/date_diffdays(char *d2,char *d1){	char date[9],date1[9],date2[9];	int year1,year2,mon1,mon2,day1,day2,days,cunt,sign=FALSE;	if(!date_test(d1)||!date_test(d2))		return(FALSE);	strcpy(date1,d1);	strcpy(date2,d2);	if(strcmp(date1,date2)>0)	{		strcpy(date,date1);		strcpy(date1,date2);		strcpy(date2,date);		sign=TRUE;	}	date_dton(date1,&year1,&mon1,&day1);	date_dton(date2,&year2,&mon2,&day2);	for(cunt=1;cunt<mon2;cunt++)		day2+=date_mdays(year2,cunt);	for(cunt=1;cunt<mon1;cunt++)		day1+=date_mdays(year1,cunt);	days=day2-day1;	for(;year1<year2;year1++)		days+=date_ydays(year1);	if(sign)		days=-days;	return(days);}/*----------------------------------------------------------------------------* * FUNCTION: 计算星期几(0...6).  * Argument: *           char *date - 字符串日期. * Return  :  *           int - 星期几(0...6). *----------------------------------------------------------------------------*/date_wdays(char *date){	int mod;	mod=date_diffdays(date,"19800106");	return(mod>0?mod%7:7-(-mod)%7);}/*----------------------------------------------------------------------------* * FUNCTION: 数值年月日转成字符. * Argument: *           int year - 年. *           int mon - 月. *           int day - 日. *           char *date - 字符串. * Return  :  *           char * - 字符串指针.                                   *----------------------------------------------------------------------------*/char *date_ntod(int year,int mon,int day,char *date){	itoa(year,date,48,4);	itoa(mon,date+4,48,2);	itoa(day,date+6,48,2);	return(date);}/*----------------------------------------------------------------------------* * FUNCTION: 日期往前进(后退)几年. * Argument: *           char *string - 日期字符串. *           int years - 年数. * Return  :  *           char * - 字符串指针.                                   *----------------------------------------------------------------------------*/char *date_ychange(char *date,int years){	char buf[5];	itoa(subnum(date,0,4)+years,buf,48,4);	memcpy(date,buf,4);	return(date);}/*----------------------------------------------------------------------------* * FUNCTION: 日期往前进(后退)几月. * Argument: *           char *string - 日期字符串. *           int mons - 月数. * Return  :  *           char * - 字符串指针.                                   *----------------------------------------------------------------------------*/char *date_mchange(char *date,int mons){	char buf[5];	int year,mon;	year=subnum(date,0,4);	mon =subnum(date,4,2)+mons;	if(mon>0)	{		while(mon>12)		{			mon-=12;			year++;		}	}	else	{		while(mon<1)		{			mon+=12;			year--;		}	}	itoa(year,buf,48,4);	memcpy(date,buf,4);	itoa(mon,buf,48,2);	memcpy(date+4,buf,2);	return(date);}/*----------------------------------------------------------------------------* * FUNCTION: 日期往前进(后退)几天 * Argument: *           char *string - 日期字符串. *           int days - 天数. * Return  :  *           char * - 字符串指针.                                   *----------------------------------------------------------------------------*/char *date_dchange(char *date,int days){	int year,mon,day,ydays;	date_dton(date,&year,&mon,&day);	day+=days;	if(day>0)	{		while(day>(ydays=date_mdays(year,mon)))		{			mon++;			if(mon>12)			{				mon=1;				year++;			}			day-=ydays;		}	}	else	{		while(day<=0)		{			mon--;			if(mon<1)			{				mon=12;				year--;			}			day+=date_mdays(year,mon);		}	}	date_ntod(year,mon,day,date);	return(date);}/*----------------------------------------------------------------------------* * FUNCTION: 日期转成中文形式. * Argument: *           char *rq - 'yyyymmdd' ->  一九九零年十月二十五日  *                      'yymmdd'   ->      九零年十月二十五日  *           int format - SYM_CHINESE, SYM_CHINESE_UPPER * Return  :  *           char * - 字符串指针.                                   *----------------------------------------------------------------------------*/char *to_chinese_date(char *rq,int format){	char mrq[30],date_str[23],ni[10],trq[30],*ptr;	int  yu,ri,i;	memset(mrq,0,sizeof(mrq));	if(date_test(rq)==FALSE)		return(mrq);	strcpy(date_str,"零一二三四五六七八九十");	if( format & SYM_CHINESE_LOWER )	{		if( strlen(rq) == 6 )	/* yymmdd */		{			strcpy(mrq,substr(rq,0,2));			strcat(mrq,"年");			strcpy(mrq+4,substr(rq,2,2));			strcat(mrq,"月");			strcat(mrq,rq+4);			strcat(mrq,"日");		}		else	/* yyyymmdd */		{			strcpy(mrq,substr(rq,0,4));			strcat(mrq,"年");			strcpy(mrq+6,substr(rq,4,2));			strcat(mrq,"月");			strcat(mrq,rq+6);		}	}	else	{		if( strlen(rq) == 6 )		{			i=subnum(rq,0,2);			if( i >= 90 )				strcpy(trq,"19");			else				strcpy(trq,"20");			strcat(trq,rq);		}		else		{			strcpy(trq,rq);		}		strcpy(ni,substr(trq,0,4));		yu=subnum(trq,4,2);		ri=atoi(trq+6);		for(i=0;i<4;i++)			strcpy(mrq+i*2,substr(date_str,(*(ni+i)-48)*2,2));		strcat(mrq,"年");		ptr=strchr(mrq,'\0');		if(yu<=10)			strcpy(ptr,substr(date_str,yu*2,2));		else		{			strcat(ptr,"十");			ptr=strchr(mrq,'\0');			strcpy(ptr,substr(date_str,(yu-10)*2,2));		}		strcat(mrq,"月");		ptr=strchr(mrq,'\0');		switch(ri/10)		{		case 0: 			break;		case 2:		case 3:			strcpy(ptr,substr(date_str,(ri/10)*2,2));		case 1:			strcat(ptr,"十");			ptr=strchr(mrq,'\0');			break;		}		if(ri%10)			strcpy(ptr,substr(date_str,(ri%10)*2,2));		strcat(ptr,"日");		if( (strlen(rq) == 6) && (!(format & SYM_YYMD)) )		{			strcpy(trq,mrq+4);			strcpy(mrq,trq);		}	}	return(mrq);}

⌨️ 快捷键说明

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