Created
February 12, 2011 20:16
-
-
Save andersonfraga/824075 to your computer and use it in GitHub Desktop.
2º Trabalho de Algoritmos... Remotos 2008
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <ctype.h> | |
#include <conio.h> | |
#include <io.h> | |
#include <string.h> | |
struct cliente { | |
int identidade; | |
char nome[50]; | |
float valor; | |
}; | |
int on_file = 0; | |
void menu(void); | |
void inserir(FILE *arq); | |
void consultar(FILE *arq); | |
void alterar(FILE *arq); | |
void excluir(FILE *arq); | |
void listagem(FILE *arq); | |
int busca (FILE *arq); | |
float total_financiado(FILE *arq); | |
FILE *criar_arq(void); | |
main() { | |
FILE *arq; | |
struct cliente cons; | |
int op = 255; | |
for( ;op != 48; ) { | |
system("cls"); | |
menu(); | |
op = getch(); | |
//printf("valor: %d\n", op); | |
if( (on_file == 0 || arq == NULL) && op != 48 ) { | |
arq = criar_arq(); | |
} | |
switch(op) { | |
case 49: inserir(arq); break; | |
case 50: consultar(arq); break; | |
case 51: alterar(arq); break; | |
case 52: excluir(arq); break; | |
case 53: listagem(arq); break; | |
case 54: printf("O total financiado pela loja é de R$ %5.2f\n", total_financiado(arq)); break; | |
case 48: | |
fclose(arq); | |
exit(0); | |
break; | |
default: | |
break; | |
} | |
//fclose(arq); | |
getch(); | |
} | |
} | |
void menu(void) { | |
puts("Trabalho de Programacao Estruturada"); | |
printf("\nAlunos: Anderson Fraga, Thiago Garcia\nMatricula: 55831, 55838\n\n"); | |
puts("1 - Inserir cadastro"); | |
puts("2 - Consultar cadastro"); | |
puts("3 - Alterar registro"); | |
puts("4 - Excluir cadastro de cliente"); | |
puts("5 - Listar dados"); | |
puts("6 - Listar total financiado"); | |
puts("0 - Encerrar"); | |
} | |
void inserir(FILE *arq) { | |
struct cliente cad; | |
puts("Digite o numero de identidade do cliente"); | |
scanf(" %d", &cad.identidade); | |
puts("Nome do cliente:"); | |
scanf(" %s", &cad.nome); | |
puts("Valor do financiamento:"); | |
scanf(" %f", &cad.valor); | |
if( fseek(arq, sizeof(struct cliente), SEEK_END) == 0 ) { | |
if( fwrite(&cad, sizeof(struct cliente), 1, arq) == 1 ) { | |
printf("\nDados de %s inseridos com sucesso\n", cad.nome); | |
} | |
else { | |
puts("Falha ao gravar no arquivo"); | |
} | |
} | |
else { | |
puts("Falha ao abrir o arquivo"); | |
} | |
} | |
void consultar(FILE *arq) { | |
int act = 0, ok = 0; | |
struct cliente cad; | |
int termo_f; | |
if( on_file == 0 || arq == NULL ) { | |
puts("Não é possível fazer consulta aos dados pois o arquivo não foi aberto ou criado"); | |
} | |
else { | |
puts("Digite a identidade a ser buscada:"); | |
scanf(" %d", &termo_f); | |
//printf(" %d . %f . %s . %5.2f\n", act, termo_f, termo_c, termo_f); | |
rewind(arq); | |
if( fread(&cad, sizeof(cad), 1, arq) != 1 ) { | |
puts("Erro ao ler o arquivo"); | |
} | |
else { | |
rewind(arq); | |
while( !feof(arq) && ok < 1 ) { | |
fread(&cad, sizeof(struct cliente), 1, arq); | |
if( cad.identidade == termo_f ) { | |
if( ok == 0 ) { | |
printf("Buscando cliente com identidade %d:\n", termo_f); | |
} | |
printf("Cliente '%s' com valor financiado de %5.2f\n", cad.nome, cad.valor); | |
ok++; | |
} | |
} | |
if( ok == 0 ) | |
puts("Termo não encontrado"); | |
} | |
} | |
} | |
void alterar(FILE *arq) { | |
struct cliente cad; | |
int id = 0, ok = 0, val = 0, count = 0; | |
char n_c[50]; | |
float v_c; | |
if( on_file == 0 || arq == NULL ) { | |
puts("Não é possível fazer consulta aos dados pois o arquivo não foi aberto ou criado"); | |
} | |
else { | |
puts("Digite a identidade do cliente que você deseja alterar:"); | |
scanf(" %d", &id); | |
rewind(arq); | |
if( fread(&cad, sizeof(cad), 1, arq) != 1 ) { | |
puts("Erro ao ler o arquivo"); | |
} | |
else { | |
rewind(arq); | |
while( !feof(arq) && ok == 0 ) { | |
if( fread(&cad, sizeof(struct cliente), 1, arq) != sizeof(struct cliente) ) { | |
if( cad.identidade == id ) { | |
printf("Dados atuais do cliente #%d\n", id); | |
printf("Nome: %s\nValor do Financiamento: %5.2f\n", cad.nome, cad.valor); | |
puts("Tem certeza que deseja alterar os dados desse cliente? S ou N"); | |
val = getch(); | |
if(val == 83 || val == 115) { | |
puts("Digite o nome do cliente:"); | |
scanf(" %s", &cad.nome); | |
puts("Digite o valor do financiamento:"); | |
scanf(" %f", &cad.valor); | |
if( fseek(arq, sizeof(struct cliente) * count, SEEK_SET) == 0 ) { | |
if( fwrite(&cad, sizeof(struct cliente), 1, arq) == 1 ) { | |
puts("Registro atualizado com sucesso"); | |
ok++; | |
} | |
else | |
puts("Falha ao atualizar registro"); | |
} | |
else | |
puts("Falha ao abrir o arquivo para atualizar registro"); | |
ok++; | |
} | |
} | |
count++; | |
} | |
} | |
} | |
} | |
} | |
void excluir(FILE *arq) { | |
struct cliente cons; | |
int id = 0, achou = 0; | |
char anul = ' '; | |
puts("Digite a identidade do cliente que você deseja deletar:"); | |
scanf(" %d", &id); | |
rewind(arq); | |
if( fread(&cons, sizeof(cons), 1, arq) != 1 ) | |
puts("Nao foi possivel fazer a consulta devido a um erro na leitura do arquivo"); | |
else { | |
rewind(arq); | |
while( !feof(arq) && achou < 1) { | |
if( fread(&cons, sizeof(struct cliente), 1, arq) != sizeof(struct cliente) ) { | |
if(cons.identidade == id) { | |
if( fseek(arq, sizeof(struct cliente), SEEK_SET) == 0 ) { | |
if( fwrite(&anul, sizeof(struct cliente), 1, arq) == 1 ) { | |
puts("Cliente deletado com sucesso"); | |
} | |
else puts("Erro ao gravar no arquivo"); | |
} | |
else puts("Erro ao acessar o arquivo"); | |
achou++; | |
} | |
} | |
} | |
if( achou == 0 ) | |
printf("O cliente #%d nao existe!\n\n", id); | |
} | |
getch(); | |
} | |
void listagem(FILE *arq) { | |
struct cliente cad; | |
if( on_file == 0 || arq == NULL ) { | |
puts("Não é possível fazer consulta aos dados pois o arquivo não foi aberto ou criado"); | |
} | |
else { | |
rewind(arq); | |
if( fread(&cad, sizeof(cad), 1, arq) != 1 ) { | |
puts("Erro ao ler o arquivo"); | |
} | |
else { | |
rewind(arq); | |
puts("Relação de clientes cadastrados:"); | |
puts("Identidade | Nome | Valor financiado"); | |
while( !feof(arq) && fread(&cad, 1, sizeof(struct cliente), arq) > 1 ) { | |
if( strlen(cad.nome) > 1 ) | |
printf("%d %s %5.2f\n", cad.identidade, cad.nome, cad.valor); | |
} | |
} | |
} | |
} | |
float total_financiado(FILE *arq) { | |
struct cliente cad; | |
float res = 0; | |
if( on_file == 0 || arq == NULL ) { | |
puts("Não é possível fazer consulta aos dados pois o arquivo não foi aberto ou criado"); | |
} | |
else { | |
rewind(arq); | |
if( fread(&cad, sizeof(cad), 1, arq) != 1 ) { | |
puts("Erro ao ler o arquivo"); | |
} | |
else { | |
rewind(arq); | |
while( !feof(arq) && fread(&cad, 1, sizeof(struct cliente), arq) == sizeof(struct cliente) ) { | |
if( strlen(cad.nome) > 1 ) | |
res += cad.valor; | |
} | |
} | |
return res; | |
} | |
} | |
FILE *criar_arq(void) { | |
char nomearq[50]; | |
FILE *arquivo; | |
if( on_file == 0 ) { | |
while( strlen(nomearq) < 3 ) { | |
puts("Digite o nome do arquivo que você deseja criar:"); | |
puts("Exemplo: ./cadastro.txt"); | |
scanf(" %s", &nomearq); | |
} | |
if( ( arquivo = fopen(nomearq, "rb+") ) == NULL ) { | |
if( ( arquivo = fopen(nomearq, "wb+") ) == NULL ) { | |
printf("Não foi possÃvel criar o arquivo %s. Por favor, tente novamente\n", nomearq); | |
return NULL; | |
} | |
} | |
on_file = 1; | |
return arquivo; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment