Professional Documents
Culture Documents
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.
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);
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'.
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>
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>
10
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