Inicio > PHP > Laboratorio Inicio DAI4501

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: , , ,
  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: