|
| 1 | +/* IMPORTANTE: Sólo debes subir el fichero de código como parte del ejercicio. |
| 2 | + * |
| 3 | + * EJERCICIO: |
| 4 | + * Desarrolla un programa capaz de crear un archivo que se llame como |
| 5 | + * tu usuario de GitHub y tenga la extensión .txt. |
| 6 | + * Añade varias líneas en ese fichero: |
| 7 | + * - Tu nombre. |
| 8 | + * - Edad. |
| 9 | + * - Lenguaje de programación favorito. |
| 10 | + * Imprime el contenido. |
| 11 | + * Borra el fichero. |
| 12 | +*/ |
| 13 | + |
| 14 | +/*const fs = require('fs');// Importamos el módulo fs para trabajar con ficheros. |
| 15 | +const fileName = 'wapastorv.txt';// Nombre del archivo que vamos a crear. |
| 16 | +const content = 'Nombre: William Pastor\nEdad: 26\nLenguaje de programación favorito: JavaScript'; // Contenido del archivo que vamos a crear. |
| 17 | +
|
| 18 | +fs.writeFile(fileName, content, (err) => { // Creamos el archivo con el contenido. |
| 19 | + if (err) { |
| 20 | + console.error('Error al crear el archivo:', err); // Si hay un error, lo mostramos por consola. |
| 21 | + return; |
| 22 | + } |
| 23 | + console.log('Archivo creado correctamente con el contenido:', content); // Si no hay errores, mostramos un mensaje de éxito. |
| 24 | + fs.readFile(fileName, 'utf8', (err, data) => { // Leemos el archivo creado. |
| 25 | + if (err) { |
| 26 | + console.error('Error al leer el archivo:', err); // Si hay un error, lo mostramos por consola. |
| 27 | + return; |
| 28 | + } |
| 29 | + console.log('Contenido del archivo:', data);// Si no hay errores, mostramos el contenido del archivo. |
| 30 | + fs.unlink(fileName, (err) => {// Borramos el archivo creado. |
| 31 | + if (err) { |
| 32 | + console.error('Error al borrar el archivo:', err); |
| 33 | + return; |
| 34 | + } |
| 35 | + console.log('Archivo borrado correctamente'); |
| 36 | + }); |
| 37 | + |
| 38 | + }); |
| 39 | +});*/ |
| 40 | + |
| 41 | +/* DIFICULTAD EXTRA (opcional): |
| 42 | +* Desarrolla un programa de gestión de ventas que almacena sus datos en un |
| 43 | +* archivo .txt. |
| 44 | +* - Cada producto se guarda en una línea del archivo de la siguiente manera: |
| 45 | +* [nombre_producto], [cantidad_vendida], [precio]. |
| 46 | +* - Siguiendo ese formato, y mediante terminal, debe permitir añadir, consultar, |
| 47 | +* actualizar, eliminar productos y salir. |
| 48 | +* - También debe poseer opciones para calcular la venta total y por producto. |
| 49 | +* - La opción salir borra el .txt. |
| 50 | +*/ |
| 51 | + |
| 52 | +// Código extra aquí... |
| 53 | +const fs = require('fs'); // Importamos el módulo fs para trabajar con ficheros. |
| 54 | +const readline = require('readline'); // Importamos el módulo readline para leer la entrada por consola. |
| 55 | +const rl = readline.createInterface({ // Creamos una interfaz de lectura. |
| 56 | + input: process.stdin, // Establecemos la entrada estándar. |
| 57 | + output: process.stdout // Establecemos la salida estándar. |
| 58 | +}); |
| 59 | + |
| 60 | +const fileNameVentas = 'ventas.txt'; // Nombre del archivo que vamos a crear. |
| 61 | +const menu = `Menú: |
| 62 | + 1. Añadir producto. |
| 63 | + 2. Consultar productos. |
| 64 | + 3. Actualizar producto. |
| 65 | + 4. Eliminar producto. |
| 66 | + 5. Calcular venta total. |
| 67 | + 6. Calcular venta por producto. |
| 68 | + 7. Salir.`; // Menú de opciones. |
| 69 | +const productos = []; // Array donde almacenaremos los productos |
| 70 | + |
| 71 | +function addProduct() { // Función para añadir un producto. |
| 72 | + rl.question('Introduce el nombre del producto, la cantidad vendida y el precio (separados por comas): ', (answer) => { |
| 73 | + const [nombre, cantidad, precio] = answer.split(','); // Dividimos la respuesta en un array. |
| 74 | + productos.push({ nombre, cantidad: parseInt(cantidad), precio: parseFloat(precio) }); // Añadimos el producto al array. |
| 75 | + rl.question('Producto añadido correctamente. Pulsa cualquier tecla para continuar.', () => showMenu());}); // Mostramos el menú. |
| 76 | +} |
| 77 | + |
| 78 | +function showProducts() { // Función para mostrar los productos. |
| 79 | + console.log('Productos:'); |
| 80 | + productos.forEach((producto) => console.log(`${producto.nombre}, ${producto.cantidad}, ${producto.precio}`)); // Mostramos los productos. |
| 81 | + rl.question('Pulsa cualquier tecla para continuar.', () => showMenu()); |
| 82 | +} |
| 83 | + |
| 84 | +function updateProduct() { // Función para actualizar un producto. |
| 85 | + rl.question('Introduce el nombre del producto a actualizar: ', (nombre) => { |
| 86 | + const producto = productos.find((producto) => producto.nombre === nombre); // Buscamos el producto. |
| 87 | + if (!producto) { // Si no existe, mostramos un mensaje de error. |
| 88 | + console.log('Producto no encontrado.'); |
| 89 | + return rl.question('Pulsa cualquier tecla para continuar.', () => showMenu()); |
| 90 | + } |
| 91 | + rl.question('Introduce la nueva cantidad vendida y el nuevo precio (separados por comas): ', (answer) => { |
| 92 | + const [cantidad, precio] = answer.split(','); // Dividimos la respuesta en un array. |
| 93 | + producto.cantidad = parseInt(cantidad); // Actualizamos la cantidad. |
| 94 | + producto.precio = parseFloat(precio); // Actualizamos el precio. |
| 95 | + rl.question('Producto actualizado correctamente. Pulsa cualquier tecla para continuar.', () => showMenu()); |
| 96 | + }); |
| 97 | + }); |
| 98 | +} |
| 99 | + |
| 100 | +function deleteProduct() { // Función para eliminar un producto. |
| 101 | + rl.question('Introduce el nombre del producto a eliminar: ', (nombre) => { |
| 102 | + const index = productos.findIndex((producto) => producto.nombre === nombre); // Buscamos el índice del producto. |
| 103 | + if (index === -1) { // Si no existe, mostramos un mensaje de error. |
| 104 | + console.log('Producto no encontrado.'); |
| 105 | + return rl.question('Pulsa cualquier tecla para continuar.', () => showMenu()); |
| 106 | + } |
| 107 | + productos.splice(index, 1); // Eliminamos el producto. |
| 108 | + rl.question('Producto eliminado correctamente. Pulsa cualquier tecla para continuar.', () => showMenu()); |
| 109 | + }); |
| 110 | +} |
| 111 | + |
| 112 | +function totalSale() { // Función para calcular la venta total. |
| 113 | + const total = productos.reduce((acc, producto) => acc + producto.cantidad * producto.precio, 0); // Calculamos el total. |
| 114 | + console.log(`Venta total: ${total}`); // Mostramos el total. |
| 115 | + rl.question('Pulsa cualquier tecla para continuar.', () => showMenu()); |
| 116 | +} |
| 117 | + |
| 118 | +function saleByProduct() { // Función para calcular la venta por producto. |
| 119 | + rl.question('Introduce el nombre del producto: ', (nombre) => { |
| 120 | + const producto = productos.find((producto) => producto.nombre === nombre); // Buscamos el producto. |
| 121 | + if (!producto) { // Si no existe, mostramos un mensaje de error. |
| 122 | + console.log('Producto no encontrado.'); |
| 123 | + return rl.question('Pulsa cualquier tecla para continuar.', () => showMenu()); |
| 124 | + } |
| 125 | + console.log(`Venta por ${producto.nombre}: ${producto.cantidad * producto.precio}`); // Mostramos la venta por producto. |
| 126 | + rl.question('Pulsa cualquier tecla para continuar.', () => showMenu()); |
| 127 | + }); |
| 128 | +} |
| 129 | + |
| 130 | +function showMenu() { // Función para mostrar el menú. |
| 131 | + rl.question(menu, (option) => { |
| 132 | + switch (option) { // Según la opción seleccionada, llamamos a la función correspondiente. |
| 133 | + case '1': |
| 134 | + addProduct(); |
| 135 | + break; |
| 136 | + case '2': |
| 137 | + showProducts(); |
| 138 | + break; |
| 139 | + case '3': |
| 140 | + updateProduct(); |
| 141 | + break; |
| 142 | + case '4': |
| 143 | + deleteProduct(); |
| 144 | + break; |
| 145 | + case '5': |
| 146 | + totalSale(); |
| 147 | + break; |
| 148 | + case '6': |
| 149 | + saleByProduct(); |
| 150 | + break; |
| 151 | + case '7': |
| 152 | + fs.unlink(fileNameVentas, (err) => { // Borramos el archivo creado. |
| 153 | + if (err) { |
| 154 | + console.error('Error al borrar el archivo:', err); |
| 155 | + return; |
| 156 | + } |
| 157 | + console.log('Archivo borrado correctamente.'); |
| 158 | + rl.close(); |
| 159 | + }); |
| 160 | + break; |
| 161 | + default: |
| 162 | + console.log('Opción no válida.'); // Si la opción no es válida, mostramos un mensaje de error. |
| 163 | + showMenu(); |
| 164 | + } |
| 165 | + }); |
| 166 | +} |
| 167 | + |
| 168 | +fs.writeFile(fileNameVentas, '', (err) => { // Creamos el archivo. |
| 169 | + if (err) { |
| 170 | + console.error('Error al crear el archivo:', err); |
| 171 | + return; |
| 172 | + } |
| 173 | + console.log('Archivo creado correctamente.'); |
| 174 | + showMenu(); |
| 175 | +}) |
| 176 | + |
| 177 | +rl.on('close', () => console.log('¡Hasta luego!')); // Cuando se cierra la interfaz, mostramos un mensaje |
| 178 | + |
0 commit comments