Mudanças entre as edições de "Equipe5-2015-1"
Linha 45: | Linha 45: | ||
=Código fonte= | =Código fonte= | ||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
− | |||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
+ | |||
+ | typedef struct TProduto produtos; | ||
struct TProduto{ | struct TProduto{ | ||
Linha 56: | Linha 57: | ||
struct TProduto *prox; | struct TProduto *prox; | ||
}*lista; | }*lista; | ||
+ | |||
+ | int i=1; | ||
− | |||
− | |||
− | void | + | void ler_arquivo_para_lista() |
− | { | + | { |
− | + | FILE *fp; | |
int res; | int res; | ||
+ | |||
if ((fp = fopen("produtos.dat", "r")) == NULL) { | if ((fp = fopen("produtos.dat", "r")) == NULL) { | ||
− | printf("Falha na abertura do arquivo\n"); | + | printf("Falha na abertura do arquivo.\n"); |
return; | return; | ||
} | } | ||
− | |||
while(1) { | while(1) { | ||
− | if((res = fscanf(fp,"%d %d %s %f", & | + | produtos *novo = malloc(sizeof(produtos)); |
+ | if((res = fscanf(fp,"%d %d %s %f", &novo->codigo, &novo->qtdade, novo->descricao, &novo->preco)) == EOF) { | ||
break; | break; | ||
} | } | ||
− | printf("%d %d %s %0.2f\n", | + | 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); | 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() | void add_prod() | ||
{ | { | ||
− | + | system("clear"); | |
− | + | printf("\nAdicionar produto:\n"); | |
− | printf(" | + | produtos *p = malloc (sizeof(produtos)); |
− | scanf("%d", & | + | printf("\nDigite o código do produto: "); |
+ | scanf("%d", &p->codigo); | ||
printf("Digite a quantidade de produtos: "); | printf("Digite a quantidade de produtos: "); | ||
− | scanf("%d", & | + | scanf("%d", &p->qtdade); |
printf("Digite o nome do produto: "); | printf("Digite o nome do produto: "); | ||
− | scanf("%s", | + | scanf("%s", p->descricao); |
printf("Digite preço do produto: "); | printf("Digite preço do produto: "); | ||
− | scanf("%f", & | + | scanf("%f", &p->preco); |
− | if ( | + | |
− | + | if(lista == NULL) { | |
− | + | lista = p; | |
+ | }else { | ||
+ | p->prox = lista->prox; | ||
+ | lista->prox = p; | ||
} | } | ||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | + | ||
− | + | ||
void rm_prod() | 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: "); | printf("\nDigite o código: "); | ||
scanf("%d", &cod); | scanf("%d", &cod); | ||
− | + | ||
− | + | for(p = lista; p != NULL; p = p->prox) { | |
− | for( | + | if(p->codigo == cod) |
− | if( | + | 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() | void localizar() | ||
{ | { | ||
− | + | system("clear"); | |
− | int cod | + | int cod; |
− | + | produtos *p; | |
− | + | p = lista->prox; | |
− | + | printf("\nLocalizar Produto\n"); | |
− | |||
− | |||
printf("\nDigite o código: "); | printf("\nDigite o código: "); | ||
scanf("%d", &cod); | scanf("%d", &cod); | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | for(p = lista; p != NULL; p = p->prox) { | |
− | + | if(p->codigo == cod) | |
break; | break; | ||
− | |||
} | } | ||
− | + | if(p!=NULL) { | |
− | printf("\ | + | 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() | void estat() | ||
{ | { | ||
− | + | system("clear"); | |
− | + | int soma=0, cod_menor, cod_maior, div=0; | |
− | + | float maior, menor, somatorio=0, media; | |
− | + | produtos *p; | |
− | + | p = lista->prox; | |
− | + | printf("\n-------------------------------------------------------------------------------\n"); | |
− | printf(" | + | printf("\nEstatísticas dos Produto:\n"); |
− | + | maior = p->preco; | |
+ | menor = p->preco; | ||
+ | |||
+ | 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; | ||
+ | } | ||
+ | if(menor > p->preco) { | ||
+ | menor = p->preco; | ||
+ | cod_menor = p->codigo; | ||
+ | } | ||
+ | } | ||
+ | media = somatorio/div; | ||
+ | for(p = lista; p != NULL; p = p->prox) { | ||
+ | if(p->codigo == cod_maior) | ||
+ | break; | ||
+ | } | ||
+ | if(p != NULL) { | ||
+ | printf( "\nMaior valor: %0.2f\t produto de %s", maior, p->descricao); | ||
+ | } | ||
+ | for(p = lista; p != NULL; p = p->prox) { | ||
+ | if(p->codigo == cod_menor) | ||
+ | break; | ||
} | } | ||
− | + | if(p != NULL) { | |
− | + | printf( "\nMenor valor: %0.2f\t produto de %s\n", menor, p->descricao); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | + | printf( "\nMedia de preço dos produtos: %0.2f", media); | |
− | + | printf( "\nTotal de produtos: %d\n", soma); | |
− | + | printf("\n-------------------------------------------------------------------------------\n"); | |
− | printf(" | ||
− | printf(" | ||
− | printf(" | ||
− | |||
− | |||
} | } | ||
− | + | ||
− | + | ||
void mostra_opcoes() | void mostra_opcoes() | ||
{ | { | ||
system("clear"); | system("clear"); | ||
− | printf("-----------------------------------------\n"); | + | printf("\n-------------------------------------------------------------------------------\n"); |
printf("Menu\n"); | printf("Menu\n"); | ||
− | printf(" | + | printf("\nOpção 1: Listar produtos cadastrados\n"); |
printf("Opção 2: Adicionar produtos\n"); | printf("Opção 2: Adicionar produtos\n"); | ||
printf("Opção 3: Remover produto\n"); | printf("Opção 3: Remover produto\n"); | ||
printf("Opção 4: Localizar produto\n"); | printf("Opção 4: Localizar produto\n"); | ||
− | printf("Opção 5: | + | printf("Opção 5: Estatísticas\n"); |
− | printf("Opção 6: | + | printf("Opção 6: Sair\n"); |
− | printf(" | + | printf("\n-------------------------------------------------------------------------------\n"); |
− | |||
− | |||
} | } | ||
− | + | ||
− | + | ||
void opcoes(int x) | void opcoes(int x) | ||
{ | { | ||
int k; | int k; | ||
− | while(i){ | + | while(i) { |
switch(x) { | switch(x) { | ||
− | case 1: | + | case 1: // função listar |
printf("\nTempo de visualização (segundos): "); | printf("\nTempo de visualização (segundos): "); | ||
− | scanf("%d",&k); | + | scanf("%d", &k); |
− | listar_produtos(); | + | listar_produtos(); |
sleep(k); | sleep(k); | ||
funcao_principal(); | funcao_principal(); | ||
break; | break; | ||
− | case 2: | + | case 2: // função adicionar |
− | add_prod(); | + | add_prod(); |
+ | funcao_principal(); | ||
+ | break; | ||
+ | case 3: // função remover | ||
+ | rm_prod(); | ||
+ | sleep(3); | ||
funcao_principal(); | funcao_principal(); | ||
break; | break; | ||
− | + | case 4: // função buscar | |
− | + | localizar(); | |
− | + | sleep(5); | |
funcao_principal(); | funcao_principal(); | ||
break; | break; | ||
− | case | + | case 5: // função estatística |
− | |||
printf("\nTempo de visualização (segundos): "); | printf("\nTempo de visualização (segundos): "); | ||
− | scanf("%d",&k); | + | scanf("%d", &k); |
− | + | estat(); | |
sleep(k); | sleep(k); | ||
− | |||
− | |||
− | |||
− | |||
funcao_principal(); | funcao_principal(); | ||
break; | break; | ||
case 6: | case 6: | ||
− | |||
− | |||
− | |||
− | |||
printf("Saindo!!\n"); | printf("Saindo!!\n"); | ||
i=0; | i=0; | ||
default: | default: | ||
− | x= | + | x=6; |
} | } | ||
} | } | ||
} | } | ||
+ | |||
funcao_principal() | funcao_principal() | ||
{ | { | ||
Linha 282: | Linha 306: | ||
mostra_opcoes(); | mostra_opcoes(); | ||
printf("Entre com um número: "); | printf("Entre com um número: "); | ||
− | scanf("%d",&num); | + | scanf("%d", &num); |
opcoes(num); | opcoes(num); | ||
} | } | ||
− | + | ||
void main() | void main() | ||
{ | { | ||
+ | lista = NULL; | ||
+ | ler_arquivo_para_lista(); | ||
funcao_principal(); | funcao_principal(); | ||
− | + | atualizar(); | |
− | |||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</syntaxhighlight> | </syntaxhighlight> |
Edição das 22h40min de 24 de junho de 2015
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
- 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 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;
produtos *p;
p = lista->prox;
printf("\n-------------------------------------------------------------------------------\n");
printf("\nEstatísticas dos Produto:\n");
maior = p->preco;
menor = p->preco;
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;
}
if(menor > p->preco) {
menor = p->preco;
cod_menor = p->codigo;
}
}
media = somatorio/div;
for(p = lista; p != NULL; p = p->prox) {
if(p->codigo == cod_maior)
break;
}
if(p != NULL) {
printf( "\nMaior valor: %0.2f\t produto de %s", maior, p->descricao);
}
for(p = lista; p != NULL; p = p->prox) {
if(p->codigo == cod_menor)
break;
}
if(p != NULL) {
printf( "\nMenor valor: %0.2f\t produto de %s\n", menor, p->descricao);
}
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 |
---|