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

📄 commoncal.cpp

📁 用C++基于SQL SERVER使用存储过程
💻 CPP
字号:
// CommonCal.cpp: implementation of the CommonCal class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "CommonCal.h"
#include "stdlib.h"
#include "stdio.h"
#include "math.h"

#ifdef _DEBUG
#undef THIS_FILE
//static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CommonCal::CommonCal()
{

}

CommonCal::~CommonCal()
{

}

//////////////////////////////////////////////////////////////////////
// 雨量数值处理,四舍六入,奇进偶舍算法
//////////////////////////////////////////////////////////////////////
bool CommonCal::RainValProc()
{
	int i=0;//取有效数字倒数第二位
	int j=0;//取有效数字最后一位
	int k=0;//取有效数字后一位
	int l=0;//取k后的部分
	int intValid=0;//取有效数字部分
	
	/*
	intValid=int(m_dblInputVal*pow(10,m_intKeepDot));
	i=int(m_dblInputVal*pow(10,(m_intKeepDot-1)))%10;
	j=intValid%10;
	k=int(m_dblInputVal*pow(10,(m_intKeepDot+1)))%10;
	l=int(m_dblInputVal*pow(10,m_intInputDot))%(int(pow(10,(m_intInputDot-m_intKeepDot-1))));
	if(k>5){
		intValid=intValid+1;
	}
	else{
		if(k==5){
			if(l>0){
				intValid=intValid+1;
			}
			else if((i%2)==1){
				intValid=intValid+1;
			}
		}
	}*/
	m_strOutputVal.Format("%.1f",m_dblInputVal);

	return true;

}

//////////////////////////////////////////////////////////////////////
// 水位数值处理
//////////////////////////////////////////////////////////////////////
bool CommonCal::WaterValProc()
{
	/*
	int i=0;
	int j=0;
	int intValid=0;
	
	i=int(pow(10,m_intKeepDot));
	j=int(pow(10,m_intKeepInt+m_intKeepDot));

	intValid=int(m_dblInputVal*pow(10,m_intKeepDot)+0.5);
	intValid=intValid%j;*/
	m_strOutputVal.Format("%.2f",m_dblInputVal);

	return true;

}


//////////////////////////////////////////////////////////////////////
// 时间处理
//////////////////////////////////////////////////////////////////////
bool CommonCal::TimeValProc()
{
	struct tm		tmTime;
	float			fltHour;
	float			fltMinute;
	float			fltSecond;
	int				intMday;
	
	tmTime=StrToTime(m_strInputTime);
	intMday=GetMonthEndDay(&tmTime);
	m_intMonth=tmTime.tm_mon;
	m_intDay=tmTime.tm_mday;
	m_intHour=tmTime.tm_hour;
	m_intMinute=tmTime.tm_min;
	fltHour=(float)tmTime.tm_hour;
	/*
	if(fltHour==0){
		fltHour=24;
		m_intDay--;
		if(m_intDay<=0)m_intDay+=intMday;
	}*/
	fltMinute=(float)tmTime.tm_min;
	fltSecond=(float)tmTime.tm_sec;
	m_fltTime=fltHour+(fltMinute+fltSecond/60)/60;
	if(m_fltTime<8)m_fltInterval=24-m_fltTime+8;
	else m_fltInterval=m_fltTime-8;

	m_strOutputTime.Format("%02d%02d%02d%02d",m_intMonth,m_intDay,m_intHour,m_intMinute);
	return true;
}

/*
//////////////////////////////////////////////////////////////////////
// 日期处理
//////////////////////////////////////////////////////////////////////
struct tm CommonCal::DateValProc(CString strInputTime)
{
	struct tm		tmTime;
	CString			strDate,strTime,strBuffer;
	CString			strYear,strMonth,strDay,strHour,strMinute,strSecond;
	int				intStart,intLength;

	intLength=strInputTime.GetLength();
	intStart=strInputTime.FindOneOf(" ");
	if(intStart==-1){
		strDate=strInputTime;
		strTime="00:00:00";
	}
	else{
		strDate=strInputTime.Left(intStart);
		strTime=strInputTime.Right(intLength-intStart-1);
	}
	strYear=strDate.Left(4);
	intLength=strDate.GetLength();
	strBuffer=strDate.Right(intLength-5);
	intStart=strBuffer.FindOneOf("-");
	strMonth=strBuffer.Left(intStart);
	intLength=strBuffer.GetLength();
	strDay=strBuffer.Right(intLength-intStart-1);

	intStart=strTime.FindOneOf(":");
	strHour=strTime.Left(intStart);
	strMinute=strTime.Mid(intStart+1,2);
	strSecond=strTime.Mid(intStart+4,2);

	tmTime.tm_year=atoi((LPCTSTR)strYear);
	tmTime.tm_mon=atoi((LPCTSTR)strMonth);
	tmTime.tm_mday=atoi((LPCTSTR)strDay);
	tmTime.tm_hour=atoi((LPCTSTR)strHour);
	tmTime.tm_min=atoi((LPCTSTR)strMinute);
	tmTime.tm_sec=atoi((LPCTSTR)strSecond);
	
	return tmTime;
}
*/

//////////////////////////////////////////////////////////////////////
// 字符串转换成日期类型
//////////////////////////////////////////////////////////////////////
struct tm CommonCal::StrToTime(CString strInputTime)
{
	struct tm		tmTime;
	CString			strDate,strTime,strBuffer;
	CString			strYear,strMonth,strDay,strHour,strMinute,strSecond;
	int				intStart,intLength;

	intLength=strInputTime.GetLength();
	intStart=strInputTime.FindOneOf(" ");
	if(intStart==-1){
		strDate=strInputTime;
		strTime="00:00:00";
	}
	else{
		strDate=strInputTime.Left(intStart);
		strTime=strInputTime.Right(intLength-intStart-1);
	}
	strYear=strDate.Left(4);
	intLength=strDate.GetLength();
	strBuffer=strDate.Right(intLength-5);
	intStart=strBuffer.FindOneOf("-");
	strMonth=strBuffer.Left(intStart);
	intLength=strBuffer.GetLength();
	strDay=strBuffer.Right(intLength-intStart-1);

	intStart=strTime.FindOneOf(":");
	strHour=strTime.Left(intStart);
	strMinute=strTime.Mid(intStart+1,2);
	strSecond=strTime.Mid(intStart+4,2);

	tmTime.tm_year=atoi((LPCTSTR)strYear);
	tmTime.tm_mon=atoi((LPCTSTR)strMonth);
	tmTime.tm_mday=atoi((LPCTSTR)strDay);
	tmTime.tm_hour=atoi((LPCTSTR)strHour);
	tmTime.tm_min=atoi((LPCTSTR)strMinute);
	tmTime.tm_sec=atoi((LPCTSTR)strSecond);
	
	return tmTime;
}

//////////////////////////////////////////////////////////////////////
// 日期转换字符串处理
//////////////////////////////////////////////////////////////////////
CString CommonCal::TimeToStr(struct tm tmTime)
{
	CString			strTime;
	strTime.Format("%04d-%02d-%02d %02d:%02d:%02d",tmTime.tm_year,tmTime.tm_mon,tmTime.tm_mday,tmTime.tm_hour,tmTime.tm_min,tmTime.tm_sec);
	return strTime;
}

//////////////////////////////////////////////////////////////////////
// 日期大小比较处理
//////////////////////////////////////////////////////////////////////
int CommonCal::TimeCompare(struct tm tmTime1,struct tm tmTime2)
{
	CString			strTime;
	
	if(tmTime1.tm_year>tmTime2.tm_year)return 1;
	if(tmTime1.tm_year<tmTime2.tm_year)return -1;

	if(tmTime1.tm_mon>tmTime2.tm_mon)return 1;
	if(tmTime1.tm_mon<tmTime2.tm_mon)return -1;

	if(tmTime1.tm_mday>tmTime2.tm_mday)return 1;
	if(tmTime1.tm_mday<tmTime2.tm_mday)return -1;

	if(tmTime1.tm_hour>tmTime2.tm_hour)return 1;
	if(tmTime1.tm_hour<tmTime2.tm_hour)return -1;

	if(tmTime1.tm_min>tmTime2.tm_min)return 1;
	if(tmTime1.tm_min<tmTime2.tm_min)return -1;

	if(tmTime1.tm_sec>tmTime2.tm_sec)return 1;
	if(tmTime1.tm_sec<tmTime2.tm_sec)return -1;

	return 0;
}

//////////////////////////////////////////////////////////////////////
// 计算加上一个时间间隔后的日期
//////////////////////////////////////////////////////////////////////
bool CommonCal::TimeAddSpan(struct tm *tmTime,int intYear,int intMonth,int intDay,int intHour,int intMinute,int intSecond)
{
	int				intMday=0;
	intMday=GetMonthEndDay(tmTime);

	tmTime->tm_sec+=intSecond;
	if(tmTime->tm_sec>=60){
		tmTime->tm_sec-=60;
		intMinute++;
	}

	tmTime->tm_min+=intMinute;
	if(tmTime->tm_min>=60){
		tmTime->tm_min-=60;
		intHour++;
	}

	tmTime->tm_hour+=intHour;
	if(tmTime->tm_hour>=24){
		tmTime->tm_hour-=24;
		intDay++;
	}

	tmTime->tm_mday+=intDay;
	if(tmTime->tm_mday>intMday){
		tmTime->tm_mday-=intMday;
		intMonth++;
	}

	tmTime->tm_mon+=intMonth;
	if(tmTime->tm_mon>12){
		tmTime->tm_mon-=12;
		intYear++;
	}

	tmTime->tm_year+=intYear;

	return true;
}

