import java.text.NumberFormat;
import java.util.Scanner;
class ProductoMantApp{
// declara 2 variables de clase
private static ProductoDAO productoDAO = null;
private static Scanner sc = null;
public static void main(String args[]){
System.out.println("Bienvenido a la aplicación de Mantenimiento de productos \n");
// set de las variables de clase
productoDAO = DAOFactory.getProductoDAO(); // conexión con la base de datos
sc = new Scanner(System.in);
displayMenu();
String action = "" ;
while (!action.equalsIgnoreCase("sale")){
action = Validator.getString(sc, "Ingrese un comando: ");
System.out.println() ;
if (action.equalsIgnoreCase("lista")) displayAllProductos () ;
else if (action.equalsIgnoreCase("adi")) addProducto();
else if (action.equalsIgnoreCase("eli")) deleteProducto();
else if (action.equalsIgnoreCase("menu")) displayMenu();
else if (action.equalsIgnoreCase("sale")) System.out.println("Adios.\n");
else System.out.println("Error! comando no válido.\n");
}
}
public static void displayMenu(){
System.out.println("MENU DE COMMADOS");
System.out.println("lista - Lista todos los productos");
System.out.println("adi - Añade un producto");
System.out.println("eli - Elimina un producto");
System.out.println("menu - Muestra este menu");
System.out.println("sale - salida de la aplicación\n");
}
public static void displayAllProductos (){
System.out.println("LISTA DE PRODUCTOS");
System.out.println(productoDAO.getProductosString());
}
public static void addProducto(){
String codigo = Validator.getString(sc, "Ingrese el código de producto: ");
String descripcion = Validator.getString(sc, "Ingrese la descripción de producto: ");
double precio = Validator.getDouble(sc, "Ingrese el precio: ");
Producto producto = new Producto();
producto.setCode(codigo);
producto.setDescription(descripcion);
producto.setPrice(precio);
productoDAO.addProducto(producto); // añade un producto a la base de datos
System.out.println();
System.out.println(descripcion + " ha sido añadido.\n");
}
public static void deleteProducto(){
String codigo = Validator.getString(sc,"Ingrese el código a eliminar: ");
Producto p = productoDAO.getProducto(codigo); // elimina un producto de la base de datos
System.out.println();
if (p != null){
productoDAO.deleteProducto(p);
System.out.println(p.getDescripcion() + " ha sido eliminado.\n");
}else System.out.println("Ningún producto tiene este código.\n");
}
}
class Producto{
private String codigo;
private String descripcion;
private double precio;
public Producto(){
codigo = "";
descripcion = "";
precio = 0.0;
}
public Producto(String codigo, String descripcion, double precio){
this.codigo = codigo;
this.descripcion = descripcion;
this.precio = precio;
}
public void setCode(String codigo){this.codigo = codigo;}
public String getCodigo() {return codigo;}
public void setDescription(String descripcion){this.descripcion = descripcion;}
public String getDescripcion(){return descripcion;}
public void setPrice(double precio){this.precio = precio;}
public double getPrice(){return precio;}
public String getFormattedPrecio(){
NumberFormat moneda = NumberFormat.getCurrencyInstance();
return moneda.format(precio);
}
}
interface ProductoReader{
Producto getProducto(String codigo);
String getProductosString();
}
interface ProductoWriter {
boolean addProducto(Producto p) ;
boolean updateProducto(Producto p ) ;
boolean deleteProducto(Producto p ) ;
}
interface ProductoConstants {
int CODESIZE = 4;
int DESCRIPTIONSIZE = 40;
}
interface ProductoDAO extends ProductoReader, ProductoWriter, ProductoConstants{ }
class DAOFactory{
public static ProductoDAO getProductoDAO(){ // método
ProductoDAO pDAO = new ProductoTextFile();
return pDAO;
}
}
class ProductoTextFile implements ProductoDAO{
// field declarations
public ProductoTextFile(){
// código que inicia los campos
}
//*************************************************
// Implementa la interface ProductoReader
//*************************************************
public Producto getProducto(String codigo){
// código que retorna un Producto
return producto; // Error de compilación
}
public String getProductosString(){
// código que retorna un String que lista todos los productos,
// este código puede usar las constantes CODE_SIZE y
// DESCRIPTION_SIZE de la interface ProductoConstants
// para alinear los datos de producto
return "";
}
//*************************************************
// Implementa la interface ProductoWriter
//**************************************************
public boolean addProducto(Producto p){
// código que añade un Producto
return false;
}
public boolean deleteProducto(Producto p){
// código que elimina un Producto
return false;
}
public boolean updateProducto(Producto p){
// código que actualiza un Producto
return false;
}
}
class Validator {
public static String getString(Scanner sc, String prompt){
System.out.print(prompt);
String s = sc.next();
sc.nextLine();
return s;
}
public static int getInt(Scanner sc, String prompt){
int i = 0 ;
boolean isValid = false;
while (isValid == false){
System.out.print(prompt);
if (sc.hasNextInt()){
i = sc.nextInt();
isValid = true;
} else System.out.println("Error! Valor entero no válido. Intente de nuevo.");
sc.nextLine();
}
return i;
}
public static int getInt(Scanner sc, String prompt, int min, int max){
int i = 0;
boolean isValid = false;
while (isValid == false){
i = getInt(sc, prompt);
if (i < min) System.out.println("Error! El número debe ser mayor o igual que " + min + ".");
else if (i > max) System.out.println("Error! El número debe ser menor o igual que " + max + ".");
else isValid = true;
}
return i ;
}
public static double getDouble(Scanner sc, String prompt){
double d = 0 ;
boolean isValid = false;
while (isValid == false){
System.out.print(prompt);
if (sc.hasNextDouble()){
d = sc.nextDouble();
isValid = true;
} else System.out.println("Error! Valor decimal no válido. Intente de nuevo.");
sc.nextLine();
}
return d;
}
public static double getDouble(Scanner sc, String prompt, double min, double max) {
double d = 0 ;
boolean isValid = false;
while (isValid == false){
d = getDouble(sc, prompt);
if (d < min) System.out.println("Error! El número debe ser mayor o igual que " + min + ".");
else if (d > max) System.out.println("Error! El número debe ser menor o igual que " + max + ".");
else isValid = true;
}
return d;
}
public static float getFloat(Scanner sc, String prompt){
float d = 0 ;
boolean isValid = false;
while (isValid == false){
System.out.print(prompt);
if (sc.hasNextFloat()){
d = sc.nextFloat();
isValid = true;
} else System.out.println("Error! Valor decimal no válido. Intente de nuevo.");
sc.nextLine();
}
return d;
}
public static float getFloat(Scanner sc, String prompt, float min, float max) {
float d = 0 ;
boolean isValid = false;
while (isValid == false){
d = getFloat(sc, prompt);
if (d < min) System.out.println("Error! El número debe ser mayor o igual que " + min + ".");
else if (d > max) System.out.println("Error! El número debe ser menor o igual que " + max + ".");
else isValid = true;
}
return d;
}
}