• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

GhostRider

Trabalho pratico de P1 ESTG 2007/2008 - Criticas precisam-se!!!

13 mensagens neste tópico

//Bom tenho de entregar este trabalho dia 28...precisava de comentarios.

//Vou postar o codigo do trabalho todo...copiem e vejam no compilador...

//O Compilador que usei foi o devc++.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

#define COD_AUTO 1000 //CODIGO AUTOMATICO
#define T_UM 1000 //TAMANHO UM
#define T_DOIS 50 //TAMANHO DOIS
#define T_TRES 30 //TAMANHO TRES
//--------------------------ESTRUTURAS---------------------------//
typedef enum Documento{DOC=1,PDF,CHM}TIPO_DOCUMENTO;
//                       1    2   3                
typedef struct TIPO_DATA //ESTRUTURA DA DATA
{
     int ano,mes,dia;    
}TIPO_DATA;

typedef struct TIPO_EDITORA  //ESTRUTURA DA EDITORA
{
        int codigo_Editora,numero_ebooks;
        char Nome_Editora[T_DOIS];
}TIPO_EDITORA;

typedef struct TIPO_EBOOK//ESTRUTURA DO EBOOK
{
        int codigo_Editora,codigo_EBOOK,Paginas,Tamanho,Acessos;
        char Titulo_E_BOOK[T_TRES],Nome_Ficheiro[T_DOIS];
        TIPO_DOCUMENTO Documento;
        TIPO_DATA data;        
}TIPO_EBOOK;

typedef struct TIPO_ACESSO //LISTA TIPO ACESSO 
{
        int codigo_acesso,codigo_EBOOK;
        TIPO_DATA data;       
}TIPO_ACESSO;

typedef struct NO_Acesso //NO ACESSO
{
        TIPO_ACESSO estrutura_acesso;
        struct NO_Acesso *proximo_no;
}NO_Acesso;

//----------------------FUNÇÕES PRINCIPAIS-----------------------//

//EDITORA
void insere_EDITORA(TIPO_EDITORA v_editora[]);
void editar_EDITORA(TIPO_EDITORA v_editora[]);
void apaga_EDITORA(TIPO_EDITORA v_editora[]);
void listar_EDITORA(TIPO_EDITORA v_editora[]);
void ler_editora(TIPO_EDITORA v_editora[], int max,int i);
int verifica_editora(TIPO_EDITORA v_editora[]);
int conta_editoras(TIPO_EDITORA v_editora[]);
int verifica_codigo_editora(TIPO_EDITORA v_editora[],int x);
//EBOOKS
void insere_EBOOK(TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[]);
void edita_EBOOK(TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[]);
NO_Acesso *apaga_EBOOK(TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[],NO_Acesso *ls);
void listar_EBOOK(TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[]);
void ler_dados_ebook(TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[],int i,int x);
int ler_dados_ebook_cod_editora(TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[],int i);
void ler_data(TIPO_DATA *Data);
int verifica_ebook(TIPO_EBOOK v_ebook[]);
int conta_ebooks(TIPO_EBOOK v_ebook[]);
int verifica_codigo_ebook(TIPO_EBOOK v_ebook[],int x);
void ler_nome_ebook(TIPO_EBOOK v_ebook[],int i);
NO_Acesso *Remove_acesso_ebook(NO_Acesso *ls,int cod);
void ler_titulo_ebook(TIPO_EBOOK v_ebook[], int max,int i);
//ACESSOS
NO_Acesso *insere_ACESSO(NO_Acesso *ls,TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[]);
NO_Acesso *inserir_elemento_lista(NO_Acesso *ls,TIPO_ACESSO elemento); 
NO_Acesso *criar_NO_Acesso(TIPO_ACESSO elemento);
void libertar_memoria(NO_Acesso *ls);
void insere_acesso_no_ebook(int cod,TIPO_EBOOK v_ebook[]);
void lista_Acessos(NO_Acesso *ls);
//FICHEIROS
void escreve_ficheiros(TIPO_EDITORA v_editora[],TIPO_EBOOK v_ebook[],NO_Acesso *ls);
NO_Acesso *ler_ficheiros(TIPO_EDITORA v_editora[],TIPO_EBOOK v_ebook[],NO_Acesso *ls);
void escrever_ficheiro_editoras(TIPO_EDITORA v_editora[]);
void ler_ficheiro_editoras(TIPO_EDITORA v_editora[]);
void escrever_ficheiro_ebooks(TIPO_EBOOK v_ebook[]);
void ler_ficheiro_ebooks(TIPO_EBOOK v_ebook[]);
void escrever_ficheiro_Acessos(NO_Acesso *ls); 
NO_Acesso *ler_ficheiro_Acessos(NO_Acesso *ls,TIPO_EBOOK v_ebook[]);
//ESTATISTICAS
void lista_Editora_com_mais_Ebooks(TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[]);
void top_tres_ebooks(TIPO_EBOOK v_ebook[]);

//----------FUNÇÕES DE PROTECÇÃO e VALIDAÇÃO---------------------//
void inicializa_codigos(TIPO_EDITORA v_editora[],TIPO_EBOOK v_ebook[]);
int ler_opcao(int min,int max);
int lerInteiro(void);
void incrementa_ebook(int cod,TIPO_EDITORA v_editora[]);
void listar_compacto_ebook(TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[]);
//---------------------MENUS e FUNCOES GRAFICAS------------------//
void Menu_principal(void);
void Titulo(void);
void limpaecra(void);
void linha(void);
void subMenu_Editoras(void);
void subMenu_E_BOOKS(void);
void subMenu_Acessos(void);
void subMenu_Estatisticas(void);
void sim_nao(void);
//-----------------------------MAIN------------------------------//
int main(int argc, char *argv[])
{
    int opcao=0,gravar=0,aux=3;
    TIPO_EBOOK v_ebook[T_UM];
    TIPO_EDITORA v_editora[T_UM];
    NO_Acesso *ls=NULL;   
    
   inicializa_codigos(v_editora,v_ebook);
   
   do//MENU PRINCIPAL
   {    
    Menu_principal();
    opcao=ler_opcao(1,7);
    switch(opcao)
               {
                 case 1:do//subMENU EDITORAS
                           {
                            subMenu_Editoras();
                            opcao=ler_opcao(1,5);
                            switch(opcao)
                                       {
                                         case 1:insere_EDITORA(v_editora);break;
                                         case 2:editar_EDITORA(v_editora);system("PAUSE");break;
                                         case 3:apaga_EDITORA(v_editora);system("PAUSE");break;
                                         case 4:listar_EDITORA(v_editora);system("PAUSE");break;
                                       }
                          }while(opcao!=5);opcao=0;break;//subMENU EDITORAS
                 case 2:do//subMENU E-BOOKS
                           {
                            subMenu_E_BOOKS();
                            opcao=ler_opcao(1,5);
                            switch(opcao)
                                       {
                                         case 1:insere_EBOOK(v_ebook,v_editora);break;
                                         case 2:edita_EBOOK(v_ebook,v_editora);system("PAUSE");break;
                                         case 3:ls=apaga_EBOOK(v_ebook,v_editora,ls);system("PAUSE");break;
                                         case 4:listar_EBOOK(v_ebook,v_editora);system("PAUSE");break;
                                       }
                        }while(opcao!=5);opcao=0;break;//subMENU E-BOOKS
                 case 3:{do//subMENU ACESSOS
                           {
                            subMenu_Acessos();
                            opcao=ler_opcao(1,3);
                            switch(opcao)
                                       {
                                         case 1:ls=insere_ACESSO(ls,v_ebook,v_editora);system("PAUSE");break;
                                         case 2:limpaecra();printf("\n\nLISTA DE ACESSOS\n\n");
                                                lista_Acessos(ls);system("PAUSE");break;
                                       }
                        }while(opcao!=3);opcao=0;}break;//subMENU ACESSOS
                 case 4:{do//subMENU ESTATISTICAS
                           {
                            subMenu_Estatisticas();
                            opcao=ler_opcao(1,4);
                            switch(opcao)
                                       {
                                         case 1:lista_Editora_com_mais_Ebooks(v_ebook,v_editora);system("PAUSE");break;
                                         case 2:top_tres_ebooks(v_ebook);system("PAUSE");break;
                                         case 3:printf("\n\nUNDER CONSTRUCTION!!!\n");system("PAUSE");break;
                                       }
                        }while(opcao!=4);opcao=0;}break;//subMENU ESTATISTICAS
                  case 5:escreve_ficheiros(v_editora,v_ebook,ls);
                         gravar=1;break;//GUARDAR DADOS
                  case 6:ls=ler_ficheiros(v_editora,v_ebook,ls);
                         gravar=0;break;//LER DADOS             
                 default:system("CLS");
                         if(gravar==0)
                         {
                             limpaecra();
                             printf("\n\nAinda nao guardou os dados!!!\nDeseja faze-lo?\n");
                             sim_nao();
                             aux=ler_opcao(1,2);
                             if(aux==1)
                             escreve_ficheiros(v_editora,v_ebook,ls);
                             if(aux==2)
                             printf("\nDADOS NAO GRAVADOS!!!\n");
                         }if(aux==2)system("PAUSE");
                }
}while(opcao!=7);//MENU PRINCIPAL
  libertar_memoria(ls);	
  return 0;
}

//OK aqui estão os prototipos das funções e Main

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes começar por separar isso em módulos. Aparentemente estás a misturar a camada computacional com a camada de interface com os utilizadores...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
//PARTE DAS FUNCOES


//----------------------------MENUS------------------------------//
void Titulo(void)
{
     int i,x=50;
     printf("%c",201);
     for(i=0;i<=x;++i)
     printf("%c",205);
     printf("%c",187);
     printf("\n%c                   e-BOOK MANAGER                  %c\n",186,186);
     printf("%c",200);
     for(i=0;i<=x;++i)
     printf("%c",205);
     printf("%c",188);         
}
void limpaecra(void)
{
     system("CLS");
     Titulo();     
}
void linha(void)
{
     int i;
     for(i=0;i<=52;i++){
     printf("-");}
     printf("\n");
}
void Menu_principal(void)
{
    limpaecra();
    printf("\nMENU PRINCIPAL");
    printf("\n\n[1] -> [ EDITORAS ]\n");
    printf("\n[2] -> [ e-BOOKS ]\n");
    printf("\n[3] -> [ ACESSOS ]\n");
    printf("\n[4] -> [ ESTATISTICAS ]\n");
    printf("\n[5] -> [ GUARDAR DADOS ]\n");
    printf("\n[6] -> [ LER DADOS ]\n");
    printf("\n[7] -> [ SAIR ]\n\n");
    printf("\nSELECCIONE OPCAO:");
}

void subMenu_Editoras(void)
{
     limpaecra();
     printf("\nMENU PRINCIPAL > [ MENU EDITORAS ]");
     printf("\n\n[1] -> [ INSERIR EDITORA ]");
     printf("\n\n[2] -> [ EDITAR EDITORA ]");
     printf("\n\n[3] -> [ APAGAR EDITORA ]");
     printf("\n\n[4] -> [ LISTAR EDITORAS ]");
     printf("\n\n[5] -> [ VOLTAR ]");
     printf("\n\n\nSELECCIONE OPCAO:");
}
void subMenu_E_BOOKS(void)
{
     limpaecra();
     printf("\nMENU PRINCIPAL > [ MENU E-BOOKS ]");
     printf("\n\n[1] ->[ INSERIR e-BOOK ]");
     printf("\n\n[2] ->[ EDITAR e-BOOK ]");
     printf("\n\n[3] ->[ APAGAR e-BOOK ]");
     printf("\n\n[4] ->[ LISTAR e-BOOKS ]");
     printf("\n\n[5] ->[ VOLTAR ]");
     printf("\n\n\nSELECCIONE OPCAO:");
}
void subMenu_Acessos(void)
{
     limpaecra();
     printf("\nMENU PRINCIPAL > [ MENU ACESSOS ]");
     printf("\n\n[1] ->[ INSERIR ACESSO ]");
     printf("\n\n[2] ->[ LISTAR ACESSOS ]");
     printf("\n\n[3] ->[ VOLTAR ]");
     printf("\n\n\nSELECCIONE OPCAO:");
}
void subMenu_Estatisticas(void)
{
     limpaecra(); 
     printf("\nMENU PRINCIPAL > [ MENU ESTATISTICAS ]");
     printf("\n\n[1] ->[ EDITORA COM [>] NUMERO DE e-BOOKS ]");
     printf("\n\n[2] ->[ TOP [3] DOS e-BOOKS + REQUESITADOS ]");
     printf("\n\n[3] ->[ QUANTIDADE DE e-BOOKS ACEDIDOS ENTRE 2 DATAS ]");
     printf("\n\n[4] ->[ VOLTAR ]");
     printf("\n\n\nSELECCIONE OPCAO:");
}

void sim_nao(void)
{
printf("\n [1] -> Sim");
printf("\n [2] -> Nao\n\nOpcao:");
}
//----------------------FUNÇÕES DE PROTECÇÃO---------------------//

void inicializa_codigos(TIPO_EDITORA v_editora[],TIPO_EBOOK v_ebook[])
{
    int i;
    for(i=0;i<T_UM;i++)
     {
      v_editora[i].codigo_Editora=-1;
      v_ebook[i].codigo_EBOOK=-1;
      }
}   

int ler_opcao(int min,int max)
{
    int aux,valor;
    do{
        fflush(stdin);
        aux=scanf("%d",&valor);
        if (aux!=1 || valor<min || valor>max)
            printf("Introduza um valor v%clido:",160);
    }while(aux!=1 || valor<min || valor>max);
    return valor;
}

int lerInteiro(void)
{
      int aux,valor;
      do{
          fflush(stdin);
          aux=scanf("%d",&valor);
          if(aux!=1 || aux<0 || valor<=0){
          printf("Introduza um valor v%clido:",160);}
        }while(aux!=1 || aux<0 || valor<=0);
        return valor;
}

int verifica_codigo_editora(TIPO_EDITORA v_editora[],int x)
{
  int i;
  
  for(i=0;i<T_UM;i++)
   {
    if(v_editora[i].codigo_Editora==x)
    {
    return 1;
    break;
    }
   }
   return 0;
}

int verifica_editora(TIPO_EDITORA v_editora[])
{
     int i,count=0;
     
       count=conta_editoras(v_editora);
    if(count==T_UM){
    printf("\n\nNAO EXISTEM EDITORAS INTRODUZIDAS!!!\n");
    return 0;}    
   else
   return 1;
}  

int verifica_codigo_ebook(TIPO_EBOOK v_ebook[],int x)
{
  int i;
  
  for(i=0;i<T_UM;i++)
   {
    if(v_ebook[i].codigo_EBOOK==x)
    {
    return 1;
    break;
    }
   }
   return 0;
}

int verifica_ebook(TIPO_EBOOK v_ebook[])
{
     int i,count=0;
     
       count=conta_ebooks(v_ebook);
    if(count==T_UM){
    printf("\n\nNAO EXISTEM EBOOKS INTRODUZIDOS!!!\n");
    return 0;}    
   else
   return 1;
}

int conta_ebooks(TIPO_EBOOK v_ebook[])
{
    int i,count=0;
    for(i=0;i<T_UM;i++)
    {
     if(v_ebook[i].codigo_EBOOK==-1)
     count++;
     }
     return count;
}

int conta_editoras(TIPO_EDITORA v_editora[])
{
    int i,count=0;
    for(i=0;i<T_UM;i++)
    {
     if(v_editora[i].codigo_Editora==-1)
     count++;
     }
     return count;
}

void ler_editora(TIPO_EDITORA v_editora[], int max,int i)
{
     int aux,aux2=1,j;
     char string_aux[max];
     
     do{
          do{
          printf("[0 - %d cars]: ",max);
          fflush(stdin);
          aux=strlen(gets(string_aux));
          if(aux>max)
          printf("\nSO PODE INTRODUZIR %d CARS!!!\n",max);
          }while(aux>max);
          if(string_aux[0]=='\0')
          printf("\nString vazia\n");         
           for(j=0;j<i;j++)
            {
             aux2=stricmp(v_editora[j].Nome_Editora,string_aux);
              if(aux2==0 && j!=i)
               {             
                 printf("\nExiste uma Editora com este Nome!!!\nIntroduza novo ");
                 break;
               }
            }
        }while(aux2==0 || string_aux[0]=='\0');        
       strcpy(v_editora[i].Nome_Editora,string_aux);
}

void ler_titulo_ebook(TIPO_EBOOK v_ebook[], int max,int i)
{
     int aux,aux2=1,j;
     char string_aux[max];
     
     do{
          do{
          printf("[0 - %d cars]: ",max);
          fflush(stdin);
          aux=strlen(gets(string_aux));
          if(aux>max)
          printf("\nSO PODE INTRODUZIR %d CARS!!!\n",max);
          }while(aux>max);
          if(string_aux[0]=='\0')
          printf("\nString vazia\n");          
          
           for(j=0;j<i;j++)
            {
             aux2=stricmp(v_ebook[j].Titulo_E_BOOK,string_aux);
              if(aux2==0 && j!=i)
               {             
                 printf("\nExiste um Ebook com este Titulo!!!\nIntroduza novo ");
                 break;
               }
            }
        }while(aux2==0 || string_aux[0]=='\0');        
       strcpy(v_ebook[j].Titulo_E_BOOK,string_aux);
}

void incrementa_ebook(int cod,TIPO_EDITORA v_editora[])
{
  int i;
  for(i=0;i<T_UM;i++)
  {
  if(v_editora[i].codigo_Editora==cod)
     v_editora[i].numero_ebooks++;
  }
}

void insere_acesso_no_ebook(int cod,TIPO_EBOOK v_ebook[])
{
  int i;
  for(i=0;i<T_UM;i++)
  {
  if(v_ebook[i].codigo_EBOOK==cod)
     v_ebook[i].Acessos++; //incrementa um acesso ao ebook;
  }
}

void listar_compacto_ebook(TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[])
{
int i,j;
limpaecra();
printf("\n\nLISTAGEM COMPACTA DE EBOOKS\n");
  for(i=0;i<T_UM;i++)
  {
   if(v_ebook[i].codigo_EBOOK!=-1)
    {
     for(j=0;j<T_UM;j++)
      if(v_ebook[i].codigo_Editora==v_editora[j].codigo_Editora)
        printf("\nEDITORA [ %s ] COD.EDITORA ((( %d )))\n",v_editora[j].Nome_Editora,v_editora[j].codigo_Editora);
     printf("COD.EBOOK ((( %d ))) ",v_ebook[i].codigo_EBOOK);
     printf("DATA.INTRO. [ %d/%d/%d ]\n",v_ebook[i].data.dia,v_ebook[i].data.mes,v_ebook[i].data.ano);
     printf("N.ACESSOS -> (%d)\n",v_ebook[i].Acessos);
     linha();
    }//if
  }//for
}
//---------------------------EDITORA-----------------------------//
                        /*INSERE EDITORA*/

void insere_EDITORA(TIPO_EDITORA v_editora[])
{
   int i;
   limpaecra();
   for(i=0;i<T_UM;i++)
    {
        if(v_editora[i].codigo_Editora==-1)
        { 
          if(v_editora[0].codigo_Editora==-1)
           v_editora[0].codigo_Editora=COD_AUTO;
         else  
             v_editora[i].codigo_Editora=v_editora[i-1].codigo_Editora+1;                                        
       printf("\n\nCod.Editora[ %d ]",v_editora[i].codigo_Editora); 
       printf("\n\nIntroduza o Nome da Editora ");      
       fflush(stdin);
       ler_editora(v_editora,T_DOIS,i);
       v_editora[i].numero_ebooks=0;
       return;
       }//1ºif
    }//for
}//funcao
                        /*EDITA EDITORA*/

void editar_EDITORA(TIPO_EDITORA v_editora[])
{
     int cod,i=0,aux,verifica;
     aux=verifica_editora(v_editora);
     if(aux==1)
     {
      do
        {       
         listar_EDITORA(v_editora);     
         printf("Introduza o Codigo da Editora a Alterar:");
         cod=lerInteiro();
         verifica=verifica_codigo_editora(v_editora,cod);
                 if(verifica==0)
                 {
                 printf("\nNao existe nenhuma Editora com este codigo\n");
                 system("PAUSE");
                 }//if
        }while(verifica==0);//do
         for(i=0;i<T_UM;i++)
         {
              if(v_editora[i].codigo_Editora==cod)
              {
              printf("\nIntroduza o novo nome:");
              fflush(stdin);  
              //do                                             
              ler_editora(v_editora,T_DOIS,i);
              //while
              printf("\nEDITORA ALTERADA\n\n");
              break;
              }//if
         }//for
     }//if
}//função

                        /*LISTA EDITORA*/

void listar_EDITORA(TIPO_EDITORA v_editora[])
{
     int i,aux=0;
     aux=verifica_editora(v_editora);
     if(aux==1)
     {
      limpaecra();
      printf("\n\n                 LISTAGEM DE EDITORAS\n\n");
      linha();
      for(i=0;i<T_UM;i++)
         {          
          if(v_editora[i].codigo_Editora!=-1)
          {                 
          printf("COD.EDITORA ((( %d )))\n\n",v_editora[i].codigo_Editora);
          printf("Nome Editora [ %s ]\n",v_editora[i].Nome_Editora);
          printf("Numero de Ebooks Associados -> (%d)\n",v_editora[i].numero_ebooks);
          linha();
          }
         }//for
      }//if
}//função

                        /*APAGA EDITORA*/

void apaga_EDITORA(TIPO_EDITORA v_editora[])
{
     int i,cod,count=0,aux,verifica,verify;
     
     aux=verifica_editora(v_editora);
     if(aux==1)
     {
           do
             { 
             listar_EDITORA(v_editora);
             printf("\nQual a Editora a apagar?\nIntroduza o codigo:");
             cod=lerInteiro();
             verifica=verifica_codigo_editora(v_editora,cod);
                 if(verifica==0)
                     {
                     printf("\nNao existe nenhuma Editora com este codigo\n");
                     system("PAUSE");
                     }//if
                     
            }while(verifica==0);//do          
            
                for(i=0;i<T_UM;i++)
                 {
                    verify=i;
                    if(v_editora[i].numero_ebooks!=0)                     
                      break;
                    else
                    {
                      count++;
                      if(v_editora[i].codigo_Editora==cod)
                      {
                         for(i;i<(T_UM-count);i++)
                         v_editora[i]=v_editora[i+1];
                      }//if
                    }//else
                 }//for
           if(v_editora[verify].numero_ebooks!=0)
           printf("\nTEM EBOOKS ASSOCIADOS A ESTA EDITORA!!!\nNAO PODE APAGAR ESTA EDITORA!!!\n\n");      
           else
           printf("\nEDITORA APAGADA\n\n");
     }//if
}//função

//---------------------------EBOOKS----------------------------//
                        /*INSERE EBOOKS*/

void insere_EBOOK(TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[])
{
     int i;
     limpaecra();
     for(i=0;i<T_UM;i++)
     {
      if(v_ebook[i].codigo_EBOOK==-1)
      {
      ler_dados_ebook(v_ebook,v_editora,i,1);
      break;
      }     
     }     
}     

void ler_dados_ebook(TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[],int i,int x)
{
     int verifica,num=0;     
     if(x==1)
   {   
       printf("\n\nINSERCAO DE EBOOK");
         if(v_ebook[0].codigo_EBOOK==-1)
           v_ebook[0].codigo_EBOOK=COD_AUTO;
         else
             v_ebook[i].codigo_EBOOK=v_ebook[i-1].codigo_EBOOK+1;// Busca o ultimo codigo introduzido e incrementa
             v_ebook[i].Acessos=0;
         printf("\n\nCOD.EBOOK ((( %d )))\n\n",v_ebook[i].codigo_EBOOK);
         system("PAUSE");
         
         if(ler_dados_ebook_cod_editora(v_ebook,v_editora,i)==-1)
           return;
    }
    if(x==0)
    {
     limpaecra();
     printf("\n\nALTERACAO DE EBOOK");
     printf("\n\nCOD.EBOOK ((( %d )))\n\n",v_ebook[i].codigo_EBOOK);
     }
     ler_data(&(v_ebook[i].data));     
     printf("\nIntroduza o Titulo ");
     fflush(stdin);    
     ler_titulo_ebook(v_ebook,T_TRES,i);     
     ler_nome_ebook(v_ebook,i);    
     printf("Introduza o numero de paginas:");
     verifica=lerInteiro();
     v_ebook[i].Paginas=verifica;
     printf("Introduza o Tamanho:");
     verifica=lerInteiro();     
     v_ebook[i].Tamanho=verifica;
     printf("\n[1] - > DOC");
     printf("\n[2] - > PDF");
     printf("\n[3] - > CHM");
     printf("\nIntroduza o Tipo:");
     v_ebook[i].Documento=ler_opcao(1,3);          
}

void ler_nome_ebook(TIPO_EBOOK v_ebook[],int i)
{
     int aux;
     do{
     printf("\nIntroduza o Nome:");
     fflush(stdin);
     aux=strlen(gets(v_ebook[i].Nome_Ficheiro));
     if(aux>T_TRES)
     printf("SO PODE INTRODUZIR %d Caracteres",T_TRES);
     }while(aux>T_TRES);
}

void ler_data(TIPO_DATA *Data)
{
     printf("\nData da insercao");
     printf("\nDia [1...31]:");
     Data->dia=ler_opcao(1,31);
     printf("Mes [1...12]:");
     Data->mes=ler_opcao(1,12);
     printf("Ano [1981...2100]:");
     Data->ano=ler_opcao(1981,2100);  
}

int ler_dados_ebook_cod_editora(TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[],int i)
{
   int aux,aux2,verifica,cod;
     
     aux=verifica_editora(v_editora);
     if(aux==1)
         {
          do
              {
                 listar_EDITORA(v_editora);
                 printf("\nCOD.EDITORA a associar ao Ebook:");
                 cod=lerInteiro();
                 verifica=verifica_codigo_editora(v_editora,cod);
                 if(verifica==0)
                             {
                             printf("\nNao existe nenhuma Editora com este codigo\n");
                             system("PAUSE");
                             }
              }while(verifica==0);//1ºd0
                 v_ebook[i].codigo_Editora=cod;
                 incrementa_ebook(cod,v_editora);            
              }//1º if
            else
             {
               do{                     
                      printf("\nPretende adicionar uma editora?\n");
                      sim_nao();
                      aux2=ler_opcao(1,2);
                          if(aux2==1)
                          {
                            
                            insere_EDITORA(v_editora);
                            do
                              { 
                                listar_EDITORA(v_editora);
                                printf("\nCOD.EDITORA a associar ao Ebook:");
                                cod=lerInteiro();
                                verifica=verifica_codigo_editora(v_editora,cod);
                                if(verifica==0)
                                 {
                                 printf("\nNao existe nenhuma Editora com este codigo\n");
                                 system("PAUSE");
                                 }
                            }while(verifica==0);//do
                            if(aux2==1){
                            v_ebook[i].codigo_Editora=cod;
                            incrementa_ebook(cod,v_editora);
                            }
                          }//2º if
                          else
                              {
                               v_ebook[0].codigo_EBOOK=-1;
                               printf("\nTem de inserir uma Editora\n");
                               system("PAUSE");
                               return -1;
                              }//2º else
                  }while(aux2!=1);//do
               
              }//1º else     
}
                        /*EDITAR EBOOKS*/

void edita_EBOOK(TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[])
{
     int cod,i=0,aux,verifica;
     aux=verifica_ebook(v_ebook);
     if(aux==1)
     {
      do
        {              
         listar_EBOOK(v_ebook,v_editora);     
         printf("Introduza o Codigo do Ebook a Alterar:");
         cod=lerInteiro();
         verifica=verifica_codigo_ebook(v_ebook,cod);
                 if(verifica==0)
                 {
                 printf("\nNao existe nenhum Ebook com este codigo\n");
                 system("PAUSE");
                 }//if
        }while(verifica==0);//do
         for(i=0;i<T_UM;i++)
         {
              if(v_ebook[i].codigo_EBOOK==cod)
              {
              ler_dados_ebook(v_ebook,v_editora,i,0);//mandar uma variavel se para que altere o que a função vai fazer
              printf("\nEBOOK ALTERADO\n\n");
              break;
              }//if
         }//for
     }//if    
}     
                        /*APAGA EBOOKS*/
                             
NO_Acesso *apaga_EBOOK(TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[],NO_Acesso *ls)
{
int i,cod,count=0,aux,verifica;
     
     aux=verifica_ebook(v_ebook);
     if(aux==1)
     {
           do
             { 
             listar_compacto_ebook(v_ebook,v_editora);                    
             printf("\nQual o Ebook a apagar?\nIntroduza o codigo:");
             cod=lerInteiro();
             verifica=verifica_codigo_ebook(v_ebook,cod);
                 if(verifica==0)
                     {
                     printf("\nNao existe nenhum Ebook com este codigo\n");
                     system("PAUSE");
                     }//if
            }while(verifica==0);//do
                     
           ls=Remove_acesso_ebook(ls,cod);
         
                for(i=0;i<T_UM;i++)
                 {
                      count++;
                      if(v_ebook[i].codigo_EBOOK==cod)
                      {
                         aux=v_ebook[i].codigo_Editora;
                         for(i;i<(T_UM-count);i++)
                         v_ebook[i]=v_ebook[i+1];
                      }//if
                 }//for         

                  for(i=0;i<T_UM;i++)
                  {
                   if(v_editora[i].codigo_Editora==aux)
                   {
                    v_editora[i].numero_ebooks--;
                    printf("\nEBOOK APAGADO\n\n");
                    return ls;
                    }
                  }
     }//1ºif    
}

NO_Acesso *Remove_acesso_ebook(NO_Acesso *ls,int cod)
{
   NO_Acesso *aux=ls,*aux2=ls;

   while(aux!=NULL)
   {
    if(aux->estrutura_acesso.codigo_EBOOK==cod)
     {
      if(aux==ls)
      {
       ls=ls->proximo_no;
       free(aux);
       aux=ls;
       aux2=ls;
       }//if
       else
       {
          aux2->proximo_no=aux->proximo_no;
          free(aux);
          aux=aux2->proximo_no; 
           }//else
        
     }//1ºif
      else{
          aux2=aux; 
          aux=aux->proximo_no;
      }//else
      //free(aux);
      
    }//while    
  
   return ls;
}   

                        /*LISTA EBOOKS*/

void listar_EBOOK(TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[])
{
     int i,j,aux;
     aux=verifica_ebook(v_ebook);
     if(aux==1)
     {
          limpaecra();
          printf("\n\n                  LISTAGEM DE EBOOKS\n\n");
          linha();
          for(i=0;i<T_UM;i++)
              {
               if(v_ebook[i].codigo_EBOOK==-1)
                 return;
                   for(j=0;j<T_UM;j++)
                      if(v_ebook[i].codigo_Editora==v_editora[j].codigo_Editora)
                        printf("EDITORA [ %s ] COD.EDITORA ((( %d )))\n",v_editora[j].Nome_Editora,v_editora[j].codigo_Editora);               
               //printf("COD.EDITORA Associada ao EBOOK ((( %d )))\n",v_ebook[i].codigo_Editora);
               printf("\nCOD.EBOOK ((( %d )))\n\n",v_ebook[i].codigo_EBOOK);
               printf("Data da Insercao [ %d/%d/%d ]",v_ebook[i].data.dia,v_ebook[i].data.mes,v_ebook[i].data.ano);
               printf("\n          Titulo [ %s ]",v_ebook[i].Titulo_E_BOOK);
               printf("\n            Nome [ %s ]",v_ebook[i].Nome_Ficheiro);
               printf("\n         Paginas [ %d ]",v_ebook[i].Paginas);
               printf("\n         Tamanho [ %d KB ]",v_ebook[i].Tamanho);
               switch(v_ebook[i].Documento)
                   {
                     case 1:{printf("\n    Tipo de Doc. [ DOC ]\n");}break;                           
                     case 2:{printf("\n    Tipo de Doc. [ PDF ]\n");}break;
                     case 3:{printf("\n    Tipo de Doc. [ CHM ]\n");}break;
                   }//switch
               printf("\nNumero de acessos registados no ebook -> (%d)\n",v_ebook[i].Acessos);
                   linha();
           }//for
     }//if
}//funcao

//---------------------------ACESSOS----------------------------//

NO_Acesso *insere_ACESSO(NO_Acesso *ls,TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[])
{
    TIPO_ACESSO elemento;
    NO_Acesso *aux=ls;
    int cod,verifica,ver;
    ver=verifica_ebook(v_ebook);
    if(ver==1)
    {
        if(aux!=NULL)
        {
         while(aux->proximo_no!=NULL)
               aux=aux->proximo_no;
               
         elemento.codigo_acesso=aux->estrutura_acesso.codigo_acesso+1;
         }
          else
            elemento.codigo_acesso=T_UM;
                do
                  {
                     listar_compacto_ebook(v_ebook,v_editora);
                     printf("\nCOD.EBOOK para inserir o acesso:");
                     cod=lerInteiro();
                     verifica=verifica_codigo_ebook(v_ebook,cod);
                     if(verifica==0)
                                 {
                                 printf("\nNao existe nenhum Ebook com este codigo\n");
                                 system("PAUSE");
                                 }
                  }while(verifica==0);
                  insere_acesso_no_ebook(cod,v_ebook);
                  elemento.codigo_EBOOK=cod;
            ler_data(&(elemento.data));
            
            if((aux=inserir_elemento_lista(ls,elemento))!=NULL)
              ls=aux;
      printf("\nACESSO INTRODUZIDO!!!\n");
     }//1º if    
  return ls;
}

NO_Acesso *inserir_elemento_lista(NO_Acesso *ls,TIPO_ACESSO elemento)
{ 
  NO_Acesso *aux,*novo=criar_NO_Acesso(elemento);
  
  if(novo==NULL)
   {
     printf("\nErro na alocacao de memoria\n");
     return NULL;
   }
   if(ls==NULL)
      ls=novo;
      else
      {
      aux=ls;    
      while(aux->proximo_no!=NULL)
           aux=aux->proximo_no;
      aux->proximo_no=novo;
      }
   return ls;       
}

NO_Acesso *criar_NO_Acesso(TIPO_ACESSO elemento)
{
    NO_Acesso *Novo_no;
    
    if((Novo_no=(NO_Acesso *)malloc (sizeof(NO_Acesso)))!=NULL)
    {
      Novo_no->proximo_no=NULL;
      Novo_no->estrutura_acesso=elemento;
    }
    return Novo_no;
}

void libertar_memoria(NO_Acesso *ls)
{
NO_Acesso *aux=ls;
      if(aux==NULL)
      return;
      
      while (ls!=NULL)
      {
       aux=ls;
       ls=ls->proximo_no;    
       free(aux);
      }
}

void lista_Acessos(NO_Acesso *ls)
{
if(ls==NULL)
   printf("\n\nACESSOS VAZIOS!!!\n\n");
else
{
     while(ls!=NULL)
     {     
      printf("COD.ACESSO: ((( %d )))\n",ls->estrutura_acesso.codigo_acesso);              
      printf("COD.EBOOK: ((( %d )))\n",ls->estrutura_acesso.codigo_EBOOK); 
      printf("DATA do ACESSO: [ %d/%d/%d ]\n",ls->estrutura_acesso.data.dia,ls->estrutura_acesso.data.mes,ls->estrutura_acesso.data.ano);
      linha();
      ls=ls->proximo_no;
     }
}
}

//-----------------------ESTATISTICAS----------------------------//

void lista_Editora_com_mais_Ebooks(TIPO_EBOOK v_ebook[],TIPO_EDITORA v_editora[])
{
int aux,i,max=0;
aux=verifica_editora(v_editora);
    if(aux==1)
    { 
         for(i=0;i<T_UM;i++)
         {
          if(v_editora[i].codigo_Editora==-1)
            break;
          if(v_editora[i].numero_ebooks>max)
           max=v_editora[i].numero_ebooks;
         }
        
        limpaecra();
        printf("\n\nLISTAGEM DE EDITORA COM MAIOR NUMERO DE EBOOKS\n\n");
        for(i=0;i<T_UM;i++)
        {
         if(v_editora[i].codigo_Editora==-1)
           break;
         if(v_editora[i].numero_ebooks==max)
           { 
                                         
           printf("COD.EDITORA ((( %d )))\n\n",v_editora[i].codigo_Editora);
           printf("Nome Editora [ %s ]\n",v_editora[i].Nome_Editora);
           printf("Numero de Ebooks Associados -> (( %d ))\n",v_editora[i].numero_ebooks);
           linha();
           }
        }//for
    }//1ºIf 
}

                        /*TOP 3 EBOOKS MAIS REQUISITADOS*/
                        
void top_tres_ebooks(TIPO_EBOOK v_ebook[])
{
int aux,i,max=0,max2=0,max3=0,a=0;
char string[T_DOIS];
aux=verifica_ebook(v_ebook);
if(aux==1)
{

   for(i=0;i<T_UM;i++)
   {
    if(v_ebook[i].codigo_EBOOK==-1)
    break;
    if(v_ebook[i].Acessos>max){
    max=v_ebook[i].Acessos;
    strcpy(string,v_ebook[i].Nome_Ficheiro);
    }
   }//1ºfor
   if(max!=0)
   printf("\nEbook [%s] Acessos [%d]\n",string,max);
   
   for(i=0;i<T_UM;i++)
   {
    if(v_ebook[i].codigo_EBOOK==-1)
    break;
    if(v_ebook[i].Acessos>max2 && v_ebook[i].Acessos<max){
    max2=v_ebook[i].Acessos;
    strcpy(string,v_ebook[i].Nome_Ficheiro);
    } 
   }
   if(max2!=0)
   printf("\nEbook [%s] Acessos [%d]\n",string,max2);
   
   for(i=0;i<T_UM;i++)
   {
    if(v_ebook[i].codigo_EBOOK==-1)
    break;
    if(v_ebook[i].Acessos>max3 && v_ebook[i].Acessos<max2){
    max3=v_ebook[i].Acessos;
    strcpy(string,v_ebook[i].Nome_Ficheiro);} 
   }
   if(max3!=0)
   printf("\nEbook [%s] Acessos [%d]\n",string,max3);  

}//if 
}

                        /*FICHEIROS*/

void escreve_ficheiros(TIPO_EDITORA v_editora[],TIPO_EBOOK v_ebook[],NO_Acesso *ls)
{
escrever_ficheiro_editoras(v_editora);
escrever_ficheiro_ebooks(v_ebook);
escrever_ficheiro_Acessos(ls); 
printf("\n\nDADOS GRAVADOS!!!\n\n");
system("PAUSE");
}

NO_Acesso *ler_ficheiros(TIPO_EDITORA v_editora[],TIPO_EBOOK v_ebook[],NO_Acesso *ls)
{
ler_ficheiro_editoras(v_editora);
ler_ficheiro_ebooks(v_ebook);
ls=ler_ficheiro_Acessos(ls,v_ebook);
printf("\n\nLEITURA DE DADOS COM SUCESSO!!!\n\n");
system("PAUSE");
return ls;
}


void escrever_ficheiro_editoras(TIPO_EDITORA v_editora[]) {
     int num_editoras;
     FILE *fe;
     if((fe = fopen("editoras.dat", "wb")) == NULL) {
           printf("Erro ao escrever ficheiro das editoras!\n");
     }
     else {
          num_editoras = conta_editoras(v_editora);
          fwrite(&num_editoras, sizeof(int), 1, fe);
          fwrite(v_editora, sizeof(TIPO_EDITORA), num_editoras, fe);
          fclose(fe);
     }
}

void ler_ficheiro_editoras(TIPO_EDITORA v_editora[]) {
     int num_editoras;
     FILE *fe;
     if((fe = fopen("editoras.dat", "rb")) == NULL) {
           printf("Erro ao ler ficheiro das editoras!\n");
     }
     else {
          fread(&num_editoras, sizeof(int), 1, fe);
          fread(v_editora, sizeof(TIPO_EDITORA), num_editoras, fe);
          fclose(fe);
     }
}

void escrever_ficheiro_ebooks(TIPO_EBOOK v_ebook[]) {
     int num_ebooks;
     FILE *feb;
     if((feb = fopen("ebooks.dat", "wb")) == NULL) {
           printf("Erro ao escrever ficheiro dos ebooks!\n");
     }
     else {
          num_ebooks = conta_ebooks(v_ebook);
          fwrite(&num_ebooks, sizeof(int), 1, feb);
          fwrite(v_ebook, sizeof(TIPO_EBOOK), num_ebooks, feb);
          fclose(feb);
     }
}

void ler_ficheiro_ebooks(TIPO_EBOOK v_ebook[]) {
     int num_ebooks;
     FILE *feb;
     if((feb = fopen("ebooks.dat", "rb")) == NULL) {
           printf("Erro ao escrever ficheiro dos ebooks!\n");
     }
     else {
          fread(&num_ebooks, sizeof(int), 1, feb);
          fread(v_ebook, sizeof(TIPO_EBOOK), num_ebooks, feb);
          fclose(feb);
     }
}

void escrever_ficheiro_Acessos(NO_Acesso *ls) 
{
     int num_nos=0;
     NO_Acesso *aux=ls;
     FILE *feb;
     if((feb = fopen("Acessos.dat", "wb")) == NULL) {
           printf("Erro ao escrever ficheiro dos ebooks!\n");
     }
     else {
          while(aux!=NULL)
          {
           num_nos++;
           aux=aux->proximo_no;               
          }
          aux=ls;
          fwrite(&num_nos, sizeof(int), 1, feb);
          while(num_nos!=0)
          {
          fwrite(&aux->estrutura_acesso.codigo_acesso, sizeof(int), 1, feb);
          fwrite(&aux->estrutura_acesso.codigo_EBOOK, sizeof(int), 1, feb);
          fwrite(&aux->estrutura_acesso.data.dia, sizeof(int), 1, feb);
          fwrite(&aux->estrutura_acesso.data.mes, sizeof(int), 1, feb);
          fwrite(&aux->estrutura_acesso.data.ano, sizeof(int), 1, feb);
          num_nos--;
          }
          fclose(feb);
     }
}

NO_Acesso *ler_ficheiro_Acessos(NO_Acesso *ls,TIPO_EBOOK v_ebook[])
{
     int num_nos=0;
     TIPO_ACESSO elemento;
     NO_Acesso *aux;
     FILE *feb;
     if((feb = fopen("Acessos.dat", "rb")) == NULL) {
           printf("Erro ao escrever ficheiro dos ebooks!\n");
     }
     else 
     {     
          fread(&num_nos, sizeof(int), 1, feb);
          while(num_nos!=0)
          {
          fread(&elemento.codigo_acesso, sizeof(int), 1, feb);
          fread(&elemento.codigo_EBOOK, sizeof(int), 1, feb);
          fread(&elemento.data.dia, sizeof(int), 1, feb);
          fread(&elemento.data.mes, sizeof(int), 1, feb);
          fread(&elemento.data.ano, sizeof(int), 1, feb);          
          aux=inserir_elemento_lista(ls,elemento);
          ls=aux;
          num_nos--;
          }
          fclose(feb);
         return ls;
     }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Rui Carlos não percebi o que pretendes que faça!!! Explica-te por favor!!! Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens funções que fazem o trabalho e outras que apenas tratam da interacção com o utilizador. Os dois grupos deviam estar separados.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Agora neste programa so me falta uma coisa que não consegui acabar que é:

No menu de Estatisticas para mostrar a quantidade de de Ebooks acedidos entre duas datas...e anteriormente a isto falta-mea validação da data quando insiro um Acesso ao ebook!!!

Bom Rui Carlos de facto está tudo muito junto, mas tenho "comments" a separar o codigo por todo o programa...isto no intuito de poupar mais algumas linhas de codigo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sugeria-te que nao colocasses o código porque a data de entrega ainda nao passou.

Podes ter o azar de vir alguém do teu curso e copiar o trabalho integral.

AConselho-te a tirar o codigo e pedir apenas ajuda sobre partes do trabalho

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom Rui Carlos de facto está tudo muito junto, mas tenho "comments" a separar o codigo por todo o programa...isto no intuito de poupar mais algumas linhas de codigo.

Os comentários não têm nada a ver... Deves ter o programa separado em componentes, de forma a que seja mais fácil detectar erros e manter o código (entre outras vantagens). Não sei se isso é um critério de avaliação ou não...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não sei se o que o Rui Carlos quer dizer é isto mas: eu costumo ter os meus programas em vários ficheiros e um principal que os chama quando precisos. Facilita bastante :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hum já percebi...ok...bom quem quiser ver o programa a correr faça copy po compilador...preciso mesmo de criticas (alem destas que já foram esclarecedoras ) para no futuro melhorar a minha programação :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

acho que se continuas a postar os teus trabalhos em foruns, um dia destes encontras varios trabalhos iguais!!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora