Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas Nas Funçoes


MaxiMous

Pergunta

Oi boa tarde.

Faça um programa que realize o cadastro de contas bancárias com as seguintes
informações: número da conta, nome do cliente e saldo. O banco permitirá o cadastramento de
apenas 15 contas e não pode haver mais que uma conta com o mesmo número. O programa
deverá usar REGISTRO em sua estrutura de dados e criar um menu de opções como a seguir:
Menu de Opções:
1 - Cadastrar Contas
2 - Visualizar contas
3 - Exclusão de contas
4 - Sair

Então... neste exercício eu fiz uma função para cada uma das 3 primeiras opções. Na verdade não sei explicar direito o porque de ocorrer isso. Problema 1, quando mando iniciar o programa, e vou no menu 2 e depois no 3, para constatar que não tem nada cadastrado, mas ele visualiza aqueles dados tipo quando a variável esta com lixo. Problema 2, quando vou no menu 1 para cadastrar uma conta, fala que já tem conta cadastrada, quando na vdd não tem, ai vou la visualizar o que cadastrei e ela não aparece... Eu criei na main() um for que é para zerar a struct quando o programa é executado. Basicamente é isso. Primeiramente eu fiz sem utilizar as funções, tudo dentro da main, cada case com a sua própria solução, e ficou perfeito, insere, pesquisa, exclui tanto por nome quanto por conta. Mas querendo utilizar função para cada case escolhida, já não deu certo... 

Me ajudem.

Segue o código:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
#define MAX 3

struct conta{
        char cliente[50];
        int cc;
        float saldo;
    };

int cadConta(){
    struct conta add[MAX];
    int i, ncc, contador, cont = 0;

    do{
        printf("Digite o Numero da Conta: ");
        scanf("%d",&ncc);

        for(i=0; i<MAX; i++){
            if(ncc != add[i].cc){
                contador++;
            }
        }
        if(contador == MAX){
            add[cont].cc = ncc;
            printf("Digite o Nome do Cliente: ");
            scanf("%s", &add[cont].cliente);
            printf("Digite o saldo: ");
            scanf("%f", &add[cont].saldo);
            printf("\nConta cadastrada com sucesso!\n");
            printf("\n");
            contador = 0;
        }
        else{
            cont = cont - 1;
            printf("Conta já existe!!\n");
            contador = 0;
        }
        cont++;
    }while(cont < MAX);
    system("cls");
    return(0);
}

int visualizaConta(){
    int i, tem, verificador, tipo, cc;
    struct conta view[MAX];
    char cli[50] = {"NULL"};

    do{
        printf("\nSelecione a opção que melhor lhe atenda...\n");
        printf("1 - Visualizar contas p/ Cliente\n");
        printf("2 - Visualizar conta p/ Conta\n");
        printf("3 - Visualizar todas as contas\n");
        printf("4 - Sair deste Menu\n");
        printf("\nDigite uma opção: ");
        scanf("%i", &tipo);

        switch(tipo){
            case 1:
                system("cls");
                printf("\n\n");
                printf("Digite o nome do cliente: ");
                scanf("%s", &cli);
                tem = 0;

                for(i=0; i<MAX; i++){
                    verificador = (strcmp(cli, view[i].cliente));
                    if(verificador == 0){
                        printf("\n\n");
                        printf("Conta: %d - Cliente: %s - Saldo: %.2f\n", view[i].cc, view[i].cliente, view[i].saldo);
                        tem = 1;
                    }
                }
                if(tem == 0){
                    printf("\n\nNão existe conta cadastrada para este cliente!!\n");
                }
                system("pause");
                system("cls");
                break;

            case 2:
                system("cls");
                printf("\n\n");
                printf("Digite o Numero da Conta: ");
                scanf("%d", &cc);
                tem = 0;

                for(i=0; i<MAX; i++){
                    if(cc == view[i].cc){
                        printf("Conta: %d - Cliente: %s - Saldo: %.2f\n", view[i].cc, view[i].cliente, view[i].saldo);
                            tem = 1;
                        }
                    }

                    if(tem == 0){
                        printf("\nNão existe esta conta cadastrada!!\n");
                    }
                    system("pause");
                    system("cls");
                    break;

            case 3:
                for(i=0; i<MAX; i++){
                    printf("Conta: %d - Cliente: %s - Saldo: %.2f\n", view[i].cc, view[i].cliente, view[i].saldo);
                }
                system("pause");
                system("cls");
                break;
                default:
                    printf("Opção de Sair... XauXau");
                    system("cls");
        }
    }while(tipo != 4);
    return(0);
}

int excluir(){
    int op = 0, excluir, tem, i, verificador;
    char excluirC[50] = {"NULL"};
    struct conta exc[MAX];

    do{
        printf("\nSelecione a opção que melhor lhe atenda...\n");
        printf("\n1 - Excluir conta p/ Conta");
        printf("\n2 - Excluir conta p/ Cliente");
        printf("\n3 - Sair deste Menu\n");
        printf("\nDigite uma opção: ");
        scanf("%i", &op);

        switch(op){
            case 1:
                printf("Digite o Numero da Conta: ");
                scanf("%d", &excluir);
                tem = 0;

                for(i=0; i<MAX; i++){
                    if(excluir == exc[i].cc)
                        tem = 1;
                }
                if(tem == 1){
                    printf("\nConta Localizada!!\n");
                }
                if(tem == 0){
                    printf("\nNão existe esta conta cadastrada!!\n");
                    system("cls");
                }
                else{
                    for(i=0; i<MAX; i++){
                        if(excluir == exc[i].cc){
                            exc[i].cc = 0;
                            strcpy(exc[i].cliente, "NULL");
                            exc[i].saldo = 0.0;
                            printf("\nConta Excluida com sucesso!!\n");
                            system("pause");
                            system("cls");
                        }
                    }
                }
                system("pause");
                system("cls");
                break;

            case 2:
                printf("Digite o Nome do Cliente: ");
                scanf("%s", &excluirC);
                tem = 0;

                for(i=0; i<MAX; i++){
                    verificador = (strcmp(excluirC, exc[i].cliente));
                    if(verificador == 0){
                        tem = 1;
                        exc[i].cc = 0;
                        strcpy(exc[i].cliente, "NULL");
                        exc[i].saldo = 0.0;
                        printf("\nConta Localizada!!\n");
                        printf("\nConta Excluida com sucesso!!\n");
                        system("pause");
                        system("cls");
                    }
                }
                if(tem == 0){
                    printf("\nNão existe esta conta cadastrada!!\n");
                    system("cls");
                }
                break;
                default:
                    printf("Opção de Sair... XauXau");
                    system("cls");
        }
    }while(op != 3);
}


int main()
{
    setlocale(LC_ALL,"portuguese");
    int num = 0, i, cadConta(), visualizaConta(), excluir();
    struct conta banco[MAX];

    printf("8) Faça um programa que realize o cadastro de contas bancárias com as seguintes informações: número da conta, nome do cliente e saldo. O banco permitirá o cadastramento de apenas 15 contas e não pode haver mais que uma conta com o mesmo número. O programa deverá usar REGISTRO em sua estrutura de dados e criar um menu de opções como a seguir:\nMenu de Opções:\n\n");

    for(i=0; i<MAX; i++){
        strcpy(banco[i].cliente, "NULL");
        banco[i].cc = 0;
        banco[i].saldo = 0.0;
    }

    do{
        printf("\nMenu de Opções:\n1 - Cadastrar Contas\n2 - Visualizar contas\n3 - Excluir contas\n4 - Sair.\n\n");
        printf("\nDigite uma opção: ");
        scanf("%i", &num);

        switch(num){
            case 1:
                system("cls || clear");
                printf("", cadConta());
                break;

            case 2:
                system("cls || clear");
                printf("", visualizaConta());
                break;

            case 3:
                system("cls || clear");
                printf("", excluir());
                break;

            case 4:
                system("cls || clear");
                printf("Opcão de Sair!! Xau Xau\n");
                break;
                default:
                    system("cls || clear");
        }
    }while(num != 4);
    return 0;
}

 

exercicio01.png

Editado por MaxiMous
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 1

Equívocos fatais comprometem todo o sistema, observe com atenção os comentários para função de cadastramento, recomento também breve revisão sobre tipos de escopo de variáveis.

int cadConta(){
    struct Conta add[MAX]; /*< Esse aparente vetor é a base de dados do sistema,
    seu escopo de função é temporário, nele persiste suas informações até o 
    instante em que a função retorna, logo depois desse evento seram 'apagados'
    do sistema. */
    
    ...
}

 

Editado por britivaldo
Link para o comentário
Compartilhar em outros sites

  • 1
Em 16/07/2019 em 08:37, britivaldo disse:

Equívocos fatais comprometem todo o sistema, observe com atenção os comentários para função de cadastramento, recomento também breve revisão sobre tipos de escopo de variáveis.


int cadConta(){
    struct Conta add[MAX]; /*< Esse aparente vetor é a base de dados do sistema,
    seu escopo de função é temporário, nele persiste suas informações até o 
    instante em que a função retorna, logo depois desse evento seram 'apagados'
    do sistema. */
    
    ...
}

Vlw meu nobre... Tinha esquecido de detalhes importantes. Dei uma modificada e agora ficou beleza.

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...