Last active
November 6, 2015 00:41
-
-
Save waltton/82c2a61cfacf105eccda to your computer and use it in GitHub Desktop.
This file contains hidden or 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
/*PUC-Minas | |
Programação de Computadores II - teoria | |
Tipo abstrato de dados - pilha | |
Objetivo: Escrever um programa C, estruturado com funções que apresente o menu abaixo e opere | |
com o TAD lista encadeada com ponteiros para processar os dados de produto (código – | |
inteiro, descrição - 40 caracteres). Cada opção do menu pode ser exercitada diversas vezes | |
até que ocorra a opção sair. Os itens do menu são: | |
1. Inserir produto na lista por ordem de chegada não permitindo códigos repetidos | |
2. Mostrar os produtos presentes na lista | |
3. Excluir um produto da lista com a filosofia PEPS (primeiro que entra primeiro que sai). | |
4. Pesquisar se um código informado pelo usuário existe na lista mostrando seus | |
dados e posição na lista ou informando que não está presente | |
5. Sair | |
Alunos: | |
535965 - Camila Rezende Lopes | |
524774 - Matheus Perdigao Campos | |
535966 - Rúbia Evelyn | |
535961 - Vinícius Batista Gonçalves Coelho | |
524790 - Vitor Alexandre Diniz Souza | |
524759 - Waltton Santana de Carvalho Morais | |
*/ | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <ctype.h> | |
//definicao da estrutura do produto | |
struct Produto { | |
int codigo; | |
char descricao[40]; | |
struct Produto *prox; | |
}; | |
struct { | |
struct Produto *Primeiro; | |
struct Produto *Ultimo; | |
} Lista; | |
//opções do menu | |
void finalizaPrograma(); | |
int inserirProduto(); | |
void excluir(); | |
void exibeProdutos(); | |
void buscaProduto(); | |
//manipulação da lista | |
void iniciaLista(); | |
int codigoNaLista(int codigo); | |
int incluir(int codigo, char descricao[30]); | |
//funções diversas | |
void aguardarTecla(); | |
int menu(); | |
int main() { | |
int finalizado = 0; | |
iniciaLista(); | |
while (! finalizado) { | |
switch (menu()) { | |
case 1://Inserir produto | |
if (!inserirProduto()) | |
finalizado = 1; | |
break; | |
case 2://exibe lista de produtos | |
exibeProdutos(); | |
break; | |
case 3://exclui produto da lista | |
excluir(); | |
break; | |
case 4://busca produto | |
buscaProduto(); | |
break; | |
case 5://Sair | |
finalizado = 1; | |
finalizaPrograma(); | |
break; | |
} | |
} | |
return 0; | |
} | |
void iniciaLista() { | |
Lista.Primeiro = NULL; | |
Lista.Ultimo = NULL; | |
} | |
int menu() { | |
system("cls"); | |
printf("Menu\n"); | |
printf(" 1. Inserir produto\n"); | |
printf(" 2. Listar produtos\n"); | |
printf(" 3. Excluir um produto da lista\n"); | |
printf(" 4. Pesquisar produto por codigo\n"); | |
printf(" 5. Sair\n"); | |
char opcao = getche(); | |
fflush(stdin); | |
while ((opcao < '1') || (opcao > '5')) { | |
printf("\nOpcao invalida, favor informar novamente a opcao desejada.\n"); | |
opcao = getche(); | |
fflush(stdin); | |
} | |
system("CLS"); | |
return opcao - '0'; | |
} | |
void finalizaPrograma() { | |
printf("O programa foi encerrado.\nPressione qualquer tecla para sair."); | |
getche(); | |
} | |
int inserirProduto() { | |
int codigo; | |
char descricao[30]; | |
while(1){ | |
printf("\nInforme o codigo do produto: "); | |
scanf("%d", &codigo); | |
fflush(stdin); | |
if(!codigoNaLista(codigo)) | |
break; | |
printf("\nJa existe um produto com o codigo informado."); | |
} | |
printf("Informe a descricao do produto: "); | |
scanf("%[^\n]s", descricao); | |
fflush(stdin); | |
if (!incluir(codigo, descricao)) { | |
return 0; | |
} | |
aguardarTecla(); | |
return 1; | |
} | |
int incluir(int codigo, char descricao[30]) { | |
struct Produto *novo = malloc(sizeof(struct Produto)); | |
if(novo == NULL) { | |
printf("Nao foi possivel alocar memoria para o novo produto.\n"); | |
return 0; | |
} | |
novo->codigo = codigo; | |
strcpy(novo->descricao, descricao); | |
if(Lista.Ultimo != NULL) | |
Lista.Ultimo->prox = novo; | |
else | |
Lista.Primeiro = novo; | |
novo->prox = NULL; | |
Lista.Ultimo = novo; | |
return 1; | |
} | |
void aguardarTecla() { | |
printf("\n\nPressione qual que tecla para continuar..."); | |
getche(); | |
fflush(stdin); | |
} | |
void exibeProdutos() { | |
struct Produto *aux = Lista.Primeiro; | |
printf("Lista de produtos\n\n"); | |
while(aux != NULL) { | |
printf(" Codigo: %d\n", aux->codigo); | |
printf(" Descricao: %s\n\n", aux->descricao); | |
aux = aux->prox; | |
} | |
aguardarTecla(); | |
} | |
void excluir() { | |
struct Produto *aux; | |
if(Lista.Primeiro == NULL) { | |
printf("A lista esta vazia."); | |
} else { | |
printf("O produto descrito abaixo sera excluido.\n"); | |
printf(" Codigo: %d\n", Lista.Primeiro->codigo); | |
printf(" Descricao: %s\n\n", Lista.Primeiro->descricao); | |
printf("Deseja continuar? [S|N] "); | |
if (toupper(getchar()) == 'S') { | |
if(Lista.Primeiro == Lista.Ultimo) | |
Lista.Ultimo = NULL; | |
aux = Lista.Primeiro->prox; | |
free(Lista.Primeiro); | |
Lista.Primeiro = aux; | |
printf("\nO produto foi excluido da lista.\n"); | |
} else { | |
printf("\nO produto nao sera excluido da lista.\n"); | |
} | |
fflush(stdin); | |
} | |
aguardarTecla(); | |
} | |
void buscaProduto(){ | |
struct Produto *aux = Lista.Primeiro; | |
int codigo; | |
printf("Favor informar o codigo do produto: "); | |
scanf("%d", &codigo); | |
fflush(stdin); | |
while(aux != NULL){ | |
if(aux->codigo == codigo){ | |
printf("\nO produto foi encontrado\n"); | |
printf(" Codigo: %d\n", aux->codigo); | |
printf(" Descricao: %s\n\n", aux->descricao); | |
aguardarTecla(); | |
return; | |
} | |
aux = aux->prox; | |
} | |
printf("\nO produto de codigo %d nao foi encontrado.", codigo); | |
aguardarTecla(); | |
} | |
int codigoNaLista(int codigo){ | |
struct Produto *aux = Lista.Primeiro; | |
while(aux != NULL) { | |
if (aux->codigo == codigo) | |
return 1; | |
aux = aux->prox; | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment