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

Trabalho C - Simulação de caixa eletrônico


RenanPoswar

Pergunta

A descrição do trabalho é a seguinte...

Fazer um programa que simule um caixa autmático. O programa deve apresentar ao usuário um menu com opções para

abrir uma nova conta

consultar o saldo de uma contra

fazer um saque

fazer um depósito

encerrar uma conta

calcular o saldo médio de todas as contas

calcular o valor total em depósito em uma agência

ler dados de arquivo

gravar dados em arquivo

terminar

e implementar cada uma delas.

Cada conta deverá conter as informações:

número da agência

número da conta

senha

nome do titular

valor do cheque especial

saldo disponível

Duas contas de uma mesma agência não podem ter o mesmo número.

O programa deve validar todos os dados de entrada.

To com muita duvida... to meio perdido... me ajudem por favor...

Desde já agradeço

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

O programa já está quase totalmente especificado, restou para você o exercício da parte massante.

Pense assim:

1-) O problema me dá informações, informações são armazenadas em variáveis, portanto:

int agencia, conta, senha, saldo, cheque_esp;
char *titular; 

/* Ou ainda em estrutura, se souber usar, facilitará bastante: */
typedef struct conta {
  int senha, 
       saldo, 
       chequeEsp;
  char *titular;
} Conta;

/* Depois em main crie um array onde o número do elemento corresponderá ao número da conta */
// ...
int main(void)
{
  Conta conta[max_de_contas];
  // ...
}

/* Ou então use um array para ponteiros e para deletar uma conta mude o valor de conta[num_da_conta] para NULL:
// ...
  Conta *conta[max_de_contas];
// ...
2-) O enunciado especifica várias ações, ações podem ser traduzidas como funções perfeitamente nesse caso, portanto vá definindo as funções:
/* abrir uma nova conta */
conta *criarConta(void);         // Dados perguntados na função.

/* consultar o saldo de uma contra */
int retornaSaldo(Conta * conta);

/* fazer um saque */
void saque(Conta *conta);      // O valor é perguntado na função.

/* fazer um depósito */
void deposito(Conta *conta);  // O valor é perguntado na função.

/* encerrar uma conta */
void deletarConta(Conta **agencia);

/* calcular o saldo médio de todas as contas */
int saldoMedio(Conta **agencia);

/* calcular o valor total em depósito em uma agência */
int valorTotal(Conta **agencia);

/* ler dados de arquivo */
void lerArquivo(Conta **, char *nomeDoArquivo); 

/* gravar dados em arquivo */
void gravarDados(Conta **, char *nomeDoArquivo);
3-) Fazer main() fica mais fácil:
int main(void)
{
  Conta *conta[max_de_contas];
  char entrada;
  FILE sysFile = fopen("sysfile.dat", "r");    // Abre o arquivo de sistêma

  /* Não há nenhuma conta a princípio */
  memset(conta, NULL, max_de_contas);

  while ( !feof(sysFile)) {
    /* Busca contas existentes no arquivo */
  }

  /* Lê arquivo do sistema para procurar contas */

  // [EDITADO 2]
  /* Pede o login */

  /* Autentica usuário */
  //[/EDITADO 2]

  do {
    /* Limpa a tela (não é realmente preciso) */

    /* Mostra o menu */

    /* entrada = decisão do usuário */

    switch (entrada) {
    /* Verifica o que foi pedido e chama a função correspontente */
    };
  } while (toupper(entrada) != 'S');    // Pressupondo que 'S' seja o comando para sair
}

  /* Encerra o programa. */

Bingo!

[EDITADO] - Só uma observação, você pode chamar Conta ** de Agência. Talvez compense usar um typedef.

[EDITADO 2] - Crie um sistema de login em main!

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

  • 0

Por enquanto meu programa está assim...

#include <stdio.h>
#include <string.h>]
#include <conio.h>

#define TAM_MAX_CLIENTES 1000
#define TAM_MAX_AGENCIA  10
#define TAM_MAX_CONTA    20
#define TAM_MAX_SENHA    06
#define TAM_MAX_NOME     60

struct conta
{
   char agencia[TAM_MAX_AGENCIA];
   char conta[TAM_MAX_CONTA];
   int senha;
   char nome[TAM_MAX_NOME];
   double cheque;
   double saldo;
};

char *fgetline(FILE *f, char *s, int tamanho)
{
   char *str = fgets(s, tamanho, f);
   if (str != NULL)
   {
      int n = strlen(s);
      if (s[n-1] == '\n')
         s[n-1] = '';
      else
         while (! feof(f) && fgetc(f) != '\n');
   }
   return str;
}

void abrir_conta(struct conta v[], int *pn)
{
   printf("\nAbertura de nova conta\n");
   if (*pn == TAM_MAX_CLIENTES)
      printf("O banco já atingiu o numero de clientes suportado pelo programa. Chame o administrador do programa para alterá-lo.\n");
   else
   {
      printf("Nome do titular: ");             fgetline(stdin, v[*pn].nome, TAM_MAX_NOME);
      printf("Numero da Agência: ");           fgetline(stdin, v[*pn].agencia, TAM_MAX_AGENCIA);
      printf("Numero do conta: ");             fgetline(stdin, v[*pn].conta, TAM_MAX_CONTA);
      printf("Valor do cheque especial: ");    scanf("%lf", v[*pn].cheque);
      printf("Saldo inicial: ");               scanf("%lf", v[*pn].saldo);
      (*pn)++;
   }
}

void consultar(struct conta v[], int n)
{
   char pesquisa_cliente[TAM_MAX_NOME];
   printf("\nConsulta de saldo de conta\n");
   printf("Nome do titular: ");
   fgetline(stdin, pesquisa_cliente, TAM_MAX_NOME);

   int i;
   for (i = 0; i < n; i++)
      if ( strcmp(v[i].nome, pesquisa_cliente) == 0)
      {
         printf("Saldo da conta: %.2lf\n", v[i].conta);
         return;
      }
   printf("Cliente não encontrado.\n");
}

int main(void)
{
   struct conta dados[TAM_MAX_CLIENTES];
   int n = 0;

   int opcao;

   do
   {
      printf("===========================================\n");
      printf("======Caica Eletrônico Banco do Povão======\n");
      printf("===========================================\n\n");
      printf("===Escolha a opção desejada===\n");
      printf("1. Abrir uma nova conta\n");
      printf("2. Consultar o saldo de uma conta\n");
      printf("3. Fazer um saque\n");
      printf("4. Fazer um depósito\n");
      printf("5. Calcular o saldo médio de todas as contas\n");
      printf("6. Calcular o valor toal em deposito em uma agência\n");
      printf("7. Ler dados de arquivos\n");
      printf("8. Gravar dados em arquivo\n");
      printf("9. Terminar\n");
      printf("\n");

      do
      {
         printf("Escolha uma opção: ");
         scanf("%d", &opcao);
         if (opcao < 1 || opcao > 9)
            printf("Opção Inválida.\n");
      }
      while (opcao < 1 || opcao > 9);
      getchar();

      switch (opcao)
      {
      case 1:
         abrir_conta(dados, &n);
         break;
      case 2:
         consultar(dados, n);
         break;
      case 3:
           
      case 4: 

      case 5:

      case 6:

      case 7:

      case 8:
           
      case 9:
           break;
      }
      if (opcao == 9)
         printf("\nCaixa automatico encerrado.\n");
   }
   while (opcao != 9);
   
   getchar();
   return 0;
}

Estava fazendo uns testes (nem tudo esta já implementado) e quando vou cadastrar o cliente o programa encerra quando digito o valor do cheque especial, creio q estou fazendo errado na hora de armazenar o dado do cheque especial, mas não sei o modo certo de fazer...

Entre outras duvidas...

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

  • 0

Isso acontece porque você esqueceu de passar por referência as variáveis para o scanf() na função abrir_conta():

// ...
      printf("Valor do cheque especial: ");    scanf("%lf", v[*pn].cheque);
      printf("Saldo inicial: ");               scanf("%lf", v[*pn].saldo);
// ...
Mude para:
// ...
      printf("Valor do cheque especial: ");    scanf("%lf", &(v[*pn].cheque));
      printf("Saldo inicial: ");               scanf("%lf", &(v[*pn].saldo));
// ...
Mude também na função consultar():
printf("Saldo da conta: %.2lf\n", v[i].conta);
para:
printf("Saldo da conta: %.2lf\n", v[i].saldo);

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

  • 0

Acho que se você implementar um sistema de login você simplifica as funções e aumenta a performance do seu progoama, pois as funções não têm que ficar buscando os dados no vetor com a pesquisa já feita uma vez. E você ainda pode mandar uma mensagem de boas vindas com o nome da pessoa cada vez que ela entrar no sistema :)

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

  • 0

Agora a duvida é na função de ler_arquivo...

#include <stdio.h>
#include <string.h>
#include <conio.h>

#define TAM_MAX_CLIENTES 1000
#define TAM_MAX_AGENCIA  10
#define TAM_MAX_CONTA    20
#define TAM_MAX_SENHA    06
#define TAM_MAX_NOME     60

struct conta
{
   char agencia[TAM_MAX_AGENCIA];
   char conta[TAM_MAX_CONTA];
   int senha;
   char nome[TAM_MAX_NOME];
   double cheque;
   double saldo;
};

char *fgetline(FILE *f, char *s, int tamanho)
{
   char *str = fgets(s, tamanho, f);
   if (str != NULL)
   {
      int n = strlen(s);
      if (s[n-1] == '\n')
         s[n-1] = '';
      else
         while (! feof(f) && fgetc(f) != '\n');
   }
   return str;
}

void abrir_conta(struct conta v[], int *pn)
{
   printf("\nAbertura de nova conta\n");
   if (*pn == TAM_MAX_CLIENTES)
      printf("O banco já atingiu o numero de clientes suportado pelo programa. Chame o administrador do programa para alterá-lo.\n");
   else
   {
      printf("Nome do titular: ");             fgetline(stdin, v[*pn].nome, TAM_MAX_NOME);
      printf("Numero da Agência: ");           fgetline(stdin, v[*pn].agencia, TAM_MAX_AGENCIA);
      printf("Numero do conta: ");             fgetline(stdin, v[*pn].conta, TAM_MAX_CONTA);
      printf("Valor do cheque especial: ");    scanf("%lf", &v[*pn].cheque);
      printf("Saldo inicial: ");               scanf("%lf", &v[*pn].saldo);
      printf("\n\n");
      (*pn)++;
   }
}

void consultar(struct conta v[], int n)
{
   char pesquisa_agencia[TAM_MAX_AGENCIA];
   char pesquisa_conta[TAM_MAX_CONTA];
   printf("\nConsulta de saldo de conta\n");
   printf("Agencia: ");
   fgetline(stdin, pesquisa_agencia, TAM_MAX_AGENCIA);
   printf("Conta: ");   
   fgetline(stdin, pesquisa_conta, TAM_MAX_CONTA);

   int i;
   for (i = 0; i < n; i++)
      if (strcmp(v[i].agencia, pesquisa_agencia) == 0 && strcmp(v[i].conta, pesquisa_conta) == 0)
      {
         printf("Nome do titular: %s\n", v[i].nome);
         printf("Saldo da conta: %.2lf\n", v[i].saldo + v[i].cheque);
         printf("Obs: O saldo da conta é adicionado do cheque especial.\n\n");
         return;
      }
      else
      {
          if (strcmp(v[i].agencia, pesquisa_agencia) != 0)
              printf("Agencia não encontrada.\n");
          if (strcmp(v[i].conta, pesquisa_conta) != 0)
              printf("Conta não encontrada.\n");
      }
}

void ler_arquivo(struct conta v[], int *pn)
{
   printf("\nLeitura de arquivo do Caixa Automático\n");
   char nome_arquivo[TAM_MAX_NOME];
   printf("Nome do arquivo: ");
   fgetline(stdin, nome_arquivo, TAM_MAX_NOME);
   FILE *f = fopen(nome_arquivo, "r");
   if (f == NULL)
      printf("O arquivo não foi encontrado.\n");
   else
   {
      *pn = 0;
      while (! feof(f))
      {
         fgetline(f, v[*pn].nome, TAM_MAX_NOME);
         fgetline(f, v[*pn].agencia, TAM_MAX_AGENCIA);
         fgetline(f, v[*pn].conta, TAM_MAX_CONTA);
         if (v[*pn].nome[0] != '' || strlen(v[*pn].agencia) > 0 || v[*pn].conta[0] != '')
            (*pn)++;
      }
      fclose(f);   
   }
   printf("Numeros de clientes = %d\n", *pn - 1);
   printf("Por razões de éticas o saldo da conta não são divulgaos.\n\n");
}

void gravar_arquivo(struct conta v[], int n)
{
   printf("\nGravação dos dados do Caixa eletrônico\n");
   char nome_arquivo[TAM_MAX_NOME];
   printf("Nome do arquivo: ");
   fgetline(stdin, nome_arquivo, TAM_MAX_NOME);
   FILE *f = fopen(nome_arquivo, "w");
   if (f == NULL)
      printf("Não foi possivel salvar o arquivo.\n");
   else
   {
      int i;
      for (i = 0; i < n; i++)
      {
         fprintf(f, "%s\n", v[i].nome);
         fprintf(f, "%s\n", v[i].agencia);
         fprintf(f, "%s\n", v[i].conta);
         fprintf(f, "%d\n", v[i].cheque);
         fprintf(f, "%d\n", v[i].senha);
         fprintf(f, "%d\n", v[i].saldo);
      }
      fclose(f);
   }
   printf("\n");
}

int main(void)
{
   struct conta dados[TAM_MAX_CLIENTES];
   int n = 0;
   int opcao;

   do
   {
      printf("===========================================\n");
      printf("======Caica Eletrônico Banco do Povão======\n");
      printf("===========================================\n\n");
      printf("===Escolha a opção desejada===\n");
      printf("1. Abrir uma nova conta\n");
      printf("2. Consultar o saldo de uma conta\n");
      printf("3. Fazer um saque\n");
      printf("4. Fazer um depósito\n");
      printf("5. Calcular o saldo médio de todas as contas\n");
      printf("6. Calcular o valor toal em deposito em uma agência\n");
      printf("7. Ler dados de arquivos\n");
      printf("8. Gravar dados em arquivo\n");
      printf("9. Terminar\n");
      printf("\n");

      do
      {
         printf("Escolha uma opção: ");
         scanf("%d", &opcao);
         if (opcao < 1 || opcao > 9)
            printf("Opção Inválida.\n");
      }
      while (opcao < 1 || opcao > 9);
      getchar();

      switch (opcao)
      {
      case 1:
         abrir_conta(dados, &n);
         break;
      case 2:
         consultar(dados, n);
         break;
      case 3:
           
      case 4: 

      case 5:

      case 6:

      case 7:
         ler_arquivo(dados, &n);
         break;
      case 8:
         gravar_arquivo(dados, n);
         break;
      case 9:
           break;
      }
      if (opcao == 9)
         printf("\nCaixa automatico encerrado.\n");
   }
   while (opcao != 9);
   
   getchar();
   return 0;
}

Não sei o codico para ler o saldo da conta. Para ler string seria (fgetline(f, v[*pn].conta, TAM_MAX_CONTA);), mas não sei o codigo para ler double...

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Eu consegui aqui:

void ler_arquivo(struct conta v[], int *pn)
{
   printf("\nLeitura de arquivo do Caixa Automático\n");
   char nome_arquivo[TAM_MAX_NOME];
   printf("Nome do arquivo: ");
   fgetline(stdin, nome_arquivo, TAM_MAX_NOME);
   FILE *f = fopen(nome_arquivo, "r");
   if (f == NULL)
      printf("O arquivo não foi encontrado.\n");
   else
   {
      *pn = 0;
      while (! feof(f))
      {
         fgetline(f, v[*pn].nome, TAM_MAX_NOME);
         fgetline(f, v[*pn].agencia, TAM_MAX_AGENCIA);
         fgetline(f, v[*pn].conta, TAM_MAX_CONTA);
         fscanf(f, "%lf\n", &(v[*pn].cheque));
         fscanf(f, "%d\n", &(v[*pn].senha)); //Mudei aqui de "%lf" para "%d"
         fscanf(f, "%lf\n", &(v[*pn].saldo));
         if (v[*pn].nome[0] != '' || strlen(v[*pn].agencia) > 0 || v[*pn].conta[0] != '')
            (*pn)++;
      }
      fclose(f);   
   }
   printf("Numeros de clientes = %d\n", *pn - 1);
   printf("Por razões de éticas o saldo da conta não são divulgaos.\n\n");
}

[EDITADO] Não ví que você tinha editado :P

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

  • 0

Uma duvida importante:

Duas contas de uma mesma agência não podem ter o mesmo número.

como faço essa validação???

Outra dúvida é em questão de calcular o valor total em depósito em uma agência ... não estou conseguindo fazer estas duas coisas...

meu codigo está assim:

#include <stdio.h>
#include <string.h>
#include <conio.h>

#define TAM_MAX_CLIENTES 1000
#define TAM_MAX_AGENCIA  10
#define TAM_MAX_CONTA    20
#define TAM_MAX_SENHA    06
#define TAM_MAX_NOME     60

struct conta
{
   char agencia[TAM_MAX_AGENCIA];
   char conta[TAM_MAX_CONTA];
   int senha;
   char nome[TAM_MAX_NOME];
   double cheque;
   double saldo;
};

char *fgetline(FILE *f, char *s, int tamanho)
{
   char *str = fgets(s, tamanho, f);
   if (str != NULL)
   {
      int n = strlen(s);
      if (s[n-1] == '\n')
         s[n-1] = '';
      else
         while (! feof(f) && fgetc(f) != '\n');
   }
   return str;
}

void abrir_conta(struct conta v[], int *pn)
{
   printf("\nAbertura de nova conta\n");
   if (*pn == TAM_MAX_CLIENTES)
      printf("O banco já atingiu o numero de clientes suportado pelo programa. Chame o administrador do programa para alterá-lo.\n");
   else
   {
      printf("Nome do titular: ");                fgetline(stdin, v[*pn].nome, TAM_MAX_NOME);
      printf("Numero da Agência: ");              fgetline(stdin, v[*pn].agencia, TAM_MAX_AGENCIA);
      printf("Numero do conta: ");                fgetline(stdin, v[*pn].conta, TAM_MAX_CONTA);
      printf("Valor do cheque especial: R$");       scanf("%lf", &v[*pn].cheque);
      printf("Saldo inicial: R$");                  scanf("%lf", &v[*pn].saldo);
      printf("Senha (deve conter 6 numeros): ");   scanf("%d", &v[*pn].senha);
      printf("\n\n");
      (*pn)++;
   }
}

void consultar(struct conta v[], int n)
{
   char pesquisa_agencia[TAM_MAX_AGENCIA];
   char pesquisa_conta[TAM_MAX_CONTA];
   int senha;
   
   printf("\nConsulta de saldo de conta\n");
   printf("Agencia: ");
   fgetline(stdin, pesquisa_agencia, TAM_MAX_AGENCIA);
   printf("Conta: ");
   fgetline(stdin, pesquisa_conta, TAM_MAX_CONTA);
   printf("Senha: ");
   scanf("%d", &senha);

   int i;
   for (i = 0; i < n; i++)
   {
       if (strcmp(v[i].agencia, pesquisa_agencia) == 0 && strcmp(v[i].conta, pesquisa_conta) == 0)
       {
           if ((v[i].senha - senha) == 0)
           {
               printf("Nome do titular: %s\n", v[i].nome);
               printf("Cheque especial: R$%.2lf\n", v[i].cheque);
               printf("Saldo da conta: R$%.2lf\n", v[i].saldo + v[i].cheque);
               printf("Obs: O saldo da conta é adicionado do cheque especial.\n\n");
           }

           else
               printf("Senha invalida.\n");
           return;
       }
       else
       {
           if (strcmp(v[i].agencia, pesquisa_agencia) != 0)
               printf("\nAgencia não encontrada.\n\n");
           if (strcmp(v[i].conta, pesquisa_conta) != 0)
               printf("\nConta não encontrada.\n\n");
       }
   }
      
}

void saque(struct conta v[], int *pn)
{
   char pesquisa_agencia[TAM_MAX_AGENCIA];
   char pesquisa_conta[TAM_MAX_CONTA];
   int senha;
   double saque;
   
   printf("\nSaque de conta\n");
   printf("Agencia: ");
   fgetline(stdin, pesquisa_agencia, TAM_MAX_AGENCIA);
   printf("Conta: ");
   fgetline(stdin, pesquisa_conta, TAM_MAX_CONTA);
   printf("Senha: ");
   scanf("%d", &senha);

   int i;
   for (i = 0; i < *pn; i++)
   {
       if (strcmp(v[i].agencia, pesquisa_agencia) == 0 && strcmp(v[i].conta, pesquisa_conta) == 0)
       {
           if ((v[i].senha - senha) == 0)
           {
               printf("Valor do saque: R$");
               scanf("%lf", &saque);
               if (saque < 0.0 || saque == 0.0)
                  printf("Voce deve colocar um valor positivo");
               else
               {
                   if (saque > (v[i].saldo + v[i].cheque))
                       printf("Saldo insuficiente.\n\n");
                   else
                   {
                       v[i].saldo -= saque;
                       printf("Saque realizado com sucesso\n");
                       printf("Saldo atual: R$%.2lf\n\n", v[i].saldo + v[i].cheque);
                   }
               }
           }
           else
               printf("Senha invalida.\n");
           return;
       }
       else
       {
           if (strcmp(v[i].agencia, pesquisa_agencia) != 0)
               printf("\nAgencia não encontrada.\n\n");
           if (strcmp(v[i].conta, pesquisa_conta) != 0)
               printf("\nConta não encontrada.\n\n");
       }
   }
      
}

void deposito(struct conta v[], int *pn)
{
   char pesquisa_agencia[TAM_MAX_AGENCIA];
   char pesquisa_conta[TAM_MAX_CONTA];
   int senha;
   double deposito;
   
   printf("\nSaque de conta\n");
   printf("Agencia: ");
   fgetline(stdin, pesquisa_agencia, TAM_MAX_AGENCIA);
   printf("Conta: ");
   fgetline(stdin, pesquisa_conta, TAM_MAX_CONTA);
   printf("Senha: ");
   scanf("%d", &senha);

   int i;
   for (i = 0; i < *pn; i++)
   {
       if (strcmp(v[i].agencia, pesquisa_agencia) == 0 && strcmp(v[i].conta, pesquisa_conta) == 0)
       {
           if ((v[i].senha - senha) == 0)
           {
               printf("Valor do deposito: R$");
               scanf("%lf", &deposito);
               if (deposito < 0.0 || deposito == 0.0)
                  printf("Voce deve colocar um valor positivo");
               else
               {
                   v[i].saldo += deposito;
                   printf("Deposito realizado com sucesso\n");
                   printf("Saldo atual: R$%.2lf\n\n", v[i].saldo + v[i].cheque); 
               }
            }
            else
               printf("Senha invalida.\n");
        return;
        }
        else
        {
           if (strcmp(v[i].agencia, pesquisa_agencia) != 0)
               printf("\nAgencia não encontrada.\n\n");
           if (strcmp(v[i].conta, pesquisa_conta) != 0)
               printf("\nConta não encontrada.\n\n");
        }
   }
      
}

void saldo_medio(struct conta v[], int *pn)
{
   double media1;
   double media2;   
   double soma1 = 0.0;
   double soma2 = 0.0;   
   int i;
      
   for (i = 0; i < *pn; i++)
   {
       soma1 += v[i].saldo;
       soma2 += (v[i].saldo + v[i].cheque);    
   }
   media1 = soma1 / *pn;
   media2 = soma2 / *pn;
   
   printf("A media dos saldos de todas as contas equivale a: R$%.2lf\n", media1);
   printf("A media dos saldos (contadando os valores dos cheques especiais) vale: R$%.2lf\n\n", media2);
   
   return;      
}

