Recientemente, una profesora de análisis en AIEP nos dio un pequeño taller donde nos pedía resolver una sencilla tarea, el reto de esto no era la lógica del problema sino más bien el tener la libertad de desarrollarlo en cualquier lenguaje y plataforma de programación.

En mi caso decidí programarlo como Multiplataforma con la Librería QT y C++ de esta forma aproveche de realizar un repaso el lenguaje.

Distribuir salas a diferentes cursos

El problema: Les comento que la Sra. Juana López va a emprender una pequeña empresa destinada a capacitar a personas trabajadoras en empresas PYME. Cuenta con las autorizaciones necesarias para dictar cursos con código SENCE a empresas, quienes enviaran a sus trabajadores a capacitarse en diferentes áreas.

Para llevar a cabo esta empresa arrendó un edificio para realizar las capacitaciones en forma presencial. El edificio tiene dos pisos y cada piso tiene cinco salas con diferentes capacidades, tres de las salas tienen 10 computadores cada una. Cada trimestre se dictará  entre 8 a 10 cursos de Lunes a Viernes desde las 19:00 horas a 21:30.

Se solicita que realice un programa computacional que sea capaz de “Distribuir salas a diferentes cursos”, teniendo presente la cantidad de inscritos y si necesitan computadores para las clases.

  • Para el curso que no se encuentre disponibilidad debe enviar un mensaje “No se encontró sala disponible”.
  • Debe distribuir de la mejor manera posible.
  • Para este taller se solicita además que proponga acciones viables para desarrollar habilidades de proactividad.

Se entrega la relación de salas con su respectiva capacidad.

Piso 1:

  • Sala 1: Capacidad 10 Personas, tiene 10 computadores.
  • Sala 2: Capacidad 10 Personas, tiene 10 computadores.
  • Sala 3: Capacidad 10 Personas, tiene 10 computadores.
  • Sala 4: Capacidad 20 Personas.
  • Sala 5: Capacidad 40 Personas.

Piso 2:

  • Sala 1: Capacidad 60 Personas.
  • Sala 2: Capacidad 20 Personas.
  • Sala 3: Capacidad 10 Personas.
  • Sala 4: Capacidad 15 Personas.
  • Sala 5: Capacidad 15 Personas.

La Lógica

Para distribuir salas a diferentes cursos debemos ante todo pensar cual es la que tiene una cantidad de cupos mas adecuada y si se requiere o no computador. En caso de estar ocupada, basta buscar la siguiente sala con la capacidad mas acorde al curso.

El problema es sencillo, ya que conocemos la cantidad exacta de salas, ademas conocemos la capacidad de cada una de ellas.

Si orientamos este problema a Objetos, podríamos crear un estado para cada sala, ya sea que este disponible o ocupada, ademas podríamos crear los estados, capacidad y si posee o no computadores.

Nuestra Clase quedaria similar a esto.

 

Distribuir salas a diferentes cursos

Clase Salas

Con esta clase literalmente seriamos capaz de poder distribuir x cursos en x salas, sin importar la capacidad de la sala o del curso siempre y cuando incluyamos un algoritmo de ordenamiento a nuestra lógica. Sin embargo, como dije en un principio, este taller es mucho mas simple de lo que parece y los requerimientos del profesor son bastante básicos, por lo cual tomaremos el camino corto y sencillo.

Para resolver este problema, dado que conocemos la cantidad de salas, el ordenamiento y capacidad de cada una de ellas, simplemente usaremos un filtro (IF).

Resolviendo el problema sin clases (Una manera mas simple)

Procederemos a desarrollar la solución para distribuir salas a diferentes cursos de la manera mas sencilla posible, sin siquiera usar clases adicionales, solo por medio de if y quizás un poco de recursividad.

Lo primero que debemos tener en mente es ordenar nuestras salas de mayor a menor, de tal manera que podamos crear un if progresivo de acuerdo al estado de cada una de ellas, dado que conocemos la cantidad de salas y su capacidad podemos hacerlo, en pseudocódigo se vería algo más o menos asi.

