Last active
July 11, 2018 02:46
-
-
Save marcelotk15/0ab68b3ed75c37808615c617d32c4cf2 to your computer and use it in GitHub Desktop.
Trabalho Final LP 2 - UFRRJ
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 <stdlib.h> | |
#include <stdio.h> | |
#include <string.h> | |
#include <time.h> | |
struct Pedido { | |
char nome[60]; | |
char item[60]; | |
float preco; | |
char numero[18]; | |
char status; | |
}pedido; | |
/* variaves globais */ | |
FILE *file; | |
/* declaracao de funçoes */ | |
void abrir(char tipo[3]); | |
char * numeroPedido(void); | |
void incluir(void); | |
void buscar(void); | |
void alterar(void); | |
void excluir(void); | |
void listar(void); | |
void pedidoCaroBarato(void); | |
int main (void) { | |
char op; | |
do{ | |
do{ | |
system("cls"); | |
printf("\n\n\n"); | |
printf("\t========================================================\n"); | |
printf("\t# #\n"); | |
printf("\t# TRABALHO FINAL - LP II - UFRRJ #\n"); | |
printf("\t# #\n"); | |
printf("\t# ALUNO: MARCELO AUGUSTO SANTOS DE OLIVEIRA #\n"); | |
printf("\t# #\n"); | |
printf("\t# PROFESSORA: ADRIELE CELINA SILVA DE MEDEIROS RIBEIRO #\n"); | |
printf("\t# #\n"); | |
printf("\t# PROGRAMA DE PEDIDOS DE RESTAURANTE #\n"); | |
printf("\t# #\n"); | |
printf("\t========================================================\n\n"); | |
printf("\n Digite uma das opcoes\n\n"); | |
printf("\n 1 - Incluir pedido"); | |
printf("\n 2 - Buscar pedido"); | |
printf("\n 3 - Alterar pedido"); | |
printf("\n 4 - Excluir pedido"); | |
printf("\n 5 - Listar pedidos"); | |
printf("\n 6 - Pedido mais caro e mais barato"); | |
printf("\n 0 - Sair"); | |
printf("\n\n\n Opcao:"); | |
op = getchar(); | |
} while(!strchr("1234560", op)); | |
switch(op){ | |
case '1' : | |
incluir(); | |
break; | |
case '2' : | |
buscar(); | |
break; | |
case '3' : | |
alterar(); | |
break; | |
case '4' : | |
excluir(); | |
break; | |
case '5' : | |
listar(); | |
break; | |
case '6' : | |
pedidoCaroBarato(); | |
break; | |
case '0' : | |
exit(0); | |
} | |
} while(1); | |
} | |
void abrir(char tipo[3]) { | |
if((file = fopen("data/pedidos.txt", tipo)) == NULL){ | |
printf("\n O arquivo nao pode ser aberto!!\n"); | |
getch(); | |
exit(1); | |
} | |
} | |
char * numeroPedido(void){ | |
time_t t = time(NULL); | |
struct tm tm = *localtime(&t); | |
char *numero = (char *) malloc(sizeof(char) * 18); | |
snprintf(numero, sizeof(char) * 18, "%d%d%d0000%d%d%d", tm.tm_mday, tm.tm_mon + 1, tm.tm_year + 1900, tm.tm_hour, tm.tm_min,tm.tm_sec); | |
return numero; | |
} | |
int busca(void){ | |
int achou = -1, posicao = 0; | |
char numeroPedido[18]; | |
abrir("rb"); | |
printf("\nDigite o numero do pedido: "); | |
scanf("%s", numeroPedido); | |
rewind(file); | |
while((!feof(file)) && (achou == -1)) { | |
fread(&pedido, sizeof(struct Pedido), 1, file); | |
if (!feof(file)) { | |
if (strcmp(numeroPedido, pedido.numero) == 0) { | |
if (pedido.status == '0') { | |
posicao=-2; | |
} | |
achou = 1; | |
} else { | |
posicao++; | |
} | |
} else { | |
posicao = -1; | |
} | |
} | |
if (achou == -1) { | |
posicao = -1; | |
} | |
fclose(file); | |
return posicao; | |
} | |
void incluir(void){ | |
abrir("ab+"); | |
fseek(file, 0L, SEEK_END); | |
do{ | |
system("cls"); | |
printf("\n Digite o nome do cliente ou <FIM> para sair:\n\n"); | |
scanf("%s", pedido.nome); | |
if ((strcmp(strupr(pedido.nome), "FIM")!=0)){ | |
printf("\n Item do pedido:"); | |
scanf("%s", pedido.item); | |
printf("\n Preco do pedido:"); | |
scanf("%f", &pedido.preco); | |
strncpy(pedido.numero, numeroPedido(), 18); | |
pedido.status = '1'; | |
if(fwrite(&pedido, sizeof(struct Pedido), 1, file) != 1) { | |
printf("\n Erro de gavacao!!"); | |
getch(); | |
} else { | |
printf("\n Gravacao feita com sucesso...\n\n"); | |
} | |
} | |
}while((strcmp(strupr(pedido.nome), "FIM")!=0)); | |
fclose(file); | |
} | |
void buscar(void) { | |
int pos; | |
pos = busca(); | |
if(pos == -1) { | |
printf("\nPedido nao encontrado no sistema..."); | |
getch(); | |
} else { | |
if(pos==-2) { | |
printf("\nPedido excluido do sistema"); | |
getch(); | |
} else { | |
abrir("rb+"); | |
fseek(file, pos*sizeof(struct Pedido), SEEK_SET); | |
fread(&pedido, sizeof(struct Pedido), 1, file); | |
printf("\nNome do cliente: %s", pedido.nome); | |
printf("\nItem pedido: %s", pedido.item); | |
printf("\nPreco do pedido: %f", pedido.preco); | |
getch(); | |
} | |
} | |
fclose(file); | |
} | |
void alterar(void) { | |
int pos; | |
pos = busca(); | |
if (pos==-1) { | |
printf("\nPedido nao encontrado no sistema..."); | |
getch(); | |
} else if(pos == -2) { | |
printf("\nPedido excluido do sistema"); | |
getch(); | |
} else { | |
abrir("rb+"); | |
fseek(file, pos*sizeof(struct Pedido), SEEK_CUR); | |
fread(&pedido, sizeof(struct Pedido), 1, file); | |
printf("\nAlterar pedido: #%s", pedido.numero); | |
printf("\nNome do cliente: %s", pedido.nome); | |
printf("\n Item do pedido:"); | |
scanf("%s", pedido.item); | |
printf("\n Preco do pedido:"); | |
scanf("%f", &pedido.preco); | |
fseek(file, pos*sizeof(struct Pedido),SEEK_SET); | |
if(fwrite(&pedido, sizeof(struct Pedido), 1, file) != 1) { | |
printf("\nErro na gravacao..."); | |
getch(); | |
} else { | |
printf("\nPedido atualizado!"); | |
getch(); | |
} | |
} | |
fclose(file); | |
} | |
void excluir(void) { | |
int pos; | |
pos = busca(); | |
if(pos == -1) { | |
printf("\nPedido nao encontrado no sistema..."); | |
getch(); | |
} else { | |
if(pos==-2) { | |
printf("\nPedido excluido do sistema"); | |
getch(); | |
} else { | |
abrir("rb+"); | |
fseek(file, pos*sizeof(struct Pedido), SEEK_SET); | |
fread(&pedido, sizeof(struct Pedido), 1, file); | |
printf("\nNome do cliente: %s", pedido.nome); | |
printf("\nItem pedido: %s", pedido.item); | |
printf("\nPreco do pedido: %f", pedido.preco); | |
printf("\nDigite qualquer tecla para excluir o pedido --> %s", pedido.numero, (pos+1)); | |
pedido.status = '0'; | |
getch(); | |
fseek(file, pos*sizeof(struct Pedido), SEEK_SET); | |
if(fwrite(&pedido, sizeof(struct Pedido), 1, file) != 1) { | |
printf("\nErro na gravacao..."); | |
getch(); | |
} else { | |
printf("\nExclusao feita com sucesso!"); | |
getch(); | |
} | |
} | |
} | |
fclose(file); | |
} | |
void listar(void) { | |
int cont = 0; | |
abrir("rb"); | |
fseek(file, 0L, SEEK_SET); | |
fread(&pedido, sizeof(struct Pedido),1, file); | |
do { | |
if (pedido.status = '1') { | |
printf("\nNome do cliente: %s", pedido.nome); | |
printf("\nItem do pedido: %s", pedido.item); | |
printf("\nPreco: %f", pedido.preco); | |
printf("\nNumero do pedido: %s\n\n", pedido.numero); | |
cont++; | |
} | |
fread(&pedido, sizeof(struct Pedido),1, file); | |
} while(!feof(file)); | |
printf("\n\n#Numero de Pedidos: %d\n", cont); | |
getch(); | |
} | |
void pedidoCaroBarato(void) { | |
int posicao = 0; | |
struct Pedido pedidoCaro, pedidoBarato; | |
abrir("rb"); | |
rewind(file); | |
while(!feof(file)) { | |
fread(&pedido, sizeof(struct Pedido), 1, file); | |
if (pedido.status = "1") { | |
if (posicao == 0) { | |
pedidoBarato = pedido; | |
pedidoCaro = pedido; | |
} else { | |
if (pedido.preco > pedidoCaro.preco) { | |
pedidoCaro = pedido; | |
} | |
if (pedido.preco < pedidoBarato.preco) { | |
pedidoBarato = pedido; | |
} | |
} | |
} | |
posicao++; | |
} | |
fclose(file); | |
printf("\nPedido mais caro..."); | |
printf("\nNome do cliente: %s", pedidoCaro.nome); | |
printf("\nItem do pedido: %s", pedidoCaro.item); | |
printf("\nPreco: %f", pedidoCaro.preco); | |
printf("\nNumero do pedido: %s\n\n", pedidoCaro.numero); | |
printf("\n\nPedido mais barato..."); | |
printf("\nNome do cliente: %s", pedidoBarato.nome); | |
printf("\nItem do pedido: %s", pedidoBarato.item); | |
printf("\nPreco: %f", pedidoBarato.preco); | |
printf("\nNumero do pedido: %s\n\n", pedidoBarato.numero); | |
getch(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment