Archivo

Posts Tagged ‘DUOC UC’

Laboratorio Inicio DAI4501

Este es el primer laboratorio de Desarrollo de Apliaciones para Internet

ACTIVIDAD 1 MANEJO DE ARREGLOS

Construir  un  programa  en  PHP  que  permita  leer  el  nombre  y  las
notas de un alumno (escala de 1.0 a 7.0). Cada nota tiene un peso
del 50% en la nota final. Su aplicación deberá ser capaz de:

R01. Guardar los datos dentro de un arreglo

R02. Generar un informe que responda al siguiente esquema:

NOMBRE  NOTA 1  NOTA 2  PROMEDIO
——  ——  ——  ——–
——  ——  ——  ——–
PROMEDIO DEL CURSO

R03. Imprimir el nombre de los mejores alumnos, los que tienen el
promedio más alto del curso.

R04.  Mostrar  la  moda  de  las  notas  de  la  primera  y  segunda
evaluación. La moda es el valor que más se repite.

R05.  Generar  el  siguiente  informe  ordenado  de  menor  a  mayor  de
acuerdo al promedio de notas.

NOMBRE  PROMEDIO
——  ——–

ACTIVIDAD 2AMPLIANDO FUNCIONALIDAD

Repetir  el  ejercicio  de  la  actividad  anterior,  pero  ahora
considerando que el usuario DEBERÁ ingresar el porcentaje asociado
a cada evaluación.

Desarrollo:

<?PHP
/*
	@Autor: Esteban Fuentealba
	@Email: mi [dot] warezx [at] gmail [dot] com

	Enunciado:
		Construir  un  programa  en  PHP  que  permita  leer  el  nombre  y  las
		notas de un alumno (escala de 1.0 a 7.0). Cada nota tiene un peso
		del 50% en la nota final.
*/

#
#	Clase Nota
#
class Nota {
	var $valor=1.0;
	var $porcentaje;
	public function __construct($v,$p) {
		$this->valor = $v;
		$this->porcentaje = $p;
	}
}
#
#	Clase Alumno
#
class Alumno {
	#Atributos de La Clase
	var $nombre ="";
	var $notas = array();

	#Constructor
	public function __construct($nom,$val,$per) {
		#Compruebo que el largo del nombre sea mayor a 1 osino lanzo exception
		if(strlen($nom) < 1)
			throw new Exception('El largo del Nombre debe ser Mayor a 1 caracter');
		$this->nombre = $nom;
		$i=0;
		$suma_percent=0;
		foreach($per as $p) {
			if($p == null || $p == "" || !is_numeric($p))
				throw new Exception('Falta un porcentaje de nota');
			$suma_percent += $p;
		}
		if($suma_percent != 100)
			throw new Exception('Porcentajes Mal Puestos');
		foreach($val as $nota) {
			#Compruebo que las notas solo sean numeros y esten en el rango
			if(!is_numeric($nota) || $nota > 7 || $nota < 1) {
				//Nota mala lanzo una exception
				throw new Exception('Nota <b>'.$nota.'</b> debe ser >=1 && <= 7.');
			}
			$this->notas[] = new Nota($nota,$per[$i]);
			$i++;
		}
	}
	#Funcion para obtener el promedio del alumno
	public function getPromedio(){
		$suma = 0;
		foreach($this->notas as $nota) {
				$suma += (($nota->porcentaje / 100) * $nota->valor);
		}
		return $suma;
	}
}	//Fin Clase

	if (isset($_POST['listaAlumnos'])){
		$lista = unserialize($_POST["listaAlumnos"]);
	}
	else{
		$lista=array();
	}
		if(isset($_POST['createFields'])) {
			$nNotas = $_POST['createFields'];
		} else {
			$nNotas = 0;
		}

	#R01
	#	Guardar los datos dentro de un arreglo

	if(isset($_POST['guardar'])) {
		#Asigno a la variable $nombre el dato del parametro nombre
		$nombre = $_POST['nombre'];
		$notas = $_POST['nota'];
		$percent = $_POST['percent'];
		if(is_array($notas) && is_array($percent)) {
			try {
				#Creo Alumno y lo agrego a la lista
				$nuevo_alumno = new Alumno($nombre,$notas,$percent);
				$lista[] = $nuevo_alumno;
			} catch(Exception $e) {
				echo $e->getMessage();
			}
		}

	}	//Fin R01

	#R02
	#	 Generar un informe que responda al siguiente esquema:
	#		NOMBRE  NOTA 1  NOTA 2  PROMEDIO
	#		------  ------  ------  --------
	#		------  ------  ------  --------
	#		PROMEDIO DEL CURSO 

	else if(isset($_POST['R02'])) {
		echo '<table><thead><tr><th>NOMBRE</th>';
		for($i=1; $i <= $nNotas; $i++) {
			echo '<th>NOTA '.$i.'</th>';
		}
		echo '<th>PROMEDIO</th></tr></thead><tbody>';
		$suma_curso=0;
		foreach($lista as $alumno) {
			echo '<tr align="center"><td>'.$alumno->nombre.'</td>';
			foreach($alumno->notas as $nota) {
				echo '<td>'.$nota->valor.'</td>';
			}
			echo '<td>'.$alumno->getPromedio().'</td></tr>';
			$suma_curso += $alumno->getPromedio();
		}
		echo '</tbody></table>';
		echo 'Promedio del Curso: <b>'.($suma_curso / count($lista)).'</b><br /><br />';
	}	//Fin R02

	#R03
	#	Imprimir el nombre de los mejores alumnos, los que tienen el promedio más alto del curso. 

	else if(isset($_POST['R03'])) {
		$lista_ordenada = $lista;
		objSort($lista_ordenada);
		echo '<table><thead><tr><th>Promedios Mas Altos</th></tr></thead><tbody>';
		for($i=count($lista_ordenada)-1; $i >= 0; $i--) {
			if($lista_ordenada[count($lista_ordenada)-1]->getPromedio() == $lista_ordenada[$i]->getPromedio()) {
				echo '<tr align="center"><td>'.$lista_ordenada[$i]->nombre.'</td><td>'.$lista_ordenada[$i]->getPromedio() .'</td></tr>';
			}
		}
		echo '</tbody></table>';
	}	//Fin R03

	#R04
	#	Mostrar  la  moda  de  las  notas  de  la  primera  y  segunda evaluación.
	#	La moda es el valor que más se repite. 

	else if(isset($_POST['R04'])) {
		$notas = array(array());
		for($j=0; $j < count($lista[0]->notas); $j++) {
			$moda = array();
			foreach($lista as $alumno) {
				$moda[] = $alumno->notas[$j]->valor;
			}
			$modas = array_count_values($moda);
			arsort($modas);
			$y=0;
			$contador=0;
			foreach($modas as $k => $v) {
				if($y == 0)
					$contador = $v;
				if($contador == $v)
					echo 'La Moda de la Nota <b>#'.($j+1).'</b> es: <b>'.$k.'</b> repetida <b>'.$v.'</b> veces<br />';
				$y++;
			}
			if($contador == 0)
				echo 'No hay Moda';
		}
	}	//Fin R04

	#R05
	#	Generar  el  siguiente  informe  ordenado  de  menor  a  mayor  de acuerdo al promedio de notas.
	#		NOMBRE  PROMEDIO
	#		------  --------

	else if(isset($_POST['R05'])) {
		$lista_ordenada = $lista;
		objSort($lista_ordenada);
		echo '<table><thead><tr><th>NOMBRE</th><th>PROMEDIO</th></tr></thead><tbody>';
		foreach($lista_ordenada as $alumno) {
			echo '<tr align="center"><td>'.$alumno->nombre.'</td><td>'.$alumno->getPromedio().'</td></tr>';
		}
		echo '</tbody></table>';

	}	//Fin R05

	#Funcion Para Ordenar los Objetos segun su Promedio
	function objSort(&$objArray,$sort_flags=0) {
		$indices = array();
		foreach($objArray as $obj) {
			$indeces[] = $obj->getPromedio();
		}
		return array_multisort($indeces,$objArray,$sort_flags);
	}

?>
<html>
<head>
	<title>Laboratorio Inicio - Actividad 2</title>
</head>
<body>
	<!-- Formulario -->
	<form id="form" method="POST" name="formulario">
		<?php if($nNotas == 0) { ?>
				<div id="variables">
					Numero de Notas: <input type="text" name="createFields" id="createFields" value="2" /><br />
					<input type="submit" name="start" value="Crear" />
				</div>
		<?php
			} else{
				# Guarda la lista en un campo 'oculto'
				echo "<input id='createFields' name='createFields' type='hidden' value='" . $nNotas . "'/>";
				echo "<input name='listaAlumnos' type='hidden' value='" . serialize($lista) . "'/>";
		?>
				Nombre : <input type="text" name="nombre" value="" /><br/>
				<div id="campoNotas">
		<?php
						for($i=0; $i < $nNotas; $i++) {
							echo 'Nota '.($i+1).'  : <input type="text" name="nota[]" value="" />	<input type="text" name="percent[]" value="'.((count($lista) > 0)	?	((count($lista[0]->notas) > 0) ? $lista[0]->notas[$i]->porcentaje :  (100 / $nNotas)) : (100 / $nNotas)).'" /><br/>';
						}
		?>
				</div>
				<input type="submit" name="guardar" value="Guardar Alumno" />
				<input type="submit" name="R02" value="R02" <?php if(count($lista)==0) echo "DISABLED";?>/>
				<input type="submit" name="R03" value="R03" <?php if(count($lista)==0) echo "DISABLED";?>/>
				<input type="submit" name="R04" value="R04" <?php if(count($lista)==0) echo "DISABLED";?>/>
				<input type="submit" name="R05" value="R05" <?php if(count($lista)==0) echo "DISABLED";?>/>
		<?php } ?>
	</form>
	<!--// FIN Formulario -->
</body>
</html>

Saludos!

Categorías:PHP Etiquetas: , , ,

Examen Transversal Programacion de Base de Datos (OCA DEVELOP)

Hoy fue dia de examenes, este es el “Examen” de programacion de base de datos, una burla de examen comparado con el Certamen II de la misma asignatura =/

Pregunta 1

  • A) Construya una tabla f, con campos a numericos y b alfanumerico variable
  • CREATE TABLE f (
    	a NUMBER,
    	b VARCHAR(50)
    );
  • B) Inserte 5 valores en f con los numeros 5 al 9 y los nombres de los numeros en texto
  • BEGIN
    	FOR i IN 5..9 LOOP
    		IF i = 5 THEN
    			INSERT INTO f VALUES(i,'Cinco');
    		ELSIF i = 6 THEN
    			INSERT INTO f VALUES(i,'Seis');
    		ELSIF i = 7 THEN
    			INSERT INTO f VALUES(i,'Siete');
    		ELSIF i = 8 THEN
    			INSERT INTO f VALUES(i,'Ocho');
    		ELSIF i = 9 THEN
    			INSERT INTO f VALUES(i,'Nueve');
    		END IF;
    
    	END LOOP;
    END;
    /
  • C) Construya un procedimiento en PL/SQL que seleccione los registros de la tabla (utilizando el esquema FOR UPDATE) y modifique los numeros cuya palabra tenga un largo de 5, dejando el valor al cuadrado
  • CREATE OR REPLACE PROCEDURE actualizaTodos
    IS
    	CURSOR datos_cursor IS
    		SELECT * FROM f
    		FOR UPDATE OF a;
    BEGIN
    	FOR iterador IN datos_cursor LOOP
    		IF LENGTH(iterador.b) = 5 THEN
    			UPDATE f
    			SET a = (iterador.a * iterador.a),
    				b = '('||iterador.b||')^2'
    			WHERE CURRENT OF datos_cursor;
    		END IF;
    	END LOOP;
    END;
    /

    Pregunta 2

  • A) Considere la tabla PRODUCTOS(CO_PRODUCTO,NO_PRODUCTO) que tiene el código y nombre del producto.
  • CREATE TABLE PRODUCTOS (
    	CO_PRODUCTO NUMBER,
    	NO_PRODUCTO VARCHAR(100),
    	CONSTRAINT pk_productos_CO_PRODUCTO PRIMARY KEY(CO_PRODUCTO)
    );
  • B) Considere la tabla PRECIOS_PRODUCTOS(CO_PRODUCTO,PRECIO,FECHA_ACTUALIZACION).
  • CREATE TABLE PRECIOS_PRODUCTOS (
    	CO_PRODUCTO NUMBER,
    	PRECIO NUMBER,
    	FECHA_ACTUALIZACION DATE,
    	CONSTRAINT fk_PP_CO_PRODUCTO FOREIGN KEY(CO_PRODUCTO) REFERENCES PRODUCTOS(CO_PRODUCTO)
    );
  • C) Construya un TRIGGER que cada vez que se inserte un registro en PRODUCTOS inserte un registro en PRECIOS_PRODUCTOS con un valor inicial de 100.
  • CREATE OR REPLACE TRIGGER trigg_precioAlProducto
    AFTER INSERT ON PRODUCTOS
    FOR EACH ROW
    BEGIN
    	INSERT INTO PRECIOS_PRODUCTOS (CO_PRODUCTO,PRECIO,FECHA_ACTUALIZACION)
    	VALUES(:NEW.CO_PRODUCTO,100,SYSDATE);
    END;
    /
  • D) Realice un ejemplo de uso del TRIGGER
  • /* Creo una sequencia */
    CREATE SEQUENCE seq_productos
    				MINVALUE 1
    				START WITH 1
    				INCREMENT BY 1;
    /* Ingreso algunos datos */
    INSERT INTO PRODUCTOS VALUES(seq_productos.NEXTVAL,'Pantalon');
    INSERT INTO PRODUCTOS VALUES(seq_productos.NEXTVAL,'Zapatos');
    INSERT INTO PRODUCTOS VALUES(seq_productos.NEXTVAL,'Comida');
    /* Selecciono los datos */
    SELECT 	PRODUCTOS.CO_PRODUCTO,
    		PRODUCTOS.NO_PRODUCTO,
    		PRECIOS_PRODUCTOS.PRECIO,
    		PRECIOS_PRODUCTOS.FECHA_ACTUALIZACION
    FROM PRODUCTOS  INNER JOIN PRECIOS_PRODUCTOS ON PRODUCTOS.CO_PRODUCTO = PRECIOS_PRODUCTOS.CO_PRODUCTO;

    Ese fue el ‘examen’… parece que lo hicieron a ultima hora y a la mala XD

    Saludos!.

    Categorías:ORACLE, PL/SQL Etiquetas: , , , ,

    Examen Transversal LENGUAJE DE PROGRAMACION II (MS NET)

    Esto es lo que escribi del examen de ayer

    Enunciado:

    Examen Transversal

    Se debe construir una aplicacion web que consta de 5 páginas utilizando el modelo de capas , la cual se
    utilizará para el registro de órdenes de trabajo y su respectivo detalle, para una empresa que repara vehículos.

    Descripcion de las páginas y su funcionalidad

    Default.aspx
    Permite la autenticación Basandose en los usuarios existentes en la tabla Usuarios y restringiendo el acceso a todas las
    páginas mientras no se haya iniciado sesión o esta se haya cerrado, considere además un menú para la navegación.

    Pagina1.aspx
    Permite almacenar una orden en la tabla Orden.

    Restricciones:

    • El valor de la mantención debe ser mayor a 0.
    • El kilometraje debe ser múltiplo de 5000.

    Pagina2.aspx
    permite agregar un nuevo servicio en la tabla Servicios.

    Restricciones

    • Descripcion debe tener al menos 6 caracteres

    Pagina3.aspx
    Permite consultar las órdenes de servicio, utilizando un control GridView paginado y seleccionable. Al Seleccionar
    una orden se muestran sus detalles asociados en un DetailsView.

    Pagina4.aspx
    Permite agregar o actualizar un nuevo usuario con la función “user” o “admin”, para ambos casos debe utilizar un servicio web como
    capa intermedia, la cual se comunica con procedimientos almacenados. Recuerde que solo los administradores pueden agregar nuevos usuarios.

    Script SQL Proporcionado:

    Forma_A.sql

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Servicios]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[Servicios](
    	[cod_servicio] [nchar](10) NOT NULL,
    	[Descripcion] [varchar](50) NOT NULL,
     CONSTRAINT [PK_Servicios] PRIMARY KEY CLUSTERED
    (
    	[cod_servicio] ASC
    )WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    END
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usuarios]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[usuarios](
    	[rut] [char](10) NOT NULL,
    	[password] [char](10) NOT NULL,
    	[habilitado] [char](2) NOT NULL,
    	[funcion] [char](10) NOT NULL,
     CONSTRAINT [PK_usuarios] PRIMARY KEY CLUSTERED
    (
    	[rut] ASC
    )WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    END
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Orden]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[Orden](
    	[nroOrdenTrabajo] [nchar](10) NOT NULL,
    	[Patente] [char](6) NOT NULL,
    	[RutCliente] [char](10) NOT NULL,
    	[valorMantencion] [int] NOT NULL,
    	[kilometraje] [int] NOT NULL,
     CONSTRAINT [PK_Orden] PRIMARY KEY CLUSTERED
    (
    	[nroOrdenTrabajo] ASC
    )WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    END
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[DetalleOrden]') AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[DetalleOrden](
    	[nroOrdenTrabajo] [nchar](10) NOT NULL,
    	[cod_servicio] [nchar](10) NOT NULL
    ) ON [PRIMARY]
    END
    GO
    IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_DetalleOrden_Orden]') AND parent_object_id = OBJECT_ID(N'[dbo].[DetalleOrden]'))
    ALTER TABLE [dbo].[DetalleOrden]  WITH CHECK ADD  CONSTRAINT [FK_DetalleOrden_Orden] FOREIGN KEY([nroOrdenTrabajo])
    REFERENCES [dbo].[Orden] ([nroOrdenTrabajo])
    GO
    ALTER TABLE [dbo].[DetalleOrden] CHECK CONSTRAINT [FK_DetalleOrden_Orden]
    GO
    IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_DetalleOrden_Servicios]') AND parent_object_id = OBJECT_ID(N'[dbo].[DetalleOrden]'))
    ALTER TABLE [dbo].[DetalleOrden]  WITH CHECK ADD  CONSTRAINT [FK_DetalleOrden_Servicios] FOREIGN KEY([cod_servicio])
    REFERENCES [dbo].[Servicios] ([cod_servicio])
    GO
    ALTER TABLE [dbo].[DetalleOrden] CHECK CONSTRAINT [FK_DetalleOrden_Servicios]
    

    Mi Solucion:
    ETLDP3501-Fuentealba-Esteban.rar