aimenu

Respuestas

Calculadora

const calculadora = {
    valorActual: '0',
    valorAnterior: '',
    operacion: undefined,
    reiniciarPantalla: false
};

const valorAnteriorDisplay = document.getElementById('valor-anterior');
const valorActualDisplay = document.getElementById('valor-actual');

const botonesNumeros = document.querySelectorAll('.numero');
const botonesOperadores = document.querySelectorAll('.operador');
const botonIgual = document.querySelector('[value="igual"]');
const botonBorrar = document.getElementById('borrar');
const botonBorrarTodo = document.getElementById('borrarTodo');
const botonDecimal = document.getElementById('decimal');

function actualizarDisplay() {
    valorActualDisplay.textContent = calculadora.valorActual;
    valorAnteriorDisplay.textContent = calculadora.operacion
        ? `${calculadora.valorAnterior} ${obtenerSimboloOperacion(calculadora.operacion)}`
        : calculadora.valorAnterior;
}

function obtenerSimboloOperacion(operacion) {
    switch (operacion) {
        case 'sumar': return '+';
        case 'restar': return '-';
        case 'multiplicar': return '×';
        case 'dividir': return '÷';
        case 'areaT': return '△';
        case 'areaC': return '○';
        default: return '';
    }
}

function agregarNumero(numero) {
    calculadora.valorActual = calculadora.reiniciarPantalla
        ? numero
        : calculadora.valorActual === '0' ? numero : calculadora.valorActual + numero;
    calculadora.reiniciarPantalla = false;
}

function agregarDecimal() {
    if (calculadora.reiniciarPantalla) {
        calculadora.valorActual = '0.';
        calculadora.reiniciarPantalla = false;
        return;
    }
    if (!calculadora.valorActual.includes('.')) {
        calculadora.valorActual += '.';
    }
}

function borrar() {
    calculadora.valorActual = calculadora.valorActual.length <= 1 ||
        (calculadora.valorActual.length === 2 && calculadora.valorActual.startsWith('-'))
        ? '0'
        : calculadora.valorActual.slice(0, -1);
}

function borrarTodo() {
    calculadora.valorActual = '0';
    calculadora.valorAnterior = '';
    calculadora.operacion = undefined;
}

function elegirOperacion(operacion) {
    if (operacion === 'areaC') {
        const radio = parseFloat(calculadora.valorActual);
        if (!isNaN(radio)) {
            calculadora.valorAnterior = `π×(${radio})²`;
            calculadora.valorActual = (Math.PI * radio * radio).toFixed(4);
            calculadora.operacion = undefined;
            calculadora.reiniciarPantalla = true;
        }
        return;
    }
    if (calculadora.valorActual === '') return;
    if (calculadora.valorAnterior !== '') calcular();

    calculadora.operacion = operacion;
    calculadora.valorAnterior = calculadora.valorActual;
    calculadora.reiniciarPantalla = true;
}

function calcular() {
    if (calculadora.operacion === 'areaT') {
        const base = parseFloat(calculadora.valorAnterior);
        const altura = parseFloat(calculadora.valorActual);
        if (!isNaN(base) && !isNaN(altura)) {
            calculadora.valorActual = (base * altura / 2).toString();
        }
        calculadora.operacion = undefined;
        calculadora.valorAnterior = '';
        calculadora.reiniciarPantalla = true;
        return;
    }

    let resultado;
    const anterior = parseFloat(calculadora.valorAnterior);
    const actual = parseFloat(calculadora.valorActual);

    if (isNaN(anterior) || isNaN(actual)) return;

    switch (calculadora.operacion) {
        case 'sumar': resultado = anterior + actual; break;
        case 'restar': resultado = anterior - actual; break;
        case 'multiplicar': resultado = anterior * actual; break;
        case 'dividir': resultado = actual === 0 ? 'Error' : anterior / actual; break;
        default: return;
    }

    calculadora.valorActual = resultado.toString();
    calculadora.operacion = undefined;
    calculadora.valorAnterior = '';
    calculadora.reiniciarPantalla = true;
}

botonesNumeros.forEach(boton => {
    boton.addEventListener('click', () => {
        agregarNumero(boton.textContent);
        actualizarDisplay();
    });
});

botonesOperadores.forEach(boton => {
    boton.addEventListener('click', () => {
        elegirOperacion(boton.value);
        actualizarDisplay();
    });
});

botonIgual.addEventListener('click', () => {
    if (calculadora.operacion !== 'areaC') {
        calcular();
        actualizarDisplay();
    }
});

botonBorrar.addEventListener('click', () => {
    borrar();
    actualizarDisplay();
});

botonBorrarTodo.addEventListener('click', () => {
    borrarTodo();
    actualizarDisplay();
});

botonDecimal.addEventListener('click', () => {
    agregarDecimal();
    actualizarDisplay();
});

actualizarDisplay();

AJAX

document.addEventListener("DOMContentLoaded", function () {
    const input_numero = document.getElementById("numero");
    const boton_solicitar = document.getElementById("solicitar");
    const boton_borrar = document.getElementById("eliminar");
    const select_eliminados = document.getElementById("eliminados");
    const mostrar_posts = document.getElementById("posts");

    boton_solicitar.addEventListener("click", function () {
        getData(input_numero.value);
    });

    boton_borrar.addEventListener("click", function () {
        const todosposts = mostrar_posts.querySelectorAll("*");
        console.log(select_eliminados.value);

        todosposts.forEach(article => {
            if (article.id === select_eliminados.value) {
                article.remove();
            }
        });
    });
});

function getData(numero) {
    const numeroPosts = document.getElementById("numeroPosts");
    const img = document.createElement("img");
    img.src = "loading.gif";
    numeroPosts.appendChild(img);

    const mensaje = { numero };

    const options = {
        body: JSON.stringify(mensaje),
        method: "POST",
        headers: { "Content-Type": "application/json" }
    };

    const url = "http://localhost:8000/posts.php";

    fetch(url, options)
        .then(response => {
            if (!response.ok) throw new Error("error con la respuesta fetch");
            return response.json();
        })
        .then(datos => {
            img.remove();
            console.log(datos);

            const mostrar_posts = document.getElementById("posts");
            mostrar_posts.innerHTML = "";

            datos.forEach(post => {
                const article = document.createElement("article");
                article.classList.add("post");
                article.id = post.id;

                const h2 = document.createElement("h2");
                h2.textContent = post.title;

                const p = document.createElement("p");
                p.textContent = post.body;

                const p2 = document.createElement("p");
                p2.textContent = "usuario: " + post.userId;

                const p3 = document.createElement("p");
                p3.textContent = "post: " + post.id;

                article.append(h2, p, p2, p3);
                mostrar_posts.appendChild(article);
            });
        });
}

Validar Formulario

document.addEventListener("DOMContentLoaded", function () {
    const formulario = document.querySelector("form");
    const input_usuario = document.getElementById("usuario");
    const input_dni = document.getElementById("dni");
    const input_pwd = document.getElementById("pwd");
    const input_naci = document.getElementById("nacimiento");
    const input_rama = document.getElementById("rama");
    const input_horas = document.getElementsByName("horas");
    const input_condiciones = document.getElementById("condiciones");

    formulario.addEventListener("submit", function (e) {
        e.preventDefault();
        validarUsuario();
        validarDni();
        validarPwd();
        validarRama();
        validarFecha();
        validarHoras();
        validarCondiciones();
        if (validarPwd() && validarDni() && validarUsuario() && validarFecha() && validarRama() && validarHoras() && validarCondiciones()) {
            formulario.submit();
        }
    });

    input_usuario.addEventListener("blur", validarUsuario);
    input_dni.addEventListener("blur", validarDni);
    input_dni.addEventListener("input", function () {
        if (input_dni.value.length === 8 && /^[0-9]{8}$/.test(input_dni.value)) {
            input_dni.value += "-";
        }
    });
    input_pwd.addEventListener("blur", validarPwd);
    input_naci.addEventListener("blur", validarFecha);
    input_rama.addEventListener("blur", validarRama);
    input_horas.forEach(radio => radio.addEventListener("blur", validarHoras));
    input_condiciones.addEventListener("blur", validarCondiciones);
});

function validarUsuario() {
    const input = document.getElementById("usuario");
    const info = document.getElementById("infousuario");
    info.classList.remove("error");
    info.innerHTML = "";
    let noerror = true;

    if (input.value === "") {
        info.innerHTML += "No puede estar vacío <br>";
        info.classList.add("error");
        noerror = false;
    }
    if (!/[0-9]+/.test(input.value)) {
        info.innerHTML += "Debe tener un número <br>";
        info.classList.add("error");
        noerror = false;
    }
    if (!/[a-z]+/.test(input.value)) {
        info.innerHTML += "Debe tener una minúscula <br>";
        info.classList.add("error");
        noerror = false;
    }
    return noerror;
}

function validarDni() {
    const input = document.getElementById("dni");
    const info = document.getElementById("infodni");
    info.classList.remove("error");
    info.innerHTML = "";
    let noerror = true;

    if (input.value === "") {
        info.innerHTML += "No puede estar vacío <br>";
        info.classList.add("error");
        noerror = false;
    }
    if (!/^[0-9]{8}-[A-Z]/.test(input.value.toUpperCase())) {
        info.innerHTML += "El DNI no cumple con el formato 12345678-X <br>";
        info.classList.add("error");
        noerror = false;
    }
    return noerror;
}

function validarPwd() {
    const input = document.getElementById("pwd");
    const info = document.getElementById("infopwd");
    info.classList.remove("error");
    info.innerHTML = "";
    let noerror = true;

    if (input.value === "") {
        info.innerHTML += "No puede estar vacío <br>";
        info.classList.add("error");
        noerror = false;
    }
    if (!/[0-9]+/.test(input.value)) {
        info.innerHTML += "Debe tener al menos un número <br>";
        info.classList.add("error");
        noerror = false;
    }
    if (!/[a-z]+/.test(input.value)) {
        info.innerHTML += "Debe tener una minúscula <br>";
        info.classList.add("error");
        noerror = false;
    }
    if (!/[A-Z]+/.test(input.value)) {
        info.innerHTML += "Debe tener una mayúscula <br>";
        info.classList.add("error");
        noerror = false;
    }
    if (!/[#@]+/.test(input.value)) {
        info.innerHTML += "Debe tener un carácter especial <br>";
        info.classList.add("error");
        noerror = false;
    }
    if (input.value.length < 8) {
        info.innerHTML += "Debe ser más larga que 8 caracteres <br>";
        info.classList.add("error");
        noerror = false;
    }
    return noerror;
}

function validarFecha() {
    const input = document.getElementById("nacimiento");
    const info = document.getElementById("infonacimiento");
    info.classList.remove("error");
    info.innerHTML = "";
    let noerror = true;

    let fechanaci = new Date(input.value);
    let fechaahora = new Date();
    let edad = fechaahora.getFullYear() - fechanaci.getFullYear();
    let mes = fechaahora.getMonth() - fechanaci.getMonth();

    if (input.value === "") {
        info.innerHTML += "No puede estar vacío <br>";
        info.classList.add("error");
        noerror = false;
    }

    if (mes < 0 || (mes === 0 && fechaahora.getDate() < fechanaci.getDate())) {
        edad--;
    }
    if (edad < 18) {
        info.innerHTML += "Debes ser mayor de 18 años <br>";
        info.classList.add("error");
        noerror = false;
    }
    return noerror;
}

function validarRama() {
    const input = document.getElementById("rama");
    const info = document.getElementById("inforama");
    info.classList.remove("error");
    info.innerHTML = "";
    let noerror = true;

    if (input.value === "") {
        info.innerHTML += "Debes seleccionar una rama <br>";
        info.classList.add("error");
        noerror = false;
    }
    return noerror;
}

function validarHoras() {
    const input = document.getElementsByName("horas");
    const info = document.getElementById("infohoras");
    info.classList.remove("error");
    info.innerHTML = "";
    let seleccionado = false;
    let noerror = true;

    input.forEach(radio => {
        if (radio.checked) seleccionado = true;
    });

    if (!seleccionado) {
        info.innerHTML += "Debes seleccionar al menos una opción <br>";
        info.classList.add("error");
        noerror = false;
    }
    return noerror;
}

function validarCondiciones() {
    const input = document.getElementById("condiciones");
    const info = document.getElementById("infocondiciones");
    info.classList.remove("error");
    info.innerHTML = "";
    let noerror = true;

    if (!input.checked) {
        info.innerHTML += "Debes aceptar las condiciones <br>";
        info.classList.add("error");
        noerror = false;
    }
    return noerror;
}

Limpiar Array con Usuarios

document.addEventListener("DOMContentLoaded", function () {
    Usuarios = [
        "Manolo$Lama Sánchez$999000000$lama@cope.es$28200$04/03/1969",
        "Manu$Carreño López$666000000$carreno@ser.es$12001$04/12/1975",
        "Maria Teresa$Molina Fernández$666000000$mteresa@extra.es$12001$21/08/1982"
    ];

    const mostrardata = document.getElementById("mostrardata");
    let array_clase_usuario = recuperarLocalStorage();

    console.log(array_clase_usuario);

    let usuarios = limpiarArray(Usuarios);

    if (array_clase_usuario.length === 0) {
        usuarios.forEach(usuario => {
            array_clase_usuario.push(new Usuario(usuario[0], usuario[1], usuario[2], usuario[3], usuario[4], usuario[5], usuario[6], usuario[7]));
        });
        guardarLocalStorage(array_clase_usuario);
    }

    mostrarUsuarios(array_clase_usuario);
});

function limpiarArray(Usuarios) {
    return Usuarios.map(usuario => {
        let datos = usuario.split("$");
        let nombres = datos[0].split(" ");
        let nombre1 = nombres[0];
        let nombre2 = nombres.length > 1 ? nombres.slice(1).join(" ") : "";

        let apellidos = datos[1].split(" ");
        let apellido1 = apellidos[0];
        let apellido2 = apellidos.length > 1 ? apellidos.slice(1).join(" ") : "";

        return [nombre1, nombre2, apellido1, apellido2, datos[2], datos[3], datos[4], datos[5]];
    });
}

function generarNombre(nombre1, nombre2, apellido1, apellido2) {
    let primeraletra = nombre1.charAt(0);
    let tresultimasletras = apellido1.slice(-3);
    let longitud = nombre1.length + nombre2.length + apellido1.length + apellido2.length;

    return primeraletra + tresultimasletras + longitud;
}

function generarClave(nombre1) {
    let numero = parseInt((Math.random() + 1) * 1000);
    return nombre1.toUpperCase() + numero;
}

function validarFecha(fecha) {
    if (!(fecha instanceof Date)) {
        throw new Error("La fecha no es un objeto Date: " + fecha);
    }

    let ahora = new Date();
    let edad = ahora.getFullYear() - fecha.getFullYear();
    let mes = ahora.getMonth() - fecha.getMonth();

    if (mes < 0 || (mes === 0 && ahora.getDate() - fecha.getDate() === 0)) {
        edad--;
    }

    return edad >= 18 && fecha.getDay() === 1;
}

class Usuario {
    constructor(nombre1, nombre2, apellido1, apellido2, telefono, email, cp, fecha_nacimiento) {
        this.nombre1 = nombre1;
        this.nombre2 = nombre2;
        this.apellido1 = apellido1;
        this.apellido2 = apellido2;
        this.telefono = telefono;
        this.email = email;
        this.cp = cp;
        this.fecha_nacimiento = fecha_nacimiento;
    }

    get todosLosNombres() {
        return this.nombre1 + this.nombre2;
    }

    get todosLosApellidos() {
        return this.apellido1 + this.apellido2;
    }

    get clave() {
        return generarClave(this.nombre1);
    }

    get usuario() {
        return generarNombre(this.nombre1, this.nombre2, this.apellido1, this.apellido2);
    }

    get cumpleEnLunesyEsmayorDeEdad() {
        return validarFecha(new Date(this.fecha_nacimiento));
    }

    get info() {
        return `\n nombre: ${this.nombre1} \n segundo nombre: ${this.nombre2}`;
    }
}

function guardarLocalStorage(datos) {
    localStorage.setItem("datos", JSON.stringify(datos));
}

function recuperarLocalStorage() {
    let datos = JSON.parse(localStorage.getItem("datos")) || [];
    datos.forEach(usuario => {
        usuario.__proto__ = new Usuario();
    });

    return datos;
}

function mostrarUsuarios(usuarios) {
    const mostrardata = document.getElementById("mostrardata");
    let idusuario = 0;

    usuarios.forEach(usuario => {
        idusuario++;
        const div_usuario = document.createElement("div");
        div_usuario.id = idusuario;
        div_usuario.style.display = "flex";
        div_usuario.style.justifyContent = "space-between";
        div_usuario.style.border = "solid black 1px";
        div_usuario.style.margin = "10px";
        div_usuario.style.padding = "10px";

        const h2 = document.createElement("h2");
        const nombre1 = document.createElement("h3");
        const nombre2 = document.createElement("h3");
        const apellido1 = document.createElement("h4");
        const apellido2 = document.createElement("h4");
        const telefono = document.createElement("p");
        const email = document.createElement("p");
        const cp = document.createElement("p");
        const fecha = document.createElement("p");

        h2.textContent = "Usuario: " + idusuario;
        nombre1.textContent = usuario.nombre1;
        nombre2.textContent = usuario.nombre2;
        apellido1.textContent = usuario.apellido1;
        apellido2.textContent = usuario.apellido2;
        telefono.textContent = "tlf: " + usuario.telefono;
        email.textContent = "email: " + usuario.email;
        cp.textContent = "cp: " + usuario.cp;
        fecha.textContent = "fecha de nacimiento: " + usuario.fecha_nacimiento;

        div_usuario.appendChild(h2);
        div_usuario.appendChild(nombre1);
        div_usuario.appendChild(nombre2);
        div_usuario.appendChild(apellido1);
        div_usuario.appendChild(apellido2);
        div_usuario.appendChild(telefono);
        div_usuario.appendChild(email);
        div_usuario.appendChild(cp);
        div_usuario.appendChild(fecha);

        mostrardata.appendChild(div_usuario);
    });
}

Alarma

class Alarma {
    constructor(etiqueta, hora, minutos, repetir, dias = []) {
        this.etiqueta = etiqueta;
        this.hora = hora;
        this.minutos = minutos;
        this.repetir = repetir;
        this.lunes = dias.includes(1);
        this.martes = dias.includes(2);
        this.miercoles = dias.includes(3);
        this.jueves = dias.includes(4);
        this.viernes = dias.includes(5);
        this.activa = true;
    }

    sonar() {
        return `Sonando alarma ${this.etiqueta} programada a las ${this.hora.toString().padStart(2, '0')}:${this.minutos.toString().padStart(2, '0')}`;
    }

    getDiasRepeticion() {
        const dias = [];
        if (this.lunes) dias.push("Lunes");
        if (this.martes) dias.push("Martes");
        if (this.miercoles) dias.push("Miércoles");
        if (this.jueves) dias.push("Jueves");
        if (this.viernes) dias.push("Viernes");
        return dias;
    }
}

let alarmas = [];

const fechaDisplay = document.getElementById('fecha');
const horaDisplay = document.getElementById('hora');
const formAlarma = document.getElementById('formAlarma');
const etiquetaInput = document.getElementById('etiqueta');
const horaAlarmaInput = document.getElementById('horaAlarma');
const repetirCheckbox = document.getElementById('repetir');
const diasSemanaDiv = document.getElementById('diasSemana');
const alarmasLista = document.getElementById('alarmasLista');

repetirCheckbox.addEventListener('change', () => {
    diasSemanaDiv.style.display = repetirCheckbox.checked ? 'grid' : 'none';
});

diasSemanaDiv.style.display = 'none';

function formatearFecha(fecha) {
    const opciones = { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' };
    return fecha.toLocaleDateString('es-ES', opciones);
}

function actualizarHora() {
    const ahora = new Date();
    fechaDisplay.textContent = formatearFecha(ahora);
    horaDisplay.textContent = ahora.toLocaleTimeString('es-ES');
}

setInterval(actualizarHora, 1000);
actualizarHora();

setInterval(comprobarAlarmas, 1000);

function comprobarAlarmas() {
    const ahora = new Date();
    const diaActual = ahora.getDay();
    const horaActual = ahora.getHours();
    const minutoActual = ahora.getMinutes();

    alarmas.forEach(alarma => {
        if (!alarma.activa) return;
        if (parseInt(alarma.hora) === horaActual && parseInt(alarma.minutos) === minutoActual) {
            if (alarma.repetir) {
                if (diaActual === 0 || diaActual === 6) return;
                const diaAlarma = diaActual;
                if ((diaAlarma === 1 && alarma.lunes) || (diaAlarma === 2 && alarma.martes) ||
                    (diaAlarma === 3 && alarma.miercoles) || (diaAlarma === 4 && alarma.jueves) ||
                    (diaAlarma === 5 && alarma.viernes)) {
                    alert(alarma.sonar());
                }
            } else {
                alert(alarma.sonar());
            }
        }
    });
}

formAlarma.addEventListener('submit', (e) => {
    e.preventDefault();

    const etiqueta = etiquetaInput.value;
    const horaCompleta = horaAlarmaInput.value;
    const [hora, minutos] = horaCompleta.split(':');
    const repetir = repetirCheckbox.checked;

    let dias = [];
    if (repetir) {
        const checkboxes = document.querySelectorAll('.dia:checked');
        dias = Array.from(checkboxes).map(cb => parseInt(cb.value));
    }

    const alarma = new Alarma(etiqueta, hora, minutos, repetir, dias);
    alarmas.push(alarma);

    actualizarListaAlarmas();

    formAlarma.reset();
    diasSemanaDiv.style.display = 'none';
});

function actualizarListaAlarmas() {
    while (alarmasLista.firstChild) {
        alarmasLista.removeChild(alarmasLista.firstChild);
    }

    if (alarmas.length === 0) {
        const mensaje = document.createElement('div');
        mensaje.classList.add('empty-message');
        mensaje.textContent = 'No hay alarmas programadas';
        alarmasLista.appendChild(mensaje);
        return;
    }

    alarmas.forEach((alarma, index) => {
        const alarmaItem = document.createElement('div');
        alarmaItem.classList.add('alarma-item');
        if (!alarma.activa) alarmaItem.classList.add('alarma-inactiva');

        const etiquetaDiv = document.createElement('div');
        etiquetaDiv.classList.add('alarma-etiqueta');
        etiquetaDiv.textContent = alarma.etiqueta;

        const horaDiv = document.createElement('div');
        horaDiv.classList.add('alarma-hora');
        horaDiv.textContent = `Hora: ${alarma.hora.padStart(2, '0')}:${alarma.minutos.padStart(2, '0')}`;

        alarmaItem.appendChild(etiquetaDiv);
        alarmaItem.appendChild(horaDiv);

        if (alarma.repetir) {
            const diasDiv = document.createElement('div');
            diasDiv.classList.add('alarma-dias');
            diasDiv.textContent = `Días: ${alarma.getDiasRepeticion().join(', ') || 'Ninguno'}`;
            alarmaItem.appendChild(diasDiv);
        }

        const accionesDiv = document.createElement('div');
        accionesDiv.classList.add('alarma-actions');

        const btnEliminar = document.createElement('button');
        btnEliminar.classList.add('btn-eliminar');
        btnEliminar.dataset.index = index;
        btnEliminar.textContent = 'Eliminar';
        btnEliminar.addEventListener('click', () => {
            alarmas.splice(index, 1);
            actualizarListaAlarmas();
        });

        const btnEstado = document.createElement('button');
        btnEstado.dataset.index = index;
        if (alarma.activa) {
            btnEstado.classList.add('btn-desactivar');
            btnEstado.textContent = 'Desactivar';
            btnEstado.addEventListener('click', () => {
                alarmas[index].activa = false;
                actualizarListaAlarmas();
            });
        } else {
            btnEstado.classList.add('btn-activar');
            btnEstado.textContent = 'Activar';
            btnEstado.addEventListener('click', () => {
                alarmas[index].activa = true;
                actualizarListaAlarmas();
            });
        }

        accionesDiv.appendChild(btnEliminar);
        accionesDiv.appendChild(btnEstado);

        alarmaItem.appendChild(accionesDiv);
        alarmasLista.appendChild(alarmaItem);
    });
}

actualizarListaAlarmas();

Carrito (parcialmente)

var array_productos = [];

function cesta(id) {
    const color = document.getElementById("color" + id);
    const modelo = document.getElementById("modelo" + id);
    const descripcion = document.getElementById("descripcion" + id);
    const precio = document.getElementById("precio" + id);

    console.log("info:", modelo.textContent, color.value, descripcion.textContent, precio.textContent);

    let crearproducto = true;

    array_productos.forEach(producto => {
        if (producto.modelo === modelo.textContent) {
            producto.cantidad++;
            crearproducto = false;
            guardarLocalStorage(array_productos);
        }
    });

    if (crearproducto) {
        const producto = new Producto(modelo.textContent, color.textContent, descripcion.textContent, parseInt(precio.textContent));
        array_productos.push(producto);
        guardarLocalStorage(array_productos);
    }
    actualizarCantidad();
}

class Producto {
    cantidad = 0;

    constructor(modelo, color, descripcion, precio) {
        this.modelo = modelo;
        this.color = color;
        this.descripcion = descripcion;
        this.precio = precio;
        this.cantidad++;
    }

    toString() {
        return `Modelo: ${this.modelo}\nColor: ${this.color}\nDescripción: ${this.descripcion}\nPrecio: ${this.precio}`;
    }
}

function guardarLocalStorage(productos) {
    localStorage.setItem("productos", JSON.stringify(productos));
}

function recuperarLocalStorage() {
    let productosjson = localStorage.getItem("productos");
    let productos = [];
    if (!(productosjson === null)) {
        productos = JSON.parse(productosjson);
        productos.forEach(producto => {
            producto.__proto__ = new Producto();
        });
        return productos;
    }
}

function actualizarCantidad() {
    const n_articulos = document.getElementById("n_articulos");
    let cantidad = 0;
    array_productos.forEach(producto => {
        cantidad += producto.cantidad;
    });

    n_articulos.textContent = cantidad;
}

function mostrarProductos(productos) {
    const div_productos = document.getElementById("productos");

    while (div_productos.firstChild) {
        div_productos.removeChild(div_productos.firstChild);
    }

    const precio_total = document.createElement("p");
    let precio_total_a_pagar = 0;

    productos.forEach(producto => {
        const div = document.createElement("div");
        const cantidad = document.createElement("span");
        cantidad.textContent = producto.cantidad;

        const modeloP = document.createElement("p");
        modeloP.textContent = `Modelo: ${producto.modelo}`;

        const colorP = document.createElement("p");
        colorP.textContent = `Color: ${producto.color}`;

        const descripcionP = document.createElement("p");
        descripcionP.textContent = `Descripción: ${producto.descripcion}`;

        const precioP = document.createElement("p");
        precioP.textContent = `Precio: ${producto.precio}`;

        const cantidadLabel = document.createElement("p");
        cantidadLabel.textContent = "Cantidad: ";
        cantidadLabel.appendChild(cantidad);

        const boton_eliminar = document.createElement("button");
        boton_eliminar.textContent = "Eliminar";

        const boton_mas = document.createElement("button");
        boton_mas.textContent = "Más";

        const boton_menos = document.createElement("button");
        boton_menos.textContent = "Menos";

        div.appendChild(modeloP);
        div.appendChild(colorP);
        div.appendChild(descripcionP);
        div.appendChild(precioP);
        div.appendChild(cantidadLabel);
        div.appendChild(boton_mas);
        div.appendChild(boton_menos);
        div.appendChild(boton_eliminar);

        boton_eliminar.addEventListener("click", function () {
            const indice = array_productos.findIndex(element => element.modelo === producto.modelo);
            if (indice !== -1) {
                array_productos.splice(indice, 1);
            }
            div_productos.removeChild(div);
            guardarLocalStorage(array_productos);
        });

        boton_mas.addEventListener("click", function () {
            array_productos.forEach(element => {
                if (element.modelo === producto.modelo) {
                    element.cantidad++;
                }
            });
            cantidad.textContent++;
            guardarLocalStorage(array_productos);
        });

        boton_menos.addEventListener("click", function () {
            array_productos.forEach(element => {
                if (element.modelo === producto.modelo) {
                    element.cantidad--;
                }
            });
            cantidad.textContent--;
            guardarLocalStorage(array_productos);
        });

        precio_total_a_pagar += producto.precio * producto.cantidad;
        div_productos.appendChild(div);
    });

    precio_total.textContent = `Total a pagar: ${precio_total_a_pagar}`;
    div_productos.appendChild(precio_total);
}