Primero pondré el enunciado, es un poco largo:
1. Realizar una aplicación que simule el funcionamiento de un parking que dispone de las siguientes plazas: 14 para coches pequeños y 10 para coches grandes. Usa dos arrays para representar el parking. Las posiciones de los arrays representarán las plazas, y almacenarán información de si la plaza está ocupada o no (puedes usar un valor numérico, como 0 para plaza libre, 1 para plaza ocupada).
Los coches se aparcarán de la siguiente forma: cuando entra en el parking, se identifica al coche como grande o pequeño. Los coches grandes aparcan en la primera plaza grande que encuentren. En cambio, los coches pequeños aparcaran en la primera plaza pequeña que encuentren, pero, de no encontrar ninguna, intentarán aparcar en la primera plaza grande libre que vean.
La aplicación tendrás las siguientes páginas:
• Página inicial donde se mostrarán las siguientes opciones:
o Aparcar coche.
o Retirar coche.
o Ver estado del parking.
Cada una de las opciones anteriores nos llevará a una página donde se ejecutarán las operaciones necesarias para llevar a cabo la opción seleccionada por el usuario. Éstas se detallan a continuación.
• Aparcar coche: mediante un formulario se indicará si el coche es grande o pequeño. A continuación se procederá a aparcar usando el mecanismo que se ha explicado previamente. Obtendremos un mensaje que nos indicará si el coche se ha aparcado (no es necesario indicar la plaza), o si el parking está lleno.
• Retirar coche: mediante un formulario se indicará de qué parking se quiere retirar el coche (parking grande o parking pequeño) y la plaza que ocupa el vehículo. El programa mostrará un mensaje indicando si se ha retirado el coche, o si no se encontraba ningún coche en la plaza indicada.
• Ver estado del parking: se mostrará por pantalla el estado de cada plaza del parking, indicando si está libre u ocupada.
Consideraciones: recuerda que para pasar datos no incluidos en un formulario de una página a otra puedes usar sesiones.
El ejercicio lo he dividido en 3 archivos:
index.php
<!DOCTYPE HTML>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Parking De Coches</title>
</head>
<body>
<form method="post" action="procesos.php">
<p>Seleccione una operacion y tamaño del coche</p>
Coche <select name ="tamano">
<option value="grande">grande</option><br>
<option value="pequeno">pequeno</option><br>
</select>
<br>
Operacion <select name="opcion">
<option value="aparca" >Aparcar coche</option>
<option value="retira" >Retirar coche</option>
</select>
<input type="submit" value="enviar" name="estado"/>
<br>
Plaza: <input type ="text" name = "plaza">
</form>
<a href ="estado.php">Estado Parking</a>
</body>
</html>
archivo procesa.php
<?php
const PLAZA_LIBRE = 0;
const PLAZA_OCUPADA = 1;
const NUM_COCHES_GRANDES = 10;
const NUM_COCHES_PEQUENOS = 14;
const MENSAJE = "COCHE APARCADO";
const MENSAJE_NO_DISPONIBLE ="NO HAY SITIO EN EL PARKING";
$tamano = $_POST['tamano'];
$opcion = $_POST['opcion'];
function construir_array($tamano){
$arr = [];
$count = ($tamano == 'grande') ? NUM_COCHES_GRANDES : NUM_COCHES_PEQUENOS;
for ($i = 0; $i< $count; $i++) {
$arr[$i] = PLAZA_LIBRE;
}
return $arr;
}
function libre($tamano){
$arr = ($tamano == 'grande') ? $_SESSION['grande'] : $_SESSION['pequeno'];
return array_search(PLAZA_LIBRE, $arr);
}
function aparcar($tamano){
if(FALSE != ($seccion = libre($tamano))) {
$_SESSION[$tamano][$seccion] =PLAZA_OCUPADA;
echo MENSAJE;
}else{
MENSAJE_NO_DISPONIBLE;
}
}
function retirar ($tamano, $plaza){
if (array_key_exists($plaza, $_SESSION[$tamano])){
$_SESSION[$tamano][$plaza] = PLAZA_LIBRE;
return true;
}
return false;
}
if (!isset($_SESSION)){
session_start();
}
//CREO LOS ARRAYS PARA GUARDAR LOS DATOS
if (!isset($_SESSION['pequeno'])){
$_SESSION['pequeno'] = construir_array('pequeno');
}
if (!isset($_SESSION['grande'])){
$_SESSION['grande'] = construir_array('grande');
}
//PROCEDO A EJECUTAR LA ACCION
if (isset($tamano)) {
if ($opcion == 'aparca'){
aparcar($tamano);
}else if ($opcion ==='retira') {
$plaza = isset($_POST['plaza']) ? $_POST['plaza'] : null;
if (!isset($plaza) || empty($plaza)){
echo 'ingresa la plaza del coche a retirar';
}else{
if (retirar($tamano, $plaza)) {
echo 'El coche de la plaza Numero '.$plaza.' se retiro bien';
}else{
echo '[ERROR] al retirar el coche de la plaza numero '.$plaza;
}
}
}else{
echo '[ERROR] la opcion no es valida.';
}
}
echo '<br><br>';
echo '<a href = "index.php">VOLVER</a>';
?>
archivo estado.php
<?php
if (!isset($_SESSION)) {
session_start();
}
echo '<a href="index.php"><VOLVER</a>';
echo '<h1>REFERENCIAS: <h1>';
echo '<h3>0 ===> PLAZA_LIBRE</h3>';
echo '<h3>1 ===> PLAZA_OCUPADA</h3>';
echo '<h1>COCHES GRANDES</h1>';
echo '<pre>';
var_dump($_SESSION['grande']);
echo '</pre>';
echo '<h1>COCHES PEQUEÑOS</h1>';
echo '<pre>';
var_dump($_SESSION['pequeno']);
echo '</pre>';
?>
El problema lo tengo que cuando voy a aparcar un coche ya sea grande o pequeño al darle al boton enviar no me muestra nada. En cambio si retiro un coche si me muestra un mensaje que se retiro con exito¿alguien puede ayudarme? tengo que entregarlo como muy tarde el lunes y me esta volviendo loco el ejercicio, gracias.
Un saludo