/******************************************************************************
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.
*******************************************************************************/
public class Main
{
public static void main(String[] args) {
System.out.println("Hello World");
}
}
import java.util.ArrayList;
import java.util.Scanner;
import java.lang.String;
public class LibroApp3{
public static void main(String[] args){
System.out.println("Bienvenido a Mi Librería: Carga de libros");
DataEntry.cargarDatos();
Venta.vender();
System.out.println("Muchas gracias por su visita.\n");
}
}
class DataEntry{
static Scanner sc = new Scanner(System.in);
static Libro li;
static LibroDAO liDAO = DAOFactory.getLibroDAO();
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(liDAO.consultar(codigo)!=null) {System.out.println(" Este libro ya existe."); return;}
String nombre = Validator.getString(sc, " Ingresar el nombre : ");
String autor = Validator.getString(sc, " Ingresar el autor : ");
int precio = Validator.getInt(sc, " Ingresar el precio : ");
int cantidad = Validator.getInt(sc, " Ingresar la cantidad: ");
li = new Libro(codigo, nombre, autor, precio, cantidad);
liDAO.insertar(li);
System.out.println(" Libro ingresado exitosamente.");
}
static void eliminar(){
int codigo = Validator.getInt(sc, " Código libro a eliminar: ");
li = liDAO.consultar(codigo);
if(li==null) {System.out.println(" Este libro no existe."); return;}
liDAO.eliminar(li);
System.out.println(" " + li.toString() + ": Libro eliminado exitosamente.");
}
static void actualizar(){
int codigo = Validator.getInt(sc, " Código del libro a actualizar: ");
li = liDAO.consultar(codigo);
if(li==null) {System.out.println( " Este libro no existe."); return;}
li.nombre = Validator.getString(sc, " Ingresar nuevo nombre : ");
li.autor = Validator.getString(sc, " Ingresar nuevo autor : ");
li.precio = Validator.getInt(sc, " Ingresar nuevo precio : ");
li.cantidad = Validator.getInt(sc, " Ingresar nueva cantidad: ");
liDAO.actualizar(li);
System.out.println(" Libro actualizado exitosamente.");
}
static void vender(Libro li){
liDAO.actualizar(li);
}
static Libro consultar(){
int codigo = Validator.getInt(sc, " Código del libro: ");
li = liDAO.consultar(codigo);
if(li==null) System.out.println(" Este libro no existe.");
else System.out.println(" Libro: " + li.toString());
return li;
}
static void listar(){
String st = liDAO.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: ");
li = liDAO.consultar(codigo);
if(li==null) {System.out.println( " Este libro no existe."); return;}
li.cantidad += Validator.getInt(sc, " Ingresar cantidad a comprar: ");
liDAO.actualizar(li);
System.out.println(" Compra exitosa.");
}
}
class Venta{
static Scanner sc = new Scanner(System.in);
static Libro li;
static void vender(){
System.out.println("Bienvenido a comprar");
String comp = "s";
int total = 0, codigo, cantidad, compra;
do{
comp = Validator.getStringSN(sc, "\nDesea comprar (s/n): ");
if(comp.equals("N")) break;
li = DataEntry.consultar(); //en DataEntry
if(li!=null){
cantidad = Validator.getInt(sc, " Cantidad a comprar: ");
if(cantidad <= li.cantidad){
li.cantidad -= cantidad;
DataEntry.vender(li);
compra = cantidad * li.precio;
total += compra;
System.out.println(" Su compra es: " + compra);
} else System.out.println(" Lo sentimos, solo quedan " + li.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, String nombre, String autor, int precio, int cantidad) {
this.codigo = codigo;
this.nombre = nombre;
this.autor = autor;
this.precio = precio;
this.cantidad = cantidad;
}
public String toString() {return codigo + " " + nombre + " " + autor + " " + precio + " " + cantidad;}
}
class DAOFactory{
static LibroDAO getLibroDAO(){ // método que retorna la base de datos concreta
LibroDAO lDAO = new LibroLis();
return lDAO;
}
}
interface LibroDAO{
void insertar(Libro li);
void eliminar(Libro li);
void actualizar(Libro li);
Libro consultar(int codigo);
String listar();
}
class LibroLis implements LibroDAO{
ArrayList<Libro> libros = new ArrayList<>();
public void insertar(Libro li) {libros.add(li);}
public void eliminar(Libro li) {libros.remove(li);}
public void actualizar(Libro li) {libros.set(indice(li.codigo), li);}
public String listar(){
String st = "";
for(Libro li: libros) st = st + " " + li.toString() + "\n";
return st;
}
public Libro consultar(int codigo){
for(Libro li: libros) if(li.codigo==codigo) return li;
return null;
}
public int indice(int codigo){
int index = 0;
for(Libro li:libros) if(li.codigo!=codigo) index++;
else return index;
return -1;
}
}
class Validator {
public static String getString(Scanner sc, String prompt){
System.out.print(prompt);
String s = sc.next();
sc.nextLine();
return s;
}
public static String getStringSN(Scanner sc, String prompt){
String s;
while (true){
s = getString(sc, prompt);
if(s.equalsIgnoreCase("s") || s.equalsIgnoreCase("n")) return s.toUpperCase();
}
}
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;
}
}