Skip to content

Instantly share code, notes, and snippets.

@andersonfraga
Created February 12, 2011 20:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andersonfraga/824075 to your computer and use it in GitHub Desktop.
Save andersonfraga/824075 to your computer and use it in GitHub Desktop.
2º Trabalho de Algoritmos... Remotos 2008
#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