goldjkk / Banco-C

The Unlicense
0 stars 0 forks source link

Compilação no replit #10

Open anjoletto opened 11 months ago

anjoletto commented 11 months ago

O único problema que tive com o projeto foi a compilação e execução no replit (que por enquanto é o que estamos usando como ambiente de testes).

goldjkk commented 11 months ago

main.c

include

include "proj.h"

int main() { Cliente clientes[1000]; Operacao operacoes[100]; int numClientes = 0; int numOperacoes = 0;

int opcao;
do {
    // Exibir menu de opções
    printf("Menu de Opções:\n");
    printf("1. Novo cliente\n");
    printf("2. Apagar cliente\n");
    printf("3. Listar clientes\n");
    printf("4. Débito\n");
    printf("5. Depósito\n");
    printf("6. Extrato\n");
    printf("7. Transferência Entre Contas\n");
    printf("0. Sair\n");
    printf("Escolha uma opção: ");
    scanf("%d", &opcao);

    switch (opcao) {
        case 1:
            Novo_Cliente(clientes, &numClientes);
            break;
        case 2:
            Apagar_Cliente(clientes, &numClientes);
            break;
        case 3:
            Listar_clientes(clientes, numClientes);
            break;
        case 4:
            Debito(clientes, numClientes, operacoes, &numOperacoes);
            break;
        case 5:
            Deposito(clientes, numClientes, operacoes, &numOperacoes);
            break;
        case 6:
            Extrato(clientes, numClientes, operacoes, numOperacoes);
            break;
        case 7:
            Transferencia(clientes, numClientes, operacoes, &numOperacoes);
            break;
        case 0:
            printf("Saindo do programa. Salvando dados...\n");
            // Implemente a lógica para salvar os dados em arquivos binários
            break;
        default:
            printf("Opção inválida. Tente novamente.\n");
    }
} while (opcao != 0);

return 0;

}

proj.c

include

include "proj.h"

// Função para comparar duas strings int compararStrings(const char str1, const char str2) { int i = 0; while (str1[i] != '\0' && str2[i] != '\0') { if (str1[i] != str2[i]) { return 0; // As strings são diferentes } i++; } return (str1[i] == '\0' && str2[i] == '\0'); // As strings são iguais }

// Função para copiar uma string para outra void copiarString(char destino, const char origem) { int i = 0; while (origem[i] != '\0') { destino[i] = origem[i]; i++; } destino[i] = '\0'; }

// Função para adicionar um novo cliente void Novo_Cliente(Cliente clientes[], int numClientes) { if (numClientes < 1000) { Cliente novoCliente; printf("Nome: "); scanf("%s", novoCliente.nome); printf("CPF: "); scanf("%s", novoCliente.cpf); printf("Tipo de conta (comum ou plus): "); scanf("%s", novoCliente.tipo_conta); printf("Valor inicial da conta: "); scanf("%f", &novoCliente.saldo); printf("Senha: "); scanf("%s", novoCliente.senha);

    clientes[*numClientes] = novoCliente;
    (*numClientes)++;
    printf("Cliente adicionado com sucesso.\n");
} else {
    printf("Limite máximo de clientes atingido.\n");
}

}

// Função para apagar um cliente pelo CPF void Apagar_Cliente(Cliente clientes[], int *numClientes) { char cpf[12]; printf("Digite o CPF do cliente a ser apagado: "); scanf("%s", cpf);

int i;
for (i = 0; i < *numClientes; i++) {
    if (compararStrings(clientes[i].cpf, cpf)) {
        // Move todos os clientes após o cliente apagado uma posição para frente
        for (int j = i; j < *numClientes - 1; j++) {
            clientes[j] = clientes[j + 1];
        }
        (*numClientes)--;
        printf("Cliente apagado com sucesso.\n");
        return;
    }
}

printf("Cliente não encontrado.\n");

}

// Resto do código permanece inalterado

// Função para listar todos os clientes void Listar_clientes(Cliente clientes[], int numClientes) { printf("Lista de Clientes:\n"); for (int i = 0; i < numClientes; i++) { printf("Nome: %s\n", clientes[i].nome); printf("CPF: %s\n", clientes[i].cpf); printf("Tipo de conta: %s\n", clientes[i].tipo_conta); printf("Saldo: %.2f\n", clientes[i].saldo); printf("\n"); } }

// Função para realizar um débito na conta de um cliente void Debito(Cliente clientes[], int numClientes, Operacao operacoes[], int *numOperacoes) { char cpf[12]; char senha[20]; float valor; printf("CPF: "); scanf("%s", cpf); printf("Senha: "); scanf("%s", senha); printf("Valor: "); scanf("%f", &valor);

int clienteEncontrado = 0; // Flag para indicar se o cliente foi encontrado

for (int i = 0; i < numClientes; i++) {
    if (compararStrings(clientes[i].cpf, cpf) && compararStrings(clientes[i].senha, senha)) {
        clienteEncontrado = 1;
        if (compararStrings(clientes[i].tipo_conta, "comum")) {
            if (clientes[i].saldo - valor >= -1000) {
                clientes[i].saldo -= valor;
                printf("Débito realizado com sucesso.\n");
                // Registre a operação
                copiarString(operacoes[*numOperacoes].cpf, cpf);
                copiarString(operacoes[*numOperacoes].tipo_operacao, "Débito");
                operacoes[*numOperacoes].valor = valor;
                (*numOperacoes)++;
            } else {
                printf("Saldo insuficiente para realizar o débito.\n");
            }
        } else if (compararStrings(clientes[i].tipo_conta, "plus")) {
            if (clientes[i].saldo - valor >= -5000) {
                clientes[i].saldo -= valor;
                printf("Débito realizado com sucesso.\n");
                // Registre a operação
                copiarString(operacoes[*numOperacoes].cpf, cpf);
                copiarString(operacoes[*numOperacoes].tipo_operacao, "Débito");
                operacoes[*numOperacoes].valor = valor;
                (*numOperacoes)++;
            } else {
                printf("Saldo insuficiente para realizar o débito.\n");
            }
        } else {
            printf("Tipo de conta inválido.\n");
        }
        break; // Cliente encontrado, saia do loop
    }
}

if (!clienteEncontrado) {
    printf("CPF ou senha incorretos ou cliente não encontrado.\n");
}

}

// Função para realizar um depósito na conta de um cliente void Deposito(Cliente clientes[], int numClientes, Operacao operacoes[], int *numOperacoes) { char cpf[12]; float valor; printf("CPF: "); scanf("%s", cpf); printf("Valor: "); scanf("%f", &valor);

int clienteEncontrado = 0; // Flag para indicar se o cliente foi encontrado

for (int i = 0; i < numClientes; i++) {
    if (compararStrings(clientes[i].cpf, cpf)) {
        clienteEncontrado = 1;
        clientes[i].saldo += valor;
        printf("Depósito realizado com sucesso.\n");
        // Registre a operação
        copiarString(operacoes[*numOperacoes].cpf, cpf);
        copiarString(operacoes[*numOperacoes].tipo_operacao, "Depósito");
        operacoes[*numOperacoes].valor = valor;
        (*numOperacoes)++;
        break; // Cliente encontrado, saia do loop
    }
}

if (!clienteEncontrado) {
    printf("Cliente não encontrado.\n");
}

}

// Função para gerar um extrato bancário void Extrato(Cliente clientes[], int numClientes, Operacao operacoes[], int numOperacoes) { char cpf[12]; char senha[20]; printf("CPF: "); scanf("%s", cpf); printf("Senha: "); scanf("%s", senha);

int clienteEncontrado = 0; // Flag para indicar se o cliente foi encontrado

for (int i = 0; i < numClientes; i++) {
    if (compararStrings(clientes[i].cpf, cpf) && compararStrings(clientes[i].senha, senha)) {
        // Nome do arquivo de extrato
        char nomeArquivo[50];
        copiarString(nomeArquivo, "extrato_");
        copiarString(nomeArquivo + 8, cpf);
        copiarString(nomeArquivo + 20, ".txt");

        // Abra o arquivo para escrita
        FILE *arquivo = fopen(nomeArquivo, "w");
        if (arquivo == NULL) {
            printf("Erro ao criar o arquivo de extrato.\n");
            return;
        }

        fprintf(arquivo, "Extrato Bancário para o Cliente: %s\n", clientes[i].nome);
        fprintf(arquivo, "CPF: %s\n", clientes[i].cpf);
        fprintf(arquivo, "Tipo de conta: %s\n", clientes[i].tipo_conta);
        fprintf(arquivo, "Saldo atual: %.2f\n\n", clientes[i].saldo);

        fprintf(arquivo, "Operações:\n");
        for (int j = 0; j < numOperacoes; j++) {
            if (compararStrings(operacoes[j].cpf, cpf)) {
                fprintf(arquivo, "%s: %.2f\n", operacoes[j].tipo_operacao, operacoes[j].valor);
            }
        }

        fclose(arquivo);
        printf("Extrato gerado com sucesso. Consulte o arquivo: %s\n", nomeArquivo);
        clienteEncontrado = 1; // Cliente encontrado, atualize a flag
        break; // Cliente encontrado, saia do loop
    }
}

if (!clienteEncontrado) {
    printf("CPF ou senha incorretos ou cliente não encontrado.\n");
}

}

// Função para realizar uma transferência entre contas void Transferencia(Cliente clientes[], int numClientes, Operacao operacoes[], int *numOperacoes) { char cpfOrigem[12]; char senhaOrigem[20]; char cpfDestino[12]; float valor; printf("CPF (Origem): "); scanf("%s", cpfOrigem); printf("Senha (Origem): "); scanf("%s", senhaOrigem); printf("CPF (Destino): "); scanf("%s", cpfDestino); printf("Valor: "); scanf("%f", &valor);

int clienteOrigemEncontrado = 0; // Flag para indicar se o cliente de origem foi encontrado
int clienteDestinoEncontrado = 0; // Flag para indicar se o cliente de destino foi encontrado

// Encontre o cliente de origem
int indiceOrigem = -1;
for (int i = 0; i < numClientes; i++) {
    if (compararStrings(clientes[i].cpf, cpfOrigem) && compararStrings(clientes[i].senha, senhaOrigem)) {
        clienteOrigemEncontrado = 1;
        indiceOrigem = i;
        break;
    }
}

// Encontre o cliente de destino
int indiceDestino = -1;
for (int i = 0; i < numClientes; i++) {
    if (compararStrings(clientes[i].cpf, cpfDestino)) {
        clienteDestinoEncontrado = 1;
        indiceDestino = i;
        break;
    }
}

if (clienteOrigemEncontrado && clienteDestinoEncontrado) {
    if (compararStrings(clientes[indiceOrigem].tipo_conta, "comum")) {
        if (clientes[indiceOrigem].saldo - valor >= -1000) {
            clientes[indiceOrigem].saldo -= valor;
            clientes[indiceDestino].saldo += valor;
            printf("Transferência realizada com sucesso.\n");

            // Registre as operações
            copiarString(operacoes[*numOperacoes].cpf, cpfOrigem);
            copiarString(operacoes[*numOperacoes].tipo_operacao, "Transferência (saída)");
            operacoes[*numOperacoes].valor = valor;
            (*numOperacoes)++;
            copiarString(operacoes[*numOperacoes].cpf, cpfDestino);
            copiarString(operacoes[*numOperacoes].tipo_operacao, "Transferência (entrada)");
            operacoes[*numOperacoes].valor = valor;
            (*numOperacoes)++;
        } else {
            printf("Saldo insuficiente para realizar a transferência.\n");
        }
    } else if (compararStrings(clientes[indiceOrigem].tipo_conta, "plus")) {
        if (clientes[indiceOrigem].saldo - valor >= -5000) {
            clientes[indiceOrigem].saldo -= valor;
            clientes[indiceDestino].saldo += valor;
            printf("Transferência realizada com sucesso.\n");

            // Registre as operações
            copiarString(operacoes[*numOperacoes].cpf, cpfOrigem);
            copiarString(operacoes[*numOperacoes].tipo_operacao, "Transferência (saída)");
            operacoes[*numOperacoes].valor = valor;
            (*numOperacoes)++;
            copiarString(operacoes[*numOperacoes].cpf, cpfDestino);
            copiarString(operacoes[*numOperacoes].tipo_operacao, "Transferência (entrada)");
            operacoes[*numOperacoes].valor = valor;
            (*numOperacoes)++;
        } else {
            printf("Saldo insuficiente para realizar a transferência.\n");
        }
    } else {
        printf("Tipo de conta de origem inválido.\n");
    }
} else {
    printf("CPF ou senha incorretos ou clientes não encontrados.\n");
}

}

proj.h

ifndef UNTITLED1_PROJ_H

define UNTITLED1_PROJ_H

ifndef PROJ_H

define PROJ_H

typedef struct { char nome[50]; char cpf[12]; char tipo_conta[10]; float saldo; char senha[20]; } Cliente;

typedef struct { char cpf[12]; char tipo_operacao[20]; float valor; } Operacao;

void Novo_Cliente(Cliente clientes[], int numClientes); void Apagar_Cliente(Cliente clientes[], int numClientes); void Listar_clientes(Cliente clientes[], int numClientes); void Debito(Cliente clientes[], int numClientes, Operacao operacoes[], int numOperacoes); void Deposito(Cliente clientes[], int numClientes, Operacao operacoes[], int numOperacoes); void Extrato(Cliente clientes[], int numClientes, Operacao operacoes[], int numOperacoes); void Transferencia(Cliente clientes[], int numClientes, Operacao operacoes[], int *numOperacoes);

endif

endif //UNTITLED1_PROJ_H