Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Articulos;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Grids,
- Buttons;
- type
- { TfrmArticulo }
- TfrmArticulo = class(TForm)
- BitBtnAgregar: TBitBtn;
- BitBtnBuscar: TBitBtn;
- SALIR: TButton;
- cbxtipoarticulo: TComboBox;
- edtbuscar: TEdit;
- edtcantA: TEdit;
- edtcantB: TEdit;
- edtcantC: TEdit;
- edtcodigo: TEdit;
- edtprecunit: TEdit;
- edtstock: TEdit;
- edtstockminim: TEdit;
- grdArticulos: TStringGrid;
- Label1: TLabel;
- Label2: TLabel;
- Label3: TLabel;
- Label4: TLabel;
- Label5: TLabel;
- Label6: TLabel;
- Label7: TLabel;
- Label8: TLabel;
- procedure BitBtnAgregarClick(Sender: TObject);
- procedure BitBtnBuscarClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure FormShow(Sender: TObject);
- procedure SALIRClick(Sender: TObject);
- private
- public
- end;
- type
- String20 = String[20]; //Tipo String con 20 caracteres
- //definimos el registro articulos
- TArticulos = record
- //declaramos los campos de este registro articulos
- codigo: integer;
- preciounitario: Double;
- stock: integer;
- tipoArticulo:String;
- end;
- //creamos el vector de registros de articulos
- TVectorArticulos = Array[1..100] of TArticulos;
- var
- frmArticulo: TfrmArticulo;
- articulo:TArticulos;
- vectorArticulos: TVectorArticulos; //variable vector de productos
- N: integer; // N longitud del vector
- implementation
- {$R *.lfm}
- //PROCEDIMIENTO PARA CARGAR EL REGISTRO CON LOS DATOS INGRESADOS EM EL FORMULARIO
- //PASO DE PARAMETROS POR REFERENCIA
- procedure leerArticulo(var articulo: TArticulos);
- begin
- articulo.codigo := StrToInt(frmArticulo.edtcodigo.Text); //el registro articulo en el campo codigo
- articulo.preciounitario:=StrToFloat(frmArticulo.edtprecunit.Text); //el registro articulo en el campo precio unitario
- articulo.stock := StrToInt(frmArticulo.edtstock.Text); //el registro articulo en el campo stock
- articulo.tipoArticulo:=frmArticulo.cbxtipoarticulo.Text; //el registro articulo en el campo tipo articulo
- end;
- //PROCEDIMIENTO PARA AGREGAR UN REGISTRO YA CARGADO A EL VECTOR DE REGISTROS DE ARITUCLOS
- procedure agregarArticulo(articulo:TArticulos;
- var vectorArticulos: TVectorArticulos; var N: integer);
- begin
- //AUMENTAMOS EN 1 LA POSICION DEL VECTOR Y ALMACENAMOS EL REGISTRO
- N := N + 1;
- vectorArticulos[N] := articulo;
- end;
- function validarObligatorios(): boolean;
- var
- valido: boolean;
- begin
- valido := true;
- if(frmArticulo.edtcodigo.Text = '') then
- valido := false;
- if(frmArticulo.edtprecunit.Text = '') then
- valido := false;
- if(frmArticulo.edtstock.Text = '') then
- valido := false;
- if(frmArticulo.cbxtipoarticulo.Text = '') then
- valido := false;
- validarObligatorios := valido;
- end;
- //FUNCION PARA BUSCAR SI ES QUE YA HAY OTRO PRODUCTO CON EL MISMO CODIGO
- function existeProducto(codigo: String; vectorArticulos: TVectorArticulos; N: integer): boolean;
- var
- i, codigoInteger,codigoError:integer;
- existe : boolean;
- begin
- //val(string recibio,integer,codigo)
- val(codigo,codigoInteger, codigoError);
- existe := false;
- i := 1;
- while ( i <= N) and not(existe) do
- begin
- if(codigoInteger = vectorArticulos[i].codigo) then
- existe := true;
- i := i + 1;
- end;
- existeProducto := existe;
- end;
- procedure stockMinimo(vectorArticulos: TVectorArticulos; N: integer);
- var
- i,minimo:integer;
- begin
- minimo:=vectorArticulos[1].stock;
- for i:=2 to N do
- begin
- if(vectorArticulos[i].stock<minimo)and(vectorArticulos[i].stock<>0) then
- minimo:=vectorArticulos[i].stock;
- end;
- frmArticulo.edtstockminim.Text:=IntToStr(minimo);
- end;
- //PROCEDIMIENTO QUE PERMITE CONTAR Y MOSTRAR LA CANTIDAD DE LOS DISTINTOS ARTICULOS INGRESADOS
- procedure contarArticulos (vectorArticulos: TVectorArticulos; N: integer);
- var
- contA,contB,contC,i:integer;
- begin
- contA:=0;
- contB:=0;
- contC:=0;
- for i:= 1 to N do
- begin
- if (vectorArticulos[i].tipoArticulo = 'A') then
- begin
- contA:=contA+1;//Solo cambiar la suma del stock por 1.
- end
- else
- if(vectorArticulos[i].tipoArticulo ='B')then
- begin
- contB:=contB+1;//Solo cambiar la suma del stock por 1.
- end
- else
- if (vectorArticulos[i].tipoArticulo ='C') then
- begin
- contC:=contC+1;//Solo cambiar la suma del stock por 1.
- end;
- end;
- frmArticulo.edtcantA.Text:=IntToStr(contA);
- frmArticulo.edtcantB.Text:=IntToStr(contB);
- frmArticulo.edtcantC.Text:=IntToStr(contC);
- end;
- //PRCEDIMIENTO PARA MOSTRAR POR GRILLA EL VECTOR DE ARTICULOS
- procedure mostrarArticulos(vectorArticulos: TVectorArticulos; N: integer);
- var
- i, fila: integer;
- codigoString, precioString,stockString: String20;
- begin
- frmArticulo.grdArticulos.RowCount := 1;
- for i:= 1 to N do
- begin
- frmArticulo.grdArticulos.RowCount := frmArticulo.grdArticulos.RowCount + 1;
- fila := frmArticulo.grdArticulos.RowCount - 1;
- Str(vectorArticulos[i].codigo, codigoString);
- Str(vectorArticulos[i].stock, stockString);
- Str(vectorArticulos[i]. preciounitario:7:2, precioString);
- frmArticulo.grdArticulos.Cells[1, fila] := codigoString;
- frmArticulo.grdArticulos.Cells[2, fila] := precioString;
- frmArticulo.grdArticulos.Cells[3, fila] := vectorArticulos[i].tipoArticulo;
- frmArticulo.grdArticulos.Cells[4, fila] := stockString;
- end;
- end;
- { TfrmArticulo }
- procedure TfrmArticulo.FormCreate(Sender: TObject);
- begin
- end;
- procedure TfrmArticulo.FormShow(Sender: TObject);
- begin
- end;
- procedure TfrmArticulo.SALIRClick(Sender: TObject);
- begin
- close;
- end;
- //BOTON AGREGAR
- procedure TfrmArticulo.BitBtnAgregarClick(Sender: TObject);
- var
- articulo:TArticulos;
- begin
- if(not validarObligatorios()) then
- ShowMessage('Debe ingresar todos los campos...')
- else if (existeProducto(edtCodigo.Text, vectorArticulos, N)) then
- ShowMessage('El producto ya existe...')
- else
- begin
- leerArticulo(articulo);
- agregarArticulo(articulo, vectorArticulos, N);
- mostrarArticulos(vectorArticulos,N);
- contarArticulos (vectorArticulos,N);
- stockMinimo(vectorArticulos,N);
- end;
- end;
- function buscarArticulo(codigoingr:integer ;vectorArticulos: TVectorArticulos; N: integer):boolean;
- var
- i:integer;
- encontrado:boolean;
- begin
- encontrado:=false;
- i := 1;
- while ( i <= N) and not(encontrado)do
- begin
- if(vectorArticulos[i].codigo=codigoingr)then
- encontrado:=true;
- i:=i+1;
- end;
- buscarArticulo:= encontrado;
- end;
- procedure limpiarGrilla( N: integer);
- begin
- frmArticulo.grdArticulos.ClearRows; //Function que limpia.
- //frmArticulo.grdArticulos.RowCount := 1;
- end;
- function devolverPosEncontrado( codigoingres:integer;vectorArticulos: TVectorArticulos; N: integer):integer;
- var
- i, posic: integer;
- encontrado:boolean;
- begin
- posic:= -1; //Para retornar el -1 en caso de no encontrarse, dado que solamente este se asignará a i si encuentra el artículo.
- encontrado:=false;
- i := 1;
- while ( i <= N) and not(encontrado) do
- begin
- if(vectorArticulos[i].codigo=codigoingres)then
- begin
- posic:=i;
- encontrado:=true;
- end
- else
- i:=i+1;
- end;
- devolverPosEncontrado:=posic;
- end;
- procedure mostrarArticEncontrado(pos:integer;vectorArticulos: TVectorArticulos;N:integer);
- var
- fila: integer;
- codigoString, precioString,stockString: String20;
- begin
- frmArticulo.grdArticulos.RowCount := 1;
- frmArticulo.grdArticulos.RowCount := frmArticulo.grdArticulos.RowCount + 1;
- fila := frmArticulo.grdArticulos.RowCount - 1;
- Str(vectorArticulos[pos].codigo, codigoString);
- Str(vectorArticulos[pos].stock, stockString);
- Str(vectorArticulos[pos]. preciounitario:7:2, precioString);
- frmArticulo.grdArticulos.Cells[1, fila] := codigoString;
- frmArticulo.grdArticulos.Cells[2, fila] := precioString;
- frmArticulo.grdArticulos.Cells[3, fila] := vectorArticulos[pos].tipoArticulo;
- frmArticulo.grdArticulos.Cells[4, fila] := stockString;
- end;
- procedure TfrmArticulo.BitBtnBuscarClick(Sender: TObject);
- var
- codigoingres,posicion:integer;
- begin
- codigoingres:=StrToInt(edtbuscar.Text);
- 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.
- if ( posicion = -1) then
- ShowMessage('NO SE HA ENCONTRADO UN ARTICULO CON EL CODIGO INGRESADO')
- else
- begin
- limpiarGrilla(N);
- mostrarArticEncontrado(posicion,vectorArticulos,N);
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement