Archivo

Posts Tagged ‘DUOC’

Laboratorio JavaScript PHP II [DAI4501]

Segunda parte del laboratorio de DAI

Enunciado:

Continuando con el ejercicio del laboratorio anterior se pide que
usted modifique su aplicación, generando una versión 2.0, de forma
de considerar los siguientes nuevos requerimientos:
R01 – Agregar un ID a cada empleado, ID que NO PODRÁ repetirse
entre el grupo de empleados.
R02 – Cuando se registra un nuevo empleado deberá aparecer un
indicador del total de empleados que ya están registrados.
R03 – Manejar el departamento (nombre) al cual pertenece el
empleado
R04 – Obtener un informe, por departamento, con el total de
sueldos líquidos a pagar en cada departamento.
R05 – Obtener un informe, por departamento, que responda al
siguiente esquema:
——————————–
| EMPLEADOS |
——————————————————————
| DEPARTAMENTO |TOTAL EMPLEADOS | MAYOR SUELDO | MENOR SUELDO |
——————————————————————
| XXXXXXXXXXXXX | 999 | XXXXXXXXXXXX | XXXXXXXXXXXXX |
——————————————————————
TOTAL DEPARTAMENTOS

Resolución:

<?PHP
#
#	Empleado
#
class Empleado {
	var $nombre 	='';
	var $rut		='';
	var $sueldoBase	= 0;
	var $descuentos = null;
	var $departamento= null;
	public function __construct($rut,$nom,$sueldo,$dept) {
		if($dept != "-1") {
			$this->departamento = $dept;
		}
		if(strlen($rut) > 10 && strlen($rut) < 5)
			throw new Exception("El Rut del Empleado Esta Mal Ingresado");
		$this->rut = $rut;
		if(strlen($nom) < 1)
			throw new Exception("El Nombre del Empleado Debe tener mas de 1 caracter");
		$this->nombre = $nom;
		if($sueldo < 1)
			throw new Exception("El Sueldo del Empleado Debe ser mayor a 0");
		$this->sueldoBase = $sueldo;
		$this->descuentos = new Descuentos();
	}
	public function getSueldoLiquido() {
		#SUELDO_LIQUIDO = SUELDO_BASE – DESCUENTOS_LEGALES – DESCUENTOS_INTERNOS
		return ($this->sueldoBase - ((is_object($this->descuentos->descuentoLegal)) ? $this->descuentos->descuentoLegal->getDescuento($this->sueldoBase) : $this->descuentos->descuentoLegal) - ((is_object($this->descuentos->descuentoInterno)) ? $this->descuentos->descuentoInterno->getDescuento($this->sueldoBase) : $this->descuentos->descuentoInterno));
	}
}

class Descuentos {
	var $descuentoLegal = 0;
	var $descuentoInterno = 0;
}
class DescuentoLegal {
	var $afp 	= 0;
	var $salud	= 0;
	//var $seguro	=	0;
	public function __construct($afp=null,$salud=null) {
		$this->afp 		= $afp;
		$this->salud 	= $salud;
	}
	public function getDescuento($sueldo) {
		return (((is_object($this->afp)) ? $this->afp->getDescuento($sueldo) : $this->afp) + ((is_object( $this->salud)) ?  $this->salud->getDescuento($sueldo) :  $this->salud));
	}
}
class DescuentoInterno {
	var $sindicato 	= 0;
	var $cuotas		= 0;
	public function __construct($sin=null,$cuo=null) {
		$this->sindicato 		= $sin;
		$this->cuotas 			= $cuo;
	}
	public function getDescuento($sueldo) {
		if($this->sindicato != null) {
			return (($sueldo * $this->sindicato) / 100);
		} else if($this->cuotas != null) {
			return $this->cuotas;
		}
		return 0;
	}
}
class AFP {
	var $porcentaje	= 12.9;
	var $seguro		= 0;
	public function __construct($seguro=0) {
		$this->seguro = $seguro;
	}
	public function getDescuento($sueldo) {
		if($sueldo > 0) {
				return	(($sueldo * $this->porcentaje) /100) + $this->seguro;
		}
		return 0;
	}
}
#
#	Salud
#
class Isapre {
	var $valor_plan	= 0;
	var $valor_uf	= 0;
	public function __construct($vp=0,$vu=0) {
		$this->valor_plan 	= $vp;
		$this->valor_uf 	= $vu;
	}
	public function getDescuento($sueldo) {
		return ($this->valor_plan * $this->valor_uf);
	}
}
class Fonasa {
	var $porcentaje	= 7;
	public function getDescuento($sueldo) {
		if($sueldo > 0) {
				return	(($sueldo * $this->porcentaje) /100);
		}
		return 0;
	}
}



	$listaOrdenada = null;
	
	if (isset($_POST['listaDepartamentos'])){
		$listaDepartamentos = unserialize($_POST["listaDepartamentos"]);
	}
	else{
		$listaDepartamentos=array();
	}
	
	if (isset($_POST['listaEmpleados'])){
		$lista = unserialize($_POST["listaEmpleados"]);
	}
	else{
		$lista=array();
	}
	
	
	#
	#	Agregar Departamento
	#
	if(isset($_POST['addDepto'])) {
		try {
			$depto  = $_POST['n_dept_0'];
			if(strlen($depto) < 1)
				throw new Exception("El Nombre del Departamento debe ser mayor a 1 caracter");
			foreach($listaDepartamentos as $dept) {
				if($dept == $depto)
					throw new Exception("El Departamento Ya Existe");
			}
			$listaDepartamentos[] = $depto;	
		} catch(Exception $e) {
			echo 'ERROR: '. $e->getMessage();
		}
	}
	#
	#	Agregar Empleado
	#
	if(isset($_POST['enviar'])) {
		try {
			/*
				Datos Empleado
			*/
			$nombre = $_POST['nombre'];
			$rut 	= $_POST['rut'];
			$dv 	= $_POST['dv'];
			$sueldo = $_POST['sueldoBase'];
			$depto 	= $_POST['depto'];
			foreach($lista as $empleado) {
				if($empleado->rut == ($rut.'-'.$dv)) {
					throw new Exception("El Empleado Ya existe");
				}
			}
			$nuevo_empleado = new Empleado($rut.'-'.$dv,$nombre,$sueldo,$depto);
			/*
				Datos Descuentos Legales
			*/
			$nuevo_empleado->descuentos->descuentoLegal = new DescuentoLegal(null,null);
			$nuevo_empleado->descuentos->descuentoInterno = new DescuentoInterno(null,null);
			if(isset($_POST['chk_afp'])) {
				//12.9% del sueldo
				$nuevo_empleado->descuentos->descuentoLegal->afp = new AFP(0);
				if(isset($_POST['chk_seguro'])) {
					$valor_adicional	= $_POST['valor_seguro'];
					//12.9% del sueldo + $valor_adicional
					$nuevo_empleado->descuentos->descuentoLegal->afp->seguro = $valor_adicional;
				}
			} 

			$desc_salud	= $_POST['salud'];
			if($desc_salud == 1) {
				//Isapre
				$monto_uf 	= $_POST['monto_uf'];
				$valor_plan	= $_POST['valor_plan'];
				$nuevo_empleado->descuentos->descuentoLegal->salud = new Isapre($valor_plan,$monto_uf);
			} else if($desc_salud == 0) {
				//FONASA, Descuento del 7% del sueldo
				$nuevo_empleado->descuentos->descuentoLegal->salud = new Fonasa();
			}

			$desc_interno	= $_POST['group1'];
			if($desc_interno == "1") {
				$desc_internos	= $_POST['internos'];
				if($desc_internos == 0) {
					//Sindicato
					$perc_descuento = $_POST['per_desc'];
					echo $perc_descuento;
					$nuevo_empleado->descuentos->descuentoInterno->sindicato = $perc_descuento;
				} else if($desc_internos == 1) {
					//Cuotas
					$valor_cuota = $_POST['val_cuota'];
					$nuevo_empleado->descuentos->descuentoInterno->cuotas = $valor_cuota;
				}
			} else {
				//Sin descuentos internos
			}
			$lista[] = $nuevo_empleado;	
		} catch(Exception $e) {
			echo 'ERROR: '. $e->getMessage();
		}
	}
	if(isset($_POST['informeA'])) {
		$listaOrdenada = getEmpleadosByDepartamentos($listaDepartamentos,$lista);
	}

	function getEmpleadosByDepartamentos($listaDepartamentos,$lista) {
		foreach($listaDepartamentos as $departamento) {
			foreach($lista as $empleado) {
				
				if($departamento == $empleado->departamento) {
					$listaOrdenada[$departamento][$empleado->rut] = $empleado;
				}
			}
		}
		return $listaOrdenada;
	}
	function objSort(&$objArray,$sort_flags=0) {
		$indices = array();
		foreach($objArray as $obj) {
			$indeces[] = $obj->getSueldoLiquido();
		}
		return array_multisort($indeces,$objArray,$sort_flags);
	}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Laboratorio JS-PHP Parte II</title>
        <style type="text/css">
		.error {
			background-color: #FFEBE8;
			border-color: #CC0000;
		}
		html {
			font-size:13px;
		}
		h1 {
			font-size:13px;
			font-weight:bold;
		}
		input {
			-moz-background-clip:border;
			-moz-background-inline-policy:continuous;
			-moz-background-origin:padding;
			background:#FBFBFB none repeat scroll 0 0;
			border:1px solid #E5E5E5;
			font-size:13px;
			margin-right:6px;
			padding:3px;
		}
		table.empleados {
			width: 580px;
			background-color: #fafafa;
			border: 1px #000000 solid;
			border-collapse: collapse;
			border-spacing: 0px;
		}
		table thead {
			background-color: #99CCCC;
			border: 1px #000000 solid;
			font-family: Verdana;
			font-weight: bold;
			font-size: 12px;
			color: #404040;
		}
		table td {
			border-bottom: 1px #6699CC dotted;
			text-align: left;
			font-family: Verdana, sans-serif, Arial;
			font-weight: normal;
			font-size: .7em;
			color: #404040;
			background-color: #fafafa;
			padding-top: 4px;
			padding-bottom: 4px;
			text-align: center;
		}
		</style>
		<script type="text/javascript">
			function showHide(obj) {
				if(document.getElementById(obj).style.display == 'none') { mostrar(obj); }
				else { ocultar(obj); }
			}
			function mostrar(obj) { document.getElementById(obj).style.display = 'block'; }
			function ocultar(obj) {
				document.getElementById(obj).style.display = 'none';
				document.getElementById(obj).value = '';
			}
			function crearElemento(prop) {
				elem = document.createElement(prop.elemento);
				for (var key in prop.atributos) { eval("elem."+key+" = '"+prop.atributos[key]+"';"); }
				return elem;
			}
			function isLegal(obj) {
				if(document.getElementById(obj).innerHTML.length == 0) {
					p = crearElemento({elemento: 'p',atributos: { innerHTML: '% de Descuento Adicional: '}});
					input = crearElemento({elemento: 'input',atributos: { type: 'text',name: 'valor_seguro',id: 'valor_seguro',size: 2, maxlength: 3 }});
					input.onkeypress = 	function(e) { return isNumberKey((window.event || e),'46'); };
					p.appendChild(input);
					document.getElementById(obj).appendChild(p);
				} else {
					document.getElementById(obj).innerHTML = '';
				}
			}
			function isIsapre(numero) {
				if(numero == 1) {
					p = crearElemento({elemento: 'p',atributos: { innerHTML: 'Monto de la UF: '}});
					input = crearElemento({elemento: 'input',atributos: { type: 'text',name: 'monto_uf',id: 'monto_uf'}});
					input.onkeypress = 	function(e) { return isNumberKey((window.event || e),null); };
					p.appendChild(input);
					document.getElementById('valor_isapre').appendChild(p);

					p = crearElemento({elemento: 'p',atributos: { innerHTML: 'Valor en UF del plan: '}});
					input = crearElemento({elemento: 'input',atributos: { type: 'text',name: 'valor_plan',id: 'valor_plan'}});
					input.onkeypress = 	function(e) { return isNumberKey((window.event || e),null) ; };
					p.appendChild(input);
					document.getElementById('valor_isapre').appendChild(p);
				} else {
					document.getElementById('valor_isapre').innerHTML = '';
				}
			}
			function isNumberKey(evt,chr) {
				var charCode = (evt.which) ? evt.which : event.keyCode;
				if(chr != null) { if(charCode == chr) return true; }
				if (charCode > 31 && (charCode < 48 || charCode > 57)) return false;
				return true;
			}
			function isDescuentoAdicional(numero) {
				document.getElementById('internos').innerHTML = '';
				if(numero == 1) {
					select = crearElemento({elemento: 'select',atributos: { name: 'internos',id: 'internos'}});
					option = crearElemento({elemento: 'option',atributos: { value: '-1',innerHTML: 'Selecciona el Descuento Adicional'}});
					select.appendChild(option);
					option = crearElemento({elemento: 'option',atributos: { value: '0',innerHTML: 'Sindicato'}});
					select.appendChild(option);
					option = crearElemento({elemento: 'option',atributos: { value: '1',innerHTML: 'Cuotas'}});
					select.appendChild(option);
					document.getElementById('internos').appendChild(select);
					div = crearElemento({elemento: 'div',atributos: { id: 'valoresAdicionales'}});
					document.getElementById('internos').appendChild(div);
					select.onchange = 	function(){
										document.getElementById('valoresAdicionales').innerHTML = '';
											switch(this.value) {
												case ('0' || 0) :
													p = crearElemento({elemento: 'p',atributos: { innerHTML: 'Porcentaje de Descuento: '}});
													input = crearElemento({elemento: 'input',atributos: { type: 'text',name: 'per_desc',id: 'per_desc'}});
													input.onkeypress = 	function(e) { return isNumberKey((window.event || e),'46'); };
													p.appendChild(input);
													document.getElementById('valoresAdicionales').appendChild(p);
													break;
												case ('1' || 1) :
													p = crearElemento({elemento: 'p',atributos: { innerHTML: 'Valor Cuota: $'}});
													input = crearElemento({elemento: 'input',atributos: { type: 'text',name: 'val_cuota',id: 'val_cuota'}});
													input.onkeypress = 	function(e) { return isNumberKey((window.event || e),null); };
													p.appendChild(input);
													document.getElementById('valoresAdicionales').appendChild(p);
													break;
											}
										};
				} else {
					document.getElementById('internos').innerHTML = '';
				}
			}
			function validarRut(numero,dv) {
				if(!isNaN(numero) || numero.length == 0 || numero.length > 8 )  {
					return false;
				} else {
					if(getDV(numero) == dv) return true;
				}
				return false;
			}
			function getDV(numero) {
				nuevo_numero = numero.toString().split("").reverse().join("");
				for(i=0,j=2,suma=0; i < nuevo_numero.length; i++, ((j==7) ? j=2 : j++)) {
					suma += (parseInt(nuevo_numero.charAt(i)) * j);
				}
				n_dv = 11 - (suma % 11);
				return ((n_dv == 11) ? 0 : ((n_dv == 10) ? "K" : n_dv));
			}
			function isVacio(q) {
				for ( i = 0; i < q.length; i++ ) {
					if (q.charAt(i) != " ") return false;
				}
				return true;
			}
			function isNumeric(valor) {
				return (isNaN(valor)) ? false : true;
			}
			function cleanClass(form) {
				for(i=0; i <form.length; i++) { form[i].className = ""; }
			}
			function validarTodo(form) {
				cleanClass(form);
				var malos = new Array();
				j=0;
				var inputs = form.getElementsByTagName("input");
				for(i=0; i < inputs.length; i++) {
					if(inputs[i].type == "text") { if(inputs[i].value.length == 0) { malos[j++] = inputs[i].id; } }
				}
				var selects = form.getElementsByTagName("select");
				for(i=0; i < selects.length; i++) {
					if(selects[i].value == "-1") { malos[j++] = selects[i].id; }
				}
				return ((malos.length > 0) ? malos : true);
			}
			function send(obj) {
				isValid = validarTodo(obj);
				if(isValid == true) {
					return true;
				} else {
					for(i=0; i < isValid.length; i++) { eval("obj."+isValid[i]+".className='error';"); }
				}
				return false;
			}
			function enableSeguro(obj) {
				if(obj.checked) {
					document.getElementById('chk_seguro').disabled = false;
				} else {
					//Deshabilita
					document.getElementById('chk_seguro').disabled = true;
					document.getElementById('chk_seguro').checked = false;
					document.getElementById('descuento_legal').innerHTML = '';
				}
			}
			/*function addDeptos(o) {
				nuevoDepto = prompt('Introduce el nombre del Departamento','[ nombre del departamento ]');
				option = option = crearElemento({elemento: 'option',atributos: { value: nuevoDepto,innerHTML: nuevoDepto}});
				document.getElementById('nuevoDepto').value = nuevoDepto;
			}*/

        </script>
    </head>
    <body>
		<div style="float: left; width: 300px;">
			
			<form id="formularioAgregarDepto" name="formularioAgregarDepto" method="POST">
				<?php
					# Guarda la lista en un campo 'oculto'
					echo "<input name='listaDepartamentos' type='hidden' value='" . serialize($listaDepartamentos) . "'/>";
					echo "<input name='listaEmpleados' type='hidden' value='" . serialize($lista) . "'/>";
				?>
				<div id="departamentos">
					<h1>Agrega Departamento</h1>
					<input id="n_dept_0" name='n_dept_0' type='text' />
					<input type="submit" id="addDepto" name="addDepto" value="+" />
				</div>
			</form>
			<br />
			<br />
			<h1>Ingresar Empleados</h1>
			<form id="formularioAgregar" method="POST" onsubmit="return send(this);">
				<?php
					# Guarda la lista en un campo 'oculto'
					echo "<input name='listaDepartamentos' type='hidden' value='" . serialize($listaDepartamentos) . "'/>";
					echo "<input name='listaEmpleados' type='hidden' value='" . serialize($lista) . "'/>";
				?>
				Rut: <input type="text" id="rut" name="rut" onkeypress="return isNumberKey(event,null);" maxlength="8" size="8" />-<input type="text" name="dv" id="dv" size="1" maxlength="1"/><br />
				Nombre: <input type="text" id="nombre" name="nombre" /><br />
				Sueldo Base: $<input type="text" id="sueldoBase" name="sueldoBase" onkeypress="return isNumberKey(event,null);" /><br />
				<h1>Descuentos Legales</h1>
				<input type="checkbox" id="chk_afp" name="chk_afp" onclick="enableSeguro(this);">AFP<br />
				<input type="checkbox" id="chk_seguro" name="chk_seguro" onclick="isLegal('descuento_legal');"  disabled/>Seguro
				<div id="descuento_legal"></div>
				<div id="descuento_salud">
					<h1>Descuentos de Salud</h1>
					<select id="salud" name="salud" onchange="isIsapre(this.value);">
						<option value="-1">Selecciona el Descuento de Salud</option>
						<option value="2">Sin Prevision</option>
						<option value="0">Fonasa</option>
						<option value="1">Isapre</option>
					</select>
					<br />
					<div id="valor_isapre"></div>
				</div>
				<div id="descuento_interno">
					<h1>Descuentos Internos</h1>
					<input type="radio" name="group1" value="1" onclick="isDescuentoAdicional(this.value);"> Si<br>
					<input type="radio" name="group1" value="0" onclick="isDescuentoAdicional(this.value);" checked> No<br>
					<div id="internos"></div>
				</div>
				<div id="departamentos">
					<h1>Departamento</h1>
					<select id="depto" name="depto">
						<option value="-1">Selecciona el Departamento</option>
						<?PHP
							foreach($listaDepartamentos as $departamento) {
								echo '<option value="'.$departamento.'">'.$departamento.'</option>';
							}
						?>	
					</select>
				</div>
				<input type="submit" id="enviar" name="enviar" value="Agregar" />
			</form>
			<form method="POST">
				<?php
					# Guarda la lista en un campo 'oculto'
					echo "<input name='listaDepartamentos' type='hidden' value='" . serialize($listaDepartamentos) . "'/>";
					echo "<input name='listaEmpleados' type='hidden' value='" . serialize($lista) . "'/>";
				?>
				<input type="submit" id="informeA" name="informeA" value="Informes" />
			</form>
		</div>
		<div id="contenido" style="float: left;">
			<h1>Total Empleados: <?PHP echo count($lista); ?></h1>
			<?PHP
			if(count($lista) > 0) {
				echo '<table class="empleados" cellspacing="0"><thead><tr><th>Rut</th><th>Nombre</th><th>Sueldo Base</th><th>Sueldo Liquido</th><th>Departamento</th></tr></thead><tbody>';
				for($i=count($lista)-1; $i >= 0; $i--) {
					echo '<tr><td>'.$lista[$i]->rut.'</td><td>'.$lista[$i]->nombre.'</td><td>'.$lista[$i]->sueldoBase.'</td><td>'.$lista[$i]->getSueldoLiquido().'</td><td>'.(($lista[$i]->departamento != null) ? $lista[$i]->departamento : "Sin Depto").'</td></tr>';
				}
				echo '</tbody></table>';
			}
			if(count($listaDepartamentos ) > 0 && count($listaOrdenada) > 0) {
				foreach($listaOrdenada as $k => $v) {
					$sueldos[$k] = '';
					foreach($v as $empleado) {
						$sueldos[$k] += $empleado->getSueldoLiquido();
					}
				}
				foreach($sueldos as $k => $sueldo) {
					echo 'Departamento: <b>'.$k.'</b> Sueldos a Pagar: <b>$'.$sueldo.'</b><br />';
				}
				
				echo '<table class="empleados" cellspacing="0"><thead><tr><th> </th><th> </th><th>Empleados: <b>'.count($lista).'</b></th><th> </th></tr></thead><tbody>';
				$empByDepto = array();
				echo '<tr><td>Departamento</td><td>Total Empleados</td><td>Mayor Sueldo</td><td>Menor Sueldo</td></tr>';
				foreach($listaOrdenada as $k => $v) {
					$sueldos[$k] = '';
					$empleados=array();
					foreach($v as $empleado) {
						$sueldos[$k] += $empleado->getSueldoLiquido();
						$empleados[] = $empleado;
					}
					objSort($empleados);
					echo '<tr><td>'.$k.'</td><td>'.count($empleados).'</td><td>'.$empleados[count($empleados)-1]->getSueldoLiquido().'</td><td>'.$empleados[0]->getSueldoLiquido().'</td></tr>';
				}
				echo '<tr><td>Total Departamentos: '.count($listaDepartamentos).'</td></tr>';
				echo '</tbody></table>';
			}
			?>
		</div>
		
		
    </body>
</html>

Saludos!.

Laboratorio Inicio DAI4501 JavaScript

septiembre 23, 2009 1 comentario

Laboratorio JavaScript.

ACTIVIDAD 1 USO DE FUNCIÓN isNaN

Construir una página HTML que contenga una entrada del tipo TEXT y
una del tipo SUBMIT que permita determinar si el valor que se ha
ingresado es un valor numérico.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Laboratorio JavaScript 01</title>
        <script type="text/javascript">
			function isVacio(q) {  
				for ( i = 0; i < q.length; i++ ) {  
					if (q.charAt(i) != " ") return false;  
				}  
				return true;  
			}  
			function isNumeric(valor) {
				return (isNaN(valor)) ? false : true;
			}
			function valida(valor) {
				if(isVacio(valor)) {
					alert('Ingresa un Valor');
					return false;
				}
				if(isNumeric(valor)) { alert('Es Numero'); } 
				else { alert('No es Numero¡'); }
				return false;
			}
        </script>
    </head>
    <body>
        <form id="formulario" onsubmit="return valida(this.miCadena.value)">
			<input type="text" id="miCadena" /> 
			<input type="submit" id="enviar" value="enviar" />
		</form>
    </body>
</html>

ACTIVIDAD 2USO DE FUNCIONES CON CADENAS DE CARACTERES

Construir una página HTML que contenga una entrada del tipo TEXT y
una del tipo SUBMIT que permita determinar si el valor que se ha
ingresado es palíndrome.

OBS. Una cadena se dice palíndrome cuando su inverso es igual a la
palabra.

FUNCIONES DE UTILIDAD

// Devuelve la cadena sólo en letras minúsculas
cadena.toLowerCase();
// Devuelve un arreglo de caracteres con todas las palabras de ‘cadena’
que se encuentran separadas por “ “
cadena.split(“”);
// Devuelve el reverso de cadena
cadena.reverse();

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Laboratorio JavaScript 02</title>
        <script type="text/javascript">
			function isVacio(q) {  
				for ( i = 0; i < q.length; i++ ) {  
					if (q.charAt(i) != " ") return false;  
				}  
				return true;  
			}  
			function isPalindrome(pal) {
				var palabra = pal.toLowerCase();
				for(var i=0; i<palabra.length; i++) {
					if(palabra.charAt(i) != palabra.split("").reverse().join("").charAt(i)) return false;
				}
				return true;	
			}
			function comprobar(palabra) {
				if(isVacio(palabra)) {
					alert('Ingresa un Valor');
					return;
				}
				if(isPalindrome(palabra)) { alert('Es Palindrome :D'); } 
				else { alert('No Es Palindrome :('); }
			}
        </script>
    </head>
    <body>
        <form id="formularioB" onsubmit="comprobar(this.palabra.value); return false;">
			<input type="text" id="palabra" /> 
			<input type="submit" id="enviar" value="enviar" />
		</form>
    </body>
</html>

ACTIVIDAD 3USO DE CICLOS

Construir una página HTML que contenga dos entradas del tipo TEXT,
llamadas X e Y, además debe contar una del tipo SUBMIT que permita
imprimir la tabla de multiplicar del valor ingresado en X desde 1
hasta Y. Por ejemplo, suponga que X = 6; Y = 11 deberá generar la
siguiente salida:

6 x 1 = 6
6 x 2 = 12
6 x 3 = 18
6 x 4 = 24
6 x 5 = 30

6 x 11 = 66

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Laboratorio JavaScript 03</title>
        <script type="text/javascript">
			function isVacio(q) {  
				for ( i = 0; i < q.length; i++ ) {  
					if (q.charAt(i) != " ") return false;  
				}  
				return true;  
			} 
			function isNumeric(valor) {
				return (isNaN(valor)) ? false : true;
			}
			function addHTML(x,y,z) {
				if(isVacio(x) || isVacio(y)) {
					alert('Debes Ingresar los Datos');
					return;
				}
				if(!isNumeric(x) || !isNumeric(y)) {
					alert('Debes Ingresar Solo Numeros');
					return;
				}
				var tr=null;
				document.getElementById(z).innerHTML ='';
				for(i=1; i <= parseInt(y); i++) {
					tr = document.createElement('tr');
						var td = document.createElement('td');
						td.innerHTML = x+" x "+i+" = <b>"+(parseInt(x) * i)+"</b>";
					tr.appendChild(td);
					document.getElementById(z).appendChild(tr);
				}
				
			}
        </script>
    </head>
    <body>
        <form id="formularioB" onsubmit="addHTML(this.x.value,this.y.value,'Multiplicacion'); return false;">
			Entrada A:<input type="text" id="x" /><br /> 
			Entrada B:<input type="text" id="y" /><br /> 
			<input type="submit" id="enviar" value="enviar" />
		</form>
		<table id="Multiplicacion">
			
		</table>
    </body>
</html>

ACTIVIDAD 4GENERACIÓN DE DÍGITO VERIFICADOR

Construir una página HTML que contenga una entrada del tipo TEXT y
una entrada del tipo SUBMIT que permita leer un campo de texto
NUMÉRICO que no EXCEDA los seis (6) caracteres y que CALCULE en un
entrada del tipo TEXT que DEBE ESTAR DESHABILITADA el dígito
verificador asociado al código que se ha ingresado, de acuerdo al
siguiente procedimiento:

Para obtener el dígito verificador se debe aplicar el siguiente
procedimiento. Suponga que se desea generar el dígito verificador de 2504
deberá aplicar el siguiente procedimiento:


COEFICIENTES 3 2 7 6 5 4
* * * * * *
CÓDIGO 2 5 0 4 1 1

Se multiplica cada dígito del código por los coeficientes que
corresponden y luego se suman todas las cantidades. En este caso se
tiene: 6 + 10 + 0 + 24 + 5 + 4 = 49

Luego se debe dividir el 49 por 9 y se debe guardar el RESTO y el dígito
verificador se calcula de acuerdo a la siguiente fórmula:

Dígito Verificador = 9 – RESTO

En el caso del ejemplo el dígito verificador debería ser 5, dado que el
resto de la división entre 49 y 9 es 4 y al realizar la resta se tiene
que el dígito es 5.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Laboratorio JavaScript 04</title>
        <script type="text/javascript">
			function isNumeric(valor) {
				return (isNaN(valor)) ? false : true;
			}
			function validar(numero) {
				document.getElementById('dv').value ='';
				if(!isNumeric(numero)) {
					alert('Debes Ingresar solo Numeros');
					return;
				}
				if(numero.length != 6) {
					alert('El Numero debe tener un largo de 6 caracteres');
					return;
				}
				var suma=0;
				var numeros = new Array(3,2,7,6,5,4);
				for(var i=0; i < numero.length; i++) {
					suma += parseInt(numero.charAt(i)) * parseInt(numeros[i]);
				}
				document.getElementById('dv').value = (9 - (suma % 9));
			}
        </script>
    </head>
    <body>
        <form id="formularioC" onsubmit="validar(this.x.value); return false;">
			Entrada: <input type="text" id="x" maxlength="6" />-<input type="text" id="dv" maxlength="6" disabled /><br /> 
			<input type="submit" id="enviar" value="enviar" />
		</form>

    </body>
</html>

Saludos!

Categorías:JavaScript 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

Certamen 2 PROGRAMA DE BASES DE DATOS (OCA DEVELOP) ORACLE PL/SQL

Este es el Certamen 2 de PROGRAMA DE BASES DE DATOS (OCA DEVELOP)

[ 1 ] Crear una tabla EMP , una función CAL_NEWSAL, los los procedimientos UPD_NEWSAL , NEW_EMP y el trigger VAL_SALARY
para insertar y actualizar datos de un empleado (55 pts)

1A Crear una tabla EMP con información a partir de una consulta que seleccione el
employee_id,first_name,last_name y salary de la tabla EMPLOYEES (4 pts)

CREATE TABLE emp AS
	SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME,SALARY
	FROM employees;

1B Agrega a la tabla EMP dos nuevas columnas PERCENT de tipo NUMBER(8,2) y NEW_SALARY de tipo NUMBER de (8,2) (5 pts)

ALTER TABLE emp ADD percent NUMBER(8,2);
ALTER TABLE emp ADD new_salary NUMBER(8,2);

1C Crear una Funcion llamada CALL_NEWSAL que calcule el nuevo salario del empleado a partir del salariode éste
y un factor que representa el porcentaje en términos decimales. La formula para calcular el nuevo slario es: (6 pts)
(v_salary + ((v_salary – (v_salary * 12 * v_factor)) * v_factor))

CREATE OR REPLACE FUNCTION cal_newsal (v_salary IN employees.SALARY%TYPE,v_factor IN NUMBER) RETURN NUMBER
IS
BEGIN
	RETURN (v_salary + ((v_salary - (v_salary * 12 * v_factor)) * v_factor));
END cal_newsal;
/

1D CreValid Employee ID

CREATE OR REPLACE FUNCTION valid_employee(v_employee_id IN employees.EMPLOYEE_ID%TYPE) RETURN BOOLEAN
IS
	v_temporal VARCHAR(1);
BEGIN
	SELECT 'x'
	INTO v_temporal
	FROM emp
	WHERE EMPLOYEE_ID = v_employee_id;
	RETURN TRUE;
EXCEPTION
	WHEN NO_DATA_FOUND THEN
		RETURN FALSE;
END;
/

1D Crear un Procedimiento UPD_NEWSAL que permita actualizar, en la columna PERCENT el porcentaje de
incremento y en la columna NEW_SAL el nuevo incremento y en la columna NEW_SAL el nuevo salario. Para ello deberá pasar
el identificador del empleado y la función que calcula el nuevo salario creada en el punto anterior. En caso de actualizar
un empleado que no existe dse deberá informar lo ocurrido a través de un mensaje apropiado. Finalmente hacer los cambios permanentes.

CREATE OR REPLACE PROCEDURE upd_newsal(v_employee_id IN employees.EMPLOYEE_ID%TYPE,v_factor IN NUMBER)
IS
	empleado_salary employees.SALARY%TYPE;
BEGIN
	IF valid_employee(v_employee_id) THEN
		SELECT SALARY
		INTO empleado_salary
		FROM emp
		WHERE EMPLOYEE_ID = v_employee_id;

		UPDATE emp
		SET NEW_SALARY = cal_newsal (empleado_salary,v_factor)
		WHERE EMPLOYEE_ID = v_employee_id;
	ELSE
		RAISE_APPLICATION_ERROR(-20001,'ERROR: El id de Usuario No Existe');
	END IF;
END upd_newsal;
/

1E Testear el procedimiento UPD_NEWSAL para los empleados 100,105,110, con un factor de 0.01,0.02 y 0.03 correspondiente (3 pts)

SET SERVEROUTPUT ON
BEGIN
	upd_newsal(100,0.01);
END;
/
SET SERVEROUTPUT ON
BEGIN
	upd_newsal(105,0.05);
END;
/
SET SERVEROUTPUT ON
BEGIN
	upd_newsal(110,0.03);
END;
/

1F Crear un PROCEDIMIENTO NEW_EMP que permita para un nuevo empleado ingresar employee_id,first_name,last_name,salary,percent,new_salary,
para el new_salary utilizar la funcion cal_newsal. Conjuntamente deberá validar el salario, a través de un trigger de DML por fila llamado
VAL_SALARY que controle que el salario no debe exceder de 25.000 (18 pts)

CREATE OR REPLACE TRIGGER val_salary
BEFORE INSERT OR UPDATE OF SALARY
ON emp
FOR EACH ROW
BEGIN
	IF :new.SALARY &gt; 25000 THEN
		RAISE_APPLICATION_ERROR(-20002,'ERROR: El salario sobrepasa los 25.000');
	END IF;
END val_salary;
/

SET SERVEROUTPUT ON
CREATE OR REPLACE PROCEDURE new_emp(v_employee_id 	IN employees.EMPLOYEE_ID%TYPE,
									v_first_name 	IN employees.FIRST_NAME%TYPE,
									v_last_name 	IN employees.LAST_NAME%TYPE,
									v_salary 		IN employees.SALARY%TYPE,
									v_percent 		IN NUMBER
									)
IS
	nuevoSalario NUMBER;
BEGIN
	IF valid_employee(v_employee_id) THEN
		DBMS_OUTPUT.PUT_LINE('ERROR: Ya Hay un usuario con esa ID');
	ELSE
		nuevoSalario := cal_newsal(v_salary,v_percent);
		INSERT INTO emp (EMPLOYEE_ID,FIRST_NAME,LAST_NAME,SALARY,PERCENT,NEW_SALARY)
		VALUES(	v_employee_id,
				v_first_name,
				v_last_name,
				v_salary,
				v_percent,
				nuevoSalario
				);
	END IF;

END new_emp;
/

1G TESTEAR EL PROCEDIMIENTO NEW_EMP Para los siguientes datos (2 pts)
Fila1:
employee_id:200, first_name: Albert,last_name: Einstein, salary: 20000, percent: 0.01, new_salary: cal_newsal
Fila2:
employee_id:300, first_name: Hilary,last_name: Clinton, salary: 26000, percent: 0.02, new_salary: cal_newsal

SET SERVEROUTPUT ON
BEGIN
	new_emp(200,'Albert','Einstein',20000,0.01);
END;
/

SET SERVEROUTPUT ON
BEGIN
	new_emp(300,'Hilary','Clinton',20000,0.02);
END;
/

1H Elimina tabla EMP (1 pts)

DROP TABLE emp;

1I Elimina Funcion cal_newSal (1 pts)

DROP FUNCTION cal_newsal;

1J Elimina Procedure upd_newsal (1 pts)

DROP PROCEDURE  upd_newsal;

1K Elimina Procedure new_emp (1 pts)

DROP PROCEDURE  new_emp;

1L Elimina Trigger val_salary (1 pts)

DROP TRIGGER val_salary;

[ 2 ] CREAR Y LLAMAR UN PACKAGE QUE CONTIENE CONSTRUCTORES PÚBLICOS Y PRIVADOS (45 pts)

2A Crear una tabla EMP con información, a partir de una consulta que seleccione el employee_id,first_name,
last_name y department_id de la tabla EMPLOYEES (4 pts)

CREATE TABLE emp AS
	SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME,DEPARTMENT_ID
	FROM employees;

2B Crear una especificacion y un cuerpo de package llamado EMP_PACK que contiene un procedimiento
NEW_EMP como constructor público, y una función VALID_DEPT_ID como un constructor privado (29 pts)

CREATE OR REPLACE PACKAGE emp_pack IS
	PROCEDURE NEW_EMP(	v_employee_id IN employees.EMPLOYEE_ID%TYPE,
						v_first_name IN employees.FIRST_NAME%TYPE,
						v_last_name IN employees.LAST_NAME%TYPE,
						v_department_id IN employees.DEPARTMENT_ID%TYPE
					);
END emp_pack;
/
SET SERVEROUTPUT ON
CREATE OR REPLACE PACKAGE BODY emp_pack IS
	---------------------------------------------------------------------------------
	--	FUNCION PARA VALIDAR EL DEPARTAMENTO 						RETURN [BOOLEAN]
	---------------------------------------------------------------------------------
	FUNCTION VALID_DEPT_ID(v_id_depto IN employees.DEPARTMENT_ID%TYPE) RETURN BOOLEAN
	IS
		v_temporal VARCHAR(1);
	BEGIN
		SELECT 'x'
		INTO v_temporal
		FROM DEPARTMENTS
		WHERE DEPARTMENT_ID = v_id_depto;
		RETURN TRUE;
	EXCEPTION
		WHEN NO_DATA_FOUND THEN
			RETURN FALSE;
	END;
	---------------------------------------------------------------------------------
	--	PROCEDIMIENTO NEW_EMP
	---------------------------------------------------------------------------------
	PROCEDURE NEW_EMP(	v_employee_id IN employees.EMPLOYEE_ID%TYPE,
						v_first_name IN employees.FIRST_NAME%TYPE,
						v_last_name IN employees.LAST_NAME%TYPE,
						v_department_id IN employees.DEPARTMENT_ID%TYPE
					)
	IS
	BEGIN
		IF VALID_DEPT_ID(v_department_id) THEN
			INSERT INTO emp(EMPLOYEE_ID,FIRST_NAME,LAST_NAME,DEPARTMENT_ID)
			VALUES(v_employee_id,v_first_name,v_last_name,v_department_id);
		ELSE
			DBMS_OUTPUT.PUT_LINE('ERROR: No existe Departamento');
		END IF;
	END;
END emp_pack;
/

2C Llamar al procedimiento NEW_EMP, utilizando como identificador de departamento el número 15. Como
el departamento 15 no existe en la tabla DEPARTMENT, se deberá desplegar un mensaje informando lo ocurrido (5 pts)

SET SERVEROUTPUT ON
BEGIN
	emp_pack.NEW_EMP(305,'Juan','Perez',15);
END;
/

2D Eliminar Tabla emp (1 pts)

DROP TABLE emp;

2E Eliminar funcion VALID_DEPT_ID (1 pts)

DROP FUNCTION emp_pack.VALID_DEPT_ID;

2F Eliminar procedimiento NEW_EMP (1 pts)

DROP PROCEDURE emp_pack.NEW_EMP;

2G Eliminar especificacion y cuerpo del package llamado EMP_PACK (1 pts)

DROP PACKAGE emp_pack;
Categorías:ORACLE, PL/SQL Etiquetas: , , , ,

Proyecto Semestral JAVA Biblioteca [POO]

diciembre 8, 2008 4 comentarios

Por Fin Terminamos el Proyecto semestral . Despues de tener con Soma largas discuciones, hombres por los aires y patadas voladoras, la mejor lucha libre al raz de la lona , hemos terminado el proyecto de Programacion Orientada a Objetos.

Esperamos Una Buena Nota xD
Aqui dejo adjunto el proyecto para quienes quieran sacar una idea ( No Copiar ).

Download:

proyectojava-EstebanFuentealba-DiegoRodriguez.rar

Categorías:Java, Proyectos Etiquetas: , , , ,