Equipe1-2015-1

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Integrantes

MARIA FERNANDA SILVA TUTUI

RICARDO AMORIM

VITOR MANOEL DA SILVEIRA

Descrição da atividade principal

Implemente um programa em linguagem C que faça o controle de estoque simplificado de produtos de uma papelaria. O programa deverá ter necessariamente um menu onde se poderá fazer a escolha pelas opções disponíveis em loop contínuo, mas com opção de saída. Deverá ler de um arquivo de dados informações sobre os produtos (já cadastrados), poderá acrescentar novos produtos, eliminar produtos, e buscar um produto específico pelo código. Deverá ainda ter as opções de ordenar e imprimir a lista na tela de todos os produtos. Também deverá gravar as alterações no mesmo arquivo de dados lido. Pra terminar, contar com uma opção de estatística dizendo qual a quantidade de produtos, o maior, menor e valor médio dos produtos.

Descrição da atividade específica

Fazer uso
  1. Comando swith
  2. Lista encadeada
  3. Ponteiros
  4. Alocação Dinâmica de Memória
  5. Funções para tratamento de arquivo


Exemplo da estrutura (encadeada)
struct TProduto{
  int codigo;
  char descricao[40];
  float preco;
  int qtdade;
  struct TProduto *prox;
};
Exemplo de arquivo (produtos.dat)
cat produtos.dat
1011 CANETA 1.50 100
1002 LAPIS 2.30 200
1050 BORRACHA 1.85 150
1015 PAPEL 8.78 50

Atividades

Distribuição

Desenvolvimento

Na função main foram inicializaram duas variáveis, "opcao" e "aux";

A variável "opcao" faz uso do comando switch para escolher a opção desejada do menu. A variável "aux" é utilizada da mesma forma que a "opcao" porém, dentro do sub menu da opção 3 do menu.


A função "ler_arquivo" é inicializada que é a base para a lista;


O menu é plotado mostrando as opções numéricas e suas funções correspondentes.

De acordo com o número digitado é chamada a função:

Número 1: função "novo_produto" que insere produtos na lista.

Número 2: função "retirar_produto" que retira produtos da lista.

Número 3: é plotado um sub menu onde aparecem as opções 1: listar produto, 2: buscar produto e 3: sair.

Para a opção 1 é chamada a função "listar estoque", para a 2 é chamada a função "buscar_produto" e a opção 3 sai do sub menu devido ao uso do "break".

Número 4: função "estatistica" onde são geradas as estatísticas dos produtos dentro da lista.

Número 5: sai do programa.

Conclusão

A confecção de um programa exige dos programadores paciência e esquematização do mesmo antes de pensar em programar. Todo trabalho possui fases; criação, desenvolvimento e implementações, e este em questão não foi exceção. O trabalho final desta matéria exigiu tempo e dedicação de todos os três alunos envolvidos e além de crescimento intelectual; quanto ao desenvolvimento de novas habilidades na hora de programar proporcionou também o aumento do contato em grupo, fortalecendo a integração entre os participantes ao compartilhar ideias e conhecimento.

Código fonte

<syntaxhighlight lang=c>

  1. include <stdio.h>
  2. include <stdlib.h>
  3. include <string.h>
  1. define FIM 6

typedef struct TProduto tipo_produto; FILE *arq;

struct TProduto{

 int codigo;
 char descricao[40];
 float preco;
 int qtdade;
 struct TProduto *prox;

} *lista;

void ler_arquivo() { int res; if ((arq=fopen("produtos.dat","r"))==NULL) { printf("Falha na abertura do arquivo.\n"); return; } while(1) {

   	tipo_produto *novo=malloc(sizeof(tipo_produto));

if((res=fscanf(arq,"%d %s %f %d", &novo->codigo, novo->descricao, &novo->preco, &novo->qtdade))==EOF) { break; } if(lista==NULL) { lista=novo; }else { novo->prox=lista->prox; lista->prox=novo; } } fclose(arq); }

void salvar_arquivo() { int aux; tipo_produto *p;

if ((arq=fopen("produtos.dat", "w")) == NULL) { printf("Falha na abertura do arquivo.\n"); return; } for (p=lista;p!=NULL;p=p->prox) { if((aux=fprintf(arq,"%d\t%s\t%.2f\t%0d\n",p->codigo,p->descricao,p->preco,p->qtdade))==EOF) { printf("Erro\n"); } } printf("\nArquivo atualizado\n"); fclose(arq); } void novo_produto() { system("clear"); tipo_produto *novo=malloc(sizeof(tipo_produto)); printf("\n---------------NOVO PRODUTO---------------\n");

  printf("Código: ");
  scanf("%d",&novo->codigo);
  printf("Descrição: ");
  scanf("%s",novo->descricao);
  printf("Preço R$: ");
  scanf("%f",&novo->preco);
  printf("Quantidade: ");
  scanf("%d",&novo->qtdade);
  
  if(lista==NULL){

lista=novo; }else{ novo->prox=lista->prox; lista->prox=novo; } }

int retirar_produto() { system("clear"); printf("\n---------------REMOVER PRODUTO---------------\n"); tipo_produto *pp,*pa; char descri[40],*pdescri; pdescri=&descri[40]; pa=lista; pp=lista->prox; printf("Descrição do produto:"); scanf("%s",pdescri);

while(pp!=NULL && strcmp(pp->descricao,pdescri)){ pa=pp; pp=pp->prox; } if(pp!=NULL){ pa->prox=pp->prox; free(pp); printf("\nProduto retirado!\n");

  } else {

printf("\nProduto não encontrado!\n");

   }
  return 0;

}

void listar_estoque() { tipo_produto *p; system("clear");

  printf("\n---------------LISTAR ESTOQUE---------------\n");	
  printf("\nCÓD-----PROD-----R$----QTD\n");

for (p=lista;p!=NULL;p=p->prox){

  	printf( "%d\t%s\t%.2f\t%d\n",p->codigo,p->descricao,p->preco,p->qtdade);

} }

int buscar_produto() { system("clear"); printf("\n---------------BUSCAR PRODUTO---------------\n"); char produto[40],*p_prod; p_prod=&produto[40];

  tipo_produto *p;
  p=lista;
  printf("Descrição do produto: ");
  scanf("%s",p_prod);

  while(p!=NULL && strcmp(p->descricao,p_prod)!=0){

p=p->prox;

  }
  if(p!=NULL){

printf("\n---------------------------------------------------------------------"); printf( "\n%d\t%s\t%.2f\t%d",p->codigo,p->descricao,p->preco,p->qtdade); printf("\n---------------------------------------------------------------------");

  } else {
  	printf("\n---------------------------------------------------------------------");

printf("\nProduto não encontrado!");

     printf("\n---------------------------------------------------------------------");
  }
  return 0;	

}

void estatistica() { system("clear"); int soma=0,i=0,cod_maior,qtd_maior,cod_menor,qtd_menor; float maior,menor,somatorio=0,media; char *descri_menor,*descri_maior; tipo_produto *p; p=lista; printf("\n---------------ESTATISTICA DOS PRODUTOS---------------\n"); maior=p->preco; menor=p->preco;

for(p = lista; p != NULL; p = p->prox) { soma+=p->qtdade; somatorio+=p->preco; i+= 1; if(maior<p->preco) { maior=p->preco; //cod_maior=p->codigo;

        descri_maior=p->descricao;
        //qtd_maior=p->qtdade;

} if(menor>p->preco) { menor=p->preco; //cod_menor=p->codigo; descri_menor=p->descricao; //qtd_menor=p->qtdade; } } media = somatorio/i; printf("\nMaior valor: %0.2f produto: %s",maior,descri_maior); printf("\nMenor valor: %0.2f produto: %s",menor,descri_menor); printf( "\nMedia de preço dos produtos: %0.2f", media); printf( "\nTotal de produtos: %d\n", soma); printf("\n-------------------------------------------------------------------------------\n"); }

/*void inserir_cabeca_lista() {

	tipo_produto *head=malloc(sizeof(tipo_produto));
	head->codigo=0000;
	strcpy(head->descricao,"PRODUTO");
	head->preco=00.00;
	head->qtdade=000;

lista=head; }*/


void main() { int opcao,aux;

lista=NULL; //inserir_cabeca_lista(); ler_arquivo();


 do {
 	 printf("\n---------------CONTROLE DE ESTOQUE---------------\n");
   printf("\n1-Inserir 2-Retirar 3-Listar 4-Estatistica 5-Sair\n");
   scanf("%d", &opcao);
   switch(opcao){
   case 1:	novo_produto();
   			break;
   			
   case 2:	retirar_produto();
   			break;
   			    			
   case 3: do{
   				system("clear");
   				printf("\n------------------LISTAR-------------------\n");
   				printf("\n1-Todo Estoque 2-Buscar produto 3-Voltar\n");
   				scanf("%d",&aux);
   				switch(aux){
   				case 1:  listar_estoque();
   							break;    							
   				case 2:  buscar_produto();
   							break;
   				default: break;
   				}	
   			}while(opcao!=3);
   			break;
   			
   case 4: estatistica();
   			break;
   			
   case 5: salvar_arquivo();
   			opcao++;
   			
           
   default:	printf("Opção invalida!!");
   				break;
   } 

}while(opcao!=FIM); printf("\nFim!!\n"); }