Jump to content
Sign in to follow this  
vanuza.nuna

Adicionar um novo cliente

Recommended Posts

vanuza.nuna

Olá estou com dificuldades em terminar este programa, será que podem ajudar-me ??

Ele caracteriza o um cliente de um banco por nome do cliente , nome do banco , número da conta, número de identificação e seu saldo. O programa armazena os dados de 150 clientes de bancos diferentes, o seu objectivo é ler os dados dos clientes, mostrar os dados de todos clientes e adicionar um novo cliente. A minha dificuldade encontra-se em adicionar um novo cliente.

Aqui esta o que ja tenho feito:

#include<stdio.h>
struct dados_do_cliente 
{
      char banco[10], nome[40], n_bi[14];
      int conta_n; 
      float saldo;
} clientes, cliente[150];
void lerDados();
void imprimir();
int main()
{
    lerDados();
    imprimir();
    system("pause");
    return 0;
}
void imprimir()
{
int i;
for (i=0; i<1; i++)
printf("\nNome do cliente: %s", cliente[i].nome);
printf("\nNome do Banco: %s", cliente[i].banco);
printf("\nNr do B.I: %s", cliente[i].n_bi);
printf("\nNr da conta: %d", cliente[i].conta_n);
printf("\nSaldo da Conta: %f", cliente[i].saldo);
                     
}
void lerDados()
{
     int i;
     for (i=0; i<1;i++);
     {
         printf("Nome do cliente:");
           gets (cliente[i].nome);
           printf("Nome do Banco:");
           scanf("%s", cliente[i].banco);   
           printf("Nr do B.I:");
           scanf("%s", &cliente[i].n_bi);
           printf("Nr da Conta");
           scanf("%d", &cliente[i].conta_n);
           printf("Saldo da conta");
           scanf("%f", &cliente[i].saldo);
         }


Não viva para que a sua presença seja notada, mas para que a sua falta seja sentida...

Share this post


Link to post
Share on other sites
KTachyon

scanf("%s", &cliente[i].n_bi);

É um array de chars, não leva o &.

Pelo que está no for, só estás a ler 1 cliente. Se queres ler mais a determinado ponto do programa, se calhar devias ter um indicador do último objecto que tens no array.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
vanuza.nuna

obrigada pela correção. Será que podias ajudar-me mais ?? tenho que criar vetores para poder adicionar um novo cliente mas n sei exactamente como o fazer...  :)


Não viva para que a sua presença seja notada, mas para que a sua falta seja sentida...

Share this post


Link to post
Share on other sites
KTachyon

Aliás, o teu problema até é capaz de ser outro:

for (i=0; i<1;i++);

O ciclo for não faz nada porque tem um ; a seguir.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
vanuza.nuna

huuum mas o meu prof é que retificou-me  colocando 1 ...


Não viva para que a sua presença seja notada, mas para que a sua falta seja sentida...

Share this post


Link to post
Share on other sites
KTachyon

Eu estava a falar do ; a seguir ao for():

for (i=0; i<1;i++);

é o mesmo que teres:

for (i=0; i<1;i++) { ; }

Ou seja, é um ciclo que não faz nada. Tens que tirar aquele ; para conseguires que esse loop execute o código que vem a seguir N vezes.

Neste caso, como o loop só executa uma vez, é irrelevante, porque o código a seguir executa sempre, mas se queres que o código execute dentro do loop tens que fazer esta correcção.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Localhost

Isto parece-me mais C do que C++. Não utilizes a função gets para mais tarde não teres problemas com overflows.


here since 2009

Share this post


Link to post
Share on other sites
vanuza.nuna

Pois, percebo não me é exigido que ele faça o ciclo de 150 clientes, é mais uma simulação...

preciso mesmo é de ajuda ou melhor ideias de como faço vetores para poder criar uma função que adicione um novo cliente.


Não viva para que a sua presença seja notada, mas para que a sua falta seja sentida...

Share this post


Link to post
Share on other sites
KTachyon

Podes criar um menu que te permita escolher adicionar um novo cliente. Assumindo que manténs o limite de 150 clientes, crias uma variável int que diz a próxima posição onde adicionar um cliente.

int next_client = 0;

//...

void lerDados() {
           printf("Nome do cliente:");
           scanf("%s", cliente[next_client].nome);
           printf("Nome do Banco:");
           scanf("%s", cliente[next_client].banco);   
           printf("Nr do B.I:");
           scanf("%s", cliente[next_client].n_bi);
           printf("Nr da Conta");
           scanf("%d", &cliente[next_client].conta_n);
           printf("Saldo da conta");
           scanf("%f", &cliente[next_client].saldo);
           
           next_client++; // incrementa a posição
}

A outra opção é, em vez de criares o array, alocares/realocares memória dinamicamente, à medida que vais adicionando clientes. Irás precisar também de manter o registo do número de clientes que tens em memória.

Melhor hipótese ainda, seria teres uma lista ligada, o que te permitia ligar novos clientes que vás adicionando sem a necessidade de realocares a memória, alocando apenas um cliente de cada vez.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
vanuza.nuna

gostava que podesses explicar-me como crio vetores como argumento de uma função que adicione um novo cliente no programa.


Não viva para que a sua presença seja notada, mas para que a sua falta seja sentida...

Share this post


Link to post
Share on other sites
KTachyon
typedef struct dados_do_cliente cliente;

int main() {
    cliente ddc[150];
    lerDados(ddc);

    return 0;
}

