Exercise
Books database
Objetive
Create a small database, which will be used to store data about books. For a certain book, we want to keep the following information:
Title
Author
The program must be able to store 1000 books, and the user will be allowed to:
Add data for one book
Display all the entered books (just title and author, in the same line)
Search for the book(s) with a certain title
Delete a book at a known position (for example, book number 6)
Exit the program
Hint: to delete an item in an array, you must move backwards every item which was placed after it, and the decrease the counter.
Example Code
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);
}
}