示例#1
0
文件: tp1.c 项目: wizzard94/TP1
/* Cerrar ciclo de votacion y procesar resultados */
bool comando_votar_fin(maquina_votacion_t* maquina) {
    #ifdef DEBUG
    printf("Comando votar fin ejecutado \n");
    #endif

    if(maquina->estado < ABIERTA)
        return error_manager(MESA_CERRADA);

    if(maquina->estado < VOTACION)
        return error_manager(OTRO);

    if(maquina->votando_cargo < FIN)
        return error_manager(FALTA_VOTAR);

    while(!pila_esta_vacia(maquina->ciclo))
    {
        voto_t* voto = pila_desapilar(maquina->ciclo);
        lista_iterar(maquina->listas, votar_partido, voto);
        destruir_voto(voto);
    }

    // Reset de variables.
    #ifdef DEBUG
    if(pila_esta_vacia(maquina->ciclo)) printf("Pila vacia\n");
    #endif
    pila_destruir(maquina->ciclo, free);
    maquina->ciclo = NULL;
    maquina->estado = ABIERTA;

    return true;
}
示例#2
0
void Viewer::new_path_selected(){

    try{
        update_base_paths();
        QDir currDir = path_annotations;
        if ( currDir.exists() == false ) {
            error_manager( 1 );
            return;
        }
        if ( currDir.count() == 2 ) {
            error_manager( 3 );
            return;
        }
        update_path_array();

        QString filterStr = QString( "*.txt" );
        currDir.setNameFilters( QStringList() << ( filterStr ) );
        QStringList fileList = currDir.entryList();
        frames_total = fileList.size();
        ui->myLabel_Img_TotalNumb->setText( QString::number( frames_total ) );
        ui->myGroupBox->setEnabled( true );
        update_all( frames_start );
        is_sequence_loaded = true;

    }
    catch ( ... ) {
        error_manager( 1 );
    }

}
示例#3
0
文件: tp1.c 项目: wizzard94/TP1
/* Procesar todos los votos y volcar resultados */
bool comando_cerrar(maquina_votacion_t* maquina, char* entrada[]) {
    #ifdef DEBUG
    printf("Comando cerrar ejecutado\n");
    #endif
    if(maquina->estado < ABIERTA) return error_manager(OTRO);
    if(maquina->estado > ABIERTA || !cola_esta_vacia(maquina->cola) ) return error_manager(COLA_NO_VACIA);

    lista_iter_t* iter = lista_iter_crear(maquina->listas);
    if(!iter) return error_manager(OTRO);

    while(!lista_iter_al_final(iter))
    {
        partido_politico_t* partido = lista_iter_ver_actual(iter);
        if(!partido) { lista_iter_destruir(iter); return error_manager(OTRO); }

        printf("%s:\n", partido_nombre(partido));

        for(size_t i=0;i<partido_largo(partido);i++)
        {
            size_t* votos = partido_votos(partido)[i];
            printf("%s: %zu votos\n", CARGOS[i], *votos);
        }

        // Liberar memoria
        destruir_partido(partido);
        lista_iter_avanzar(iter);
    }
    lista_iter_destruir(iter);
    lista_destruir(maquina->listas, NULL);
    maquina->listas = NULL;

    return false;
}
示例#4
0
文件: tp1.c 项目: wizzard94/TP1
/*
 Almacenar en la pila de votacion el partido votado.
 Validar que exista ciclo de votacion.
*/
bool comando_votar_idPartido(maquina_votacion_t* maquina, char* id) {
    #ifdef DEBUG
    printf("Comando votar idPartido ejecutado \n");
    #endif
    if(maquina->estado < VOTACION || (maquina->votando_cargo >= FIN) )
        return error_manager(OTRO);

    long int idPartido_int = strtol(id, NULL, 10);

    if(idPartido_int < 1 || idPartido_int > maquina->cantidad_partidos)
        return error_manager(OTRO);

    voto_t* voto = malloc(sizeof(voto_t));

    voto->partido_id = (size_t)strtol(id, NULL, 10);
    voto->cargo = maquina->votando_cargo;

    pila_apilar(maquina->ciclo, voto);
    maquina->votando_cargo++;

    imprimir_mensaje_ok();

    if(maquina->votando_cargo < FIN)
        mostrar_menu_votacion(maquina);

    return true;
}
示例#5
0
文件: tp1.c 项目: wizzard94/TP1
/* Crear y encolar struct votante_t. */
bool comando_ingresar(maquina_votacion_t* maquina, char* entrada[]) {
    #ifdef DEBUG
    printf("Comando ingresar ejecutado: %s , %s \n", entrada[ENTRADA_DOC_TIPO], entrada[ENTRADA_DOC_NUM]);
    #endif

    // Error handling
    if(maquina->estado == CERRADA)              { return error_manager(MESA_CERRADA); }
    if(!entrada[ENTRADA_DOC_TIPO] || !entrada[ENTRADA_DOC_NUM])    { return error_manager(NUMERO_NEGATIVO); } // Segun las pruebas
    if(strtol(entrada[ENTRADA_DOC_NUM], NULL, 10) < 1)  { return error_manager(NUMERO_NEGATIVO); }

    char* doc_tipo_copia = copiar_clave(entrada[ENTRADA_DOC_TIPO]);
    char* doc_num_copia = copiar_clave(entrada[ENTRADA_DOC_NUM]);

    votante_t* votante = votante_crear(doc_tipo_copia, doc_num_copia);

    if(!votante) {  return error_manager(OTRO); free(doc_num_copia); free(doc_tipo_copia); }

    #ifdef DEBUG
    printf("Votante ingresado: %s, %s\n", votante_ver_doc_tipo(votante), votante_ver_doc_num(votante));
    #endif

    if( cola_encolar(maquina->cola, votante) )
        return true;

    return error_manager(OTRO);
}
示例#6
0
void			map_manager(t_map **map, t_path **antpit)
{
	int			i;

	i = 0;
	while ((*map)->cleanfile[i] != NULL)
	{
		if ((*map)->nb_ants == 0)
			check_ants(map, i, 0);
		i++;
	}
	i = (*map)->antindex + 1;
	while ((*map)->error != 1 && (*map)->cleanfile[i] != NULL)
	{
		if ((isroom(map, i, antpit)) == 0 && (istube(map, i, antpit)) == 0)
		{
			if (iscommand(map, i, antpit) <= 0)
				(*map)->error = 1;
		}
		i++;
	}
	error_manager(map, antpit);
	max_paths(antpit);
	matrix_duplicator(antpit);
}
示例#7
0
文件: tp1.c 项目: wizzard94/TP1
/* Retroceder la pila de votacion */
bool comando_votar_deshacer(maquina_votacion_t* maquina) {
    #ifdef DEBUG
    printf("Comando votar deshacer ejecutado \n");
    #endif

    if(maquina->estado < ABIERTA)
        return error_manager(MESA_CERRADA);

    if(maquina->estado < VOTACION)
        return error_manager(OTRO);

    if(maquina->votando_cargo == PRESIDENTE)
        return error_manager(NO_DESHACER);

    maquina->votando_cargo--;
    destruir_voto(pila_desapilar(maquina->ciclo));

    return true;
}
示例#8
0
文件: tp1.c 项目: wizzard94/TP1
/*
 Desencolar y realizar validacion del Documento tipo/numero del votante y no haber votado
 Crear pila para ciclo de votacion actual
*/
bool comando_votar_inicio(maquina_votacion_t* maquina) {
    #ifdef DEBUG
    printf("Comando votar inicio ejecutado.\n");
    #endif
    // Error handling
    if(maquina->estado == CERRADA)      { return error_manager(MESA_CERRADA); }
    if(maquina->estado == VOTACION)     { return error_manager(OTRO); }
    if(cola_esta_vacia(maquina->cola))  { return error_manager(NO_VOTANTES); }

    votante_t* votante_padron = NULL;
    bool enpadronado = false;

    votante_t* votante_espera = cola_desencolar(maquina->cola);
    if(!votante_espera) return error_manager(OTRO);

    #ifdef DEBUG
    printf("Votante desencolado: %s, %s\n", votante_espera->documento_tipo, votante_espera->documento_numero);
    #endif

    pila_t* ciclo_votacion = pila_crear();
    lista_iter_t* lista_iter = lista_iter_crear(maquina->padron);

    if(!ciclo_votacion || !lista_iter) {
        if(ciclo_votacion) pila_destruir(ciclo_votacion, NULL);
        if(lista_iter) free(lista_iter);
        return error_manager(OTRO);
    }

    while(!lista_iter_al_final(lista_iter))
    {
        votante_padron = lista_iter_ver_actual(lista_iter);
        if(votante_iguales(votante_padron, votante_espera))
        {
            enpadronado = true;
            break;
        }
        lista_iter_avanzar(lista_iter);
    }
    lista_iter_destruir(lista_iter);
    votante_destruir(votante_espera);

    if(!enpadronado || votante_get_voto_realizado(votante_padron))
    {
            pila_destruir(ciclo_votacion, NULL);
            return enpadronado ? error_manager(VOTO_REALIZADO) : error_manager(NO_ENPADRONADO);
    }

    votante_set_voto_realizado(votante_padron);
    maquina->estado = VOTACION;
    maquina->ciclo = ciclo_votacion;
    maquina->votando_cargo = PRESIDENTE;

    mostrar_menu_votacion(maquina);
    return true;
}
示例#9
0
文件: tp1.c 项目: wizzard94/TP1
/*
 Si recibe parametros validos, llama a funciones abrir de listas y padron.
*/
bool comando_abrir(maquina_votacion_t* maquina, char* entrada[]) {
    #ifdef DEBUG
    printf("Comando abrir ejecutado.");
    #endif

    if(!entrada[ENTRADA_LISTAS] || !entrada[ENTRADA_PADRON])
        return error_manager(LECTURA);

    if(maquina->estado >= ABIERTA)
        return error_manager(MESA_ABIERTA);

    maquina->listas = cargar_csv_en_lista(maquina, entrada[ENTRADA_LISTAS], enlistar_partido);
    if(!maquina->listas) return false;

    maquina->padron = cargar_csv_en_lista(maquina, entrada[ENTRADA_PADRON], enlistar_votante);
    if(!maquina->padron) { lista_destruir(maquina->listas, votante_destruir); return false; }

    maquina->cantidad_partidos = lista_largo(maquina->listas);
	maquina->estado = ABIERTA;

    return true;
}