int sala5 = 40, sala6 = 60, sala7 = 20, sala8 = 10, sala10 = 15;

    if(inscritos <= sala8){
        if(sala8.estado == "Disponible") {
            alert("Sala Asignada", "Al curso \(curso) se le asigno la sala \(sala8), en el segundo piso.");
            return;
        }
    }
    if(inscritos <= sala10){
        if(sala10.estado == "Disponible") {
            alert("Sala Asignada", "Al curso \(curso) se le asigno la sala \(sala10), en el segundo piso.");
            return;
        } else if(sala9.estado == "Disponible") {
            alert("Sala Asignada", "Al curso \(curso) se le asigno la sala \(sala9), en el segundo piso.");
            return;
        }
        //No estan disponibles, pasamos.
    }
    if(inscritos <= sala7){
        if(sala7.estado == "Disponible") {
            alert("Sala Asignada", "Al curso \(curso) se le asigno la sala \(sala7), en el segundo piso.");
            return;
        }
        } if(sala4.estado == "Disponible") {
            alert("Sala Asignada", "Al curso \(curso) se le asigno la sala \(sala4), en el primer piso.");
            return;
        }
        //No estan disponibles, pasamos.
    }
    if (inscritos <= sala5) {
        if(sala5.estado == "Disponible") {
            alert("Sala Asignada", "Al curso \(curso) se le asigno la sala \(sala5), en el primer piso.");
            return;
        }
    }
    if (inscritos <= sala6) {
        if(sala6.estado == "Disponible") {
            alert("Sala Asignada", "Al curso \(curso) se le asigno la sala \(sala6), en el segundo piso.");
            return;
        }
    }

Suponiendo que «inscritos«, es el numero de alumnos que tiene el curso y que «curso«, es el nombre del curso ingresado.

si analisamos el código anterior para distribuir salas a diferentes cursos escrito en pseudolenguaje o pseudocódigo nos daremos cuentas que no están incluidas las salas 1, 2 y 3 ya que están las reservaremos solo para cuando el usuario requiera computadores y para ello nos puede servir una función u otro simple if como el siguiente:

if(sala.requierePC){
        //Asignar salas del 1 al 3
    } else {
        //Asignar otras salas
    }

En teoria ya tenemos resuelta la lógica del problema, solo nos queda almacenar los resultados en la base de datos y obviamente ordenar mejor el código ademas de validar los campos.

Completando y resolviendo distribuir salas a diferentes cursos en QT con C++

Para distribuir salas a diferentes cursos en QT, utilizaremos una base de datos SQLite, su portabilidad y compatibilidad en multiplataformas nos da una ventaja para este problema, ademas la cantidad de registros ingresados sera tan minima que no es recomendable usar base de datos mas grandes o que trabajen por medio de cliente servidor.

Nombre del Ejercicio: Distribuir salas a diferentes cursos
Nombre del proyecto: Salas.pro

Cabeceras

Suponiendo nuestro proyecto se llama salas, lo primero que haremos sera agregar la siguiente linea en Salas.pro de QT

QT       += sql

en nuestra cabecera mainwindow.h incluimos

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>

y como metodo privado en nuestra misma cabecera mainwindow.h

QSqlDatabase db;
    QString cadenaConexion;

    void abrirDB();
    void cerrarDB();
    void guardar(QString nombre_curso, qint8 inscritos, qint8 id);

Estas son las declaraciones que utilizaremos mas adelante para conectarnos y trabajar con nuestra base de datos SQLite.

Formulario

Para el formulario y distribuir salas a diferentes cursos, necesitaremos crear un «Line Edit» por cada sala, un «Check Box» para comprobar si requiere o no un computador, un «Spin Box» para que se ingrese la cantidad de inscritos, el botón «Asignar Salas» un «Combo Box» para limpiar las salas y por último «Line Edit» donde ira el nombre del curso.

Mi Formulario quedo similar a esto.

Formulario Para distribución de cursos en salas

Formulario Para distribución de cursos en salas

Los label y el estilo, se lo dan ustedes a gusto. el nombre de los objetos principales que yo utilizare serán los siguientes.

Line Edit Salas para distribuir salas a diferentes cursos:

  • txtSala1
  • txtSala2
  • txtSala3
  • txtSala4
  • txtSala5
  • txtSala6
  • txtSala7
  • txtSala8
  • txtSala9
  • txtSala10

Spin Box de Inscritos

  • sbInscritos

Line Edit del Nombre del Curso

  • txtNombreCurso

Check Box de «Requiere Computadores»

  • cbComputadores

Boston Asignar:

  • btnAsignar

Combo Box para Vaciar Salas

  • cbSalas

Crear la base de datos

Para crear la base de datos y distribuir salas a diferentes cursos, como mencione anteriormente, utilizare SQLite y crearemos las tablas y su contenido sobre la marcha, esto quiere decir, que cuando se ejecute el programa por primera vez, creara la base de datos en la carpeta indicada e insertara datos por defecto.

en nuestro main.cpp incluiremos el siguiente código.

    /*************** CREANDO LA DB ****************/
    QSqlDatabase db;
    QString cadenaConexion;
#ifdef Q_OS_LINUX
    //cadenaConexion(QDir::home().path());
    //cadenaConexion.append(QDir::separator()).append("CAVeS.db");
    //cadenaConexion = QDir::toNativeSeparators(cadenaConexion);
    //cadenaConexion = cadenaConexion;
#endif

#ifdef Q_OS_MAC
    cadenaConexion = "salas.db";
    cadenaConexion = QString::fromLatin1("%1/../Resources/%2")
            .arg(QCoreApplication::applicationDirPath(), cadenaConexion);
#else
    cadenaConexion = "salas.db";
#endif

    db = QSqlDatabase::addDatabase( "QSQLITE" );
    db.setDatabaseName(cadenaConexion);

    if( !db.open() ) {
        qDebug() << db.lastError();
        return -1;
    } else qDebug() << "Conexión Creando Abierta";

    QSqlQuery query;

    query.prepare( "CREATE TABLE IF NOT EXISTS `salas` ("
                   "`id`	INTEGER NOT NULL UNIQUE,"
                   "`curso`	TEXT NOT NULL,"
                   "PRIMARY KEY(id)"
                   ");");
    if( !query.exec() ) {
        qDebug() << "Creando DB";
        qDebug() << query.lastError();
    }

    query.prepare( "INSERT OR IGNORE INTO salas (id, curso) VALUES (1, 'Analisis Sistema (8)');" );
    if( !query.exec() )
        qDebug() << query.lastError();

    query.prepare( "INSERT OR IGNORE INTO salas (id, curso) VALUES (2, 'Disponible');" );
    if( !query.exec() )
        qDebug() << query.lastError();

    query.prepare( "INSERT OR IGNORE INTO salas (id, curso) VALUES (3, 'Disponible');" );
    if( !query.exec() )
        qDebug() << query.lastError();

    query.prepare( "INSERT OR IGNORE INTO salas (id, curso) VALUES (4, 'Ingles III (18)');" );
    if( !query.exec() )
        qDebug() << query.lastError();

    query.prepare( "INSERT OR IGNORE INTO salas (id, curso) VALUES (5, 'Disponible');" );
    if( !query.exec() )
        qDebug() << query.lastError();

    query.prepare( "INSERT OR IGNORE INTO salas (id, curso) VALUES (6, 'Disponible');" );
    if( !query.exec() )
        qDebug() << query.lastError();

    query.prepare( "INSERT OR IGNORE INTO salas (id, curso) VALUES (7, 'Disponible');" );
    if( !query.exec() )
        qDebug() << query.lastError();

    query.prepare( "INSERT OR IGNORE INTO salas (id, curso) VALUES (8, 'Disponible');" );
    if( !query.exec() )
        qDebug() << query.lastError();

    query.prepare( "INSERT OR IGNORE INTO salas (id, curso) VALUES (9, 'Taller de Análisis (15)');" );
    if( !query.exec() )
        qDebug() << query.lastError();

    query.prepare( "INSERT OR IGNORE INTO salas (id, curso) VALUES (10, 'Disponible');" );
    if( !query.exec() )
        qDebug() << query.lastError();

    QString connection;
        connection = db.connectionName();
        db.close();
        db = QSqlDatabase();
        db.removeDatabase(connection);

    qDebug() << "Conexión Creando Finalizada";

Lo que estamos haciendo en el código anterior, es una conexión con SQLite, luego si la Tabla no existe, la creamos e insertamos datos.

La tabla es relativamente sencilla para distribuir salas a diferentes cursos solo nos interesa almacenar la información de que sala esta ocupada y que curso esta en ella. también se crean rutas predeterminadas para cada sistema operativo y en Windows se crea en la misma carpeta donde se ejecute el programa.

Source

En el main para distribuir salas a diferentes cursos, realizaremos 2 operaciones importantes: Lógica y conexión a la db

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QMessageBox"
#include "QDebug"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//Quitar Minimizar y Maximizar
//setWindowFlags(Qt::Dialog | Qt::WindowMinMaxButtonsHint);
/************ Cargando items de la db ***********/
if(!db.isOpen())
abrirDB(); //Abrimos la Base de datos
else qDebug() << "Salas, ya esta abierta";
QSqlQuery q;
q.prepare("SELECT * FROM salas");
if(!q.exec())
qDebug() << q.lastError();
QList<QString> lista_salas;
while (q.next()) {
QString sala = q.value(1).toString(); //1, es el indice de la columna (curso), 0 es ID
qDebug() << "esta " << sala;
lista_salas.push_back(sala);
}
if(db.isOpen()) cerrarDB();
/*for (int i = 0; i < lista_salas.size(); ++i) {
qDebug() << "Lista Indice " << i << "Contiene " << lista_salas[i];
}*/
/*********** Asignamos los valores *************/
ui->txtSala1->setText(lista_salas[0]);
ui->txtSala2->setText(lista_salas[1]);
ui->txtSala3->setText(lista_salas[2]);
ui->txtSala4->setText(lista_salas[3]);
ui->txtSala5->setText(lista_salas[4]);
ui->txtSala6->setText(lista_salas[5]);
ui->txtSala7->setText(lista_salas[6]);
ui->txtSala8->setText(lista_salas[7]);
ui->txtSala9->setText(lista_salas[8]);
ui->txtSala10->setText(lista_salas[9]);
qDebug() << "Cargando...";
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::abrirDB(){
//Obtener ruta de SQL
#ifdef Q_OS_LINUX
cadenaConexion = "salas.db";
#endif
#ifdef Q_OS_MAC
cadenaConexion = "salas.db";
cadenaConexion = QString::fromLatin1("%1/../Resources/%2")
.arg(QCoreApplication::applicationDirPath(), cadenaConexion);
#else
cadenaConexion = "salas.db";
#endif
//Obtener ruta de SQL
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(cadenaConexion);
if( !db.open() ) {
qDebug() << db.lastError(); //Mostramos un error
} else qDebug() << "Conexión salas Abierta";
}
void MainWindow::cerrarDB(){
QString connection;
connection = db.connectionName();
db.close();
db = QSqlDatabase();
db.removeDatabase(connection);
qDebug() << "Conexión salas Finalizada";
}
void MainWindow::guardar(QString curso, qint8 inscritos, qint8 id){
QString ins = QString::number(inscritos);
QString iden = QString::number(id);
QString nuevo_curso = curso + " (" + ins + ")";
QString consulta = QString::fromLatin1("UPDATE salas SET curso='%1' WHERE id=%2").arg(nuevo_curso, iden);
if(!db.isOpen())
abrirDB(); //Abrimos la Base de datos
else qDebug() << "Salas, ya esta abierta";
QSqlQuery q;
qDebug() << consulta;
q.prepare(consulta);
if(!q.exec())
qDebug() << q.lastError();
if(db.isOpen()) cerrarDB();
return;
}
void MainWindow::on_btnAsignar_clicked()
{
qint8 inscritos = ui->sbInscritos->value();
bool asignado = false;
if(ui->txtNombreCurso->text() == "") {
QMessageBox::information(NULL, "No puede tener campos vacios", "Por favor, complete los campos: \n\nNombre de Cursos");
return;
}
if(ui->sbInscritos->value() <= 0) {
QMessageBox::information(NULL, "No puede tener campos vacios", "Por favor, complete los campos: \n\nCantidad de inscritos");
return;
}
if(ui->cbComputadores->checkState()){
SalaConPc(asignado, inscritos);
} else {
SalaSinPc(asignado, inscritos);
}
}
void MainWindow::SalaConPc(bool asignado, qint8 inscritos){
//Buscamos una sala aun disponible, que posea computador
if(inscritos <= 10) {
if(ui->txtSala1->text() == "Disponible") {
ui->txtSala1->setText(ui->txtNombreCurso->text() + " (" + QString::number(inscritos) + ")");
QMessageBox::information(NULL, "Sala Asignada", "Al curso (" + ui->txtNombreCurso->text() + ") se le asigno la sala 1, en el primer piso.");
asignado = true;
guardar(ui->txtNombreCurso->text(), inscritos, 1);
return;
} else if(ui->txtSala2->text() == "Disponible") {
ui->txtSala2->setText(ui->txtNombreCurso->text() + " (" + QString::number(inscritos) + ")");
QMessageBox::information(NULL, "Sala Asignada", "Al curso (" + ui->txtNombreCurso->text() + ") se le asigno la sala 2, en el primer piso.");
asignado = true;
guardar(ui->txtNombreCurso->text(), inscritos, 2);
return;
} else if(ui->txtSala3->text() == "Disponible") {
ui->txtSala3->setText(ui->txtNombreCurso->text() + " (" + QString::number(inscritos) + ")");
QMessageBox::information(NULL, "Sala Asignada", "Al curso (" + ui->txtNombreCurso->text() + ") se le asigno la sala 3, en el primer piso.");
asignado = true;
guardar(ui->txtNombreCurso->text(), inscritos, 3);
return;
} else {
QMessageBox msgBox;
msgBox.setText("No hay salas de Computación Disponible.");
msgBox.setInformativeText("¿Desea una sala sin computadores?");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Cancel | QMessageBox::Ok);
msgBox.setDefaultButton(QMessageBox::Ok);
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Ok:
SalaSinPc(asignado, inscritos);
break;
case QMessageBox::Cancel:
QMessageBox::information(NULL, "Nada Asignado", "Al curso, no se le ha asignado ninguna sala.");
return;
break;
default:
// Ok, detengamonos
break;
}
}
} else {
QMessageBox msgBox;
msgBox.setText("No hay salas de Computación para tantos alumnos.");
msgBox.setInformativeText("¿Desea una sala sin computadores?");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Cancel | QMessageBox::Ok);
msgBox.setDefaultButton(QMessageBox::Ok);
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Ok:
SalaSinPc(asignado, inscritos);
break;
case QMessageBox::Cancel:
QMessageBox::information(NULL, "Nada Asignado", "Al curso, no se le ha asignado ninguna sala.");
return;
break;
default:
// Ok, detengamonos
break;
}
}
}
void MainWindow::SalaSinPc(bool asignado, qint8 inscritos){
qDebug() <<  QString::number(inscritos);
qint8 sala5 = 40, sala6 = 60, sala7 = 20, sala8 = 10, sala10 = 15;
if(inscritos <= sala8){
if(ui->txtSala8->text() == "Disponible" && !asignado) {
ui->txtSala8->setText(ui->txtNombreCurso->text() + " (" + QString::number(inscritos) + ")");
QMessageBox::information(NULL, "Sala Asignada", "Al curso (" + ui->txtNombreCurso->text() + ") se le asigno la sala 8, en el segundo piso.");
asignado = true;
guardar(ui->txtNombreCurso->text(), inscritos, 8);
return;
}
}
if(inscritos <= sala10){
if(ui->txtSala10->text() == "Disponible" && !asignado) {
ui->txtSala10->setText(ui->txtNombreCurso->text() + " (" + QString::number(inscritos) + ")");
QMessageBox::information(NULL, "Sala Asignada", "Al curso (" + ui->txtNombreCurso->text() + ") se le asigno la sala 10, en el segundo piso.");
asignado = true;
guardar(ui->txtNombreCurso->text(), inscritos, 10);
return;
} else if(ui->txtSala9->text() == "Disponible" && !asignado) {
ui->txtSala9->setText(ui->txtNombreCurso->text() + " (" + QString::number(inscritos) + ")");
QMessageBox::information(NULL, "Sala Asignada", "Al curso (" + ui->txtNombreCurso->text() + ") se le asigno la sala 9, en el segundo piso.");
asignado = true;
guardar(ui->txtNombreCurso->text(), inscritos, 9);
return;
}
//No estan disponibles, pasamos.
}
if(inscritos <= sala7){
if(ui->txtSala7->text() == "Disponible" && !asignado) {
ui->txtSala7->setText(ui->txtNombreCurso->text() + " (" + QString::number(inscritos) + ")");
QMessageBox::information(NULL, "Sala Asignada", "Al curso (" + ui->txtNombreCurso->text() + ") se le asigno la sala 7, en el segundo piso.");
asignado = true;
guardar(ui->txtNombreCurso->text(), inscritos, 7);
return;
} else if(ui->txtSala4->text() == "Disponible" && !asignado) {
ui->txtSala4->setText(ui->txtNombreCurso->text() + " (" + QString::number(inscritos) + ")");
QMessageBox::information(NULL, "Sala Asignada", "Al curso (" + ui->txtNombreCurso->text() + ") se le asigno la sala 4, en el primer piso.");
asignado = true;
guardar(ui->txtNombreCurso->text(), inscritos, 6);
return;
}
//No estan disponibles, pasamos.
}
if (inscritos <= sala5) {
if(ui->txtSala5->text() == "Disponible" && !asignado) {
ui->txtSala5->setText(ui->txtNombreCurso->text() + " (" + QString::number(inscritos) + ")");
QMessageBox::information(NULL, "Sala Asignada", "Al curso (" + ui->txtNombreCurso->text() + ") se le asigno la sala 5, en el primer piso.");
asignado = true;
guardar(ui->txtNombreCurso->text(), inscritos, 5);
return;
}
}
if (inscritos <= sala6) {
if(ui->txtSala6->text() == "Disponible" && !asignado) {
ui->txtSala6->setText(ui->txtNombreCurso->text() + " (" + QString::number(inscritos) + ")");
QMessageBox::information(NULL, "Sala Asignada", "Al curso (" + ui->txtNombreCurso->text() + ") se le asigno la sala 6, en el segundo piso.");
asignado = true;
guardar(ui->txtNombreCurso->text(), inscritos, 6);
return;
}
}
if(!asignado){
if(inscritos <= 10){
//QDebug << "No quedan salas libres y son menos de 10 alumnos";
//Verificar las de computación
if(ui->txtSala1->text() == "Disponible") {
QMessageBox msgBox;
msgBox.setText("No hay salas Sin computadores disponible");
msgBox.setInformativeText("¿Desea usar la Sala 1 de computación para este curso?");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Cancel | QMessageBox::Ok);
msgBox.setDefaultButton(QMessageBox::Ok);
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Ok:
ui->txtSala1->setText(ui->txtNombreCurso->text() + " (" + QString::number(inscritos) + ")");
QMessageBox::information(NULL, "Sala Asignada", "Al curso (" + ui->txtNombreCurso->text() + ") se le asigno la sala 1, en el primer piso.");
asignado = true;
guardar(ui->txtNombreCurso->text(), inscritos, 1);
return;
break;
case QMessageBox::Cancel:
QMessageBox::information(NULL, "Nada Asignado", "Al curso, no se le ha asignado ninguna sala.");
return;
break;
default:
// Ok, detengamonos
break;
}
} else if(ui->txtSala2->text() == "Disponible") {
QMessageBox msgBox;
msgBox.setText("No hay salas Sin computadores disponible");
msgBox.setInformativeText("¿Desea usar la Sala 2 de computación para este curso?");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Cancel | QMessageBox::Ok);
msgBox.setDefaultButton(QMessageBox::Ok);
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Ok:
ui->txtSala2->setText(ui->txtNombreCurso->text() + " (" + QString::number(inscritos) + ")");
QMessageBox::information(NULL, "Sala Asignada", "Al curso (" + ui->txtNombreCurso->text() + ") se le asigno la sala 2, en el primer piso.");
asignado = true;
guardar(ui->txtNombreCurso->text(), inscritos, 2);
return;
break;
case QMessageBox::Cancel:
QMessageBox::information(NULL, "Nada Asignado", "Al curso, no se le ha asignado ninguna sala.");
return;
break;
default:
// Ok, detengamonos
break;
}
} else if(ui->txtSala3->text() == "Disponible") {
QMessageBox msgBox;
msgBox.setText("No hay salas Sin computadores disponible");
msgBox.setInformativeText("¿Desea usar la Sala 3 de computación para este curso?");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Cancel | QMessageBox::Ok);
msgBox.setDefaultButton(QMessageBox::Ok);
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Ok:
ui->txtSala3->setText(ui->txtNombreCurso->text() + " (" + QString::number(inscritos) + ")");
QMessageBox::information(NULL, "Sala Asignada", "Al curso (" + ui->txtNombreCurso->text() + ") se le asigno la sala 3, en el primer piso.");
asignado = true;
guardar(ui->txtNombreCurso->text(), inscritos, 3);
return;
break;
case QMessageBox::Cancel:
QMessageBox::information(NULL, "Nada Asignado", "Al curso, no se le ha asignado ninguna sala.");
return;
break;
default:
// Ok, detengamonos
break;
}
} else {
QMessageBox::information(NULL, "Nada Asignado", "Ya no nos quedan Salas Disponibles.");
}
} else {
QMessageBox::information(NULL, "Nada Asignado", "No hay salas disponibles, para la cantidad de inscritos.");
}
}
}
void MainWindow::on_btnDesasignar_clicked()
{
if(!db.isOpen())
abrirDB(); //Abrimos la Base de datos
else qDebug() << "Salas, ya esta abierta";
QSqlQuery q;
if(ui->cbSalas->currentText() == "Sala 1") {
ui->txtSala1->setText("Disponible");
q.prepare("UPDATE salas SET curso='Disponible' Where id=1");
}
if(ui->cbSalas->currentText() == "Sala 2") {
ui->txtSala2->setText("Disponible");
q.prepare("UPDATE salas SET curso='Disponible' Where id=2");
}
if(ui->cbSalas->currentText() == "Sala 3") {
ui->txtSala3->setText("Disponible");
q.prepare("UPDATE salas SET curso='Disponible' Where id=3");
}
if(ui->cbSalas->currentText() == "Sala 4") {
ui->txtSala4->setText("Disponible");
q.prepare("UPDATE salas SET curso='Disponible' Where id=4");
}
if(ui->cbSalas->currentText() == "Sala 5") {
ui->txtSala5->setText("Disponible");
q.prepare("UPDATE salas SET curso='Disponible' Where id=5");
}
if(ui->cbSalas->currentText() == "Sala 6") {
ui->txtSala6->setText("Disponible");
q.prepare("UPDATE salas SET curso='Disponible' Where id=6");
}
if(ui->cbSalas->currentText() == "Sala 7") {
ui->txtSala7->setText("Disponible");
q.prepare("UPDATE salas SET curso='Disponible' Where id=7");
}
if(ui->cbSalas->currentText() == "Sala 8") {
ui->txtSala8->setText("Disponible");
q.prepare("UPDATE salas SET curso='Disponible' Where id=8");
}
if(ui->cbSalas->currentText() == "Sala 9") {
ui->txtSala9->setText("Disponible");
q.prepare("UPDATE salas SET curso='Disponible' Where id=9");
}
if(ui->cbSalas->currentText() == "Sala 10") {
ui->txtSala10->setText("Disponible");
q.prepare("UPDATE salas SET curso='Disponible' Where id=10");
}
if(!q.exec())
qDebug() << q.lastError();
if(db.isOpen()) cerrarDB();
}

En un próximo articulo analizaremos con profundidad el código junto a un video para que se aprecie mejor.

Recuerdo que no utilizamos clases para distribuir salas a diferentes cursos dada la simplicidad del ejercicio y para ver otros métodos de resolver los mismos problemas.

 

Suscribete a nuestra lista

Mantente informado sobre las novedades que ofrecemos en nuestra web, no te llenaremos de Spam ni entregaremos tus datos a terceros.

Gracias por suscribirte a nuestra lista

Pin It on Pinterest

Share This