Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
75
Добавлен:
14.02.2015
Размер:
171.52 Кб
Скачать

СТО АлтГТУ 13.62.1.0667-2011

Лабораторная работа №4.

Классы файловых потоков. Обработка исключений

Цель работы: получить практические навыки записи объектов в файл и чтения объектов из файла, а также научиться создавать и использовать классы исключений.

В листинге 4.1 представлена программа, которая рассчитывает координаты для перемещения на плоскости геометрических фигур круг и треугольник. Для треугольника также выполняется масштабирование, а для круга – вычисление его площади. В программе описан абстрактный класс shape и на его основе производные классы – треугольник и круг. Класс ErrorTreug используется для обработки исключения, возникающего в случае неверного задания длин сторон треугольника. В программе показана запись объектов класса треугольник в файл и чтение их из файла с использованием механизма сериализации. Программа выполнена в NetBeans IDE 7.3.1.

На рис. 4.1. показан состав проекта программы. Рисунок 4.2 демонстрирует результат выполнения программы

Рисунок 4.1 – Состав проекта программы

Листинг 4.1

// Shape.java

package shape;

import java.io.Serializable;

// базовый класс фигура

public abstract class Shape implements Serializable

{ protected String type;

public Shape() { }

public Shape(String t) { type = t; }

public String GetShape() { return type; }

public abstract void Move(double x1, double y1);

}

// Treug.java

package shape;

// производный класс треугольник

public class Treug extends Shape

{ private double x, y, z;//длины сторон

public Treug(){ }

public Treug(String t, double x1, double y1, double z1) throws ErrorTreug

{ super(t);

if (x1>=y1+z1) throw new ErrorTreug(this.GetShape(),"Сторона А");

if (y1>=x1+z1) throw new ErrorTreug(this.GetShape(),"Сторона В");

if (z1>=x1+y1) throw new ErrorTreug(this.GetShape(),"Сторона С");

else

{x = x1; y = y1; z = z1;}

}

public String toString()

{ return type + ". Длины сторон: a = " + x + ", b = " + y + ", c = " + z;

}

//переопределение метода Move

public void Move(double x1, double y1)

{ String msg = "";

if ((x1 > 0) && (y1 > 0))

msg = "Треугольник передвинули на "

+ x1 + " вправо и на "+ y1 + " вниз";

if ((x1 > 0) && (y1 < 0))

msg = "Треугольник передвинули на "

+ x1 + " вправо и на " + Math.abs(y1) + " вверх";

if ((x1 < 0) && (y1 < 0))

msg = "Треугольник передвинули на " + Math.abs(x1)

+ " влево и на " + Math.abs(y1) + " вверх";

if ((x1 < 0) && (y1 > 0))

msg = "Треугольник передвинули на " + Math.abs(x1)

+ " влево и на " + Math.abs(y1) + " вниз";

System.out.println(type.toUpperCase()+ ". Результат перемещения: "

+ msg);

}

public void Scale(double f)//Масштабирование

{ x *= f; y *= f; z *= f;

String msg = "Новые длины сторон: " + x + " "

+ y + " " + z + " ";

System.out.println(type + ". Результат масштабирования: "

+ msg);

}

public double GetX() { return x; }

public double GetY() { return y; }

public double GetZ() { return z; }

}

// ErrorTreug.java

package shape;

//класс исключений

public class ErrorTreug extends Exception

{//название треугольника

private String name;

//неправильная сторона треугольника

private String side;

public ErrorTreug(){}

public ErrorTreug(String n, String s)

{name = n; side = s;}

public String toString()

{ String st="";

String s = getClass().getName();

if (side.equals("Сторона А")) st =" !!! Перезадайте сторону А";

if (side.equals("Сторона В")) st =" !!! Перезадайте сторону В";

if (side.equals("Сторона С")) st =" !!! Перезадайте сторону С";

return s + ": " + " Невозможно построить " + name + st;

}

}

// Circle.java

package shape;

// производный класс круг

public class Circle extends Shape

{ private double x, y, r;

public Circle(){ }

public Circle(String t, double x1, double y1, double r1)

{ super(t); x = x1; y = y1; r = r1; }

public String toString()

{return type + ". Координаты центра: x = " + x + ", y = " + y + ", r = " + r;

}

//переопределение метода Move

public void Move(double x1, double y1)

{ x += x1; y += y1;

String msg = "Новые координаты центра " + x + " " + y;

System.out.println(type + ". Результат перемещения: " + msg);

}

public double GetSquare()//вычисление площади

{ return Math.PI * Math.pow(r, 2); }

}

// JavaApplication4.java

package javaapplication4;

import shape.*;

import java.util.Scanner;

import java.io.*;

public class JavaApplication4

{ public static void main(String[] args)throws IOException

{ int pr;

double t1, t2, t3, t4, t5, t6;

System.out.println("1 - Задать круг");

System.out.println("2 - Задать треугольник");

Scanner in = new Scanner(System.in);

pr = in.nextInt();

Shape fig1, fig2,fig3;

Circle Cr1; //окружность

Treug Tr1; //треугольник

if (pr == 1)

{ System.out.println("Вв. координату центра x:");

t1 = in.nextDouble();

System.out.println("Вв. координату центра y:");

t2 = in.nextDouble();

System.out.println("Вв. радиус круга:");

t3 = in.nextDouble();

fig1 = new Circle("Окружность", t1, t2, t3);

System.out.println(fig1);

System.out.println("Передвинуть на x:");

t4 = in.nextDouble();

System.out.println("Передвинуть на y:");

t5 = in.nextDouble();

fig1.Move(t4, t5);

if(fig1 instanceof Circle)

{ Cr1=(Circle)fig1;

System.out.println(fig1.GetShape()+ ". Площадь: " + Cr1.GetSquare());}

}

if (pr == 2)

{ try

{

System.out.println("Вв. сторону a:");

t1 = in.nextDouble();

System.out.println("Вв. сторону b:");

t2 = in.nextDouble();

System.out.println("Вв. сторону c:");

t3 = in.nextDouble();

fig2 = new Treug("Треугольник", t1, t2, t3);

System.out.println(fig2);

FileOutputStream fos = new FileOutputStream("E:\\output.bin");

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(fig2);

oos.close();

System.out.println("Read object:");

FileInputStream fis = new FileInputStream("E:\\output.bin");

ObjectInputStream ois = new ObjectInputStream(fis);

fig3 = (Treug)ois.readObject();

ois.close();

System.out.println(fig3);

System.out.println("Передвинуть на x:");

t4 = in.nextDouble();

System.out.println("Передвинуть на y:");

t5 = in.nextDouble();

System.out.println("Масштаб:");

t6 = in.nextDouble();

fig2.Move(t4, t5);

if(fig2 instanceof Treug)

{ Tr1=(Treug)fig2; Tr1.Scale(t6);}

}

catch (ErrorTreug e) { System.out.println(e);}

catch(ClassNotFoundException e) { e.printStackTrace(); }

catch(IOException e) { e.printStackTrace(); }

}

}

}

Рисунок 4.2 – Результат выполнения программы

Задание

Изменить программу индивидуального варианта лаб. работы. №3 (задание 1): создать класс исключений из индивидуального варианта, сгенерировать и обработать исключение этого класса в процессе выполнения программы. Обработчик исключения должен предлагать исправить возникшую ошибку. В программе реализовать возможность записи объектов в файл и чтения объектов из файла и предусмотреть обработку возникающих при этом исключительных ситуаций.

  1. Класс, генерирующий и обрабатывающий исключения при попытке создать отрезок нулевой длины.

  2. Класс, генерирующий и обрабатывающий исключения при попытке создать многочлен нулевой степени.

  3. Класс, генерирующий и обрабатывающий исключения при попытке создать журнал с пустым наименованием или адресом.

  4. Класс, генерирующий и обрабатывающий исключения при попытке создать дом с неверным годом постройки

  5. Класс, генерирующий и обрабатывающий исключения при попытке задать отрицательный объём HDD

  6. Класс, генерирующий и обрабатывающий исключения при попытке задать объём двигателя меньше 1 литра.

  7. Класс, генерирующий и обрабатывающий исключения при попытке выполнить «закачку» информации, если «отсутствует Bluetooth/IR».

  8. Класс, генерирующий и обрабатывающий исключения при попытке создать книгу с незаданным автором

  9. Класс, генерирующий и обрабатывающий исключения при постановке в очередь на печать более 10 документов

  10. Класс, генерирующий и обрабатывающий исключения при попытке установить режим работы во время отсутствия подключения

  11. Класс, генерирующий и обрабатывающий исключения в ситуации когда замечаний в 2 раза больше чем поощрений.

  12. Класс, генерирующий и обрабатывающий исключения в ситуации когда абитуриент не сможет поступить ни на одну из специальностей.

  13. Класс, генерирующий и обрабатывающий исключения в ситуации когда в зачётке одни двойки.

  14. Класс, генерирующий и обрабатывающий исключения при попытке убрать паруса, если они уже убраны.

4

Соседние файлы в папке Метод. ук. к л. р