Реферат Создание приложения на java
Работа добавлена на сайт bukvasha.net: 2015-10-28Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
Министерство образования и науки РФ
Федеральное агентство по образованию
Государственное образовательное учреждение
Высшего профессионального образования
«Омский государственный технический университет»
Кафедра «Математические методы и информационные технологии в экономике»
Курсовой проект
по дисциплине
«Высокоуровневые методы программирования»
Выполнила ст.гр. ПИ-219
_______ М.Ю. Иванченко
«____»__________2011 г.
Приняла к.ф.м.н. доц.
М.В. Девятерикова
«____»__________2011 г.
Омск 2011
Оглавление
3
Задание 4
5
Описание классов 6
10
Текст программы 11
18
Вид приложения 18
Задание
Описать класс, реализующий тип данных «квадратная вещественная матрица третьего порядка» и работу с ним. Класс должен реализовывать вычисление определителя матрицы, обратной матрицы, деление матриц и вывод матрицы на форму.
Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
Описание классов
Проект включает в себя четыре класса:
App.java;
Window.java;
EnterMatrix.java;
Matrix.java;
Класс App.java
Cодержит точку входа в программу. В качестве единственного параметра метод main() принимает массив строк args. В качестве параметра args методу main() передаются так называемые аргументы командной строки. Метод main() следит за управлением хода программы, поэтому App.java является управляющим классом.
Класс Window.java.
Класс является классом, который описывает графический интерфейс и обрабатывает пользовательское взаимодействие с GUI. Этот класс является наследником класса JFrame(). Конструктор JFrame() без параметров создает пустое окно.
В классе описаны следующие компоненты:
Два экземпляр класса EnterMatrix для ввода матриц;
панели для размещения кнопок на форме JPanel;
кнопки JButton;
Компоненты размещены с помощью вложения панелей и менеджера компоновки BorderLayout. Описываются компоненты окна, слушатели кнопок в оконном приложении. Обрабатывается действия над матрицами.
Класс EnterMatrix содержит следующие поля:
TextField [][] tfArray (поля для ввода коэффициентов матрицы);
Класс включает в себя метод getArray():
модификатор−public;
тип возвращаемого значения−double[][] (двойной массив);
параметров нет;
Метод getArray () возвращает массив вещественных коэффициентов, которые вводятся с клавиатуры пользователем в поля для ввода tfArray.
Также в классе описан конструктор EnterArray. Он создает новые поля для ввода и размещает их на панели в виде матрицы.
Класс Matrix
Основной класс описывающий вещественную матрицу третьего порядка. Поля:
double[][] data – двумерный массив данных
Метод конструктор получает в качестве параметра двумерный массив данных.
Метод det
тип возвращаемого значения – double;
параметры отсутствуют;
Возвращает определитель матрицы.
Метод show
тип возвращаемого значения – void;
параметры отсутствуют;
Вызывает диалоговое окно, на котором представлена матрица
Метод transposition
тип возвращаемого значения – Matrix;
параметры отсутствуют;
Транспонирует матрицу, и возвращает новый объект Matrix соответствующий транспонированной матрице.
Метод multiply
статичный метод – модификатор static
тип возвращаемого значения – Matrix;
параметры Matrix a, Matrix b;
Статический метод перемножения двух матриц a и b. Возвращает новый объект Matrix соответствующий перемноженной матрице.
Метод Minor
тип возвращаемого значения – Matrix;
параметры int i, int j;
Метод возвращает минор элемента i,j (новый экземпляр класса Matrix).
Метод reserve
тип возвращаемого значения – Matrix;
параметров нет;
Метод возвращает обратную матрицу новый экземпляр класса Matrix.
Метод division
статичный метод – модификатор static
тип возвращаемого значения – Matrix;
параметры Matrix a, Matrix b;
Статический метод деления двух матриц a и b. Возвращает новый объект Matrix соответствующий разделенным матрицам (обратная матрица a умноженная на матрицу b).
Текст программы
Листинг 1. Класс App
public class App {
public static void main(String[] args) {
new Window();
}
}
Листинг 2. Класс Window
import java.awt.BorderLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Window extends JFrame{
EnterMatrix em = new EnterMatrix();
EnterMatrix em2 = new EnterMatrix();
JPanel panelMatrix = new JPanel();
JButton add = new JButton("Добавить матрицу");
Window(){
super("Работа с матрицей 3его порядка");
this.setVisible(true);
JPanel panelBtn = new JPanel();
panelMatrix.add(em,BorderLayout.WEST);
JButton det = new JButton("Определитель");
JButton reserve = new JButton("Обратная матрица");
JButton mult = new JButton("Умножить");
JButton div = new JButton("Поделить");
panelBtn.add(add);
panelBtn.add(det);
panelBtn.add(reserve);
panelBtn.add(mult);
panelBtn.add(div);
getContentPane().add(panelBtn,BorderLayout.NORTH);
getContentPane().add(panelMatrix);
pack();
add.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if (add.
add.
"Убрать матрицу"
);
panelMatrix.add(em2,BorderLayout.EAST);
} else {
add.
"Добавить матрицу"
);
panelMatrix.remove(em2);
}
pack();
}});
det.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,new Matrix(em.getArray()).det());
}
});
reserve.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
Matrix m = new Matrix(em.getArray()).reverse();
if (m!=null){
m.show();
}else {
JOptionPane.showMessageDialog(null,"Определитель = 0");
}
}});
mult.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
Matrix.multiply(new Matrix(em.getArray()), new Matrix(em2.getArray())).show();
}
});
div.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
Matrix.division(new Matrix(em.getArray()), new Matrix(em2.getArray())).show();
}
});
}
}
Листинг 3. Класс EnterMatrix
import java.awt.TextField;
import javax.swing.Box;
import javax.swing.JPanel;
public class EnterMatrix extends JPanel{
TextField[][] tfArray = new TextField[3][3];
EnterMatrix(){
Box panel = Box.createVerticalBox();
JPanel[] panel2 = new JPanel[3];
for (int i =0;i<3;i++){
panel2[i] = new JPanel();
for (int j =0;j<3;j++){
tfArray[i][j] = new TextField();
tfArray[i][j].setText("");
panel2[i].add(tfArray[i][j]);
}
panel.add(panel2[i]);
}
this.add(panel);
}
double[][] getArray(){
double[][] temp = new double[3][3];
for (int i =0;i<3;i++){
for (int j =0;j<3;j++){
if(tfArray[i][j].getText()==""){
temp[i][j] = 0.0;
}else {
temp[i][j] = Double.parseDouble(tfArray[i][j].getText());
}
}
}
return temp;
}
}
Листинг 4. Класс Matrix
import java.awt.TextField;
import javax.swing.Box;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class Matrix {
private double[][] data ;
Matrix(double[][] a){
data = a;
}
double det (){
if (data.length == 3){
return data[0][0]*data[1][1]*data[2][2]+data[0][1]*data[1][2]*data[2][0]+data[1][0]*data[2][1]*data[0][2]-data[0][2]*data[1][1]*data[2][0]-data[0][0]*data[2][1]*data[1][2]-data[2][2]*data[1][0]*data[0][1];
} else if (data.length==2){
return data[0][0]*data[1][1]-data[0][1]*data[1][0];
}
return 0;
}
void show(){
Box panel = Box.createVerticalBox();
JLabel[] label = new JLabel[data.length];
for (int i =0 ; i
label[i] = new JLabel();
for (int j=0; j< data.length; j++){
System.out.println(i+" "+ j + " " +data[i][j]);
label[i].setText(label[i].getText()+" "+data[i][j]);
panel.add(label[i]);
}
}
JOptionPane.showMessageDialog(null,panel);
}
Matrix transposition(){
double [][] tempData = new double[3][3];
for (int i =0; i<3; i++){
for (int j =0; j<3; j++){
tempData[i][j]=data[j][i];
}
}
return new Matrix(tempData);
}
static Matrix multiply(Matrix a, Matrix b){
double [][] dataA = a.data;
double [][] dataB = b.data;
double [][] dataC = new double[3][3];
for (int i =0; i<3; i++){
for (int j =0; j<3; j++){
double s = 0;
for (int k = 0; k<3; k++){
s += dataA[i][k]*dataB[k][j];
}
dataC[i][j] = s;
}
}
return new Matrix(dataC);
}
Matrix minor(int i, int j){
double[][] tempData = new double[data.length-1][data.length-1];
int k=0;
int l=0;
for (int I=0;I<3;I++){
l=0;
for (int J=0;J<3;J++){
if (!((i==I) || (j==J))){
tempData[k][l] = data[I][J];
l++;
}
}
if (I!=i){k++;}
}
return new Matrix(tempData);
}
Matrix reverse(){
if (det()==0){
return null;
}
double[][] minorsData = new double[data.length][data.length];
for (int i =0; i
for (int j =0; j
if ((i+j)%2==0){
minorsData[i][j]=this.minor(i,j).det();
} else {
minorsData[i][j]=-this.minor(i,j).det();
}
}
}
Matrix m = new Matrix(minorsData).transposition();
double mDet = this.det();
double [][] mData = m.data;
for (int i =0; i
for (int j =0; j
mData[i][j]=mData[i][j]/mDet;
}
}
m = new Matrix(mData);
return m;
}
static Matrix division(Matrix a, Matrix b){
return Matrix.multiply(b.reverse(), a);
}
}
Вид приложения
Общий вид
Общий вид с добавленной второй матрицей
Результат перемножения матриц