вівторок, 2 квітня 2013 р.

Java. Задача на реалізацію системи реєстрації.

Є бібліотека. Необхідно мати можливості: зареєструвати книгу, зареєструвати юзера, показати список наявних книг (без можливості редагування зовні), зареєстрованих юзерів(без можливості редагування зовні), видати книгу в користування, повернути книгу, показати список книг, які зараз в користуванні (без можливості редагування зовні), реалізувати систему прив"язки книг до користувачів.
Розв"язок - під катом.

Спершу я створила 2 масиви List ListName= new ArrayList(); . Працювала з ними, але виникла проблема прив"язки користувача до книги, так як метод remove "Видаляє перше входження необхідного елемента зі списку, якщо цей елемент є в наявності. Якщо в списку нема цього елементу, все залишається незмінним"(взято з документації Oracle)

Як другий варіант -  створила два об"єкти: user та book в окремому внутрішньому класі. Є ідея перевизначити метод equals та таким чином реалізувати прив"язку. Реалізація нижче.


Отже, поїхали:
1.Власне, сама бібліотеки:


package library;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Lib {
String book, user;

List<String> listBooks = new ArrayList<String>(); // here are only books
List<String> listUsers = new ArrayList<String>(); // here are only users
List listUsers2 = new ArrayList<String>();
List listBooks2 = new ArrayList<String>();
List<Card> forch = new ArrayList<Card>(); // book and user
List<String> inRent = new ArrayList<String>();
List<String> inRent2 = new ArrayList<String>();

// public void checkCard(String ab, String bc) {
// Card forcheck = new Card(book, user);
// }

// register book in a listBooks - add in main
public void regBooks(String book) {
listBooks.add(book);
}

// register user in a listUsers - add in main
public void regUser(String user) {
listUsers.add(user);
}

// return list listBooks - only show, print - in main
public List listOfBooks() {
listBooks2 = Collections.unmodifiableList((List) listBooks);
return listBooks2;
}

// return list listUsers - only show, print - in main
public List listOfUsers() {
listUsers2 = Collections.unmodifiableList(listUsers);
return listUsers2;
}

// remove book from a list of cards
public void getBook(String a, String b) {
if (!listUsers.contains(b))
System.out.println("Register, please!");
else if (!listBooks.contains(a))
System.out.println("Choose another book!");
else {
listBooks.remove(a); // but user is still in system, one user
inRent.add(a);
Card c = new Card(a, b);
forch.add(c);
}
}

// add book to a list of cards
public void returnBooks(String a, String b) {
if (!listUsers.contains(b))
System.out.println("Register, please!");
else if (!inRent.contains(a)) 
System.out.println("This book is from another library!");
else {
listBooks.add(a); // but user is still in system
                        inRent.remove(a);
System.out.println(inRent);
Card d = new Card(a, b);
// need an @override, because equals (in remove) compares by links, not by data forch.remove(d);
System.out.println(forch);
}

}

public List rentBooks() {
inRent2 = Collections.unmodifiableList(inRent); 

// show in main a list of rent books
return inRent2;

}
}


2. Щоб прив"язати видану книгу до користувача - створений окремий клас.


package library;

import java.util.ArrayList;
import java.util.List;

public class Card {
private String book_name;
private String user_name;

public Card(String book_name2, String user_name2) {

this.book_name = book_name2;
this.user_name = user_name2;
}

@Override
public String toString() { // Say to the Card object, that we want String!
return book_name + " - " + user_name;
}

@Override
// of equals method
public boolean equals(Object localname) {
// check does the localname is in the Card class
if (localname.getClass() == Card.class)
// (об"єкт в якого виконується метод equals.поле, що порівнюється.equals(((явне приведення типу ) об"єкта).поле, що порівнюється))
return ((this.book_name.equals(((Card) localname).book_name)) && ((this.user_name
.equals(((Card) localname).user_name))));
return false;
}

}


3. Тестер:
package library;

public class Main {

public static void main(String args[]) {
Lib lib = new Lib();
lib.regBooks("Hobbit");
lib.regBooks("Java");
lib.regUser("Ivanov");
lib.regUser("Petrov");
System.out.println(lib.listOfBooks());
System.out.println(lib.listOfUsers());
lib.getBook("Java", "Petrov");
lib.getBook("Hobbit", "Ivanov");
lib.returnBooks("Java", "Petrov");
System.out.println(lib.rentBooks());


}
}

4. Результат виведення в консоль:


[Hobbit, Java]
[Ivanov, Petrov]
[Hobbit]
[Hobbit - Ivanov]
[Hobbit]

Сподіваюсь, задача виявиться для вас корисною. Якщо є власні варіанти розв"язку - пропонйте в коментарях.

Немає коментарів:

Дописати коментар