Equipe5-2015-1

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

Integrantes

LEONARDO TASCA

LUISA MACHADO

NATALIA ADRIANA MIRANDA

Descrição da atividade principal

Implemente um programa em linguagem C que faça o controle de estoque simplificado de produtos de uma loja de informática. 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 de informática (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 de informática cadastrados.

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
111 PENDRIVE 19.50 20
102 DVD-RW 2.30 200
150 MOUSE 17.85 50
115 HP3212 80.50 10

Atividades

Distribuição

TODAS AS FUNÇÕES FORAM FEITAS EM CONJUNTO.

Código fonte

#include <stdio.h>
#include <stdlib.h>
 
typedef struct TProduto produtos;

struct TProduto{
	int codigo;
	int qtdade;  
	char descricao[20];
	float preco;
	struct TProduto *prox;
}*lista;
 
int i=1;


void ler_arquivo_para_lista()
{
	FILE *fp;
	int res;

	if ((fp = fopen("produtos.dat", "r")) == NULL) {
		printf("Falha na abertura do arquivo.\n");
		return;
	} 
	while(1) {
    	produtos *novo = malloc(sizeof(produtos));
		if((res = fscanf(fp,"%d %d %s %f", &novo->codigo, &novo->qtdade, novo->descricao, &novo->preco)) == EOF) {
			break;
		}
		if(lista == NULL) {
			lista = novo;
		}else {
			novo->prox = lista->prox;
			lista->prox = novo;
		}	
	}
	fclose(fp);
}


void atualizar()
{
	FILE *fp;
	int res;
	produtos *p;

	if ((fp = fopen("produtos.dat", "w")) == NULL) {
		printf("Falha na abertura do arquivo.\n");
		return;
	} 
	for (p = lista; p != NULL; p = p->prox) {
		if((res = fprintf(fp,"%d %d %s %0.2f\n", p->codigo, p->qtdade, p->descricao, p->preco)) == EOF) {
			printf("Erro\n");
		}
	}
	printf("\nArquivo atualizado\n");
	fclose(fp);
}


void listar_produtos()
{	
	system("clear");
	produtos *p;
	printf("\nLista dos Produtos Cadastrados:\n");
	printf("\n-------------------------------------------------------------------------------\n");
	for (p = lista; p != NULL; p = p->prox) {
		printf( "%d %d %s %0.2f", p->codigo, p->qtdade, p->descricao, p->preco);
		printf("\n-------------------------------------------------------------------------------\n");
	}
}

 
void add_prod()
{	
	system("clear");
	printf("\nAdicionar produto:\n");
	produtos *p = malloc (sizeof(produtos));
	printf("\nDigite o código do produto: ");
	scanf("%d", &p->codigo);
	printf("Digite a quantidade de produtos: ");
	scanf("%d", &p->qtdade);
	printf("Digite o nome do produto: ");
	scanf("%s", p->descricao);
	printf("Digite preço do produto: ");
	scanf("%f", &p->preco);
 
	if(lista == NULL) {
		lista = p;
	}else {
		p->prox = lista->prox;
		lista->prox = p;
	}
}
 
 
void rm_prod()
{
	system("clear");
	int cod;
	produtos *pa = malloc (sizeof(produtos));
	produtos *p;
	pa=lista;
	printf("\n-------------------------------------------------------------------------------\n");
	printf("\nRemover Produto\n");
	printf("\nDigite o código: ");
	scanf("%d", &cod);

	for(p = lista; p != NULL; p = p->prox) {
		if(p->codigo == cod)
			break;
		pa = p;		
	}
	if(p != NULL) {
		free(p);
		pa->prox = p->prox;
		printf("\nProduto removido!!\n");
		printf("\n-------------------------------------------------------------------------------\n");
	}else {
		printf("\nCódigo não existente!!\n");
		printf("\n-------------------------------------------------------------------------------\n");
	}	
}
 
 
void localizar()
{
	system("clear");
	int cod;
	produtos *p;
	p = lista->prox;
	printf("\nLocalizar Produto\n");
	printf("\nDigite o código: ");
	scanf("%d", &cod);

	for(p = lista; p != NULL; p = p->prox) {
		if(p->codigo == cod)
			break;
	}
	if(p!=NULL) {
		printf("\n-------------------------------------------------------------------------------\n");
		printf( "\n%d %d %s %0.2f\n", p->codigo, p->qtdade, p->descricao, p->preco);
		printf("\n-------------------------------------------------------------------------------\n");
	}else {
		printf("\n-------------------------------------------------------------------------------\n");
		printf("\nProduto não encontrado!!\n");
		printf("\n-------------------------------------------------------------------------------\n");
	}	
} 
 
 
void estat()
{
	system("clear");
	int soma=0, cod_menor, cod_maior, div=0;
	float maior, menor, somatorio=0, media;
	char *nomemenor, *nomemaior;
	produtos *p;
	p = lista->prox;
	printf("\n-------------------------------------------------------------------------------\n");
	printf("\nEstatísticas dos Produto:\n");
	maior = p->preco;
	cod_maior = p->codigo;
        nomemaior = p->descricao;
	menor = p->preco;    
	cod_menor = p->codigo;
	nomemenor = p->descricao;    
    
	for(p = lista; p != NULL; p = p->prox) {
		soma = soma + p->qtdade;
		somatorio = somatorio + p->preco;
		div = div + 1;
		if(maior < p->preco) {
			maior = p->preco;
			cod_maior = p->codigo;
            nomemaior = p->descricao;
		}
		if(menor > p->preco) {
			menor = p->preco;
			cod_menor = p->codigo;
			nomemenor = p->descricao;
		}
	}
	media = somatorio/div;
	
	printf("\nMenor valor: %0.2f  produto: %s", menor, nomemenor);
	printf("\nMaior valor: %0.2f  produto: %s", maior, nomemaior);
	printf( "\nMedia de preço dos produtos: %0.2f", media);
	printf( "\nTotal de produtos: %d\n", soma);
	printf("\n-------------------------------------------------------------------------------\n");
}
 
 
void mostra_opcoes()
{
	system("clear");
	printf("\n-------------------------------------------------------------------------------\n");
	printf("Menu\n");
	printf("\nOpção 1: Listar produtos cadastrados\n");
	printf("Opção 2: Adicionar produtos\n");
	printf("Opção 3: Remover produto\n");
	printf("Opção 4: Localizar produto\n");
	printf("Opção 5: Estatísticas\n");
	printf("Opção 6: Sair\n");
	printf("\n-------------------------------------------------------------------------------\n");
}
 
 
void opcoes(int x)
{   
	int k;
	while(i) {
		switch(x) {
		    case 1: 						// função listar
				printf("\nTempo de visualização (segundos): ");
				scanf("%d", &k);
				listar_produtos();
				sleep(k);
				funcao_principal();	
				break;
		    case 2:							// função adicionar
				add_prod();
				funcao_principal();	
				break;
		    case 3:							// função remover
				rm_prod();
				sleep(3);
				funcao_principal();	
				break;
			case 4:							// função buscar
		        localizar();
				sleep(5);
				funcao_principal();	
				break;
			case 5:							// função estatística
				printf("\nTempo de visualização (segundos): ");
				scanf("%d", &k);
				estat();
				sleep(k);
				funcao_principal();	
				break;
			case 6:
				printf("Saindo!!\n");
				i=0;	
		    default:
				x=6; 
		}
	}
} 

 
funcao_principal()
{
	int num;
	mostra_opcoes();
	printf("Entre com um número: ");
	scanf("%d", &num);
	opcoes(num);
}
 
void main()
{
	lista = NULL;
	ler_arquivo_para_lista();
	funcao_principal();
	atualizar();
}



<< Equipe5-2015-1