Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...