next up previous
Next: Supermercado (SOLUCIÓN) Up: No Title Previous: No Title

Supermercado

 

Un supermercado adquirió una base de datos sin capacidad para acceso concurrente. Dicha base de datos tenía el siguiente interfaz:

DEFINITION MODULE BD;

(* Tipo para el codigo de los productos: *)
TYPE Codigos;

(* Tipo para el nombre de los productos: *)
TYPE Nombres;

(* Tipo para el precio de los productos: *)
TYPE Precios;

PROCEDURE ReadDatos (
  VAR c : Codigos (*OUT*),
  VAR n : Nombres (*OUT*),
  VAR p : Precios (*OUT*)
);
(*
 * Procedimiento utilizado para leer por consola los datos de un
 * producto que posteriormente se va a actualizar.
 *)
PROCEDURE LeerProducto (
  c : Codigos      (*IN*),
  VAR n : Nombres, (*OUT*)
  VAR p : Precios  (*OUT*)
);
(*
 * Acceso a la base de datos para consultar el nombre y el precio de
 * un producto.
 *)
PROCEDURE ActualizarProducto (
  c : Codigos (*IN*),
  n : Nombres (*IN*),
  p : Precios (*IN*)
);
(*
 * Acceso a la base de datos para actualizar el producto indicado por
 * el codigo c con el nombre n y el precio p.
 *)
END BD.

Las cajas registradoras sólo sumaban los precios introducidos a mano por el personal que las manejaba.

La dirección ha decidido adquirir unas nuevas cajas capaces de leer los códigos marcados en los productos. Para obtener el máximo partido de dicha inversion se pretende que las cajas accedan con dichos códigos a la base de datos (a través de LeerProducto).

Los datos de los productos (nombre y precio) se pueden actualizar (a través de ActualizarProducto) desde un puesto central. Al hacerlo, se quiere que los tickets sean consistentes, es decir, se quiere que en un ticket de una caja no pueda aparecer un mismo producto dos veces con nombre y/o precio diferente.

El grafo de procesos para el sistema a desarrollar es el siguiente:

El ejercicio consiste en

Nota: la solución al ejercicio puede desarrollarse con mecanismo de monitores o de paso de mensajes síncrono, a elección del alumno.





Angel Herranz Nieva
Thu Oct 31 20:17:43 MET 1996