Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program VendingABC;
- uses crt, sysutils;
- CONST
- LONGCODIGO = 4; {longitud del código de usuario}
- LONGFECHA = 10; {longitud de la fecha}
- MAXUSUARIOS = 100; {número máximo de usuarios}
- MAXPRODUCTOS = 50; {número máximo de productos}
- MAXVENTAS = 120; {número máximo de ventas}
- TYPE
- tCodigoTarjeta = string[LONGCODIGO];
- tFecha = string[LONGFECHA];
- {tipo usuario}
- tUsuario = RECORD
- nombre: string;
- codigoTarjeta: tCodigoTarjeta;
- saldo: real;
- END;
- {tipo lista de usuarios}
- tIndiceUsuarios = 1..MAXUSUARIOS;
- tListaUsuarios = ARRAY [tIndiceUsuarios] OF tUsuario;
- {Array parcialmente lleno para usuarios}
- tUsuarios = RECORD
- usuarios: tListaUsuarios;
- tope: integer;
- END;
- {tipo producto}
- tProducto = RECORD
- nombre, marca: string;
- precio : real;
- stock : integer;
- END;
- {tipo lista de productos}
- tIndiceProductos = 1..MAXPRODUCTOS;
- tListaProductos = ARRAY [tIndiceProductos] OF tProducto;
- {Array parcialmente lleno para productos}
- tProductos = RECORD
- productos : tListaProductos;
- tope : integer;
- END;
- {Tipo venta}
- tVenta = RECORD
- nombreProducto : string;
- codigoTarjeta : tCodigoTarjeta;
- fecha : tFecha;
- END;
- {Tipo lista de ventas}
- tIndiceVentas = 1..MAXVENTAS;
- tListaVentas = ARRAY [tIndiceVentas] OF TVenta;
- { Array parcialmente lleno para ventas }
- tVentas = RECORD
- ventas : tListaVentas;
- tope : integer;
- END;
- var i : byte;
- opcion: CHAR;
- TablaUsuarios : tUsuarios;
- CodigoUsuario : tCodigoTarjeta;
- DatosUsuario : tUsuario;
- EncUsuario, encproducto : BOOLEAN;
- TablaProductos : tProductos;
- DatosProducto : tProducto;
- NomProdAComprar : string;
- TablaVentas : tVentas;
- Recarga : real;
- PROCEDURE Acumular_Venta (VAR DatosUsuSubpro:tUsuario; VAR DatosProdSubpro:tProducto; VAR TablaSubpro:tVentas);
- VAR
- i : INTEGER;
- BEGIN
- TablaSubpro.tope := TablaSubpro.tope + 1;
- i:= TablaSubpro.tope;
- TablaSubpro.ventas[i].nombreProducto := DatosProdSubpro.nombre;
- TablaSubpro.ventas[i].codigoTarjeta := DatosUsuSubpro.codigoTarjeta;
- TablaSubpro.ventas[i].fecha := DateToStr(Date);
- END;
- PROCEDURE Actualizar_Stock (VAR DatosProdSubpro:tProducto; VAR TablaSubpro:tProductos);
- VAR
- EncontradoProducto : BOOLEAN;
- i : INTEGER;
- BEGIN
- EncontradoProducto := FALSE;
- i := 1;
- WHILE (NOT EncontradoProducto) AND (i <= TablaSubpro.tope) DO
- BEGIN
- IF TablaSubpro.productos[i].nombre = DatosProdSubpro.nombre THEN
- BEGIN
- EncontradoProducto := TRUE;
- TablaSubpro.productos[i].stock := DatosProdSubpro.stock;
- END;
- i := i + 1;
- END;
- END;
- PROCEDURE Localizar_Producto (VAR NomProdSubpro:string; VAR TablaSubpro:tProductos; VAR DatosProdSubpro:tProducto;VAR EncPrdSubpro: BOOLEAN);
- VAR
- EncontradoProducto : BOOLEAN;
- i : INTEGER;
- BEGIN
- EncontradoProducto := FALSE;
- i := 1;
- WHILE (NOT EncontradoProducto) AND (i <= TablaSubpro.tope) DO
- BEGIN
- IF TablaSubpro.productos[i].nombre = NomProdSubpro THEN
- BEGIN
- EncontradoProducto := TRUE;
- DatosProdSubpro.nombre := TablaSubpro.productos[i].nombre;
- DatosProdSubpro.marca := TablaSubpro.productos[i].marca;
- DatosProdSubpro.precio := TablaSubpro.productos[i].precio;
- DatosProdSubpro.stock := TablaSubpro.productos[i].stock;
- END;
- i := i + 1;
- END;
- EncPrdSubpro := EncontradoProducto;
- END;
- PROCEDURE Actualizar_Saldo_Usuario (VAR DatosUsuSubpro:tUsuario; VAR TablaSubpro:tUsuarios);
- VAR
- i : INTEGER;
- EncontradoUsuario : BOOLEAN;
- BEGIN
- EncontradoUsuario := FALSE;
- i := 1;
- WHILE (NOT EncontradoUsuario) AND (i <= TablaSubpro.tope) DO
- BEGIN
- IF TablaSubpro.usuarios[i].codigoTarjeta = DatosUsuSubpro.codigoTarjeta THEN
- BEGIN
- EncontradoUsuario := TRUE;
- TablaSubpro.usuarios[i].saldo := DatosUsuSubpro.saldo;
- END;
- i := i + 1;
- END;
- END;
- PROCEDURE Localizar_Usuario (VAR CgoUsuSubpro:tCodigoTarjeta; VAR TablaSubpro:tUsuarios; VAR DatosUsuSubpro:tUsuario;VAR EncUsuSubpro: BOOLEAN);
- VAR
- EncontradoUsuario : BOOLEAN;
- i : INTEGER;
- BEGIN
- EncontradoUsuario := FALSE;
- i := 1;
- WHILE (NOT EncontradoUsuario) AND (i <= TablaSubpro.tope) DO
- BEGIN
- IF TablaSubpro.usuarios[i].codigoTarjeta = CgoUsuSubpro THEN
- BEGIN
- EncontradoUsuario := TRUE;
- DatosUsuSubpro.nombre := TablaSubpro.usuarios[i].nombre;
- DatosUsuSubpro.codigoTarjeta := TablaSubpro.usuarios[i].codigoTarjeta;
- DatosUsuSubpro.saldo := TablaSubpro.usuarios[i].saldo;
- END;
- i := i + 1;
- END;
- EncUsuSubpro := EncontradoUsuario;
- END;
- PROCEDURE Cargar_Usuarios (VAR TablaSubpro:tUsuarios);
- BEGIN
- TablaSubpro.usuarios[1].nombre := 'Juan';
- TablaSubpro.usuarios [1].codigoTarjeta := '1123';
- TablaSubpro.usuarios [1].saldo := 3.50;
- TablaSubpro.usuarios [2].nombre := 'Pepe';
- TablaSubpro.usuarios [2].codigoTarjeta := '0132';
- TablaSubpro.usuarios [2].saldo := 6.50;
- TablaSubpro.usuarios [3].nombre := 'Luis';
- TablaSubpro.usuarios [3].codigoTarjeta := '7843';
- TablaSubpro.usuarios [3].saldo := 1;
- TablaSubpro.usuarios [4].nombre := 'Eva';
- TablaSubpro.usuarios [4].codigoTarjeta := '2163';
- TablaSubpro.usuarios [4].saldo := 8.50;
- TablaSubpro.usuarios [5].nombre := 'Sonia';
- TablaSubpro.usuarios [5].codigoTarjeta := '9758';
- TablaSubpro.usuarios [5].saldo := 6.50;
- TablaSubpro.tope := 5;
- END;
- PROCEDURE Mostrar_Usuarios (VAR TablaSubpro:tUsuarios);
- VAR
- i : INTEGER;
- BEGIN
- writeln ('LISTADO DE USUARIOS');
- FOR i := 1 TO TablaSubpro.tope DO
- BEGIN
- write ('NOMBRE: ', TablaSubpro.usuarios[i].nombre);
- write (' / ');
- write ('CODIGO TARJETA: ', TablaSubpro.usuarios[i].codigoTarjeta);
- write (' / ');
- writeln ('SALDO: ', TablaSubpro.usuarios[i].saldo:5:2);
- END;
- writeln ('FIN LISTADO DE USUARIOS');
- END;
- PROCEDURE Mostrar_Ventas (VAR TablaSubpro:tVentas);
- VAR
- i : INTEGER;
- BEGIN
- writeln ('LISTADO DE VENTAS');
- FOR i := 1 TO TablaSubpro.tope DO
- BEGIN
- write ('NOMBRE PRODUCTO: ', TablaSubpro.ventas[i].nombreProducto, ' ');
- write ('CODIGO TARJETA: ', TablaSubpro.ventas[i].codigoTarjeta, ' ');
- writeln ('FECHA: ', TablaSubpro.ventas[i].fecha);
- END;
- writeln ('FIN LISTADO DE VENTAS');
- END;
- PROCEDURE Mostrar_Productos (VAR TablaSubpro:tProductos);
- VAR
- i : INTEGER;
- BEGIN
- writeln ('LISTADO DE PRODUCTOS');
- FOR i := 1 TO TablaSubpro.tope DO
- BEGIN
- write ('NOMBRE: ', TablaSubpro.productos[i].nombre, ' ');
- write ('MARCA: ', TablaSubpro.productos[i].marca, ' ');
- write ('PRECIO: ', TablaSubpro.productos[i].precio:5:2, ' ');
- writeln ('STOCK: ', TablaSubpro.productos[i].stock);
- END;
- writeln ('FIN LISTADO DE PRODUCTOS');
- END;
- PROCEDURE Mostrar_Productos_Disponibles (VAR TablaSubpro:tProductos);
- VAR
- i : INTEGER;
- BEGIN
- writeln ('LISTADO DE PRODUCTOS DISPONIBLES');
- FOR i := 1 TO TablaSubpro.tope DO
- BEGIN
- IF TablaSubpro.productos[i].stock > 0 THEN
- write ('NOMBRE: ', TablaSubpro.productos[i].nombre, ' ');
- write ('MARCA: ', TablaSubpro.productos[i].marca, ' ');
- writeln ('PRECIO: ', TablaSubpro.productos[i].precio:5:2, ' ');
- END;
- writeln ('FIN LISTADO DE PRODUCTOS DISPONIBLES');
- END;
- PROCEDURE Cargar_Productos (VAR TablaSubpro:tProductos);
- BEGIN
- TablaSubpro.productos[1].nombre := 'Fanta Naranja';
- TablaSubpro.productos[1].marca := 'Coca Cola';
- TablaSubpro.productos[1].precio := 1.50;
- TablaSubpro.productos[1].stock := 30;
- TablaSubpro.productos[2].nombre := 'Fanta Limon';
- TablaSubpro.productos[2].marca := 'Coca Cola';
- TablaSubpro.productos[2].precio := 1.50;
- TablaSubpro.productos[2].stock := 25;
- TablaSubpro.productos[3].nombre := 'Patatas Fritas';
- TablaSubpro.productos[3].marca := 'Matutano';
- TablaSubpro.productos[3].precio := 1;
- TablaSubpro.productos[3].stock := 15;
- TablaSubpro.productos[4].nombre := 'Kikos';
- TablaSubpro.productos[4].marca := 'Churruca';
- TablaSubpro.productos[4].precio := 0.70;
- TablaSubpro.productos[4].stock := 2;
- TablaSubpro.productos[5].nombre := 'Galletas chocolate';
- TablaSubpro.productos[5].marca := 'Principe';
- TablaSubpro.productos[5].precio := 1.25;
- TablaSubpro.productos[5].stock := 5;
- TablaSubpro.productos[6].nombre := 'Batido';
- TablaSubpro.productos[6].marca := 'Cacaolat';
- TablaSubpro.productos[6].precio := 1.25;
- TablaSubpro.productos[6].stock := 7;
- TablaSubpro.tope := 6;
- END;
- BEGIN
- Writeln(Format ('Today is: %s',[DateToStr(Date)]));
- opcion := ' ';
- writeln ('**********************************************************************');
- WHILE (opcion <> 'h') DO
- BEGIN
- writeln (' ');
- writeln ('******************** MENU *********************');
- writeln ('a.- Cargar lista de usuarios');
- writeln ('b.- Mostrar lista de usuarios');
- writeln ('d.- Cargar lista de productos');
- writeln ('e.- Mostrar lista de productos');
- writeln ('c.- COMPRAR');
- writeln ('f.- Mostrar ventas');
- writeln ('g.- RECARGAR TARJETA');
- writeln ('h.- Finalizar');
- writeln ('******************** MENU *********************');
- writeln ('Introduce una opcion del menu:');
- readln (opcion);
- CASE opcion OF
- 'a':
- BEGIN
- WRITELN ('HAS ELEGIDO LA OPCION a');
- Cargar_Usuarios (TablaUsuarios);
- writeln ('Carga de usuarios realizada');
- END;
- 'b':
- BEGIN
- WRITELN ('HAS ELEGIDO LA OPCION b');
- Mostrar_Usuarios (TablaUsuarios);
- END;
- 'c':
- BEGIN
- WRITELN ('HAS ELEGIDO LA OPCION c');
- { Primero pedimos el codigo de la tarjeta simulando que el cliente la pasa por la maquina }
- { Y localizamos el cliente para ver si tiene saldo }
- writeln ('Introduce el código de tu tarjeta: ');
- readln (CodigoUsuario);
- Localizar_Usuario (CodigoUsuario, TablaUsuarios, DatosUsuario, EncUsuario);
- writeln ('-------------------------------------------------------');
- IF EncUsuario THEN
- BEGIN
- writeln ('Bienvenido/a ', DatosUsuario.nombre);
- writeln ('Su saldo acumulado es de ', DatosUsuario.saldo:5:2);
- writeln ('-------------------------------------------------------');
- { Ahora mostramos todos los productos que la maquina puede ofrecer al usuario }
- writeln (' ');
- Mostrar_Productos_Disponibles (TablaProductos);
- { Ahora se pide al usuario el nombre del producto que quiere comprar }
- EncProducto := FALSE;
- REPEAT
- writeln ('Teclee el nombre del producto a comprar:');
- readln (NomProdAComprar);
- Localizar_Producto (NomProdAComprar, TablaProductos,DatosProducto,EncProducto);
- IF NOT EncProducto THEN
- BEGIN
- writeln ('No hay ningún producto con ese nombre');
- END
- UNTIL
- EncProducto;
- { Ya se ha encontrado el producto }
- writeln ('Compraras ', DatosProducto.nombre, ' ', DatosProducto.marca, ' ');
- { Se comprueba si el usuario tiene saldo }
- IF DatosUsuario.saldo >= DatosProducto.precio THEN
- BEGIN
- writeln ('Se te descontará del saldo de tu tarjeta ', DatosProducto.precio:5:2);
- { Se actualiza el saldo de la tarjeta del usuario }
- DatosUsuario.saldo := DatosUsuario.saldo - DatosProducto.precio;
- { Ahora se llama al PROC que actualiza el array con el nuevo saldo }
- Actualizar_Saldo_Usuario (DatosUsuario, TablaUsuarios);
- { Se resta 1 al stock del producto }
- DatosProducto.stock := DatosProducto.stock - 1;
- { Ahora se llama al PROC que actualiza el array con el nuevo stock }
- Actualizar_Stock (DatosProducto, TablaProductos);
- { Ahora se llama al PROC que actualiza el array de Ventas con la nueva venta realizada }
- Acumular_Venta (DatosUsuario, DatosProducto, TablaVentas);
- END
- ELSE
- BEGIN
- writeln (' No tiene saldo para dicha compra ');
- END;
- END
- ELSE
- BEGIN
- writeln ('Lo siento, pero no he podido leer el código de su tarjeta');
- writeln ('Por favor, asegurese de que la tarjeta esta en buen estado');
- END;
- END;
- 'd':
- BEGIN
- WRITELN ('HAS ELEGIDO LA OPCION d');
- Cargar_Productos (TablaProductos);
- writeln ('Carga de productos realizada');
- END;
- 'e':
- BEGIN
- WRITELN ('HAS ELEGIDO LA OPCION e');
- Mostrar_Productos (TablaProductos);
- END;
- 'f':
- BEGIN
- WRITELN ('HAS ELEGIDO LA OPCION f');
- Mostrar_Ventas (TablaVentas);
- END;
- 'g':
- BEGIN
- WRITELN ('HAS ELEGIDO LA OPCION f');
- { Primero pedimos el codigo de la tarjeta simulando que el cliente la pasa por la maquina }
- { Y localizamos el cliente para recargar su saldo }
- writeln ('Introduce el código de tu tarjeta: ');
- readln (CodigoUsuario);
- Localizar_Usuario (CodigoUsuario, TablaUsuarios, DatosUsuario, EncUsuario);
- writeln ('-------------------------------------------------------');
- IF EncUsuario THEN
- BEGIN
- writeln ('Bienvenido/a ', DatosUsuario.nombre);
- writeln ('Su saldo acumulado es de ', DatosUsuario.saldo:5:2);
- writeln ('-------------------------------------------------------');
- writeln ('Introduce el dinero a recargar: ');
- readln (Recarga);
- { Se actualiza el saldo de la tarjeta del usuario }
- DatosUsuario.saldo := DatosUsuario.saldo + Recarga;
- { Ahora se llama al PROC que actualiza el array con el nuevo saldo }
- Actualizar_Saldo_Usuario (DatosUsuario, TablaUsuarios);
- writeln ('Su nuevo saldo es: ', DatosUsuario.saldo:5:2)
- END
- ELSE
- BEGIN
- writeln ('Lo siento, pero no he podido leer el código de su tarjeta');
- writeln ('Por favor, asegurese de que la tarjeta esta en buen estado');
- END;
- END;
- 'h':
- BEGIN
- WRITELN ('HAS ELEGIDO LA OPCION h');
- WRITELN ('FIN DEL PROGRAMA');
- END;
- ELSE
- WRITELN ('HAS ELEGIDO UNA OPCION ERRONEA');
- END
- END;
- WRITELN ('FIN DEL PROGRAMA');
- END.
- END.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement