Ir ao conteúdo

Pascal/Delphi Problema com o relatorio funcionario


Posts recomendados

Postado

 

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.
        
 

Postado

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

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!