МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ «БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ»
КАФЕДРА: Экономической информатики
ФАКУЛЬТЕТ: Инженерно-экономический
Контрольная работа
по предмету
«Системный анализ и проектирование информационных систем»
Вариант 4
ВЫПОЛНИЛА: Козлова Е. С. группа 872302
ПРОВЕРИЛА: Живицкая Е. Н.
МИНСК 2011
Содержание
Описание задачи…………………………………………………………………..3
Решение задачи (ручной способ)………………………………………………...4
Программа по решению задачи (листинг кода)…………………………………5
Руководство пользователя………………………………………………………11
Выводы…………………………………………………………………………...14
Описание задачи
Городское правление выделило средства на благоустройство города. 3-м экспертам были предложены следующие альтернативы:
1) озеленение территории города;
2) постройка и ремонт детских площадок;
3) ремонт дорог и тротуаров;
Матрица оценок экспертов:
Решить методом последовательных сравнений.
Решение задачи (ручной способ)
Дана матрица оценок экспертами 3-х альтернатив:
-
Расположим уели в виде массива в порядке убывания их важности:
Z1Z3Z2.
Назначим предварительные оценки цели:
p1=100, p3=60, p2=30.
-
Выполним сравнение целей и корректировку их оценок:
Z1↔(Z3&Z2)
Z1 лучше, чем Z3 и Z2. (Z3 + Z2 = 90) < (Z1 = 100).
Следовательно, корректировка не нужна.
-
Вычислим веса целей:
W1 = 100/(100+60+30) = 0,526
W3 = 60/(100+60+30) = 0,316
W2 = 30/(100+60+30) = 0,158
Следовательно, самой предпочтительной является 1-я альтернатива «озеленение территории города». Затем следует 3-я альтернатива «ремонт дорог и тротуаров». Наименьшее предпочтение отдаётся 2-й альтернативе «постройка и ремонт детских площадок».
Программа по решению задачи (листинг кода)
MetodPosledSravn.java
package sapis_kr;
import java.text.DecimalFormat;
import javax.swing.JOptionPane;
public class MetodPosledSravn extends javax.swing.JFrame {
public MetodPosledSravn() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
jTextField2 = new javax.swing.JTextField();
jLabel5 = new javax.swing.JLabel();
jTextField3 = new javax.swing.JTextField();
jLabel6 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
jLabel9 = new javax.swing.JLabel();
jLabel10 = new javax.swing.JLabel();
jLabel11 = new javax.swing.JLabel();
jLabel12 = new javax.swing.JLabel();
jLabel13 = new javax.swing.JLabel();
jLabel14 = new javax.swing.JLabel();
jLabel15 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jLabel16 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
jLabel1.setText("Метод последовательных сравнений");
jLabel2.setFont(new java.awt.Font("Tahoma", 2, 11)); // NOI18N
jLabel2.setText("Предварительные оценки:");
jLabel3.setText("Цель 1:");
jLabel4.setText("Цель 2:");
jLabel5.setText("Цель 3:");
jLabel6.setFont(new java.awt.Font("Tahoma", 2, 11)); // NOI18N
jLabel6.setText("Скорректированные оценки:");
jLabel7.setText("Цель 1:");
jLabel8.setText("Цель 2:");
jLabel9.setText("Цель 3:");
jLabel10.setFont(new java.awt.Font("Tahoma", 2, 11)); // NOI18N
jLabel10.setText("Веса целей:");
jLabel11.setFont(new java.awt.Font("Tahoma", 2, 12)); // NOI18N
jLabel11.setText("______________________________________________________");
jLabel12.setText("Цель 1: W1=");
jLabel13.setText("Цель 2: W2=");
jLabel14.setText("Цель 3: W3=");
jLabel15.setFont(new java.awt.Font("Tahoma", 3, 11)); // NOI18N
jLabel15.setText("Предпочтение:");
jButton1.setText("Рассчитать");
jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jButton1MouseClicked(evt);
}
});
jLabel16.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(80, 80, 80)
.addComponent(jLabel1)
.addContainerGap(83, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 125, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addComponent(jLabel5)
.addGap(18, 18, 18)
.addComponent(jTextField3))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addComponent(jLabel4)
.addGap(18, 18, 18)
.addComponent(jTextField2))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addComponent(jLabel3)
.addGap(18, 18, 18)
.addComponent(jTextField1))
.addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 58, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel6)
.addComponent(jLabel7)
.addComponent(jLabel8)
.addComponent(jLabel9))
.addGap(47, 47, 47))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel11)
.addContainerGap(12, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel13)
.addComponent(jLabel10)
.addComponent(jLabel14)
.addComponent(jLabel12)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel15)
.addGap(18, 18, 18)
.addComponent(jLabel16, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(155, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jLabel6))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel7))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel4)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel8))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5)
.addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel9))
.addGap(18, 18, 18)
.addComponent(jButton1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel11)
.addGap(13, 13, 13)
.addComponent(jLabel10)
.addGap(18, 18, 18)
.addComponent(jLabel12)
.addGap(18, 18, 18)
.addComponent(jLabel13)
.addGap(18, 18, 18)
.addComponent(jLabel14)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel16, javax.swing.GroupLayout.DEFAULT_SIZE, 14, Short.MAX_VALUE)
.addComponent(jLabel15, javax.swing.GroupLayout.Alignment.LEADING))
.addContainerGap(20, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
int p1 = 0, p2 = 0, p3 = 0;
try
{
if(jTextField1.getText().equalsIgnoreCase("") || jTextField2.getText().equalsIgnoreCase("") ||
jTextField3.getText().equalsIgnoreCase(""))
{
JOptionPane.showMessageDialog(this, "Нужно заполнить все поля предварительных оценок!");
return;
}
p1 = Integer.parseInt(jTextField1.getText());
p2 = Integer.parseInt(jTextField2.getText());
p3 = Integer.parseInt(jTextField3.getText());
if(p1<0 || p2<0 || p3<0)
{
JOptionPane.showMessageDialog(this, "Предварительные оценки не могут быть отрицательными!");
return;
}
Logic res = new Logic();
int correctMarks[][] = res.correctMarks(p1, p2, p3);
jLabel7.setText("Цель " + correctMarks[0][1] + ": " + correctMarks[0][0]);
jLabel8.setText("Цель " + correctMarks[1][1] + ": " + correctMarks[1][0]);
jLabel9.setText("Цель " + correctMarks[2][1] + ": " + correctMarks[2][0]);
double calculatedResult[][] = res.calculate(correctMarks);
DecimalFormat df = new DecimalFormat("###");
jLabel12.setText("Цель " + df.format(calculatedResult[0][1]) + ": W"
+ df.format(calculatedResult[0][1]) + "=" + calculatedResult[0][0]);
jLabel13.setText("Цель " + df.format(calculatedResult[1][1]) + ": W"
+ df.format(calculatedResult[1][1]) + "=" + calculatedResult[1][0]);
jLabel14.setText("Цель " + df.format(calculatedResult[2][1]) + ": W"
+ df.format(calculatedResult[2][1]) + "=" + calculatedResult[2][0]);
jLabel16.setText(df.format(calculatedResult[0][1]) + ", " +
df.format(calculatedResult[1][1]) + ", " + df.format(calculatedResult[2][1]));
}
catch(NullPointerException e)
{
}
catch (RuntimeException e) {
JOptionPane.showMessageDialog(this, "Неверный формат предварительных оценок!");
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MetodPosledSravn().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel14;
private javax.swing.JLabel jLabel15;
private javax.swing.JLabel jLabel16;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
// End of variables declaration
}
Logic.java
package sapis_kr;
public class Logic {
public int[][] correctMarks(int p1, int p2, int p3)
{
int v[][]= new int[3][2];
v[0][0] = p1;
v[1][0] = p2;
v[2][0] = p3;
for(int i=0; i<3; i++)
{
v[i][1] = i+1; }
for(int i=0; i<3; i++)
{
for(int j=1; j<3; j++)
{
if(v[i][0] < v[j][0] && i<j)
{
int temp = v[i][0];
v[i][0] = v[j][0];
v[j][0] = temp;
temp = v[i][1];
v[i][1] = v[j][1];
v[j][1] = temp; } } }
for(int i=0; i<3; i++)
{
for(int j=1; j<3; j++)
{
for(int k=2; k<3; k++)
{
while(v[i][0] <= (v[j][0]+v[k][0]) && (i<j) && (k>j))
{
v[i][0] += 30; } } } }
return v;
}
public double[][] calculate(int[][] marks) {
int v[][]= marks;
double sum = 0;
for(int i=0; i<3; i++)
{
sum += v[i][0]; }
double res[][] = new double[3][2];
for(int i=0; i<3; i++)
{
res[i][0] = (double) ((v[i][0]) / sum);
res[i][1] = v[i][1];
}
return res; } } }