Использование классических алгоритмов обработки данных при создании приложения
Анализ структур данных и алгоритмов ее обработки. Разработка алгоритмов программного средства. Выбор языка программирования. Программная реализация структур данных и алгоритма обработки. Оценка сложности алгоритма. Тестирование программного средства.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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