Сайт студентов математиков для студентов математиков!
Главная Решение задач по математике Лабораторная работа на тему работа со сканером

Лабораторная работа на тему работа со сканером

ЛАБОРАТОРНАЯ РАБОТА №6-7. НА ТЕМУ РАБОТА СО СКАНЕРОМ. СОЗДАНИЕ МЕНЮ. РАБОТА С ФАЙЛАМИ.

Откройте Java-проект, созданный в лабораторной работе №4. Изменим набор классов Item, Book, MusicCD, MusicDVD и TestItem для организации работы со сканером и возможностью ввода и вывода данных в внешние файлы.

Первая задача – это работа со сканером. Изменим наши классы так, чтобы данные для новых объектов классов пользователь ввод сам с клавиатуры в консоле. Также добавим для удобства общее пользовательское меню для работы с классами, в котором организуем ввод данных для создания объектов классов, сохранение и выгрузку данных в текстовые файлы.

Вторая задача – это организация работы с файлами, а именно сохранение и извлечение данных.

Первая задача

Откройте первый класс – Book.class. Добавим возможность в класс ввода данных пользователем с клавиатуры.

Для возможности работы со сканером подключите библиотеку import java. util. Scanner;

Для работы со сканером создайте следующую процедуру:

public static Book makeNewBook(Scanner in) {

in. skip("rn");

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("rn");

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();

this.item.add(book. load(in)); // добавить объект в коллекцию

}

}

return this;

}

Далее откройте класс, который будет все запускать TestItem.class. Аналогично самостоятельно реализуйте интерфейс java. io. Serializable в этом классе.

Cоздадим в нем два метода Saving и Loading:

public static void Saving(Compar compar){

DataOutputStream out = null;

ObjectOutputStream out1 = null;

try {

out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(new File("test. txt"))));

out1 = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(new File("test1.txt"))));

try {

compar. save(out);

out1.writeObject(compar. getItem());

} catch (IOException e) {

System.out.println("Maybe disk is full, or you haven’t permissions to write");

}

try {

out. close();

out1.close();

} catch (IOException e) {

System.out.println("Ошибка");

}

} catch (FileNotFoundException e) {

System.out.println("Отсутсвует файл.");

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}

public static Compar Loading(Compar compar){

DataInputStream in = null;

ObjectInputStream in1 = null;

try {

in = new DataInputStream(new BufferedInputStream(new FileInputStream(new File("test. txt"))));

in1 = new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File("test1.txt"))));

try {

compar. setItem((ArrayList<Item>)in1.readObject());

} catch (IOException e) {

System.out.println(e. getMessage());

e. printStackTrace();

System.out.println("Maybe disk is full, or you haven’t permissions to write");

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e. printStackTrace();

}

try {

in. close();

in1.close();

} catch (IOException e) {

System.out.println("ошибка");

}

} catch (FileNotFoundException e) {

System.out.println("Отсутсвует файл.");

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

return compar;

}

Далее изменим меню для запуска созданных методов. Для этого измените следующие пункты меню:

else if (menuItem == 5) {

Saving(compar);

}

else if (menuItem == 6) {

compar. getItem().clear();

Loading(compar);

compar. show();

}

При запуске программы, сначала подобавляйте элементы в коллекцию, например, нажав 2 элемент меню.

Затем просмотрите результат, нажав на 1 элемент меню.

Затем сохранитесь в текстовый файл под именем test1.txt. Откройте этот файл в своей папке и проверьте, что данные действительно были туда записаны.

Затем нажмите на 6 элемент меню, с помощью которого будут добавлены объекты в коллекцию из текстового файла. Затем просмотрите результат, нажав на 1 элемент меню и убедитесь, что все объекты из текстового файла были добавлены.

Варианты заданий для самостоятельной работы

1)  Записная книжка контактов. Организовать сохранение объектов из коллекции в текстовый файл и загрузку объектов из текстового файла в коллекцию. Изменить пользовательское меню для добавления работы с внешними файлами.

2)  Система управления доставкой товара. Организовать сохранение объектов из коллекции в текстовый файл и загрузку объектов из текстового файла в коллекцию. Изменить пользовательское меню для добавления работы с внешними файлами.

3)  Телепрограмма. Организовать сохранение объектов из коллекции в текстовый файл и загрузку объектов из текстового файла в коллекцию. Изменить пользовательское меню для добавления работы с внешними файлами.

4)  Гостиница. Организовать сохранение объектов из коллекции в текстовый файл и загрузку объектов из текстового файла в коллекцию. Изменить пользовательское меню для добавления работы с внешними файлами.

5)  Реализация готовой продукции. Организовать сохранение объектов из коллекции в текстовый файл и загрузку объектов из текстового файла в коллекцию. Изменить пользовательское меню для добавления работы с внешними файлами.