Skip to content

Instantly share code, notes, and snippets.

@waltton
Last active November 6, 2015 00:41
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 waltton/82c2a61cfacf105eccda to your computer and use it in GitHub Desktop.
Save waltton/82c2a61cfacf105eccda to your computer and use it in GitHub Desktop.
/*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