Clipper On Line • Ver Tópico - Trabalho de C++ - Urgente

Trabalho de C++ - Urgente

Discussão sobre outras linguagens de programação.

Moderador: Moderadores

 

Trabalho de C++ - Urgente

Mensagempor negrao » 23 Nov 2008 14:12

Mocada, preciso entregar um trabalho de C++, mas nao manjo nada de ponteiro.
Ja quebrei a cabeca e nao sai do lugar.
Quem puder me ajudar...agradeco

Obs(me nivel de desespero é tanto que ate pago), nao muito rsrsr

//-> estrutura do arquivo C++
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define TAM_STRING 30

FILE *entrada;

typedef struct
{
    int dia;
    int mes;
    int ano;       
} data;

typedef struct opcionais_hardware
{
    char nome[TAM_STRING];
    char descricao[TAM_STRING*2];
    struct opcionais_hardware *proximo;
} opcionais_hardware;

typedef struct aplicativos
{
    char nome[TAM_STRING];   
    char versao[TAM_STRING/2];
    data data_instalacao;
    struct aplicativos *proximo;
} aplicativos;

typedef struct
{
    char fabricante[TAM_STRING/2];
    char modelo[TAM_STRING/2];
    float clock;       
} processador;

typedef struct
{
    processador cpu;
    int memoria;
    int hd;
    opcionais_hardware *op_hw;   
} hardware;

typedef struct
{
    char nome[TAM_STRING];
    char versao[TAM_STRING/2];
    data data_instalacao;
    char senha[TAM_STRING];
} sistema_operacional;

typedef struct
{
    sistema_operacional so;
    aplicativos *app;
} software;

typedef struct
{
    char setor[TAM_STRING];
    char responsavel[TAM_STRING];
    int patrimonio;       
} logistica;

typedef struct computador
{
    hardware hw;
    software sw;
    logistica logt;
} computador;

typedef struct no_computador
{
    computador *pc;
    struct no_computador *proximo;
} no_computador;

typedef struct lista
{
    no_computador *inicio;
    no_computador *fim;
} lista;

char *lerCampo(char op)
{
    char *temp=(char *)malloc(sizeof(char)*TAM_STRING);     
    char ch;
    int cont=0;
    while((ch=getc(entrada))!=op)
    {
        if (ch!=EOF)
            temp[cont++]=ch;
        else if (ch!=EOF)
            exit(0);
    }
    temp[cont]='\0';
    return temp;
}

lista *lerArquivo(char endereco[])
{
   lista *l=NULL;
   
   entrada=fopen(endereco,"r");
   char ch;
   char *temp=(char *)malloc(sizeof(char)*TAM_STRING);
   int estado=-1;
   while((ch=getc(entrada))!=EOF)
   {                     
       if (ch=='<')
           temp=lerCampo('>');
       if (ch!=' ' && ch!='\n' &&  ch!='\t')
       {
           if (strcmp(temp,"computador")==0 && estado==-1)
           {
               estado=0;
               //implemente aqui
           }
           else if (strcmp(temp,"hardware")==0 && estado==0)
           {
               estado=1;               
           }
           else if (strcmp(temp,"processador")==0 && estado==1)
           {
               estado=11;                             
           }
           else if (strcmp(temp,"fabricante")==0 && estado==11)
           {
               estado=111;
               strcpy(l->fim->pc->hw.cpu.fabricante,lerCampo('<'));
               fseek(entrada,-1,SEEK_CUR);
           }
           else if (strcmp(temp,"modelo")==0 && estado==11)
           {
               estado=112;
               strcpy(l->fim->pc->hw.cpu.modelo,lerCampo('<'));
               fseek(entrada,-1,SEEK_CUR);                     
           }
           else if (strcmp(temp,"clock")==0 && estado==11)
           {
               estado=113;
               l->fim->pc->hw.cpu.clock=atof(lerCampo('<'));
               fseek(entrada,-1,SEEK_CUR);           
           }
           else if (strcmp(temp,"memoria")==0 && estado==1)
           {
               estado=12;           
               l->fim->pc->hw.memoria=atoi(lerCampo('<'));
               fseek(entrada,-1,SEEK_CUR);           
           }
           else if (strcmp(temp,"hd")==0 && estado==1)
           {
               estado=13;           
               l->fim->pc->hw.hd=atoi(lerCampo('<'));
               fseek(entrada,-1,SEEK_CUR);           
           }
           else if (strcmp(temp,"opcionais_hardware")==0 && estado==1)
           {
               estado=14;           
               //implemente aqui
           }
           else if (strcmp(temp,"nome")==0 && (estado==14 || estado==21 || estado==22))
           {
               if (estado==14)
               {
                   estado=141;
                   //implemente aqui
                   fseek(entrada,-1,SEEK_CUR);                     
               }
               else if (estado==21)
               {
                   estado=211;
                   strcpy(l->fim->pc->sw.so.nome,lerCampo('<'));
                   fseek(entrada,-1,SEEK_CUR);               
               }
               else
               {
                   estado=221;
                   //implemente aqui
                   fseek(entrada,-1,SEEK_CUR);                                   
               }
           }
           else if (strcmp(temp,"descricao")==0 && estado==14)
           {
               estado=142;
               //implemente aqui
               fseek(entrada,-1,SEEK_CUR);           
           }
           else if (strcmp(temp,"software")==0 && estado==0)
           {
               estado=2;   
           }
           else if (strcmp(temp,"sistema_operacional")==0 && estado==2)
           {
               estado=21;
           }
           else if (strcmp(temp,"versao")==0 && (estado==21 || estado==22))
           {
               if (estado==21)
               {
                   estado=212;
                   strcpy(l->fim->pc->sw.so.versao,lerCampo('<'));
                   fseek(entrada,-1,SEEK_CUR); 
               }
               else
               {
                   estado=222;
                   //implemente aqui
                   fseek(entrada,-1,SEEK_CUR);               
               }   
           }
           else if (strcmp(temp,"data_instalacao")==0 && (estado==21 || estado==22))
           {
               if (estado==21)
                  estado=213;
               else
                  estado=223;       
           }
           else if (strcmp(temp,"dia")==0 && (estado==213 || estado==223))
           {
               if (estado==213)
               {
                   estado=2131;
                   l->fim->pc->sw.so.data_instalacao.dia=atoi(lerCampo('<'));
                   fseek(entrada,-1,SEEK_CUR);                               
               }
               else
               {
                   estado=2231;
                   //implemente aqui
                   fseek(entrada,-1,SEEK_CUR);                             
               }           
           }
           else if (strcmp(temp,"mes")==0 && (estado==213 || estado==223))
           {
               if (estado==213)
               {
                   estado=2132;
                   l->fim->pc->sw.so.data_instalacao.mes=atoi(lerCampo('<'));
                   fseek(entrada,-1,SEEK_CUR);               
               } 
               else
               {
                   estado=2232;
                   //implemente aqui
                   fseek(entrada,-1,SEEK_CUR);               
               }                   
           }
           else if (strcmp(temp,"ano")==0 && (estado==213 || estado==223))
           {
               if (estado==213)
               {
                   estado=2133;
                   l->fim->pc->sw.so.data_instalacao.ano=atoi(lerCampo('<'));
                   fseek(entrada,-1,SEEK_CUR);               
               }     
               else
               {
                   estado=2233;
                   //implemente aqui
                   fseek(entrada,-1,SEEK_CUR);               
               }                   
           }
           else if (strcmp(temp,"senha")==0 && estado==21)
           {
               if (estado==21)
               {
                   estado=214;
                   strcpy(l->fim->pc->sw.so.senha,lerCampo('<'));
                   fseek(entrada,-1,SEEK_CUR); 
               }             
           }
           else if (strcmp(temp,"aplicativos")==0 && estado==2)
           {
               estado=22;             
               //implemente aqui
           }
           else if (strcmp(temp,"logistica")==0 && estado==0)
           {
               estado=3;   
           }
           else if (strcmp(temp,"setor")==0 && estado==3)
           {
               estado=31;
               strcpy(l->fim->pc->logt.setor,lerCampo('<'));
               fseek(entrada,-1,SEEK_CUR);               
           }
           else if (strcmp(temp,"responsavel")==0 && estado==3)
           {
               estado=32;
               strcpy(l->fim->pc->logt.responsavel,lerCampo('<'));
               fseek(entrada,-1,SEEK_CUR);             
           }
           else if (strcmp(temp,"patrimonio")==0 && estado==3)
           {
               estado=33;
               l->fim->pc->logt.patrimonio=atoi(lerCampo('<'));
               fseek(entrada,-1,SEEK_CUR);             
           }
           if (strcmp(temp,"/computador")==0)
           {
               if (estado==0)
                   estado=-1;
               else
                   exit(0);           
           }
           else if (strcmp(temp,"/hardware")==0)
           {
               if (estado==1)
                   estado=0;
               else
                   exit(0);               
           }
           else if (strcmp(temp,"/processador")==0)
           {
               if (estado==11)
                   estado=1;
               else
                   exit(0);               
           }
           else if (strcmp(temp,"/fabricante")==0)
           {
              if (estado==111)
                 estado=11;
               else
                   exit(0);             
           }
           else if (strcmp(temp,"/modelo")==0)
           {
              if (estado==112)
                 estado=11;     
               else
                   exit(0);                             
           }
           else if (strcmp(temp,"/clock")==0)
           {
              if (estado==113)
                 estado=11;
               else
                   exit(0);             
           }
           else if (strcmp(temp,"/memoria")==0)
           {
              if (estado==12)
                 estado=1;
               else
                   exit(0);             
           }
           else if (strcmp(temp,"/hd")==0)
           {
              if (estado==13)
                 estado=1;
               else
                   exit(0);             
           }
           else if (strcmp(temp,"/opcionais_hardware")==0)
           {
              if (estado==14)
                 estado=1;   
               else
                   exit(0);                 
           }
           else if (strcmp(temp,"/nome")==0)
           {
              if (estado==141)
                 estado=14; 
              else if (estado==211)
                 estado=21;     
              else if (estado==221)
                 estado=22;                             
           }
           else if (strcmp(temp,"/descricao")==0)
           {
              if (estado==142)
                 estado=14;         
           }
           else if (strcmp(temp,"/software")==0)
           {
              if (estado==2)
                 estado=0;
               else
                   exit(0);               
           }
           else if (strcmp(temp,"/sistema_operacional")==0)
           {
              if (estado==21)
                 estado=2;   
               else
                   exit(0);                                   
           }
           else if (strcmp(temp,"/versao")==0)
           {
              if (estado==212)
                 estado=21;   
              else if (estado==222)
                 estado=22;           
           }
           else if (strcmp(temp,"/data_instalacao")==0)
           {
              if (estado==213)
                 estado=21;
              else if (estado==223)
                 estado=22;                             
           }
           else if (strcmp(temp,"/dia")==0)
           {
              if (estado==2131)
                  estado=213;
              else if (estado==2231)
                  estado=223;
           }
           else if (strcmp(temp,"/mes")==0)
           {
              if (estado==2132)
                  estado=213;
              else if (estado==2232)
                  estado=223;                     
           }
           else if (strcmp(temp,"/ano")==0)
           {
              if (estado==2133)
                  estado=213; 
              else if (estado==2233)
                  estado=223;                       
           }
           else if (strcmp(temp,"/senha")==0)
           {
               if (estado==214)
                   estado=21;   
               else
                   exit(0);               
           }
           else if (strcmp(temp,"/aplicativos")==0)
           {
               if (estado==22)
                   estado=2;
               else
                   exit(0);                         
           }
           else if (strcmp(temp,"/logistica")==0)
           {
               if (estado==3)
                   estado=0; 
               else
                   exit(0);                 
           }
           else if (strcmp(temp,"/setor")==0)
           {
               if (estado==31)
                   estado=3;     
               else
                   exit(0);                     
           }
           else if (strcmp(temp,"/responsavel")==0)
           {
               if (estado==32)
                   estado=3;
               else
                   exit(0);                             
           }
           else if (strcmp(temp,"/patrimonio")==0)
           {
               if (estado==33)
                   estado=3;
               else
                   exit(0);               
           }
       }       
   }
   free(temp);
   fclose(entrada);           
   return l;
}

void escreverSaida1(lista *l,char endereco[],int memoria)
{
    //implemente aqui   
}

void escreverSaida2(lista *l,char endereco[],char nome[],char versao[])
{
    //implemente aqui
}

void imprimir(lista *l)
{
     no_computador *aux=l->inicio;
     while (aux!=NULL)
     {
     printf("fabricante: %s\n",aux->pc->hw.cpu.fabricante);
     printf("modelo: %s\n",aux->pc->hw.cpu.modelo);
     printf("clock: %f\n",aux->pc->hw.cpu.clock);     
     printf("memoria: %d\n",aux->pc->hw.memoria);
     printf("hd: %d\n",aux->pc->hw.hd);
     opcionais_hardware *aux1=aux->pc->hw.op_hw;
     while (aux1!=NULL)
     {
         printf("opcional: %s %s\n",aux1->nome,aux1->descricao);     
         aux1=aux1->proximo;
     }
     printf("s.o.: %s\n",aux->pc->sw.so.nome);     
     printf("versao: %s\n",aux->pc->sw.so.versao); 
     printf("instalacao: %d/%d/%d\n",aux->pc->sw.so.data_instalacao.dia,aux->pc->sw.so.data_instalacao.mes,aux->pc->sw.so.data_instalacao.ano);     
     printf("senha: %s\n",aux->pc->sw.so.senha); 
     aplicativos *aux2=aux->pc->sw.app; 
     while (aux2!=NULL)
     {
         printf("aplicativos: %s %s %d/%d/%d\n",aux2->nome,aux2->versao,aux2->data_instalacao.dia,aux2->data_instalacao.mes,aux2->data_instalacao.ano);     
         aux2=aux2->proximo;
     }
     printf("setor: %s\n",aux->pc->logt.setor);     
     printf("responsavel: %s\n",aux->pc->logt.responsavel); 
     printf("patrimonio: %d\n\n",aux->pc->logt.patrimonio);           
     aux=aux->proximo;
     }
}

void menu()
{
    system("cls");
    printf("  |                                                |\n");
    printf("  |    <1> Abrir \"entrada.txt\"                     |\n");   
    printf("  |    <2> Imprimir                                |\n");   
    printf("  |    <3> Relatorio 1 (\"saida1.txt\")              |\n");   
    printf("  |    <4> Relatorio 2 (\"saida2.txt\")              |\n");   
    printf("  |    <5> Sair                                    |\n");   
    printf("  |                                                |\n");   
    printf("  |------------------------------------------------|\n\n");   
    printf("\t\tOpcao: ");   
}

int main()
{
    lista *l=NULL;
    char opcao;
    do
    {
        menu();
        fflush(stdin);
        opcao=getchar();
        switch(opcao)
        {
             case '1':
                 l=lerArquivo("entrada.txt");
                 system("cls");
                 printf("\n\tArquivo aberto com sucesso!\n\n\n");
                 system("pause");
                 break;
             case '2':
                 system("cls");
                 if (l!=NULL)
                     imprimir(l);
                 else
                     printf("\n\tLista vazia!\n\n\n");
                 system("pause");
                 break;
             case '3':
                 system("cls");
                 if (l!=NULL)
                 {
                     int memoria;
                     printf("\n\n\tMemoria menor que : ");
                     scanf("%d",&memoria);
                     escreverSaida1(l,"saida1.txt",memoria);
                     printf("\n\tRelatorio 1 emitido com sucesso!\n\n\n");
                 }
                 else
                     printf("\n\tNao foi possivel emitir relatorio 1!\n\n\n");                 
                 system("pause");
                 break;
             case '4':
                 system("cls");
                 if (l!=NULL)
                 {
                     char nome[TAM_STRING];
                     char versao[TAM_STRING/2];
                     printf("\n\n\tNome : ");
                     fflush(stdin);
                     fgets(nome,TAM_STRING,stdin);
                     nome[strlen(nome)-1]='\0';
                     printf("\n\tVersao : ");
                     fflush(stdin);
                     fgets(versao,TAM_STRING/2,stdin);
                     versao[strlen(versao)-1]='\0';
                     escreverSaida2(l,"saida2.txt",nome,versao);
                     printf("\n\tRelatorio 2 emitido com sucesso!\n\n\n");
                 }
                 else
                     printf("\n\tNao foi possivel emitir relatorio 2!\n\n\n");
                 system("pause");
                 break;
             default:                         
                 if (opcao!='5')
                     continue;
        }
    } while(opcao!='5');
}


//-> estrutura do arquivo de entrada.txt
0.<computador>
1.<hardware>
11.<processador>
111.<fabricante>Intel</fabricante>
112.<modelo>Core 2 Duo</modelo>
113.<clock>2.5</clock>
</processador>

12.<memoria>2048</memoria>
13.<hd>250</hd>
14.<opcionais_hardware>
141.<nome>Placa de video</nome>
142.<descricao>Nvidia 9600 GT</descricao>
</opcionais_hardware>
</hardware>

2.<software>
21.<sistema_operacional>
211.<nome>Windows</nome>
212.<versao>Vista</versao>
213.<data_instalacao>
2131.<dia>16</dia>
2132.<mes>10</mes>
2133.<ano>2008</ano>
</data_instalacao>
</sistema_operacional>

214.<senha>123mudar</senha>

22.<aplicativos>
221.<nome>Br.office</nome>
222.<versao>3.0</versao>
223.<data_instalacao>
2231.<dia>16</dia>
2232.<mes>10</mes>
2233.<ano>2008</ano>
</data_instalacao>
</aplicativos>
</software>

3.<logistica>
31.<setor>DTIC</setor>
32.<responsavel>Joana Maria</responsavel>
33.<patrimonio>20333</patrimonio>
</logistica>
</computador>

------------------------------------
Nota da Moderação (Sygecom): Topico editado para colocar dentro da TAG [ CODE ]
negrao
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 183
Data de registro: 06 Jul 2004 08:38
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Re: Trabalho de C++ - Urgente

Mensagempor mhackervix » 14 Abr 2009 00:32

Amigo,

Pena que só hoje vi seu pedido hoje e pela URGÊNCIA você já deve ter resolvido. Resolvi, mais ou menos na mesma época, exatamente o mesmo trabalho para um funcionário da empresa que esta fazendo uma graduação a distancia. Porem dei uma sugestão para ele (quando é bom cobramos como consultoria, senão, fica como sugestão): "Tem certas graduações que não conferem ao profissional um status por si só, mas valem muito pelo que aprendemos e com isto nos colocamos onde nós é merecido.", ou seja, se não ralarmos para realmente aprendermos, todo o tempo e o dinheiro desprendido vão para o ralo.

É apenas um pensamento...

PS: Dei aula de programação em Linguagem C em Universidade no inicio da década de 90 e ainda me lembro da máxima: "Em C tudo é ponteiro", esta é a "beleza" da linguagem C.

att.
Mhackervix, Msc.
Avatar de usuário

mhackervix
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 105
Data de registro: 11 Fev 2008 01:06
Cidade/Estado: ES
Curtiu: 1 vez
Mens.Curtidas: 1 vez




Retornar para Outras linguagens de programação

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro