You are on page 1of 12

PEC 4

Fecha mxima de entrega: 03/06/2015

PROPUESTA DE SOLUCIN

Presentacin y Objetivos
La Prueba de Evaluacin Continuada IV (PEC4) es la ltima de las cuatro PECs de las que
consta la asignatura. Esta PEC tiene un peso del 35% en la nota final y los conceptos que se
trabajan en ella son los correspondientes a los mdulos "Bases de datos en MySQL", "Bases de
datos en PostgreSQL", "Desarrollo de aplicaciones con conexin a Bases de Datos" y "Casos de
estudio".
La PEC consta de tres ejercicios prcticos. La valoracin de cada ejercicio en el global de la
PEC se incluye en la cabecera del enunciado. Puesto que la asignatura no tiene examen, es
necesario realizar todas las PECs para poder superar la asignatura. Los ejercicios parten de la
solucin de las PECs anteriores, por lo que es importante tener las tablas creadas y los
datos cargados segn constan en las mismas.

1. Funciones PostgreSQL (45%)


La operativa del sistema informtico preparado para las empresas que desean operar en el
mercado burstil parece ser todo un xito, por lo que se desea codificar una de las funciones
que se cree ser crtica para su funcionamiento: un disparador que permitir realizar la compra
de las acciones.
En el momento en que se realice una insercin en la tabla 'BuySell' (se asumir que siempre es
una compra) se deber ejecutar un disparador que ejecute una funcin que realice lo siguiente:
- Sustituir el valor del campo dateHour por la hora actual del servidor (con now()).
- Asignar una 'B' al campo buySell.
- Comprobar en IntraDay que para el valor identificado por ticket, fecha y hora, existen
suficientes acciones disponibles y que el precio al que se desea adquirir las acciones es
igual o superior al que consta en IntraDay. En caso que no se cumpla alguna de las dos
condiciones, se deber sustituir el valor del campo de BuySell.quantityStock por un cero.
En el caso que se cumplan las dos condiciones, se sustituir el valor de compra deseado
por el precio de IntraDay (podemos comprar acciones siempre que tengan un precio
menor al mximo que deseamos pagar) y descontaremos de IntraDay.quantityStock el
nmero de acciones que se compran.
NOTA: es imprescindible para realizar el ejercicio tener las tablas creadas y los datos cargados
exactamente segn la propuesta de solucin oficial de la PEC3. La existencia de la
CONSTRAINT que impide insertar en BuySell rdenes de cero acciones es el mecanismo
(sencillo y bsico) elegido como control de errores.
A efectos de facilitar el desarrollo del disparador / funcin, se considerar que la compra se
efecta al realizar las inserciones adjuntas, en la tabla BuySell (se debern ejecutar tambin los
SQL adjuntos para preparar las tablas con unos datos bsicos):
DELETE FROM BuySell;

DELETE FROM Client CASCADE;


DELETE FROM Employee CASCADE;
DELETE FROM BrokerCompany CASCADE;
DELETE FROM Person CASCADE;
INSERT INTO Person VALUES (1, '12345678T', 'Pirno Gamez, Nazaret', '911231234', '01/01/1970', NULL, 'M');
INSERT INTO Person VALUES (2, '3213213S', 'Romero Parta, Chavier', '939879876', '01/01/1964', NULL, 'M');
INSERT INTO BrokerCompany VALUES (1, 'Gestora Ganancia', '01/01/2000', NULL);
INSERT INTO Employee VALUES (2, '06/04/2000', NULL);
INSERT INTO Client (id, idBroker, startDate) VALUES (1, 2, '09/10/2001');
UPDATE intraDay SET quantityStock = 500 WHERE ticket = 'ES0167050915' AND intraDayDay = '11/03/2009' AND
intraDayHour = '09:15:00';

Mostrad el cdigo de la funcin y del disparador.


CREATE FUNCTION FU_BuySell() RETURNS TRIGGER AS '
BEGIN
NEW.dateHour = now();
NEW.buySell = ''B'';
IF (SELECT IntraDay.quantityStock
FROM IntraDay
WHERE intraDay.ticket = NEW.ticket AND
IntraDay.intraDayDay = NEW.intraDayDay AND
IntraDay.intraDayHour = NEW.intraDayHour) < NEW.quantityStock
OR
(SELECT intraDay.price FROM IntraDay
WHERE intraDay.ticket = NEW.ticket AND
IntraDay.intraDayDay = NEW.intraDayDay AND
IntraDay.intraDayHour = NEW.intraDayHour) > NEW.price
THEN
NEW.quantityStock = 0;
ELSE
NEW.price = (SELECT intraDay.price FROM IntraDay
WHERE IntraDay.ticket = NEW.ticket AND
IntraDay.intraDayDay = NEW.intraDayDay AND
IntraDay.intraDayHour = NEW.intraDayHour);
UPDATE IntraDay SET quantityStock = (quantityStock - NEW.quantityStock)
WHERE ticket = NEW.ticket AND
IntraDayDay = NEW.intraDayDay AND
IntraDayHour = NEW.intraDayHour;
END IF;
RETURN NEW;
END;
' LANGUAGE 'plpgsql';

CREATE TRIGGER TR_BuySell


BEFORE INSERT ON BuySell
FOR EACH ROW
EXECUTE PROCEDURE FU_BuySell();

Al restar el nmero de acciones compradas del campo quantityStock de IntraDay, qu pasar


cuando se alcancen las cero acciones?
Se pueden alcanzar las cero acciones, pero no se podr continuar decrementando el valor de
este campo (no se puede comprar una cosa que no existe), puesto en la funcin sustituir, en

dicho caso, el valor del campo quantityStock de BuySell por cero con el fin qye entre en accin la
restriccin existente para dicho campo.
Qu pasar si el nmero de telfono desde donde llama el comprador (que se intenta insertar)
no es el que se tiene anotado en Person?
Puesto hay integridad referencial entre el nmero de telfono de BuySell y el nmero de telfono
de Person, la insercin no se llegar a realizar.
Indicad los mensajes que retorna el SGBD e indicad si la insercin es correcta/incorrecta en los
siguientes casos:
INSERT INTO BuySell (id, ticket, intraDayDay, intraDayHour, idEmployee, idBrokerCompany, idClient, phoneNumber,
quantityStock, price) VALUES (1, 'ES0167050915', '11/03/2009', '09:15:00', 2, 1, 1, '911231234', 100, 30.00);
INSERT INTO BuySell (id, ticket, intraDayDay, intraDayHour, idEmployee, idBrokerCompany, idClient, phoneNumber,
quantityStock, price) VALUES (2, 'ES0167050915', '11/03/2009', '09:15:00', 2, 1, 1, '911231234', 100, 28.50);
INSERT INTO BuySell (id, ticket, intraDayDay, intraDayHour, idEmployee, idBrokerCompany, idClient, phoneNumber,
quantityStock, price) VALUES (3, 'ES0167050915', '11/03/2009', '09:15:00', 2, 1, 1, '911231234', 600, 29.75);

nicamente funcionar la primera insercin, dado que en la segunda el precio de compra


mximo indicado es inferior al precio de IntraDay, y en la tercera no hay suficientes acciones
disponibles para realizar la compra (no se ha contemplado la posibilidad de realizar compras
parciales).
Mostrad (captura de pantalla) el contenido final de la tabla BuySell y del registro IntraDay con
ticket ES0167050915 y fecha/hora '11/03/2009', '09:15:00', despus de haber realizado las
inserciones del inicio del ejercicio, teniendo el disparador y la funcin creados, y habiendo
ejecutado los insert de ste apartado.

NOTAS de desarrollo:
- Cread la funcin incrementalmente, probando cada update y condicin individualmente.
- En caso de borrar la tabla BuySell se borrarn automticamente los triggers asociados.
- Se considera (a efectos de simplificacin) que toda insercin de registro en la tabla
BuySell corresponde a una Compra (no tenindose que tratar el posible caso de venta).
- Al modificar / borrar la funcin que se desarrolla, asegurad cada vez que el trigger sigue
'disparndose'. Es muy til poner como primera lnea de la funcin la asignacin de la 'B'
de 'Compra' en el campo correspondiente, y verificar a cada prueba que en los datos que
se insertan en BuySell consta dicha 'B'.

2. Sistema de consultas Web (45%)


Las expectativas del nuevo sistema informtico para la intermediacin de acciones son cada vez
mayores, por lo que se decide empezar formalmente su desarrollo.
Se pide realizar en PHP una aplicacin bsica de tres pantallas;
Pantalla autentificacin:
Todo cliente que desee utilizar el sistema deber introducir su nick y su contrasea. En caso de
ser vlidos, se podr pasar a la pantalla de compra de acciones.
Pantalla compra acciones:
Se debern poder introducir los siguientes datos (en sus respectivos campos);
- Nombre corto de la accin que deseamos adquirir (por ejemplo SAB de Banco Sabadell).
- Nmero acciones que se desean adquirir.
- Importe mximo que deseamos pagar por las acciones.
- Identificador del cliente (campo id). NOTA: Se aade para simplificar el cdigo PHP
(idealmente se debera arrastrar dicho valor desde la pantalla de autentificacin).
- Identificador el empleado (id del broker) con el que realizaremos la operacin (se asumir
que ste operar siempre con el gestor con ID = 2).
- Nmero de telfono desde el que se realiza la operacin.
Pantalla resultados:
Una vez se pulse sobre 'Aceptar' en la pantalla de compra, el programa deber:
- Recuperar el identificador 'ticket' segn el nombre corto introducido. Recuperar la fecha y
hora del ltimo registro que consta en IntraDay para dicho valor.
- Con 'ticket', la fecha y hora, y el resto de datos introducidos, realizar la insercin en
BuySell.
Una vez finalizado el proceso se deber mostrar un listado con los datos de todas las
operaciones de compra que ha realizado el cliente para dicho valor, mostrndose en cada lnea:
la fecha y hora de la compra, el nombre corto del valor, el nmero de acciones, el precio de las
acciones y el importe total (num. acciones*precio compra)
Al final del listado deber aparecer la suma del total de acciones, junto con el precio total de
adquisicin.
NOTA:
- El cdigo PHP de la pantalla que pide el nombre de usuario y contrasea para la
autentificacin se puede reaprovechar de la PAC4 de semestres anteriores (no es
necesario asegurar 'la seguridad' del sistema de autentificacin).
- Se deber ampliar la tabla Client con los campos 'nick' y 'password', a efecto de poder
realizar la verificacin inicial.
- En caso de indicarse un precio de compra inferior al que consta en IntraDay o no quedar
acciones suficientes al intentar realizarse el insert, se producir un error por una
CONSTRAINT. Aunque no hace falta realizar el tratamiento del error (puede quedar el
mensaje en pantalla), se deber mostrar listado de las acciones que consta que tiene el
cliente para el valor concreto.
Para probar la aplicacin, borrad el contenido de las tablas Person, BrokerCompany, Employee,
Client y BuySell e insertad los siguientes registros (dichos datos son les que deben aparecer en
las capturas de pantalla que demuestren el funcionamiento de la aplicacin):

DELETE FROM BuySell;


DELETE FROM Client CASCADE;
DELETE FROM Employee CASCADE;
DELETE FROM BrokerCompany CASCADE;
DELETE FROM Person CASCADE;
ALTER TABLE Client ADD nick VARCHAR(20);
ALTER TABLE Client ADD password VARCHAR(20);
INSERT INTO Person VALUES (1, '12345678T', 'Pirno Gamez, Nazaret', '911231234', '01/01/1970', NULL, 'M');
INSERT INTO Person VALUES (3, '98798765Y', 'Jimeno Vilchez, Iban', '977213708', '01/01/1980', NULL, 'M');
INSERT INTO Person VALUES (2, '3213213S', 'Romero Parta, Chavier', '939879876', '01/01/1964', NULL, 'M');
INSERT INTO BrokerCompany VALUES (1, 'Gestora Ganancia', '01/01/2000', NULL);
INSERT INTO BrokerCompany VALUES (2, 'Ilusiones', '31/12/2004', NULL);
INSERT INTO Employee VALUES (2, '06/04/2000', NULL);
INSERT INTO Client (id, idBroker, startDate, nick, password) VALUES (1, 2, '09/10/2001', 'pgamez', 'abc');
INSERT INTO Client (id, idBroker, startDate, nick, password) VALUES (3, 2, '12/11/2003', 'jivi', '123');

Nota: al realizar el ALTER TABLE de la tabla CLIENTE, ya no podemos asegurar el orden de los
campos.
UPDATE IntraDay SET quantityStock = 500 WHERE ticket = 'ES0167050915' AND intraDayDay = '11/03/2009' AND
intraDayHour = '09:15:00';
UPDATE IntraDay SET quantityStock = 500 WHERE ticket = 'ES0167050915' AND intraDayDay = '03/09/2008' AND
intraDayHour = '15:20:00';
UPDATE IntraDay SET quantityStock = 500 WHERE ticket = 'ES0167050915' AND intraDayDay = '16/06/2008' AND
intraDayHour = '14:52:00';
INSERT INTO BuySell (id, ticket, intraDayDay, intraDayHour, idEmployee, idBrokerCompany, idClient, phoneNumber,
quantityStock, price) VALUES (4, 'ES0167050915', '16/06/2008', '14:52:00', 2, 1, 1, '911231234', 100, 34.78);
INSERT INTO BuySell (id, ticket, intraDayDay, intraDayHour, idEmployee, idBrokerCompany, idClient, phoneNumber,
quantityStock, price) VALUES (5, 'ES0167050915', '03/09/2008', '15:20:00', 2, 1, 1, '911231234', 200, 31.10);
INSERT INTO BuySell (id, ticket, intraDayDay, intraDayHour, idEmployee, idBrokerCompany, idClient, phoneNumber,
quantityStock, price) VALUES (6, 'ES0167050915', '11/03/2009', '09:15:00', 2, 1, 1, '911231234', 100, 29.90);
INSERT INTO BuySell (id, ticket, intraDayDay, intraDayHour, idEmployee, idBrokerCompany, idClient, phoneNumber,
quantityStock, price) VALUES (7, 'ES0167050915', '11/03/2009', '09:15:00', 2, 2, 3, '977213708', 100, 29.65);

Se pide mostrar los programas PHP y una captura de pantalla, de cada 'pantalla', que muestre el
funcionamiento y el resultado de las operaciones y consultas.
autentica.php
<html>
<head>
<title>Brokers OnLine</title>
</head>
<body>
<center><h1>Broker's intranet</h1></center>
<form action="control.php" method="post">
<table align="center" width="225" cellspacing="2" cellpadding="2" border="0">
<tr>
<td colspan="2" align="center" bgcolor=#cccccc>Introduce nombre de usuario</td>
</tr>
<tr><td> </td></tr>
<tr>
<td align="right">USER: </td>
<td><input type="Text" name="user" size="14" maxlength="50"></td>
</tr>
<tr>
<td align="right">PASSWORD: </td>
<td><input type="password" name="password" size="14" maxlength="50"></td>
</tr>

<tr>
<BR>
<td colspan="2" align="center"><input type="Submit" value="Submit"></td>
</tr>
</table>
</form>
</body>
</html>
control.php
<html>
<head>
<title>Brokers OnLine</title>
</head>
<body>
<br>
<?php
$conexio = pg_connect("host=localhost port=5432 dbname=postgres password=1234
user=postgres") or die("<BR>ERROR accedint a la BD!<BR>");
$sql = "SELECT COUNT(*) FROM client WHERE nick = '".$_POST['user']."' AND
password = '".$_POST['password']."'";
$resultat_set = pg_Exec ($conexio, $sql);
$TotalRegistres = pg_result($resultat_set, 0);
pg_close($conexio);
if ($TotalRegistres == 0) {
echo "Autentication Error: ";
?> <a href="autentica.php">Back to home</a>
<?php
}
else {
header("location: dades.php");
}
?>
</body>
</html>
dades.php
<html>
<head>
<title>Brokers OnLine</title>
</head>
<body>
<center><h1>Buy Shares</h1></center>
<form action="compra_accio.php" method="post">
<table align="center" width="250" cellspacing="2" cellpadding="2" border="0">
<tr>
<td colspan="2" align="center" bgcolor=#cccccc>Operation details</td>
</tr>
<tr>
<td align="right">Share name: </td>
<td><input type="Text" name="valor" size="14" maxlength="50"></td>
</tr>
<tr>
<td align="right">Quantity: </td>
<td><input type="Text" name="accions" size="14" maxlength="50"></td>
</tr>
<tr>
<td align="right">Max. price: </td>
<td><input type="Text" name="price" size="14" maxlength="50"></td>
</tr>
<tr>
<td align="right">Id. Broker: </td>

<td><input type="Text" name="broker" size="14" maxlength="50"></td>


</tr>
<tr>
<td align="right">Id. Client: </td>
<td><input type="Text" name="idcli" size="14" maxlength="50"></td>
</tr>
<tr>
<td align="right">Phone number: </td>
<td><input type="Text" name="numtel" size="14" maxlength="50"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="Submit" value="Enviar"></td>
</tr>
</table>
</form>
</body>
</html>

compra_accio.php
<html>
<head>
<title>Buy Shares</title>
</head>
<body>
<br>
<?php
$conexio = pg_connect("host=localhost port=5432 dbname=postgres password=1234
user=postgres") or die("<BR>ERROR open BD!<BR>");
// Retrieve ticket id from short nom
$sql_1 = "SELECT ticket, intraDayDay, intraDayHour FROM IntraDay WHERE ticket =
(SELECT ticket FROM
valor WHERE shortName = '".$_POST['valor']."') ORDER BY intraDayDay DESC, intraDayHour
DESC LIMIT 1;";
$result_set_1 = pg_Exec ($conexio, $sql_1);
$numRows_1 = pg_num_rows ($result_set_1);
if ($numRows_1 == 0){
echo "Not found";
}
else {
$ticket=pg_result($result_set_1,0,0);
$data=pg_result($result_set_1,0,1);
$hora=pg_result($result_set_1,0,2);
$sql_2 = "INSERT INTO BuySell (ticket, intraDayDay, intraDayHour, idEmployee,
idBrokerCompany, idClient, phoneNumber, quantityStock, price)
VALUES ('".$ticket."', '".$data."', '".$hora."', 2, 1, ".$_POST['idcli'].",
'".$_POST['numtel']."', ".$_POST['accions'].", ".$_POST['price'].");";
$result_set_2 = pg_Exec ($conexio, $sql_2);
// Se fa la consulta de las accions comprades
$sql_3 = "SELECT intraDayDay, intraDayHour, quantityStock, price FROM BuySell WHERE
idClient = ".$_POST['idcli']." AND ticket = '".$ticket."';";
$result_set_3 = pg_Exec ($conexio, $sql_3);
$numRows_3 = pg_num_rows ($result_set_3);
if ($numRows_3 == 0){
echo "Client havent share!";
}
else {
?><BR><BR>
<CENTER>
<H3>Operation history<?php ECHO $_POST['valor']; ?></H3>
<TABLE width="700" cellpadding="1" cellspacing="1" border="1"
bordercolor="#000000"><TR>
<TD><CENTER>Date</CENTER></TD>

<TD><CENTER>Hour</CENTER></TD>
<TD><CENTER>Share</CENTER></TD>
<TD><CENTER>Quantity/CENTER></TD>
<TD><CENTER>Buy price</CENTER></TD>
<TD><CENTER>Total</CENTER></TD>
<?php
// Loop to retrieve data
$import_total = 0;
$total_accions = 0;
for ($comptador=0; $comptador < $numRows_3; $comptador++) {
?><TR><?php
$quantityStock = pg_result($result_set_3, $comptador, 2);
$price = pg_result($result_set_3, $comptador, 3);
$total_linia = $quantityStock * $price;
$import_total = $import_total + $total_linia;
$total_accions = $total_accions + $quantityStock;
?>
<TD><?php ECHO pg_result($result_set_3, $comptador, 0); ?></TD>
<TD><?php ECHO pg_result($result_set_3, $comptador, 1); ?></TD>
<TD><?php ECHO $_POST['valor']; ?></TD>
<TD><?php ECHO $quantityStock; ?></TD>
<TD><?php ECHO $price; ?></TD>
<TD><?php ECHO $total_linia; ?></TD>
</TR>
<?php
}
?></TABLE>
<BR><H3>Quantity Share:</H3>
<?php echo $total_accions; ?>
<BR><H3>Total value:</H3>
<?php echo $import_total." Euros";
}
}
pg_close($conexio);
?>
<br><br>
<a href="dades.php">Back to home</a>
</body>
</html>

Las pantallas que corresponden al funcionamiento son:

Despus de realizarse la insercin, aparece el resumen:

Se observa que el precio de compra que se ha indicado en la pantalla de introduccin de datos,


ha sido sustituido por el que tena la accin en aquel momento (en IntraDay).
Despus de realizar una segunda compra aparecer:

3. Consulta datos cliente/servidor (10%)


Para incrementar la interoperatibilidad del sistema de compra/venta burstil, se cree
conveniente probar una consulta sobre el SGBD MySQL/MariaDB.
Se desea:
1. Cread en el MySQL/MariaDB las tablas ShareStock y BuySell, equivalentes a las
existentes el en PostgreSQL.
2. Cargad los datos de las tablas recin creadas, de los ficheros .txt del mismo nombre
adjuntos al enunciado de la PEC.
3. Realizad un programa en Java (segn ejemplo adjunto al enunciado de la PEC), que
accediendo a la base de datos MySQL/MariaDB por JDBC, retorne el listado de acciones que
tiene el cliente con id 3 (para simplificar el ejercicio constar que dicho valor siempre ser fijo
en la consulta). En cada lnea se deber mostrar el nombre corto del valor, la fecha (tercera
columna), el total de acciones, el precio de compra y el importe de la operacin.
Se pide mostrar los SQL utilizados para la carga de los datos, el programa java desarrollado
y una captura de pantalla que muestre su funcionamiento.
CREATE TABLE ShareStock (
ticket CHAR(12),
idStockMarket DECIMAL(3,0),
shortName VARCHAR(6),
longName VARCHAR(50),
CONSTRAINT PK_ShareStock PRIMARY KEY (ticket),
CONSTRAINT AK_ticketShareStock UNIQUE (ticket, idStockMarket),
CONSTRAINT CH_longName CHECK (longName IS NOT NULL))
ENGINE=INNODB;
CREATE TABLE BuySell (
id DECIMAL(6,0),
ticket CHAR(12),
intraDayDay DATE,
intraDayHour TIME,
idEmployee DECIMAL(6,0),
idBrokerCompany DECIMAL(2,0),
idClient DECIMAL(6,0),
phoneNumber VARCHAR(12),
buySell CHAR(1),
quantity DECIMAL(7,0),
price DECIMAL(6,2),
CONSTRAINT PK_BuySell PRIMARY KEY (id),
CONSTRAINT FK_ticket FOREIGN KEY (ticket) REFERENCES ShareStock(ticket)
)
ENGINE=INNODB;
LOAD DATA INFILE 'c:/ShareStock.txt'
INTO TABLE ShareStock
FIELDS TERMINATED BY ';' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';

LOAD DATA INFILE 'c:/BuySell.txt'


INTO TABLE BuySell

10

FIELDS TERMINATED BY ';' ENCLOSED BY '"'


LINES TERMINATED BY '\r\n';
//
// Check the actions of a particular user (the ID should be entered for parameter)
// 20150420
//
import java.io.*;
import java.lang.*;
import java.sql.*;
public class consulta {
public static void main(String[] args) throws Exception {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String passwd = "1234";
Class.forName(driver);
Connection conexion = DriverManager.getConnection(url, user, passwd);
// SQL
Statement compra = conexion.createStatement();
ResultSet rscompra = compra.executeQuery ("SELECT ShareStock.shortName,
BuySell.intraDayDay, BuySell.quantity, BuySell.price, BuySell.quantity * BuySell.price
FROM BuySell, ShareStock WHERE BuySell.ticket = ShareStock.ticket AND BuySell.idClient
= 3;");
// Retrieve each row
System.out.println("SHARE_NAME DATE
NUMBER PRICE
IMPORT");
while (rscompra.next()) {
System.out.println(rscompra.getString(1) + " \t" + rscompra.getString(2) + " \t" +
rscompra.getString(3) + " \t" + rscompra.getString(4) + " \t" +
rscompra.getString(5));
}
// Close connection
conexio.close();
}
}

11

Formato de entrega
Se valorar que las sentencias de creacin de tablas, los SQLs, el cdigo java y PHP sean muy
legibles y estn adecuadamente indentados (tabulados).
Se debern entregar tres ficheros: un fichero ofimtico editable (ODT, DOC, RTF), una versin
del mismo en formato PDF (a efectos de evitar problemas de insercin de imgenes y otros derivados de la ofimtica) y un tercer fichero de tipo zip o rar. Este ltimo deber contener todo el
cdigo PHP y JAVA. Incluid adems todo el cdigo SQL, Java, y PHP en el documento editable.
No comprimis el fichero (ni ZIP, ni RAR, etc), ni entreguis ficheros adicionales a los
documentos indicados.
El
nombre
de
los
documentos
a
entregar
debe
seguir
el
patrn:
BD_PEC4_Apellido1Nombre.extensin y debe constar vuestro nombre y apellidos al principio de
la PEC.
La PEC se entregar a travs del apartado correspondiente del aula.
La fecha mxima de entrega, improrrogable, son las 23h 59min del da 3 de junio de 2015.

12

You might also like