Ejercicio
Base de datos de libros
Objetivo
Cree una pequeña base de datos, que se utilizará para almacenar datos sobre libros. Para un determinado libro, queremos conservar la siguiente información:
Título
Autor
El programa debe ser capaz de almacenar 1000 libros, y el usuario podrá:
Agregar datos para un libro
Mostrar todos los libros introducidos (solo título y autor, en la misma línea)
Buscar el libro (s) con un título determinado
Eliminar un libro en una posición conocida (por ejemplo, el libro número 6)
Salir del programa
Sugerencia: para eliminar un elemento de una matriz, debe mover hacia atrás cada elemento que se colocó después de él y disminuir el contador.
Código de Ejemplo
import java.util.*;
public class Main
{
private final static class book
{
public String title;
public String author;
public book clone()
{
book varCopy = new book();
varCopy.title = this.title;
varCopy.author = this.author;
return varCopy;
}
}
public static void main(String[] args)
{
int capacity = 1000;
book [] books = new book [capacity];
boolean repeat = true;
String option;
int amount = 0;
String search;
boolean found;
do
{
System.out.println();
System.out.println("Books database");
System.out.println();
System.out.println("1- Add a new book");
System.out.println("2- Display all books");
System.out.println("3- Exact search for any book");
System.out.println("4- Partial search");
System.out.println("5- Delete a book");
System.out.println("0- Exit");
System.out.print("Enter an option: ");
option = new Scanner(System.in).nextLine();
switch (option)
{
case "1": // Add a new book
if (amount < capacity)
{
System.out.printf("Enter data for book %1$s" + "\r\n",amount + 1);
System.out.print("Enter the name of the book: ");
books[amount].title = new Scanner(System.in).nextLine();
System.out.print("Enter the author: ");
books[amount].author = new Scanner(System.in).nextLine();
amount++;
System.out.println();
}
else
{
System.out.println("Database full");
}
break;
case "2": // Display all books
if (amount == 0)
{
else
{
for (int i = 0;i < amount;i++)
{
System.out.printf("%1$s: Title = %2$s, Author = %3$s" + "\r\n", i + 1, books[i].title, books[i].author);
}
System.out.println();
}
}
break;
case "3": // Exact search
System.out.println("Enter the name of the book");
search = new Scanner(System.in).nextLine();
found = false;
for (int i = 0;i < amount;i++)
{
if (books[i].title.equals(search))
{
System.out.printf("Book %1$s found" + "\r\n",books[i].title);
found = true;
}
}
if (!found)
{
System.out.println("Not found!");
}
System.out.println();
break;
case "4": // Partial search
System.out.println("Enter the search string");
search = new Scanner(System.in).nextLine();
found = false;
for (int i = 0;i < amount;i++)
{
if (books[i].title.toUpperCase().contains(search.toUpperCase()) books[i].author.toUpperCase().contains(search.toUpperCase()))
{
System.out.printf("%1$s found in %2$s" + "\r\n", search, books[i].title);
found = true;
}
}
System.out.println();
if (!found)
{
System.out.println("Not found!");
}
break;
case "5": // Delete
if (amount == 0)
{
System.out.println("No data to delete");
}
else
{
System.out.printf("Enter the number of book to delete (1 to %1$s)" + "\r\n", amount);
int posToDelete = Integer.parseInt(new Scanner(System.in).nextLine()) - 1;
for (int i = posToDelete; i < amount - 1; i++)
{
books[i] = books[i + 1].clone();
}
amount--;
}
break;
case "0": // End
repeat = false;
break;
default:
System.out.println();
System.out.println("Wrong option. Please re-enter\n");
break;
}
} while (repeat);
}
}