Beispiel #1
0
lista_t* conta_remove_agencia(lista_t* contas, agencia_t* agencia)
{
	conta_t *conta;
	lista_t *item;

	item = contas;

	while (!lista_vazia(item))
	{
		conta = (conta_t*)item->dado;
		if (conta->agencia_codigo == agencia->codigo)
		{
			printf("Aviso: A conta %d da agencia %d sera removida.\n", conta->numero, agencia->codigo);
			contas = lista_remove(contas, conta, compara_conta);
		}
		item = item->prox;
	}
	return contas;
}
Beispiel #2
0
void imprimi_lista(Celula* cel, int op){
    Celula *tmp = cel->prox;
    if(lista_vazia(cel)){
        printf("A lista esta vazia!\n");
    }else{
        if(op == 1){
            printf("info\tendereco do prox\n");
            while(tmp != NULL){
                printf("%d\t%d\n", tmp->info, &(tmp->prox));
                tmp = tmp->prox;
            }
            system("pause");
        }else{
            while(tmp != NULL){
                printf("%d", tmp->info);
                tmp->prox != NULL ? printf("->") : printf(".\n");
                tmp = tmp->prox;
            }
        }
    }
}
Beispiel #3
0
lista_t* operacao_remove_conta(lista_t* operacoes, conta_t *conta)
{

	operacao_t *operacao;
	lista_t *item;
	bool teste_transferencia = false;

	while (!lista_vazia(item))
	{
		operacao = (operacao_t*)item->dado;
		// Se a conta recebeu uma transferencia, a operação também é removida.
		teste_transferencia = (operacao->tipo == Transferencia) && (operacao->conta_destino_numero == conta->numero);
		if (teste_transferencia || (operacao->conta_numero == conta->numero))
		{
			printf("Aviso: A operacao %d da conta %d sera removida.\n", operacao->codigo, conta->numero);
			operacoes = lista_remove(operacoes, operacao, compara_operacao);
		}
		item = item->prox;
	}
	return operacoes;
}
Beispiel #4
0
/* Como a lista é representado por nodos simplesmente bastar criar um novo nodo e colocá-lo
no início da lista se ela estiver vazia */
Lista* lista_insere (Lista* lst, infotype valor, infotype peso){

	Lista* aux = (Lista *) malloc(sizeof(Lista));

	aux -> info = valor;
	aux -> peso = peso;

	if (lista_vazia(lst)){

		aux -> prox = aux;
	}

	else {

		aux -> prox = lst -> prox;
		lst -> prox = aux;
	}

	return aux;

}
Beispiel #5
0
double montante_diario_usado(lista_t *operacoes, conta_t *conta, operacao_tipo_t tipo)
{
	char *data = get_time();
	double soma = 0.0;
	lista_t *item;
	operacao_t *operacao;

	item = operacoes;

	while (!lista_vazia(item))
	{
		operacao = (operacao_t*)item->dado;
		if ((operacao->tipo == tipo) && (operacao->conta_numero == conta->numero))
		{
			if (compara_data(data, operacao->data))
			{
				soma += operacao->montante;
			}
		}
		item = item->prox;
	}
	return soma;
}
Beispiel #6
0
bool operacao_pagamento(lista_t *operacoes, operacao_t *operacao, lista_t *contas)
{
	char *str;
	double pagamento = 0.0;
	double limite_diario_disponivel = 0.0;
	bool done = false;
	lista_t *conta_item;
	conta_item = contas;
	conta_t *conta;

	while (!lista_vazia(conta_item))
	{
		conta = (conta_t*)conta_item->dado;
		if (operacao->conta_numero == conta->numero)
		{

			limite_diario_disponivel = LIMITE_DIARIO_PAGAMENTO - montante_diario_usado(operacoes, conta, Pagamento);
			printf("Limite diario disponivel para pagamentos: %.2lf\n", limite_diario_disponivel);

			while (!done)
			{
				printf("Digite o valor do pagamento: ");
				str = string_get(OPERACAO_MONTANTE_MAX_LEN);

				if (check_cancelar(str))
				{
					free(str);
					return false;
				}

				pagamento = atof(str);
				free(str);
				str = NULL;
				if ((conta->saldo + conta->limite) < pagamento)
				{
					printf("Nao ha dinheiro suficiente na conta para efetuar esta tranzacao.\n");
					printf("Saldo em conta: %.2lf\n", conta->saldo);
					printf("Limite da conta: %.2lf\n", conta->limite);
					printf("Total disponivel: %.2lf\n", conta->saldo + conta->limite);
					continue;
				}

				if (pagamento > limite_diario_disponivel)
				{
					printf("Limite insuficiente. O pagamento nao pode ser realizada.\n");
					printf("Limite diario disponivel: %.2lf\n", limite_diario_disponivel);
					continue;
				}

				conta->saldo -= pagamento;
				operacao->montante = pagamento;
				done = true;
			}
			printf("Efetuando pagamento...\n");
			printf("Saldo em conta: %.2lf\n", conta->saldo);
		}

		if (done)
			break;
		conta_item = conta_item->prox;
	}

	return true;
}
Beispiel #7
0
bool operacao_transferencia(lista_t *operacoes, operacao_t *operacao, lista_t *contas)
{
	char *str;
	double transferencia = 0.0;
	double limite_diario_disponivel = 0.0;
	bool done = false;
	lista_t *conta_item;
	conta_item = contas;
	conta_t *conta;
	conta_t *conta_destino;

	while (!lista_vazia(conta_item))
	{
		conta = (conta_t*)conta_item->dado;
		if (operacao->conta_numero == conta->numero)
		{
			limite_diario_disponivel = LIMITE_DIARIO_TRANSFERENCIA - montante_diario_usado(operacoes, conta, Transferencia);
			printf("Limite diario disponivel para transferencias: %.2lf\n", limite_diario_disponivel);

			while (!done)
			{
				printf("Digite o quanto deseja transferir: ");
				str = string_get(OPERACAO_MONTANTE_MAX_LEN);

				if (check_cancelar(str))
				{
					free(str);
					return false;
				}

				transferencia = atof(str);
				free(str);
				str = NULL;
				if ((conta->saldo + conta->limite) < transferencia)
				{
					printf("Nao ha dinheiro suficiente na conta para efetuar esta tranzacao.\n");
					printf("Saldo em conta: %.2lf\n", conta->saldo);
					printf("Limite da conta: %.2lf\n", conta->limite);
					printf("Total disponivel: %.2lf\n", conta->saldo + conta->limite);
					continue;
				}

				if (transferencia > limite_diario_disponivel)
				{
					printf("Limite insuficiente. A transferencia nao pode ser realizada.\n");
					printf("Limite diario disponivel: %.2lf\n", limite_diario_disponivel);
					continue;
				}
				conta->saldo -= transferencia;
				operacao->montante = transferencia;
				done = true;
			}
			printf("Transferindo dinheiro...\n");
			printf("Saldo em conta: %.2lf\n", conta->saldo);
		}

		if (done)
			break;
		conta_item = conta_item->prox;
	}

	// Deposita o dinheiro na conta de destino
	conta_item = contas;
	while (!lista_vazia(conta_item))
	{
		conta_destino = (conta_t*)conta_item->dado;
		if (operacao->conta_destino_numero == conta_destino->numero)
		{
			conta_destino->saldo += transferencia;
			printf("Depositando %.2lf na conta %d.\n", transferencia, conta_destino->numero);
			break;
		}

		conta_item = conta_item->prox;
	}
	return true;
}