Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Создать консольное приложение для управления каталогом книг в нескольких библиотеках. Оно позволяет найти книгу в одной или нескольких библиотеках, заказать ее или сообщить о возврате.
Каждая книга характеризуется следующими полями:
- Уникальный индекс (положительная цифра). Индекс уникален для любого экземпляра книги среди всех книг в библиотеках города
- Автор (строка)
- Название (строка)
- Дата выдачи (если книга выдана на руки, или пустая строка)
- Абонент (строка, если книга выдана на руки, или пустая строка)
В городе существует несколько библиотек. Решением исполкомы организуется предприятие «Центральный библиотечный индекс», который позволит найти и заказать нужную книгу в любой из библиотек.
В каждой из городских библиотек уже есть компьютерный индекс, но каждая из них использует один из следующих видов хранения данных об издании: Text или CSV. В будущем возможны появления систем хранения другого типа, например DB (хранение в базе данных)
Компьютер Центрального библиотечного индекса имеет прямой доступ чтение/запись к сетевой файловой системе каждой из библиотек.
В Text-библиотеках, информация о каждой книге хранится в отдельном файле определенной директории в формате, указанном в приложении 1. В CSV-библиотеках (от английского comma-separated values значения разделенные запятыми, классических общеизвестный формат) каждой книге соответствует отдельная строка в одном из файлов, также лежащих в определенной директории.
С точки зрения нашего приложения, мы можем рассматривать хранилище данных как директорию на диске следующего вида:
Libraries
|-CSV_Lenina
| |- A.csv
| |- B.csv
| |- …
|-CSV_Karbysheva
| |- A.csv
| |- B.csv
| |- …
|-Text_GRSU
| |- 01.properties
| |- 02.properties
| |- …
Каждой библиотеке соответствует директория вида Text_<имя библиотеки> или CSV_<имя библиотеки> в каталоге Libraries.
Приложение «Центральный библиотечный индекс» представляет собой исполняемую java-программу, которая поддерживает интерактивный режим с помощью нескольких команд (вводимых пользователем с консоли) и ответов на них. О каждой из команд которые пользователь может ввести с консоли ниже. Если формат команды не совпадает с указанным, программа возвращает в вывод строку SYNTAXERROR.
Для простоты задачи, названия библиотек, Книг, авторов, абонентов не содержат символов запятая, знак равенства, пробел и кавычка.
Найти книгу в библиотеке.
Формат ввода:
FIND [author=<автор>] [name=<bookname>]
Один из параметров может отсутствовать. Книга считается подходящей по критерию если в ее имя или автора входит целиком указанная пользователем строка. Например, запрос
FIND author=Bulg
Должен вернуть все книги авторов Bulgakov и Bulgarin.
Вывод в случае если книга найдена и может быть взята на абонемент:
FOUND id=<индекс1> lib=<библиотека1>
FOUND id=<индекс2> lib=<библиотека2>
…
Вывод в случае если книга найдена но все экземпляры на руках:
FOUNDMISSING id=<индекс1> lib=<библиотека1> issued=<дата выдачи1>
FOUNDMISSING id=<индекс2> lib=<библиотека2> issued=<дата выдачи2>
Вывод в случае если книга не найдена:
NOTFOUND
Заказать книгу на абонемент
Формат ввода:
ORDER id=<индекс> abonent=<имя абонента>
Вывод в случае если книга успешно заказана:
OK abonent=<имя абонента> date= <текущая дата>
В случае успешного заказа, приложение модифицирует соответствующий файл данных таким образом что для этой книги помечается дата выдачи и имя абонента
Вывод в случае если книга уже у кого-то на руках:
RESERVED abonent=<имя абонента> date= <текущая дата>
Вывод в случае если книга с таким индексом не найдена:
NOTFOUND
Возврат книги в библиотеку.
Формат ввода:
RETURN id=<индекс>
Вывод в случае если книга успешно возвращена:
OK abonent=<имя абонента>
В случае успешного заказа, приложение модифицирует соответствующий файл данных таким образом что для этой книги сбрасывается дата выдачи и имя абонента
Вывод в случае если книга согласно базе данных уже в библиотеке:
ALREADYRETURNED
Вывод в случае если книга с таким индексом не найдена:
NOTFOUND
Выход из приложения
Index=1000
Author=Asimov
Name=Foundation
Issued=2006.12.10 // это поле может содержать пустое значение
Issuedto=Yavorchuk // это поле может содержать пустое значение
1000, Asimov,Foundation,2006.12.10, Yavorchuk
1001,Bulgakov,Margaritha,,
1002,Bulgakov,SobachjeSerdce, 2006.12.06,Slapik
1003,Oreilly,ThinkingInJava,,
Для разработки этого приложения, вам надо обладать базовыми знаниями о
Как инструментарий, мы рекомендуем использовать IDE IntelliJ IDEA или Borland Jbuilder на выбор. Вы можете скачать их из Интернета или найти на дисках с ПО.
Используйте:
Мы хотели бы увидеть в Вашем результате в первую очередь понимание принципов ООП и способность применять их на практике, декомпозицию кода на составляющие модули, а также Вашу способность изучать и применять документацию различного профиля.
Постарайтесь не писать программу «в столбик», по устаревшей схеме процедурного программирования. Подумайте, на какие независимые составные части (модули) вы можете разделить проект; старайтесь связать их посредством интерфейсов. Попытайтесь представить себе возможное изменение требований к проекту, например:
И постройте ваш код таким образом, чтобы такие изменения требовали от вас как можно меньшего объема переписанного кода.
Постарайтесь, чтобы ваш код выглядел читабельно. Комментарии (на английском языке) приветствуются. Следите за тем, сколько новых объектов вы создаете, какие места в вашем коде могут привести к медленной работе приложения, и по возможности оптимизируйте код с этой точки зрения. Заводите константы для предопределенных строк (например, имена HTML-элементов) вместо повторов строк в коде. Разделяйте классы по пакетам. Избегайте использования статических методов. При необходимости, создавайте специальные классы для доступа к объектам (Factories). Попробуйте по мере возможности отделить код, ответственный за отображение данных от кода, реализующего доступ к данным. Прежде чем писать какую-то функциональность самому, поищите может аналогичная уже есть в JDK или пакетах сторонних разработчиков. Подумайте над организацией обработки исключений (Exceptions). Желательно, чтобы вашу программу было легко настроить и запустить.