Отчет о лабораторной работе 4 по дисциплине Программирование на языке java стт гр. 19ВО1 Салиев В. Р
Скачать 238.72 Kb.
|
Должна затребовать у пользователя ввести длину слова; Произвести обработку содержимого в файле, найти все слова с заданной длиной n и вывести их в обработанном алфавитному порядку; Функцию отчистки формы без перезапуска программы. Выполнение функции выхода из программы по кнопке в меню; Выход – подпункт меню пакета swt.widgets.MenuItem для осуществления функции выхода из программы; Файл – подпункт меню пакета swt.widgets.MenuItem в котором выделены следующие подпункты: Открыть – подпункт меню пакета swt.widgets.MenuItem для осуществления функции открытия и чтения файла;
Для проверки правильности работы программы необходимо запустить ее, выбрать файл для чтения. Произойдет вывод текста из файла для чтения, а затем программа попросит ввести длину слова «Длина слова:». Затем на на экран выводятся все слова заданной длины в порядке обратном алфавитному. При работе программы с тестовыми данными получены результаты, приведенные в приложении Б на рисунке Б.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 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 |