Proyecto ELO330
Acceso general sincronizado a un inventario
Por Ariel Gamboa, Rodrigo Jimenez
Resumen
En el ámbito administrativo de lo referente al inventario de una tienda, es necesario mantener actualizada y accesible la información de los productor existentes, la cual debe ser modificada por el encargado de la bodega quien recibe y ordena los productos proporcionados por los proveedores, además los vendedores deben ser capaces de quitar productos del stock al momento de vender, y al mismo tiempo los clientes quieren ver una lista actualizada de los productos disponibles para comprar. Es por esto que se hace necesario aplicar los conocimientos adquiridos en ELO330 tales como zonas de memoria compartida, comunicacion entre procesos, hilos de prosesos, semaforos de sincronizacion y llamadas al systema para permitir y sincronizar el acceso a estos datos compartidos, por los 3 diferentes grupos de personas al mismo tiempo.
Los tres programas
El problema fue resuelto por medio de tres archivos fuente bodeguero.c, comprador.c y vendedor.c, los cuales compilan tres programas respectivamente:
- Programa b: Este programa es diseñado para que sea operado por un bodeguero, el cual tiene acceso a revisar el inventario (pudiendo filtrar por nombre o etiqueta los artículos) y agregar nuevos artículos a este. Este programa crea dos zonas de memoria compartida, una para el inventario y otra para el carrito de compras, estas secciones son compartidas entre este programa y el del comprador, ya que ambos necesitan saber del inventario y carrito de compras.
- Programa v: Este programa esta diseñado para un vendedor. Se trata de un servidor que abre un puerto tcp para comunicarse con el programa del comprador y usa hilos para concurrencia, de manera de esperar una conexión cuando el comprador confirme sus artículos. Hecha esta confirmación, el programa recibe el carrito de compras desde el programa de comprador e informa los costos y el total al vendedor. El vendedor debe esperar a terminar la transacción y presionar la tecla enter para enviar devuelta al programa del comprador la confirmación del pago, para luego quedar esperando por una nueva conexión.
- Programa c: Este programa esta diseñado para un consumidor que quiera comprar productos, por lo que tiene acceso a ver el inventario compartido con el bodeguero (pudiendo filtrar por nombre o etiqueta los artículos) y agregar artículos a un carrito de compra, por lo que también se tiene acceso a revisar este carrito, para una vez seguro, confirmar la compra y usando el rol de cliente tcp, conectarse al programa del vendedor y enviarle el carrito de compras para proceder con el pago, una vez realizado, el servidor responde y este programa procede a actualizar el inventario y eliminar el carrito de compras, quedando este programa nuevamente disponible para un nuevo comprador.
Ejemplo de Uso
A continuacion se muestra un ejemplo de uso: en vista que es un programa con asignacion de memoria compartida y servidor socket tcp, los programas deben ejecutarse en orden.
En primer lugar se ejecuta el programa b, puesto que este crea la zona de memoria compartida para inventario y carrito de compras.
$./b
En cualquier momento el bodeguero puede revisar el inventario y agregar nuevos productos.
Luego se debe ejecutar el programa v, en vista que este levanta el servidor tcp al que se conectará el cliente. Este programa queda esperando por conexiones desde el programa cliente cuando se solicite concretar una venta.
$./v <puerto>
Finalmente, se ejecuta el programa cliente:
$./c <ip> <puerto>
En cualquier momento puede aparecer un cliente y ocupar el programa: ver inventario, seleccionar articulos (pudiendo filtrarlos), ver carrito de compras y confirmar la compra.
Conclusiones
- Se logro implementar elacceso sincronizado a inventario mediante los topicos de ELO330:
- Para la comunicacion entre programas se logro reservar y acceder a una zona de memoria compartida por los distintos programas. Ademas se logro implementar el servidor y cliente socket tcp.
- Se implemento el topico de ejecucion de instrucciones bash shell desde un programa en c, como es el caso del comando "clear" para limpiar la pantalla del terminal tras cada menu, logrando asi mejorar la interfaz de usuario mediante linea de comandos.
- Se logro implementar semaforos de sincronizacion para el correcto envio "serial" de datos entre el cliente y el servidor socket tcp.
- Se logro implementar hebras de procesos para acceder simultaneamente a los inventarios y comprar.
- Se destaca la existencia de disponer y conocer de lenguajes de alto nivel (como java) para programas de este tipo, con manejos de memoria compartida y comunicacion de procesos via sockets, donde trabajar en lenguaje C (como nuestro caso) se vuelve algo tedioso y se necesita escribir mucho codigo.
Mejoras
EL proyecto puede mejorarse bastante, entre las mejoras detectadas se tiene:
- Agregar opcion de eliminar articulos del carrito.
- Añadir detalle de la compra en programa vendedor
- Utilizar bases de datos para almacenar los inventarios.
- Creacion de interfaz gráfica.
entre otras.
Capturas
Interfaz de bodeguero
Interfaz de comprador
Interfaz de vendedor
Descargas
Fuente: enlace
Presentacion: enlace