Mudanças entre as edições de "Equipe1-2015-1"
Linha 50: | Linha 50: | ||
==Programa== | ==Programa== | ||
+ | |||
+ | #include <stdio.h> | ||
+ | #include <stdlib.h> | ||
+ | #include <string.h> | ||
+ | |||
+ | #define FIM 5 | ||
+ | |||
+ | 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 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; | ||
+ | |||
+ | default: printf("Opção invalida!!"); | ||
+ | break; | ||
+ | } | ||
+ | }while(opcao!=FIM); | ||
+ | printf("\nFim!!\n"); | ||
+ | } |
Edição das 21h16min de 29 de junho de 2015
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
- Comando swith
- Lista encadeada
- Ponteiros
- Alocação Dinâmica de Memória
- 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
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.
Programa
- include <stdio.h>
- include <stdlib.h>
- include <string.h>
- define FIM 5
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 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; default: printf("Opção invalida!!"); break; }
}while(opcao!=FIM); printf("\nFim!!\n"); }