0% encontró este documento útil (0 votos)
20 vistas16 páginas

Practica 3

Cargado por

trollero96
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
20 vistas16 páginas

Practica 3

Cargado por

trollero96
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Guía de Práctica de aplicación y experimentación de los aprendizajes de la Universidad

Politécnica Salesiana
Carrera: CIENCIAS DE LA COMPUTACIÓN
Nivel: 2do
Asignatura: PROGRAMACIÓN ORIENTADA A OBJETOS
Desarrollado por: David Alejandro Cruz Palacios
Grupo: 2
Resultados de Construye programas utilizando el paradigma de programación
Aprendizaje: orientada a objetos.
Abstrae objetos del mundo real y los modela mediante diagramas
Indicador de logro: de clase.
Práctica/Deber
Número: Practica 3
Horas Dedicadas: 5
DESCRIPCIÓN DE LA PRÁCTICA:
Analice las clases creadas en la práctica e identifique cuales son los atributos y métodos, y construya el
diagrama de clases con sus correspondientes clases, si es un algoritmo coloque su flujograma
correspondiente.
1.1 En base al diagrama de clases generado/algoritmo, construir la aplicación en Eclipse
class Accesorio {
public:
Accesorio(const string& tipo, const string& marca, const string& modelo, const string&
caracteristicas);
// Métodos de acceso
const string& getTipo() const;
const string& getMarca() const;
const string& getModelo() const;
const string& getCaracteristicas() const;
// Métodos para estado
void setEstado(int estado);
int getEstado() const;
// Operador de comparación ==
bool operator==(const Accesorio& otro) const;

private:
string tipo;
string marca;
string modelo;
string caracteristicas;
int estado; // Nuevo atributo para el estado
};

#endif // ACCESORIO_H

#include "headers/accesorio.h"

Accesorio::Accesorio(const string& tipo, const string& marca, const string& modelo, const
string& caracteristicas)
: tipo(tipo), marca(marca), modelo(modelo), caracteristicas(caracteristicas), estado(0) {} //
Estado inicial en 0

const string& Accesorio::getTipo() const {


return tipo;
}

const string& Accesorio::getMarca() const {


return marca;
}

const string& Accesorio::getModelo() const {


return modelo;
}

const string& Accesorio::getCaracteristicas() const {


return caracteristicas;
}

void Accesorio::setEstado(int estado) {


this->estado = estado;
}
int Accesorio::getEstado() const {
return estado;
}

// Implementación del operador de comparación ==


bool Accesorio::operator==(const Accesorio& otro) const {
// Comparación de los atributos relevantes
return (tipo == [Link] && marca == [Link] && modelo == [Link] &&
caracteristicas == [Link] && estado == [Link]);
}
CLASE: Bicicleta
#ifndef BICICLETA_H
#define BICICLETA_H

#include <string>
using namespace std;

class Bicicleta {
public:
Bicicleta(const string& marca, const string& modelo, int tamanoRueda, const string&
tipoSuspension);
// Métodos de acceso
const string& getMarca() const;
const string& getModelo() const;
int getTamanoRueda() const;
const string& getTipoSuspension() const;
// Métodos para estado
void setEstado(int estado);
int getEstado() const;
// Operador de comparación ==
bool operator==(const Bicicleta& otra) const;

private:
string marca;
string modelo;
int tamanoRueda;
string tipoSuspension;
int estado; // Nuevo atributo para el estado
};

#endif // BICICLETA_H

#include "headers/bicicleta.h"

Bicicleta::Bicicleta(const string& marca, const string& modelo, int tamanoRueda, const


string& tipoSuspension)
: marca(marca), modelo(modelo), tamanoRueda(tamanoRueda),
tipoSuspension(tipoSuspension), estado(0) {} // Estado inicial en 0

const string& Bicicleta::getMarca() const {


return marca;
}

const string& Bicicleta::getModelo() const {


return modelo;
}

int Bicicleta::getTamanoRueda() const {


return tamanoRueda;
}

const string& Bicicleta::getTipoSuspension() const {


return tipoSuspension;
}

void Bicicleta::setEstado(int estado) {


this->estado = estado;
}

int Bicicleta::getEstado() const {


return estado;
}

// Implementación del operador de comparación ==


bool Bicicleta::operator==(const Bicicleta& otra) const {
// Comparación de los atributos relevantes
return (marca == [Link] && modelo == [Link] && tamanoRueda ==
[Link] && tipoSuspension == [Link] && estado == [Link]);
}
CLASE: Cliente
#ifndef CLIENTE_H
#define CLIENTE_H

#include <string>

using namespace std;

class Cliente {
public:
Cliente(const string& nombre, const string& apellido, const string& dni, const string&
direccion, const string& telefono);
~Cliente();

string getNombre() const;


void setNombre(const string& nombre);

string getApellido() const;


void setApellido(const string& apellido);

string getDni() const;


void setDni(const string& dni);
string getDireccion() const;
void setDireccion(const string& direccion);

string getTelefono() const;


void setTelefono(const string& telefono);

private:
string nombre;
string apellido;
string dni;
string direccion;
string telefono;
};

#endif

#include "headers/cliente.h"

Cliente::Cliente(const string& nombre, const string& apellido, const string& dni, const string&
direccion, const string& telefono)
: nombre(nombre), apellido(apellido), dni(dni), direccion(direccion), telefono(telefono) {}

Cliente::~Cliente() {}

string Cliente::getNombre() const {


return nombre;
}

void Cliente::setNombre(const string& nombre) {


this->nombre = nombre;
}

string Cliente::getApellido() const {


return apellido;
}

void Cliente::setApellido(const string& apellido) {


this->apellido = apellido;
}

string Cliente::getDni() const {


return dni;
}

void Cliente::setDni(const string& dni) {


this->dni = dni;
}

string Cliente::getDireccion() const {


return direccion;
}

void Cliente::setDireccion(const string& direccion) {


this->direccion = direccion;
}

string Cliente::getTelefono() const {


return telefono;
}

void Cliente::setTelefono(const string& telefono) {


this->telefono = telefono;
}
CLASE: Fecha
#ifndef FECHA_H
#define FECHA_H
#include <iostream>
using namespace std;
class Fecha {
public:
Fecha(int dia, int mes, int anio);
~Fecha();

int getDia() const;


void setDia(int dia);

int getMes() const;


void setMes(int mes);

int getAnio() const;


void setAnio(int anio);

bool esValida() const;


string toString() const;

private:
int dia;
int mes;
int anio;
};

#endif

#include "headers/fecha.h"

Fecha::Fecha(int dia, int mes, int anio) : dia(dia), mes(mes), anio(anio) {}

Fecha::~Fecha() {}

int Fecha::getDia() const {


return dia;
}

void Fecha::setDia(int dia) {


this->dia = dia;
}

int Fecha::getMes() const {


return mes;
}

void Fecha::setMes(int mes) {


this->mes = mes;
}

int Fecha::getAnio() const {


return anio;
}

void Fecha::setAnio(int anio) {


this->anio = anio;
}

bool Fecha::esValida() const {


return true; // Implementación de ejemplo
}

string Fecha::toString() const {


return "Fecha no implementada"; // Implementación de ejemplo
}
CLASE: Item Alquiler
#ifndef ITEMALQUILER_H
#define ITEMALQUILER_H

#include "fecha.h"
#include "cliente.h"
#include "bicicleta.h"
#include "accesorio.h"
#include "penalizacion.h"
#include "estado.h"

class ItemAlquiler {
public:
ItemAlquiler(const Fecha& fechaAlquiler, const Fecha& fechaDevolucion, Cliente* cliente,
Bicicleta* bicicleta = nullptr, Accesorio* accesorio = nullptr);
~ItemAlquiler();

Fecha getFechaAlquiler() const;


void setFechaAlquiler(const Fecha& fechaAlquiler);

Fecha getFechaDevolucion() const;


void setFechaDevolucion(const Fecha& fechaDevolucion);
Cliente* getCliente() const;
void setCliente(Cliente* cliente);

Bicicleta* getBicicleta() const;


void setBicicleta(Bicicleta* bicicleta);

Accesorio* getAccesorio() const;


void setAccesorio(Accesorio* accesorio);

Estado getEstado() const;


void setEstado(Estado estado);

Penalizacion getPenalizacionPorRetraso() const;


void setPenalizacionPorRetraso(const Penalizacion& penalizacionPorRetraso);

private:
Fecha fechaAlquiler;
Fecha fechaDevolucion;
Cliente* cliente;
Bicicleta* bicicleta;
Accesorio* accesorio;
Estado estado;
Penalizacion penalizacionPorRetraso;
};

#endif // ITEMALQUILER_H

// En el archivo "[Link]"
#include "../headers/itemalquiler.h"

ItemAlquiler::ItemAlquiler(const Fecha& fechaAlquiler, const Fecha& fechaDevolucion,


Cliente* cliente, Bicicleta* bicicleta, Accesorio* accesorio)
: fechaAlquiler(fechaAlquiler), fechaDevolucion(fechaDevolucion), cliente(cliente),
bicicleta(bicicleta), accesorio(accesorio), estado(EN_TIENDA), penalizacionPorRetraso() {}

ItemAlquiler::~ItemAlquiler() {}

Fecha ItemAlquiler::getFechaAlquiler() const {


return fechaAlquiler;
}

void ItemAlquiler::setFechaAlquiler(const Fecha& fechaAlquiler) {


this->fechaAlquiler = fechaAlquiler;
}

Fecha ItemAlquiler::getFechaDevolucion() const {


return fechaDevolucion;
}

void ItemAlquiler::setFechaDevolucion(const Fecha& fechaDevolucion) {


this->fechaDevolucion = fechaDevolucion;
}

Cliente* ItemAlquiler::getCliente() const {


return cliente;
}

void ItemAlquiler::setCliente(Cliente* cliente) {


this->cliente = cliente;
}

Bicicleta* ItemAlquiler::getBicicleta() const {


return bicicleta;
}

void ItemAlquiler::setBicicleta(Bicicleta* bicicleta) {


this->bicicleta = bicicleta;
}

Accesorio* ItemAlquiler::getAccesorio() const {


return accesorio;
}

void ItemAlquiler::setAccesorio(Accesorio* accesorio) {


this->accesorio = accesorio;
}

Estado ItemAlquiler::getEstado() const {


return estado;
}

void ItemAlquiler::setEstado(Estado estado) {


this->estado = estado;
}

Penalizacion ItemAlquiler::getPenalizacionPorRetraso() const {


return penalizacionPorRetraso;
}

void ItemAlquiler::setPenalizacionPorRetraso(const Penalizacion& penalizacionPorRetraso) {


this->penalizacionPorRetraso = penalizacionPorRetraso;
}
Clase: Penalizacion
#ifndef PENALIZACION_H
#define PENALIZACION_H

class Penalizacion {
public:
Penalizacion(int diasSinAlquiler = 0, bool tieneMulta = false);
~Penalizacion();
int getDiasSinAlquiler() const;
void setDiasSinAlquiler(int diasSinAlquiler);

bool getTieneMulta() const;


void setTieneMulta(bool tieneMulta);

private:
int diasSinAlquiler;
bool tieneMulta;
};

#endif

#include "headers/penalizacion.h"

Penalizacion::Penalizacion(int diasSinAlquiler, bool tieneMulta) :


diasSinAlquiler(diasSinAlquiler), tieneMulta(tieneMulta) {}

Penalizacion::~Penalizacion() {}

int Penalizacion::getDiasSinAlquiler() const {


return diasSinAlquiler;
}

void Penalizacion::setDiasSinAlquiler(int diasSinAlquiler) {


this->diasSinAlquiler = diasSinAlquiler;
}

bool Penalizacion::getTieneMulta() const {


return tieneMulta;
}

void Penalizacion::setTieneMulta(bool tieneMulta) {


this->tieneMulta = tieneMulta;
}
Clase: TiendaBicicletas
#ifndef TIENDA_BICICLETAS_H
#define TIENDA_BICICLETAS_H

#include <iostream>
#include "bicicleta.h"
#include "accesorio.h"
#include "cliente.h"
#include "itemalquiler.h"

using namespace std;

class TiendaBicicletas {
public:
TiendaBicicletas();
~TiendaBicicletas();
void addBicicleta(Bicicleta* bicicleta);
void removeBicicleta(const Bicicleta& bicicleta);
void addAccesorio(Accesorio* accesorio);
void removeAccesorio(const Accesorio& accesorio);
void alquilarBicicleta(const Cliente& cliente, const Bicicleta& bicicleta);
void devolverBicicleta(const Bicicleta& bicicleta);
void alquilarAccesorio(const Cliente& cliente, const Accesorio& accesorio);
void devolverAccesorio(const Accesorio& accesorio);
void mostrarBicicletasDisponibles();
void mostrarAccesoriosDisponibles();

private:
Bicicleta* bicicletas[100];
Accesorio* accesorios[100];
int numBicicletas;
int numAccesorios;

};

#endif

#include "headers/tiendabicicletas.h"
#include <iostream>

using namespace std;

TiendaBicicletas::TiendaBicicletas() : numBicicletas(0), numAccesorios(0) {}

TiendaBicicletas::~TiendaBicicletas() {
// Liberar memoria de bicicletas
for (int i = 0; i < numBicicletas; ++i) {
delete bicicletas[i];
}
// Liberar memoria de accesorios
for (int i = 0; i < numAccesorios; ++i) {
delete accesorios[i];
}
}

void TiendaBicicletas::addBicicleta(Bicicleta* bicicleta) {


if (numBicicletas < 100) {
bicicletas[numBicicletas++] = bicicleta;
} else {
cout << "Error: No se pueden agregar más bicicletas. Limite alcanzado." << endl;
}
}

void TiendaBicicletas::removeBicicleta(const Bicicleta& bicicleta) {


int index = -1;
for (int i = 0; i < numBicicletas; ++i) {
if (*bicicletas[i] == bicicleta) {
index = i;
break;
}
}
if (index != -1) {
delete bicicletas[index];
for (int i = index; i < numBicicletas - 1; ++i) {
bicicletas[i] = bicicletas[i + 1];
}
numBicicletas--;
cout << "Bicicleta eliminada correctamente." << endl;
} else {
cout << "Error: La bicicleta no esta en la tienda." << endl;
}
}

void TiendaBicicletas::addAccesorio(Accesorio* accesorio) {


if (numAccesorios < 100) {
accesorios[numAccesorios++] = accesorio;
} else {
cout << "Error: No se pueden agregar mas accesorios. Limite alcanzado." << endl;
}
}

void TiendaBicicletas::removeAccesorio(const Accesorio& accesorio) {


int index = -1;
for (int i = 0; i < numAccesorios; ++i) {
if (*accesorios[i] == accesorio) {
index = i;
break;
}
}
if (index != -1) {
delete accesorios[index];
for (int i = index; i < numAccesorios - 1; ++i) {
accesorios[i] = accesorios[i + 1];
}
numAccesorios--;
cout << "Accesorio eliminado correctamente." << endl;
} else {
cout << "Error: El accesorio no esta en la tienda." << endl;
}
}

void TiendaBicicletas::alquilarBicicleta(const Cliente& cliente, const Bicicleta& bicicleta) {


// Verificar si la bicicleta está disponible
bool bicicletaEncontrada = false;
for (int i = 0; i < numBicicletas; ++i) {
if (*bicicletas[i] == bicicleta) {
bicicletaEncontrada = true;
// Verificar si la bicicleta está en la tienda
if (bicicletas[i]->getEstado() == EN_TIENDA) {
// Cambiar el estado de la bicicleta a alquilado
bicicletas[i]->setEstado(ALQUILADA);
cout << "Bicicleta alquilada correctamente." << endl;
} else {
cout << "Error: La bicicleta no esta disponible para alquilar." << endl;
}
break;
}
}
if (!bicicletaEncontrada) {
cout << "Error: La bicicleta no esta en la tienda." << endl;
}
}

void TiendaBicicletas::devolverBicicleta(const Bicicleta& bicicleta) {


// Verificar si la bicicleta está en la tienda
bool bicicletaEncontrada = false;
for (int i = 0; i < numBicicletas; ++i) {
if (*bicicletas[i] == bicicleta) {
bicicletaEncontrada = true;
// Verificar si la bicicleta está alquilada
if (bicicletas[i]->getEstado() == ALQUILADA) {
// Cambiar el estado de la bicicleta a en tienda
bicicletas[i]->setEstado(EN_TIENDA);
cout << "Bicicleta devuelta correctamente." << endl;
} else {
cout << "Error: La bicicleta no esta alquilada." << endl;
}
break;
}
}
if (!bicicletaEncontrada) {
cout << "Error: La bicicleta no esta en la tienda." << endl;
}
}

void TiendaBicicletas::alquilarAccesorio(const Cliente& cliente, const Accesorio& accesorio) {


// Verificar si el accesorio está disponible
bool accesorioEncontrado = false;
for (int i = 0; i < numAccesorios; ++i) {
if (*accesorios[i] == accesorio) {
accesorioEncontrado = true;
// Verificar si el accesorio está en la tienda
if (accesorios[i]->getEstado() == EN_TIENDA) {
// Cambiar el estado del accesorio a alquilado
accesorios[i]->setEstado(ALQUILADA);
cout << "Accesorio alquilado correctamente." << endl;
} else {
cout << "Error: El accesorio no esta disponible para alquilar." << endl;
}
break;
}
}
if (!accesorioEncontrado) {
cout << "Error: El accesorio no esta en la tienda." << endl;
}
}

void TiendaBicicletas::devolverAccesorio(const Accesorio& accesorio) {


// Verificar si el accesorio está en la tienda
bool accesorioEncontrado = false;
for (int i = 0; i < numAccesorios; ++i) {
if (*accesorios[i] == accesorio) {
accesorioEncontrado = true;
// Verificar si el accesorio está alquilado
if (accesorios[i]->getEstado() == ALQUILADA) {
// Cambiar el estado del accesorio a en tienda
accesorios[i]->setEstado(EN_TIENDA);
cout << "Accesorio devuelto correctamente." << endl;
} else {
cout << "Error: El accesorio no esta alquilado." << endl;
}
break;
}
}
if (!accesorioEncontrado) {
cout << "Error: El accesorio no esta en la tienda." << endl;
}
}

1.2 Generar una clase main que cumpla con los siguientes requisitos planteados en el problema:

Clase: main Capturas de Pantalla con cada opción ejecutada


#include <iostream>
#include "headers/tiendabicicletas.h"

using namespace std;

int main() {
// Crear una tienda de bicicletas
TiendaBicicletas tienda;

// Bicicleta de ejemplo
Bicicleta bicicleta("MarcaBici", "ModeloBici", 26, "Suspensión");

// Accesorio de ejemplo
Accesorio accesorio("TipoAccesorio", "MarcaAccesorio", "ModeloAccesorio", "CaracteristicasAccesorio");

// Agregar bicicletas y accesorios a la tienda


[Link](&bicicleta);
[Link](&accesorio);

// Menú principal
int opcion;
do {
cout << "\nMenu:\n";
cout << "1. Alquilar bicicleta\n";
cout << "2. Devolver bicicleta\n";
cout << "3. Alquilar accesorio\n";
cout << "4. Devolver accesorio\n";
cout << "5. Salir\n";
cout << "Ingrese una opcion: ";
cin >> opcion;

switch (opcion) {
case 1: {
// Alquilar bicicleta
[Link](Cliente("NombreCliente", "ApellidoCliente", "DNI", "Dirección", "Telefono"), bicicleta);
break;
}
case 2: {
// Devolver bicicleta
[Link](bicicleta);
break;
}
case 3: {
// Alquilar accesorio
[Link](Cliente("NombreCliente", "ApellidoCliente", "DNI", "Dirección", "Telefono"), accesorio);
break;
}
case 4: {
// Devolver accesorio
[Link](accesorio);
break;
}
case 5: {
cout << "Saliendo del programa..." << endl;
break;
}
default:
cout << "Opcion invalida. Intentelo de nuevo." << endl;
}
} while (opcion != 5);

return 0;
}
*El codigo está en tamaño 3, pero
está completo, por favor, cópielo y
péguelo a su gusto.

Problemas detectados durante el desarrollo de la práctica/deber


No existieron ideas que lograran implementar las especificaciones al 100%, pues existe gran
variedad de errores al querer implementar funciones para recibir datos en el método main.
Se espera poder tener una tutoría con el profesor para aclarar dudas y resolver los
inconvenientes que convergen en la presentación de la practica tal y como se puede ver.

También podría gustarte