Semana 1: Evidencia: Clases y objetos - Parte I

En un banco se manejan cuentas bancarias que pertenecen a un cliente; cada vez que éste realiza un depósito o retiro, debe dar su número de usuario para poder realizar ambas operaciones, claro  que en el caso de un retiro, es necesario mostrar alguna identificación la cual compruebe que él es el poseedor de la cuenta, y si hay dinero suficiente en ésta, dicha operación se realiza. El banco tiene una serie de empleados con una identificación para cobrar su sueldo; es importante manejar los años que llevan trabajando, pues de esto dependen sus vacaciones (se dan cinco días por el primer año y se aumentan dos días por cada año cumplido hasta llegar al máximo que son 20 días), un empleado del banco puede ser cajero, supervisor, recepcionista, en fin, existen una serie de puestos que se deben cubrir para que esta entidad funcione satisfactoriamente.

El banco tiene contacto con algunas empresas con las que sus clientes pueden tener inversiones, manejando diferentes niveles de riesgo. El banco identifica una clave de casa inversionista, de hecho es muy importante la confiabilidad de ésta teniendo en cuenta su historial, los porcentajes de retorno de inversión, los montos de las inversiones y los plazos, esto para poder ofrecerle al usuario una gama de inversiones que puedan realizarse por medio de la entidad financiera.

Tenga en cuenta utilizar al menos una variable y un método de clase para cada una de las clases definidas.

Solución:


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        boolean eleccionCorrecta = true;
        int operacion;
        Scanner reader = new Scanner(System.in);
        double inicial;
        double totalCuenta;

        while (eleccionCorrecta) {
            eleccionCorrecta = false;
            System.out.print("Que operacion desea realizar \n");
            System.out.print("Elija \n 1. Transacciones con clientes. \n 2. Calcular dias de vacaciones \n");
            operacion = reader.nextInt();

            //Operacion
            switch (operacion) {
                case 1:
                    // Crear la cuenta
                    eleccionCorrecta = true;
                    Cuenta Cuenta1;
                    Cuenta1 = new Cuenta(0, "", "", 0, 0);
                    System.out.print("Cedula cliente: ");
                    int cedula = reader.nextInt();
                    Cuenta1.setCedula(cedula);
                    System.out.print("Nombres cliente: ");
                    String nombres = reader.next();
                    Cuenta1.setNombres(nombres);
                    System.out.print("Nombres Apellidos: ");
                    String apellidos = reader.next();
                    Cuenta1.setNombres(apellidos);
                    System.out.print("Numero de cuenta: ");
                    int numero = reader.nextInt();
                    Cuenta1.setNumeroCliente(numero);
                    System.out.print("Cantidad inicial: ");
                    inicial = reader.nextInt();
                    Cuenta1.setInicial(inicial);

                    while (eleccionCorrecta) {
                        eleccionCorrecta = false;
                        System.out.print("Que operacion desea realizar \n");
                        System.out.print("Elija \n 1. Para deposito. \n 2. Para retiro \n");
                        operacion = reader.nextInt();

                        //Operacion
                        switch (operacion) {
                            // declaracion case
                            // los valores deben ser del mismo tipo de la expresion
                            case 1:
                                // hacemos un ingreso en la cuenta
                                System.out.print("Cantidad depositar: ");
                                double deposito = reader.nextDouble();
                                Cuenta1.deposito(deposito);
                                break; // break es opcional

                            case 2:
                                // hacemos un ingreso en la cuenta
                                System.out.print("Cantidad a retirar: ");
                                double retiro = reader.nextDouble();
                                System.out.print("Ingrese su cedula: ");
                                int c = reader.nextInt();
                                Cuenta1.retiro(retiro, c);
                                break; // break es opcional

                            default:
                                System.out.print("Elija una opcion valida \n");
                                eleccionCorrecta = true;
                        }

                        System.out.println("-------------------------------------------------");
                        // Consultamos el saldo de nuevo
                        totalCuenta = Cuenta1.saldo();
                        System.out.println("Total actual en la cuenta: " + totalCuenta + " pesos");
                    }
                    break;
                case 2:
                    //Crear el empleado
                    Empleado Empleado1;
                    Empleado1 = new Empleado(0, "0", "0", 0, "");
                    System.out.print("Nombres empleado: ");
                    nombres = reader.next();
                    Empleado1.setNombres(nombres);
                    System.out.print("Apellidos empleado: ");
                    apellidos = reader.next();
                    Empleado1.setApellidos(apellidos);
                    System.out.print("Cedula del empleado: ");
                    cedula = reader.nextInt();
                    Empleado1.setCedula(cedula);
                    System.out.print("Cargo: ");
                    String cargo = reader.next();
                    Empleado1.setCargo(cargo);
                    System.out.print("Años de antigüedad: ");
                    int antiguedad = reader.nextInt();
                    Empleado1.setAniosAntiguedadEmpleado(antiguedad);
                    Empleado1.diasVacaciones(Empleado1.getAniosAntiguedadEmpleado());

                    break;
                default:
                    System.out.print("Elija una opcion valida \n");
                    eleccionCorrecta = true;
            }

        }
        reader.close();
    }
}
public class Cliente extends Persona {

    private int numeroCliente;

    public Cliente(int cedula, String nombres, String apellidos, int numero) {
        super(nombres, apellidos, cedula);
        numeroCliente = numero;
    }

    public boolean Identificacion(int c) {
        if (cedula == c) {
            return true;
        } else {
            return false;
        }
    }

    public void setNumeroCliente(int n) {
        numeroCliente = n;
    }

    public int getNumeroCliente() {
        return numeroCliente;
    }
}
public class Cuenta extends Cliente {

    private int numeroCuenta;
    private double saldo;

    public Cuenta(int cedula, String nombres, String apellidos, int numero, double inicial) {
        super(cedula, nombres, apellidos, numero);
        saldo = inicial;
    }

    public void deposito(double cantidad) {
        saldo = saldo + cantidad;
        System.out.println("Se depositan en la cuenta: " + cantidad + " pesos");
    }

    public void retiro(double cantidad, int c) {
        if (Identificacion(c)) {
            if (puedoSacar(cantidad)) {
                saldo = saldo - cantidad;
                System.out.println("Se retiran de la cuenta " + cantidad + " pesos");
            } else {

                System.out.println("Su saldo es insuficiente para ese retiro");
            }
        } else {
            System.out.println("Usted no es cliente, no puede hacer el retiro");
        }
    }

    public boolean puedoSacar(double cantidad) {
        return cantidad <= saldo;
    }

    public double saldo() {
        return saldo;
    }

    public int getNumeroCuenta() {
        return numeroCuenta;
    }

    public void setNumeroCuenta(int numero) {
        numeroCuenta = numero;
    }

    public void setInicial(double inicial) {
        saldo = inicial;
    }
}
import java.util.Arrays;

public class Empleado extends Persona {

    // instance variables - replace the example below with your own
    private int aniosAntiguedadEmpleado;
    public String cargoEmpleado;
    private int diasVacacionesEmpleado;
    private String[] arrayCargos = {"cajero", "supervisor", "recepcionista"};

    public Empleado(int cedula, String nombres, String apellidos, int antiguedad, String cargo) {
        super(nombres, apellidos, cedula);
        aniosAntiguedadEmpleado = antiguedad;
        cargoEmpleado = cargo;
    }

    public int getAniosAntiguedadEmpleado() {
        return aniosAntiguedadEmpleado;
    }

    public void diasVacaciones(int antiguedad) {
        diasVacacionesEmpleado = 0;
        aniosAntiguedadEmpleado = antiguedad;
        if (aniosAntiguedadEmpleado <= 1) {
            diasVacacionesEmpleado = 0;
        } else if (aniosAntiguedadEmpleado == 1) {
            diasVacacionesEmpleado = 5;
        } else if (aniosAntiguedadEmpleado <= 8) {
            diasVacacionesEmpleado = (aniosAntiguedadEmpleado - 1) * 2 + 5;
        } else {
            diasVacacionesEmpleado = 20;
        }
        //return diasVacacionesEmpleado;
        System.out.println("El empleado " + nombres + " " + apellidos + " tiene " + diasVacacionesEmpleado + " dias de vacaciones");
    }

    public void setCargo(String cargo) {
        if (validarCargo(cargo)) {
            cargoEmpleado = cargo;
        } else {
            System.out.println("Ese no es un cargo valido");
        }
    }

    public String getCargo() {
        return cargoEmpleado;
    }

    public void setAniosAntiguedadEmpleado(int antiguedad) {
        aniosAntiguedadEmpleado = antiguedad;
    }

    public boolean validarCargo(String cargo) {
        return Arrays.asList(arrayCargos).contains(cargo);
    }
}

public class Inversionista {

    private String claveInversionista;
    private String historialInversionista;
    private double porcentajeRetornoInversion;
    private double montoInversion;
    private int plazoInversion;

    public Inversionista(String clave, String historial, double porcentaje, double monto, int plazo) {
        claveInversionista = clave;
        historialInversionista = historial;
        porcentajeRetornoInversion = porcentaje;
        montoInversion = monto;
        plazoInversion = plazo;
    }

    public String getHistorial() {
        return historialInversionista;
    }

    public void setHistorial(String historial) {
        historialInversionista = historial;
    }

    public Double getMontoInversion() {
        return montoInversion;
    }

    public void setMontoInversion(Double monto) {
        montoInversion = monto;
    }

    public int getPlazoInversion() {
        return plazoInversion;
    }

    public void setPlazoInversion(int plazo) {
        plazoInversion = plazo;
    }

    public Double getPorcentajeRetornoInversion() {
        return porcentajeRetornoInversion;
    }

    public void setPorcentajeRetornoInversion(double porcentaje) {
        porcentajeRetornoInversion = porcentaje;
    }

    public void setPlazo(int plazo) {
        plazoInversion = plazo;
    }

    public void setClaveInversionista(String clave) {
        claveInversionista=clave;
    }

    public String getClaveInversionista() {
        return claveInversionista;
    }
}

public class Persona {

    String nombres;
    String apellidos;
    int cedula;

    public Persona(String n, String a, int c) {
        nombres = n;
        apellidos = a;
        cedula = c;
    }

    public void setNombres(String n) {
        nombres = n;
    }

    public void setApellidos(String a) {
        apellidos = a;
    }

    public void setCedula(int c) {
        cedula = c;
    }

    public String getNombres() {
        return nombres;
    }

    public String getApellidos() {
        return apellidos;
    }

    public int getCedula() {
        return cedula;
    }
}

Herramientas CASE: Principales usos

Las herramientas CASE son aplicadas en las diferentes etapas del desarrollo de software para mejorar la calidad del software producido, reducir su costo, aumentar en su eficiencia y la efectividad, entre otros beneficios, según afirma María Mercedes Marqués Andrés “El uso de las herramientas CASE puede mejorar la productividad en el desarrollo de una aplicación de bases de datos. Y por productividad se entiende tanto la eficiencia en el desarrollo, como la efectividad del sistema desarrollado. La eficiencia se refiere al coste, tanto en tiempo como en dinero, de desarrollar la aplicación. La efectividad se refiere al grado en que el sistema satisface las necesidades de los usuarios. Para obtener una buena productividad, subir el nivel de efectividad puede ser más importante que aumentar la eficiencia.” (Marqués Andrés, 2001)

Las herramientas CASE se pueden clasificar según el uso que tengan, existe gran variedad de ellas, a continuación algunas de ellas:

HERRAMIENTAS DE LA INGENIERÍA DE LA INFORMACIÓN.

Su objetivo es representar los objetos de datos de negocios, sus relaciones, y ayuda a comprender mejor la forma en que fluyen estos objetos de datos entre distintas zonas de negocio en el seno de la compañía. (Menéndez, R. & Barzanallana, A., 2016)

MODELADO DE PROCESOS Y HERRAMIENTAS DE ADMINISTRACIÓN.

Son usadas para representar los elementos clave del proceso. También pueden proporcionar vínculos con descripciones de procesos que ayuden a quienes estén implicados en el proceso de comprender las tareas que se requieren para llevar a cabo ese proceso. (Menéndez, R. & Barzanallana, A., 2016)

HERRAMIENTAS DE PLANIFICACIÓN DE PROYECTOS.

Estimación de esfuerzos de proyecto y de costes de software. Calculan el esfuerzo estimado, la duración del proyecto y el número recomendado de personas.
Planificación de proyectos. Capacitan al administrador para definir todas las áreas del proyecto (la estructura de desglose de tareas), para crear una red de tareas (normalmente empleando una entrada gráfica), para representar las interdependencias entre tareas y para modelar la cantidad de paralelismo que sea posible para ese proyecto. (Menéndez, R. & Barzanallana, A., 2016)

HERRAMIENTAS DE ANÁLISIS DE RIESGOS

Buscan capacitar al administrador el proyecto para construir una tabla de riesgos proporcionando una guía detallada en la identificación y análisis de riesgos. (Menéndez, R. & Barzanallana, A., 2016)

HERRAMIENTAS DE ADMINISTRACIÓN DE PROYECTOS.

La planificación del proyecto y el plan del proyecto deben seguirse y de monitorizarse de forma continúa. El gerente debe utilizar las herramientas que recojan métricas que en la última instancia proporcionen una indicación de la calidad el producto del software. Estas herramientas suelen ser extensiones de herramientas de planificación de proyectos. (Menéndez, R. & Barzanallana, A., 2016)

HERRAMIENTAS DE SEGUIMIENTO DE REQUISISTOS

Su objetivo es proporcionar un enfoque sistemático para el aislamiento de requisitos, comenzando por las especificaciones del cliente. Las herramientas de trazado de requisitos típicos combinan una evaluación de textos por interacción humana, con un sistema de gestión de bases de datos que almacena y categoría todos y cada uno de los requisitos del sistema que se "analizan" a partir de las especificaciones originales. (Menéndez, R. & Barzanallana, A., 2016)

HERRAMIENTAS DE MÉTRICAS Y GESTIÓN.

Las métricas del software mejoran la capacidad del administrador para controlar y coordinar el proceso del software y la capacidad del ingeniero para mejorar la calidad del software que se produce. Estas herramientas utilizan un sistema experto para sugerir el orden en el que se debe llevar a cabo un proyecto. (Menéndez, R. & Barzanallana, A., 2016)

HERRAMIENTAS DE DOCUMENTACIÓN

Las herramientas de producción de documentos y autoedición prestan su apoyo a casi todos los aspectos de la ingeniería del software, y representan una importante oportunidad de aprovechamiento para todos los desarrolladores del software, las herramientas de documentación suponen una oportunidad importante para mejorar la productividad. (Menéndez, R. & Barzanallana, A., 2016)

HERRAMIENTAS DE SOFTWARE DE SISTEMA.

CASE es una tecnología de estaciones de trabajo. Por tanto, el entorno CASE debe adaptase a un software de sistema en redes de alta calidad, al correo electrónico, a los boletines electrónicos y a otras capacidades de comunicaciones. (Menéndez, R. & Barzanallana, A., 2016)

HERRAMIENTAS DE CONTROL DE CALIDAD.

La mayor parte de las herramientas CASE que afirman que tiene como principal interés el control de calidad son en realidad herramientas métricas que hace una auditoria del código fuente para determinar si es justa o no a ciertos estándares del lenguaje. Otras herramientas extraen métricas técnicas como base para medir la calidad del software que se está construyendo. (Menéndez, R. & Barzanallana, A., 2016)

HERRAMIENTAS DE GESTIÓN COMO BASE DE DATOS.

El software de gestión de bases de datos sirve como fundamentos para establecer una base de datos CASE. Dado el énfasis acerca de los objetos de configuración, las herramientas de gestión de bases de datos para CASE pueden evolucionar a partir de los sistemas de gestión de bases de datos relacionales (SGBDR) para transformarse en sistemas de gestión de bases de datos orientadas a objetos (SGBDOO). (Menéndez, R. & Barzanallana, A., 2016)

HERRAMIENTAS DE CODIFICACIÓN DE CUARTA GENERACIÓN.

Los sistemas de consulta de bases de datos, los generadores de código y los lenguajes de cuarta generación han cambiado la forma en que se desarrollan los sistemas. Idealmente, estas herramientas de generación de código no solo traducen la descripción de un sistema operativo, sino que también ayudan a verificar la corrección de la especificación del sistema de tal forma que la salida resultante satisfaga los requisitos del usuario.
Los lenguajes de cuarta generación se usan ampliamente en aplicaciones de sistemas de información.
Aunque los lenguajes de cuarta generación, los generadores de código y los generadores de aplicaciones, permiten que un ingeniero de software especifique un sistema a un nivel muy alto de abstracción; cada una de estas herramientas difiere en aspectos importantes. (Menéndez, R. & Barzanallana, A., 2016)

HERRAMIENTAS DE MANTENIMIENTO

Las herramientas CASE para el mantenimiento de software abarcan una actividad que actualmente ocupa, aproximadamente, el 70% del esfuerzo total dedicado al software. Las herramientas de mantenimiento puede subdividirse de la siguiente forma:
  • Herramientas de ingeniería inversa a especificaciones.
  • Herramientas de reestructuración y análisis de código.
  • Herramientas interactivas de reingeniería de sistema.
Estas herramientas están limitadas a lenguajes de programación específicos y requieren cierto grado de interacción con el ingeniero de software. (Menéndez, R. & Barzanallana, A., 2016)

HERRAMIENTAS DE GESTIÓN DE CONFIGURACIÓN DE SOFTWARE.

Estas herramientas pueden ofrecer su asistencia en las cinco tareas principales de GCS: identificación, control de versiones control de cambios, auditorias y contabilidad de estados. La base de datos CASE proporciona un mecanismo para identificar todos los elementos de configuración y relacionarlo con otros elementos; un acceso sencillo a los elementos de configuración individuales facilita el proceso de auditoria; las herramientas de comunicación CASE pueden mejorar enormemente la contabilidad de estados (ofreciendo información acerca de los cambios a todos aquellos que necesiten conocerlos). (Menéndez, R. & Barzanallana, A., 2016)

HERRAMIENTAS DE ANÁLISIS Y DISEÑO.

Capacitan al ingeniero del software para crear modelos del sistema que haya que construir. Los modelos contienen una representación de los datos, de la función y del comportamiento (en el nivel de análisis), así como caracterizaciones del diseño de datos, arquitectura, procedimientos e interfaz. Al efectuar una comprobación de la consistencia y validez del modelo, las herramientas de análisis y diseño proporcionan al ingeniero del software un cierto grado de visión en lo tocante a la representación del análisis, y le ayudan a eliminar errores antes de que se propaguen al diseño, o lo que es peor, a la propia implementación. (Menéndez, R. & Barzanallana, A., 2016)

HERRAMIENTAS DE DESARROLLO Y DISEÑO DE INTERFAZ.

Son un conjunto de primitivas de componente de programas tales como menús, botones, estructuras de ventanas, iconos, mecanismos de desplazamiento, controladores de dispositivos, etc… (Menéndez, R. & Barzanallana, A., 2016)

HERRAMIENTAS DE GENERACIÓN DE PROTOTIPOS.

Se puede utilizar toda una gama de herramientas de generación de prototipos. Los generadores de pantallas permiten al ingeniero de software definir rápidamente la disposición de pantalla para aplicaciones interactivas. Otras herramientas de prototipos CASE más sofisticadas permiten la creación de un diseño de datos, acoplado con las disposiciones de la pantalla y de los informes simultáneamente. Muchas herramientas de análisis y diseño proporcionan extensiones que ofrecen alguna opción de generación de prototipos. Por último, una gama de herramientas de cuarta generación poseen también características de generación de prototipos. (Menéndez, R. & Barzanallana, A., 2016)

HERRAMIENTAS DE PROGRAMACIÓN.

Herramientas de programación que abarcan los compiladores, editores y depuradores que están disponibles para prestar su apoyo en la mayoría de los lenguajes de programación convencionales. Además, los entornos de programación orientados a objetos (OO), los lenguajes de cuarta generación, los entornos de programación gráfica, los generadores de aplicaciones y los lenguajes de consulta de bases de datos residen también en esta categoría.

HERRAMIENTAS DE INTEGRACIÓN Y COMPROBACIÓN.

En su directorio de herramientas de comprobación de software, software Quality Engineering define las siguientes categorías de herramientas de comprobación:
  • Adquisición de datos
  • Medida estática
  • Medida dinámica
  • Simulación
  • Administración de comprobaciones
  • Herramientas de funcionalidad cruzada
Debería tenerse en cuenta que muchas de las herramientas de comprobación poseen características que abarcan dos o más de las categorías anteriores. (Menéndez, R. & Barzanallana, A., 2016)

HERRAMIENTAS DE REINGENIERÍA.

La categoría de herramientas de reingeniería se pueden subdividir en las funciones siguientes:
  • Herramientas de ingeniería inversa para producir especificaciones
  • Herramientas de reestructuración y análisis de código
  • Herramientas de reingeniería para sistemas en línea
Las herramientas de ingeniería inversa y progresiva de la próxima generación harán un uso mucho mayor de técnicas de inteligencia artificial, aplicando una base de conocimientos que se a especifica del dominio de la aplicación (esto es, un conjunto de reglas de descomposición que se aplicarían a todos los programas de una cierta zona de aplicación tal como el control de fabricación o la aviónica). El componente de inteligencia artificial asistirá en la descomposición y reconstrucción del sistema, pero seguirá requiriendo una interacción con un ingeniero de software a lo largo del ciclo de la reingeniería. (Menéndez, R. & Barzanallana, A., 2016)
Todas estas herramientas facilitan la elaboración o desarrollo de software de mejor calidad, pues están diseñadas para que los diseñadores, desarrolladores, jefes de proyectos, etc… cuenten con una estructura ordenada para cada etapa del desarrollo.

EJEMPLOS DE HERRAMIENTAS CASE

ERwin:

ERwin Es una herramienta de diseño de base de datos. Brinda productividad en diseño, generación, y mantenimiento de aplicaciones. Más que una herramienta de dibujo, ERwin automatiza el proceso de diseño de una manera inteligente. Por ejemplo, ERwin habilita la creación de un diccionario de atributos reusables, asegurando la consistencia de nombres y definiciones para su base de datos. Oracle SQL Sybase DB2 Informix

EasyCASE:

EasyCASE El centro de productos para procesos, modelamiento de datos y eventos, e Ingeniería de Base de Datos. Permite capturar los detalles de diseño de un sistema y comunicar las ideas gráficamente. Oracle Paradox Progress SOLBase SQL server Sybase Watcom

Oracle Designer:

Oracle Designer Es un juego de herramientas para guardar las definiciones que necesita el usuario y automatizar la construcción rápida de aplicaciones cliente/servidor flexibles y gráficas . En el lado del Servidor, Oracle Designer soporta la definición, generación y captura de diseño de los siguientes tipos de bases de datos, por conexión nativa de Oracle y por conectividad ODBC : Oracle7 y más, Personal Oracle Lite, Rdb , ANSI 92, DB and MVS, Microsoft SQL Server, Sybase . Oracle Designer soporta las siguientes metodologías: Desarrollo Rápido de Aplicaciones ( RAD) Ingeniería de la Información ( IE) Modelado Asistido de Procesos Captura de Diseño Asistido.

Power Designer:

Power Designer es una suite de aplicaciones de Powersoft para la construcción, diseño y modelado de datos a través de diversas aplicaciones. Es la herramienta para el análisis, diseño inteligente y construcción sólida de una base de datos y un desarrollo orientado a modelos de datos a nivel físico y conceptual, que dan a los desarrolladores de aplicaciones Cliente/Servidor la más firme base para aplicaciones de alto rendimiento . Esta suite cuenta con los siguientes productos: PowerDesigner ProcessAnalyst PowerDesigner DataArchitect PowerDesigner AppModeler PowerDesigner WarehouseArchitect PowerDesigner MetaWorks PowerDesigner Viewer .

System Architect:

System Architect Posee un repositorio único que integra todas las herramientas, y metodologías usadas. En la elaboración de los diagramas, el System Architect conecta directamente al diccionario de datos, los elementos asociados, comentarios, reglas de validaciones, normalización, etc . Posee control automático de diagramas y datos, normalizaciones y balanceo entre diagramas "Padre e Hijo“. Es una herramienta creada específicamente para la arquitectura "Cliente/Servidor", por eso posee control total de versiones, y de acceso, así como la administración completa de múltiples equipos de desarrollo.

Microsoft Project:

Microsoft Project Es un software de administración de proyectos diseñado, desarrollado y comercializado por Microsoft para asistir a administradores de proyectos en el desarrollo de planes, asignación de recursos a tareas, dar seguimiento al progreso, administrar presupuesto y analizar cargas de trabajo . Permite el aprendizaje rápido con el planeamiento y la administración guiados.

JDeveloper:

JDeveloper Entorno integrado desarrollado por Oracle trabaja con la ingeniería inversa, es decir primero se crea él código y después el diagrama . Es un software propietario pero gratuito desde 2005 . Sus características principales: Netamente desarrollado para Java., posee diagrama de clases (UML), funciona en los siguientes sistemas operativos: Windows, Linux, Mac OSX.

REFERENCIAS:

  1. Menéndez, R. & Barzanallana, A. (2016). Principales herramientas CASE del mercado y su uso. Universidad de Murcia - Departamento Informática y Sistemas. Recuperado 16 Octubre de 2016, a partir de http://www.um.es/docencia/barzana/IAGP/Enlaces/CASE_principales.html
  2. Menéndez, R. & Barzanallana, A. (2016). Principales herramientas CASE del mercado y su uso. Universidad de Murcia - Departamento Informática y Sistemas. Recuperado 16 Octubre de 2016, a partir de http://www.um.es/docencia/barzana/IAGP/Enlaces/CASE_principales.html
  3. Jinchuña, L, Herramientas CASE para el proceso de desarrollo de Software. Recuperado 16 Octubre de 2016, a partir de http://solucionextrema.info/attachments/article/18/herramientas-case-proceso-desarrollo-software.pdf

