#include "server.h"
void print_cell_database(CELL_INFO cell_database[])
{
int i = 0, j = 0;
while(cell_database[i].CGI)
{
printf("cell_database[%d].CGI = %d\ncell_database[%d].Busy_Hour = %d\n",i,cell_database[i].CGI,i,cell_database[i].Busy_Hour);
for(j = 0; j < 3; j++)
{
printf("cell_database[%d].SSID[%d] = %s\n", i, j, cell_database[i].SSID[j]);
}
i++;
j = 0;
}
}
void print_wlan_database(WLAN_INFO wlan_database[])
{
int i = 0;
while(strlen(wlan_database[i].BSSID))
{
printf("wlan_database[%d].BSSID = %s \nwlan_database[%d].GPS_Pos.latitude = %s \nwlan_database[%d].GPS_Pos.longtitude = %s \nwlan_database[%d].SSID = %s \n"
"wlan_database[%d].CGI = %d \nwlan_database[%d].Busy_Hour = %d \nwlan_database[%d].High_Quality_Num = %d\nwlan_database[%d].Low_Quality_Num = %d\n"
"wlan_database[%d].Middle_Quality_Num = %d\nwlan_database[%d].Quality_Level = %d\n",
i,wlan_database[i].BSSID,i,wlan_database[i].GPS_Pos.latitude,i,wlan_database[i].GPS_Pos.longtitude,i,wlan_database[i].SSID,
i,wlan_database[i].CGI,i,wlan_database[i].Busy_Hour,i,wlan_database[i].High_Quality_Num,i,wlan_database[i].Low_Quality_Num,
i,wlan_database[i].Middle_Quality_Num,i,wlan_database[i].Quality_Level);
i++;
}
}
//PCELL_INFO cell_data_init(PCELL_INFO cell_data)
void cell_data_init(PCELL_INFO cell_data)
{
printf("Please Input CELL_DATA : CGI & BUSY\n");
scanf("%d,%d",&cell_data->CGI,&cell_data->Busy_Hour);
// printf("cell_data.CGI = %d\ncell_data.Busy_Hour = %c\n", cell_data->CGI, cell_data->Busy_Hour);
}
void wlan_data_init(PWLAN_INFO wlan_data)
{
printf("Please Input WLAN_DATA : BSSID & CGI & BUSY\n");
scanf("%s",wlan_data->BSSID);
scanf("%d,%d",&wlan_data->CGI,&wlan_data->Busy_Hour);
printf("wlan_data.BSSID = %s\nwlan_data.CGI = %d\nwlan_data.Busy_Hour = %d\n", wlan_data->BSSID,wlan_data->CGI,wlan_data->Busy_Hour);
}
/* 将小区信息或者WLAN热点信息结构体存入数据库中 */
void insert_info2database(void* database, void* data, char flag)
{
int i = 0, j = 0;
switch(flag)
{
/* 往小区信息数据库里插入小区信息,当小区编号重叠是对小区信息进行替换 */
case CELL_DATABASE:
{
PCELL_INFO cell_database = database;
PCELL_INFO cell_data = data;
//printf("Enter into cell_database\n");
while(cell_database[i].CGI)
{
if(cell_database[i].CGI == cell_data->CGI)
{
cell_database[i].Busy_Hour = cell_data->Busy_Hour;
for(j = 0; j < 3; j++)
{
strcpy(cell_database[i].SSID[j], cell_data->SSID[j]);
}
break;
}
i++;
if(CELL_INFO_DATABASE_SIZE < i)
return -1;
}
if(0 == cell_database[i].CGI)
{
cell_database[i].CGI = cell_data->CGI;
cell_database[i].Busy_Hour = cell_data->Busy_Hour;
for(j = 0; j < 3; j++)
{
strcpy(cell_database[i].SSID[j], cell_data->SSID[j]);
}
}
break;
}
/* 往WLAN热点信息数据库里插入WLAN热点信息,当WLAN热点编号重叠是对WLAN热点信息进行替换 */
case WLAN_DATABASE:
{
PWLAN_INFO wlan_database = database;
PWLAN_INFO wlan_data = data;
i = 0;
//printf("Enter into wlan_database\n");
while(strlen(wlan_database[i].BSSID))
{
if(0 == strcmp(wlan_database[i].BSSID,wlan_data->BSSID))
{
wlan_database[i].Busy_Hour = wlan_data->Busy_Hour;
wlan_database[i].CGI = wlan_data->CGI;
wlan_database[i].GPS_Pos = wlan_data->GPS_Pos;
wlan_database[i].High_Quality_Num = wlan_data->High_Quality_Num;
wlan_database[i].Low_Quality_Num = wlan_data->Low_Quality_Num;
wlan_database[i].Middle_Quality_Num = wlan_data->Middle_Quality_Num;
wlan_database[i].Quality_Level = wlan_data->Quality_Level;
strcpy(wlan_database[i].SSID, wlan_data->SSID);
break;
}
i++;
if(WLAN_INFO_DATABASE_SIZE < i)
return -1;
}
if(0 == strlen(wlan_database[i].BSSID))
{
wlan_database[i].Busy_Hour = wlan_data->Busy_Hour;
wlan_database[i].CGI = wlan_data->CGI;
wlan_database[i].GPS_Pos = wlan_data->GPS_Pos;
wlan_database[i].High_Quality_Num = wlan_data->High_Quality_Num;
wlan_database[i].Low_Quality_Num = wlan_data->Low_Quality_Num;
wlan_database[i].Middle_Quality_Num = wlan_data->Middle_Quality_Num;
wlan_database[i].Quality_Level = wlan_data->Quality_Level;
strcpy(wlan_database[i].SSID, wlan_data->SSID);
strcpy(wlan_database[i].BSSID, wlan_data->BSSID);
}
break;
}
default:
printf("FOUND NO DATABASE!!!\n");
}
}
/* 将从文件中取出的字符串进行解析,并将解析后的数据存入小区或者WLAN结构体中 */
void str2data(char* string, void* data, char flag)
{
char *str = NULL, *p = NULL, *q = NULL, *tmp = NULL, *count = NULL;
int i = 0;
str = malloc(200);
if(NULL == str)
printf("malloc error\n");
memset(str, 0, 200);
strcpy(str, string);
switch(flag)
{
/* 解析第一、第二个字段CGI、Busy_Hour 解析第三、四、五个字段SSID[3] */
case CELL_DATABASE:
{
PCELL_INFO cell_data = data;
//printf("Enter into cell_database\n");
/* 解析第一、第二个字段CGI、Busy_Hour */
for(i = 0; i < 2; i++)
{
count = NULL;
if(0 == i)
p = str;
else
p = tmp + 1;
tmp = strstr(p,",");
q = strtok(p, ",");
switch(i)
{
case 0:
cell_data->CGI = strtol(q, &count, 10);
// printf("After 1: cell_data->CGI = %d\ntmp = %s", cell_data->CGI, tmp+1);
break;
case 1:
cell_data->Busy_Hour = strtol(q, &count, 10);
// printf("\nAfter 2: cell_data->Busy_Hour = %d\ntmp = %s", cell_data->Busy_Hour, tmp+1);
break;
default:
printf("error\n");
}
}
/* 解析第三、四、五个字段 */
for(i = 0; i < 3; i++)
{
p = tmp + 1;
tmp = strstr(p,",");
if(2 != i)
q = strtok(p,",");
else
q = strtok(p,"\n");
strcpy(cell_data->SSID[i], q);
//printf("%s\n", cell_data->SSID[i]);
}
}
break;
/* WLAN_INFO解析第0~2个字段BSSID:str[6] GPS_POS:2*str[10] SSID:str[32]
解析第3~8个字段 CGI、Busy_Hour、High_Quality_Num、Low_Quality_Num、Middle_Quality_Num、Quality_Level */
case WLAN_DATABASE:
{
PWLAN_INFO wlan_data = data;
//printf("Enter into cell_database\n");
/* 解析第0~2个字段BSSID:str[6] GPS_POS:2*str[10] SSID:str[32] */
for(i = 0; i < 4; i++)
{
if(0 == i)
p = str;
else
p = tmp + 1;
tmp = strstr(p,",");
q = strtok(p, ",");
switch(i)
{
/* 解析第0个字段BSSID */
case 0:
strcpy(wlan_data->BSSID, q);
//printf("After 0: wlan_data->BSSID = %s\ntmp = %s", wlan_data->BSSID, tmp+1);
break;
/* 解析第一个字段GPS_Pos.latitude */
case 1:
strcpy(wlan_data->GPS_Pos.latitude, q);
//printf("After 1: wlan_data->GPS_Pos.latitude = %s\ntmp = %s", wlan_data->GPS_Pos.latitude, tmp+1);
break;
/* 解析第一个字段GPS_Pos.longtitude */
case 2:
strcpy(wlan_data->GPS_Pos.longtitude, q);
//printf("After 1: wlan_data->GPS_Pos.longtitude = %s\ntmp = %s", wlan_data->GPS_Pos.longtitude, tmp+1);
break;
/* 解析第二个字段SSID */
case 3:
strcpy(wlan_data->SSID, q);
//printf("After 2: wlan_data->SSID = %s\ntmp = %s", wlan_data->SSID, tmp+1);
break;
default:
printf("error\n");
}
}
/* 解析第3~8个字段 CGI、Busy_Hour、High_Quality_Num、Low_Quality_Num、Middle_Quality_Num、Quality_Level */
for(i = 0; i < 6; i++)
{
count = NULL;
p = tmp + 1;
tmp = strstr(p,",");
if(5 != i)
q = strtok(p,",");
else
q = strtok(p,"\n");
switch(i)
{
/* 解析第3个字段CGI */
case 0:
wlan_data->CGI = strtol(q, &count, 10);
//printf("After 3: wlan_data->CGI = %d\ntmp = %s", wlan_data->CGI, tmp+1);
break;
/* 解析第4个字段Busy_Hour */
case 1:
wlan_data->Busy_Hour = strtol(q, &count, 10);
//printf("After 4: wlan_data->Busy_Hour = %d\ntmp = %s", wlan_data->Busy_Hour, tmp+1);
break;
/* 解析第5个字段High_Quality_Num */
case 2:
wlan_data->High_Quality_Num = strtol(q, &count, 10);
//printf("After 5: wlan_data->High_Quality_Num = %d\ntmp = %s", wlan_data->High_Quality_Num, tmp+1);
break;
/* 解析第6个字段Low_Quality_Num */
case 3:
wlan_data->Low_Quality_Num = strtol(q, &count, 10);
//printf("After 6: wlan_data->Low_Quality_Num = %d\ntmp = %s", wlan_data->Low_Quality_Num, tmp+1);
break;
/* 解析第7个字段Middle_Quality_Num */
case 4:
wlan_data->Middle_Quality_Num = strtol(q, &count, 10);
//printf("After 7: wlan_data->Middle_Quality_Num = %d\ntmp = %s", wlan_data->Middle_Quality_Num, tmp+1);
break;
/* 解析第8个字段Quality_Level */
case 5:
wlan_data->Quality_Level = strtol(q, &count, 10);
//printf("After 8: wlan_data->Quality_Level = %d\n", wlan_data->Quality_Level);
break;
default:
printf("error\n");
}
}
}
break;
default:
printf("error\n");
}
free(str);
}
/* 将小区或WLAN热点信息转换成字符串类型(注意将该字符串输入到文件时要调整文件句柄指向的位置) */
void data2str(char* str, void* data, char flag)
{
int i = 0;
switch(flag)
{
/* 解析第一、第二个字段CGI、Busy_Hour 解析第三、四、五个字段SSID[3] */
case CELL_DATABASE:
{
PCELL_INFO cell_data = data;
printf("Enter into cell_database\n");
i = sprintf(str,"CELL_DATA :%d,%d,%s,%s,%s\n",cell_data->CGI,cell_data->Busy_Hour,cell_data->SSID[0],cell_data->SSID[1],cell_data->SSID[2]);
}
break;
case WLAN_DATABASE:
{
PWLAN_INFO wlan_data = data;
printf("Enter into cell_database\n");
i = sprintf(str,"WLAN_DATA :%s,%s,%s,%s,%d,%d,%d\,%d,%d,%d\n",wlan_data->BSSID,wlan_data->GPS_Pos.latitude,wlan_data->GPS_Pos.longtitude,wlan_data->SSID,
wlan_data->CGI,wlan_data->Busy_Hour,wlan_data->High_Quality_Num,wlan_data->Low_Quality_Num,wlan_data->Middle_Quality_Num,wlan_data->Quality_Level);
}
break;
default:
printf("error\n");
}
}
/* 解析第0~2个字段BSSID:str[6] GPS_POS:2*str[10] SSID:str[32] */
/* 解析第3~8个字段 CGI、Busy_Hour、High_Quality_Num、Low_Quality_Num、Middle_Quality_Num、Quality_Level */
void main(int argc, char* argv[])
{
PCELL_INFO cell_database = NULL;
PWLAN_INFO wlan_database = NULL;
PCELL_INFO cell_data = NULL;
PWLAN_INFO wlan_data = NULL;
//char pstStr0[] = "aaa,bbb,ccc,ddd\n";
//char pstStr1[] = "abcd,1234,5678,qqqweeewwweeeww,12345,111,2222,3333,4444,8\n";
//char pstStr2[] = "333,55,www,666,111\n";
char str0[100] = {0};
char str1[100] = {0};
char str2[100] = {0};
int i = 0;
FILE * wlan_stream = NULL;
FILE * cell_stream = NULL;
char cell[10] = "cell.csv";
char wlan[10] = "wlan.csv";
FILE * wlan_fp = NULL;
FILE * cell_fp = NULL;
cell_fp = fopen("cell.txt", "a+");
wlan_fp = fopen("wlan.txt", "a+");
cell_stream = fopen(cell, "a+");
if(NULL == cell_stream)
{
printf("open wlan_stream error\n");
return -1;
}
wlan_stream = fopen(wlan, "a+");
if(NULL == wlan_stream)
{
printf("open cell_stream error\n");
return -1;
}
/* 创建小区信息表和WLAN热点信息表 */
printf("create cell_info_database and wlan_info_database\n");
cell_database = malloc(sizeof(CELL_INFO) * CELL_INFO_DATABASE_SIZE);
if(NULL == cell_database)
{
printf("cell_database malloc error\n");
return -1;
}
memset(cell_database, 0, sizeof(CELL_INFO) * CELL_INFO_DATABASE_SIZE);
wlan_database = malloc(sizeof(WLAN_INFO) * WLAN_INFO_DATABASE_SIZE);
if(NULL == wlan_database)
{
printf("wlan_info_database malloc error\n");
return -1;
}
memset(wlan_database, 0, sizeof(WLAN_INFO) * WLAN_INFO_DATABASE_SIZE);
/* 为临时结构体cell_data和wlan_data分配内存空间 */
cell_data = malloc(sizeof(CELL_INFO));
if(NULL == cell_data)
{
printf("cell_data malloc error\n");
}
memset(cell_data, 0, sizeof(CELL_INFO));
wlan_data = malloc(sizeof(WLAN_INFO));
if(NULL == wlan_data)
{
printf("wlan_data malloc error\n");
}
memset(wlan_data, 0, sizeof(WLAN_INFO));
/* 通过fputs和fgets函数实现字符串在文本中的写入与读出,需要注意完成写操作后需要调用fseek函数将句柄指向文件的起点 */
//fputs(pstStr0, fp);
//fputs(pstStr1, fp);
//fputs(pstStr2, fp);
/* 返回到文本的起点,并逐行读取字符串 */
fseek(cell_stream, 0, SEEK_SET);
while(1)
{
if(NULL != fgets(str0, 100, cell_stream))
{
str2data(str0, cell_data, CELL_DATABASE);
insert_info2database(cell_database, cell_data, CELL_DATABASE);
data2str(str2, cell_data, CELL_DATABASE);
fputs(str2, cell_fp);
}
else
break;
}
print_cell_database(cell_database);
fseek(wlan_stream, 0, SEEK_SET);
while(1)
{
if(NULL != fgets(str1, 100, wlan_stream))
{
str2data(str1, wlan_data, WLAN_DATABASE);
insert_info2database(wlan_database, wlan_data, WLAN_DATABASE);
data2str(str2, wlan_data, WLAN_DATABASE);
fputs(str2, wlan_fp);
}
else
break;
}
print_wlan_database(wlan_database);
//fgets(str0, 100, cell_stream);
//fgets(str1, 100, cell_stream);
//fgets(str2, 100, cell_stream);
/* 通过fwrite和fread函数实现字符串在文本中的写入与读出,需要注意完成写操作后需要调用fseek函数将句柄指向文件的起点 */
//fwrite(pstStr0, strlen(pstStr0), 1, fp);
//fwrite(pstStr1, strlen(pstStr1), 1, fp);
//fwrite(pstStr2, strlen(pstStr2), 1, fp);
//fseek(fp, 0, SEEK_SET);
//fread(str0, strlen(pstStr0), 1, fp);
//fread(str1, strlen(pstStr1), 1, fp);
//fread(str2, strlen(pstStr2), 1, fp);
//printf("Printf the file data\n");
//printf("str0 : %s\n",str0);
//printf("str1 : %s\n",str1);
//printf("str2 : %s\n",str2);
//str2data(str2, cell_data, CELL_DATABASE);
//insert_info2database(cell_database, cell_data, CELL_DATABASE);
// data2str(str2, cell_data, CELL_DATABASE);
//printf("str2 : %s\n",str2);
//fseek(fp,0,SEEK_END);
//fputs(str2, fp);
//print_cell_database(cell_database);
//str2data(str1, wlan_data, WLAN_DATABASE);
//insert_info2database(wlan_database, wlan_data, WLAN_DATABASE);
//data2str(str1, wlan_data, WLAN_DATABASE);
//printf("str1 : %s\n",str1);
//fputs(str1, fp);
//print_wlan_database(wlan_database);
fclose(cell_stream);
fclose(wlan_stream);
fclose(wlan_fp);
fclose(cell_fp);
getchar();
}