Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/Objetos/ejercicios»
De WikiEducator
| (6 revisiones intermedias por el mismo usuario no mostrado) | |||
| Línea 101: | Línea 101: | ||
</source> | </source> | ||
--> | --> | ||
| + | <br /> | ||
<br /> | <br /> | ||
===[[Usuario:ManuelRomero/ProgramacionWeb/Objetos/ejercicios/ejercicio3|Ejercicio 3: Clase Racional]]=== | ===[[Usuario:ManuelRomero/ProgramacionWeb/Objetos/ejercicios/ejercicio3|Ejercicio 3: Clase Racional]]=== | ||
| + | <br /> | ||
{{MRM_Actividad|Title=Clase Racional| | {{MRM_Actividad|Title=Clase Racional| | ||
*Construir una clase llamado racional. | *Construir una clase llamado racional. | ||
| Línea 113: | Línea 115: | ||
</source> | </source> | ||
| + | *Implementa los siguientes métodos | ||
| + | #.-El método '''''__toString''''', para visualizarlo, | ||
| + | #.-El método '''''sumar''''', para sumar al objeto actual, y Racional que recibamos como argumento. | ||
| + | #.-El método '''''restar''''', para restar al objeto actual, y Racional que recibamos como argumento. | ||
| + | #.-El método '''''multiplicar''''', para multiplicar al objeto actual, y Racional que recibamos como argumento. | ||
| + | #.-El método '''''dividir''''', para dividir al objeto actual, y Racional que recibamos como argumento. | ||
| + | |||
| + | *Todos los métodos aritméticos anteriores me deben retornar un Racional simplificado | ||
}} | }} | ||
<!-- | <!-- | ||
| Línea 152: | Línea 162: | ||
}} | }} | ||
--> | --> | ||
| + | |||
| + | ===[[Usuario:ManuelRomero/ProgramacionWeb/Objetos/ejercicios/ejercicio4|Ejercicio 4: tienda base con array]]=== | ||
| + | <br /> | ||
| + | {{MRM_Actividad|Title=Tienda base con Array| | ||
| + | *A partir de un array de productos, por ejemplo: | ||
| + | <source lang=php> | ||
| + | $productos=[ | ||
| + | 'lechuga' => ['unidades' => 200, | ||
| + | 'precio' => 0.90], | ||
| + | 'tomates' =>['unidades' => 2000, | ||
| + | 'precio' => 2.15], | ||
| + | 'cebollas' =>['unidades' => 3200, | ||
| + | 'precio' => 0.49], | ||
| + | 'fresas' =>['unidades' => 4800, | ||
| + | 'precio' => 4.50], | ||
| + | 'manzanas' =>['unidades' => 2500, | ||
| + | 'precio' => 2.10], | ||
| + | ]; | ||
| + | </source> | ||
| + | Realizamos una pequeña aplicación con los siguientes requisitos | ||
| + | RF1: Un usuario debe acceder registrándos (usuario y passowrd) . | ||
| + | El criterio será que usuario y password coincidan, si no, | ||
| + | nos informará de datos incorrectos | ||
| + | RF2: Una vez accedido nos mostrará un listado con todos los productos y sus precios | ||
| + | RF3: También nos mostrará un formulario para poder comprar productos | ||
| + | RF4: Una vez indicado los productos selecionados nos mostrará la factura . | ||
| + | Nunca podrá facturar más productos de los que haya en existencias. | ||
| + | RNF:Se debe programar orientado a objetos, con dos clases: Productos.php y Cesta.php | ||
| + | A continuación se muestra una posible solución | ||
| + | {{plegable|hide|Cesta.php| | ||
| + | <source lang=php> | ||
| + | <?php | ||
| + | class Cesta | ||
| + | { | ||
| + | /** | ||
| + | * @var $cesta Un array asociativo con los productos comprados | ||
| + | */ | ||
| + | private $cesta; | ||
| + | |||
| + | //Inicializo los atributos de la clase | ||
| + | public function __construct(){ | ||
| + | $this->cesta = []; | ||
| + | |||
| + | } | ||
| + | |||
| + | // añade el producto en la cesta | ||
| + | //Contabiliza no comprar más productos de las existencias | ||
| + | public function add_producto($productos, $producto, $unidades){ | ||
| + | if ($unidades> $productos[$producto]['unidades']) { | ||
| + | $unidades = $productos[$producto]['unidades']; | ||
| + | var_dump($unidades); | ||
| + | } | ||
| + | $this->cesta[$producto]=$unidades; | ||
| + | } | ||
| + | |||
| + | //Generemos una factua de la compra | ||
| + | public function generar_factura($productos):string{ | ||
| + | $factura = "<fieldset><legend>Factura </legend>"; | ||
| + | $total=0; //inicializo para evitar un warning | ||
| + | foreach ($this->cesta as $producto=> $unidades) { | ||
| + | $precio = $productos[$producto]['precio']; | ||
| + | $subtotal = floatval($unidades) * $precio; //convierto a float $unidades para evitar warning!! | ||
| + | $factura.="<h3>$unidades de $producto a $precio = $subtotal</h3>"; | ||
| + | $total+=$subtotal; | ||
| + | } | ||
| + | $factura .="<h3> Total de productos comprados <span style='color:red'>".sizeof($this->cesta)."</span></h3>"; | ||
| + | $factura .="<h2> Importe total de la factura <span style='color:red'>$total</span></h2>"; | ||
| + | return $factura; | ||
| + | } | ||
| + | |||
| + | } | ||
| + | ?> | ||
| + | |||
| + | </source> | ||
| + | |||
| + | }} | ||
| + | {{plegable|hide|Producto.php| | ||
| + | <source lang=php> | ||
| + | <?php | ||
| + | |||
| + | class Producto | ||
| + | { | ||
| + | /** | ||
| + | * @var $productos Un array con un listado | ||
| + | de productos (unidades y precio) para poder comprar | ||
| + | */ | ||
| + | private $productos; | ||
| + | const LISTADO_PRODUCTOS=[ | ||
| + | 'lechuga' => ['unidades' => 200, | ||
| + | 'precio' => 0.90], | ||
| + | 'tomates' =>['unidades' => 2000, | ||
| + | 'precio' => 2.15], | ||
| + | 'cebollas' =>['unidades' => 3200, | ||
| + | 'precio' => 0.49], | ||
| + | 'fresas' =>['unidades' => 4800, | ||
| + | 'precio' => 4.50], | ||
| + | 'manzanas' =>['unidades' => 2500, | ||
| + | 'precio' => 2.10], | ||
| + | ]; | ||
| + | |||
| + | //Inicializo los atributos de la clase | ||
| + | public function __construct(){ | ||
| + | $this->productos = self::LISTADO_PRODUCTOS; | ||
| + | |||
| + | } | ||
| + | |||
| + | |||
| + | public function get_productos(): array{ | ||
| + | return $this->productos; | ||
| + | } | ||
| + | |||
| + | |||
| + | } | ||
| + | </source> | ||
| + | |||
| + | }} | ||
| + | {{plegable|hide|index.php| | ||
| + | <source lang=php> | ||
| + | <?php | ||
| + | $msj=$_GET["msj"] ?? ""; | ||
| + | |||
| + | if (isset($_POST['submit'])){ | ||
| + | $name = $_POST['name']; | ||
| + | $pass = $_POST['pass']; | ||
| + | if ($name ===$pass){ | ||
| + | header ("Location:tienda.php?name=$name"); | ||
| + | exit(); | ||
| + | }else{ | ||
| + | $msj ="Datos incorrectos"; | ||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | ?> | ||
| + | |||
| + | |||
| + | <!doctype html> | ||
| + | <html lang="en"> | ||
| + | <head> | ||
| + | <meta charset="UTF-8"> | ||
| + | <meta name="viewport" | ||
| + | content="width=device-width"> | ||
| + | <meta http-equiv="X-UA-Compatible" content="ie=edge"> | ||
| + | <title>Document</title> | ||
| + | <link rel="stylesheet" href="estilo.css"> | ||
| + | </head> | ||
| + | <body> | ||
| + | <form action="index.php" method="post"> | ||
| + | <fieldset> | ||
| + | <h2><?=$msj?></h2> | ||
| + | <legend>Datos de acceso</legend> | ||
| + | usuario : <input type="text" name="name" id=""><br /> | ||
| + | pass <input type="text" name="pass" id=""><br /> | ||
| + | <input type="submit" value="Validar" name="submit"> | ||
| + | |||
| + | </fieldset> | ||
| + | </form> | ||
| + | |||
| + | </body> | ||
| + | </html> | ||
| + | |||
| + | </source> | ||
| + | |||
| + | }} | ||
| + | {{plegable|hide|tienda.php| | ||
| + | <source lang=php> | ||
| + | <?php | ||
| + | spl_autoload_register(function ($clase){ | ||
| + | require("$clase.php"); | ||
| + | }); | ||
| + | |||
| + | |||
| + | |||
| + | $productos = new Producto(); | ||
| + | $listado = $productos->get_productos(); | ||
| + | |||
| + | $opcion = $_POST['submit'] ?? null; | ||
| + | if ($opcion =='Comprar'){ | ||
| + | $cesta = new Cesta(); | ||
| + | $compra = $_POST['compra']; | ||
| + | foreach ($compra as $producto_comprado=>$unidades) { | ||
| + | $cesta->add_producto($listado, $producto_comprado, $unidades); | ||
| + | } | ||
| + | $factura = $cesta->generar_factura($listado); | ||
| + | } | ||
| + | |||
| + | ?> | ||
| + | <!doctype html> | ||
| + | <html lang="en"> | ||
| + | <head> | ||
| + | <meta charset="UTF-8"> | ||
| + | <meta name="viewport" | ||
| + | content="width=device-width"> | ||
| + | <meta http-equiv="X-UA-Compatible" content="ie=edge"> | ||
| + | <title>Listado de productos</title> | ||
| + | <link rel="stylesheet" href="estilo.css"> | ||
| + | </head> | ||
| + | <body> | ||
| + | <fieldset> | ||
| + | <legend>Listado de productos disponibles</legend> | ||
| + | <?php | ||
| + | foreach ($listado as $producto=>$contendio) { | ||
| + | echo "<h2>$producto ({$contendio['precio']}€) </h2>"; | ||
| + | } | ||
| + | ?> | ||
| + | </fieldset> | ||
| + | <?php | ||
| + | //Si no hay factura muestro el formulario para comprar | ||
| + | if (!isset($factura)):?> | ||
| + | <fieldset> | ||
| + | <legend>Compra</legend> | ||
| + | <form action="tienda.php" method="post"> | ||
| + | <?php | ||
| + | foreach ($listado as $producto=>$contendio) { | ||
| + | echo "<h4>$producto ({$contendio['precio']}€)"; | ||
| + | echo "<input type='text' name='compra[$producto]' > </h4>"; | ||
| + | } | ||
| + | ?> | ||
| + | <input type="submit" value="Comprar" name="submit"> | ||
| + | </form> | ||
| + | </fieldset> | ||
| + | <?php else: | ||
| + | //Si hay factura la muestro, en lugar del formulario para comprar | ||
| + | echo "$factura"; | ||
| + | ?> | ||
| + | <form action="tienda.php" method="post"> | ||
| + | <input type="submit" value="Volver a comprar" name="submit"> | ||
| + | </form> | ||
| + | <?php endif?> | ||
| + | |||
| + | |||
| + | </body> | ||
| + | </html> | ||
| + | |||
| + | </source> | ||
| + | |||
| + | }} | ||
| + | {{plegable|hide|estilo.css| | ||
| + | <source lang=css> | ||
| + | fieldset{ | ||
| + | width: 50%; | ||
| + | background: bisque; | ||
| + | margin:100px | ||
| + | } | ||
| + | legend{ | ||
| + | size : 2em; | ||
| + | color:blue; | ||
| + | } | ||
| + | |||
| + | input[type=text]{ | ||
| + | size : 1.4em; | ||
| + | color:blue; | ||
| + | |||
| + | } | ||
| + | input[type=submit]{ | ||
| + | size : 1.8em; | ||
| + | color:blue; | ||
| + | |||
| + | } | ||
| + | </source> | ||
| + | |||
| + | }} | ||
| + | |||
| + | |||
| + | }} | ||
| + | <!-- | ||
Última revisión de 16:10 13 feb 2022
Práctica |