5 preguntas sobre el Disco Duro

 1. ¿Qué es un Disco Duro?

El disco duro es un dispositivo de memoria secundaria no volátil, es decir, guarda la información, programas, controladores y el sistema operativo del computador, aunque exista ausencia de fluido eléctrico, a su vez un disco duro puede ser interno o externo.

Figura 1 Disco Duro Interno de 3Tb

Comúnmente, un disco duro interno se comunica a la Board mediante un conector serial ATA en los computadores actuales o mediante una correa y conector IDE en los antiguos, aunque existen otros tipos de conectores como el SCSI y el FC-AL.


Figura 2 Conector IDE y conector Serial-ATA

Un disco duro externo se comunica con la CPU mediante un conector USB.

2. ¿Qué componentes básicos conforman un Disco Duro?

Un Disco Duro está conformado por varios platos o discos paralelos, cabezales de lectura/escritura, uno en cada lado de cada plato. Todos los cabezales se mueven al mismo tiempo ya que están unidos a un mismo brazo.

Figura 3 Esquema de un Disco Duro y sus partes

Los discos se dividen en regiones lógicas concéntricas llamadas pistas, y a su vez la agrupación de las mismas pistas en todos los platos se le conoce como cilindro. El disco duro también cuenta con divisiones radiales que dividen todas las pistas a la vez, esta división se llama sector.

Figura 4 Esquema Pista, Sector, Clúster


3. ¿Qué es un Clúster?

Un clúster en un disco duro es una cantidad determinada de bytes agrupados en sectores, un disco duro está dividido por miles de clúster de tamaño igual y los archivos son guardados en los clúster y dependiendo del tamaño del archivo esté puede ocupar un solo clúster o varios clúster.

4. ¿Qué es una partición?

Una partición es una división lógica de un disco duro que es interpretada por el sistema operativo como un disco independiente, cada partición del disco duro puede tener un sistema de archivos, un sistema operativo o sus propios documentos y archivos.
La partición que contiene un sistema operativo se llama partición primaria, y las demás particiones se conocen como particiones extendidas, y estas a su vez pueden contener particiones lógicas.

5. ¿Existe otro tipo de discos duros?

Aparte de los discos duros también existen otros tipos de unidades de almacenamiento, entre ellos tenemos a los conocidos como discos de estado sólido, que al no contar con discos su nombre correctos es unidades de estado sólido, estas unidades carecen de partes móviles lo que la hacen más estables, aunque los costos de fabricación son mayores.

Lista de referencias
http://definicion.de/particion/
http://tecnologia.uncomo.com/articulo/que-es-una-particion-de-disco-duro-22563.html
http://www.alegsa.com.ar/Dic/cluster.php
http://computadoras.about.com/od/conocer-mi-computadora/g/Disco-Duro.htm
https://www.masadelante.com/faqs/disco-duro
https://www.fayerwayer.com/2013/06/todo-lo-que-debes-saber-sobre-las-unidades-de-estado-solido-ssd/

Construir la base de datos para la gestión de un hotel

Construir la base de datos para la gestión de un hotel, se cuenta con la siguiente información: Clientes (identificacion, país, nombre, apellido1, apellido2,dirección, teléfono, observaciones), habitaciones (nro_habitación, tipo_habitación), paises (id, país), reserva_habitacion (idreserva, fecha_entrada, fecha_salida, iva, nro_habitacion, cliente), tipo_habitacion (tipo_habitacion, camas, exterior, salón, terraza), temporada (idtemporada, fecha_inicio, fecha_final, tipo), precio_habitacion (idprecio, precio, idtemporada, tipo_habitacion), gastos (idgastos, idreserva, idservicio, fecha, cantidad, precio), servicios (idservicios, nombreservicio, descripcion, precio, iva, fecha), tipo_servicio(idservicio, nombreservicio).

1. Diseñar el diagrama entidad relación en Dbdesigner , generar el script y crear la base de datos con el respectivo usuario en postgresql y crear las tablas con el script.


Crear tablas 

CREATE TABLE tipo_servicio(
    NombreSERVICIO char(10) NOT NULL,
    PRIMARY KEY(NombreSERVICIO)
);

CREATE TABLE paises(
    pais char(20) NOT NULL,
    PRIMARY KEY(pais)
);

CREATE TABLE clientes(
    Identificacion char(12) NOT NULL,
    Pais char(20) NOT NULL,
    Nombre char(12) NOT NULL,
    Apellido1 char(12) NOT NULL,
    Apellido2 char(12),
    Direccion char(30) NOT NULL,
    Telefono char(12) NOT NULL,
    Observaciones char(50),
    PRIMARY KEY(Identificacion),
    FOREIGN KEY(Pais) references paises(pais)
);

CREATE TABLE tipo_habitacion(
    Categoria int NOT NULL,
    Camas int NOT NULL,
    Exterior char(2) NOT NULL check(Exterior in ('SI', 'NO')),
    Salon char(2) NOT NULL check(Salon in ('SI', 'NO')),
    Terraza char(2) NOT NULL check(Terraza in ('SI', 'NO')),
    PRIMARY KEY(Categoria)
);

