Archivo

Posts Tagged ‘DAI’

Certamen 2 DAI4501 [PHP/SESSION/JAVASCRIPT/CAPAS]

diciembre 7, 2009 2 comentarios

Acá dejo el último certamen de Desarrollo de Aplicaciones para Internet (DAI4501) de la profesora Yasna Meza

Enunciado:

Considerando la siguiente tabla de datos y su correspondiente diccionario de datos:

Se  pide  construir  una  aplicación  en  PHP  usando  capas  que  permita  cumplir  con  los
siguientes requerimientos:
R01 – Inicio y cierre de sesión
R02 – Agregar registros a la tabla de datos
R03 – Modificar registros de la tabla de datos
R04 – Listar todos los registros de la tabla
R05 –  Listar  usando  como  criterio  de  búsqueda  un  rango  de  sueldo.  El  sueldo  del profesor se calcula de acuerdo a la siguiente fórmula:
SUELDO = NÚMERO HORAS * VALOR HORA
OBSERVACIONES
·  DEBERÁ tener en consideración todas las validaciones
·  La base de datos DEBERÁ llamarse C2

Codigo de Fuente:
http://estebanfuentealba.net/archive/Certamen2-DAI-Esteban-Fuentealba.rar

Saludos!

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: , , , , ,

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: , , ,