void ler_arquivo(struct conta v[], int *pn)
{
   printf("\nLeitura de arquivo do Caixa Automático\n");
   char nome_arquivo[TAM_MAX_NOME];
   printf("Nome do arquivo: ");
   fgetline(stdin, nome_arquivo, TAM_MAX_NOME);
   FILE *f = fopen(nome_arquivo, "r");
   if (f == NULL)
      printf("O arquivo não foi encontrado.\n");
   else
   {
      *pn = 0;
      while (! feof(f))
      {
         fgetline(f, v[*pn].nome, TAM_MAX_NOME);
         fgetline(f, v[*pn].agencia, TAM_MAX_AGENCIA);
         fgetline(f, v[*pn].conta, TAM_MAX_CONTA);
         fscanf(f, "%lf", &(v[*pn].saldo));
         fscanf(f, "%d", &(v[*pn].senha));
         fscanf(f, "%lf", &(v[*pn].cheque));
         if (v[*pn].nome[0] != '' || strlen(v[*pn].agencia) > 0 || v[*pn].conta[0] != '')
            (*pn)++;
      }
      fclose(f);   
   }
   printf("Numeros de clientes = %d\n", *pn);
   printf("Por razões de éticas o saldo da conta não são divulgaos.\n\n");
}

void gravar_arquivo(struct conta v[], int n)
{
   printf("\nGravação dos dados do Caixa eletrônico\n");
   char nome_arquivo[TAM_MAX_NOME];
   printf("Nome do arquivo: ");
   fgetline(stdin, nome_arquivo, TAM_MAX_NOME);
   FILE *f = fopen(nome_arquivo, "w");
   if (f == NULL)
      printf("Não foi possivel salvar o arquivo.\n");
   else
   {
      int i;
      for (i = 0; i < n; i++)
      {
         fprintf(f, "%s\n", v[i].nome);
         fprintf(f, "%s\n", v[i].agencia);
         fprintf(f, "%s\n", v[i].conta);
         fprintf(f, "%lf\n", v[i].cheque);
         fprintf(f, "%d\n", v[i].senha);
         fprintf(f, "%lf\n", v[i].saldo);
      }
      fclose(f);
   }
   printf("\n");
}

int main(void)
{
   struct conta dados[TAM_MAX_CLIENTES];
   int n = 0;
   int opcao;

   do
   {
      printf("============================================\n");
      printf("===============Banco do Povão===============\n");
      printf("============================================\n\n");
      printf("==========Escolha a opção desejada==========\n");
      printf("1. Abrir uma nova conta\n");
      printf("2. Consultar o saldo de uma conta\n");
      printf("3. Fazer um saque\n");
      printf("4. Fazer um depósito\n");
      printf("5. Calcular o saldo médio de todas as contas\n");
      printf("6. Calcular o valor total em deposito em uma agência\n");
      printf("7. Ler dados de arquivo\n");
      printf("8. Gravar dados em arquivo\n");
      printf("9. Terminar\n");
      printf("\n");

      do
      {
         printf("Escolha uma opção: ");
         scanf("%d", &opcao);
         if (opcao < 1 || opcao > 9)
            printf("Opção Inválida.\n");
      }
      while (opcao < 1 || opcao > 9);
      getchar();

      switch (opcao)
      {
      case 1:
         abrir_conta(dados, &n);
         break;
      case 2:
         consultar(dados, n);
         break;
      case 3:
         saque(dados, &n);
         break;
      case 4: 
         deposito(dados, &n);
         break;
      case 5:
         saldo_medio(dados, &n);
         break;
      case 6:
         printf("Opção em construção");
      case 7:
         ler_arquivo(dados, &n);
         break;
      case 8:
         gravar_arquivo(dados, n);
         break;
      case 9:
           break;
      }
      if (opcao == 9)
         printf("\nCaixa automático encerrado.\n");
   }
   while (opcao != 9);
   
   getchar();
   return 0;
}

Editado por RenanPoswar
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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...