4.11 - 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.


Solution

using System;
public class BooksDatabase
{

struct book 
{
public string title;
public string author;
}

public static void Main ()  
{

int capacity = 1000;  
book [] books =new book [capacity];  
bool repeat=true;  
string option;     
int amount=0;      
string search;     
bool found;       

do
{
Console.WriteLine();
Console.WriteLine("Books database");
Console.WriteLine();
Console.WriteLine("1- Add a new book");
Console.WriteLine("2- Display all books");
Console.WriteLine("3- Exact search for any book");
Console.WriteLine("4- Partial search");
Console.WriteLine("5- Delete a book");
Console.WriteLine("0- Exit");
Console.Write("Enter an option: ");
option = Console.ReadLine();

switch (option)
{
case "1": // Add a new book
if (amount < capacity )
{
Console.WriteLine("Enter data for book {0}",amount+1);
Console.Write("Enter the name of the book: ");
books[amount].title= Console.ReadLine();

Console.Write("Enter the author: ");
books[amount].author= Console.ReadLine();

amount++;
Console.WriteLine();
}
else
Console.WriteLine("Database full");
break;


case "2":  // Display all books
if (amount == 0)
Console.WriteLine("No data to search");
else
{
for(int i = 0;i < amount;i++)
Console.WriteLine("{0}: Title = {1},  Author = {2}",
i+1, books[i].title, books[i].author);
Console.WriteLine();
}
break;
case "3":  // Exact search
Console.WriteLine("Enter the name of the book");
search=Console.ReadLine();
found = false;

for (int i = 0;i < amount;i++)
if(books[i].title==search)
{
Console.WriteLine("Book {0} found",books[i].title);
found = true;
}

if (! found)
Console.WriteLine("Not found!");

Console.WriteLine();

break;
case "4":  // Partial search
Console.WriteLine("Enter the search string");
search = Console.ReadLine();
found = false;

for (int i = 0;i < amount;i++)
if(books[i].title.ToUpper().Contains(search.ToUpper())
|| books[i].author.ToUpper().Contains(search.ToUpper()))
{
Console.WriteLine("{0} found in {1}",
search, books[i].title);
found = true;
}

Console.WriteLine();

if (! found)
Console.WriteLine("Not found!");

break;
case "5":  // Delete
if (amount == 0)
Console.WriteLine("No data to delete");
else
{        
Console.WriteLine(
"Enter the number of book to delete (1 to {0})", amount);
int posToDelete = 
Convert.ToInt32(Console.ReadLine()) - 1;

for (int i = posToDelete; i < amount - 1; i++)
books[i] = books[i+1];

amount--;
}
break;
case "0":  // End
repeat=false;
break;
default:
Console.WriteLine();
Console.WriteLine("Wrong option. Please re-enter\n");
break;
}

}
while(repeat);
}
}

Popular Posts