SHARE
TWEET

Untitled

a guest Dec 8th, 2019 64 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. PROGRAM Vending;
  2. CONST
  3.     LONGCODIGO = 4; {longitud del c?digo de usuario}
  4.     LONGFECHA = 10; {longitud de la fecha}
  5.     MAXUSUARIOS = 100; {n?mero m?ximo de usuarios}
  6.     MAXPRODUCTOS = 50; {n?mero m?ximo de productos}
  7.     MAXVENTAS = 120; {n?mero m?ximo de ventas}
  8. TYPE
  9.     tCodigoTarjeta = string[LONGCODIGO];
  10.     tFecha = string[LONGFECHA];
  11.     {tipo usuario}
  12.     tUsuario = RECORD
  13.         nombre: string;
  14.         codigoTarjeta: tCodigoTarjeta;
  15.         saldo: real;
  16.     END;
  17.     {tipo producto}
  18.     tProducto = RECORD
  19.         nombre, marca: string;
  20.         precio: real;
  21.         stock: integer;
  22.         END;
  23.     {tipo venta}
  24.     tVenta = RECORD
  25.         nombreProducto: string;
  26.         codigoTarjeta: tCodigoTarjeta;
  27.         fecha : tFecha;
  28.         END;
  29.     {tipo lista de usuarios}
  30.     tIndiceUsuarios = 1..MAXUSUARIOS;
  31.     tListaUsuarios = ARRAY [tIndiceUsuarios] OF tUsuario;
  32.     {Array parcialmente lleno para usuarios}
  33.     tUsuarios = RECORD
  34.         usuarios: tListaUsuarios;
  35.         tope: integer;
  36.         END;
  37.     {tipo lista de productos}
  38.     tIndiceProductos = 1..MAXPRODUCTOS;
  39.     tListaProductos = ARRAY [tIndiceProductos] OF tProducto;
  40.     {Array parcialmente lleno para productos}
  41.     tProductos = RECORD
  42.         productos: tListaProductos;
  43.         tope: integer;
  44.         END;
  45.     {tipo lista de ventas}
  46.     tIndiceVentas = 1..MAXVENTAS;
  47.     tListaVentas= ARRAY [tIndiceVentas] OF tVenta;
  48.     {Array parcialmente lleno para ventas}
  49.     tVentas = RECORD
  50.         ventas: tListaVentas;
  51.         tope: integer;
  52.         END;
  53.     {tipo archivos binarios}
  54.     tArchivoUsuarios = FILE OF tUsuario;
  55.     tArchivoProductos = FILE OF tProducto;
  56.     tArchivoVentas = FILE OF tVenta;
  57. VAR
  58.     todosLosUsuarios:tUsuarios;
  59.     todosLosProductos:tProductos;
  60.     todasLasVentas:tVentas;
  61.     ventaHoy:tVenta;{se hace necesaria para poder tener una fecha general para todo el programa del comprador}
  62.     posicionUsuario:integer;{la posicion en el array de tListaUsuarios}
  63.     comprobante1:integer;{pivote usado para operaciones internas,innecesario?}
  64.     codigoIdentificacion:string;
  65.     menuGlobal,menuComprador,menuReponedor:boolean;
  66.     eleccion:char;
  67.  
  68. FUNCTION Comprobarcodigo(codigo:string;listaUsuarioss:tUsuarios):integer;
  69. {-1 para el reponedor,0 para identificacion no encontrada,i para identidad encontrada en la posicion "i" del array}
  70.     VAR
  71.     i,comprobante2:integer;
  72.     BEGIN
  73.         comprobante2:=0;
  74.         FOR i:=1 TO listaUsuarioss.tope DO
  75.         BEGIN
  76.             IF(codigo=listaUsuarioss.usuarios[i].codigoTarjeta)THEN
  77.             BEGIN
  78.                 ComprobarCodigo:=i;
  79.                 comprobante2:=1;
  80.             END;
  81.         END;
  82.         IF (codigo='0000') THEN
  83.             ComprobarCodigo:=-1;
  84.         IF (codigo<>'0000')AND(comprobante2=0)THEN
  85.             ComprobarCodigo:=0; {hacer un bucle o resetear el menu?de momento resetea el menu}
  86.     END;
  87. PROCEDURE VentaTarjeta(VAR listaUsuarios:tUsuarios);
  88.     VAR
  89.         codigo:integer;
  90.         comprobante2:integer;
  91.         listaUsuariosOriginal:tUsuarios;
  92.     BEGIN
  93.         comprobante2:=0;
  94.         listaUsuariosOriginal:=listaUsuarios;
  95.         listaUsuarios.tope:=listaUsuarios.tope+1;
  96.         writeln('Escriba el nombre');
  97.         readln(listaUsuarios.usuarios[listaUsuarios.tope].nombre);
  98.         writeln('Escriba el saldo inicial');
  99.         readln(listaUsuarios.usuarios[listaUsuarios.tope].saldo);
  100.         writeln('Asigne un codigo al usuario');
  101.         readln(listaUsuarios.usuarios[listaUsuarios.tope].codigoTarjeta);
  102.         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}
  103.         WHILE(comprobante2<>0)OR(ord(listaUsuarios.usuarios[listaUsuarios.tope].codigoTarjeta[0])<>4)DO
  104.         BEGIN
  105.             writeln('Error,escriba un codigo numerico de 4 digitos superior a 0000');
  106.             readln(listaUsuarios.usuarios[listaUsuarios.tope].codigoTarjeta);
  107.             comprobante2:=Comprobarcodigo(listaUsuarios.usuarios[listaUsuarios.tope].codigoTarjeta,listaUsuariosOriginal);
  108.         END;
  109.     END;
  110. PROCEDURE BajaTarjeta(VAR listaUsuarios:tUsuarios);
  111.     VAR
  112.         comprobante2:integer;
  113.         codigoBuscado:string;
  114.     BEGIN
  115.  
  116.         writeln('Escriba el codigo del usuario que desea eliminar');
  117.         readln(codigoBuscado);
  118.         comprobante2:=ComprobarCodigo(codigoBuscado,listaUsuarios);
  119.         IF(comprobante2<=0)THEN
  120.             writeln('Error.El codigo introducido no existe')
  121.         ELSE
  122.         BEGIN
  123.             listaUsuarios.usuarios[comprobante2]:=listaUsuarios.usuarios[listaUsuarios.tope];
  124.             listaUsuarios.tope:=listaUsuarios.tope-1;
  125.         END;
  126.     END;
  127. {******************* Insertar un nuevo producto a la lista ********************}
  128. PROCEDURE insertarProducto (VAR productos3: tProductos; nombProd:string);
  129.     BEGIN
  130.         IF productos3.tope < MAXPRODUCTOS THEN
  131.             BEGIN
  132.                 productos3.tope := productos3.tope + 1;
  133.                 productos3.productos[productos3.tope].nombre:= nombProd;
  134.                 writeln('Por favor, introduzca su marca');
  135.                 readln(productos3.productos[productos3.tope].marca);
  136.                 writeln('A continuacion, indique su precio');
  137.                 readln(productos3.productos[productos3.tope].precio);
  138.                 writeln('Por ultimo, introduzca el stock');
  139.                 readln(productos3.productos[productos3.tope].stock);
  140.                 writeln ('El producto se ha registrado correctamente')
  141.             END
  142.         ELSE
  143.             writeln('La lista est? llena');
  144.     END;
  145.  
  146. {******************* Modificar alg?n dato del producto *********************}
  147. PROCEDURE modificarStock (VAR productosMod:tProductos; posicionMod:integer);
  148.     VAR
  149.         stockNuevo:integer;
  150.     BEGIN
  151.         writeln ('El stock actual de este producto es de: ', (productosMod.productos[posicionMod].stock), ' unidades.');
  152.         writeln ('Introduzca el nuevo stock: ');
  153.         readln (stockNuevo);
  154.         IF (stockNuevo = productosMod.productos[posicionMod].stock) THEN
  155.             writeln ('El stock introducido coincide con el anterior')
  156.         ELSE
  157.             BEGIN
  158.                 productosMod.productos[posicionMod].stock:= stockNuevo;
  159.                 writeln('El stock se ha actualizado correctamente');
  160.             END;
  161.     END;
  162. {******************* Comprobaci?n de la repeticion del mismo producto ********************}
  163. FUNCTION compRepetido (nombre:string; productos2:tProductos):integer;
  164. VAR encontrado, num, contador: integer;
  165. BEGIN
  166.     encontrado := 0;
  167.     num := productos2.tope;
  168.     contador := 1;
  169.     WHILE (encontrado = 0) AND (contador <= num) DO
  170.         BEGIN
  171.             IF (productos2.productos[contador].nombre = nombre) THEN
  172.                 encontrado:= contador;
  173.                 contador:= contador + 1;
  174.         END;
  175.     compRepetido:= encontrado;
  176. END;
  177.  
  178. PROCEDURE AgregarProducto(VAR arrayProductos:tProductos);
  179.     VAR
  180.         nombreProducto:string;
  181.         repetido:integer;
  182.     BEGIN
  183.         writeln ('Por favor, introduzca el nombre del producto:');
  184.         readln (nombreProducto);
  185.         repetido:=compRepetido(nombreProducto, arrayProductos);
  186.         IF (repetido <> 0) THEN
  187.             modificarStock (arrayProductos, repetido)
  188.         ELSE
  189.             insertarProducto(arrayProductos, nombreProducto);
  190.     END;
  191. PROCEDURE crearNuevoProducto (VAR producto1:tProducto; VAR nombreProd:string);
  192.     BEGIN
  193.         producto1.nombre:= nombreProd;
  194.         writeln('Por favor, introduzca su marca');
  195.         readln(producto1.marca);
  196.         writeln('A continuacion, indique su precio');
  197.         readln(producto1.precio);
  198.         writeln('Por ultimo, introduzca el stock');
  199.         readln(producto1.stock);
  200.     END;
  201. BEGIN
  202. {DATOS INTRODUCIDOS SOLO PARA PRUEBASSSSSSS}
  203. todosLosUsuarios.usuarios[1].nombre:='Mufasa';
  204. todosLosUsuarios.usuarios[1].saldo:=1000;
  205. todosLosUsuarios.usuarios[1].codigoTarjeta:='0001';
  206. todosLosUsuarios.usuarios[2].nombre:='Sayan';
  207. todosLosUsuarios.usuarios[2].saldo:=9000;
  208. todosLosUsuarios.usuarios[2].codigoTarjeta:='0002';
  209. todosLosUsuarios.usuarios[3].nombre:='Pokemon';
  210. todosLosUsuarios.usuarios[3].saldo:=150;
  211. todosLosUsuarios.usuarios[3].codigoTarjeta:='0003';
  212. todosLosUsuarios.usuarios[4].nombre:='Se?or Pi';
  213. todosLosUsuarios.usuarios[4].saldo:=314.1592;
  214. todosLosUsuarios.usuarios[4].codigoTarjeta:='0004';
  215. todosLosUsuarios.tope:=4;
  216.         todosLosProductos.productos[1].nombre := 'Fanta Naranja';
  217.         todosLosProductos.productos[1].marca := 'Coca Cola';
  218.         todosLosProductos.productos[1].precio := 1.50;
  219.         todosLosProductos.productos[1].stock := 30;
  220.         todosLosProductos.productos[2].nombre := 'Fanta Limon';
  221.         todosLosProductos.productos[2].marca := 'Coca Cola';
  222.         todosLosProductos.productos[2].precio := 1.50;
  223.         todosLosProductos.productos[2].stock := 25;
  224.         todosLosProductos.productos[3].nombre := 'Patatas Fritas';
  225.         todosLosProductos.productos[3].marca := 'Matutano';
  226.         todosLosProductos.productos[3].precio := 1;
  227.         todosLosProductos.productos[3].stock := 15;
  228.         todosLosProductos.productos[4].nombre := 'Kikos';
  229.         todosLosProductos.productos[4].marca := 'Churruca';
  230.         todosLosProductos.productos[4].precio := 0.70;
  231.         todosLosProductos.productos[4].stock := 2;
  232.         todosLosProductos.productos[5].nombre := 'Galletas chocolate';
  233.         todosLosProductos.productos[5].marca := 'Principe';
  234.         todosLosProductos.productos[5].precio := 1.25;
  235.         todosLosProductos.productos[5].stock := 5;
  236.         todosLosProductos.productos[6].nombre := 'Batido';
  237.         todosLosProductos.productos[6].marca := 'Cacaolat';
  238.         todosLosProductos.productos[6].precio := 1.25;
  239.         todosLosProductos.productos[6].stock := 7;
  240.         todosLosProductos.tope := 6;
  241.             todasLasVentas.ventas[1].nombreProducto:='Fanta Naranja';
  242.             todasLasVentas.ventas[1].codigoTarjeta:='0001';
  243.             todasLasVentas.ventas[1].fecha:='22-01-2050';
  244.             todasLasVentas.ventas[2].nombreProducto:='Patatas Fritas';
  245.             todasLasVentas.ventas[2].codigoTarjeta:='0001';
  246.             todasLasVentas.ventas[2].fecha:='72-01-1911';
  247. {pues eso mismo de arriba chaaaaaacho,datos para pruebas}
  248.  
  249.     menuGlobal:=TRUE;
  250.     menuComprador:=TRUE;
  251.     menuReponedor:=TRUE;
  252.     REPEAT
  253.         writeln('Indique que dia es hoy');
  254.         readln(VentaHoy.fecha);{comprobar fecha correctamente introducida}
  255.         writeln('Introduzca su codigo');
  256.         readln(codigoIdentificacion);
  257.         posicionUsuario:=ComprobarCodigo(codigoIdentificacion,todosLosUsuarios);
  258.         IF(posicionUsuario>0)THEN{Comprador}
  259.             BEGIN
  260.                 writeln ('-------------------------------------------------------');
  261.                 writeln ('Bienvenido/a ', todosLosUsuarios.usuarios[posicionUsuario].nombre);
  262.                 writeln ('Su saldo acumulado es de ', todosLosUsuarios.usuarios[posicionUsuario].saldo:5:2);
  263.                 writeln ('-------------------------------------------------------');
  264.                 REPEAT
  265.                     writeln('**********************MENU**************************');
  266.                     writeln('a)Comprar producto');
  267.                     writeln('b)Introducir saldo');
  268.                     writeln('c)Finalizar');
  269.                     writeln('**********************MENU**************************');
  270.                     readln(eleccion);
  271.                     CASE (eleccion)OF
  272.                         'a','A':{comprar productos}
  273.                                 writeln('b');
  274.                         'b','B':{introducir saldo}
  275.                                 writeln('b');
  276.                         'c','C':{finalizar}
  277.                                 menuComprador:=FALSE
  278.                         ELSE
  279.                             writeln('Opcion incorrecta');
  280.                     END;{case of}
  281.                 UNTIL(menuComprador=FALSE);
  282.             END
  283.             {menu-Comprador}
  284.         ELSE IF posicionUsuario=0 THEN
  285.             writeln('codigo incorrecto')
  286.         ELSE IF posicionUsuario=-1 THEN{reponedor}
  287.             BEGIN
  288.                 REPEAT
  289.                     writeln('**********************MENU REPONEDOR**************************');
  290.                     writeln('a)Venta de tarjeta');
  291.                     writeln('b)Baja tarjeta');
  292.                     writeln('c)A?adir producto');
  293.                     writeln('d)Eliminar producto');
  294.                     writeln('e)Lista de productos');
  295.                     writeln('f)Lista de usuarios');
  296.                     writeln('g)Lista de ventas');
  297.                     writeln('h)Lista de usuarios que no han comprado');
  298.                     writeln('i)Lista de productos que han sido vendidos');
  299.                     writeln('j)Hacer backup');
  300.                     writeln('k)Restaurar backup');
  301.                     writeln('l)Guardar ventas');
  302.                     writeln('m)Cerrar sesion');
  303.                     writeln('n)Apagar maquina');
  304.                     writeln('**********************MENU REPONEDOR**************************');
  305.                     readln(eleccion);
  306.                     CASE (eleccion)OF
  307.                         'a','A':{Venta de tarjeta}
  308.                                 VentaTarjeta(todosLosUsuarios);
  309.                         'b','B':{Baja de tarjeta}
  310.                                 BajaTarjeta(todosLosUsuarios);
  311.                         'c','C':{A?adir producto}
  312.                                 AgregarProducto(todosLosProductos);
  313.                         'd','D':{}
  314.                                 BEGIN
  315.                                 writeln('d');
  316.                                 END;
  317.                         'e','E':{}
  318.                                 BEGIN
  319.                                 writeln('e');
  320.                                 END;
  321.                         'f','F':{}
  322.                                 BEGIN
  323.                                 writeln('f');
  324.                                 END;
  325.                         'g','G':{}
  326.                                 BEGIN
  327.                                 writeln('g');
  328.                                 END;
  329.                         'h','H':{}
  330.                                 BEGIN
  331.                                 writeln('h');
  332.                                 END;
  333.                         'i','I':{}
  334.                                 BEGIN
  335.                                 writeln('i');
  336.                                 END;
  337.                         'j','J':{}
  338.                                 BEGIN
  339.                                 writeln('j');
  340.                                 END;
  341.                         'k','K':{}
  342.                                 BEGIN
  343.                                 writeln('k');
  344.                                 END;
  345.                         'l','L':{}
  346.                                 BEGIN
  347.                                 writeln('l');
  348.                                 END;
  349.                         'm','M':{cerrar menu reponedor}
  350.                                 menuReponedor:=FALSE;
  351.                         'n','N':{apagar maquina}
  352.                                 BEGIN
  353.                                 menuReponedor:=FALSE;
  354.                                 menuGlobal:=FALSE;
  355.                                 END;
  356.                         ELSE
  357.                             writeln('Opcion incorrecta');
  358.                     END;{case of}
  359.                 UNTIL(menuReponedor=FALSE);
  360.             END;
  361.     UNTIL (menuGlobal=FALSE);
  362. END.
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top