WallHero

Retroalimentacion Taller01-01

Sep 10th, 2020
886
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. unit Articulos;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Grids,
  9.   Buttons;
  10.  
  11. type
  12.  
  13.   { TfrmArticulo }
  14.  
  15.   TfrmArticulo = class(TForm)
  16.     BitBtnAgregar: TBitBtn;
  17.     BitBtnBuscar: TBitBtn;
  18.     SALIR: TButton;
  19.     cbxtipoarticulo: TComboBox;
  20.     edtbuscar: TEdit;
  21.     edtcantA: TEdit;
  22.     edtcantB: TEdit;
  23.     edtcantC: TEdit;
  24.     edtcodigo: TEdit;
  25.     edtprecunit: TEdit;
  26.     edtstock: TEdit;
  27.     edtstockminim: TEdit;
  28.     grdArticulos: TStringGrid;
  29.     Label1: TLabel;
  30.     Label2: TLabel;
  31.     Label3: TLabel;
  32.     Label4: TLabel;
  33.     Label5: TLabel;
  34.     Label6: TLabel;
  35.     Label7: TLabel;
  36.     Label8: TLabel;
  37.     procedure BitBtnAgregarClick(Sender: TObject);
  38.     procedure BitBtnBuscarClick(Sender: TObject);
  39.     procedure FormCreate(Sender: TObject);
  40.     procedure FormShow(Sender: TObject);
  41.     procedure SALIRClick(Sender: TObject);
  42.   private
  43.  
  44.   public
  45.  
  46.   end;
  47.   type
  48.   String20 = String[20]; //Tipo String con 20 caracteres
  49.   //definimos el registro articulos
  50.   TArticulos = record
  51.      //declaramos los campos de este registro articulos
  52.      codigo: integer;
  53.      preciounitario: Double;
  54.      stock: integer;
  55.      tipoArticulo:String;
  56.   end;
  57.  
  58.   //creamos el vector de registros de articulos
  59.   TVectorArticulos = Array[1..100] of TArticulos;
  60.  
  61. var
  62.   frmArticulo: TfrmArticulo;
  63.   articulo:TArticulos;
  64.   vectorArticulos: TVectorArticulos; //variable vector de productos
  65.   N: integer;  // N longitud del vector
  66. implementation
  67.  
  68. {$R *.lfm}
  69.  
  70.  
  71.  //PROCEDIMIENTO PARA CARGAR EL REGISTRO CON LOS DATOS INGRESADOS EM EL FORMULARIO
  72. //PASO DE PARAMETROS POR REFERENCIA
  73.  
  74. procedure leerArticulo(var articulo: TArticulos);
  75. begin
  76.      articulo.codigo := StrToInt(frmArticulo.edtcodigo.Text); //el registro articulo en el campo codigo
  77.      articulo.preciounitario:=StrToFloat(frmArticulo.edtprecunit.Text);  //el registro articulo en el campo precio unitario
  78.      articulo.stock := StrToInt(frmArticulo.edtstock.Text); //el registro articulo en el campo stock
  79.      articulo.tipoArticulo:=frmArticulo.cbxtipoarticulo.Text;  //el registro articulo en el campo tipo articulo
  80. end;
  81.  
  82.  
  83.  
  84. //PROCEDIMIENTO PARA AGREGAR UN REGISTRO YA CARGADO A EL VECTOR DE REGISTROS DE ARITUCLOS
  85. procedure agregarArticulo(articulo:TArticulos;
  86.              var vectorArticulos: TVectorArticulos; var N: integer);
  87. begin
  88.      //AUMENTAMOS EN 1 LA POSICION DEL VECTOR Y ALMACENAMOS EL REGISTRO
  89.      N := N + 1;
  90.      vectorArticulos[N] := articulo;
  91. end;
  92.          function validarObligatorios(): boolean;
  93. var
  94.    valido: boolean;
  95. begin
  96.      valido := true;
  97.      if(frmArticulo.edtcodigo.Text = '') then
  98.         valido := false;
  99.      if(frmArticulo.edtprecunit.Text = '') then
  100.         valido := false;
  101.      if(frmArticulo.edtstock.Text = '') then
  102.         valido := false;
  103.       if(frmArticulo.cbxtipoarticulo.Text = '') then
  104.         valido := false;
  105.      validarObligatorios := valido;
  106.  end;
  107.  
  108.  
  109.   //FUNCION PARA BUSCAR SI ES QUE YA HAY OTRO PRODUCTO CON EL MISMO CODIGO
  110. function existeProducto(codigo: String; vectorArticulos: TVectorArticulos; N: integer): boolean;
  111. var
  112.    i, codigoInteger,codigoError:integer;
  113.    existe : boolean;
  114. begin
  115.      //val(string recibio,integer,codigo)
  116.      val(codigo,codigoInteger, codigoError);
  117.      existe := false;
  118.      i := 1;
  119.      while ( i <= N) and not(existe) do
  120.      begin
  121.          if(codigoInteger = vectorArticulos[i].codigo) then
  122.             existe := true;
  123.          i := i + 1;
  124.      end;
  125.      existeProducto := existe;
  126. end;
  127.  procedure stockMinimo(vectorArticulos: TVectorArticulos; N: integer);
  128.      var
  129.         i,minimo:integer;
  130.    begin
  131.         minimo:=vectorArticulos[1].stock;
  132.  
  133.           for i:=2 to N do
  134.           begin
  135.              if(vectorArticulos[i].stock<minimo)and(vectorArticulos[i].stock<>0) then
  136.                  minimo:=vectorArticulos[i].stock;
  137.  
  138.           end;
  139.  
  140.          frmArticulo.edtstockminim.Text:=IntToStr(minimo);
  141.  
  142.    end;
  143.  
  144.       //PROCEDIMIENTO QUE PERMITE  CONTAR Y MOSTRAR LA CANTIDAD DE LOS DISTINTOS ARTICULOS INGRESADOS
  145.       procedure contarArticulos (vectorArticulos: TVectorArticulos; N: integer);
  146.    var
  147.        contA,contB,contC,i:integer;
  148.  
  149.  
  150.       begin
  151.           contA:=0;
  152.           contB:=0;
  153.           contC:=0;
  154.            for i:= 1 to N do
  155.            begin
  156.  
  157.                if (vectorArticulos[i].tipoArticulo = 'A') then
  158.                   begin
  159.                        contA:=contA+1;//Solo cambiar la suma del stock por 1.
  160.                   end
  161.               else
  162.                     if(vectorArticulos[i].tipoArticulo ='B')then
  163.                        begin
  164.                            contB:=contB+1;//Solo cambiar la suma del stock por 1.
  165.                       end
  166.               else
  167.                    if (vectorArticulos[i].tipoArticulo ='C') then
  168.                        begin
  169.                           contC:=contC+1;//Solo cambiar la suma del stock por 1.
  170.                       end;
  171.            end;
  172.           frmArticulo.edtcantA.Text:=IntToStr(contA);
  173.           frmArticulo.edtcantB.Text:=IntToStr(contB);
  174.           frmArticulo.edtcantC.Text:=IntToStr(contC);
  175.  
  176.       end;
  177.  
  178.  
  179. //PRCEDIMIENTO PARA MOSTRAR POR GRILLA EL VECTOR DE ARTICULOS
  180.  
  181. procedure mostrarArticulos(vectorArticulos: TVectorArticulos; N: integer);
  182. var
  183.    i, fila: integer;
  184.    codigoString, precioString,stockString: String20;
  185.  
  186. begin
  187.   frmArticulo.grdArticulos.RowCount := 1;
  188.   for i:= 1 to N do
  189.   begin
  190.      frmArticulo.grdArticulos.RowCount := frmArticulo.grdArticulos.RowCount + 1;
  191.       fila := frmArticulo.grdArticulos.RowCount - 1;
  192.       Str(vectorArticulos[i].codigo, codigoString);
  193.       Str(vectorArticulos[i].stock, stockString);
  194.       Str(vectorArticulos[i]. preciounitario:7:2, precioString);
  195.  
  196.      frmArticulo.grdArticulos.Cells[1, fila] := codigoString;
  197.  
  198.       frmArticulo.grdArticulos.Cells[2, fila] := precioString;
  199.       frmArticulo.grdArticulos.Cells[3, fila] := vectorArticulos[i].tipoArticulo;
  200.  
  201.       frmArticulo.grdArticulos.Cells[4, fila] := stockString;
  202.   end;
  203.  
  204.  end;
  205.  
  206. { TfrmArticulo }
  207.  
  208. procedure TfrmArticulo.FormCreate(Sender: TObject);
  209. begin
  210.  
  211. end;
  212.  
  213. procedure TfrmArticulo.FormShow(Sender: TObject);
  214. begin
  215.  
  216. end;
  217.  
  218. procedure TfrmArticulo.SALIRClick(Sender: TObject);
  219. begin
  220.   close;
  221. end;
  222.  //BOTON AGREGAR
  223. procedure TfrmArticulo.BitBtnAgregarClick(Sender: TObject);
  224. var
  225.    articulo:TArticulos;
  226.  
  227. begin
  228.    if(not validarObligatorios()) then
  229.         ShowMessage('Debe ingresar todos los campos...')
  230.      else if (existeProducto(edtCodigo.Text, vectorArticulos, N)) then
  231.         ShowMessage('El producto ya existe...')
  232.      else
  233.           begin
  234.          leerArticulo(articulo);
  235.          agregarArticulo(articulo, vectorArticulos, N);
  236.          mostrarArticulos(vectorArticulos,N);
  237.          contarArticulos (vectorArticulos,N);
  238.          stockMinimo(vectorArticulos,N);
  239.  
  240. end;
  241.  
  242.  end;
  243.  
  244. function buscarArticulo(codigoingr:integer ;vectorArticulos: TVectorArticulos; N: integer):boolean;
  245. var
  246.      i:integer;
  247.      encontrado:boolean;
  248.  
  249.  
  250. begin
  251.      encontrado:=false;
  252.       i := 1;
  253.     while ( i <= N) and not(encontrado)do
  254.      begin
  255.       if(vectorArticulos[i].codigo=codigoingr)then
  256.            encontrado:=true;
  257.           i:=i+1;
  258.      end;
  259.  
  260.  
  261.      buscarArticulo:= encontrado;
  262. end;
  263.  
  264.  
  265.  
  266.   procedure limpiarGrilla( N: integer);
  267.   begin
  268.     frmArticulo.grdArticulos.ClearRows;   //Function que limpia.
  269.       //frmArticulo.grdArticulos.RowCount := 1;
  270.  
  271.   end;
  272.  
  273.  
  274.  
  275.  
  276.       function devolverPosEncontrado( codigoingres:integer;vectorArticulos: TVectorArticulos; N: integer):integer;
  277.       var
  278.           i, posic: integer;
  279.           encontrado:boolean;
  280.       begin
  281.       posic:= -1; //Para retornar el -1 en caso de no encontrarse, dado que solamente este se asignará a i si encuentra el artículo.
  282.       encontrado:=false;
  283.       i := 1;
  284.     while ( i <= N) and not(encontrado)  do
  285.      begin
  286.       if(vectorArticulos[i].codigo=codigoingres)then
  287.         begin
  288.            posic:=i;
  289.            encontrado:=true;
  290.          end
  291.           else
  292.           i:=i+1;
  293.      end;
  294.  
  295.  
  296.      devolverPosEncontrado:=posic;
  297.       end;
  298.  
  299.  
  300.  
  301.  
  302.  
  303. procedure  mostrarArticEncontrado(pos:integer;vectorArticulos: TVectorArticulos;N:integer);
  304.      var
  305.      fila: integer;
  306.      codigoString, precioString,stockString: String20;
  307.           begin
  308.       frmArticulo.grdArticulos.RowCount := 1;
  309.  
  310.       frmArticulo.grdArticulos.RowCount := frmArticulo.grdArticulos.RowCount + 1;
  311.       fila := frmArticulo.grdArticulos.RowCount - 1;
  312.        Str(vectorArticulos[pos].codigo, codigoString);
  313.       Str(vectorArticulos[pos].stock, stockString);
  314.       Str(vectorArticulos[pos]. preciounitario:7:2, precioString);
  315.            
  316.      frmArticulo.grdArticulos.Cells[1, fila] := codigoString;
  317.  
  318.       frmArticulo.grdArticulos.Cells[2, fila] := precioString;
  319.       frmArticulo.grdArticulos.Cells[3, fila] := vectorArticulos[pos].tipoArticulo;
  320.       frmArticulo.grdArticulos.Cells[4, fila] := stockString;
  321.  
  322.           end;
  323.  
  324.  
  325.  
  326.  
  327. procedure TfrmArticulo.BitBtnBuscarClick(Sender: TObject);
  328. var
  329.   codigoingres,posicion:integer;
  330. begin
  331.  
  332.     codigoingres:=StrToInt(edtbuscar.Text);
  333.     posicion:= devolverPosEncontrado(codigoingres,vectorArticulos,N );     // Guardamos la posición y abajo cambiamos todo el buscar por otra consulta, haciendo solo un O(N) y no 2.
  334.          if ( posicion = -1) then
  335.          ShowMessage('NO SE HA ENCONTRADO UN ARTICULO CON EL CODIGO INGRESADO')
  336.          else
  337.               begin
  338.  
  339.                    limpiarGrilla(N);
  340.                    mostrarArticEncontrado(posicion,vectorArticulos,N);
  341.               end;
  342.  
  343.  
  344.  
  345.  
  346. end;
  347.  
  348. end.
  349.  
RAW Paste Data