Mudanças entre as edições de "Equipe4-2015-1"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 50: Linha 50:
 
==Desenvolvimento==
 
==Desenvolvimento==
 
   
 
   
Em primeiro lugar montamos o esqueleto do projeto, definindo as funções a serem tratadas. Fizemos o Switch Case  
+
Em primeiro lugar montamos o esqueleto do projeto, definindo as funções a serem tratadas. Fizemos o Switch Case apontando para as funções. Depois cada função foi trabalhada de forma individual, tivemos uma maior dificuldade na função delete_livro().
apontando para as funções. Depois cada função foi trabalhada de forma individual, tivemos uma maior dificuldade na função delete_livro().
 
  
 
==Conclusão==
 
==Conclusão==

Edição das 16h16min de 30 de junho de 2015

Integrantes

ADILSON GOEDERT SIQUEIRA

GUSTAVO VIEIRA ZACCHI

RAPHAEL WASHINGTON BAPTISTA GIASSI


Descrição da atividade principal

Implemente um programa em linguagem C que faça o controle de estoque simplificado de livros. 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 livros(já cadastrados), poderá acrescentar novos livros, eliminar livros, e buscar um livro específico pelo isbn. Deverá ainda ter as opções de ordenar e imprimir a lista na tela de todos os livros. 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 o número de livros, o maior, menor e valor médio dos livros.

Descrição da atividade específica (dessa equipe)

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 TLivro {
   char isbn[20];
   char titulo[50];
   char autor[40];
   float preco;
   struct TLivro *prox;
};
Exemplo de arquivo (livros.dat)
cat livros.dat
978-85-8041-019-8,O DIA DA CAÇA,JAMES PATTERSON,19.90 
978-85-8044-027-0,A FURIA DOS REIS,GEORGE R.R. MARTIN,56.80 
85-204-1043-X,BODY FOR LIFE,BILL PHILLIPS,99.80
978-85-99296-93-6,CILADA,HARLAN COBEN,21.50
978-85-8041-191-1,NAO BRINQUE COM FOGO,JOHN VERDON,36.70

Atividades

Distribuição

Adilson - Gustavo - Raphael

Trabalhamos em conjunto na estrutura do programa, no desenvolvimento das funções, testes e complementação de dados na wiki, enfatizando que o Gustavo trabalhou com mais afinco na construção do esqueleto principal.

Desenvolvimento

Em primeiro lugar montamos o esqueleto do projeto, definindo as funções a serem tratadas. Fizemos o Switch Case apontando para as funções. Depois cada função foi trabalhada de forma individual, tivemos uma maior dificuldade na função delete_livro().

Conclusão

O projeto foi uma forma de exercitarmos a manipulação de diversos tipos de arquivos, trabalho em equipe à distância, devido conflito de horários com trabalho e compromissos. Neste programa aprendemos a trabalhar de forma mais "profissional", dividindo o trabalho em módulos para conseguirmos desenvolver o programa a distância, procurando através da linguagem em questão, encontrar de forma criativa e coesa soluções para suprir a necessidade do que foi solicitado.

Notas

Nota 9 para ambos os integrantes.

Código fonte

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
FILE *fp;
char ch;
struct TLivro {
   char isbn[20];
   char titulo[50];
   char autor[40];
   float preco;
   struct TLivro *next;
}*head1, *tail1;





void add_nodo_tail_livro()
{
   int res;

   struct TLivro *p =  malloc (sizeof(struct TLivro));
   if (!p){
        printf("Erro:Alocação\n");
        return;
   }

   printf("Entre com o ID do livro (ex: XXX-XX-XXXX-XXX-X,X)\n");
   scanf("%s",p->isbn);
   printf("Entre com o nome do livro\n");
   scanf("%s",p->titulo);
   printf("Entre com o nome do autor \n");
   scanf("%s",p->autor);
   printf("Entre com o preco \n");
   scanf("%f",&p->preco);
   if ((fp=fopen("livros.dat", "a")) == NULL) {
      printf("Falha na abertura do arquivo\n");
      return;
   }
   if((res = fprintf(fp,"\n%s,%s,%s,%f", p->isbn, p->titulo, p->autor, p->preco)) == EOF) {
     printf("Erro\n");
   }
   fclose(fp);

   p->next = NULL;

   if (tail1==NULL) {
      tail1 = head1 = p;
   }
   else {
       tail1->next = p;
       tail1 = p;
   }
   printf("Livro adicionado com sucesso!\n\n");
   return;
}



void print_livro_list(struct TLivro *runner)
{
int res;
 struct TLivro *p =  malloc (sizeof(struct TLivro));
 printf("Lista de livros:\n\n");
   if (runner==NULL)
      return;
   if ((fp=fopen("livros.dat", "a")) == NULL) {
      printf("Falha na abertura do arquivo\n");
      return;
   }
   while (1) {
      if((res = fscanf(fp,"\n%s,%s,%s,%f", p->isbn, p->titulo, p->autor, &p->preco))==EOF)      {
        printf("Fim de leitura\n");
          break;
          }
          printf("\n%s,%s,%s,%f", p->isbn, p->titulo, p->autor, p->preco);
   }

   for (;;){
   printf("---->ID: %s\n",runner->isbn);
   printf("---->Nome: %s\n",runner->titulo);
   printf("---->Autor: %s\n",runner->autor);
   printf("---->Preco: %f\n\n",runner->preco);
 if (runner->next==NULL)
      return;
   else
      runner=runner->next;
   }
}


void delete_livro(struct TLivro *runner){
 char id[20];
 struct TLivro *prunner;
  printf("Entre com o ID do livro a ser deletado (ex: XXX-XX-XXXX-XXX-X,X)\n");
   scanf("%s",id);

   if (runner==NULL)
      return;

   if(runner==head1){
      head1=runner->next;
   }

   for (;runner->next==NULL;runner=runner->next){
    if(strcmp(id,runner->isbn)==0){
        if(prunner!=NULL){
            prunner->next=runner->next;
            if(runner==tail1){
                tail1=prunner;
            }
        if(prunner==NULL && runner==tail1){
                tail1=NULL;
            }
        free(runner);
    }
    prunner=runner;
}

}
}
void find_livro(struct TLivro *runner){
 char id[20];
  printf("Entre com o ID do livro a ser encontrado (ex: XXX-XX-XXXX-XXX-X,X)\n");
   scanf("%s",id);

   if (runner==NULL){
     printf("Livro não encontrado!\n\n");
      return;
    }


   for (;;){
   if(strcmp(id,runner->isbn)==0){
   printf("---->ID: %s\n",runner->isbn);
   printf("---->Nome: %s\n",runner->titulo);
   printf("---->Autor: %s\n",runner->autor);
   printf("---->Preco: %f\n\n",runner->preco);
   return;
}
 if (runner->next==NULL){
         printf("Livro não encontrado!\n\n");
      return;
}
   else
      runner=runner->next;
   }


}



void stats(struct TLivro *runner){
float max=0;
float min=0;
int nlivros=1;
float vmedio=0;

 printf("Estatisticas:\n\n");
   if (runner==NULL)
    return;

   min=runner->preco;

   for (;;){
    if(max<runner->preco){
        max=runner->preco;
    }
    if(min>runner->preco){
        min=runner->preco;
    }
    vmedio=vmedio+runner->preco;


 if (runner->next==NULL)
      break;
   else
      nlivros++;
      runner=runner->next;
   }
   vmedio=vmedio/nlivros;
   printf("---->Preco max: %f\n",max);
   printf("---->Preco min: %f\n",min);
   printf("---->Numero de livros: %d\n",nlivros);
   printf("---->Preco medio: %f\n\n",vmedio);

}

main()
{

  head1 = tail1 = NULL;

int opcao;
printf("\e[H\e[2J");

  MENU:

  printf("Entre com uma opção:\n 1-Adicionar Livro. \n 2-Lista de Livros. \n 3-Remover Livro. \n 4-Estatisticas. \n 5-Procurar Livro. \n 6-Sair.\n");
  scanf ("%d",&opcao);
  switch(opcao) {
  case 1:
          printf("\e[H\e[2J");
          add_nodo_tail_livro();
          goto MENU;
  case 2:
          printf("\e[H\e[2J");
          print_livro_list (head1);
          goto MENU;
  case 3:
          printf("\e[H\e[2J");
          delete_livro(head1);
          goto MENU;
  case 4:
          printf("\e[H\e[2J");
          stats(head1);
          goto MENU;
  case 5:
          printf("\e[H\e[2J");
          find_livro(head1);
          goto MENU;
  case 6:
          printf("\e[H\e[2J");
          return;

  }


  }



<< Equipe4-2015-1