/******************************************************************************
Welcome to GDB Online.
GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl,
C#, OCaml, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog.
Code, Compile, Run and Debug online from anywhere in world.
*******************************************************************************/
import java.util.ArrayList;
//import java.util.LinkedList;
import java.util.Scanner;
import java.lang.String;
public class LibroApp{
private static LibroDAO libroDao = DAOFactory.getLibroDAO();
private static Scanner sc = new Scanner(System.in);
private static Libro libro;
public static void main(String[] args){
System.out.println("Bienvenido a Mi Librería: Carga de libros");
cargarDatos();
vender();
System.out.println("Muchas gracias por su visita.\n");
}
static void cargarDatos(){
int op = 1;
while(op!=7){
System.out.println("\n1 Ingresar libro nuevo");
System.out.println("2 Eliminar libro");
System.out.println("3 Actualizar libro");
System.out.println("4 Consultar libro");
System.out.println("5 Listar los libros");
System.out.println("6 Comprar libros");
System.out.println("7 Salir");
op = Validator.getInt(sc, "Elija una opción: ");
switch (op) {
case 1: insertar(); break;
case 2: eliminar(); break;
case 3: actualizar(); break;
case 4: consultar(); break;
case 5: listar(); break;
case 6: comprar(); break;
case 7: System.out.println(" Libros cargados.\n");
}
}
}
static void insertar(){
int codigo = Validator.getInt(sc, " Ingresar el código: ");
if(libroDao.consultar(codigo)!=null) {System.out.println(" Este libro ya existe."); return;}
libro = new Libro(codigo);
libro.nombre = Validator.getString(sc, " Ingresar el nombre : ");
libro.autor = Validator.getString(sc, " Ingresar el autor : ");
libro.precio = Validator.getInt(sc, " Ingresar el precio : ");
libro.cantidad = Validator.getInt(sc, " Ingresar la cantidad: ");
libroDao.insertar(libro);
System.out.println(" Libro ingresado exitosamente.");
}
static void eliminar(){
int codigo = Validator.getInt(sc, " Código libro a eliminar: ");
libro= libroDao.consultar(codigo);
if(libro==null) {System.out.println(" Este libro no existe."); return;}
libroDao.eliminar(libro);
System.out.println(" " + libro.toString() + ": Libro eliminado exitosamente.");
}
static void actualizar(){
int codigo = Validator.getInt(sc, " Código del libro a actualizar: ");
libro= libroDao.consultar(codigo);
if(libro==null) {System.out.println( " Este libro no existe."); return;}
libro.nombre = Validator.getString(sc, " Ingresar nuevo nombre : ");
libro.autor = Validator.getString(sc, " Ingresar nuevo autor : ");
libro.precio = Validator.getInt(sc, " Ingresar nuevo precio : ");
libro.cantidad = Validator.getInt(sc, " Ingresar nueva cantidad: ");
libroDao.actualizar(libro);
System.out.println(" Libro actualizado exitosamente.");
}
static Libro consultar(){
int codigo = Validator.getInt(sc, " Código del libro: ");
libro= libroDao.consultar(codigo);
if(libro==null) System.out.println(" Este libro no existe.");
else System.out.println(" Libro: " + libro.toString());
return libro;
}
static void listar(){
String st = libroDao.listar();
if(st.length() > 0) {
System.out.println(" Libros existententes");
System.out.println(st);
} else System.out.println(" No hay libros");
}
static void comprar(){
int codigo = Validator.getInt(sc, " Código del libro: ");
libro= libroDao.consultar(codigo);
if(libro==null) {System.out.println( " Este libro no existe."); return;}
libro.cantidad += Validator.getInt(sc, " Ingresar cantidad a comprar: ");
libroDao.actualizar(libro);
System.out.println(" Compra exitosa.");
}
static void vender(){
System.out.println("Bienvenido a Vender");
String comp = "s";
int total = 0, codigo, cantidad, compra;
do{
comp = Validator.getString(sc, "\nDesea comprar (s/n): ");
if(!comp.equalsIgnoreCase("s")) break;
libro= consultar(); //en DataEntry
if(libro!=null){
cantidad = Validator.getInt(sc, " Cantidad a comprar: ");
if(cantidad <= libro.cantidad){
libro.cantidad -= cantidad;
libroDao.actualizar(libro);
compra = cantidad * libro.precio;
total += compra;
System.out.println(" Su compra es: " + compra);
} else System.out.println(" Lo sentimos, solo quedan " + libro.cantidad + " libros.");
}
} while(true);
if(total>0) System.out.println("Total compra: " + total);
}
}
class Libro{
int codigo;
String nombre;
String autor;
int precio;
int cantidad;
public Libro(int codigo) {this.codigo = codigo;}
public String toString() {return codigo + " " + nombre + " " + autor + " " + precio + " " + cantidad;}
}
class DAOFactory{
static LibroDAO getLibroDAO(){ // método
LibroDAO libroDAO = new LibroLista();
// LibroDAO libroDAO = new LibroLink();
return libroDAO;
}
}
interface LibroDAO{
void insertar(Libro libro);
void eliminar(Libro libro);
void actualizar(Libro libro);
Libro consultar(int codigo);
String listar();
}
class LibroLista implements LibroDAO{
ArrayList<Libro> lista = new ArrayList<>();
public void insertar(Libro libro) {lista.add(libro);}
public void eliminar(Libro libro){lista.remove(libro);}
public void actualizar(Libro libro) {
lista.set(indice(libro.codigo), libro);
}
public String listar(){
String st = "";
for(Libro libro: lista) st = st + " " + libro.toString() + "\n";
return st;
}
public Libro consultar(int codigo){
for(Libro libro: lista) if(libro.codigo==codigo) return libro;
return null;
}
public int indice(int codigo){
int index = 0;
for(Libro libro:lista) if(libro.codigo!=codigo) index++;
else return index;
return -1;
}
}
/*
class LibroLink implements LibroDAO{
LinkedList<Libro> lista = new LinkedList<>();
// Las funciones no cambian
}
}
*/
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. Ingrese 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 que " + min + ".");
else if (i > max) System.out.println(" Error El número debe ser menor que " + max + ".");
else isValid = true;
}
return i ;
}
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. Ingrese 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;
}
}