Список использованных источников

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ "ОМСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ" Кафедра «Автоматизированные системы обработки информации и управления»   ОТЧЕТ ПО ЛАБОРАТОРНЫМ РАБОТАМ по дисциплине «Объектно-ориентированное программирование » за 3-й семестр       Принял: ст. преподаватель Шлома Д.Н.                                                              подпись, дата Выполнил: студент гр. ЗИВТ-172 Михаенко С.И.                                                              подпись, дата             Омск 2018 Содержание   Лабораторная работа №1                                                                                                   3 Лабораторная работа №2                                                                                                   8 Лабораторная работа №3.1                                                                                              13 Лабораторная работа №3.2                                                                                              20 Лабораторная работа №4                                                                                                 28 Список литературы                                                                                                            34    

Лабораторная работа №1

Вариант №2

Задание:

Ввести n строк с консоли. Упорядочить и вывести строки в порядке возрастания их длин, а также (второй приоритет) значений этих их длин.

Ход работы:

Для работы выбран язык программирования Java версии 10.0.2. Проект разработан в среде разработки Intelij IDEA community edition.

В данной лабораторной работе для отделения функциональной части от реализации пользовательского интерфейса был создан класс SortString.

В данном классе были созданы следующие методы:

● readStrings() - Метод, считывающий введенные строки в массив strings

● sort() - Метод, сортирующий массив строк посредством java.util.Arrays.sort()

● print() - Выводит результат

Для запуска программы необходимо убедится, что установлено Java Runtime Environment (JRE). Для этого в коммандной строке Windows набрать команду java –version и нажав Enter убедится, что в командной строке появился текст, содержщий версию JRE (рисунок 1).

Рисунок 1 - Версия Java

Для запуска программы необходимо в ее директории открыть командную строку и набрав команду java -classpath <Путь к классу> <Имя класса> нажать Enter

 

На нижеследующих рисунках, приведены скриншоты работающей программы.

На рисунке 2 приведен пример работы программы

Рисунок 2 - Пример работы программы (лаб. 1)

Рисунок 3 - Пример работы программы с продолжением работы (лаб. 1)

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

 

 

Класс Lr1

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.Scanner;

 

public class Lr1

{

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

 

{

   BufferedReader scanner = new BufferedReader(new InputStreamReader(System.in, "Cp1251"));

 

       while (true)

       {

           System.out.println("Лабораторная работа №1. Выполнил:студент гр ЗИВТ-172 Михаенко С.И.");

           System.out.println("Задача: Ввести n строк с консоли. Упорядочить и вывести строки в порядке возрастания их длин");

           SortStrings sortStrings = new SortStrings();

           sortStrings.readStrings();

           sortStrings.sort();

           sortStrings.print();

           System.out.println("");

           System.out.println("Завершить работу с программой (да/нет)");

           String a = scanner.readLine();

           if (a.equals("да") == true)

           {

               break;

           }

 

       }

   }

}

Класс SortStrings

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.Arrays;

import java.util.Comparator;

import java.util.Scanner;

 

public class SortStrings {

 

private String[] strings;

private int N;

public static void SortStrings(){

 

}

 

public void readStrings() throws IOException {

   int N;

   BufferedReader scanner = new BufferedReader(new InputStreamReader(System.in, "Cp1251"));

   System.out.print("Введите число строк: ");

   N = Integer.parseInt(scanner.readLine());

   //scanner.re();

 

   strings = new String[N];

   System.out.println("Введите строки: ");

   for(int i = 0; i < N; i++) {

       strings[i] = scanner.readLine();

   }

}

 

public void sort(){

           /*

   Сортировка с помощью метода sort(),

   которому передается массив строк и объект

   класса Comparator с определенным методом compare()

   */

   Arrays.sort(strings, new Comparator<String>()

   {

       public int compare(String s1, String s2)

       {

           //Сравниваем строки по длине

           if(s1.length() > s2.length())

               return 1;

           else if(s1.length() < s2.length())

               return -1;

           else

               //Сравниваем по содержимому

               return s1.toString().compareTo(s2.toString());

       }

   });

}

 

public void print()

{

   System.out.println("Результат сортировки:");

   for(String str : strings)

   {

       int b = 0;

       b = str.length();

       System.out.println(str +" "+"("+ b+")");

 

   }

}

 

 

}

 

 

Лабораторная работа №2

Вариант №2

Задание:

Создать класс “Обыкновенная дробь” с конструктором, методами сокращения и вывода дроби, а также с методами арифметических операций между двумя дробями.

Ход работы:

Для работы выбран язык программирования Java версии 10.0.2. Проект разработан в среде разработки Intelij IDEA community edition.

В данной лабораторной работе для отделения функциональной части от реализации пользовательского интерфейса был создан класс дроби - Fraction.

В данном классе были созданы следующие методы:

● Fraction() - Конструктор класса, принимающий числитель и знаменатель

● Print() - Возвращает дробь в виде строки для вывода на экран

● simplify() - Метод сокращения дроби

● gcd() - Наибольший общий делитель, нужен для сокращения

● add() - Метод сложения текущей дроби с переданной в метод

● diff() - Вычитание дроби

● mult() - Умножение дроби

● div() - Деление дроби

Для запуска программы необходимо в ее директории открыть командную строку и набрав команду java -classpath <Путь к классу> <Имя класса> нажать Enter

 

На рисунке 4 приведен скриншот работающей программы.

 

Рисунок 4 - Пример работы программы (лаб. 2)

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

Исходный код программы:

Класс Lr2

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.Scanner;

public class Lr2 {

 

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

   Scanner scanner = new Scanner(System.in);

 

   while (true) {

       boolean err = false;

       System.out.println("Лабораторная работа №2. Выполнил: студент гр. ЗИВТ-172 Михаенко С.И.");

       System.out.println("Задача: Вывести на экран сокращенную и не сокращенную дробь Z");

       BufferedReader reader = new BufferedReader(new InputStreamReader(System.in, "Cp1251"));

       System.out.println("Введите 10 чисел через запятую:\n");

       String str = reader.readLine();

       String[] numbers = str.split(",");

       int[] nums = new int[10];

       for(int i = 0; i < 10; i++){

           try {

               nums[i] = Integer.parseInt(numbers[i].trim());

           } catch (java.lang.NumberFormatException | java.lang.ArrayIndexOutOfBoundsException e){

               System.out.println("Неверные данные\n");

               err = true;

               break;

           }

       }

       if(err){

           continue;

       }

 

       int a = nums[0];

       int b = nums[1];

       int c = nums[2];

       int d = nums[3];

       int e = nums[4];

       int f = nums[5];

       int g = nums[6];

       int h = nums[7];

       int k = nums[8];

       int l = nums[9];

 

       System.out.println("Получены следующие дроби:");

       Fraction ab = new Fraction(a, b);

       System.out.printf("a/b=%s\n", ab.print());

      Fraction cd = new Fraction(c, d);

       System.out.printf("c/d=%s\n", cd.print());

       Fraction ef = new Fraction(e, f);

       System.out.printf("e/f=%s\n", ef.print());

       Fraction gh = new Fraction(g, h);

       System.out.printf("g/h=%s\n", gh.print());

       Fraction kl = new Fraction(k, l);

       System.out.printf("k/l=%s\n", kl.print());

 

       System.out.println("\nРезультат вычисления (a/b+c/d)/(e/f)*(g/h-k/l):");

       //Вызываем методы объекта Fraction для подсчета формулы

       ab = (ab.add(cd).div(ef).mult(gh.diff(kl)));

 

       System.out.printf("%s = %s\n", ab.print(), ab.simplify().print());

 

       System.out.println("Завершить работу с программой (да/нет)");

        String m = reader.readLine();

       if (m.equals("да"))

       {

           break;

       }

   }

}

}

 

Класс Fraction

public class Fraction {

private int numenator;

private int denominator;

 

public Fraction(int numenator, int denominator) {

   this.numenator = numenator;

   this.denominator = denominator;

}

 

public String print(){

   return numenator + "/" + denominator;

}

//Метод сокращения дроби

public Fraction simplify(){

   int gcd = gcd(Math.abs(numenator), Math.abs(denominator));

   numenator /= gcd;

   denominator /= gcd;

   return this;

}

//Метод нахождения наибольшего общего делителя

private int gcd(int a, int b) {

   if (b == 0)

       return Math.abs(a);

   return gcd(b, a % b);

}

//Сложение дробей

public Fraction add(Fraction f){

   numenator *= f.denominator;

   numenator += f.numenator*denominator;

   denominator *= f.denominator;

   this.simplify();

   return this;

}

// Вычитание дроби

public Fraction diff(Fraction f) {

   numenator *= f.denominator;

   numenator -= f.numenator*denominator;

   denominator *= f.denominator;

   this.simplify();

   return this;

}

// Умножение дроби

public Fraction mult(Fraction f) {

   numenator *= f.numenator;

   denominator *= f.denominator;

   return this;

}

// Деление дроби

public Fraction div(Fraction f) {

   numenator *= f.denominator;

   denominator *= f.numenator;

   this.simplify();

   return this;

}

}

 

Лабораторная работа №3.1

Вариант №2

Задание:

Прикладная область «Оценка успеваемости». В университете есть следующие категории учащихся: Студенты, абитуриенты на курсах, школьники спец. школы при ВУЗе, разработать программу оценивающую успеваемость учащихся. Оценка успеваемости студентов производится через контрольные недели, абитуриентов на основе тестов по 100 бальной шкале, школьников по 5-и бальной шкале с коэффициентами.

Ход работы:

Для работы выбран язык программирования Java версии 10.0.2. Проект разработан в среде разработки Intelij IDEA community edition.

В данной лабораторной работе для обеспечения масштабируемости программы были созданы несколько классов, реализующий один интерфейс - IAssessment единственным методом assess(), реализации которого подсчитывают оценку успеваемости обучающегося той или иной категории. Класс подсчета успеваемости абитуриента: EnrolleEvaluation, класс подсчета успеваемости студента: StudentEvaluation, класс подсчета успеваемости школьника: SchoolchildEvaluation. Все эти классы имеют единственный метод assess(), возвращающий оценку успеваемости.

Успеваемость студента подсчитывается исходя из его среднего балла за контрольную неделю.

Успеваемость абитуриента подсчитывается исходя из его среднего балла (0 - 100), приведенного к пятибальной шкале.

Успеваемость школьника - это среднее арифметическое его оценок, заданных в виде <коэффициент> <оценка>.

Для получения массива чисел из входных данных создан дополнительный класс ReaderOfNumbers со статическим методом readArray().

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

За вывод результата отвечает метод printResult(), принимающий на вход объект класса, реализующего IAssessment, и вызывающий его метод assess().

Ниже приведены скриншоты работы программы.

Рисунок 4 - Пример работы программы (лаб. 3.1)

 

Рисунок 5 - Пример работы программы (лаб. 3.1)

 

 

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

 

Исходный код программы:

Класс Lr3_1

package lr3_1;

 

import java.util.Scanner;

 

public class Lr3_1 {

public static void main(String[] args) {

   System.out.println("Лабораторная работа №3. Выполнил: студент гр. ЗИВТ-172 Михаенко С.И.");

   System.out.println("Задача:Прикладная область «Оценка успеваемости». \nВ университете есть следующие категории учащихся: \nСтуденты, абитуриенты на курсах, школьники спец.\nшколы при ВУЗе, разработать программу оценивающую успеваемость \nучащихся. Оценка успеваемости студентов производится \nчерез контрольные недели, абитуриентов на основе \nтестов по 100 бальной шкале, школьников по\n5-и бальной шкале с коэффициентами");

 

   /*

   Меню выбора типа обучающегося для подсчета успеваемости/

   В зависимости от выбора пользователя, создается соответствующий объект:

   школьник, абитуриент или студент, который затем передается в метод printResult()

   */

   boolean check = true;

   while (check) {

       System.out.println("Введите число (1-3) для выбора способа обучения и введите баллы, далее нажмите <Enter>:\n1 - абитуриент\n2 - школьник\n3 - студент\n0 - Выйти");

       int way = getNumberOfWay();

       switch (way) {

           case 1:

               System.out.println("Введите баллы через пробел");

               EnrolleeEvaluation enrolleeEvaluation = new EnrolleeEvaluation();

               printResult(enrolleeEvaluation);

               break;

           case 2:

               System.out.println("Введите оценки через пробел");

               SchoolchildEvaluation schoolchildEvaluation = new SchoolchildEvaluation();

               printResult(schoolchildEvaluation);

               break;

           case 3:

               System.out.println("Введите баллы через пробел");

               StudentsEvaluation studentsEvaluation = new StudentsEvaluation();

               printResult(studentsEvaluation);

               break;

           case 0:

               check = false;

               break;

           default:

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

       }

   }

}

//Метод вывода результата, в который передается объект класса,

//реализующий интерфейс IAssessment

public static void printResult(IAssessment evaluation) {

   //Вызов метода подсчета успеваемости

   int res = evaluation.assess();

   System.out.println("Оценка успеваемости: " + res + "\n");

}

 

public static int getNumberOfWay(){

   Scanner scanner = new Scanner(System.in);

   int res = scanner.nextInt();

   scanner.nextLine();

   return res;

}

}

 

 

Интерфейс IAssessment

package lr3_1;

 

public interface IAssessment {

int assess();

}

 

 

Класс EnrolleeEvaluation

package lr3_1;

//Класс подсчета успеваемости абитуриента

public class EnrolleeEvaluation implements IAssessment {

public int assess(){

   int[] array = ReaderOfNumbers.readArray();

   int summ = 0;

   for(int i = 0; i < array.length; i++){

       summ += array[i];

   }

   summ /= array.length;

   summ /= 20;

   return summ;

 

}

}

 

Класс SchoolchildEvaluation

package lr3_1;

//Класс подсчета успеваемости школьника

public class SchoolchildEvaluation implements IAssessment {

public int assess(){

   int[] array = ReaderOfNumbers.readArray();

   int num = 0, summ = 0, k = 0;

   for(int i = 0; i < array.length; i++){

       if(i % 2 == 0){

           k = array[i];

           num += k;

       } else {

           summ += k * array[i];

       }

   }

   summ /= num;

   return summ;

}

}

 

Класс StudentsEvaluation

package lr3_1;

//Класс подсчета успеваемости студента

public class StudentsEvaluation implements IAssessment {

 

public int assess(){

   int[] array = ReaderOfNumbers.readArray();

   int summ = 0;

   for(int i = 0; i < array.length; i++){

       summ += array[i];

   }

   summ /= array.length;

   return summ;

}

}

 

 

ReaderOfNumbers

package lr3_1;

 

import java.util.Scanner;

 

//Класс со статическим методом чтения строки, возвращающим массив целых чисел

public class ReaderOfNumbers {

public static int[] readArray(){

   Scanner scanner = new Scanner(System.in);

   String str = scanner.nextLine();

   str.trim();

   String[] strings = str.split(" ");

   int[] arr = new int[strings.length];

   for(int i = 0; i < strings.length; i++){

       arr[i] = Integer.parseInt(strings[i]);

   }

   return arr;

}

}

 

 

Лабораторная работа №3.2

Вариант №2

Задание:

Создать класс треугольник, члены класса - длины 3-х сторон. Предусмотреть в классе методы проверки существования треугольника, вычисления и вывода сведений о фигуре – длины сторон, углы, периметр, площадь. Создать производный класс – равносторонний треугольник, перегрузить в классе проверку, является ли треугольник равносторонним и метод вывода сведений о фигуре. Написать программу, демонстрирующую работу с классом: дано K треугольников и L равносторонних треугольников, найти среднюю площадь для K треугольников и наибольший равносторонний треугольник.

 

Ход работы:

Для работы выбран язык программирования Java версии 10.0.2. Проект разработан в среде разработки Intelij IDEA community edition.

В данной лабораторной работе было создано два класса: класс треугольника Triangle, реализующий интерфейс ITriangle и наследующий его класс равностороннего треугольника EquilateralTriangle, также реализующий ITriangle.

Класс Triangle содержит следующие методы:

● Triangle() - Конструктор класса;

● getInfo() - Метод, выводящий в консоль информацию о фигуре;

● existCheck() - Метод проверки существования треугольника

● GetAngleN() - Методы для получения углов треугольника

● getPerimetr() - Метод для расчета периметра

● getArea() - Метод для расчета площади

Класс EquilateralTriangle содержит переопределенный метод existCheck() и метод getInfo()

 

Ниже приведен скриншот работы программы.

Рисунок 6 - Пример работы программы (лаб. 3.2)

В результате выполнения лабораторной работы разработаны программа, генерирующая K треугольников и L равносторонних треугольников, которая рассчитывает среднюю площадь для K треугольников и находит наибольший по площади равносторонний треугольник.

Исходный код программы:

Класс Lr3_2

package lr3_2;

 

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.UnsupportedEncodingException;

import java.util.ArrayList;

import java.util.Random;

import java.util.Scanner;

 

public class Lr3_2 {

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

   Scanner scanner = new Scanner(System.in);

   while (true) {

       System.out.println("Лабораторная работа №3.2. Выполнил: студент гр. ЗИВТ-172 Михаенко С.И.");

       System.out.println("Задание: Создать класс треугольник, члены класса - длины 3-х сторон. \nПредусмотреть в классе методы проверки существования треугольника, \nвычисления и вывода сведений о фигуре – длины сторон, \nуглы, периметр, площадь. Создать производный класс – равносторонний \nтреугольник, перегрузить в классе проверку, является ли \nтреугольник равносторонним и метод вывода сведений о \nфигуре. Написать программу, демонстрирующую работу с классом: \nдано K треугольников и L равносторонних треугольников, \nнайти среднюю площадь для K треугольников и наибольший равносторонний \nтреугольник.");

       Scanner in = new Scanner(System.in);

       System.out.println("Введите общее количество треугольников:");

       int N = in.nextInt(); //Количество треугольников

       System.out.println("Введите количество равносторонних треугольников:");

       int K = in.nextInt(); //Количество равносторонних треугольников

       int i = 0;

       double areaSumm = 0;

       ArrayList<ITriangle> triangles = new ArrayList<>(); //Список с треугольниками

       ArrayList<EquilateralTriangle> equilateralTriangles = new ArrayList<>(); //Список с равносторонними треугольниками

       Random rand = new Random();

 

       //Генерация треугольников

       while (i < N) {

           double side1 = rand.nextDouble() * 10;

           double side2 = rand.nextDouble() * 10;

       /*По следующей формуле создается рандомная сторона треугольника так,

       чтобы он заведомо существовал*/

           double side3 = Math.sqrt(Math.pow(side1, 2) + Math.pow(side2, 2) - 2 * side1 * side2 * Math.cos(rand.nextDouble() * Math.PI));

           //Но на всякий случай производится проверка на существование

           if (Triangle.existCheck(side1, side2, side3)) {

               triangles.add(new Triangle(side1, side2, side3));

           } else

               i--;

           i++;

       }

 

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

       i = 0;

       while (i < K) {

           double side1 = rand.nextDouble() * 10;

           if (EquilateralTriangle.existCheck(side1, side1, side1)) {

               equilateralTriangles.add(new EquilateralTriangle(side1));

           } else

               i--;

           i++;

       }

 

       //Подсчет средней площади треугольников

       for (ITriangle triangle : triangles) {

           areaSumm += triangle.getArea();

           triangle.getInfo();

       }

       double answer = (N != 0) ? areaSumm / N : 0;

       System.out.printf("Средняя площадь для %d треугольников: %.3f\n", N, answer);

 

       //Поиск максимального равностороннего треугольника

       EquilateralTriangle MaxTriangle = equilateralTriangles.get(0);

       for (EquilateralTriangle triangle : equilateralTriangles) {

           MaxTriangle = (triangle.getArea() > MaxTriangle.getArea()) ? triangle : MaxTriangle;

           triangle.getInfo();

       }

       System.out.printf("Максимальный равносторонний треугольник:\n");

       MaxTriangle.getInfo();

       BufferedReader reader = new BufferedReader(new InputStreamReader(System.in, "Cp1251"));

          System.out.println("Завершить работу с программой (да/нет)");

       String m = reader.readLine();

       if (m.equals("да"))

       {

           break;

       }

   }

 

}

}

 

Интерфейс ITriangle

package lr3_2;

 

public interface ITriangle {

 

void getInfo();

 

double getAngle1();

 

double getAngle2();

 

double getAngle3();

 

double getPerimetr();

 

double getArea();

}

 

 

Класс Triangle

package lr3_2;

 

public class Triangle implements ITriangle{

 

private double side1;

private double side2;

private double side3;

 

public Triangle(double side1, double side2, double side3) {

   this.side1 = side1;

   this.side2 = side2;

   this.side3 = side3;

}

 

public void getInfo(){

   System.out.printf("Стороны треугольника: %.2f, %.2f, %.2f\n", side1, side2, side3);

   System.out.printf("Углы треугольника: %.2f, %.2f, %.2f\n", getAngle1(), getAngle2(), getAngle3());

   System.out.printf("Периметр: %.2f\n", getPerimetr());

   System.out.printf("Площадь: %.2f\n", getArea());

 

}

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

public static boolean existCheck(double side1, double side2, double side3){

   return (side1 < side2 + side3) && (side2 < side3 + side1) && (side3 < side1 + side2);

}

 

public double getAngle1(){

   return Math.acos((Math.pow(side1, 2)+Math.pow(side2, 2)-Math.pow(side3, 2))/(2*side1*side2));

}

 

public double getAngle2(){

   return Math.acos((Math.pow(side1, 2)+Math.pow(side3, 2)-Math.pow(side2, 2))/(2*side1*side3));

}

 

public double getAngle3(){

   return Math.acos((Math.pow(side3, 2)+Math.pow(side2, 2)-Math.pow(side1, 2))/(2*side3*side2));

}

 

public double getPerimetr(){

   return side1 + side2 + side3;

}

 

public double getArea() {

   return Math.sqrt(

           getPerimetr()/2*

                   (getPerimetr()/2 - side1)*

                   (getPerimetr()/2 - side2)*

                   (getPerimetr()/2 - side3)

   );

}

 

public double getSide1() {

   return side1;

}

 

public void setSide1(double side1) {

   this.side1 = side1;

}

 

public double getSide2() {

   return side2;

}

 

public void setSide2(double side2) {

   this.side2 = side2;

}

 

public double getSide3() {

   return side3;

}

 

public void setSide3(double side3) {

   this.side3 = side3;

}

}

 

 

Класс EquilateralTriangle

package lr3_2;

 

public class EquilateralTriangle extends Triangle implements ITriangle{

 

private static double ALPHA = 0.001;

public EquilateralTriangle(double side) {

 

   super(side, side, side);

}

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

public static boolean existCheck(double side1, double side2, double side3) {

   return (Math.abs(side1 - side2)<ALPHA) && (Math.abs(side2 - side3)<ALPHA);

}

@Override

public void getInfo(){

   System.out.printf("Сторона равностороннего треугольника: %.2f\n", super.getSide1());

   System.out.printf("Периметр: %.2f\n", getPerimetr());

   System.out.printf("Площадь: %.2f\n", getArea());

}

}

 

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

Вариант №2

Задание:

Ввести число с помощью поля TextField. Добавить кнопку типа ToggleButton и Label. Когда кнопка нажата на элементе Label число выводится таким же каким оно было введено, когда кнопка не нажата число выводится в обратном порядке. Хранить число с помощью стека.

Ход работы:

Для работы выбран язык программирования Java версии 10.0.2. Проект разработан в среде разработки Intelij IDEA community edition.

В данной лабораторной работе использовалась платформа для создания приложений с графическим интерфейсом JavaFX. Разметка окна приложения расположена в файле sample.fxml. Логика приложения описана в классе Controller. С помощью метода addEventHandler к текстовому полю было привязано событие типа KEY_RELEASED, а к кнопке два события: MOUSE_PRESSED и MOUSE_RELEASED.

По нажатии на кнопку вызывается метод mouseDown(), в котором происходит вывод числа в обратном порядке. А при отжатии кнопки происходит вывод исходного числа.

 

Ниже приведены скриншоты работы программы.

Рисунок 7 - Пример работы программы (лаб. 4)

Рисунок 8 - Пример работы программы (лаб. 4)

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

Исходный код программы:

Класс Main

package sample;

 

import javafx.application.Application;

import javafx.fxml.FXMLLoader;

import javafx.scene.Parent;

import javafx.scene.Scene;

import javafx.stage.Stage;

 

public class Main extends Application {

 

@Override

public void start(Stage primaryStage) throws Exception{

   Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));

   primaryStage.setTitle(" ");

   primaryStage.setScene(new Scene(root, 600, 600));

  primaryStage.show();

}

 

 

public static void main(String[] args) {

   launch(args);

}

}

 

 

Класс Controller

package sample;

 

import javafx.event.ActionEvent;

import javafx.event.EventHandler;

import javafx.fxml.FXML;

import javafx.scene.control.Button;

import javafx.scene.control.Label;

import javafx.scene.control.TextField;

import javafx.scene.input.MouseEvent;

import javafx.scene.input.KeyEvent;

import java.util.Stack;

 

public class Controller {

@FXML

private Button button; //Кнопка

@FXML

private Label label; //Label, куда будет выводиться число

@FXML

private TextField textfield; // Тектовое поле для ввода числа

 

// Метод initialize() выполняется при создании класса Controller

@FXML

public void initialize() {

   //Привязываем событие к нажатию клавиши мыши

   button.addEventHandler(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>() {

       @Override

       public void handle(MouseEvent event) {

           mouseDown();

       }

   });

   //Привязываем событие к отжатию клавиши мыши

   button.addEventHandler(MouseEvent.MOUSE_RELEASED, new EventHandler<MouseEvent>() {

       @Override

       public void handle(MouseEvent event) {

           //После отжатия кнопки мыши, записываем введенное число в Label

           //то есть показываем число как есть

           label.setText(textfield.getText());

       }

   });

   //Привязываем событие к вводу символа в тектовое поле

   textfield.addEventHandler(KeyEvent.KEY_RELEASED, new EventHandler<KeyEvent>() {

       @Override

       public void handle(KeyEvent event) {

           //После каждого введенного символа, записываем введенное число в Label

           label.setText(textfield.getText());

       }

   });

}

 

public void mouseDown(){

   label.setText("");

   String str = textfield.getText(); //Берем строку из тектового поля

   char[] arr = str.toCharArray(); //Превращаем ее в массив

   Stack number = new Stack();

   //Добавляем каждый элемент массива в стек

   for(char c : arr){

       number.push(c);

   }

   //Записываем в Label полученный стек начиная с конца (переворачиваем число)

   while(!number.empty())

       label.setText(label.getText()+number.pop());

 

}

 

}

 

Sample.fxml

<?xml version="1.0" encoding="UTF-8"?>

 

<?import javafx.scene.control.Button?>

<?import javafx.scene.control.Label?>

<?import javafx.scene.control.TextField?>

<?import javafx.scene.layout.AnchorPane?>

<?import javafx.scene.layout.ColumnConstraints?>

<?import javafx.scene.layout.GridPane?>

<?import javafx.scene.layout.RowConstraints?>

 

<GridPane alignment="center" hgap="10" prefHeight="400.0" prefvgap="10" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">

<columnConstraints>

<ColumnConstraints maxminpref/>

<ColumnConstraints maxminpref/>

</columnConstraints>

<rowConstraints>

<RowConstraints />

<RowConstraints />

</rowConstraints>

<children>

<AnchorPane prefHeight="365.0" prefWidth="515.0">

    <children>

       <Button fx:id="button" layoutX="197.0" layoutY="265.0" mnemonicParsing="false" text="Выполнить" />

       <TextField fx:id="textfield" layoutX="154.0" layoutY="183.0" />

       <Label fx:id="label" layoutX="197.0" layoutY="228.0" text=" " />

       <Label layoutX="26.0" layoutY="22.0" text="Лабораторная работа №4" />

       <Label layoutX="26.0" layoutY="46.0" text="Выполнил: студент гр. ЗИВТ-172 Михаенко С.И." />

       <Label layoutX="26.0" layoutY="75.0" text="Задание:&#10;Ввести число с помощью поля TextField. Добавить кнопку типа ToggleButton и Label. &#10;Когда кнопка не нажата на элементе Label число выводится таким же каким оно было&#10;введено, когда кнопка нажата число выводится в обратном порядке.&#10;Хранить число с помощью стека." />

    </children>

</AnchorPane>

</children>

</GridPane>

 

 

Список использованных источников

1. Шилдт, Г. Java 8. Полное руководство, 9-е изд. [Текст] / Г.Шилдт; пер. с анг. И.В. Берштейна. – Москва: ИД Вильямс, 2015. – 1376 с.

2. Сьерра, К. Изучаем Java, 2-е изд. [Текст] / К. Сьерра, Б. Бейтс. – Москва: Эксмо, 2012. – 707 с.


Дата добавления: 2018-11-24; просмотров: 273; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!