bool DATE_make(DATE_SERIAL *date, VALUE *val) { short year; int nday; bool timezone; if (!date_is_valid(date)) return TRUE; if (date->year == 0) { nday = 0; /*(-DATE_NDAY_BC - 1);*/ timezone = FALSE; } else { year = date_to_julian_year(date->year); nday = year * 365; year--; nday += (year >>= 2); nday -= (year /= 25); nday += year >> 2; nday += days_in_year[date_is_leap_year(date->year)][(short)date->month] + date->day; /*nday -= DATE_NDAY_BC;*/ timezone = TRUE; } val->_date.date = nday; val->_date.time = ((date->hour * 60) + date->min) * 60 + date->sec; if (timezone) val->_date.time -= DATE_get_timezone(); if (val->_date.time < 0) { val->_date.date--; val->_date.time += 86400; } else if (val->_date.time >= 86400) { val->_date.date++; val->_date.time -= 86400; } val->_date.time = val->_date.time * 1000 + date->msec; val->type = T_DATE; return FALSE; }
/** * Determines if a given date and time is valid for calendar * * @param bdate - pointer to a BACNET_DATE structure * @param btime - pointer to a BACNET_TIME structure * * @return true if the date and time are valid */ bool datetime_is_valid( BACNET_DATE * bdate, BACNET_TIME * btime) { bool status = false; /* return value */ /* get the number of days in the month, and check for valid month too */ if (bdate) { status = date_is_valid(bdate->year, bdate->month, bdate->day); if (status && btime) { status = time_is_valid(btime->hour, btime->min, btime->sec, btime->hundredths); } else { status = false; } } return status; }
static uint32_t days_since_epoch( uint16_t year, uint8_t month, uint8_t day) { uint32_t days = 0; /* return value */ uint16_t years = 0; /* loop counter for years */ uint8_t months = 0; /* loop counter for months */ if (date_is_valid(year, month, day)) { for (years = 1900; years < year; years++) { days += 365; if (is_leap_year(years)) days++; } for (months = 1; months < month; months++) { days += month_days(years, months); } days += (day - 1); } return (days); }
int main(int argc, const char * argv[]) { //arrays de meses const char *meses[12] = { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Nomviembre", "Diciembre" }; //instacio a File para abrir archivos como "archivo" FILE *archivo,*archivo1,*archivo2; //declaro a fila y un iterador int fila, i, pos_ini, pos_fin, cantidad_caracteres; //guardo la linea con un array de string char caracteres[TAMANO_LINEA]; //guardo la linea con un array de string char variable_destino[TAMANO_LINEA]; //declaro el separador de lineas char caracter_buscado = '*'; //Se define el nombre del archivo /*FILES EN MAC*//* char transacciones[1240]="/Applications/MAMP/htdocs/C/prueba/prueba/TRANSACCIONES.txt"; char productos[1250] = "/Applications/MAMP/htdocs/C/prueba/prueba/PRODUCTOS.txt"; char locales[1250] = "/Applications/MAMP/htdocs/C/prueba/prueba/LOCALES.txt"; */ /*FILES EN PC*/ char transacciones[1240]="TRANSACCIONES.txt"; char productos[1250] = "PRODUCTOS.txt"; char locales[1250] = "LOCALES.txt"; // Permite abrir archivo. archivo = fopen(transacciones,"r"); archivo1 = fopen(productos,"r"); archivo2 = fopen(locales,"r"); // Si el archivo no se encuentra o se esta dañado, no se puede leer. if (archivo == NULL || archivo1 == NULL || archivo2 == NULL) { printf("Archivo no puede ser leido\n\n"); system("pause"); exit(1); } /** * Estructura Transaccion * *<dia>*<mes>*<anio>*<id_local>*<id_producto>*<cantidad>* * */ // Definimos vector de largo NUMERO_REGISTROS de tipo de datos "linea" trans_1 var_transaccion[NUMERO_REGISTROS]; //Almacenamos las transacciones en el vector de estructura "var_transaccion" fila = 0; while (feof(archivo) == 0) { //Funcion que lee linea por linea e imprime por pantalla su resultado. fgets(caracteres,TAMANO_LINEA,archivo); strcpy(var_transaccion[fila].transaccion,caracteres); fila++; } trans_2 var_transaccion2[NUMERO_REGISTROS]; fila = 0; while (feof(archivo1) == 0) { //Funcion que lee linea por linea e imprime por pantalla su resultado. fgets(caracteres,TAMANO_LINEA,archivo1); strcpy(var_transaccion2[fila].transaccion,caracteres); fila++; } trans_3 var_transaccion3[NUMERO_REGISTROS]; fila = 0; while (feof(archivo2) == 0) { //Funcion que lee linea por linea e imprime por pantalla su resultado. fgets(caracteres,TAMANO_LINEA,archivo2); strcpy(var_transaccion3[fila].transaccion,caracteres); fila++; } // Se definen vectores de estructura transaccion ventas[NUMERO_REGISTROS]; producto prods[NUMERO_PRODUCTOS]; local loc[10]; //Proceso de extraccion for( i = 0; i < NUMERO_REGISTROS ; i++) { //Extraer dia pos_ini = 1; pos_fin = Buscar_String( var_transaccion[i].transaccion, caracter_buscado, pos_ini+1 ); cantidad_caracteres = ((pos_fin - pos_ini) - 1); substring(variable_destino,var_transaccion[i].transaccion,pos_ini+1,cantidad_caracteres); //Almacenamos el variable extraida a la estructura ventas[i].dia = atoi(variable_destino); //Extraer mes pos_ini = pos_fin; pos_fin = Buscar_String( var_transaccion[i].transaccion, caracter_buscado, pos_ini+1 ); cantidad_caracteres = ((pos_fin - pos_ini) - 1); substring(variable_destino,var_transaccion[i].transaccion,pos_ini+1,cantidad_caracteres); //Almacenamos el variable extraida a la estructura ventas[i].mes = atoi(variable_destino); //Extraer año pos_ini = pos_fin; pos_fin = Buscar_String( var_transaccion[i].transaccion, caracter_buscado, pos_ini+1 ); cantidad_caracteres = ((pos_fin - pos_ini) - 1); substring(variable_destino,var_transaccion[i].transaccion,pos_ini+1,cantidad_caracteres); //Almacenamos el variable extraida a la estructura ventas[i].anio = atoi(variable_destino); //Extraer id local pos_ini = pos_fin; pos_fin = Buscar_String( var_transaccion[i].transaccion, caracter_buscado, pos_ini+1 ); cantidad_caracteres = ((pos_fin - pos_ini) - 1); substring(variable_destino,var_transaccion[i].transaccion,pos_ini+1,cantidad_caracteres); //Almacenamos el variable extraida a la estructura ventas[i].id_local = atoi(variable_destino); //Extraer id producto pos_ini = pos_fin; pos_fin = Buscar_String( var_transaccion[i].transaccion, caracter_buscado, pos_ini+1 ); cantidad_caracteres = ((pos_fin - pos_ini) - 1); substring(variable_destino,var_transaccion[i].transaccion,pos_ini+1,cantidad_caracteres); //Almacenamos el variable extraida a la estructura ventas[i].id_producto = atoi(variable_destino); //Extraer cantidad pos_ini = pos_fin; pos_fin = Buscar_String( var_transaccion[i].transaccion, caracter_buscado, pos_ini+1 ); cantidad_caracteres = ((pos_fin - pos_ini) - 1); substring(variable_destino,var_transaccion[i].transaccion,pos_ini+1,cantidad_caracteres); //Almacenamos el variable extraida a la estructura ventas[i].cantidad = atoi(variable_destino); } //CERRAMOS EL ARCHIVO fclose(archivo); //Proceso de extraccion for(i=0;i<NUMERO_PRODUCTOS;i++) { //Extraer id producto pos_ini = 1; pos_fin = Buscar_String( var_transaccion2[i].transaccion, caracter_buscado, pos_ini+1 ); cantidad_caracteres = ((pos_fin - pos_ini) - 1); substring(variable_destino,var_transaccion2[i].transaccion,pos_ini+1,cantidad_caracteres); //Almacenamos el variable extraida a la estructura prods[i].id_producto = atoi(variable_destino); //Extraer nombre producto pos_ini = pos_fin; pos_fin = Buscar_String( var_transaccion2[i].transaccion, caracter_buscado, pos_ini+1 ); cantidad_caracteres = ((pos_fin - pos_ini) - 1); substring(variable_destino,var_transaccion2[i].transaccion,pos_ini+1,cantidad_caracteres); //Almacenamos el variable extraida a la estructura strcpy(prods[i].nombre_producto,variable_destino); //Extraer precio unitario pos_ini = pos_fin; pos_fin = Buscar_String( var_transaccion2[i].transaccion, caracter_buscado, pos_ini+1 ); cantidad_caracteres = ((pos_fin - pos_ini) - 1); substring(variable_destino,var_transaccion2[i].transaccion,pos_ini+1,cantidad_caracteres); //Almacenamos el variable extraida a la estructura prods[i].precio_unitario = atoi(variable_destino); } //CERRAMOS EL FILE fclose(archivo1); //Proceso de extraccion for( i = 0 ; i < 10 ; i++) { //Extraer id local pos_ini = 1; pos_fin = Buscar_String( var_transaccion3[i].transaccion, caracter_buscado, pos_ini+1 ); cantidad_caracteres = ((pos_fin - pos_ini) - 1); substring(variable_destino,var_transaccion3[i].transaccion,pos_ini+1,cantidad_caracteres); //Almacenamos el variable extraida a la estructura loc[i].id_local = atoi(variable_destino); //Extraer nombre local pos_ini = pos_fin; pos_fin = Buscar_String( var_transaccion3[i].transaccion, caracter_buscado, pos_ini+1 ); cantidad_caracteres = ((pos_fin - pos_ini) - 1); substring(variable_destino,var_transaccion3[i].transaccion,pos_ini+1,cantidad_caracteres); //Almacenamos el variable extraida a la estructura strcpy(loc[i].nombre_local,variable_destino); } //CERRAMOS EL ARCHIVO fclose(archivo2); char option; while(tolower((option=menu()))!='x'){ switch (option){ case 'a': //caso1 clearScreen(); int mes; printf("Ingrese un mes entre 1-12: \n"); scanf("%d", &mes); printf("\n"); if(mes>0 && mes<13) printf("MES: %s\nTOTAL: $%d\n", meses[mes-1], ventas_mes(ventas, prods, mes)); else printf("No no no xD, ingresaste un mes fuera de range[1-12]!!!!, mes ingresado ->%d\n", mes ); printf("\n"); system("pause"); clearScreen(); break; case 'b': //caso2 printf(""); int cod_buscado; printf("Ingrese Cod sucursal: \n"); scanf("%d", &cod_buscado); printf("\n"); buscar_sucursal(loc, cod_buscado); printf("\n"); system("pause"); clearScreen(); break; case 'c': //caso3 printf(""); int dia_b, mes_b, cod_b;//cod local printf("Ingresar dia: \n"); scanf("%d", &dia_b); printf("Ingresar mes: \n"); scanf("%d", &mes_b); if(date_is_valid(dia_b, mes_b)){ printf("Ingresar cod local: \n"); scanf("%d", &cod_b); printf("\n"); //existe local? if(!existe_local(loc, cod_b)) transacciones_buscadas(ventas, loc, prods, dia_b, mes_b, cod_b); else printf("Hey el codigo local -> %d, no es valido\n", cod_b); }else{ printf("FECHA INVALIDA, INGRESASTE %d-%d\n", dia_b, mes_b); } system("pause"); clearScreen(); break; default: printf("Comando invalido\n\n"); system("pause"); clearScreen(); break; } } return 0; }