Equipe1-2015-1

De MediaWiki do Campus São José
Ir para: navegação, pesquisa

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

RICARDO AMORIM - Base da programação e depuração de código;

MARIA FERNANDA TUTUI - Testes, implementações do código e wiki;

VITOR MANOEL DA SILVEIRA - Testes, implementações do código e wiki;

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 no "main" ela é a base para a lista, de acordo com a função:

"if" abre o arquivo,

"while" aloca um espaço da memória para o ponteiro da lista,

"if", verifica se tem algo no arquivo e "else" se não, ela cria uma nova lista e salva as informações nela.


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.

Limpa a tela, aloca um espaço na memória, pede as informações sobre o produto a ser catalogado, se a lista estiver vazia ela recebe as informações do novo produto, se não ela cria uma nova lista e salva as informações nela.

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

Funcionando parcialmente.

-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".

"listar_estoque": Limpa a tela e "printa" as informações contidas na lista.

"buscar_produto": Limpa a tela, e busca pela descrição o produto desejado e mostra as demais informações dele.

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

Limpa a tela, mostra o produto mais caro, o mais barato, a média dos preços e o número total de produtos.

-Número 5: sai do programa.

Utilizando a função "salvar_arquivo" o programa é fechado salvando o arquivo se o mesmo não estiver vazio e o conteúdo do ponteiro "p", que é o ponteiro que aponta para a estrutura "tipo_produto" for o mesmo conteúdo da lista.

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.

Auto avaliação

RICARDO AMORIM - 10

MARIA FERNANDA TUTUI - 9

VITOR MANOEL DA SILVEIRA - 9

Avaliação (professor)

Caros alunos!

O trabalho de vocês está muito bom, atendeu basicamente a todos os requisitos, porém, faltou um cuidado maior com a wiki, o código fonte não está comentado, a apresentação das estatísticas estava com problemas, bem como não fazia a exclusão da cabeça da lista.

Por isso minha nota para a equipe toda é: 9.

Douglas A.

Codigo 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 inserir_cabeca_lista() {

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

novo->codigo=9999; strcpy(novo->descricao,"XXXXXXXXXXX"); novo->preco=0.0; novo->qtdade=0.0;

lista=novo; }


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->prox;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; } }

void retirar_produto() { system("clear"); int codigo; printf("\n-----------------REMOVER PRODUTO-----------------\n"); tipo_produto *pp,*pa; pa=lista; printf("Código do produto:"); scanf("%d",&codigo);

for(pp=lista;pp!=NULL;pp=pp->prox){ if(pp->codigo==codigo){ break; } pa=pp; } if(pp!=NULL){ pa->prox=pp->prox; free(pp); printf("\nProduto retirado!\n");

  }else {

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

   }

}

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

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

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

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

} }

void buscar_produto() { system("clear"); int codigo; printf("\n------------------BUSCAR PRODUTO-----------------\n");

  tipo_produto *p;
  p=lista;
  printf("Código do produto: ");
  scanf("%d",&codigo);

  while(p!=NULL && p->codigo!=codigo){

p=p->prox;

  }
  if(p!=NULL){

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

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

}

void estatistica() { system("clear"); int total=0,i=0; float maior,menor,soma=0,media;

  char des_maior[40],des_menor[40];

tipo_produto *p; p=lista->prox; printf("\n-------------ESTATISTICA DOS PRODUTOS------------\n"); maior=p->preco; menor=p->preco; strcpy(des_maior,p->descricao);

  strcpy(des_menor,p->descricao);  


for(p=lista->prox;p!=NULL;p=p->prox){ total+=p->qtdade; soma+=p->preco; i+=1; if(maior<p->preco){ maior=p->preco; strcpy(des_maior,p->descricao); } if(menor>p->preco){ menor=p->preco; strcpy(des_menor,p->descricao); } } media=soma/i; printf("\nMaior valor: %0.2f produto: %s",maior,des_maior); printf("\nMenor valor: %0.2f produto: %s",menor,des_menor); printf( "\nMedia de preço dos produtos: %0.2f",media); printf( "\nTotal de produtos: %d\n",total); printf("\n-------------------------------------------------\n"); }

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: break;
   	} 

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