📄 lan_ip_jf-cgi.h
字号:
*/
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 + -