# data[].attributes.headline
¡Bienvenido a mi Portafolio Estudiantil!

# data[].attributes.subject
¡Bienvenido a mi Portafolio Estudiantil!

# data[].attributes.body
Mi nombre es Emily Dayana Lagos Godoy con número de cuenta 32411194. En este espacio he recopilado algunos de mis trabajos más importantes del curso, incluyendo la Tarea 1, el Laboratorio 3, el primer avance de mi proyecto y el Laboratorio 6. Cada uno refleja mi esfuerzo, aprendizaje y evolución a lo largo del semestre.

Más que una simple colección de actividades, este portafolio muestra los retos que he enfrentado, las habilidades que he desarrollado y todo lo que he aprendido en el camino.

¡Gracias por visitarlo!

# data[].attributes.body
Tarea 1 desarrollada completa con todos los incisos requeridos.

# data[].attributes.attachment_link.readable_text
// Nombre: Emily Dayana Lagos Godoy
// N��mero de cuenta: 32411194

#include <iostream>
using namespace std;

int main() {
    // a. Correcci��n del if con TRUE y punto y coma
    bool repiteClase = true;
    if (repiteClase)
        cout << "Recuerde que las tareas no son iguales" << endl;
    else
        cout << "Para usted todas las tareas son nuevas" << endl;

    // b. Correcci��n del if con punto y coma extra
    int asistencias = 5;
    if (asistencias >= 6)
        cout << "No falte a clases. Est�� cerca del l��mite de inasistencias" << endl;
    else
        cout << "Puede faltar, pero tenga cuidado" << endl;

    // c. Correcci��n del operador ternario
    bool importante = true;
    cout << (importante ? "Para nada" : "Claro que s��") << " es importante asistir los viernes a clase!" << endl;

    // d. Correcci��n del bucle while con if mal estructurado
    double x = 1.1, total = 0.0;
    while (x <= 65.0) {
        if (x <= 65) {
            cout << "Con esta nota... aprobar��a la clase" << endl;
        }
        total += x;
        x = x * 1.5;
    }

    // e. Correcci��n de arreglos con ��ndices fuera de rango y tipos incorrectos
    int proyecto[3] = {1, 2, 3};
    double puntos_proyecto[3];
    puntos_proyecto[0] = 1.5;
    puntos_proyecto[1] = 1.5;
    puntos_proyecto[2] = 17.0;

    cout << "La nota total del proyecto, considerando las tres entregas es "
         << proyecto[0] + proyecto[1] + puntos_proyecto[2] << endl;

    // f. Correcci��n del while con else mal ubicado
    int nota = 70;
    while (nota > 65) {
        cout << nota << " ��� aprobado!" << endl;
        nota--;
    }
    if (nota <= 65) {
        cout << "Reprobado!" << endl;
    }
    
    return 0;
}

# data[].attributes.body
Laboratorio 3 desarrollado con los incisos 11 - 15 completos

# data[].attributes.attachment_link.readable_text
//Nombre: Emily Dayana Lagos Godoy
//Numero de cuenta: 32411194

#include <iostream>
#include <string>

using namespace std;

class PRODUCTO {
public:
    int p_id;
    string p_nombre;
    double p_precio;
    string p_fechaElaboracion;

    PRODUCTO(int id = 0, string nombre = "Producto", double precio = 0.0, string fecha = "20250207") {
        p_id = id;
        p_nombre = nombre;
        p_precio = precio;
        p_fechaElaboracion = fecha;
    }

    void getPrecioMinimo() {
        if (getPrecio() < 15) {
            cout << "Precio menor que el minimo! " << endl;
        } else {
            cout << "Precio correcto!" << endl;
        }
    }

    void setPrecioConDescuento(double ajuste, double descuento = 0.0) {
        if(descuento == 0){
            p_precio += ajuste;
        }else{
            p_precio += ajuste;
            p_precio -= descuento;
        }

        cout << "El Precio es: "<<p_precio << endl;
    }

    void setId(int nuevoId) { p_id = nuevoId; }
    void setNombre(string nuevoNombre) { p_nombre = nuevoNombre; }
    void setPrecio(double nuevoPrecio) { p_precio = nuevoPrecio; }
    void setFechaElaboracion(string nuevaFecha) { p_fechaElaboracion = nuevaFecha; }

    int getId() { return p_id; }
    string getNombre() { return p_nombre; }
    double getPrecio() { return p_precio; }
    string getFechaElaboracion() { return p_fechaElaboracion; }

    void getInfo() {
        cout << "ID: " << p_id << endl;
        cout << "Nombre: " << p_nombre << endl;
        cout << "Precio: " << p_precio << endl;
        cout << "Fecha de Elaboraci��n: " << p_fechaElaboracion << endl;
    }

    ~PRODUCTO() {}
};