CREATE TABLE habitaciones(
    NumHABITACION int NOT NULL,
    TIPO_HABITACION int NOT NULL,
    PRIMARY KEY(NumHABITACION),
    Foreign key(tipo_habitacion) references tipo_habitacion(Categoria)
);

CREATE TABLE servicios(
    idSERVICIOS int NOT NULL,
    NombreSERVICIO char(10) NOT NULL,
    Descripcion char(30) NOT NULL,
    Precio money NOT NULL,
    IVA numeric(5, 2) NOT NULL,
    Fecha date NOT NULL,
    PRIMARY KEY(idSERVICIOS),
    foreign key(nombreServicio) references tipo_servicio(NombreSERVICIO)
);

CREATE TABLE temporada(
    TEMPORADA int NOT NULL,
    FechaINICIO date NOT NULL,
    FechaFINAL date NOT NULL,
    Tipo char(1) not null check(tipo in ('B', 'M', 'A')),
    PRIMARY KEY(TEMPORADA)
);

CREATE TABLE precio_habitacion(
    idPrecio int NOT NULL,
    Precio money NOT NULL,
    TEMPORADA int NOT NULL,
    TIPO_HABITACION int NOT NULL,
    PRIMARY KEY(idPrecio),
    foreign key(temporada) references temporada(temporada),
    foreign key(tipo_habitacion) references tipo_habitacion(categoria)
);

CREATE TABLE reserva_habitac(
    idRESERVA numeric NOT NULL,
    FechaENTRADA date NOT NULL,
    FechaSALIDA date NOT NULL,
    IVA numeric(5, 2) NOT NULL,
    NumHABITACION int NOT NULL,
    CLIENTE char(12) NOT NULL,
    PRIMARY KEY(idRESERVA),
    foreign KEY(cliente) references CLIENTES(Identificacion),
    foreign key(numHabitacion) references HABITACIONES(NumHABITACION)
);

CREATE TABLE gastos(
    idGASTOS int NOT NULL,
    idRESERVA numeric NOT NULL,
    idSERVICIOS int NOT NULL,
    Fecha date NOT NULL,
    Cantidad int NOT NULL,
    Precio money not null,
    PRIMARY KEY(idGASTOS),
    foreign KEY(idreserva) references reserva_habitac(idREserva),
    foreign key(idservicios) references SERVICIOS(idSERVICIOS)
);

Insertar datos 2. Cargar los datos a las tablas de conformidad con el archivo adjunto (hacer las respectivas correcciones de acuerdo a los datos de las tablas).
--tipo_servicio
INSERT INTO tipo_servicio VALUES('COMEDOR');
INSERT INTO tipo_servicio VALUES('LAVANDERIA');

--paises
INSERT INTO paises VALUES('ALEMANIA');
INSERT INTO paises VALUES('ESPAÑA');
INSERT INTO paises VALUES('FRANCIA');
INSERT INTO paises VALUES('PORTUGAL');

--clientes
INSERT INTO clientes VALUES('12345', 'ESPAÑA', 'Felipe', 'Iglesias', 'López', 'Avda Los Castros, 44', '942344444', 'Buen cliente');
INSERT INTO clientes VALUES('44444', 'ESPAÑA', 'Luis', 'García', 'García', 'Calle Mayor, 67 ', '942456444', null);
INSERT INTO clientes VALUES('456789', 'FRANCIA', 'Ludovic', 'Giuly', 'Bourquin', '18 avenue Alsacen Cour', '37890194', null);

--tipo_habitacion
INSERT INTO tipo_habitacion VALUES(1, 1, 'SI', 'NO', 'NO');
INSERT INTO tipo_habitacion VALUES(2, 2, 'SI', 'NO', 'NO');
INSERT INTO tipo_habitacion VALUES(3, 3, 'SI', 'NO', 'NO');
INSERT INTO tipo_habitacion VALUES(4, 1, 'SI', 'SI', 'NO');

--habitaciones
INSERT INTO habitaciones VALUES(101, 1);
INSERT INTO habitaciones VALUES(102, 1);
INSERT INTO habitaciones VALUES(103, 1);
INSERT INTO habitaciones VALUES(104, 2);
INSERT INTO habitaciones VALUES(105, 2);
INSERT INTO habitaciones VALUES(106, 3);
INSERT INTO habitaciones VALUES(107, 4);

--servicios
INSERT INTO servicios VALUES(1, 'COMEDOR', '1 menu del Dia', '10', 7, '2009-01-01');
INSERT INTO servicios VALUES(2, 'LAVANDERIA', 'Lavado de Camisa', '2', 7, '2009-01-01');
INSERT INTO servicios VALUES(3, 'LAVANDERIA', 'Lavado de pantalon', '1', 7, '2009-01-01');

--temporada
INSERT INTO temporada VALUES(1, '2009-01-01', '2009-03-31', 'B');
INSERT INTO temporada VALUES(2, '2009-04-01', '2009-05-31', 'M');
INSERT INTO temporada VALUES(3, '2009-06-01', '2009-08-31', 'A');
INSERT INTO temporada VALUES(4, '2009-09-01', '2009-10-31', 'M');
INSERT INTO temporada VALUES(5, '2009-11-01', '2009-12-31', 'B');

--precio_habitacion
INSERT INTO precio_habitacion VALUES(1, '30', 1, 1);
INSERT INTO precio_habitacion VALUES(2, '35', 2, 1);
INSERT INTO precio_habitacion VALUES(3, '40', 3, 1);
INSERT INTO precio_habitacion VALUES(4, '35', 4, 1);
INSERT INTO precio_habitacion VALUES(5, '30', 5, 1);
INSERT INTO precio_habitacion VALUES(6, '35', 1, 2);
INSERT INTO precio_habitacion VALUES(7, '40', 2, 2);
INSERT INTO precio_habitacion VALUES(8, '45', 3, 2);
INSERT INTO precio_habitacion VALUES(9, '40', 4, 2);
INSERT INTO precio_habitacion VALUES(10, '35', 5, 2);
INSERT INTO precio_habitacion VALUES(11, '40', 1, 3);
INSERT INTO precio_habitacion VALUES(12, '45', 2, 3);
INSERT INTO precio_habitacion VALUES(13, '50', 3, 3);
INSERT INTO precio_habitacion VALUES(14, '45', 4, 3);
INSERT INTO precio_habitacion VALUES(15, '40', 5, 3);
INSERT INTO precio_habitacion VALUES(16, '50', 1, 4);
INSERT INTO precio_habitacion VALUES(17, '55', 2, 4);
INSERT INTO precio_habitacion VALUES(18, '60', 3, 4);
INSERT INTO precio_habitacion VALUES(19, '55', 4, 4);
INSERT INTO precio_habitacion VALUES(20, '50', 5, 4);

--reserva_habitac
INSERT INTO reserva_habitac(idReserva, FechaENTRADA, FechaSALIDA, IVA, NumHABITACION, CLIENTE)
VALUES(1, '2009-03-15', '2009-03-25', 0.07, 101, '12345');
INSERT INTO reserva_habitac(idReserva, FechaENTRADA, FechaSALIDA, IVA, NumHABITACION, CLIENTE)
VALUES(2, '2009-03-15', '2009-03-25', 0.07, 102, '12345');
INSERT INTO reserva_habitac(idReserva, FechaENTRADA, FechaSALIDA, IVA, NumHABITACION, CLIENTE)
VALUES(3, '2009-02-16', '2009-02-21', 0.07, 103, '12345');
INSERT INTO reserva_habitac(idReserva, FechaENTRADA, FechaSALIDA, IVA, NumHABITACION, CLIENTE)
VALUES(4, '2009-03-16', '2009-03-21', 0.07, 104, '44444');
INSERT INTO reserva_habitac(idReserva, FechaENTRADA, FechaSALIDA, IVA, NumHABITACION, CLIENTE)
VALUES(5, '2009-03-16', '2009-03-21', 0.07, 105, '44444');
INSERT INTO reserva_habitac(idReserva, FechaENTRADA, FechaSALIDA, IVA, NumHABITACION, CLIENTE)
VALUES(6, '2009-03-16', '2009-03-21', 0.07, 106, '44444');
INSERT INTO reserva_habitac(idReserva, FechaENTRADA, FechaSALIDA, IVA, NumHABITACION, CLIENTE)
VALUES(7, '2009-03-16', '2009-03-21', 0.07, 107, '44444');

--gastos
INSERT INTO gastos(idgastos, idRESERVA, idSERVICIOS, Fecha, Cantidad, Precio)
VALUES(1, 1, 1, '2009-03-15 12:00', 1, '10');
INSERT INTO gastos(idgastos, idRESERVA, idSERVICIOS, Fecha, Cantidad, Precio)
VALUES(2, 1, 1, '2009-03-15 11:00', 1, '10');
INSERT INTO gastos(idgastos, idRESERVA, idSERVICIOS, Fecha, Cantidad, Precio)
VALUES(3, 4, 2, '2009-03-15 09:30', 1, '2');

Ordenar N números en forma descendente o ascendente

#include <iostream>
#include <string.h>

using namespace std;

int main ()
{
    float n[100], c;
    char orden[3];
    setlocale(LC_CTYPE, "Spanish"); //Tildes
    cout << "Este programa ordena N números: "<<endl;
	cout << "Ingrese la cantidad de números a ordenar: ";
	cin>>c;
	while (strcmp(orden, "asc") && strcmp(orden, "des")){//Verifica que sea asc o des unicamente.
	cout << "Digite asc para ordenarlos de forma ascendente o des para ordenarlos de forma descendente: ";
	cin>>orden;	
	}
	for (int i=1;i<=c;i++){
		cout<<"Ingrese el número: ";
		cin>>n[i];
	}

    float Temp; 
    	for(int i=1;i<=c;i++){ 
            for(int j=1;j<=c-1;j++){
            	
            	if (strcmp(orden, "asc")){
            		if(n[j]<n[j+1]){// cambia "<" a ">" para cambiar la manera de ordenar 
                    Temp=n[j];
                    n[j]=n[j+1]; 
                    n[j+1]=Temp;
                    }
				}
				
				if (strcmp(orden, "des")){
            		if(n[j]>n[j+1]){// cambia "<" a ">" para cambiar la manera de ordenar 
                    Temp=n[j];
                    n[j]=n[j+1]; 
                    n[j+1]=Temp;
                    }
				}      	
                }
            }

	cout << "Los números ordenados son: "<< endl;
     
    for(int j=1;j<=c;j++){
            cout << n[j]<< endl;
    }  
	
    system ("pause");
    return 0;
}