Iter.next().save(out); // сохранить объект в текстовый файл
ЛАБОРАТОРНАЯ РАБОТА №6-7. НА ТЕМУ РАБОТА СО СКАНЕРОМ. СОЗДАНИЕ МЕНЮ. РАБОТА С ФАЙЛАМИ.
Откройте Java-проект, созданный в лабораторной работе №4. Изменим набор классов Item, Book, MusicCD, MusicDVD и TestItem для организации работы со сканером и возможностью ввода и вывода данных в внешние файлы.
Первая задача – это работа со сканером. Изменим наши классы так, чтобы данные для новых объектов классов пользователь ввод сам с клавиатуры в консоле. Также добавим для удобства общее пользовательское меню для работы с классами, в котором организуем ввод данных для создания объектов классов, сохранение и выгрузку данных в текстовые файлы. Вторая задача – это организация работы с файлами, а именно сохранение и извлечение данных.
Первая задача Откройте первый класс – Book.class. Добавим возможность в класс ввода данных пользователем с клавиатуры. Для возможности работы со сканером подключите библиотеку import java.util.Scanner; Для работы со сканером создайте следующую процедуру:
public static Book makeNewBook(Scanner in) { in.skip("\r\n"); System. out. println("Программное создание объекта класса Book...."); System. out. println("Введите название книги...."); String newnaimenovanie = in.nextLine(); System. out. println("Введите фамилию автора...."); String newname = in.nextLine(); System. out. println("Введите год издательства...."); int newgod = in.nextInt(); System. out. println("Введите издательство...."); String newizdatelstvo = in.nextLine(); System. out. println("Введите цену...."); float newprice = in.nextFloat(); System. out. println("Введите кол-во страниц...."); int newdlitelnost = in.nextInt(); Return new Book (newnaimenovanie, newname, newgod, newizdatelstvo, newprice, newdlitelnost); // возвращение введенных значений в конструктор класса }
Далее самостоятельно измените аналогично классы MusicCD, MusicDVD.
Затем добавим пользовательское меню в класс TestItem. Подключите библиотеку import java.util.Scanner; Создайте следующую процедуру, которая выведет меню на экран:
private static void showMenu() { System. out. println("\n"); System. out. println("1 - Show collection"); System. out. println("2 - Add new Book"); System. out. println("3 - Add new MusicCD"); System. out. println("4 - Add new MusicDVD"); System. out. println("5 - Save program"); System. out. println("6 - Load program"); System. out. println("7 - Exit"); }
Далее, для того, чтобы организовать возможность пользователю выбирать элементы меню с клавиатуры реализуем работу со сканером. Для этого внутри класса TestItem в главной процедуре main объявим сканер и реализуем работу с меню. Для этого измените процедуру main на следующую:
public static void main (String args[]) { Scanner in = new Scanner(System. in). useDelimiter("\r\n"); showMenu (); while(true) { int menuItem = in.nextInt(); if (menuItem == 7) { System. out. println("Bye"); System. exit (0); } else if (menuItem == 1) { //пока ничего не делаем } else if (menuItem == 2) { Book newBook = Book. makeNewBook (in); System. out. println("Информация про книгу: "+newBook.toString()); } else if (menuItem == 3) { MusicCD newMusicCD= MusicCD.makeNewMusicCD(in); System.out.println(" Информацияпромузыку: "+newMusicCD.toString()); } else if (menuItem == 4) { MusicDVD newMusicDVD= MusicDVD.makeNewMusicDVD(in); System.out.println(" Информацияпрофильм: "+newMusicDVD.toString()); } else if (menuItem == 5) { // сохранить данные в файл } else if (menuItem == 6) { // извлечь данные из файла } showMenu (); } }
Далее, организуем работу с коллекциями. Например, мы хотим вводить не по одному объекту, а хотим, чтобы каждый новый объект добавлялся в коллекцию Book, MusicCD, MusicDVD. Создадим специальный класс для работы с коллекцией. Создайте и добавьте в свой пакет новый класс Compar.class.
import java.util.*; public class Compar { private Comparator<Item> comparator = null; // объявление будущей сортировки private ArrayList<Item> item = new ArrayList<Item>(); // создание коллекции списка-массива типа класса Item – общего родительского класса public void setItem(ArrayList<Item> item) { // присвоение коллекции this.item = item; } public ArrayList<Item> getItem(){ // возвращение коллекции
return item; } public void add(Item item_service) { // добавление элементов в коллекцию this.item.add(item_service); } public void setComparator(Comparator<Item> comparator) { this.comparator = comparator; } public void show() { // отображение на экран всей коллекции if (this.comparator!= null) Collections. sort (this.item, this.comparator); // сортировка коллекции Iterator<Item> iter = this.item.iterator(); // установка итератора на начало коллекции while (iter.hasNext()) { // пока не конец коллекции System. out. println(iter.next()); // вывод объектов коллекции } } } Далее изменим базовый родительский класс для реализации интерфейса сортировки по коллекции. Для этого откройте класс Item.class вверху подключите библиотеку import java.util.*;, чтобы были доступны интерфейсы Collection, ArrayList, Iterator, Comparator. Далее измените объявление класса на следующее: public class Item implements Comparable<Item>
Далее необходимо описать в классе метод сортировки, допустим мы будем сортировать коллекцию по возрастанию цены продукции. Для этого добавьте еще один метод в класс: public int compareTo(Item another) { return (int)(this.price - another.getPrice()); }
Далее изменим класс TestItem в главной процедуре main. Измените библиотеку на import java.util.*;, чтобы были доступны интерфейсы Collection, ArrayList, Iterator, Comparator.
Внутри процедуры main создайте новый объект класса Compar:
Compar compar = new Compar();
Затем изменим меню. Для того, чтобы обеспечить создание новых объектов и добавление их в коллекцию нужно вызвать метод compar.add(obj). Например, для объектов книг меню изменится на:
else if (menuItem == 2) { Book newBook = Book. makeNewBook (in); System. out. println("Информация про книгу: "+newBook.toString()); compar.add(newBook); }
Аналогично выполните изменение меню для объектов классов MusicCD и MusicDVD. Далее, чтобы вывести всю отсортированную коллекцию на экран нужно вызвать метод compar.show(). Поэтому измените соответствующее меню на:
else if (menuItem == 1) { compar.show(); } Варианты заданий для самостоятельной работы
1) Записная книжка контактов. Выполнить преобразование класса в коллекцию. Создать пользовательское меню. Организовать добавление объектов в коллекцию и вывод отсортированных объектов коллекции на экран с помощью меню. 2) Система управления доставкой товара. Выполнить преобразование класса в коллекцию. Создать пользовательское меню. Организовать добавление объектов в коллекцию и вывод отсортированных объектов коллекции на экран с помощью меню.
3) Телепрограмма. Выполнить преобразование класса в коллекцию. Создать пользовательское меню. Организовать добавление объектов в коллекцию и вывод отсортированных объектов коллекции на экран с помощью меню. 4) Гостиница. Выполнить преобразование класса в коллекцию. Создать пользовательское меню. Организовать добавление объектов в коллекцию и вывод отсортированных объектов коллекции на экран с помощью меню. 5) Реализация готовой продукции. Выполнить преобразование класса в коллекцию. Создать пользовательское меню. Организовать добавление объектов в коллекцию и вывод отсортированных объектов коллекции на экран с помощью меню.
Вторая задача
Откройте Java-проект, созданный в лабораторной работе №6. Изменим набор классов Item, Book, MusicCD, MusicDVD и TestItem для организации возможности ввода и вывода данных в внешние файлы.
Для этого варианты все классы сохраняемых объектов должны реализовывать интерфейс java.io.Serializable, например изменим базовый класс:
import java.io. *; public class Item implements Comparable<Item>, java.io.Serializable
Аналогично самостоятельно реализуйте интерфейс java.io.Serializable в классах Book, MusicCD, MusicDVD.
Затем необходимо создать в классе-родителе Item.class создать два метода для сохранения (метод save())и извлечения (метод load()) объектов из внешнего файла.
public void save(DataOutputStream out) throws IOException { } public Item load(DataInputStream in) throws IOException { return null; }
Эти методы пока будут только обрабатывать исключения в случае ошибки, а саму реализацию пропишем в классе реализующего коллекции Compar.class. Аналогично самостоятельно реализуйте интерфейс java.io.Serializable в этом классе. Далее создадим два метода для сохранения и загрузки коллекции в текстовый файл:
public void save(DataOutputStream out) throws IOException { out.writeInt(this.item.size()); Iterator<Item> iter = this.item.iterator(); while (iter.hasNext()) { iter.next().save(out); // сохранить объект в текстовый файл } } public Compar load(DataInputStream in) throws IOException { int size = in.readInt(); for (int i = 0; i < size; i++) { String x = in.readUTF(); if (x.equals("Book")){
Booknew book = new Booknew();
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|