RenanPoswar Postado Dezembro 3, 2008 Denunciar Share Postado Dezembro 3, 2008 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 terminare 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ívelDuas 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 3, 2008 Denunciar Share Postado Dezembro 3, 2008 Saber manipular arquivos (de preferência no modo binário) é essencial num programa assim.Crie um estruutra que represente as contas. Aí você salva a estrutura diretamente no arquivo:fwrite(estrutura, sizeof(nome_da_esrtutura), 1, fp); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RenanPoswar Postado Dezembro 3, 2008 Autor Denunciar Share Postado Dezembro 3, 2008 Não to tendo ideias com o algoritmo.. me ajudem por favor Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Dezembro 3, 2008 Denunciar Share Postado Dezembro 3, 2008 Comece a implementar, que as odéias vão surgindo.Pense na estrutura de dados e jáça o menu. Com isso pronto muita coisa ficará mais clara para você Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 == Douplus == Postado Dezembro 3, 2008 Denunciar Share Postado Dezembro 3, 2008 (editado) 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 Dezembro 4, 2008 por == Douplus == Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RenanPoswar Postado Dezembro 4, 2008 Autor Denunciar Share Postado Dezembro 4, 2008 (editado) 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 Dezembro 4, 2008 por RenanPoswar Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 == Douplus == Postado Dezembro 4, 2008 Denunciar Share Postado Dezembro 4, 2008 (editado) 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 Dezembro 4, 2008 por == Douplus == Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 == Douplus == Postado Dezembro 4, 2008 Denunciar Share Postado Dezembro 4, 2008 (editado) 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 Dezembro 4, 2008 por == Douplus == Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RenanPoswar Postado Dezembro 4, 2008 Autor Denunciar Share Postado Dezembro 4, 2008 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 == Douplus == Postado Dezembro 4, 2008 Denunciar Share Postado Dezembro 4, 2008 (editado) Tenta assim:fscanf(f, "%lf", &(v[*pn].saldo));[EDITADO] A propósito, um site excelente de referência da biblioteca padrão do C / C++ é www.cppreference.com Editado Dezembro 4, 2008 por == Douplus == Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RenanPoswar Postado Dezembro 4, 2008 Autor Denunciar Share Postado Dezembro 4, 2008 (editado) valeu..deu certo Editado Dezembro 4, 2008 por RenanPoswar Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 == Douplus == Postado Dezembro 4, 2008 Denunciar Share Postado Dezembro 4, 2008 (editado) 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 Dezembro 4, 2008 por == Douplus == Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RenanPoswar Postado Dezembro 4, 2008 Autor Denunciar Share Postado Dezembro 4, 2008 (editado) 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 Dezembro 4, 2008 por RenanPoswar Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 == Douplus == Postado Dezembro 4, 2008 Denunciar Share Postado Dezembro 4, 2008 Eu consideraria cada arquivo como uma agência distinta, o que faz sentido. Desse modo é mais simples evitar repetições. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RenanPoswar Postado Dezembro 5, 2008 Autor Denunciar Share Postado Dezembro 5, 2008 não entendi...como faço isso? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 == Douplus == Postado Dezembro 5, 2008 Denunciar Share Postado Dezembro 5, 2008 Não precisa modificar o programa, ele está bom. O que estou falando é de considerar como uma agência cada arquivo de contas que pode ser carregado pelo programa. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
RenanPoswar
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
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.