void lerDados(cliente ddc[]) {
    // code
    scanf("%d", &ddc[0].conta_n);
    scanf("%s", ddc[0].nome);
    //...
}


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
vanuza.nuna

porque colocaste o typedef ?? ainda não estudei isto! sera que podias explicar a sua utilização??


Não viva para que a sua presença seja notada, mas para que a sua falta seja sentida...

Share this post


Link to post
Share on other sites
Localhost

porque colocaste o typedef ?? ainda não estudei isto! sera que podias explicar a sua utilização??

Serve para definir um novo tipo de dados (dar outro nome).


here since 2009

Share this post


Link to post
Share on other sites
KTachyon

Neste caso foi só para não ter que estar a escrever "struct dados_do_cliente" em todo o lado.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
vanuza.nuna

Serve para definir um novo tipo de dados (dar outro nome).

ok estive a ler um pouco sobre isto na net e fiz assim:

#include<stdio.h>
typedef struct dados_do_cliente ;
struct dados_do_cliente 
{
      char banco[10], nome[40], n_bi[14];
      int conta_n; 
      float saldo;
      int vetor[5];
} clientes, cliente[150];
void lerDados();
void imprimir();

int main()
{
    lerDados();
    imprimir();
    system("pause");
    return 0;
}
void imprimir()
{
int i;
for (i=0; i<1; i++)
printf("\nNome do cliente: %c", cliente[i].nome);
printf("\nNome do Banco: %s", cliente[i].banco);
printf("\nNr do B.I: %s", cliente[i].n_bi);
printf("\nNr da conta: %d", cliente[i].conta_n);
printf("\nSaldo da Conta: %f", cliente[i].saldo);
                     
}

void lerDados()
{
     int i;
     for (i=0; i<1;i++);
     {
         printf("Nome do cliente:");
           scsnf("%s", cliente[i].nome);
           printf("Nome do Banco:");
           scanf("%s", cliente[i].banco);   
           printf("Nr do B.I:");
           scanf("%s", &cliente[i].n_bi);
           printf("Nr da Conta:");
           scanf("%d", &cliente[i].conta_n);
           printf("Saldo da conta:");
           scanf("%f", &cliente[i].saldo);
         
         }
}

int main() {
    cliente ddc[150];
    lerDados(ddc);

    return 0;
}

void lerDados(cliente ddc[]) {
    scanf("%s", ddc[0].nome);
    scanf("%s", ddc[0].banco);
    scanf("%d", &ddc[0].conta_n);
    scanf("%s", ddc[0].n_bi);
    scanf("%s", ddc[0].nome);
    scanf("%f", ddc[0].saldo);
    
}

mas da-me erro na função main.. :)


Não viva para que a sua presença seja notada, mas para que a sua falta seja sentida...

Share this post


Link to post
Share on other sites
vanuza.nuna

ddc devia ser do tipo dados_do_cliente.

Agora da-me erro no typedef ... "... [Warning] useless keyword or type name in empty declaration "


Não viva para que a sua presença seja notada, mas para que a sua falta seja sentida...

Share this post


Link to post
Share on other sites
KTachyon

Não lhe deste nenhum nome.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Localhost

Se calhar está na altura de se mover este tópico para o fórum de C.


here since 2009

Share this post


Link to post
Share on other sites
vanuza.nuna

#include<stdio.h>
struct dados_do_cliente 
{
      char banco[10], nome[40], n_bi[14];
      int conta_n; 
      float saldo;
} clientes, cliente[150];
void lerDados();
void imprimir();
int main()
{
    lerDados();
    imprimir();
    system("pause");
    return 0;
}
void imprimir()
{
int i;
for (i=0; i<1; i++)
printf("\nNome do cliente: %s", cliente[i].nome);
printf("\nNome do Banco: %s", cliente[i].banco);
printf("\nNr do B.I: %s", cliente[i].n_bi);
printf("\nNr da conta: %d", cliente[i].conta_n);
printf("\nSaldo da Conta: %f", cliente[i].saldo);
                     
}

void lerDados()
{
     int i;
     for (i=0; i<1;i++);
     {
         printf("Nome do cliente:");
           gets (cliente[i].nome);
           printf("Nome do Banco:");
           scanf("%s", cliente[i].banco);   
           printf("Nr do B.I:");
           scanf("%s", &cliente[i].n_bi);
           printf("Nr da Conta:");
           scanf("%d", &cliente[i].conta_n);
           printf("Saldo da conta:");
           scanf("%f", &cliente[i].saldo);
         
         }
}

void Func_novocliente()
{
     
     int clientes,pos, c;
     
     puts("Quantos Clientes deseja adicionar?");
     scanf("%d",&clientes);
     
     for(c=1;c<=clientes;c++);
     {
     fflush(stdin);
     printf("Adicionando novo cliente\n\n\n");
     
     printf("Nome do Cliente: ");
     gets(cliente[pos].nome);
     printf("Nome do Banco: ");
     gets(cliente[pos].banco);
     printf("Nr da Conta: ");
     scanf("%d",&cliente[pos].conta_n);
     printf("Nr do B.I: ");
     scanf("%d",&cliente[pos].n_bi);
     printf("Saldo da Conta: ");
     scanf("%f",&cliente[pos].saldo);
     }
     
     Func_Mostrar();
     
     return ;
}

apresenta o seguinte erro :  [Linker error] undefined reference to `Func_Mostrar'

                                                ld returned 1 exit status

alguem sabe dizer aond devo retificar ???


Não viva para que a sua presença seja notada, mas para que a sua falta seja sentida...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.