Mudanças entre as edições de "Equipe1-2015-1"
(37 revisões intermediárias por 3 usuários não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
=Integrantes= | =Integrantes= | ||
− | MARIA FERNANDA SILVA TUTUI | + | MARIA FERNANDA SILVA TUTUI |
− | RICARDO AMORIM | + | RICARDO AMORIM |
− | VITOR MANOEL DA SILVEIRA | + | VITOR MANOEL DA SILVEIRA |
=Descrição da atividade principal= | =Descrição da atividade principal= | ||
Linha 42: | Linha 42: | ||
==Distribuição== | ==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== | ==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== | ==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> | <syntaxhighlight lang=c> | ||
#include <stdio.h> | #include <stdio.h> | ||
+ | #include <stdlib.h> | ||
+ | #include <string.h> | ||
+ | |||
+ | #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 | + | 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"); | ||
+ | } |
Edição atual tal como às 10h10min de 1 de julho 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
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>
- include <stdio.h>
- include <stdlib.h>
- include <string.h>
- 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"); }