JavaScript - AGRADECERIA AYUDA

   
Vista:
Imágen de perfil de Miguel Angel

AGRADECERIA AYUDA

Publicado por Miguel Angel (7 intervenciones) el 20/03/2017 14:05:21
Hola, tengo el siguiente ejercicio:
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á 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.
He creado un formulario:
<form method='POST' action='form.php'>
Tipo de Coche: <select name="tipo" style="width:100px"<br/>
<option value="grande" name="tipo">GRANDE</option>
<option value="pequeno" name="tipo">PEQUENO</option>
</select></br>
Accion: <select name="accion" style="width:150px"<br/>
<option value="aparcar" name="accion">APARCAR</option><br/>
<option value="retirar" name="accion">RETIRAR</option><br/>
<input type="submit" value="estado del parking" name="estado" style="width:250px"/>
</form>
Y mediante un POST recupero el valor introducido:
if($_POST){
echo "El tipo de coche recibido es ".$_POST['tipo']." y la accion es ".$_POST['accion']."<br/>";

Pero ahora, como hago para guardar este valor recuperado en dos arrays distintos, uno si el valor es "grande" y otro si el valor es "pequeño", ademas, se guardara en dicho array si la acción es aparcar, pero si la acción es retirar deberá vaciar esa posición del Array.
No se si me he explicado bien, soy un poco novato en PHP y ahora mismo estoy completamente bloqueado, seguro que es una tonteria, pero llevo dos dias con la tonteria y no la resuelvo.
Muchas gracias a quien pueda ayudarme
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

AGRADECERIA AYUDA

Publicado por Alejandro (110 intervenciones) el 21/03/2017 00:47:41
Hola Miguel Angel, te comparto un código que hice que creo te pueda servir. La aplicación se divide en 3 archivos
form.php -> Formulario para seleccionar las acciones y el tipo de auto
parking.php -> Procesa los datos del formulario anterior llevando a cabo las acciones correspondientes.
listar-parking.php -> Muestra el estado actual de los arrays de autos grandes y pequeños.

form.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <form method='POST' action='parking.php'>
        Tipo de Coche: <select name="tipo" style="width:100px">
            <option value="grande">GRANDE</option>
            <option value="pequeno">PEQUENO</option>
        </select>
        <br>
        Accion: <select name="accion" style="width:150px">
                <option value="aparcar">APARCAR</option><br>
                <option value="retirar">RETIRAR</option><br>
                </select>
            <input type="submit" value="Aceptar" name="estado" style="width:250px"/>
         <br>
        Plaza: <input type="text" name="plaza">
    </form>
    <a href='listar-parking.php'>Listar Parking</a>
</body>
</html>

parking.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
 
// Represantan el estado de disponible/ocupado
const OCUPADO = 1;
const DISPONIBLE = 0;
 
// Maxima cantidad de autos dependiendo del tipo
const MAX_AUTOS_GRANDES = 10;
const MAX_AUTOS_PEQUENOS = 14;
 
// Mensajes 
const MESSAGE = 'AUTO APARCADO CON EXITO!';
const MESSAGE_NO_DISP = 'Lo sentimos, no hay espacio disponible en el parking.';
 
// DATOS DEL FORMULARIO
$tipo = $_POST['tipo']; // tipo de auto
$accion = $_POST['accion']; // tipo de accion
 
/**
 * crear_array
 * Crea un nuevo array iniciando su posiciones con el valor de DISPONIBLE. 
 * @param string $tipo
 * @return null|int 
 */
function crear_array($tipo) {
    $arr = [];
    $count = ($tipo == 'grande') ? MAX_AUTOS_GRANDES : MAX_AUTOS_PEQUENOS;
    for ($i = 0; $i < $count; $i++) {
        $arr[$i] = DISPONIBLE;
    }
    return $arr;
}
 
/**
 * disponible
 * Comprueba si una seccion del parking esta disponible.
 * Retorna la proxima posicion disponible o null de lo contrario.
 * @param string $tipo
 * @return bool|int 
 */
function disponible($tipo) {
    $arr = ($tipo == 'grande') ? $_SESSION['grande'] : $_SESSION['pequeno'];
    return array_search(DISPONIBLE, $arr);
}
 
/**
 * aparcar
 * Aparca un auto de un determinado tipo.
 * @param string $tipo
 * @return void
 */
function aparcar($tipo)
{
    // chequeo si hay espacio para guardar el auto
    if (FALSE != ($seccion = disponible($tipo))) {
        $_SESSION[$tipo][$seccion] = OCUPADO;
        echo MESSAGE;
    } else {
        echo MESSAGE_NO_DISP;
    }
}
 
/**
 * retirar
 * Retirar un auto de un determinado tipo, indicando la plaza.
 * @param string $tipo
 * @param int $plaza
 * @return bool
 */
function retirar($tipo, $plaza)
{
    if (array_key_exists($plaza, $_SESSION[$tipo])) {
        $_SESSION[$tipo][$plaza] = DISPONIBLE;
        return true;
    }
    return false;
}
 
if (!isset($_SESSION)) {
    session_start();
}
 
// CREO LOS ARRAYS PARA GUARDAR LOS DATOS
if (!isset($_SESSION['pequeno'])) {
    $_SESSION['pequeno'] = crear_array('pequeno');
}
 
if (!isset($_SESSION['grande'])) {
    $_SESSION['grande'] = crear_array('grande');
}
 
// PROCEDO A EJECUTAR LA ACCION
if (isset($tipo)) {
 
    if ($accion == 'aparcar') {
        aparcar($tipo);
    } else if ($accion === 'retirar') {
 
        $plaza = isset($_POST['plaza']) ? $_POST['plaza'] : null;
 
        if (!isset($plaza) || empty($plaza)) {
            echo 'Debe ingresar la plaza del auto a retirar';
        } else {
            if (retirar($tipo, $plaza)) {
                echo 'El Auto de la en la plaza N° '.$plaza.' fue retirado con exito!';
            } else {
                echo '[ ERROR ] Al retirar el Auto de la plaza N° '.$plaza;
            }
        }
    } else {
        echo '[ ERROR ] La accion no ingresada no es valida.';
    }
}
 
echo '<br><br>';
echo '<a href="form.php">REGRESAR</a>';

listar-parking.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
 
if (!isset($_SESSION)) {
    session_start();
}
 
echo '<a href="form.php"><-- REGRESAR</a>';
 
echo '<h1>REFERENCIAS: <h1>';
 
echo '<h3>0 ===> DISPONIBLE</h3>';
echo '<h3>1 ===> OCUPADO</h3>';
 
echo '<h1>AUTOS GRANDES</h1>';
 
echo '<pre>';
var_dump($_SESSION['grande']);
echo '</pre>';
 
echo '<h1>AUTOS PEQUEÑOS</h1>';
 
echo '<pre>';
var_dump($_SESSION['pequeno']);
echo '</pre>';

Nos comentas. Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Miguel Angel

AGRADECERIA AYUDA

Publicado por Miguel Angel (7 intervenciones) el 21/03/2017 13:07:57
Hola, muchísimas gracias por la ayuda, ademas, muy bien comentado para, que es el objetivo, entender el código, me has salvado de un suspenso,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AGRADECERIA AYUDA

Publicado por javier (29 intervenciones) el 22/03/2017 08:29:16
Buenos dias

No entiendo lo que hace la variable $seccion , en esta parte del codigo.¿es una variable creada solo hay o ya viene de antes?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function aparcar($tipo)
 
{
 
    // chequeo si hay espacio para guardar el auto
 
    if (FALSE != ($seccion = disponible($tipo))) {
 
        $_SESSION[$tipo][$seccion] = OCUPADO;
 
        echo MESSAGE;
 
    } else {
 
        echo MESSAGE_NO_DISP;
 
    }
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro

AGRADECERIA AYUDA

Publicado por Alejandro (110 intervenciones) el 22/03/2017 23:34:20
Hola, la variable $seccion toma lo que retorna la funcion disponible() que es un booleano o un entero que representa el indice del array. Lo hice directamente en la condicion pero podria haber ejecutado algo asi tambien:

1
2
3
4
5
6
7
$sección = disponible($tipo);
if ($seccion != FALSE) {
        $_SESSION[$tipo][$seccion] = OCUPADO;
        echo MESSAGE;
    } else {
        echo MESSAGE_NO_DISP;
    }

Otra cosa que cabe aclarar es que es necesario evaluar la condicion con != FALSE ya que si evaluamos solo con $seccion, si este toma un valor 0 la condicion seria falsa pero 0 si es un indice valido.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AGRADECERIA AYUDA

Publicado por javier (29 intervenciones) el 23/03/2017 08:50:16
entonces la funcion aparcar quedaria asi?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function aparcar($tamano){
 
	$seccion = libre($tamano);
 
if ($seccion != FALSE) {
 
        $_SESSION[$tamano][$seccion] = OCUPADO;
 
        echo MENSAJE;
 
    } else {
 
        echo MENSAJE_NO_LIBRE;
 
    }
 
}

es que asi lo hago, no me da error el codigo, pero cuando voy a aparcar un coche, siempre me sale el mensaje de que no hay plaza disponibles. he cambaido el nombre de algunas variables para que no sea exactamente igual.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AGRADECERIA AYUDA

Publicado por javier (29 intervenciones) el 23/03/2017 20:12:39
¿Como seria posible hacer el ejercicio creando los dos arrays que pide?
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Miguel Angel

AGRADECERIA AYUDA

Publicado por Miguel Angel (7 intervenciones) el 24/03/2017 19:18:14
Hola, he probado el código y no me funciona, cada vez que le doy a aparcar un vehículo me dice que no hay plazas disponibles, y si le doy al estado del parking están todos los arrays vacíos, es decir, en 0 o disponibles, el código no guarda los valores de los Arrays, que ademas, habría que guardarlos con variables de session para que se mantengan hasta que no cerremos la pagina, ¿alguna idea de donde puede estar el error?
Agradecería ayuda, tengo que entregar el ejercicio antes del lunes y estoy bloqueado con este ejercicio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad