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

📄 lan_ip_jf-cgi.h

📁 计费部分源程序。我认为该软件极好
💻 H
📖 第 1 页 / 共 3 页
字号:
*/
void ShowOneUserSumData(int groupID,int userID,char* userName,char* path,int flag)
{
	FILE* userPtr;
	char fileName[150];
	SumDataType sumData,sumData1;
	int i,j,k;
	float value = 0.0;

	/*统计用户使用量*/
	memset(&sumData,0,SumDataSize);
	sprintf(fileName,"%s%d/%d%s",path,groupID,userID,SumSuffix);
	if ((userPtr = fopen(fileName,"rb")) != NULL)
	{
		if (flag == 0)
		{/*计算一个月的费用,月份存放在SearchMonth中*/
			fseek(userPtr,SumDataSize*(SearchMonth - 1)*32,SEEK_SET);
			fread(&sumData,SumDataSize,1,userPtr);
		}
		else
		{/*计算一年的费用*/
			for (k = 0;k < 12; k++)
			{
				fread(&sumData1,SumDataSize,1,userPtr);
				for (i = 0; i < TIME_STAGE_NUM;i++)
					for (j = 0; j< NET_PART_NUM;j++)
					{
						sumData.inPackets[i][j] += sumData1.inPackets[i][j];
						sumData.inPacketsBytes[i][j] += sumData1.inPacketsBytes[i][j];
						sumData.outPackets[i][j] += sumData1.outPackets[i][j];
						sumData.outPacketsBytes[i][j] += sumData1.outPacketsBytes[i][j];
					}
				sumData.connectTime += sumData1.connectTime;
				fseek(userPtr,SumDataSize*31,SEEK_CUR);
			}
	
		}
		fclose(userPtr);
	}

	/*统计总体费用*/	
	for (i = 0; i < TIME_STAGE_NUM;i++)
		for (j = 0; j< NET_PART_NUM;j++)
		{
			totalSumData.inPackets[i][j] += sumData.inPackets[i][j];
			totalSumData.inPacketsBytes[i][j] += sumData.inPacketsBytes[i][j];
			totalSumData.outPackets[i][j] += sumData.outPackets[i][j];
			totalSumData.outPacketsBytes[i][j] += sumData.outPacketsBytes[i][j];
		}
	totalSumData.connectTime += sumData.connectTime;

	/*显示月份*/    
	cgiPrintf("<TR>");
	if (flag == 0)
	{
		if (language == 0)
			cgiPrintf("<TD>%d月总量 </TD>",SearchMonth);
		else cgiPrintf("<TD>%d month sum</TD>",SearchMonth);
	}
	else 
	{
		if (language == 0)
			cgiPrintf("<TD>开户期间</TD>");
		else cgiPrintf("<TD>int total time</TD>");
	}

	/*显示用户名称*/
	cgiPrintf("<TD>%s</TD>",GetGroupNameByID(groupID));

	/*显示用户名称*/
	cgiPrintf("<TD>%s</TD>",userName);
	
	/*显示进入的数据*/      
	for (i = 0; i < TIME_STAGE_NUM;i++)
		for (j = 0; j< NET_PART_NUM;j++)
		{
			cgiPrintf("<TD>%d</TD>",sumData.inPackets[i][j]);

			cgiPrintf("<TD>%ld</TD>",sumData.inPacketsBytes[i][j]);
		}
	/*显示外出的数据*/      
	for (i = 0; i < TIME_STAGE_NUM;i++)
		for (j = 0; j< NET_PART_NUM;j++)
		{
			cgiPrintf("<TD>%ld</TD>",sumData.outPackets[i][j]);

			cgiPrintf("<TD>%ld</TD>",sumData.outPacketsBytes[i][j]);
		}
	/*显示外出数据*/
	cgiPrintf("<TD>%ld</TD>",sumData.connectTime);

	/*显示费用*/
	for (i = 0; i < TIME_STAGE_NUM;i++)
		for (j = 0; j < NET_PART_NUM;j++)
		{
			value += ((float)sumData.inPacketsBytes[i][j]/1000.0*ConstRatio[i][j][0]+
					(float)sumData.outPacketsBytes[i][j]/1000.0*ConstRatio[i][j][1]);
/*
cgiPrintf("<BR>%f,%f</BR>",ConstRatio[i][j][0],ConstRatio[i][j][1]);
cgiPrintf("<br>%f,%f</br>",value,(sumData.outPacketsBytes/1000*ConstRatio[i][j][1]));
*/
		}
	/*统计总体钱数*/
	totalValue += value;

	cgiPrintf("<TD>%f</TD>",value);

	cgiPrintf("</TR>");
}
void ShowTotalSumData(SumDataType* sumData)
{
	int i,j;

	/*显示月份*/    
	cgiPrintf("<TR>");
	if (language == 0)
		cgiPrintf("<TD>总量 </TD>");
	else cgiPrintf("<TD>total sum</TD>");

	/*显示用户名称*/
	if (language == 0)
		cgiPrintf("<TD>全部 </TD>");
	else cgiPrintf("<TD>all </TD>");


	/*显示用户名称*/
	if (language == 0)
		cgiPrintf("<TD>全部用户 </TD>");
	else cgiPrintf("<TD>all users</TD>");
	
	/*显示进入的数据*/      
	for (i = 0; i < TIME_STAGE_NUM;i++)
		for (j = 0; j< NET_PART_NUM;j++)
		{
			cgiPrintf("<TD>%d</TD>",sumData->inPackets[i][j]);

			cgiPrintf("<TD>%ld</TD>",sumData->inPacketsBytes[i][j]);
		}
	/*显示外出的数据*/      
	for (i = 0; i < TIME_STAGE_NUM;i++)
		for (j = 0; j< NET_PART_NUM;j++)
		{
			cgiPrintf("<TD>%ld</TD>",sumData->outPackets[i][j]);

			cgiPrintf("<TD>%ld</TD>",sumData->outPacketsBytes[i][j]);
		}
	/*显示外出数据*/
	cgiPrintf("<TD>%ld</TD>",sumData->connectTime);

	/*显示费用*/
			
	cgiPrintf("<TD>%f</TD>",totalValue);

	cgiPrintf("</TR>");

}
/*
显示用户使用数据表表头
*/
void ShowUserDataTableHead()
{
	int i,j;

	cgiPrintf("<br>");
	if (language == 0)
		cgiPrintf("<H4>统计用户使用量如下表所示<H4>");
	else cgiPrintf("<H4>summarry of user's data   <H4>");
	/*统计用户使用量*/
	cgiPrintf("<BR>");
	cgiPrintf("<CENTER><TABLE BORDER WIDTH=\"600%\" >");
	cgiPrintf("<TR>");
	cgiPrintf("<TD>");
	if (language == 0)
		cgiPrintf("<CENTER>月份</CENTER>");
	else cgiPrintf("<CENTER>Month</CENTER>");
	cgiPrintf("</TD>");

	cgiPrintf("<TD>");
	if (language == 0)
		cgiPrintf("<CENTER>用户组名</CENTER>");
	else cgiPrintf("<CENTER>Group's Name</CENTER>");
	cgiPrintf("</TD>");

	cgiPrintf("<TD>");
	if (language == 0)
		cgiPrintf("<CENTER>用户名称</CENTER>");
	else cgiPrintf("<CENTER>User's Name</CENTER>");
	cgiPrintf("</TD>");
	if ((NET_PART_NUM == 1) && (TIME_STAGE_NUM == 1))
	{
		cgiPrintf("<TD>");
		if (language == 0)
			cgiPrintf("<CENTER>进入包数量 (个)</CENTER>");
		else cgiPrintf("<CENTER>In Packets' Number</CENTER>");
		cgiPrintf("</TD>");

		cgiPrintf("<TD>");
		if (language == 0)
			cgiPrintf("<CENTER>进入字节数 (字节)</CENTER>");
		else cgiPrintf("<CENTER>In Packets' Bytes (Byte)</CENTER>");
		cgiPrintf("</TD>");

		cgiPrintf("<TD>");
		if (language == 0)
			cgiPrintf("<CENTER>外出包数量 (个)</CENTER>");
		else cgiPrintf("<CENTER>Out Packets' Number</CENTER>");
		cgiPrintf("</TD>");

		cgiPrintf("<TD>");
		if (language == 0)
			cgiPrintf("<CENTER>外出字节数 (字节)</CENTER>");
		else cgiPrintf("<CENTER>Out Packets's Bytes (Byte)</CENTER>");
		cgiPrintf("</TD>");
	}
	if ((NET_PART_NUM == 1) && (TIME_STAGE_NUM > 1))
	{
		for (i = 0; i< TIME_STAGE_NUM;i++)
		{
			cgiPrintf("<TD>");
			if (language == 0)
				cgiPrintf("<CENTER><BR>%s</BR><BR>进入包数量 (个)</BR></CENTER>",TimeStageName[i]);
			else cgiPrintf("<CENTER><BR>%s</BR><BR>In Packets' Number</BR></CENTER>",TimeStageName[i]);
			cgiPrintf("</TD>");

			cgiPrintf("<TD>");
			if (language == 0)
				cgiPrintf("<CENTER><BR>%s</BR><BR>进入字节数 (字节)</BR></CENTER>",TimeStageName[i]);
			else cgiPrintf("<CENTER><BR>%s</BR><BR>In Packets' Bytes (Byte)</BR></CENTER>",TimeStageName[i]);
			cgiPrintf("</TD>");
		}
		for (i = 0; i< TIME_STAGE_NUM;i++)
		{
			cgiPrintf("<TD>");
			if (language == 0)
				cgiPrintf("<CENTER><BR>%s</BR><BR>外出包数量 (个)</BR></CENTER>",TimeStageName[i]);
			else cgiPrintf("<CENTER><BR>%s</BR><BR>Out Packets' Number</BR></CENTER>",TimeStageName[i]);
			cgiPrintf("</TD>");

			cgiPrintf("<TD>");
			if (language == 0)
				cgiPrintf("<CENTER><BR>%s</BR><BR>外出字节数 (字节)</BR></CENTER>",TimeStageName[i]);
			else cgiPrintf("<CENTER><BR>%s</BR><BR>Out Packets' Bytes (Byte)</BR></CENTER>",TimeStageName[i]);
			cgiPrintf("</TD>");
		}
	}
	if ((NET_PART_NUM > 1) && (TIME_STAGE_NUM == 1))
	{
		for (i = 0; i< NET_PART_NUM;i++)
		{
			cgiPrintf("<TD>");
			if (language == 0)
				cgiPrintf("<CENTER><BR>%s</BR><BR>进入包数量 (个)</BR></CENTER>",NetPartName[i]);
			else cgiPrintf("<CENTER><BR>%s</BR><BR>In Packets' Number</BR></CENTER>",NetPartName[i]);
			cgiPrintf("</TD>");

			cgiPrintf("<TD>");
			if (language == 0)
				cgiPrintf("<CENTER><BR>%s</BR><BR>进入字节数 (字节)</BR></CENTER>",NetPartName[i]);
			else cgiPrintf("<CENTER><BR>%s</BR><BR>In Packets' Bytes (Byte)</BR></CENTER>",NetPartName[i]);
			cgiPrintf("</TD>");
		}
		for (i = 0; i< TIME_STAGE_NUM;i++)
		{
			cgiPrintf("<TD>");
			if (language == 0)
				cgiPrintf("<CENTER><BR>%s<BR><BR>外出包数量 (个)<BR></CENTER>",NetPartName[i]);
			else cgiPrintf("<CENTER><BR>%s<BR><BR>Out Packets' Number<BR></CENTER>",NetPartName[i]);
			cgiPrintf("</TD>");

			cgiPrintf("<TD>");
			if (language == 0)
				cgiPrintf("<CENTER><BR>%s</BR><BR>外出字节数 (字节)</BR></CENTER>",NetPartName[i]);
			else cgiPrintf("<CENTER><BR>%s</BR><BR>Out Packets' Bytes (Byte)</BR></CENTER>",NetPartName[i]);
			cgiPrintf("</TD>");
		}
	}
	if ((NET_PART_NUM > 1) && (TIME_STAGE_NUM > 1))
	{
		for (i = 0; i< TIME_STAGE_NUM;i++)
			for (j = 0; j < NET_PART_NUM; j++)
			{
				cgiPrintf("<TD>");
				if (language == 0)
					cgiPrintf("<CENTER><BR>%s</BR><BR>%s</BR><BR>进入包数量 (个)</BR></CENTER>",TimeStageName[i],NetPartName[j]);
				else cgiPrintf("<CENTER><BR>%s</BR><BR>%s</BR><BR>In Packets' Number</BR></CENTER>",TimeStageName[i],NetPartName[j]);
				cgiPrintf("</TD>");

				cgiPrintf("<TD>");
				if (language == 0)
					cgiPrintf("<CENTER><BR>%s</BR><BR>%s</BR><BR>进入字节数 (字节)</BR></CENTER>",TimeStageName[i],NetPartName[j]);
				else cgiPrintf("<CENTER><BR>%s</BR><BR>%s</BR><BR>In Packets' Bytes (Byte)</BR></CENTER>",TimeStageName[i],NetPartName[j]);
				cgiPrintf("</TD>");
			}
		for (i = 0; i< TIME_STAGE_NUM;i++)
			for (j = 0; j < NET_PART_NUM; j++)
			{
				cgiPrintf("<TD>");
				if (language == 0)
					cgiPrintf("<CENTER><BR>%s</BR><BR>%s</BR><BR>外出包数量 (个)</BR></CENTER>",TimeStageName[i],NetPartName[j]);
				else cgiPrintf("<CENTER><BR>%s</BR><BR>%s</BR><BR>Out Packets' Number</BR></CENTER>",TimeStageName[i],NetPartName[j]);
				cgiPrintf("</TD>");

				cgiPrintf("<TD>");
				if (language == 0)
					cgiPrintf("<CENTER><BR>%s</BR><BR>%s</BR><BR>外出字节数 (字节)</BR></CENTER>",TimeStageName[i],NetPartName[j]);
				else cgiPrintf("<CENTER><BR>%s</BR><BR>%s</BR><BR>Out Packets' Bytes (Byte)</BR></CENTER>",TimeStageName[i],NetPartName[j]);
				cgiPrintf("</TD>");
			}
	}
	cgiPrintf("<TD>");
	if (language == 0)
		cgiPrintf("<CENTER>总连接时间 (秒)</CENTER>");
	else cgiPrintf("<CENTER>Total connect time (Second)</CENTER>");
	cgiPrintf("</TD>");
	cgiPrintf("<TD>");
	if (language == 0)
		cgiPrintf("<CENTER>费用 (元)</CENTER>");
	else cgiPrintf("<CENTER>Fee (RMB Yuan)</CENTER>");
	cgiPrintf("</TD>");
	cgiPrintf("</TR>");
}
/*
显示某个用户某一天的用量
*/
void ShowOneUserDay(int groupID,int userID,char* userName,SumDataType *sumData,int day)
{
	int i,j,k;
	float value = 0.0;

	/*显示日期*/    
	cgiPrintf("<TR>");
	cgiPrintf("<TD>%d/%d</TD>",day,SearchMonth);


	/*显示用户名称*/
	cgiPrintf("<TD>%s</TD>",GetGroupNameByID(groupID));

	/*显示用户名称*/
	cgiPrintf("<TD>%s</TD>",userName);
	
	/*显示进入的数据*/      
	for (i = 0; i < TIME_STAGE_NUM;i++)
		for (j = 0; j< NET_PART_NUM;j++)
		{
			cgiPrintf("<TD>%d</TD>",sumData->inPackets[i][j]);

			cgiPrintf("<TD>%ld</TD>",sumData->inPacketsBytes[i][j]);
		}
	/*显示外出的数据*/      
	for (i = 0; i < TIME_STAGE_NUM;i++)
		for (j = 0; j< NET_PART_NUM;j++)
		{
			cgiPrintf("<TD>%ld</TD>",sumData->outPackets[i][j]);

			cgiPrintf("<TD>%ld</TD>",sumData->outPacketsBytes[i][j]);
		}
	/*显示外出数据*/
	cgiPrintf("<TD>%ld</TD>",sumData->connectTime);

	/*显示费用*/
	for (i = 0; i < TIME_STAGE_NUM;i++)
		for (j = 0; j < NET_PART_NUM;j++)
		{
			value += ((float)sumData->inPacketsBytes[i][j]/1000.0*ConstRatio[i][j][0]+
					(float)sumData->outPacketsBytes[i][j]/1000.0*ConstRatio[i][j][1]);
/*
cgiPrintf("<BR>%f,%f</BR>",ConstRatio[i][j][0],ConstRatio[i][j][1]);
cgiPrintf("<br>%f,%f</br>",value,(sumData.outPacketsBytes/1000*ConstRatio[i][j][1]));
*/
		}
			
	cgiPrintf("<TD>%f</TD>",value);

	cgiPrintf("</TR>");
}
/*
显示某个用户在某个月每天的数据
*/
void ShowOneUserDetail(int groupID,int userID,char* userName,char* path)
{
	FILE* userPtr;
	char fileName[150];
	SumDataType sumData,*sumDataPtr = &sumData;
	int i,j,k;
	float value = 0.0;

	/*统计用户使用量*/
	memset(&sumData,0,SumDataSize);
	sprintf(fileName,"%s%d/%d%s",path,groupID,userID,SumSuffix);
	if ((userPtr = fopen(fileName,"rb")) != NULL)
	{
		fseek(userPtr,SumDataSize*((SearchMonth - 1)*32+1),SEEK_SET);
		for (i = 0; i < 31; i++)
		{
			fread(sumDataPtr,SumDataSize,1,userPtr);
			ShowOneUserDay(groupID,userID,userName,sumDataPtr,i+1);
		}
		fclose(userPtr);
	}
}

