예제 #1
0
파일: cliente.c 프로젝트: mahcoder/lab2
lista_t* cliente_inclui(lista_t *clientes)
{
	cliente_t *cliente = NULL;
	bool done = false;

	cliente = (cliente_t*)malloc(sizeof(cliente_t));

	printf("--- Inserindo novo Cliente ---\n");
	while (!done)
	{
		printf("CPF: ");
		cliente->cpf = string_get(CLIENTE_CPF_MAX_LEN);
		if (check_cancelar(cliente->cpf))
		{
			free(cliente);
			return clientes;
		}
		if (lista_busca(clientes, cliente, compara_cliente))
		{
			printf("O cliente de CPF %s ja existe.\n", cliente->cpf);
			continue;
		}

		printf("Nome: ");
		cliente->nome = string_get(CLIENTE_NOME_MAX_LEN);
		if (check_cancelar(cliente->nome))
		{
			free(cliente);
			return clientes;
		}

		printf("Telefone: ");
		cliente->telefone = string_get(CLIENTE_TELEFONE_MAX_LEN);
		if (check_cancelar(cliente->telefone))
		{
			free(cliente);
			return clientes;
		}

		printf("---\nDados fornecidos:\n");
		printf("CPF: %s\n", cliente->cpf);
		printf("Nome: %s\n", cliente->nome);
		printf("Telefone: %s\n", cliente->telefone);

		if (true == confirmar_opcao())
		{
			done = true;
		}
		else
		{
			done = false;
		}
	}

	return lista_insere(clientes, cliente);
}
예제 #2
0
파일: prob1.c 프로젝트: FEUP-MIEEC/Prog2
lista *lerFilmes(FILE *ficheiro) {
    char buffer[256], *nlptr;
    lista *filmes;

    if (ficheiro == NULL)
        return NULL;

    filmes = lista_nova();

    while (!feof(ficheiro)) {
        fgets(buffer, 255, ficheiro);
        nlptr = strchr(buffer, '\n');
        if (nlptr)
            *nlptr = '\0';

        lista_insere(filmes, buffer, NULL);
    }

    return filmes;
}
예제 #3
0
파일: prob2.c 프로젝트: FEUP-MIEEC/Prog2
lista *pesquisa_destinos(grafo *rotas, lista *aeroportos, const char *origem) {
    /* prob 2.2 - a implementar */
    int i=0, j;
	vetor *v;
	elemento *e;
	lista *l= lista_nova();
	for(e=aeroportos->inicio;e!=NULL&& strcmp(e->str, origem);e=e->proximo){
			i++;
	}
	v = v_sucessores(rotas, i);
	for(i=0;i<v->tamanho;i++){
		e = aeroportos->inicio;
		for(j=0; j<vetor_elemento(v, i);j++){
			e=e->proximo;
		}
		lista_insere(l, e->str, NULL);
	}

    vetor_apaga(v);
    return l;
}
예제 #4
0
파일: prob2.c 프로젝트: FEUP-MIEEC/Prog2
int main() {
    FILE *f;
    grafo *g = NULL;
    lista *aeroportos;
    char *buff;
    size_t n;

    setvbuf(stdout, NULL, _IONBF, 0);
    f = fopen("aeroportos.txt", "r");
    aeroportos = lista_nova();
    buff = NULL;
    n = 0;
    while (getline(&buff, &n, f) != -1) {
        buff[strlen(buff) - 1] = '\0';
        lista_insere(aeroportos, buff, NULL);
    }
    free(buff);
    fclose(f);

    g = carrega_rotas(aeroportos, "rotas.txt");

    /* teste problema 2.1 */
    {
        FILE *f;
        char tempo[5], origem[10];
        lista *tempos, *origens;

        printf("* Problema 2.1 *\n");

        f = fopen("chegadas.txt", "r");
        tempos = lista_nova();
        origens = lista_nova();

        while (fscanf(f, "%s\t%s", tempo, origem) == 2) {
            lista_insere(tempos, tempo, NULL);
            lista_insere(origens, origem, NULL);
        }

        if (proximas_n_chegadas(tempos, origens, aeroportos, 5) != 1)
            printf("Erro ao executar a funcao\n");

        lista_apaga(tempos);
        lista_apaga(origens);
        fclose(f);
    }

    /* teste problema 2.2 */
    {
        printf("\n* Problema 2.2 *\n");
        const char *origem = "Lille (FR)";
        elemento *elem;
        lista *l = pesquisa_destinos(g, aeroportos, origem);
        if (l == NULL)
            printf("Destinos diretos a partir de %s = 0\n", origem);
        else {
            printf("Destinos diretos a partir de %s = %d\n",
                   origem, lista_tamanho(l));
            for (elem = l->inicio; elem != NULL; elem = elem->proximo)
                printf("%s\n", elem->str);
            lista_apaga(l);
        }
    }

    grafo_apaga(g);
    lista_apaga(aeroportos);
    return 0;
}
예제 #5
0
파일: operacao.c 프로젝트: mahcoder/lab2
lista_t* operacao_inclui(lista_t *operacoes, lista_t *agencias, lista_t *contas)
{
	operacao_t *operacao = NULL;
	agencia_t *agencia;
	conta_t *conta;
	bool done = false;
	bool operacao_tipo_ok = false;
	bool operacao_ok = false;
	bool agencia_ok = false;
	bool conta_ok = false;
	bool confirmar = false;
	char *str = NULL;

	operacao = (operacao_t*)malloc(sizeof(operacao_t));
	operacao->montante = 0.0;
	operacao->conta_destino_numero = 0;
	agencia = (agencia_t*)malloc(sizeof(agencia_t));
	conta = (conta_t*)malloc(sizeof(conta_t));

	printf("--- Realizando nova tranzacao ---\n");
	while (!done)
	{
		if (!operacao_ok)
		{
			printf("Codigo: ");
			str = string_get(OPERACAO_CODIGO_MAX_LEN);
			if (check_cancelar(str))
			{
				free(str);
				return operacoes;
			}
			operacao->codigo = (unsigned int)atoi(str);;
			free(str);
			str = NULL;
			if (lista_busca(operacoes, operacao, compara_operacao))
			{
				printf("A operacao de codigo %d ja existe. Use um numero diferente.\n", operacao->codigo);
				continue;
			}
			operacao_ok = true;
		}

		if (!agencia_ok)
		{
			printf("Agencia codigo: ");
			str = string_get(AGENCIA_CODIGO_MAX_LEN);
			if (check_cancelar(str))
			{
				free(str);
				return operacoes;
			}
			agencia->codigo = (unsigned int)atoi(str);
			free(str);
			str = NULL;
			if (!lista_busca(agencias, agencia, compara_agencia))
			{
				printf("A agencia de codigo %d nao existe.\n", agencia->codigo);
				continue;
			}
			agencia_ok = true;
		}

		if (!conta_ok)
		{
			printf("Numero da conta: ");
			str = string_get(CONTA_NUMERO_MAX_LEN);
			if (check_cancelar(str))
			{
				free(str);
				return operacoes;
			}
			conta->numero = (unsigned int)atoi(str);
			free(str);
			str = NULL;
			if (!lista_busca(contas, conta, compara_conta))
			{
				printf("A conta de numero %d nao existe.\n", conta->numero);
				continue;
			}
			conta_ok = true;
			operacao->agencia_codigo = agencia->codigo;
		}

		if (!operacao_tipo_ok)
		{
			printf("Tipo de operacao (saldo, pagamento, saque, transferencia): ");
			str = string_get(OPERACAO_TIPO_MAX_LEN);
			if (check_cancelar(str))
			{
				free(str);
				return operacoes;
			}

			string_to_lower(str);

			if (compara_string("saldo", str))
				operacao->tipo = Saldo;

			else if (compara_string("pagamento", str))
				operacao->tipo = Pagamento;

			else if (compara_string("saque", str))
				operacao->tipo = Saque;

			else if (compara_string("transferencia", str))
				operacao->tipo = Transferencia;

			else
			{
				printf("Operacao desconhecida: %s. Tente novamente.\n", str);
				free(str);
				str = NULL;
				continue;
			}
			operacao_tipo_ok = true;
			operacao->conta_numero = conta->numero;
		}

		if ((operacao_tipo_ok) && (operacao->tipo == Transferencia))
		{
			printf("Numero da conta de destino da transferencia: ");
			str = string_get(CONTA_NUMERO_MAX_LEN);
			if (check_cancelar(str))
			{
				free(str);
				return operacoes;
			}
			conta->numero = (unsigned int)atoi(str);
			free(str);
			str = NULL;
			if (!lista_busca(contas, conta, compara_conta))
			{
				printf("A conta de numero %d nao existe.\n", conta->numero);
				continue;
			}
			conta_ok = true;
			operacao->conta_destino_numero = conta->numero;
		}

		operacao->data = get_time();

		printf("---\nDados fornecidos:\n");
		operacao_imprime(operacao);

		if (true == confirmar_opcao())
		{
			done = true;
		}
		else
		{
			done = false;
			operacao_ok = false;
			agencia_ok = false;
			conta_ok = false;
			operacao_tipo_ok = false;
		}
	}

	confirmar = false;

	if (operacao->tipo == Saldo)
	{
		operacao_saldo(operacao, contas);
		confirmar = true;
	}
	else if (operacao->tipo == Pagamento)
	{
		if (operacao_pagamento(operacoes, operacao, contas))
			confirmar = true;
	}
	else if (operacao->tipo == Saque)
	{
		if (operacao_saque(operacoes, operacao, contas))
			confirmar = true;
	}
	else if (operacao->tipo == Transferencia)
	{
		if (operacao_transferencia(operacoes, operacao, contas))
			confirmar = true;
	}

	if (confirmar == true)
		return lista_insere(operacoes, operacao);
	else
		return operacoes;
}
예제 #6
0
파일: prob1.c 프로젝트: JCacho97/Prog2
int main()
{
	/* teste problema 1.1 */
	{
		vetor *v;
		pilha *res;
		int i;
		char data[][11] = {"Estocolmo", "Oslo", "Helsinquia", "Copenhaga", "Reykjavik"};
		
		printf("* Problema 1.1 *\n");
		
		v = vetor_novo();
		
		for(i=0; i<5; i++)
			vetor_insere(v, data[i], -1);
		
		printf("Vetor: ");
		for(i=0; i<v->tamanho; i++)
			printf("%s ", vetor_elemento(v, i));
		printf("\n");
		
		res = vetor_pilha(v);
		
		printf("Pilha: ");
		if(res)
		{
			while(!pilha_vazia(res))
			{
				printf("%s ", pilha_top(res));
				pilha_pop(res);
			}
		}
		printf("\n");
		
		if(v->tamanho != 5)
			printf("ERRO: Vetor original nao deve ser alterado!\n");
		else
		{
			for(i=0; i<5; i++)
				if(strcmp(data[i], vetor_elemento(v, i)) != 0)
				{
					printf("ERRO: Vetor original nao deve ser alterado!\n");
					break;
				}
		}
		
		vetor_apaga(v);
		pilha_apaga(res);
	}
	
	printf("\n");	
	
	/* teste problema 1.2 */
	{
		int res, i, ok;
		objeto obj;
		char data[][20] = { "Paul Atreides", "Leto Atreides", "Voran Atreides",
							"Vladimir Harkonnen", "Dmitri Harkonnen", "Hundro Moritani" };

		tabela_dispersao td1, td2;
		
		printf("* Problema 1.2 *\n");
		
		td1 = tabela_cria(11, hash_djbm);
		td2 = tabela_cria(7, hash_djbm);
		
		for(i=0; i<6; i++)
		{
			strcpy(obj.chave, data[i]);
			strcpy(obj.valor, data[i]);
			tabela_adiciona(td1, &obj);
			tabela_adiciona(td2, &obj);
		}
		
		res = tabela_redimensiona(td1, 7);
		if(td1->tamanho == 7)
		{
			elemento *aux1, *aux2;
			
			for(i=0; i<td1->tamanho; i++)
			{
				aux2 = td2->elementos[i];
				
				while(aux2 != NULL)
				{	
					ok = 0;
					aux1 = td1->elementos[i];
					while(aux1 != NULL)
					{
						if(strcmp(aux1->obj->chave, aux2->obj->chave) == 0)
						{
							ok = 1;
							break;
						}
						aux1 = aux1->proximo;
					}
					
					if(!ok)
					{
						printf("ERRO: Elemento %s em posicao errada\n", aux2->obj->chave);
						break;
					}
					
					aux2 = aux2->proximo;
				}
			}

			if(ok)
				printf("Tabela de dispersao redimensionada corretamente.\n");
		}
		else
			printf("ERRO: Tabela de dispersao deveria ter novo tamanho.\n");

		tabela_apaga(td1);
		tabela_apaga(td2);

		printf("\n");
	}
	
	/* teste problema 1.3 */
	{
		int i;
		arvore_avl *avl;
		lista *res, *indicacoes;
		char data[][20] = { "prog2", "mt2", "trabalho", "e'", "muito", "zzzz...",
							"dificil", "facil", "nada", "verdade"};
		
		avl = avl_nova();

		printf("* Problema 1.3 *\n");

		for(i=0; i<10; i++)
			avl_insere(avl, data[i]);


		indicacoes = lista_nova();
		lista_insere(indicacoes, "esquerda", -1);
		lista_insere(indicacoes, "esquerda", -1);
		lista_insere(indicacoes, "direita", -1);
		
		res = descobre_segredo(avl, indicacoes);
		
		printf("Segredo: ");
		if(res)
		{
			for(i=0; i<res->tamanho; i++)
				printf("%s ", lista_elemento(res, i));
		}
		
		printf("\n\nSegredo (impl. recursiva): ");
		descobre_segredo_recurs(avl->raiz, indicacoes);

		avl_apaga(avl);
		lista_apaga(indicacoes);
		lista_apaga(res);
		
		printf("\n\n");
	}
	
	return 0;
}
예제 #7
0
파일: conta.c 프로젝트: mahcoder/lab2
lista_t* conta_inclui(lista_t *contas, lista_t *agencias, lista_t *clientes)
{
	conta_t *conta = NULL;
	agencia_t *agencia = NULL;
	cliente_t *cliente = NULL;
	bool done = false;
	bool conta_numero_ok = false;
	bool agencia_ok = false;
	bool cliente_ok = false;
	char *str = NULL;

	conta = (conta_t*)malloc(sizeof(conta_t));
	agencia = (agencia_t*)malloc(sizeof(agencia_t));
	cliente = (cliente_t*)malloc(sizeof(cliente_t));

	printf("--- Inserindo nova Conta ---\n");
	while (!done)
	{
		if (!conta_numero_ok)
		{
			printf("Numero: ");
			str = string_get(CONTA_NUMERO_MAX_LEN);
			if (check_cancelar(str))
			{
				free(str);
				return contas;
			}
			conta->numero = (unsigned int)atoi(str);;
			free(str);
			str = NULL;
			if (lista_busca(contas, conta, compara_conta))
			{
				printf("A conta ja de numero %d ja existe. Use um numero diferente.\n", conta->numero);
				continue;
			}
			conta_numero_ok = true;
		}

		if (!agencia_ok)
		{
			printf("Agencia codigo: ");
			str = string_get(AGENCIA_CODIGO_MAX_LEN);
			if (check_cancelar(str))
			{
				free(str);
				return contas;
			}
			agencia->codigo = (unsigned int)atoi(str);
			free(str);
			str = NULL;
			if (!lista_busca(agencias, agencia, compara_agencia))
			{
				printf("A agencia de codigo %d nao existe.\n", agencia->codigo);
				continue;
			}
			agencia_ok = true;
		}

		if (!cliente_ok)
		{
			printf("Cliente CPF: ");
			cliente->cpf = string_get(CLIENTE_CPF_MAX_LEN);
			if (check_cancelar(cliente->cpf))
			{
				free(cliente);
				return contas;
			}
			if (!lista_busca(clientes, cliente, compara_cliente))
			{
				printf("O cliente de CPF %s nao existe.\n", cliente->cpf);
				continue;
			}
			if (conta_busca_cliente_agencia(contas, cliente, agencia))
			{
				printf("O cliente de CPF %s ja tem uma conta na Agencia de codigo %d.\n", cliente->cpf, agencia->codigo);
				agencia_ok = false;
				continue;
			}
			cliente_ok = true;
		}

		printf("Saldo: ");
		str = string_get(CONTA_SALDO_MAX_LEN);
		conta->saldo = (double)atof(str);
		free(str);
		str = NULL;

		printf("Limite: ");
		str = string_get(CONTA_LIMITE_MAX_LEN);
		conta->limite = (double)atof(str);
		free(str);
		str = NULL;

		conta->data_criacao = get_time();

		printf("---\nDados fornecidos:\n");
		printf("Conta numero: %d\n", conta->numero);
		printf("Agencia codigo: %d\n", agencia->codigo);
		printf("Cliente CPF: %s\n", cliente->cpf);
		printf("Data de criacao: %s\n", conta->data_criacao);
		printf("Saldo: %.2lf\n", conta->saldo);
		printf("Limite: %.2lf\n", conta->limite);

		if (true == confirmar_opcao())
		{
			done = true;
		}
		else
		{
			done = false;
			conta_numero_ok = false;
			agencia_ok = false;
			cliente_ok = false;
		}
	}

	conta->cliente_cpf = cliente->cpf;
	conta->agencia_codigo = agencia->codigo;

	return lista_insere(contas, conta);
}