Главная страница

Отчет о лабораторной работе 4 по дисциплине Программирование на языке java стт гр. 19ВО1 Салиев В. Р


Скачать 238.72 Kb.
НазваниеОтчет о лабораторной работе 4 по дисциплине Программирование на языке java стт гр. 19ВО1 Салиев В. Р
Дата26.12.2021
Размер238.72 Kb.
Формат файлаodt
Имя файлаlaba_4.odt
ТипОтчет
#318238



Пензенский государственный университет

Факультет вычислительной техники

Кафедра «Информационно-вычислительные системы»

Работа со структурами и файлами

Отчет о лабораторной работе № 4

по дисциплине «Программирование на языке JAVA»

Выполнил: ст-т гр.19ВО1

Салиев В.Р.

Проверил: доцент каф. ИВС

Убиенных А.Г.

2021

1 Формулировка задачи
Дан текстовый файл, содержащий произвольный текст. Разработать программу, которая читает этот файл и выводит все слова, имеющие заданную длину n в порядке, обратном алфавитному. Имя читаемого файла запрашивается с клавиатуры.
2 Техническое задание
2.1 Требование к программе
Программа должна:

1) Осуществлять выбор файла для чтения;

2) Вывести текст, считанный из файла;

    1. Должна затребовать у пользователя ввести длину слова;

    2. Произвести обработку содержимого в файле, найти все слова с заданной длиной n и вывести их в обработанном алфавитному порядку;

4) Понятный пользователю интерфейс;

    1. Функцию отчистки формы без перезапуска программы.

    2. Выполнение функции выхода из программы по кнопке в меню;


2.2 Порядок контроля и приёмки
Для контроля правильности работы программы должен быть разработан тестовый набор данных – файл Test.txt с текстом. Этот файл нужно выбрать при работе программы и сравнить результаты программы с результатами, полученными путем ручного расчета. Если результаты совпадут, то это будет означать, что программа удовлетворяет требованиям технического задания.


3 Описание программы
3.1  Общие сведения

Программа Program разработана в среде Eclipse, её текст содержится в файле Program.java и приведен в приложении А.
3.2  Функциональное назначение
Программа предназначена для чтения текстового файла, нахождения в нем слов заданной длины n(которая вводится пользователем) и вывод на экран всех найденных слов, в порядке обратном алфавитному.
3.2           Описание логической структуры
 Программа состоит из:

-           модуля Program – основной модуль программы, включающий класс Program.

В модуле используются библиотеки:

1) org.eclipse.swt.* - набор библиотек для создания и редактирования формы и всех её компонентов;

2) java.io.File – библиотека для работы с файлами;

3) java.io.FileReader – необходим для считывания файла;

4) java.io.FileReader – необходим для считывания файла;
В классе Program содержатся методы:

1) main – точка входа в программу;

2) open – открытие формы;

3) import1.addSelectionListener – обработчик нажатия на кнопку меню «Открыть»;

4) reset.addSelectionListener – обработчик нажатия на кнопку меню «Отчистить»;

5) close.addSelectionListener – обработчик нажатия на кнопку меню «Выход».
В классе Program содержатся переменные:

а) файлового типа – File:

file_import – файл для чтения;

б) строкового типа – String;

import_text – считываемый текст.
Программа начинает работу с открытия формы. Далее необходимо выбрать файл для чтения. После выбора файла происходит считывания содержимого файла. Содержимое файла записывается в переменную s типа string. Затем программа запрашивает ввести длину слова, введенное значение значение записывается в переменную n типа integer. Потом программа просматривает каждое слово с строке, находит длину данного слова и сверяет его в введенным числом. Если такое слово было найдено, то оно запоминается и затем ищется следующее слово. Все найденные слова выводятся на экран в порядке обратном алфавитному. Это происходит путем сравнения первой буквы в каждом слове, если эти буквы одинаковые, то сравниваются следующие буквы в слове. Если же в тексте на найдено слов заданной длины, то программа выдает сообщение '' Таких слов нет ''. Программа завершает свою работу.
3.4 Интерфейс программы

На форме расположены:

- 2 текстовых поля txt_imported и txt_exported пакета swt.widgets.Text для вывода текста;

- 2 метки lbTextOfImported и lbTextOfImported пакета swt.widgets.Label для ориентрования на форме;

- меню выбора menu пакета swt.widgets.Menu для комфортного выбора функций программы.

В меню выделены подпункты:

- Отчистка – подпункт меню пакета swt.widgets.MenuItem для осуществления функции отчистки формы;

  • Выход – подпункт меню пакета swt.widgets.MenuItem для осуществления функции выхода из программы;

  •  Файл – подпункт меню пакета swt.widgets.MenuItem в котором выделены следующие подпункты:

  • Открыть – подпункт меню пакета swt.widgets.MenuItem для осуществления функции открытия и чтения файла;


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

Таблица 2 — Тестовый набор данных

test.txt с текстом

Введенная длина

Результат файл с текстом

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

5

1)Могут

2)Любой

Для проверки правильности работы программы необходимо запустить ее, выбрать файл для чтения. Произойдет вывод текста из файла для чтения, а затем программа попросит ввести длину слова «Длина слова:». Затем на на экран выводятся все слова заданной длины в порядке обратном алфавитному.

При работе программы с тестовыми данными получены результаты, приведенные в приложении Б на рисунке Б.1. Результаты совпадают с результатами ручной проверки. Таким образом, можно сделать вывод, что программа работает согласно требованиям.

5 Описание программы

После запуска программы на экране появляется форма  (см. Приложение Б). Пользователь должен выбрать файл для чтения (см. рисунок Б.1). Для этого он должен нажать на пункт меню «Файл → Открыть». После этого на экране появляется окно выбора файла (см. рисунок Б.2). После выбора файла в текстовом поле «Текст открытого файла:» появится соответствующее сообщение. Затем пользователь должен ввести длину слова после слов «Длина слова:» и нажать на кнопку «OK». Потом на экран выведутся все слова заданной длины в порядке обратном алфавитному (см. рисунок Б.3).

Для отчистки формы пользователю необходимо нажать на пункт меню «Отчистить». После этого произойдёт отчистка формы.

Для выхода из программы пользователю необходимо нажать на пункт меню «Выход». После этого нужно подтвердить действие. После подтверждения произойдёт закрытие формы.

Выводы

 

        В ходе выполнения лабораторной работы:

-   было сформулировано технического задание;

-   разработан алгоритм решения задачи для поиска всех слов заданного размера и вывод их на экран в порядке обратно алфавитному;

-   разработана и отлажена программа;

-  разработан тестовый набор данных;

-   выполненное тестирование подтвердило, что программа работает согласно требованиям технического задания.

 

Таким образом, задание на лабораторную работу выполнено в полном объеме.

 

ТЕКСТ ПРОГРАММЫ

Приложение А 

(обязательное)

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.Event;

import org.eclipse.swt.widgets.FileDialog;

import org.eclipse.swt.widgets.Shell;

import org.eclipse.swt.widgets.Label;

import org.eclipse.swt.widgets.Listener;

import org.eclipse.swt.SWT;

import org.eclipse.swt.widgets.Text;

import org.eclipse.swt.widgets.Menu;

import org.eclipse.swt.widgets.MenuItem;

import org.eclipse.swt.widgets.MessageBox;

import org.eclipse.swt.events.SelectionAdapter;

import org.eclipse.swt.events.SelectionEvent;

import org.eclipse.swt.events.VerifyEvent;

import org.eclipse.swt.events.VerifyListener;

import org.eclipse.swt.widgets.Button;

import org.eclipse.swt.widgets.Control;

import org.eclipse.swt.graphics.Point;

import org.eclipse.swt.graphics.Rectangle;

import org.eclipse.swt.layout.GridData;

import org.eclipse.swt.layout.GridLayout;
import java.io.File;

import java.io.FileReader;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Scanner;
public class Program {
protected Shell shlFileWork, shlInput;

private Text txt_imported;

private Text txt_slovo;

private Text txt_liter;

private MessageBox closing;

private Label lbl_liter;

private Label lbl_slovo;

private Button OK;

boolean inputed = false;

String import_text = "";

File file_import = new File("");

/**

* Launch the application.

* @param args

*/

public static void main(String[] args) {

try {

Program window = new Program();

window.open();

} catch (Exception e) {

e.printStackTrace();

}

}
/**

* Open the window.

*/
public void open() {

Display display = Display.getDefault();

createContents();
shlFileWork.open();

shlFileWork.layout();

Rectangle displayBounds = display.getPrimaryMonitor().getBounds();

Rectangle shellBounds = shlFileWork.getBounds();

int x = displayBounds.x + (displayBounds.width - shellBounds.width)>>1;

int y = displayBounds.y + (displayBounds.height - shellBounds.height)>>1;

shlFileWork.setLocation(x, y);

shellBounds = shlInput.getBounds();

x = displayBounds.x + (displayBounds.width - shellBounds.width)>>1;

y = displayBounds.y + (displayBounds.height - shellBounds.height)>>1;

shlInput.setLocation(x, y);

while (!shlFileWork.isDisposed()) {

if (!display.readAndDispatch()) {

display.sleep();

}

}

}
/**

* Create contents of the window.

*/

protected void createContents() {

shlFileWork = new Shell(SWT.MIN);

shlFileWork.setDragDetect(false);

shlFileWork.setMinimumSize(new Point(579, 516));

shlFileWork.setMinimumSize(new Point(579, 516));

shlFileWork.setSize(579, 516);

shlFileWork.setText("Работа с файлами");

shlFileWork.addListener(SWT.Close, new Listener() {

public void handleEvent(Event event) {

event.doit = false;

int rc = closing.open();

if (rc == SWT.YES) {

shlFileWork.dispose();

}

}

});

GridLayout gridLayout = new GridLayout();

gridLayout.numColumns = 3;

GridData gridData = new GridData();

gridData.horizontalAlignment = GridData.FILL;

gridData.grabExcessHorizontalSpace = true;

shlInput = new Shell(shlFileWork, SWT.PRIMARY_MODAL);

shlInput.setText("Input");

shlInput.setLayout(gridLayout);

shlInput.addListener(SWT.Close, new Listener() {

public void handleEvent(Event event) {

event.doit = false;

shlInput.setVisible(false);

}

});

closing = new MessageBox(shlFileWork, SWT.APPLICATION_MODAL | SWT.YES | SWT.NO | SWT.ICON_QUESTION);

closing.setText("Подтверждение выхода.");

closing.setMessage("Вы уверены что хотите выйти из программы?");

MessageBox imported = new MessageBox(shlFileWork, SWT.APPLICATION_MODAL | SWT.OK | SWT.ICON_ERROR);

imported.setText("Ошибка");

imported.setMessage("Файл уже открыт. Попробуйте очистить. ");

MessageBox import_error = new MessageBox(shlFileWork, SWT.APPLICATION_MODAL | SWT.OK | SWT.ICON_ERROR);

import_error.setText("Ошибка");

import_error.setMessage("Не удалось открыть/прочитать файл.");

Menu menu = new Menu(shlFileWork, SWT.BAR);

shlFileWork.setMenuBar(menu);

MenuItem file = new MenuItem(menu, SWT.CASCADE);

file.setText("Файл");

Menu menu_1 = new Menu(file);

file.setMenu(menu_1);

MenuItem import1 = new MenuItem(menu_1, SWT.NONE);

import1.addSelectionListener(new SelectionAdapter() {

@Override

public void widgetSelected(SelectionEvent e){

if (!inputed)

{

FileDialog fileopen = new FileDialog(shlFileWork, SWT.OPEN);

String str = null;

str = fileopen.open();

if (str != null) {

file_import = new File(str);

try(FileReader reader = new FileReader(file_import))

{

int c;

while((c=reader.read())!=-1){import_text += (char)c;}

txt_imported.setText(import_text);

inputed = true;

shlInput.setVisible(true);

} catch (IOException ex) {import_error.open();}

}

}

else {imported.open();}

}

});

import1.setText("Открыть");

MenuItem reset = new MenuItem(menu, SWT.NONE);

reset.addSelectionListener(new SelectionAdapter() {

@Override

public void widgetSelected(SelectionEvent e) {

inputed = false;

txt_slovo.setText("");

txt_imported.setText("");

txt_liter.setText("");

import_text = "";

file_import = new File("");

lbl_slovo.setText("Слова с длиной равной \"_\":");

}

});

reset.setText("Очистить");

MenuItem close = new MenuItem(menu, SWT.NONE);

close.addSelectionListener(new SelectionAdapter() {

@Override

public void widgetSelected(SelectionEvent e) {

int rc = closing.open();

if (rc == SWT.YES) {

shlFileWork.dispose();

}

}

});

close.setText("Выход");

Label lbTextOfImported = new Label(shlFileWork, SWT.NONE);

lbTextOfImported.setBounds(10, 10, 194, 20);

lbTextOfImported.setText("Текст открытого файла:");

txt_imported = new Text(shlFileWork, SWT.BORDER | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CANCEL | SWT.MULTI);

txt_imported.setToolTipText("");

txt_imported.setBounds(10, 36, 541, 181);

lbl_slovo = new Label(shlFileWork, SWT.NONE);

lbl_slovo.setText("Слова с длиной равной \"_\":");

lbl_slovo.setBounds(10, 223, 379, 20);

txt_slovo = new Text(shlFileWork, SWT.BORDER | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CANCEL | SWT.MULTI);

txt_slovo.setToolTipText("");

txt_slovo.setBounds(10, 249, 541, 181);

shlFileWork.setTabList(new Control[]{txt_imported, txt_slovo});

lbl_liter = new Label(shlInput, SWT.NONE);

lbl_liter.setText("Длина слова: ");

txt_liter = new Text(shlInput, SWT.BORDER);

txt_liter.setTextLimit(2);

txt_liter.addVerifyListener(new VerifyListener() {

@Override

public void verifyText(VerifyEvent e) {

boolean b = ("0123456789".indexOf(e.text)>=0);

e.doit = b;

}

});

OK = new Button(shlInput, SWT.PUSH);

OK.setText("OK");

OK.setLayoutData(gridData);

OK.addSelectionListener(new SelectionAdapter() {

@Override

public void widgetSelected(SelectionEvent arg0) {

while(true) {

String c = txt_liter.getText();

if (c == "") {

MessageBox length_error = new MessageBox(shlInput, SWT.APPLICATION_MODAL | SWT.OK | SWT.ICON_ERROR);

length_error.setText("Ошибка");

length_error.setMessage("Введите длину слова.");

break;

}

int n = Integer.parseInt(c);// Переменной n присваивается введнная длина

shlInput.setVisible(false);

// открываем файла

import_text = import_text.replaceAll("[.,?!()@\"№#;$%:^&*_`

+=|/\'{}]", "");

import_text = import_text.replaceAll("<", "");

import_text = import_text.replaceAll(">", "");

import_text = import_text.replaceAll("-", "");

import_text = import_text.replaceAll("\t", "");

import_text = import_text.replaceAll("\r", "");

import_text = import_text.replaceAll("\n", " ");

import_text = import_text.toLowerCase();

lbl_slovo.setText("Слова с длиной равной \"" + c + "\":");// выводим сообщение на форму с введнной длиной

Scanner thread = new Scanner(import_text);// активируем сканер

ArrayList arr = new ArrayList(0);// создаем список слов

while(thread.hasNext()) {

arr.add(thread.next());

}

String s = "";// создаем переменную

for (int i = 0; i < arr.size(); i++)// выполняем просмотр длины строки

{

for(int j = i; j > 0 && arr.get(j - 1).charAt(0) < arr.get(j).charAt(0); j--)

{

String tmp = arr.get(j);// переписываем строку в строковый массив

arr.remove(j);

arr.trimToSize();

arr.add(j - 1, tmp);

}

}

int k = 0;

for (int i = 0; i < arr.size(); i++) // проверяем строку

{

if (arr.get(i).length() == n) // если слово в строке равно введенному размеру

{

k++;// увеличиваем счетчик

s +=Integer.toString(k) + ") "+ arr.get(i) + "\n";// переменной s присваиваем номер слова и выводим само слово

}

}

if (s == "") {s = "Таких слов нет.";}// если таких слов нет, то выводим сообщение

txt_slovo.setText(s);// выводим на форму результат

thread.close();

break;

}

}

});
shlInput.pack();

}

}

 

 

 

РЕЗУЛЬТАТЫ ИСПЫТАНИЙ

Приложение Б

(обязательное)



Рисунок Б.1


Рисунок Б.2




Рисунок Б.3


написать администратору сайта