Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- PROGRAM Vending;
- 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 producto}
- tProducto = RECORD
- nombre, marca: string;
- precio: real;
- stock: integer;
- END;
- {tipo venta}
- tVenta = RECORD
- nombreProducto: string;
- codigoTarjeta: tCodigoTarjeta;
- fecha : tFecha;
- 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 lista de productos}
- tIndiceProductos = 1..MAXPRODUCTOS;
- tListaProductos = ARRAY [tIndiceProductos] OF tProducto;
- {Array parcialmente lleno para productos}
- tProductos = RECORD
- productos: tListaProductos;
- tope: integer;
- 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;
- {tipo archivos binarios}
- tArchivoUsuarios = FILE OF tUsuario;
- tArchivoProductos = FILE OF tProducto;
- tArchivoVentas = FILE OF tVenta;
- VAR
- todosLosUsuarios:tUsuarios;
- todosLosProductos:tProductos;
- todasLasVentas:tVentas;
- ventaHoy:tVenta;{se hace necesaria para poder tener una fecha general para todo el programa del comprador}
- posicionUsuario:integer;{la posicion en el array de tListaUsuarios}
- comprobante1:integer;{pivote usado para operaciones internas,innecesario?}
- codigoIdentificacion:string;
- menuGlobal,menuComprador,menuReponedor:boolean;
- eleccion:char;
- FUNCTION Comprobarcodigo(codigo:string;listaUsuarioss:tUsuarios):integer;
- {-1 para el reponedor,0 para identificacion no encontrada,i para identidad encontrada en la posicion "i" del array}
- VAR
- i,comprobante2:integer;
- BEGIN
- comprobante2:=0;
- FOR i:=1 TO listaUsuarioss.tope DO
- BEGIN
- IF(codigo=listaUsuarioss.usuarios[i].codigoTarjeta)THEN
- BEGIN
- ComprobarCodigo:=i;
- comprobante2:=1;
- END;
- END;
- IF (codigo='0000') THEN
- ComprobarCodigo:=-1;
- IF (codigo<>'0000')AND(comprobante2=0)THEN
- ComprobarCodigo:=0; {hacer un bucle o resetear el menu?de momento resetea el menu}
- END;
- PROCEDURE VentaTarjeta(VAR listaUsuarios:tUsuarios);
- VAR
- codigo:integer;
- comprobante2:integer;
- listaUsuariosOriginal:tUsuarios;
- BEGIN
- comprobante2:=0;
- listaUsuariosOriginal:=listaUsuarios;
- listaUsuarios.tope:=listaUsuarios.tope+1;
- writeln('Escriba el nombre');
- readln(listaUsuarios.usuarios[listaUsuarios.tope].nombre);
- writeln('Escriba el saldo inicial');
- readln(listaUsuarios.usuarios[listaUsuarios.tope].saldo);
- writeln('Asigne un codigo al usuario');
- readln(listaUsuarios.usuarios[listaUsuarios.tope].codigoTarjeta);
- comprobante2:=ComprobarCodigo(listaUsuarios.usuarios[listaUsuarios.tope].codigoTarjeta,listaUsuariosOriginal);{se pone la original antes de ser modificada dado que tiene que comparar con si ya existia anteriormente}
- WHILE(comprobante2<>0)OR(ord(listaUsuarios.usuarios[listaUsuarios.tope].codigoTarjeta[0])<>4)DO
- BEGIN
- writeln('Error,escriba un codigo numerico de 4 digitos superior a 0000');
- readln(listaUsuarios.usuarios[listaUsuarios.tope].codigoTarjeta);
- comprobante2:=Comprobarcodigo(listaUsuarios.usuarios[listaUsuarios.tope].codigoTarjeta,listaUsuariosOriginal);
- END;
- END;
- PROCEDURE BajaTarjeta(VAR listaUsuarios:tUsuarios);
- VAR
- comprobante2:integer;
- codigoBuscado:string;
- BEGIN
- writeln('Escriba el codigo del usuario que desea eliminar');
- readln(codigoBuscado);
- comprobante2:=ComprobarCodigo(codigoBuscado,listaUsuarios);
- IF(comprobante2<=0)THEN
- writeln('Error.El codigo introducido no existe')
- ELSE
- BEGIN
- listaUsuarios.usuarios[comprobante2]:=listaUsuarios.usuarios[listaUsuarios.tope];
- listaUsuarios.tope:=listaUsuarios.tope-1;
- END;
- END;
- {******************* Insertar un nuevo producto a la lista ********************}
- PROCEDURE insertarProducto (VAR productos3: tProductos; nombProd:string);
- BEGIN
- IF productos3.tope < MAXPRODUCTOS THEN
- BEGIN
- productos3.tope := productos3.tope + 1;
- productos3.productos[productos3.tope].nombre:= nombProd;
- writeln('Por favor, introduzca su marca');
- readln(productos3.productos[productos3.tope].marca);
- writeln('A continuacion, indique su precio');
- readln(productos3.productos[productos3.tope].precio);
- writeln('Por ultimo, introduzca el stock');
- readln(productos3.productos[productos3.tope].stock);
- writeln ('El producto se ha registrado correctamente')
- END
- ELSE
- writeln('La lista est? llena');
- END;
- {******************* Modificar alg?n dato del producto *********************}
- PROCEDURE modificarStock (VAR productosMod:tProductos; posicionMod:integer);
- VAR
- stockNuevo:integer;
- BEGIN
- writeln ('El stock actual de este producto es de: ', (productosMod.productos[posicionMod].stock), ' unidades.');
- writeln ('Introduzca el nuevo stock: ');
- readln (stockNuevo);
- IF (stockNuevo = productosMod.productos[posicionMod].stock) THEN
- writeln ('El stock introducido coincide con el anterior')
- ELSE
- BEGIN
- productosMod.productos[posicionMod].stock:= stockNuevo;
- writeln('El stock se ha actualizado correctamente');
- END;
- END;
- {******************* Comprobaci?n de la repeticion del mismo producto ********************}
- FUNCTION compRepetido (nombre:string; productos2:tProductos):integer;
- VAR encontrado, num, contador: integer;
- BEGIN
- encontrado := 0;
- num := productos2.tope;
- contador := 1;
- WHILE (encontrado = 0) AND (contador <= num) DO
- BEGIN
- IF (productos2.productos[contador].nombre = nombre) THEN
- encontrado:= contador;
- contador:= contador + 1;
- END;
- compRepetido:= encontrado;
- END;
- PROCEDURE AgregarProducto(VAR arrayProductos:tProductos);
- VAR
- nombreProducto:string;
- repetido:integer;
- BEGIN
- writeln ('Por favor, introduzca el nombre del producto:');
- readln (nombreProducto);
- repetido:=compRepetido(nombreProducto, arrayProductos);
- IF (repetido <> 0) THEN
- modificarStock (arrayProductos, repetido)
- ELSE
- insertarProducto(arrayProductos, nombreProducto);
- END;
- PROCEDURE crearNuevoProducto (VAR producto1:tProducto; VAR nombreProd:string);
- BEGIN
- producto1.nombre:= nombreProd;
- writeln('Por favor, introduzca su marca');
- readln(producto1.marca);
- writeln('A continuacion, indique su precio');
- readln(producto1.precio);
- writeln('Por ultimo, introduzca el stock');
- readln(producto1.stock);
- END;
- BEGIN
- {DATOS INTRODUCIDOS SOLO PARA PRUEBASSSSSSS}
- todosLosUsuarios.usuarios[1].nombre:='Mufasa';
- todosLosUsuarios.usuarios[1].saldo:=1000;
- todosLosUsuarios.usuarios[1].codigoTarjeta:='0001';
- todosLosUsuarios.usuarios[2].nombre:='Sayan';
- todosLosUsuarios.usuarios[2].saldo:=9000;
- todosLosUsuarios.usuarios[2].codigoTarjeta:='0002';
- todosLosUsuarios.usuarios[3].nombre:='Pokemon';
- todosLosUsuarios.usuarios[3].saldo:=150;
- todosLosUsuarios.usuarios[3].codigoTarjeta:='0003';
- todosLosUsuarios.usuarios[4].nombre:='Se?or Pi';
- todosLosUsuarios.usuarios[4].saldo:=314.1592;
- todosLosUsuarios.usuarios[4].codigoTarjeta:='0004';
- todosLosUsuarios.tope:=4;
- todosLosProductos.productos[1].nombre := 'Fanta Naranja';
- todosLosProductos.productos[1].marca := 'Coca Cola';
- todosLosProductos.productos[1].precio := 1.50;
- todosLosProductos.productos[1].stock := 30;
- todosLosProductos.productos[2].nombre := 'Fanta Limon';
- todosLosProductos.productos[2].marca := 'Coca Cola';
- todosLosProductos.productos[2].precio := 1.50;
- todosLosProductos.productos[2].stock := 25;
- todosLosProductos.productos[3].nombre := 'Patatas Fritas';
- todosLosProductos.productos[3].marca := 'Matutano';
- todosLosProductos.productos[3].precio := 1;
- todosLosProductos.productos[3].stock := 15;
- todosLosProductos.productos[4].nombre := 'Kikos';
- todosLosProductos.productos[4].marca := 'Churruca';
- todosLosProductos.productos[4].precio := 0.70;
- todosLosProductos.productos[4].stock := 2;
- todosLosProductos.productos[5].nombre := 'Galletas chocolate';
- todosLosProductos.productos[5].marca := 'Principe';
- todosLosProductos.productos[5].precio := 1.25;
- todosLosProductos.productos[5].stock := 5;
- todosLosProductos.productos[6].nombre := 'Batido';
- todosLosProductos.productos[6].marca := 'Cacaolat';
- todosLosProductos.productos[6].precio := 1.25;
- todosLosProductos.productos[6].stock := 7;
- todosLosProductos.tope := 6;
- todasLasVentas.ventas[1].nombreProducto:='Fanta Naranja';
- todasLasVentas.ventas[1].codigoTarjeta:='0001';
- todasLasVentas.ventas[1].fecha:='22-01-2050';
- todasLasVentas.ventas[2].nombreProducto:='Patatas Fritas';
- todasLasVentas.ventas[2].codigoTarjeta:='0001';
- todasLasVentas.ventas[2].fecha:='72-01-1911';
- {pues eso mismo de arriba chaaaaaacho,datos para pruebas}
- menuGlobal:=TRUE;
- menuComprador:=TRUE;
- menuReponedor:=TRUE;
- REPEAT
- writeln('Indique que dia es hoy');
- readln(VentaHoy.fecha);{comprobar fecha correctamente introducida}
- writeln('Introduzca su codigo');
- readln(codigoIdentificacion);
- posicionUsuario:=ComprobarCodigo(codigoIdentificacion,todosLosUsuarios);
- IF(posicionUsuario>0)THEN{Comprador}
- BEGIN
- writeln ('-------------------------------------------------------');
- writeln ('Bienvenido/a ', todosLosUsuarios.usuarios[posicionUsuario].nombre);
- writeln ('Su saldo acumulado es de ', todosLosUsuarios.usuarios[posicionUsuario].saldo:5:2);
- writeln ('-------------------------------------------------------');
- REPEAT
- writeln('**********************MENU**************************');
- writeln('a)Comprar producto');
- writeln('b)Introducir saldo');
- writeln('c)Finalizar');
- writeln('**********************MENU**************************');
- readln(eleccion);
- CASE (eleccion)OF
- 'a','A':{comprar productos}
- writeln('b');
- 'b','B':{introducir saldo}
- writeln('b');
- 'c','C':{finalizar}
- menuComprador:=FALSE
- ELSE
- writeln('Opcion incorrecta');
- END;{case of}
- UNTIL(menuComprador=FALSE);
- END
- {menu-Comprador}
- ELSE IF posicionUsuario=0 THEN
- writeln('codigo incorrecto')
- ELSE IF posicionUsuario=-1 THEN{reponedor}
- BEGIN
- REPEAT
- writeln('**********************MENU REPONEDOR**************************');
- writeln('a)Venta de tarjeta');
- writeln('b)Baja tarjeta');
- writeln('c)A?adir producto');
- writeln('d)Eliminar producto');
- writeln('e)Lista de productos');
- writeln('f)Lista de usuarios');
- writeln('g)Lista de ventas');
- writeln('h)Lista de usuarios que no han comprado');
- writeln('i)Lista de productos que han sido vendidos');
- writeln('j)Hacer backup');
- writeln('k)Restaurar backup');
- writeln('l)Guardar ventas');
- writeln('m)Cerrar sesion');
- writeln('n)Apagar maquina');
- writeln('**********************MENU REPONEDOR**************************');
- readln(eleccion);
- CASE (eleccion)OF
- 'a','A':{Venta de tarjeta}
- VentaTarjeta(todosLosUsuarios);
- 'b','B':{Baja de tarjeta}
- BajaTarjeta(todosLosUsuarios);
- 'c','C':{A?adir producto}
- AgregarProducto(todosLosProductos);
- 'd','D':{}
- BEGIN
- writeln('d');
- END;
- 'e','E':{}
- BEGIN
- writeln('e');
- END;
- 'f','F':{}
- BEGIN
- writeln('f');
- END;
- 'g','G':{}
- BEGIN
- writeln('g');
- END;
- 'h','H':{}
- BEGIN
- writeln('h');
- END;
- 'i','I':{}
- BEGIN
- writeln('i');
- END;
- 'j','J':{}
- BEGIN
- writeln('j');
- END;
- 'k','K':{}
- BEGIN
- writeln('k');
- END;
- 'l','L':{}
- BEGIN
- writeln('l');
- END;
- 'm','M':{cerrar menu reponedor}
- menuReponedor:=FALSE;
- 'n','N':{apagar maquina}
- BEGIN
- menuReponedor:=FALSE;
- menuGlobal:=FALSE;
- END;
- ELSE
- writeln('Opcion incorrecta');
- END;{case of}
- UNTIL(menuReponedor=FALSE);
- END;
- UNTIL (menuGlobal=FALSE);
- END.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement