Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Problema com o relatorio funcionario


Visitante

Posts recomendados

 

Tento fazer a parte do relatório funcionário pra exibir o nome do funcionario, o cliente atendido , o produto e a quantidade, porém fica dando erro e eu n acho tal erro, podem me ajudar?

 

 

 

Program Pzim ;
var
 produtos : array[1..10, 1..3] of string;
 funcionarios : array[1..10, 1..3] of string;
 clientes : array[1..10, 1..3] of string;
 vendas : array[1..10, 1..5] of string;
 EscUm , EscDois , EscTres , i , x , y  : integer;
 resp, op,op2,op3,op4, cod1, cod2, nome1 : string;
Begin
 repeat
     clrscr;
     writeln('----Menu Principal----');
    writeln('[1] - Cadastros - ');
    writeln('[2] - vendas - ');
    writeln('[3] - relatórios - ');
    writeln('[4] - Sair - ');
    writeln('informe a opção de seu interesse');
    readln(EscUm);
    
        case EscUm of 
                1:begin

                      clrscr;                    
                        writeln('----Menu de Cadastros----');
                        writeln('[1] - Cadastrar Cliente - ');                                                                          
                        writeln('[2] - Cadastrar Funcionário - ');
                        writeln('[3] - Cadastrar Produto - ');
                        writeln('[4] - Volta para o menu principal - ');
                        writeln('informe a opção de seu interesse');
                        readln(EscDois);
                        
                            case EscDois of
                               1:begin
                                       //cadastrar clientes
                                    repeat    
                                    for i:=1 to 10 do
                                       begin
                                           if clientes[i,1] = '' then
                                           begin
                                               clrscr;
                                             writeln('----cadastro clientes----');
                                             writeln('Informe o codigo do cliente');
                                             readln(clientes[i,1]);
                                             writeln('informe o nome do cliente');
                                             readln(clientes[i,2]);
                                             writeln('informe o telefone do cliente');
                                             readln(clientes[i,3]);
                                             break;
                                           end;
                                       
                                  end;
                                  writeln('deseja realizar outro cadastro?[S/N]');
                                  readln(op);
                                  until UpCase(op) ='N';
                                    end;
                                                                            
                               2:begin
                                  //cadastrar funcionario
                                  repeat
                                    for i:=1 to 10 do
                                     begin
                                         if funcionarios[i,1] = '' then
                                         begin
                                          clrscr;
                                          writeln('----cadastro funcionario----');
                                          writeln('informe o codigo do funcionario');
                                          readln(funcionarios[i,1]);
                                          writeln('informe o nome do funcionario');
                                          readln(funcionarios[i,2]);
                                          writeln('informe o telefone do funcionario');
                                          readln(funcionarios[i,3]);
                                          break;
                                         end;
                                     end;
                                    writeln('deseja cadastrar outro funcionario? [S/N]');
                                    readln(op2);
                                        until UpCase(op2) = 'N';     
                                   end;
                                   
                                 3:begin
                                    //cadastrar produto
                                    repeat
                                    for i:=1 to 10 do
                                     begin 
                                      if produtos[i,1] = '' then
                                      begin
                                       clrscr;
                                       writeln('----cadastro produto----');
                                       writeln('informe o codigo do produto');
                                          readln(produtos[i,1]);
                                          writeln('informe o nome do produto');
                                          readln(produtos[i,2]);
                                          writeln('informe o preço do produto');
                                          readln(produtos[i,3]);
                                          break;                                          
                                      end;    
                                     end;
                                    writeln('deseja cadastrar outro produto?[S/N]');
                                        readln(op3); 
                                    until UpCase(op3)= 'N'; 
                                   end;
                                 4:begin
                                
                                     end;            
                      end;
                       
                  end;
                
                2:begin
                   //vendas
                   repeat;
                   for i:=1 to 10 do
                   begin
                    if vendas[i,1] = '' then
                    begin
                     clrscr;
                     writeln('---vendas---');
                     writeln('informe o codigo da venda');
                     readln(vendas[i,1]);
                     writeln('informe o codigo do cliente');
                     readln(vendas[i,2]);
                     writeln('informe o codigo do funcionario responsavel');
                     readln(vendas[i,3]);
                     writeln('informe o codigo do produto');
                     readln(vendas[i,4]);
                     writeln('informe a quantidade desejada');
                     readln(vendas[i,5]);
                         break;                
                    end;
                   end;
                  writeln('deseja realizar outra compra? [S/N]');
                    readln(op4); 
                  until UpCase(op4)= 'N';
                    end;
                    
                3:begin
                
                    clrscr;                    
                        writeln('----Relatorios----');
                        writeln('[1] - Relatório por clientes - ');                                                                          
                        writeln('[2] - Relatório por funcionários - ');
                        writeln('[3] - relatorio anual - ');
                        writeln('[4] - relatorio mensal - ');
                        writeln('[5] - voltar para o menu principal -');
                        writeln('Informe a opção desejada');
                        readln(EscTres);
                        
                            case EscTres of
                                    1:begin
                                            //relatorio clientes
                                            clrscr;
                                            writeln('informe o codigo do cliente em questão');
                                            readln(cod1);
                                            for i:=1 to 10 do
                                                begin
                                                 if cod1 = vendas[i,2] then
                                                     begin
                                                      for x:=1 to 10 do
                                                      begin
                                                       if cod1=clientes[x,1] then
                                                       begin
                                                          nome1:=clientes[x,2];
                                                       end;
                                                      end;
                                                      writeln(' Nome: ',nome1,' Produto: ', vendas[i,4] ,' Quantidade: ', vendas[i,5]);
                                                     end;
                                                end;
                                                break;
                                        end;
                                    2:begin
                                            //relatorio funcionarios
                                                clrscr;
                                                writeln('informe o codigo do funcionario em questão');
                                                readln(cod2);
                                                for i:=1 to 10 do
                                                    begin
                                                     if cod2 = vendas[i,3] then
                                                         begin
                                                              for y:=1 to 10 do
                                                              begin
                                                               if cod2=funcionarios[y,1] then
                                                               begin
                                                                  nome2:=funcionarios[y,2];
                                                               end;
                                                              end;
                                                              writeln(' Nome: ',nome2,' cliente atendido: ',clientes[i,2],' Produto: ', vendas[i,4] ,' Quantidade: ', vendas[i,5]);
                                                         end;
                                                    end;
                                                    break;
                                                end;
                                        end;
                                    3:begin
                                            //relatorio anual
                                        end;
                                    4:begin
                                            //relatorio mensal
                                        end;
                                    5:begin
                                        end;                
                          end;
                
                    end;
                4:begin
                        writeln('deseja sair do programa? [S/N]');
                        readln(resp);
                    end;              
        end;
            
 until Upcase(resp)='S'; 
End.
        
 

Link para o comentário
Compartilhar em outros sites

Bem vindo ao Fórum @sksisis , utilize as funções adequadas do post para postar um código...

 

 

 

tomei a liberdade de organizar um pouco seu código

 

program Pzim;

{$APPTYPE CONSOLE}

uses
  SysUtils, DateUtils;

Type
  Tprodutos = record
    codigo : integer;
    nome   : string;
    preco  : real;
end;

type
  TPeople = record
   codigo : integer;
   nome : string;
   telefone : string;
end;

Type
  Tvenda = record
    codigo : integer;
    cod_client : integer;
    cod_func   : integer;
    cod_produto : integer;
    qtd : real;
    Data_Venda : TDateTime;
end;



var
  Produtos : array of Tprodutos;
  Funcionarios : array of TPeople;
  Clientes : array of TPeople;
  Vendas : array of Tvenda;





 procedure Cadastros;
  const
    text_display : array[1..2] of string = ('cliente','funcionário');
 var
   EscDois : integer;
   var op : char;

   New_People : ^TPeople;
 begin
   //clrscr;
   writeln('----Menu de Cadastros----');
   writeln('[1] - Cadastrar Cliente - ');
   writeln('[2] - Cadastrar Funcionário - ');
   writeln('[3] - Cadastrar Produto - ');
   writeln('[4] - Volta para o menu principal - ');
   writeln('informe a opção de seu interesse');
   readln(EscDois);


   Repeat // laço para cadastrar novos clientes, funcionários, ou produtos

       if EscDois in [1,2] then  // cadastrar cliente ou funcionário
       begin
           if EscDois = 1 then //adiciona um novo cliente;
           begin
              SetLength(Clientes,length(Clientes)+1);
              New_People := @clientes[high(clientes)]; // passando a um ponteiro o ultimo cliente adicionado
           end
           else
           begin  //adiciona um novo funcionario;
             SetLength(Funcionarios,length(Funcionarios)+1);
             New_People := @Funcionarios[high(Funcionarios)]; //passando a um ponteiro o ultimo funcionario adicionado
          end;

          with  New_People^ do //
          begin
            //clrscr;
            writeln('----cadastro', text_display[EscDois] ,' ----');
            writeln('Informe o codigo do ', text_display[EscDois]);
            readln(codigo);
            writeln('informe o nome do ', text_display[EscDois]);
            readln(nome);
            writeln('informe o telefone do ', text_display[EscDois]);
            readln(telefone);
          end;


       end
       else
       if EscDois = 3 then  // cadastro produto
       begin
        SetLength(Produtos,length(Produtos)+1); //adiciona um produto
        with Produtos[high( produtos)] do
        begin
          //clrscr;
          writeln('----cadastro produto----');
          writeln('informe o codigo do produto');
          readln(codigo);
          writeln('informe o nome do produto');
          readln(nome);
          writeln('informe o preço do produto');
          readln(preco);
        end;

       end;



   if EscDois <= 3 then
   begin
     writeln('deseja cadastrar novamente?[S/N]');
     readln(op);
   end
   else
   op := 'N';
   until UpCase(op)= 'N';
end;


 procedure Procedure_vendas;
 var
   op4 : char;
 begin
    repeat;
      SetLength(vendas,length(vendas)+1);
      with vendas[high(vendas)] do
      begin
                     writeln('---vendas---');
                     writeln('informe o codigo da venda');
                     readln(codigo);
                     writeln('informe o codigo do cliente');
                     readln(cod_client);
                     writeln('informe o codigo do funcionario responsavel');
                     readln(cod_func);
                     writeln('informe o codigo do produto');
                     readln(cod_produto);
                     writeln('informe a quantidade desejada');
                     readln(qtd);

                     Data_Venda := now;
     end;
     writeln('deseja realizar outra compra? [S/N]');
     readln(op4);
      until UpCase(op4)= 'N';
end;




function Return_Produto(cod : Integer): Tprodutos;
var
  i : integer;
begin
  Result.codigo := -1;
  for i := low(produtos) to high(produtos) do
  if Produtos[i].codigo = cod then
  begin
  Result := produtos[i];
  break;
  end;
  if Result.codigo = -1 then
  Writeln('Código inválido');
end;


function Return_People(cod : Integer; Base_array : array of TPeople): TPeople;
var
  i : integer;
begin
  Result.codigo := -1;
  for i := low(Base_array) to high(Base_array) do
  if Base_array[i].codigo = cod then
  begin
  Result := Base_array[i];
  break;
  end;
  if Result.codigo = -1 then
  Writeln('Código inválido');
end;






procedure procedure_relatorio;
var
  EscTres : integer;

  Funcionario,Cliente : TPeople;
  item   : Tprodutos;



  cod : integer;
  i : integer;

  mes, ano : integer;
begin
    //clrscr;
    writeln('----Relatorios----');
    writeln('[1] - Relatório por clientes - ');
    writeln('[2] - Relatório por funcionários - ');
    writeln('[3] - relatorio anual - ');
    writeln('[4] - relatorio mensal - ');
    writeln('[5] - voltar para o menu principal -');
    writeln('Informe a opção desejada');
    readln(EscTres);

   case EscTres of
   1:begin //relatorio clientes

      writeln('informe o codigo do cliente em questão');
      readln(cod);

      // encontrar o cliente
      Cliente :=  Return_People(cod,Clientes);

      for i := low(vendas) to high(vendas) do
      if Vendas[i].cod_client = cod then
      begin
        item := Return_Produto(vendas[i].codigo); // item vendido
        writeln(' Nome: ',Cliente.nome,' Produto: ', item.nome ,' Quantidade: ', vendas[i].qtd);
      end;



   end;
   2:begin    //relatorio funcionarios
   //clrscr;
    writeln('informe o codigo do funcionario em questão');
    readln(cod);

    // encontrar o funcionário
    Funcionario :=  Return_People(cod,Funcionarios);



      for i := low(vendas) to high(vendas) do
      if Vendas[i].cod_func = cod then
      begin
        item := Return_Produto(vendas[i].codigo); // item vendido
        Cliente := Return_People(vendas[i].cod_client,Clientes);  // localizar o cliente

        writeln(' Nome: ',Funcionario.nome,' cliente atendido: ',cliente.nome,' Produto: ', item.nome ,' Quantidade: ', vendas[i].qtd);
      end;


      end; // case = 2
   end; // case

    if EscTres in [3,4] then  // relatorio por mes ou ano
    begin
          writeln('informe o ano');
          readln(ano);

          if EscTres = 4 then
          begin
              writeln('informe o mês');
              readln(mes);
          end;


          for i := low(vendas) to high(Vendas) do
          if YearOf(Vendas[i].Data_Venda) = ano then
          begin
              if EscTres = 4 then // relatorio por mes, se o mes for diferente, continua o loop
              if MonthOf(Vendas[i].Data_Venda) <> mes then
              continue;


        item := Return_Produto(vendas[i].codigo); // item vendido
        Cliente := Return_People(vendas[i].cod_client,Clientes);  // localizar o cliente
        Funcionario := Return_People(vendas[i].cod_func,Funcionarios);  // localizar o funcionário

        writeln(' Nome: ',Funcionario.nome,' cliente atendido: ',cliente.nome,' Produto: ', item.nome ,' Quantidade: ', vendas[i].qtd, ' Data: ',Datetostr(vendas[i].Data_Venda));

          end;
   end;
end;

var
  EscUm : Integer;

  resp : char;
  
Begin
   // inicializar as variáveis
   SetLength(Produtos,0);
   SetLength(Clientes,0);
   SetLength(Funcionarios,0);

   resp := 'n';
   
 repeat
   //clrscr;
    writeln('----Menu Principal----');
    writeln('[1] - Cadastros - ');
    writeln('[2] - vendas - ');
    writeln('[3] - relatórios - ');
    writeln('[4] - Sair - ');
    writeln('informe a opção de seu interesse');



    readln(EscUm);
       case EscUm of
                1: cadastros;
                2: Procedure_vendas;
                3: procedure_relatorio;
                4:begin
                        writeln('deseja sair do programa? [S/N]');
                        readln(resp);
                  end;
        end;

 until Upcase(resp)='S';

End.

 

 

 

 

peço desculpas por usar, no automático, alguns comandos por ponteiro... não sei se nessa parte estou atrapalhando sua tragetória...


Evidente que é necessário vários procedimentos de verificação, e também, perceba que cada venda só suporta um produto, portanto, uma sugestão é você criar mais um array com:

Codigo_venda

codigo_produto

qtd

preco

 

 

 

acredito que é preferivel você perguntar se há dúvidas do que eu explicar linha por linha...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...