Использование классических алгоритмов обработки данных при создании приложения

Анализ структур данных и алгоритмов ее обработки. Разработка алгоритмов программного средства. Выбор языка программирования. Программная реализация структур данных и алгоритма обработки. Оценка сложности алгоритма. Тестирование программного средства.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 11.02.2021
Размер файла 1,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

btnAdd.setToolTipText("Добавить студента в список");

btnAdd.setBounds(532, 42, 142, 23);

getContentPane().add(btnAdd);

JButton btnRemove = new JButton("Удалить");

btnRemove.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

removeStudent();

}

});

btnRemove.setFont(new Font("Tahoma", Font.BOLD, 12));

btnRemove.setToolTipText("Удалить студента из списка");

btnRemove.setBounds(532, 75, 142, 23);

getContentPane().add(btnRemove);

JButton btnFind = new JButton("Найти");

btnFind.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

findStudent();

}

});

btnFind.setFont(new Font("Tahoma", Font.BOLD, 12));

btnFind.setToolTipText("Найти таких студентов");

btnFind.setBounds(532, 108, 142, 23);

getContentPane().add(btnFind);

JButton btnClear = new JButton("Очистить список");

btnClear.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

clear();

}

});

btnClear.setFont(new Font("Tahoma", Font.BOLD, 12));

btnClear.setToolTipText("Удалить всех студентов из списка");

btnClear.setBounds(532, 141, 142, 23);

getContentPane().add(btnClear);

JButton btnExport = new JButton("Экспорт");

btnExport.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

exportToFile();

}

});

btnExport.setFont(new Font("Tahoma", Font.BOLD, 12));

btnExport.setToolTipText("Выгрузить список в файл");

btnExport.setBounds(532, 171, 142, 23);

getContentPane().add(btnExport);

JButton btnImport = new JButton("Импорт");

btnImport.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

importFromFile();

}

});

btnImport.setToolTipText("Загрузить список из файла");

btnImport.setFont(new Font("Tahoma", Font.BOLD, 12));

btnImport.setBounds(532, 205, 142, 23);

getContentPane().add(btnImport);

txtAreaPrompt = new JTextArea("");

txtAreaPrompt.setFont(new Font("Tahoma", Font.BOLD, 12));

txtAreaPrompt.setBounds(10, 205, 468, 62);

txtAreaPrompt.setWrapStyleWord(true);

txtAreaPrompt.setLineWrap(true);

txtAreaPrompt.setOpaque(false);

txtAreaPrompt.setEditable(false);

txtAreaPrompt.setFocusable(false);

txtAreaPrompt.setBackground(UIManager.getColor("Label.background"));

txtAreaPrompt.setFont(UIManager.getFont("Label.font"));

txtAreaPrompt.setBorder(UIManager.getBorder("Label.border"));

getContentPane().add(txtAreaPrompt);

btnShowAll = new JButton("Показать все");

btnShowAll.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

drawTable(list, columnNames);

}

});

btnShowAll.setFont(new Font("Tahoma", Font.BOLD, 12));

btnShowAll.setBounds(544, 427, 130, 23);

getContentPane().add(btnShowAll);

scrollPane = new JScrollPane();

scrollPane.setBounds(15, 278, 650, 130);

getContentPane().add(scrollPane);

drawTable(list, columnNames);

}

// Описания методов для работы GUI

public void clearFields() {

formattedTxtGradeBook.setText("");

// formattedTxtGradeBook.requestFocus();

txtSurname.setText("");

txtFirstName.setText("");

txtSecondName.setText("");

formattedTxtBirthDate.setText("");

}

public void addStudent() {

int gradeBook;

String surname;

String firstName;

String secondName;

LocalDate birthDate;

String message = "";

if (!(formattedTxtGradeBook.getText().isBlank() || txtSurname.getText().isBlank()

|| txtFirstName.getText().isBlank() || txtSecondName.getText().isBlank()

|| formattedTxtBirthDate.getText().isBlank())) {

gradeBook = Integer.parseInt(formattedTxtGradeBook.getText());

surname = txtSecondName.getText();

firstName = txtFirstName.getText();

secondName = txtSecondName.getText();

birthDate = LocalDate.parse(formattedTxtBirthDate.getText(), shortFormatter);

try {

list.add(new Student(gradeBook, surname, firstName, secondName, birthDate));

message = "Студент добавлен в список.";

} catch (IllegalArgumentException e) {

message = "Студент не добавлен в список. Номер зачетной книжки студента должен быть уникальным. Проверьте данные.";

}

} else {

message = "Все поля должны быть заполнены для добавления студента в список";

}

txtAreaPrompt.setText(message);

((AbstractTableModel) table.getModel()).fireTableDataChanged();

clearFields();

}

/**

* Удалить выбранного студента

*/

public void removeStudent() {

String message = "";

int selectedRow = table.getSelectedRow();

if (selectedRow == -1) {

message = "Выберите ниже в таблице студентов студента, которого хотите удалить.";

} else {

message = (String) (table.getValueAt(selectedRow, 0));

Student st = new Student(Integer.parseInt(message), "", "", "", LocalDate.now());

list.remove(st);

message = "Студент с номером зачетной книжки " + message + " удален. Ниже обновленный список студентов.";

}

txtAreaPrompt.setText(message);

drawTable(list, columnNames);

clearFields();

}

/**

* Найти выбранного студента и обновить таблицу

*/

public void findStudent() {

String message = "Вы выполнили фильтрацию студентов. Чтобы вновь посмотреть весь список, нажмите кнопку \""

+ btnShowAll.getText() + "\"";

StudentList filteredList;

int findType = getFindType();

// Поиск по номеру зачетной книжки

switch (findType) {

case 1:

filteredList = list.find(st -> {

return st.getGradeBook() == Integer.parseInt(formattedTxtGradeBook.getText());

});

drawTable(filteredList, columnNames);

break;

case 2:

filteredList = list.find(st -> {

return st.getSurname().equals(txtSurname.getText()) && st.getFirstName().equals(txtFirstName.getText())

&& st.getSecondName().equals(txtSecondName.getText());

});

drawTable(filteredList, columnNames);

break;

case 3:

filteredList = list.find(st -> {

return st.getBirthDate().equals(LocalDate.parse(formattedTxtBirthDate.getText(), shortFormatter));

});

drawTable(filteredList, columnNames);

break;

case 4:

filteredList = list.find(st -> {

return st.getGradeBook() == Integer.parseInt(formattedTxtGradeBook.getText())

&& st.getSurname().equals(txtSurname.getText())

&& st.getFirstName().equals(txtFirstName.getText())

&& st.getSecondName().equals(txtSecondName.getText())

&& st.getBirthDate().equals(LocalDate.parse(formattedTxtBirthDate.getText(), shortFormatter));

});

drawTable(filteredList, columnNames);

break;

default:

message = "Для поиска студента внесите или номер зачетной книжки, или ФИО, или дату рождения для поиска студента (можно все вместе).";

txtAreaPrompt.setText(message);

}

clearFields();

}

/**

* По заполненности полей определяет вид поиска студентов в списке: 1 - Поиск по

* номеру зачетной книжки; 2 - Поиск по ФИО; 3 - Поиск по дате рождения; 4 -

* Поиск по всем параметрам

*

* @return номер вида поиска типа {@code int}

*/

public int getFindType() {

if ((!formattedTxtGradeBook.getText().isBlank()) && txtSurname.getText().isBlank()

&& txtFirstName.getText().isBlank() && txtSecondName.getText().isBlank()

&& formattedTxtBirthDate.getText().isBlank()) {

return 1;

} else if (formattedTxtGradeBook.getText().isBlank() && (!txtSurname.getText().isBlank()

&& !txtFirstName.getText().isBlank() && !txtSecondName.getText().isBlank())

&& formattedTxtBirthDate.getText().isBlank()) {

return 2;

} else if (formattedTxtGradeBook.getText().isBlank() && txtSurname.getText().isBlank()

&& txtFirstName.getText().isBlank() && txtSecondName.getText().isBlank()

&& !formattedTxtBirthDate.getText().isBlank()) {

return 3;

} else {

return 4;

}

}

/*

* Очищает список студентов

*/

public void clear() {

String message = "Список студентов очищен.";

list.clear();

drawTable(list, columnNames);

txtAreaPrompt.setText(message);

}

/**

* Перерисовать таблицу на форме

*

* @param list список для модели таблицы

* @param columnNames наименование колонок для модели таблицы

*/

public void drawTable(StudentList list, String[] columnNames) {

if (table != null) {

scrollPane.remove(table);

}

tableModel = new StudentListTableModel(list, columnNames);

((AbstractTableModel) tableModel).addTableModelListener(this);

table = new JTable(tableModel);

scrollPane.setViewportView(table);

}

@Override

public void tableChanged(TableModelEvent e) {

// Для работы перерисовки таблицы со списком студентов

}

/**

* Произвести экспорт в файл, указанный пользователем в диалоговом окне

*/

public void exportToFile() {

String message = "";

JFileChooser fileChooser = new JFileChooser();

fileChooser.setDialogTitle("Укажите txt файл для сохранения");

int userSelection = fileChooser.showSaveDialog(this);

if (userSelection == JFileChooser.APPROVE_OPTION) {

File fileToSave = fileChooser.getSelectedFile();

try {

list.saveToFile(fileToSave);

message = "Список студентов сохранен в файл " + fileToSave.getAbsolutePath();

} catch (IOException e) {

message = "Ошибка при попытке сохранения в файл (" + e.getMessage()

+ "). Укажите txt файл для сохранения списка студентов.";

}

txtAreaPrompt.setText(message);

}

}

/**

* Произвести импорт списка из файла, указанного пользователем в диалоговом окне

*/

public void importFromFile() {

String message = "";

JFileChooser fileChooser = new JFileChooser();

fileChooser.setDialogTitle("Укажите txt файл для импорта");

int userSelection = fileChooser.showSaveDialog(this);

if (userSelection == JFileChooser.APPROVE_OPTION) {

File fileToImportFrom = fileChooser.getSelectedFile();

try {

list = list.readFromFile(fileToImportFrom);

message = "Список студентов загружен из файла " + fileToImportFrom.getAbsolutePath();

} catch (IOException e) {

message = "Ошибка при попытке загрузки списка из файла (" + e.getMessage()

+ "). Укажите txt файл для импорта списка студентов.";

}

txtAreaPrompt.setText(message);

}

drawTable(list, columnNames);

}

public static void main(String[] args) {

StudentListApp app = new StudentListApp();

app.setPreferredSize(new Dimension(700, 500));

app.pack();

app.setVisible(true);

}

}

Файл «StudentListInterface.java»

public interface StudentListInterface {

int size();

//Операции изменения списка

/**

* Добавляет указанный элемент в конец списка.

* <p>Ограничения на добавляемые элементы:

* В список нельзя добавлять пустые ({@code null}) элементы.

* <b>В список нельзя добавлять элементы с одинаковым номером

* зачетной книжки</b>.

*

* @param e элемент для добавления в список

* @return {@code true}, если список изменился в результате вызова.

* @throws NullPointerException, если добавляемый элемент пустой

* ({@code null})

* @throws IllegalArgumentException, если добавляемый элемент не

* может быть добавлен из-за совпадения номера зачетной книжки.

* @throws NullPointerException, если указанный элемент пустой

*/

boolean add(Student e);

/**

* Удаляет первое вхождение указанного элемента их списка, если

* такой элемент в списке есть. Если такого элемента в списке нет,

* список не меняется.

* Возвращает {@code true}, если список содержал указанный элемент

* (то есть, этот список был изменен вызовом этого метода).

* @param o элемент, который будет удален, если он имеется в списке

* @return {@code true}, если список содержал указанный элемент

* @throws ClassCastExceptio, если тип добавляемого элемента не соответсвует

* содержимому списка

* @throws NullPointerException, если указанный элемент пустой

*/

boolean remove(Object o);

//Операции массового изменения списка

/**

* Удаляет все элементы из списка. Список будет пустым после

* выполнения этого метода.

*/

void clear();

//Операции доступа к элементам

//Обычные операции доступа к элементам, типа получения элемента по его индексу,

//не нужны в рамках данной работы

//Операции поиска и фильтрации

//Обычные операции поиска и фильтрации, типа получения индекса элемента,

//итераторов и представлений не нужны в рамках данной работы

}

Файл «StudentListTableModel.java»

import javax.swing.table.AbstractTableModel;

public class StudentListTableModel extends AbstractTableModel {

/**

*

*/

private static final long serialVersionUID = 1L;

private String[] columnNames;

private StudentList data;

public StudentListTableModel(StudentList data, String[] columnNames) {

super();

this.columnNames = columnNames;

this.data = data;

}

@Override

public int getRowCount() {

return data.size();

}

@Override

public int getColumnCount() {

return columnNames.length;

}

@Override

public Object getValueAt(int rowIndex, int columnIndex) {

return data.get(rowIndex).getColumnsArray()[columnIndex];

}

}

Размещено на Allbest.ru


Подобные документы

  • Переход от словесной неформальной постановки к математической формулировке данной задачи. Оценка различных вариантов с целью выбора наиболее эффективных структур данных и алгоритмов обработки. Реализация алгоритмов на одном из языков программирования.

    курсовая работа [35,0 K], добавлен 25.06.2013

  • Исследование симметричных алгоритмов блочного шифрования. Минусы и плюсы алгоритма IDEA. Разработка программы аутентификации пользователя и сообщений на основе алгоритма IDEA. Выбор языка программирования. Тестирование и реализация программного средства.

    курсовая работа [314,2 K], добавлен 27.01.2015

  • Разработка блок-схемы и программы обработки одномерного массива с доступом к элементам с помощью индексов и с помощью указателей. Словесное описание алгоритма и пользовательского интерфейса, листинг программы обработки матрицы и результат её выполнения.

    курсовая работа [391,1 K], добавлен 30.09.2013

  • Выбор технологии, языка и среды программирования. Анализ процесса обработки информации и оценка структур данных для ее хранения. Разработка основных алгоритмов решения и структурной схемы программного продукта. Проектирование интерфейса пользователя.

    курсовая работа [449,8 K], добавлен 14.01.2011

  • Изучение применяемых в программировании и информатике структур данных, их спецификации и реализации, алгоритмов обработки данных и анализ этих алгоритмов. Программа определения среднего значения для увеличивающегося количества чисел заданного типа.

    контрольная работа [16,0 K], добавлен 19.03.2015

  • Анализ характеристик объекта компьютеризации. Разработка структур данных, алгоритмов и программного обеспечения системы управления базой данных. Особенности синтеза структур данных. Разработка алгоритмов системы и оценка результатов тестирования.

    курсовая работа [37,0 K], добавлен 07.12.2010

  • Выбор технологии, языка и среды программирования. Анализ процесса обработки информации и выбор структур данных для ее хранения, разработка основных алгоритмов. Проектирование интерфейса пользователя. Выбор стратегии тестирования и разработка тестов.

    курсовая работа [332,3 K], добавлен 09.12.2014

  • Целые числа в позиционных системах счисления. Недостатки двоичной системы. Разработка алгоритмов, структур данных. Программная реализация алгоритмов перевода в различные системы счисления на языке программирования С. Тестирование программного обеспечения.

    курсовая работа [593,3 K], добавлен 03.01.2015

  • Общая характеристика и функциональные возможности системы "Компьютерное тестирование". Связи между информационными объектами. Проектирование алгоритмов обработки данных. Реализация алгоритмов обработки информации, разработка соответствующих макросов.

    контрольная работа [542,8 K], добавлен 19.10.2010

  • Сущность языка программирования, идентификатора, структуры данных. Хранение информации, алгоритмы их обработки и особенности запоминающих устройств. Классификация структур данных и алгоритмов. Операции над структурами данных и технология программирования.

    контрольная работа [19,6 K], добавлен 11.12.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.