class PAN : public PRODUCTO {
private:
    string tipo_harina;
public:
    PAN(string harina = "Trigo", int id = 100, string nombre = "Pan de Ma��z", double precio = 4.0, string fecha = "20250207")
        : PRODUCTO(id, nombre, precio, fecha), tipo_harina(harina) {}

    string getTipoHarina() { return tipo_harina; }
    void getInfoPan() {
        getInfo();
        cout << "Tipo de Harina: " << tipo_harina << endl;
    }

    ~PAN() {}
};

class DULCE: public PRODUCTO {
private:
    bool tieneChocolate;
public:

    DULCE(int d_id = 3000, string d_nom = "Dulce", double d_precio = 100, string d_fechaexp = "20250207", bool Choco = false)
        : PRODUCTO(d_id, d_nom, d_precio, d_fechaexp), tieneChocolate(Choco) {
        if (tieneChocolate) {
            p_precio += 25.0;
        }
    }

    void setChoco(bool chocolate) {
        tieneChocolate = chocolate;
        if (tieneChocolate) {
            p_precio += 25.0;
        }
    }

    bool getChoco() {
        return tieneChocolate;
    }

    void getInfoDulce() {
        cout << "Dulce: " << p_nombre << "\t Precio: " << p_precio << "\t Contiene Chocolate: " 
             << (tieneChocolate ? "Si" : "No") << std::endl;
    }

    ~DULCE() {}
};

int main() {

    PRODUCTO prodBase(1001, "Pan Blanco", 58.00, "20250207");
    prodBase.getInfo();

    PAN panBase("Trigo", 100, "Pan de Ma��z", 4.0, "20250207");
    panBase.getInfoPan();

    panBase.getPrecioMinimo();

    prodBase.setPrecioConDescuento(17.51, 1.28);

    DULCE dulceConChocolate(3000, "Dulce con Chocolate", 100.0, "20250207", true);
    dulceConChocolate.getInfoDulce();

    DULCE dulceSinChocolate(3001, "Dulce sin Chocolate", 100.0, "20250207", false);
    dulceSinChocolate.getInfoDulce();

    return 0;
}

# data[].attributes.body
Primer Entrega del Proyecto desarrollada con todo lo pedido.

# data[].attributes.body
Laboratorio desarrollado completo y con todo lo requerido.

# data[].attributes.attachment_link.readable_text
//Emily Lagos - 32411194
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
#include <string>
#include <list>

using std::cout;
using std::cerr;
using std::cin;
using std::endl;
using std::fixed;
using std::ios;
using std::left;
using std::right;
using std::showpoint;
using std::setw;
using std::setprecision;
using std::string;

// Clase para representar un Alumno
class Alumno {
private:
    int numCuenta;
    string nombre;
    int edad;
    bool genero; // 0=M, 1=F
    double promedio;

public:
    Alumno(int cuenta, string nom, int ed, bool gen, double prom)
        : numCuenta(cuenta), nombre(nom), edad(ed), genero(gen), promedio(prom) {}

    // M�todos get y set
    int getNumCuenta() const { return numCuenta; }
    string getNombre() const { return nombre; }
    int getEdad() const { return edad; }
    bool getGenero() const { return genero; }
    double getPromedio() const { return promedio; }

    void setNumCuenta(int cuenta) { numCuenta = cuenta; }
    void setNombre(string nom) { nombre = nom; }
    void setEdad(int ed) { edad = ed; }
    void setGenero(bool gen) { genero = gen; }
    void setPromedio(double prom) { promedio = prom; }

    // Mostrar los detalles del alumno
    void mostrarRegistro() const {
        cout << setw(10) << left << numCuenta
             << setw(20) << left << nombre
             << setw(4) << right << edad
             << setw(5) << right << (genero ? "F" : "M")
             << setw(8) << setprecision(2) << right << promedio << endl;
    }
};

void impresion(int, string, int, bool, double);
void titulo();

// Funci�n para reflexionar sobre las modificaciones de CRUD
/*
Reflexi�n:
Si se agregara un nuevo atributo a la clase `Alumno`, por ejemplo, un campo de `direccion`, las operaciones de CRUD deber�an modificarse para reflejar este cambio. En particular:
1. **Crear**: Se deber�a agregar un nuevo campo para ingresar la direcci�n del alumno al registrar un nuevo alumno.
2. **Leer**: Se deber�a modificar la l�gica de lectura de archivos para incluir la direcci�n al mostrar los datos del alumno.
3. **Actualizar**: Si se implementa la opci�n de modificar el registro, se debe permitir la actualizaci�n del atributo `direccion` para el alumno.
4. **Eliminar**: No es necesario cambiar la operaci�n de eliminaci�n, ya que la eliminaci�n de un alumno no depende de los atributos espec�ficos.
5. **Archivo**: Los archivos donde se guardan los registros de los alumnos tambi�n deben actualizarse para incluir la nueva informaci�n.

El c�digo ya implementado ser�a sencillo de adaptar para reflejar este cambio. Se agregar�an las funciones get/set para el nuevo atributo, y se modificar�an las funciones de entrada/salida de archivos, asegur�ndose de que el archivo est� preparado para almacenar el nuevo dato.
*/

int main() {
    cout << fixed << showpoint;

    int opcion;
    Alumno alumno1(12345, "Juan P�rez", 20, true, 75.5);
    std::ofstream Bitacora{"log.txt", ios::app};

    cout << "Laboratorio # 6 " << endl;
    cout << "1. Leer todos los registros " << endl;
    cout << "2. Agregar un registro " << endl;
    cout << "3. Consulta de un registro " << endl;
    cout << "4. Reporte de aprobados y reprobados " << endl;
    cout << "5. Reporte en archivo de aprobados" << endl;
    cout << "6. Top 5 Estudiantes! " << endl;
    cout << "7. Calculo de promedios con puntos extras" << endl;
    cout << "8. Eliminar registros" << endl;
    cout << "9. Actualizar registros" << endl;
    cout << "0. Salir " << endl;
    cout << "Su opcion: ";
    cin >> opcion;

    while (opcion != 0) {
        switch (opcion) {
            case 1: { // Leer todos los registros
                std::ifstream archivoEntrada {"InfoGrad.txt", ios::in};
                if (!archivoEntrada) {
                    cerr << "No se puede abrir el archivo!" << endl;
                    return 1;
                }
                cout << "1. Leer todos los registros! " << endl;
                titulo();

                int numCuenta;
                string nombre;
                int edad;
                bool genero;
                double promedio;
                while (archivoEntrada >> numCuenta >> nombre >> edad >> genero >> promedio) {
                    impresion(numCuenta, nombre, edad, genero, promedio);
                }
                archivoEntrada.close();
            }
            break;

            case 2: { // Agregar un registro
                cout << "2. Agregar un registro " << endl;
                std::ofstream archivoSalida {"InfoGrad.txt", ios::app};

                if (!archivoSalida) {
                    cerr << "No se puede abrir el archivo para escritura!" << endl;
                    break;
                }

                int numCuenta;
                string nombre;
                int edad;
                bool genero;
                double promedio;

                cout << "Ingrese los datos del nuevo estudiante:" << endl;
                cout << "Numero de cuenta: ";
                cin >> numCuenta;
                cout << "Nombre: ";
                cin >> nombre;
                cout << "Edad: ";
                cin >> edad;
                cout << "Genero (0=M, 1=F): ";
                cin >> genero;
                cout << "Promedio: ";
                cin >> promedio;

                // Agregar el nuevo registro al archivo
                archivoSalida << numCuenta << " " << nombre << " " << edad << " " << genero << " " << promedio << endl;
                cout << "Registro agregado exitosamente!" << endl;

                archivoSalida.close();
            }
            break;

            // Otros casos aqu�...

        }
        cout << "Laboratorio # 6 " << endl;
        cout << "1. Leer todos los registros " << endl;
        cout << "2. Agregar un registro " << endl;
        cout << "3. Consulta de un registro " << endl;
        cout << "4. Reporte de aprobados y reprobados " << endl;
        cout << "5. Reporte en archivo de aprobados" << endl;
        cout << "6. Top 5 Estudiantes! " << endl;
        cout << "7. Calculo de promedios con puntos extras" << endl;
        cout << "8. Eliminar registros" << endl;
        cout << "9. Actualizar registros" << endl;
        cout << "0. Salir " << endl;
        cout << "Su opcion: ";
        cin >> opcion;
    }

    Bitacora.close();
    return 0;
}

void impresion(int cuentaImprimir, string nombreImprimir, int edadImprimir, bool genImprimir, double promedioImprimir ) {
    cout << setw(10) << left << cuentaImprimir
         << setw(20) << left << nombreImprimir
         << setw(4) << right << edadImprimir
         << setw(5) << right << (genImprimir ? "F" : "M")
         << setw(8) << setprecision(2) << right << promedioImprimir << endl;
}

void titulo() {
    cout << setw(10) << left << "CUENTA"
         << setw(20) << left << "NOMBRE"
         << setw(4) << right << "EDAD"
         << setw(5) << right << "F/M"
         << setw(8) << setprecision(2) << right << "PROM" << endl;
}



# data[].attributes.headline
Respuesta a preguntas sobre la actividad

# data[].attributes.subject
Respuesta a preguntas sobre la actividad

# data[].attributes.headline
Respuesta a preguntas sobre la actividad

# data[].attributes.subject
Respuesta a preguntas sobre la actividad

# data[].attributes.headline
Respuesta a preguntas sobre la actividad

# data[].attributes.subject
Respuesta a preguntas sobre la actividad

# data[].attributes.headline
Respuesta a preguntas sobre la actividad

# data[].attributes.subject
Respuesta a preguntas sobre la actividad