PROGRAM Junio_2011 ; USES Crt, SysUtils ; CONST iMAX_COMP_PEDIDO = 20 ; TYPE tsCadAnios = STRING [4] ; tsCadCodigo = STRING [10] ; tsCadFechas = STRING [10] ; tsCadNombres = STRING [30] ; PROCEDURE ListarPedidosCliente (sCIF_Cliente : tsCadCodigo ; sNomFichPedidos: tsCadNombres) ; VAR fbrgFich : tfbrgFicherosPedidos ; rgDatosPedido : trgDatosPedidos ; rTotalPedidos, rTotalEnviados, rTotalIngresos : Real ; BEGIN Assign (fbrgFich, sNomFichPedidos) ; Reset (fbrgFich) ; trgProductoPedido = RECORD sCod_Producto :tsCadCodigo ; iCantidad : Integer ; rPrecio : Real ; END ; targListaProductosPedido = ARRAY [1..iMAX_COMP_PEDIDO] OF trgProductoPedido ; trgDatosPedidos = RECORD iCod_Pedido sCIF argListaProductos iNum_Prods rImporte sFecha_Pedido, sFecha_Envio, sFecha_Ingreso END ; : : : : : Integer ; tsCadCodigo ; targListaProductosPedido ; Integer ; Real ; rTotalPedidos := 0 ; rTotalEnviados := 0 ; rTotalIngresos := 0 ; Writeln ; Writeln ('Cod. Pedido':12, 'Fecha Pedido':13, 'Fecha Envio':13, 'Fecha Ingreso':13) ; Writeln ('---------------------------------------------------') ; WHILE NOT EOF (fbrgFich) DO BEGIN Read (fbrgFich, rgDatosPedido) ; WITH rgDatosPedido DO IF sCIF = sCIF_Cliente THEN BEGIN Writeln (iCod_Pedido : 12, sFecha_Pedido:13, sFecha_Envio:13, sFecha_Ingreso:13) ; : tsCadFechas tfbrgFicherosPedidos = FILE OF trgDatosPedidos ; rTotalPedidos := rTotalPedidos + rImporte ; VAR cOpcion, cEspera sNomFichPedidos sCIF_Cliente iCodigo_Pedido sFecha_Ingreso_Pedido sCod_Producto_Contar iTotal rImporteIngresado sAnio : : : : : : : : : IF sFecha_Envio <> 'PENDIENTE' THEN BEGIN rTotalEnviados := rTotalEnviados + rImporte ; Char ; tsCadNombres ; tsCadCodigo ; Integer ; tsCadFechas ; tsCadCodigo ; Integer ; Real ; tsCadAnios ; IF sFecha_Ingreso <> 'PENDIENTE' THEN rTotalIngresos := rTotalIngresos + rImporte ; END ; END ; END ; Writeln Writeln Writeln Writeln FUNCTION fncMenu : Char; VAR cOpcion : Char ; BEGIN Clrscr; Writeln (' -------------- Gestión de pedidos --------------------'); Writeln ; WriteLn (' 1. Listar pedidos de un cliente') ; WriteLn (' 2. Modificar un pedido: recibido el ingreso') ; WriteLn (' 3. Crear fichero con los pedidos PENDIENTES') ; WriteLn (' 4. Unidades vendidas de un producto en un año') ; Writeln (' 0. Finalizar'); Writeln ; Write (' Pulsa la tecla de la opcion: ') ; REPEAT cOpcion := UpCase (Readkey) ; UNTIL (cOpcion>='0') AND (cOpcion<='4') ; Writeln (cOpcion); fncMenu:=cOpcion; END; { fin fncMenu } Informática 3/Junio/2011 Close END ; ; ('Total pedidos: ', rTotalPedidos:0:2, ' euros') ; ('Total envios: ', rTotalEnviados:0:2, ' euros') ; ('Total ingresos: ', rTotalIngresos:0:2, ' euros') ; (fbrgFich) ; PROCEDURE ModificarFechaIngreso (iCodigo_Pedido_Modificar sFecha_Ingreso_Pedido sNomFichPedidos rImporteIngresado VAR fbrgFich : tfbrgFicherosPedidos ; rgDatosPedido : trgDatosPedidos ; boEncontrado : Boolean ; BEGIN Assign (fbrgFich, sNomFichPedidos) ; Reset (fbrgFich) ; 1 Informática 3/Junio/2011 : : : : Integer ; tsCadFechas ; tsCadNombres ; Real) ; 2 boEncontrado := FALSE ; FUNCTION fniBuscarProductosPedido ( sCod_Producto_Contar : tsCadCodigo ; CONST argListaProductos : targListaProductosPedido ; iProds_Pedido : Integer) : Integer ; VAR i : Integer ; boEncontrado: Boolean ; WHILE NOT boEncontrado AND NOT EOF (fbrgFich) DO BEGIN Read (fbrgFich, rgDatosPedido) ; WITH rgDatosPedido DO IF (iCod_Pedido = iCodigo_Pedido_Modificar) THEN IF (sFecha_Ingreso = 'PENDIENTE') AND (rImporte = rImporteIngresado) THEN BEGIN boEncontrado := TRUE ; BEGIN boEncontrado := FALSE ; i := sFecha_Ingreso := sFecha_Ingreso_Pedido ; WHILE NOT boEncontrado AND (i <= iProds_Pedido) DO IF argListaProductos[i].sCod_Producto = sCod_Producto_Contar THEN boEncontrado := TRUE ELSE i := i + 1; Seek (fbrgFich, FilePos (fbrgFich) - 1 ) ; Write (fbrgFich, rgDatosPedido) ; END ; END ; IF boEncontrado THEN fniBuscarProductosPedido := argListaProductos[i].iCantidad ELSE fniBuscarProductosPedido := 0 END ; IF NOT boEncontrado THEN WriteLn ('ERROR: alguno de los datos leídos no es correcto') Close END ; 1; (fbrgFich) ; FUNCTION PROCEDURE CrearFicheroPedidosPendientes (sNomFichPedidos: tsCadNombres) ; VAR fbrgFich, fbrgFichNoEnviados, fbrgFichNoCobrados: tfbrgFicherosPedidos ; rgDatosPedido : trgDatosPedidos ; BEGIN Assign (fbrgFich, sNomFichPedidos) ; Reset (fbrgFich) ; fniContarProductos (sCod_Producto_Contar : tsCadCodigo ; sAnio : tsCadAnios ; sNomFichPedidos : tsCadNombres) : Integer ; VAR fbrgFich : tfbrgFicherosPedidos ; rgDatosPedido : trgDatosPedidos ; iTotal : Integer ; BEGIN iTotal := 0 ; Assign (fbrgFichNoEnviados, 'NO_ENVIADOS.DAT') ; Rewrite (fbrgFichNoEnviados) ; Assign (fbrgFich, sNomFichPedidos) ; Reset (fbrgFich) ; Assign (fbrgFichNoCobrados, 'NO_COBRADOS.DAT') ; Rewrite (fbrgFichNoCobrados) ; WHILE NOT EOF (fbrgFich) DO BEGIN Read (fbrgFich, rgDatosPedido) ; WITH rgDatosPedido DO IF Pos (sAnio, sFecha_Envio) <> 0 THEN iTotal := iTotal + fniBuscarProductosPedido (sCod_Producto_Contar, argListaProductos, iNum_Prods) ; END ; WHILE NOT EOF (fbrgFich) DO BEGIN Read (fbrgFich, rgDatosPedido) ; WITH rgDatosPedido DO IF sFecha_Envio = 'PENDIENTE' THEN Write (fbrgFichNoEnviados, rgDatosPedido) Close ELSE IF sFecha_Ingreso = 'PENDIENTE' THEN Write (fbrgFichNoCobrados, rgDatosPedido) ; END ; BEGIN {****************PROGRAMA PRINCIPAL***************} Writeln ('Programa de gestión de fichero de pedidos') ; WriteLn ; Write (' Nombre del fichero con los pedidos: ') ; ReadLN (sNomFichPedidos) ; Close (fbrgFichNoCobrados) ; Close (fbrgFichNoCobrados) ; Close (fbrgFich) ; END ; Informática (fbrgFich) ; fniContarProductos := iTotal ; END ; 3/Junio/2011 3 Informática 3/Junio/2011 4 IF NOT FileExists(sNomFichPedidos) THEN writeln ('ERROR: NO existe el fichero: "', sNomFichPedidos, '"') ELSE REPEAT cOpcion:= fncMenu; CASE cOpcion OF '1' : BEGIN Writeln ('Escribe el CIF del cliente: ') ; ReadLn (sCIF_Cliente) ; ClrScr ; Writeln ('Listado de los pedidos de: ', sCIF_Cliente) ; ListarPedidosCliente (sCIF_Cliente, sNomFichPedidos) ; Writeln ('---------- Final del listado -------------') ; END ; '2' : BEGIN Writeln ('Escribe el Codigo del pedido: ') ; ReadLn (iCodigo_Pedido) ; Writeln (' Fecha del ingreso: ') ; ReadLn (sFecha_Ingreso_Pedido) ; Writeln (' Cantidad ingresada: ') ; ReadLn (rImporteIngresado) ; ModificarFechaIngreso (iCodigo_Pedido, sFecha_Ingreso_Pedido, sNomFichPedidos, rImporteIngresado) ; END ; '3' : CrearFicheroPedidosPendientes (sNomFichPedidos) ; '4' : BEGIN Write ReadLN Write ReadLN ('Codigo del producto: ') ; (sCod_Producto_Contar) ; (' Año: ') ; (sAnio) ; iTotal := fniContarProductos (sCod_Producto_Contar, sAnio, sNomFichPedidos) ; Writeln ('Se han vendido: ', iTotal, ' unidades') ; END ; END ; { CASE } IF cOpcion <> '0' THEN BEGIN Writeln ; Writeln ('Pulsa una tecla para continuar'); cEspera := ReadKey ; END ; UNTIL cOpcion='0'; Write ('---------------cEspera := ReadKey ; Fin del programa --------------------') ; END. { FIN del PROGRAMA } Informática 3/Junio/2011 5