La siguiente práctica es un sitio de intercambio de videojuegos:
Descripción
Está práctica consiste en crear una aplicación web que permita la gestión de un club de intercambio de videojuegos.
La aplicación debe permitir gestionar tres grupos de usuarios:
invitados, socios, administradores. Los invitados solo podrán acceder a
información sobre los video juegos disponibles para intercambio. Los
socios podrán gestionar su cuenta, ofreciendo juegos para intercambiar.
Los administradores podrán gestionar los usuarios y los videojuegos.
Detalle de casos de uso según tipo de usuario
Invitados
- Acceder a la información general del club
- Buscar en videojuegos (mostrando si están disponibles para intercambio)
- Darse de alta como socio
- Identificarse como usuario registrado
Socio
- Todas los casos de uso de invitado
- En el listado de juegos se mostrará cuántas unidades están disponibles
- Listado de socios que ofrecen un juego concreto
- Modificar datos del perfil
- Ofrecer un juego para intercambio (seleccionado de la lista de
disponibles). Los juegos los añade un administrador, los socios ofrecen
una unidad para intercambio.
- Dejar de ofrecer un juego para intercambio
- Dejar de estar identificado en el servidor
Administrador
- Todas los casos de uso de socio
- Eliminar un socio (y todos sus datos)
- Añadir/modificar/eliminar un juego
Tecnologías a emplear
Para el desarrollo de esta práctica se debe emplear
PHP como lenguaje de programación en el servidor,
SQLite3 como gestor de Bases de Datos, y para la programación del lado del cliente se permite usar
JQuery como apoyo a
JavaScript.
Como entorno de desarrollo se puede utilizar la plataforma aulaga o el entorno de desarrollo
Netbeans.
Para usar la plataforma aulaga no es necesario realizar ninguna
configuración. Se debe tener en cuenta que en caso edición simultánea de
la entrega en grupo se almacenará la última guardada.
La base de datos a emplear, por su sencillez de configuración y uso, será
SQLite. Como abstracción de acceso a bases de datos se debe emplear PDO
PHP Data Objects.
Ejemplos de manejo de la base de datos SQLite.
Tablas
En aulaga se tendrá disponible como base de datos SQLite (no es necesario crearlo) el fichero
datos.db con las tablas creadas y algunos datos de prueba. Para crear el objeto de gestión de la base de datos, usar
$db = new PDO("sqlite:./datos.db");
/* Es necesaria la siguiente instrucción para activar
la integridad referencial en la BD */
$db -> exec("PRAGMA foreign_keys = ON;");
usuarios
Campo |
Descripción |
id |
Identificador numérico único del usuario |
usuario |
Nombre de cuenta |
clave |
Clave del usuario (cifrado con MD5) |
nombre |
Nombre del usuario |
email |
Dirección de correo electrónico |
tipo |
Usuario normal o administrador (0 socio normal y 1 administrador) |
juegos
Campo |
Descripción |
id |
Identificador numérico único del juego |
plataforma |
Plataforma del juego |
nombre |
Nombre del juego |
descripcion |
Descripción |
URL |
Dirección de la página web del juego |
cambiables
Campo |
Descripción |
juego |
Identificador del juego |
usuario |
Identificador del usuario |
Se dispone inicialmente de 4 usuarios/claves: admin/1234, fulano/1, mengano/2 y zutano/3.
Programación del lado del cliente
Se requiere que los formularios sean validados apropiadamente antes
de ser enviados al servidor. Lo dicho antes no implica no realizar de
nuevo todas las comprobaciónes necesariias en el servidor. Se debe usar
en al menos una página peticiones AJAX para realizar la tarea
solicitada. Por ejemplo: cuando un socio o administrador esté en el
listado de juegos podrá pulsando en un botón/enlace y sin cambiar de
página ofrecer (o dejar de ofrecer) un juego como cambiable mediante una
petición AJAX.
Nota:
Las tablas anteriores
no tienen la estructura más apropiada para este problema. En el diseño de las tablas ha primado la sencillez de la solución necesaria.
Esquema y Datos de la BD
Use el siguiente código si desea crear la BD fuera de aulaga
CREATE TABLE [usuarios]
(
[id] INTEGER PRIMARY KEY,
[usuario] NVARCHAR(20) NOT NULL,
[clave] NVARCHAR(32) NOT NULL,
[nombre] NVARCHAR(200),
[email] NVARCHAR(200),
[tipo] INTEGER
);
CREATE UNIQUE INDEX IF NOT EXISTS [indexusuario] on [usuarios] ([usuario]);
CREATE UNIQUE INDEX IF NOT EXISTS [indexemail] on [usuarios] ([email]);
CREATE TABLE [juegos]
(
[id] INTEGER PRIMARY KEY,
[plataforma] NVARCHAR(60),
[nombre] NVARCHAR(60),
[descripcion] NVARCHAR(120),
[URL] NVARCHAR(120)
);
CREATE TABLE [cambiables]
(
[usuario] INTEGER NOT NULL,
[juego] INTEGER NOT NULL,
CONSTRAINT 'unico' UNIQUE ([usuario],[juego]),
FOREIGN KEY ([usuario]) REFERENCES [usuarios] ([id])
ON DELETE CASCADE,
FOREIGN KEY ([juego]) REFERENCES [juegos] ([id])
ON DELETE CASCADE
);
CREATE UNIQUE INDEX IF NOT EXISTS [indexusuariojuego] on [cambiables] ([usuario],[juego]);
/*******************************************************************************
Populate Tables
********************************************************************************/
INSERT INTO [usuarios] ([usuario], [clave], [nombre], [email], [tipo]) VALUES ('admin', '81dc9bdb52d04dc20036dbd8313ed055', 'Administrador', 'admin@intercambio.com', 1);
INSERT INTO [usuarios] ([usuario], [clave], [nombre], [email], [tipo]) VALUES ('fulano', 'c4ca4238a0b923820dcc509a6f75849b', 'Fulano de Tal', 'fulano@nomail.com', 0);
INSERT INTO [usuarios] ([usuario], [clave], [nombre], [email], [tipo]) VALUES ('mengano', 'c81e728d9d4c2f636f067f89cc14862c', 'Mengano de Cual', 'mengano@nomail.com', 0);
INSERT INTO [usuarios] ([usuario], [clave], [nombre], [email], [tipo]) VALUES ('zutano', 'eccbc87e4b5ce2fe28308fd9f2a7baf3', 'Zutano de Sal', 'zutano@nomail.com', 0);
INSERT INTO [juegos] ([plataforma], [nombre], [descripcion], [URL]) VALUES ('PS4', 'he Order: 1886', 'The Order 1886 es un videojuego de corte fantástico y ambientación de época para PlayStation 4', 'http://readyatdawn.com');
INSERT INTO [juegos] ([plataforma], [nombre], [descripcion], [URL]) VALUES ('PS4', 'Far Cry 4', 'Oculto entre las imponentes cumbres del Himalaya se esconde Kyrat, un paraíso sumido en la tradición y la violencia...', 'http://far-cry.ubi.com');
INSERT INTO [juegos] ([plataforma], [nombre], [descripcion], [URL]) VALUES ('DS3', 'The Legend of Zelda: Majora´s Mask 3D', 'The Skull Kid personifies the mischief and mystery of the Lost Woods, but a cursed mask has now morphed him into something exceedingly more terrifying.', 'https://www.nintendo.es/Juegos/Nintendo-3DS/The-Legend-of-Zelda-Majora-s-Mask-3D-941070.html');
INSERT INTO [juegos] ([plataforma], [nombre], [descripcion], [URL]) VALUES ('PS4', 'Assassin s Creed Liberation', 'Corre el año 1765. Mientras la Revolución Americana se prepara en Boston y Nueva York, en el sur los españoles planean hacerse con el control de Luisiana para servirla en bandeja a los templarios', 'http://assassinscreed.ubi.com/');
INSERT INTO [juegos] ([plataforma], [nombre], [descripcion], [URL]) VALUES ('PS4', 'Call of Duty®: Advanced Warfare', 'CALL OF DUTY: ADVANCED WARFARE TAKES PLACE IN A PLAUSIBLE FUTURE IN WHICH TECHNOLOGICAL PROGRESS AND TODAY’S MILITARY PRACTICES HAVE CONVERGED WITH POWERFUL CONSEQUENCES.', 'https://www.callofduty.com');
INSERT INTO [cambiables] ([usuario], [juego]) VALUES (1,1);
INSERT INTO [cambiables] ([usuario], [juego]) VALUES (1,4);
INSERT INTO [cambiables] ([usuario], [juego]) VALUES (2,2);
INSERT INTO [cambiables] ([usuario], [juego]) VALUES (2,3);
INSERT INTO [cambiables] ([usuario], [juego]) VALUES (3,1);
INSERT INTO [cambiables] ([usuario], [juego]) VALUES (4,1);
INSERT INTO [cambiables] ([usuario], [juego]) VALUES (4,2);
INSERT INTO [cambiables] ([usuario], [juego]) VALUES (4,5);
0 comentarios: