import [Link].
*;
public class Pedido{
private ArrayList<Renglon> renglones;
public Pedido(Renglon p_renglon){
[Link](new ArrayList<Renglon>());
[Link](p_renglon);
/**
* Constructor sobrecargado de la clase Pedido.
*/
public Pedido(ArrayList p_renglones){
[Link](p_renglones);
/**
* Bloque de Setters, se utilizan para asignar valores a los atributos.
*/
private void setRenglones(ArrayList<Renglon> p_renglones){
[Link]=p_renglones;
/**
* Bloque de Getters, retornan los valores sin modificarlos.
*/
public ArrayList<Renglon> getRenglones(){
return [Link];
/**
* Metodo encargado de ingresar un elemento a la coleccion.
* @return boolean
* @param Renglon p_renglon
*/
public boolean agregarRenglon(Renglon p_renglon){
return [Link]().add(p_renglon);
/**
* Metodo encargado de quitar un elemento de la coleccion.
* @return boolean
* @param Renglon p_renglon
*/
public boolean quitarRenglon(Renglon p_renglon){
return [Link]().remove(p_renglon);
/**
* Metodo encargado de mostrar por pantalla la informacion requerida.
*/
public void mostrar() {
[Link]("Pedido:");
[Link]("Cantidad de Items: " + [Link]().size());
int contador = 1;
int totalEtiquetas = 0;
double totalImporte = 0;
for (Renglon unRenglon : [Link]()) {
[Link]("Item " + contador + ": ");
[Link]();
[Link]("Precio: $" + [Link]());
totalEtiquetas += [Link]();
totalImporte += [Link]();
contador++;
[Link]("--- Total pedido: " + totalEtiquetas + " Etiquetas por un importe total de:
$" + totalImporte);
public class Renglon{
private int cantidad;
private Etiqueta item;
private double importe;
public Renglon(int p_cantidad, double p_importe, Etiqueta p_item){
[Link](p_cantidad);
[Link](p_importe);
[Link](p_item);
/**
* Bloque de Setters, se utilizan para asignar valores a los atributos.
*/
private void setCantidad(int p_cantidad){
[Link] = p_cantidad;
private void setImporte(double p_importe){
[Link] = p_importe;
}
private void setItem(Etiqueta p_item){
[Link] = p_item;
/**
* Bloque de Getters, retornan el valor de los atributos sin modificarlos.
*/
public int getCantidad(){
return [Link];
public double getImporte(){
return [Link];
public Etiqueta getItem(){
return [Link];
/**
* Muestra el detalle del renglón, incluyendo la cantidad de etiquetas y el detalle de la
etiqueta.
*/
public void mostrar() {
[Link]([Link]() + " Etiquetas de " + [Link]().toString());
public abstract class Etiqueta
private double costo;
public Etiqueta(double p_costo)
[Link](p_costo);
/**
* Bloque de Setters, se utilizan para asignar valores a los atributos.
*/
private void setCosto(double p_costo){
[Link] = p_costo;
/**
* Bloque de Getters, retorna el valor de los atributos sin modificarlos.
*/
public double getCosto(){
return [Link];
/**
* Metodo abstracto para calcular el precio de la etiqueta basado en la cantidad.
* @param q. La cantidad de etiquetas.
* @return El precio total de las etiquetas.
*/
public abstract double precio(int q);
/**
* Metodo que devuelve una representacion en cadena de la etiqueta.
*/
public String toString(){
return "tipo - " + " " + [Link]();
/**
* Metodo abstracto que retorna el tipo de etiqueta.
* @return el tipo de etiqueta.
*/
protected abstract String tipo();
public class Premium extends Etiqueta{
private int colores;
public Premium(double p_costo, int p_colores){
super(p_costo);
[Link](p_colores);
/**
* Bloque de, se utilizan para asignar valores a los atributos.
*/
private void setColores(int p_colores){
[Link]=p_colores;
/**
* Bloque de Getters, retorna el valor de los atributos sin modificarlos.
*/
public int getColores(){
return [Link];
}
/**
* Calcula el precio de la etiqueta según la cantidad de colores.
* @param int q . la cantidad de etiquetas
* @return el precio total de las etiquetas
*/
public double precio(int q){
[Link](q);
return [Link]()*q+[Link]();
/**
* Devuelve el tipo de etiqueta.
* @return el tipo de etiqueta, "Premium"
*/
protected String tipo(){
return "Premium";
/**
* Método que devuelve una representación en cadena de la etiqueta.
* @return la representacion en cadena de la etiqueta.
*/
public String toString(){
return [Link]() + " - Costo $" + [Link]() + " - Colores: " + [Link]();
/**
* Calcula el costo adicional según la cantidad de colores.
* @return El costo adicional
*/
private double adicional(){
switch([Link]()){
case 1:
return 0;
case 2:
return [Link]()*0.05;
case 3:
return [Link]()*0.07;
default:
return [Link]()*0.03*[Link]();
public class Comun extends Etiqueta{
private double plus;
public Comun(double p_costo, double p_plus){
super(p_costo);
[Link](p_plus);
/**
* Bloque de, se utilizan para asignar valores a los atributos.
*/
private void setPlus(double p_plus){
[Link] = p_plus;
/**
* Bloque de Getters, retornan los atributos sin modificarlos.
*/
public double getPlus(){
return [Link];
/**
* Metodo que calcula el precio de las etiquetas basandose en la cantidad.
* @param q. la cantidad de etiquetas.
* @return El precio total de las etiquetas.
*/
public double precio(int q){
return [Link]()-[Link](q)+[Link]();
/**
* Calcula el descuento segun la cantidad de etiquetas.
* @param q la cantidad de etiquetas.
* @return el descuento aplicado.
*/
private double descuento(int q){
if(q<=10){
return 0.0;
} else{
if(q<=50){
return [Link]()*0.02;
} else{
if(q<=100){
return [Link]()*0.05;
} else{
return [Link]()*q*0.01;
}
/**
* El metodo devuelve el tipo de etiqueta.
* @return el tipo de etiqueta.
*/
protected String tipo(){
return "Comun";
/**
* Metodo que devuelve una representacion en cadena de la etiqueta.
* @return la representacion en cadena de la etiqueta.
*/
public String toString(){
return [Link]() + " - Costo $" + [Link]() + " - Diseño: $" + [Link]();
import [Link].*;
public class EjPedido {
public static void main(String[] args) {
// Creación de etiquetas
Etiqueta premium1 = new Premium(200.0, 10);
Etiqueta comun1 = new Comun(100.0, 100.0);
Etiqueta premium2 = new Premium(200.0, 7);
// Creación de renglones
Renglon renglon1 = new Renglon(7, [Link](7), premium1);
Renglon renglon2 = new Renglon(57, [Link](57), comun1);
Renglon renglon3 = new Renglon(94, [Link](94), premium2);
// Creación del pedido
Pedido pedido = new Pedido(new ArrayList<>());
[Link](renglon1);
[Link](renglon2);
[Link](renglon3);
// Mostrar detalle del pedido
[Link]();