Skip to content

Instantly share code, notes, and snippets.

@marcelotk15
Last active July 11, 2018 02:46
Show Gist options
  • Save marcelotk15/0ab68b3ed75c37808615c617d32c4cf2 to your computer and use it in GitHub Desktop.
Save marcelotk15/0ab68b3ed75c37808615c617d32c4cf2 to your computer and use it in GitHub Desktop.
Trabalho Final LP 2 - UFRRJ
#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