Сетевые протоколы Java. Сетевые протоколы 1 лаба. новосибирский государственный технический университет
Скачать 111.68 Kb.
|
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ государственное БЮДЖЕТНОЕ образовательное учреждение высшего образования «НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ» ____________________________________________________________________ Кафедра автоматики и вычислительной техники ОТЧЁТ по лабораторной работе № 1 «Разработка класса структуры данных и оконного приложения» по дисциплине: «Сетевые протоколы» Оглавление1.Задание 2 2.Цель работы 3 3.Ход работы 3 Вариант № 5. Двусвязный список 3 Добавление объекта в двусвязный список: 4 Удаление объекта: 5 4.Вывод 6 5.Листинг 6 Задание Портировать одну из структур данных, приведенных в ermak.cs.nstu.ru/cprog. Структура может быть упорядоченной и неупорядоченной. Набор операций для упорядоченной - добавление, удаление по индексу, ускоренный поиск по ключу и индексу, вставка с сохранением порядка, для неупорядоченной - добавление, удаление по индексу, поиск по ключу и индексу, вставка по индексу, сортировка. Элемент структуры данных (элемент списка, вершина дерева) реализовать в виде вложенного класса. Структур данных реализовать в виде шаблона, производного от Comparable. Проверить на объектах – строках (сгенерированных случайным образом). Цель работы Получение практических навыков программирования прикладных протоколов клиент-серверных приложений на Java, начиная с «нуля». Ход работы Вариант № 5. Двусвязный списокРис. 1. Внешний интерфейс односвязного списка. Рис. 2. Реализация добавления объекта в односвязный список. Добавление объекта в двусвязный список:public void actionPerformed(ActionEvent actionEvent) { var Dialog = new dialogWindow(); Dialog.pack(); Dialog.setVisible(true); if (Dialog.output != null) List.push_front(Dialog.output); List.printList(textArea1, textArea2); } }); Добавление по индексу: public void actionPerformed(ActionEvent actionEvent) { var Dialog = new insertDialog(); Dialog.pack(); Dialog.setVisible(true); if (Dialog.Data != null) List.insert(Dialog.pos, Dialog.Data); List.printList(textArea1, textArea2); } Рис. 3. Вставка по индексу Удаление объекта:public void actionPerformed(ActionEvent actionEvent) { try { List.pop_front(); List.printList(textArea1, textArea2); } catch (NullPointerException e) { JOptionPane.showMessageDialog(null, "Что-то сломалось"); } catch (Exception e) { JOptionPane.showMessageDialog(null, "Список пуст"); } } Рис. 3 Вывод исключения при удалении из пустого списка Вывод В данной лабораторной работе научились работать с графическим интерфейсом Java, познакомились с библиотекой swing, awt. Создали двусвязный список, а также реализовали функции создания, создание по индексу, удаления. Листинг import javax.swing.*; import java.awt.*; import java.util.LinkedList; public class Main extends JFrame{ public static final String EMAIL_STUD = "Студент"; private String name; private String id; JTextArea stdTextArea = new JTextArea(); JPanel flow1Panel = new JPanel(new FlowLayout(FlowLayout.CENTER)); JPanel flow2Panel = new JPanel(new FlowLayout(FlowLayout.CENTER)); JPanel gridPanel = new JPanel(new GridLayout(2, 1)); JLabel idLabel = new JLabel("ID :"); JTextField idTextField = new JTextField(10); JLabel nameLabel = new JLabel("Имя :"); JTextField nameTextField = new JTextField(10); JButton addButton = new JButton("Добавить"); JButton deleteButton = new JButton("Удалить"); JButton exitButton = new JButton("Выход"); private LinkedList public Main() { setTitle("Первая лабораторная работа"); setLayout(new BorderLayout()); setMinimumSize(new Dimension(500,500)); stdTextArea.setEnabled(false); stdTextArea.setDisabledTextColor(Color.BLACK); flow1Panel.add(idLabel); flow1Panel.add(idTextField); flow1Panel.add(nameLabel); flow1Panel.add(nameTextField); flow2Panel.add(addButton); flow2Panel.add(deleteButton); flow2Panel.add(exitButton); add(flow1Panel); add(flow2Panel); gridPanel.add(flow1Panel); gridPanel.add(flow2Panel); add(stdTextArea, BorderLayout.CENTER); add(gridPanel, BorderLayout.SOUTH); addButton.addActionListener(e -> { addStudent(); idTextField.setText(""); nameTextField.setText(""); }); exitButton.addActionListener(e -> this.setVisible(false)); deleteButton.addActionListener(e -> deleteSmth()); } private boolean isIDInLinkedList (String idStr) { boolean inList = false; for (Main stud: stdLinkedList) { if (stud.getId().compareTo(idStr) == 0) { inList = true; } } return inList; } public void addStudent () { if (isIDInLinkedList (idTextField.getText()) == true) { JOptionPane.showMessageDialog(null, "Ошибка: студент ID уже добавлен!"); } else { stdLinkedList.add(new Main(nameTextField.getText(), idTextField.getText())); displayAll(); } } public void insertStudent () { if (isIDInLinkedList (idTextField.getText()) == true) { JOptionPane.showMessageDialog(null, "Ошибка: студент ID уже добавлен!"); } else { stdLinkedList.add(new Main(nameTextField.getText(), idTextField.getText())); displayAll(); } } private void displayAll() { stdTextArea.setText(""); for (Main stud: stdLinkedList) { stdTextArea.append(stud + "\n"); } } private void exitApplication() { // System.exit(0); } private void deleteSmth() { if (isIDInLinkedList (idTextField.getText()) == false) { JOptionPane.showMessageDialog(null, "Ошибка: студент ID ещё не добавлен!"); } else { for (int s = 0; s < stdLinkedList.size(); s++) { String currId = stdLinkedList.get(s).getId(); if (currId.compareTo(idTextField.getText()) == 0) { stdLinkedList.remove(s); } } displayAll(); } } public Main(String name, String id) { this.name = name; this.id = id; } public String getName () { return name; } public String getId () { return id; } public void setName (String name){ this.name = name; } public void setId (String id){ this.id = id; } @Override public String toString() { return id + "\t" + name + "\t" + EMAIL_STUD; } public static void main(String[] args) { Main app = new Main(); app.setVisible(true); } } Новосибирск, 2020 г. |