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

De MediaWiki do Campus São José
Ir para: navegação, pesquisa
(Código fonte)
(Código fonte)
Linha 60: Linha 60:
  
 
==Código fonte==
 
==Código fonte==
 +
 
#include <stdlib.h>
 
#include <stdlib.h>
 
#include <stdio.h>
 
#include <stdio.h>

Edição das 18h10min 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, gerando algumas dificuldades 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. É previsível de que ajustes devem ser realizados no código, minimizando erros e proporcionando uma melhor fluidez em uma descrição mais enxuta. Por ser um programa simples, porém complexo, existem possibilidades de adicionar módulos no código em questão, podendo atender necessidades aparentes.

Notas

Nota 9 para ambos os integrantes.

Código fonte

  1. include <stdlib.h>
  2. include <stdio.h>
  3. include <string.h>

FILE *fp; FILE *fp_temp; 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,"%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) { char isbn[20]; char titulo[50]; char autor[40]; float preco;

  int res;

struct TLivro *p = malloc (sizeof(struct TLivro)); printf("Lista de livros:\n\n"); fp=fopen("livros.dat", "r"); while( (fscanf(fp,"%s %s %s %f\n", isbn, titulo, autor, &preco))!=EOF ) printf(" isbn:%s\n titulo:%s\n autor:%s\n preco:%f\n\n",isbn, titulo, autor, preco); fclose(fp); if (runner==NULL) return; } void excluir(){

   fp_temp=fopen("livro_temp.dat", "w");
   fp=fopen("livros.dat", "r");
   char isbn[20];

char titulo[50]; char autor[40]; float preco;

   char codBusca[20];

int qntd0, opcao;

   printf("\t\t\t   **EXCLUIR LIVRO**\n\n");
   printf("\n\n");
   printf("Código do livro:");
   scanf("%s", codBusca);
   system("clear");
   if(fp == NULL)
       printf("Erro, nao foi possivel abrir o arquivo\n");

else

         while( (fscanf(fp,"%s %s %s %f\n", isbn, titulo, autor, &preco))!=EOF )
           if(strcmp(codBusca, isbn) != 0){
               fprintf(fp_temp, "%s %s %s %f\n",isbn, titulo, autor, preco);
           }else{
               printf("isbn: %s\n", isbn);
               printf("titulo: %s\n", titulo);
               printf("autor: %s\n", autor);
               printf("preco: %f\n\n", preco);
               printf("Tem certeza que deseja excluir?(SIM = 1)\n");
               scanf("%d", &opcao);
               system("clear");
               if(opcao != 1){
                   fprintf(fp_temp, "%s %s %s %f\n",isbn, titulo, autor, preco);
               }else{
               printf("\nLivro excluído com sucesso!\n\n");
               }
           }
   fclose(fp);
   fclose(fp_temp);
   remove("livros.dat");
   rename("livro_temp.dat","livros.dat");

} 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;
   }

} } /* Funçao find_livro() Proucura um id em uma string enquanto n~ao achar ele vai apontar para a proxima posicao da estrutura, se chegar ao fim da estrutura e n~ao encontrar retorna n~ao encontrado

  • /

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);
  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");

      	excluir();
      	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;
       }

}