/*
读费率文件
费率文件格式:如3个时间段,3个网段
	第1行:时间段1在网段1的进入费率,以每1千字节为单位
	第2行:时间段1在网段1的外出费率,以每1千字节为单位
	第3行:时间段1在网段2的进入费率,
	第4行:时间段1在网段2的外出费率,
	第5行:时间段1在网段3的进入费率
	第6行:时间段1在网段3的外出费率
	.........................
	第18行:时间段3在网段3的外出费率
*/
int ReadConstRatioFile()
{
	FILE* fptr;
	char str[50];
	int i,j;
	char fileName[150];

	for (i = 0 ; i < TIME_STAGE_NUM; i++)
		for (j = 0; j < NET_PART_NUM; j++)
		{
			ConstRatio[i][j][0] = DEFAULT_CONST_RATIO;
			ConstRatio[i][j][1] = DEFAULT_CONST_RATIO;
		}

	sprintf(fileName,"%s%s",PATH,ConstRatioFile);
	if ((fptr = fopen(fileName,"r")) == NULL)
	{
		PrintError("don't open const ratio file %s for read.\n",ConstRatioFile);
		return -1;
	}
	for (i  = 0; i < TIME_STAGE_NUM; i++)
		for (j = 0; j < NET_PART_NUM; j++)
		{
			fgets(str,100,fptr);
/*
cgiPrintf("<br>%s</br>",str);
*/
			if (feof(fptr))
				break;
			sscanf(str,"%f",&ConstRatio[i][j][0]);
			fgets(str,100,fptr);
			if (feof(fptr))
				break;
			sscanf(str,"%f",&ConstRatio[i][j][1]);

		}
	fclose(fptr);   
	return 0;
}
/*

⌨️ 快捷键说明

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