//////////////////////////////////////////////////////////////////////
// 计算减去一个时间间隔后的日期
//////////////////////////////////////////////////////////////////////
bool CommonCal::TimeSubSpan(struct tm *tmTime,int intYear,int intMonth,int intDay,int intHour,int intMinute,int intSecond)
{
	int				intMday=0;
	intMday=GetMonthEndDay(tmTime);

	tmTime->tm_sec-=intSecond;
	if(tmTime->tm_sec<0){
		tmTime->tm_sec+=60;
		intMinute++;
	}

	tmTime->tm_min-=intMinute;
	if(tmTime->tm_min<0){
		tmTime->tm_min+=60;
		intHour++;
	}

	tmTime->tm_hour-=intHour;
	if(tmTime->tm_hour<0){
		tmTime->tm_hour+=24;
		intDay++;
	}

	tmTime->tm_mday-=intDay;
	if(tmTime->tm_mday<1){
		tmTime->tm_mday+=intMday;
		intMonth++;
	}

	tmTime->tm_mon-=intMonth;
	if(tmTime->tm_mon<1){
		tmTime->tm_mon+=12;
		intYear++;
	}

	tmTime->tm_year-=intYear;

	return true;
}

//////////////////////////////////////////////////////////////////////
// 计算月底日期
//////////////////////////////////////////////////////////////////////
int CommonCal::GetMonthEndDay(struct tm *tmTime)
{
	int				intMday=0;
	switch(tmTime->tm_mon){
	case 1:{
		intMday=31;
		break;
			}
	case 3:{
		intMday=31;
		break;
			}
	case 5:{
		intMday=31;
		break;
			}
	case 7:{
		intMday=31;
		break;
			}
	case 8:{
		intMday=31;
		break;
			}
	case 10:{
		intMday=31;
		break;
			}
	case 12:{
		intMday=31;
		break;
			}
	case 2:{
		intMday=28;
		break;
		   }
	case 4:{
		intMday=30;
		break;
			}
	case 6:{
		intMday=30;
		break;
			}
	case 9:{
		intMday=30;
		break;
			}
	case 11:{
		intMday=30;
		break;
			}
	default:break;
	}
	if(IsLeapYear(tmTime)&&intMday==28)intMday=29;
	return intMday;
}

//////////////////////////////////////////////////////////////////////
// 判断是否为闰年
//////////////////////////////////////////////////////////////////////
bool CommonCal::IsLeapYear(struct tm *tmTime)
{
	if((tmTime->tm_year%100==0&&tmTime->tm_year%400==0)||(tmTime->tm_year%100!=0&&tmTime->tm_year%4==0))return true;
	else return false;
}

//////////////////////////////////////////////////////////////////////
// 流量数值处理
//////////////////////////////////////////////////////////////////////
CString CommonCal::FlowValProc(double dblInputVal)
{
	int				intDigitCnt=0;
	//int			intIntCnt=0;
	int				intFlowVal=0;
	CString			strOutputVal;

	if(dblInputVal<=0){
		strOutputVal="0";
	}
	else{
		intDigitCnt=(int)log10(dblInputVal)+1;
		if(intDigitCnt<=0) intFlowVal=(int)dblInputVal*1000;
		else intFlowVal=(int)(dblInputVal/pow(10,intDigitCnt-3));
		strOutputVal.Format("%1d%3d1",intDigitCnt,intFlowVal);
	}
	if(dblInputVal==0){
		strOutputVal="0";
		return strOutputVal;
	}
	if(dblInputVal>=100){
		strOutputVal.Format("%.0f",dblInputVal);
		return strOutputVal;
	}
	if(dblInputVal>=10){
		strOutputVal.Format("%.1f",dblInputVal);
		return strOutputVal;
	}
	if(dblInputVal>=1){
		strOutputVal.Format("%.2f",dblInputVal);
		return strOutputVal;
	}
	if(dblInputVal>=0.1){
		strOutputVal.Format("%.2f",dblInputVal);
		return strOutputVal;
	}

	strOutputVal.Format("%.3f",dblInputVal);
	return strOutputVal;
}

⌨️ 快捷键说明

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