• Tidak ada hasil yang ditemukan

Data penjualan dari 10 sample barang pada toserba Ainun mart selama tahun 2014 dan 2015 menunjukkan bahwa pola penjualannya acak. Pola penjualan yang acak dapat diramalkan dengan menggunakan metode

16

moving average. Sehingga dalam penelitian ini, digunakan metode simple moving average untuk meramalkan pengadaan stok.

Metode simple moving average yang digunakan dalam penelitian ini menggunakan n = 3. Penggunaan n yang kecil untuk meningkatkan keakuratan karena berhubungan dengan faktor-faktor kejadian terdekat yang dapat mempengaruhi peramalan. Dalam penelitian ini, dicoba juga kedalam beberapa variasi pemodelan data yang baru dengan metode simple moving average.

Variasi pemodelan data yang baru dibuat untuk memenuhi kemungkinan jika pola data suatu barang memiliki pola yang sama setiap tahunnya. Variasi dibagi menjadi 3 yaitu variasi 1, variasi 2 dan variasi 3. Inti dari variasi pemodelan data yang baru adalah sama, yaitu peramalan menggunakan data yang telah ditentukan dari tahun sebelumnya untuk dirata-rata sehingga dapat memperkirakan data yang baru. Yang membedakan dari ketiga variasi adalah target dari peramalan. Contoh data yang diambil adalah data bulan 1, 2, dan 3 pada tahun 2014, kemudian dirata-rata. Target dari variasi 1 adalah bulan 1 tahun 2015, target dari variasi 2 adalah bulan 2 tahun 2015 dan target dari variasi 3 adalah bulan 3 tahun 2015.

3.4Fase Implementasi 3.4.1 Manajemen data

1. Perancangan Konseptual

Sistem pendukung pengambilan keputusan memiliki 3 entitas, antara lain : entitas kategori barang, entitas penjualan, entitas prediksi. Entitas kategori barang memilik relasi dengan entitas penjualan, sedangkan entitas prediksi tidak mempunyai relasi dengan entitas lain.

a. Entitas Barang

Entitas barang menyimpan data yang berkaitan dengan kriteria khusus mengenai kode barang dan nama barang. Entitas ini dibuat untuk mengelompokkan barang sesuai kriterianya.

17 b. Entitas Penjualan

Entitas Penjualan menyimpan data yang berkaitan dengan transaksi penjualan berupa kode penjualan. Dalam proses peramalan, data pada entitas ini dibutuhkan untuk menghitung peramalan.

c. Entitas Peramalan

Entitas Peramalan menyimpan data yang berkaitan dengan peramalan barang mengenai data penjualan dan hasil peramalannya. Entitas peramalan merupakan sebuah entitas untuk membantu dalam proses penghitungan peramalan.

BarangAinun PenjualanAinun

BarangPredik

memiliki

KodeBarang NamaBarang KodePenjualan

Jumlah no Penjualan Prediksi N 1 Gambar 3.1 : ER Diagram 2. Perancangan Logikal BarangAinun -KodeBarang : varchar(20) PK -NamaBarang : varchar(20) Penjualan Ainun -KodePenjualan : varchar(20) PK -jumlah : number

18 BarangPredik -No : number -Penjualan : number -Prediksi : number 3. Perancangan Fisikal

Nama Field Tipe Data Lebar Keterangan KodeBarang varchar 20 kode barang yang

dijual di toserba Ainun.

NamaBarang varchar 20 nama dari barang Tabel 3.1 Barang (BarangAinun)

Nama Field Tipe Data Lebar Keterangan KodePenjualan varchar 20 kode penjualan

selama 1 bulan KodeBarang number - kode dari barang

yang terjual Jumlah number - jumlah penjualan

selama 1 bulan Tabel 3.2 Penjualan (PenjualanAinun)

Nama Field Tipe Data Lebar Keterangan No number - nomor dari prediksi Penjualan number - data penjualan

Prediksi number - hasil dari peramalan Tabel 3.3 Peramalan (BarangPredik)

19 3.4.2 Manajemen Model 1. Usecase diagram a. Software Tester user

System

Setting mode Peramalan Setting Target Peramalan Lihat hasil Peramalan Input Data Penjualan

Gambar 3.2 : Use Case Diagram Software Tester b. Software User user

System

Lihat Kategori Barang Setting Target Peramalan Lihat hasil Peramalan Input Data Penjualan

20 2. Class Diagram a. Software Tester +CatatPredik() +CariSelisih() +CariSelisih1() +CariSelisih2() +CariSelisih3() +CariPredik1() +CariPredik2() +CariPredik3() -No -Penjualan -Prediksi BarangPredik

Gambar 3.4 : Class Diagram Software Tester b. Software User +CatatPredik() +CariSelisih() +CariSelisih1() +CariSelisih2() +CariSelisih3() +CariPredik1() +CariPredik2() +CariPredik3() -No -Penjualan -Prediksi BarangPredik +CariBarangPrepared() +LihatSeluruhBarang() -KodeBarang -NamaBarang BarangAinun +CariData() -KodePenjualan -KodeBarang -Jumlah PenjualanAinun

21 3. Sequence diagram

a. Software Tester

SimulasiTest simulasiClass SimulasiKontrol simulasiDB MA

User ActionEvent

1 : Masukkan data()

2 : ButtonPredikActionPerformed()

3 : simpan data()

4 : simpan bulan()

5 : simpan nama bulan()

6 : simpan tahun() 7 : simpan vasriasi() 8 : hitungMA() 9 : ambil data() 10 : getAvg() 11 : hasil prediksi() 12 : catatPredik() 13 : kembali() 14 : mape() 15 : cariPredik() 16 : data Prediksi() 17 : cariSelisih() 18 : hasil MAPE() 19 : simpan hasil() 20 : tampil hasil()

22 b. Software User

UserFrame UserClass UserKontrol UserDB MA

user Action Event

1 : Masukkan data()

2 : ButtonPredictActionPerformed()

3 : simpan kode barang() 4 : simpan nama barang() 5 : simpan bulan() 6 : simpan nama bulan()

7 : simpan tahun() 8 : hitungMA() 9 : cariData() 10 : data penjualan() 11 : getAvg() 12 : hasil prediksi() 13 : catatPredik() 14 : kembali() 15 : mapeNormal() 16 : cariSelisih() 17 : hasil MAPE() 18 : kembali() 19 : mapeVar1() 20 : cariPredik1() 21 : data Prediksi() 22 : cariSelisih1() 23 : hasil MAPE() 24 : kembali() 25 : mapeVar2() 26 : cariPredik2() 27 : data Prediksi() 28 : cariSelisih2() 29 : hasil MAPE() 30 : kembali() 31 : mapeVar3() 32 : cariPredik3() 33 : data Prediksi() 34 : cariSelisih3() 35 : hasil MAPE() 36 : simpanhasil() 37 : tampil hasil()

23 4. Activity diagram

a. Software Tester

Halaman SimulasiTest

masukkan data

klik Button Prediksi hitungMA mapeNormal mode=normal else mode = Variasi 1

Sistem

User

hitungMA mapeVar1 else mode = Variasi 2 hitungMA mapeVar2 else mode = Variasi 3 hitungMA mapeVar3 tampil hasil

24 b. Software User

Halaman SimulasiTest

masukkan data

klik Button Prediksi hitungMA mapeNormal

Sistem User

mapeVar1

mapeVar2

mapeVar3 cari MAPE terendah

Tampil hasil

Gambar 3.9 : Activity Diagram Software User 3.4.3 Manajemen dialog

1. Tampilan Software Tester

Mode Prediksi

Target Prediksi Bulan Tahun n Bulan

Prediksi Batal Keluar

Tahun Januari Februari Maret April Mei Juni Juli Agustus September Oktober November Desember Tahun Januari Februari Maret April Mei Juni Juli Agustus September Oktober November Desember

25 2. Tampilan Software User

SPPK Pengadaan Stok Barang Kode Barang Nama Barang Bulan Tahun Prediksi Batal Close Hasil Prediksi

Kode Barang Nama Barang

26 BAB IV

FASE IMPLEMENTASI

4.1Manajemen Data

Langkah pertama dalam mengimplementasikan program yang telah dirancang sebelumnya adalah membuat database. Database dibuat untuk menampung data yang akan dipakai atau telah dihasilkan oleh sistem kedalam tabel untuk disimpan sebagai record. Tabel yang dibuat ada 3 yaitu :

1. Tabel BarangAinun

Gambar 4.1 : Tabel BarangAinun

Gambar 4.1, merupakan tabel dari BarangAinun beserta keterangannya. Tabel BarangAinun merupakan tabel dummy dari tabel barang di ainun mart. Tabel ini berisi data barang apa saja yang dijual oleh ainin mart. Tabel ini hanya memilik 2 kolom yaitu kolom kodeKategori(PK) dan namaKategori karena dalam sistem yang dibuat hanya membutuhkan 2 kolom tersebut.

2. Tabel PenjualanAinun

Gambar 4.2 : Tabel PenjualanAinun

Gambar 4.2 diatas, merupakan table dari PenjualanAinun beserta keterangannya. Tabel PenjualanAinun merupakan tabel dummy dari tabel penjualan bulanan di ainun mart. Tabel ini berisi data penjualan bulanan barang ainun mart yang dikategorikan per barang dan per bulan. Tabel memiliki 3 kolom, yaitu kolom kodePenjualan(PK), kodeBarang dan jumlah.

27 3. Tabel BarangPredik

Gambar 4.3 : Tabel BarangPredik

Gambar 4.3 diatas, merupakan table dari BarangPredik beserta keterangannya. Tabel BarangPredik merupakan tabel bantu untuk program yang telah dibuat. Fungsi dari tabel ini adalah menyimpan sementara data penjualan dan hasil prediksi untuk mempermudah penghitungan MAPE. Tabel ini memiliki 3 kolom, yaitu kolom no, penjualan, prediksi.

4.2Manajemen Model 4.2.1 Software Tester

Berikut adalah fungsi-fungsi dan tahapan-tahapan peramalan pada software tester :

1. Button Prediksi

Merupakan sebuah tombol untuk melakukan prediksi dari data- data yang telah dimasukkan. Pada tombol prediksi dibagi menjadi 3 kondisi sesuai dengan mode peramalan yang telah dipilih sebelumnya. Langkah fungsi buttonPrediksi() dalam melakukan prediksi peramalan adalah sebagai berikut :

a. Melakukan peramalan

public void hitungMA(simulasiClass sm) throws SQLException {

int[] windowSizes = {sm.getVar()};

double[] data = {sm.getJan1(), sm.getFeb1(), sm.getMar1(), sm.getApr1(),

sm.getMei1(), sm.getJun1(), sm.getJul1(), sm.getAgt1(), sm.getSep1(),

sm.getOkt1(), sm.getNov1(), sm.getDes1(), sm.getJan2(), sm.getFeb2(),

sm.getMar2(), sm.getApr2(), sm.getMei2(), sm.getJun2(), sm.getJul2(),

28

sm.getAgt2(), sm.getSep2(), sm.getOkt2(), sm.getNov2(), sm.getDes2()};

int i = 1;

for (int windSize : windowSizes) { MA ma = new MA(windSize); for (double x : data) { if (x != 0) { sm.setNo(i); ma.newNum(x); sm.setData(x); double p = ma.getAvg(); System.out.println("Next number = " + x + ", SMA = " + p); sm.setPrediksi(p); simulasiDB.getKoneksi().catatPredik(sm); } i++; } } }

b. Menghitung dengan algoritma moving average package testerPack;

import java.util.LinkedList; import java.util.Queue;

public class MA {

private final Queue<Double> window = new LinkedList<Double>();

private final int period; private double sum;

29

public MA(int period) {

assert period > 0 : "Period must be a positive integer";

this.period = period; }

public void newNum(double num) { sum += num; window.add(num); if (window.size() > period) { sum -= window.remove(); } }

public double getAvg() { if (window.isEmpty()) {

return 0; // technically the average is undefined

}

return sum / window.size(); }

}

c. Memasukkan hasil prediksi kedalam tabel bantu

public void catatPredik(simulasiClass sim) throws SQLException {

PreparedStatement pstmt = null; try {

conn.setAutoCommit(false);

String sql = "update barangPredik set penjualan=? ,prediksi=? "

+ "where no=?";

30 pstmt.setDouble(3, sim.getNo()); pstmt.setDouble(2, sim.getPrediksi()); pstmt.setDouble(1, sim.getData()); pstmt.executeUpdate(); conn.commit();

} catch (SQLException exception) { conn.rollback(); throw exception; } finally { try { conn.setAutoCommit(true); if (pstmt != null) { pstmt.close(); }

} catch (SQLException exception) { throw exception;

} } }

d. Mencari prediksi

public void cariPredik1(simulasiClass sim) throws SQLException {

PreparedStatement statement = null; ResultSet result = null;

String p = "";

try {

conn.setAutoCommit(false);

String sql = "Select prediksi from barangPredik where "

+ "no=?";

31 conn.prepareStatement(sql); statement.setInt(1, sim.getBulan() + 2); result = statement.executeQuery(); if (result.next()) { p = result.getString("prediksi"); Double pr = Double.parseDouble(p); sim.setPrediksi(pr); } conn.commit();

} catch (SQLException exception) { conn.rollback();

throw exception; }

}

public void cariPredik2(simulasiClass sim) throws SQLException {

PreparedStatement statement = null; ResultSet result = null;

String p = "";

try {

conn.setAutoCommit(false);

String sql = "Select prediksi from barangPredik where " + "no=?"; statement = conn.prepareStatement(sql); statement.setInt(1, sim.getBulan() + 1);

32 result = statement.executeQuery(); if (result.next()) { p = result.getString("prediksi"); Double pr = Double.parseDouble(p); sim.setPrediksi(pr); } conn.commit();

} catch (SQLException exception) { conn.rollback();

throw exception; }

}

public void cariPredik3(simulasiClass sim) throws SQLException {

PreparedStatement statement = null; ResultSet result = null;

String p = "";

try {

conn.setAutoCommit(false);

String sql = "Select prediksi from barangPredik where " + "no=?"; statement = conn.prepareStatement(sql); statement.setInt(1, sim.getBulan()); result = statement.executeQuery(); if (result.next()) {

33 p = result.getString("prediksi"); Double pr = Double.parseDouble(p); sim.setPrediksi(pr); } conn.commit();

} catch (SQLException exception) { conn.rollback();

throw exception; }

}

e. Mencari MAPE dan menampilkan hasil

public void mapeNormal(simulasiClass sm) throws SQLException {

int setno = sm.getNo() - 6; int jum = 0; sm.setNo(setno); sm.setMAPE(0); for (int j = 0; j < 6; j++) { simulasiDB.getKoneksi().cariSelisih(sm); int no = sm.getNo() + 1; sm.setNo(no);

int mape = sm.getMAPE(); jum = jum + mape;

sm.setJum(jum); System.out.println("no :" + no + " mape :" + sm.getMAPE() + " jumlah Mape:" + sm.getJum()); }

34

sm.setJum(mapes);

sm.setHasil("Hasil prediksi untuk bulan " + sm.getNamaBulan() + " tahun " + sm.getTahun() + "\n adalah " + sm.getPrediksi() + "\n MAPE : " + sm.getJum() + "%"); }

public void mapeVar1(simulasiClass sm) throws SQLException {

simulasiDB.getKoneksi().cariPredik1(sm); int setno = sm.getBulan() + 6; int jum = 0; sm.setNo(setno); sm.setMAPE(0); for (int j = 0; j < 6; j++) { simulasiDB.getKoneksi().cariSelisih1(sm); int no = sm.getNo() + 1; sm.setNo(no);

int mape = sm.getMAPE(); jum = jum + mape;

sm.setJum(jum); System.out.println("no :" + no + " mape :" + sm.getMAPE() + " jumlah Mape:" + sm.getJum()); }

int mapes = sm.getJum() / 6; sm.setJum(mapes);

sm.setHasil("Hasil prediksi untuk bulan " + sm.getNamaBulan()

35 + " tahun " + sm.getTahun() + "\n adalah " + sm.getPrediksi() + "\n MAPE : " + sm.getJum() + "%"); }

public void mapeVar2(simulasiClass sm) throws SQLException {

simulasiDB.getKoneksi().cariPredik2(sm); int setno = sm.getBulan() + 6; int jum = 0; sm.setNo(setno); sm.setMAPE(0); for (int j = 0; j < 6; j++) { simulasiDB.getKoneksi().cariSelisih2(sm); int no = sm.getNo() + 1; sm.setNo(no);

int mape = sm.getMAPE(); jum = jum + mape;

sm.setJum(jum); System.out.println("no :" + no + " mape :" + sm.getMAPE() + " jumlah Mape:" + sm.getJum()); }

int mapes = sm.getJum() / 6; sm.setJum(mapes);

sm.setHasil("Hasil prediksi untuk bulan " + sm.getNamaBulan()

+ " tahun " + sm.getTahun() + "\n adalah " + sm.getPrediksi()

36 "%");

}

public void mapeVar3(simulasiClass sm) throws SQLException {

simulasiDB.getKoneksi().cariPredik3(sm); int setno = sm.getBulan() + 6; int jum = 0; sm.setNo(setno); sm.setMAPE(0); for (int j = 0; j < 6; j++) { simulasiDB.getKoneksi().cariSelisih3(sm); int no = sm.getNo() + 1; sm.setNo(no);

int mape = sm.getMAPE(); jum = jum + mape;

sm.setJum(jum); System.out.println("no :" + no + " mape :" + sm.getMAPE() + " jumlah Mape:" + sm.getJum()); }

int mapes = sm.getJum() / 6; sm.setJum(mapes);

sm.setHasil("Hasil prediksi untuk bulan " + sm.getNamaBulan() + " tahun " + sm.getTahun() + "\n adalah " + sm.getPrediksi() + "\n MAPE : " + sm.getJum() + "%"); } }

37 f. Mencari selisih error

public void cariSelisih(simulasiClass sim) throws SQLException {

PreparedStatement statement = null; ResultSet result = null;

int p = 0;

try {

conn.setAutoCommit(false);

String sql = "select ((ABS((select penjualan from barangpredik "

+ "where no=?)-(select prediksi from "

+ "barangpredik where no=?))/(select penjualan "

+ "from barangpredik where no=?))*100) as MAPE from dual";

statement = conn.prepareStatement(sql); statement.setInt(1, sim.getNo() + 1); statement.setInt(2, sim.getNo()); statement.setInt(3, sim.getNo() + 1); result = statement.executeQuery(); if (result.next()) { p = result.getInt("mape"); sim.setMAPE(p); } conn.commit();

} catch (SQLException exception) { conn.rollback();

38 }

}

public void cariSelisih1(simulasiClass sim) throws SQLException {

PreparedStatement statement = null; ResultSet result = null;

int p = 0;

try {

conn.setAutoCommit(false);

String sql = "select ((ABS((select penjualan from barangpredik "

+ "where no=?)-(select prediksi from "

+ "barangpredik where no=?))/(select penjualan "

+ "from barangpredik where no=?))*100) as MAPE from dual";

statement = conn.prepareStatement(sql); statement.setInt(1, sim.getNo()); statement.setInt(2, sim.getNo() - 10); statement.setInt(3, sim.getNo()); result = statement.executeQuery(); if (result.next()) { p = result.getInt("mape"); sim.setMAPE(p); } conn.commit();

} catch (SQLException exception) { conn.rollback();

39

throw exception; }

}

public void cariSelisih2(simulasiClass sim) throws SQLException {

PreparedStatement statement = null; ResultSet result = null;

int p = 0;

try {

conn.setAutoCommit(false);

String sql = "select ((ABS((select penjualan from barangpredik "

+ "where no=?)-(select prediksi from "

+ "barangpredik where no=?))/(select penjualan "

+ "from barangpredik where no=?))*100) as MAPE from dual";

statement = conn.prepareStatement(sql); statement.setInt(1, sim.getNo()); statement.setInt(2, sim.getNo() - 11); statement.setInt(3, sim.getNo()); result = statement.executeQuery(); if (result.next()) { p = result.getInt("mape"); sim.setMAPE(p); } conn.commit();

40

conn.rollback(); throw exception; }

}

public void cariSelisih3(simulasiClass sim) throws SQLException {

PreparedStatement statement = null; ResultSet result = null;

int p = 0;

try {

conn.setAutoCommit(false);

String sql = "select ((ABS((select penjualan from barangpredik "

+ "where no=?)-(select prediksi from "

+ "barangpredik where no=?))/(select penjualan "

+ "from barangpredik where no=?))*100) as MAPE from dual";

statement = conn.prepareStatement(sql); statement.setInt(1, sim.getNo()); statement.setInt(2, sim.getNo() - 12); statement.setInt(3, sim.getNo()); result = statement.executeQuery(); if (result.next()) { p = result.getInt("mape"); sim.setMAPE(p); } conn.commit();

41

} catch (SQLException exception) { conn.rollback();

throw exception; }

}

2. Button Batal

Merupakan sebuah tombol yang akan mengembalikan semua text field dalam sistem simulasi menjadi bersih kembali sehingga tidak harus menghapusnya satu persatu.

3. Button Keluar

Merupakan sebuah tombol yang fungsinya adalah untuk menutup sistem.

4.2.2 Software User

Berikut adalah fungsi-fungsi dan tahap-tahap peramalan pada software user :

1. Button Prediksi

Merupakan sebuah tombol untuk melakukan prediksi. Berbeda dengan software tester, software user akan langsung menghitung keempat mode peramalan sekaligus. Keempat mode peramalan yang dihitung akan dicari MAPE terkecil dan MAPE terkecil itulah yang akan dikeluarkan sebagai hasil peramalan. Langkah fungsi buttonPrediksi() dalam melakukan prediksi peramalan adalah sebagai berikut :

a. Mencari data penjualan dalam database untuk diproses public void cariData(UserClass usr) throws SQLException {

PreparedStatement statement = null; ResultSet result = null;

String p = "";

try {

42

String sql = "Select jumlah from penjualanAinun where " + "kodePenjualan=?"; statement = conn.prepareStatement(sql); statement.setString(1, usr.getKodePjualan()); result = statement.executeQuery(); if (result.next()) { p = result.getString("jumlah"); Double pr = Double.parseDouble(p); usr.setPjualan(pr); } conn.commit();

} catch (SQLException exception) { conn.rollback();

throw exception; }

}

b. Melakukan peramalan

public void hitungMA(UserClass sm) throws SQLException {

int[] windowSizes = {3};

double[] data = new double[24]; for (int i = 0; i < 24; i++) { if (sm.getBulan() < 10) { sm.setBlnStr("0" + sm.getBulan()); } else { String bln = String.valueOf(sm.getBulan());

43 sm.setBlnStr(bln); } UserDB.getKoneksi().cariData(sm); sm.setBulan(sm.getBulan() + 1); if (sm.getBulan() == 13) { sm.setBulan(1); sm.setTahun(sm.getTahun() + 1); } data[i] = sm.getPjualan(); } int i = 1;

for (int windSize : windowSizes) { MA ma = new MA(windSize); for (double x : data) { if (x != 0) { sm.setNo(i); ma.newNum(x); sm.setData(x); double p = ma.getAvg(); sm.setPrediksi(p); UserDB.getKoneksi().catatPredik(sm); } i++; } } }

c. Menghitung dengan algoritma moving average package testerPack;

import java.util.LinkedList; import java.util.Queue;

44 public class MA {

private final Queue<Double> window = new LinkedList<Double>();

private final int period; private double sum;

public MA(int period) {

assert period > 0 : "Period must be a positive integer";

this.period = period; }

public void newNum(double num) { sum += num; window.add(num); if (window.size() > period) { sum -= window.remove(); } }

public double getAvg() { if (window.isEmpty()) {

return 0; // technically the average is undefined

}

return sum / window.size(); }

}

d. Memasukkan hasil prediksi kedalam table bantu

public void catatPredik(UserClass usr) throws SQLException {

45 try {

conn.setAutoCommit(false);

String sql = "update barangPredik set penjualan=? ,prediksi=? "

+ "where no=?"; pstmt = conn.prepareStatement(sql); pstmt.setDouble(3, usr.getNo()); pstmt.setDouble(2, usr.getPrediksi()); pstmt.setDouble(1, usr.getData()); pstmt.executeUpdate(); conn.commit();

} catch (SQLException exception) { conn.rollback(); throw exception; } finally { try { conn.setAutoCommit(true); if (pstmt != null) { pstmt.close(); }

} catch (SQLException exception) { throw exception;

} } }

e. Mencari prediksi

public void cariPredik1(UserClass usr) throws SQLException {

PreparedStatement statement = null; ResultSet result = null;

46 try {

conn.setAutoCommit(false);

String sql = "Select prediksi from barangPredik where " + "no=?"; statement = conn.prepareStatement(sql); statement.setInt(1, usr.getNo1() + 14); result = statement.executeQuery(); if (result.next()) { p = result.getString("prediksi"); Double pr = Double.parseDouble(p); usr.setPrediksi(pr); } conn.commit();

} catch (SQLException exception) { conn.rollback();

throw exception; }

}

public void cariPredik2(UserClass usr) throws SQLException {

PreparedStatement statement = null; ResultSet result = null;

String p = "";

try {

conn.setAutoCommit(false);

47 barangPredik where " + "no=?"; statement = conn.prepareStatement(sql); statement.setInt(1, usr.getNo1() + 13); result = statement.executeQuery(); if (result.next()) { p = result.getString("prediksi"); Double pr = Double.parseDouble(p); usr.setPrediksi(pr); } conn.commit();

} catch (SQLException exception) { conn.rollback();

throw exception; }

}

public void cariPredik3(UserClass usr) throws SQLException {

PreparedStatement statement = null; ResultSet result = null;

String p = "";

try {

conn.setAutoCommit(false);

String sql = "Select prediksi from barangPredik where "

+ "no=?";

48 conn.prepareStatement(sql); statement.setInt(1, usr.getNo1()+12); result = statement.executeQuery(); if (result.next()) { p = result.getString("prediksi"); Double pr = Double.parseDouble(p); usr.setPrediksi(pr); } conn.commit();

} catch (SQLException exception) { conn.rollback();

throw exception; }

}

f. Mencari MAPE dan menampilkan hasil

public void mapeNormal(UserClass sm) throws SQLException {

int setno = sm.getNo() - 6; int jum = 0; sm.setNo(setno); sm.setMAPE(0); sm.setMAPE1(0); sm.setJum(0); for (int j = 0; j < 6; j++) { UserDB.getKoneksi().cariSelisih(sm); int no = sm.getNo() + 1; sm.setNo(no);

49

jum = jum + mape; }

public void mapeVar1(UserClass sm) throws SQLException {

UserDB.getKoneksi().cariPredik1(sm); int setno = sm.getNo1() + 18;

int jum = 0; sm.setNo(setno); sm.setMAPE(0); for (int j = 0; j < 6; j++) { UserDB.getKoneksi().cariSelisih1(sm); int no = sm.getNo() + 1; sm.setNo(no);

int mape = sm.getMAPE(); jum = jum + mape;

}

int mapes = jum / 6;

if (mapes < sm.getMAPE1()) { sm.setJum(sm.getPrediksi()); sm.setMAPE1(mapes);

} }

public void mapeVar2(UserClass sm) throws SQLException {

UserDB.getKoneksi().cariPredik2(sm); int setno = sm.getNo1() + 18;

int jum = 0; sm.setNo(setno); sm.setMAPE(0);

for (int j = 0; j < 6; j++) {

50

UserDB.getKoneksi().cariSelisih2(sm); int no = sm.getNo() + 1; sm.setNo(no);

int mape = sm.getMAPE(); jum = jum + mape;

}

int mapes = jum / 6;

if (mapes < sm.getMAPE1()) { sm.setJum(sm.getPrediksi()); sm.setMAPE1(mapes);

} }

public void mapeVar3(UserClass sm) throws SQLException {

UserDB.getKoneksi().cariPredik3(sm); int setno = sm.getNo1() + 18;

int jum = 0; sm.setNo(setno); sm.setMAPE(0); for (int j = 0; j < 6; j++) { UserDB.getKoneksi().cariSelisih3(sm); int no = sm.getNo() + 1; sm.setNo(no);

int mape = sm.getMAPE(); jum = jum + mape;

}

int mapes = jum / 6;

if (mapes < sm.getMAPE1()) { sm.setJum(sm.getPrediksi()); sm.setMAPE1(mapes);

}

51

sm.setHasil("Rekomendasi pengadaan stok untuk \nbarang " +sm.getNamaBrg()+"\npada bulan "+ sm.getNamaBulan() + " tahun " + sm.getTahun() +" adalah "+stok); }

g. Mencari selisih error

public void cariSelisih(UserClass usr) throws SQLException {

PreparedStatement statement = null; ResultSet result = null;

int p = 0;

try {

conn.setAutoCommit(false);

String sql = "select ((ABS((select penjualan from barangpredik "

+ "where no=?)-(select prediksi from "

+ "barangpredik where no=?))/(select penjualan "

+ "from barangpredik where no=?))*100) as MAPE from dual";

statement = conn.prepareStatement(sql); statement.setInt(1, usr.getNo() + 1); statement.setInt(2, usr.getNo()); statement.setInt(3, usr.getNo() + 1); result = statement.executeQuery();

52 if (result.next()) { p = result.getInt("mape"); usr.setMAPE(p); } conn.commit();

} catch (SQLException exception) { conn.rollback();

throw exception; }

}

public void cariSelisih1(UserClass usr) throws SQLException {

PreparedStatement statement = null; ResultSet result = null;

int p = 0;

try {

conn.setAutoCommit(false);

String sql = "select ((ABS((select penjualan from barangpredik "

+ "where no=?)-(select prediksi from "

+ "barangpredik where no=?))/(select penjualan "

+ "from barangpredik where no=?))*100) as MAPE from dual";

statement = conn.prepareStatement(sql); statement.setInt(1, usr.getNo()); statement.setInt(2, usr.getNo() - 10); statement.setInt(3, usr.getNo()); result = statement.executeQuery();

53 if (result.next()) { p = result.getInt("mape"); usr.setMAPE(p); } conn.commit();

} catch (SQLException exception) { conn.rollback();

throw exception; }

}

public void cariSelisih2(UserClass usr) throws SQLException {

PreparedStatement statement = null; ResultSet result = null;

int p = 0;

try {

conn.setAutoCommit(false);

String sql = "select ((ABS((select penjualan from barangpredik "

+ "where no=?)-(select prediksi from "

+ "barangpredik where no=?))/(select penjualan "

+ "from barangpredik where no=?))*100) as MAPE from dual";

statement = conn.prepareStatement(sql); statement.setInt(1, usr.getNo()); statement.setInt(2, usr.getNo() - 11); statement.setInt(3, usr.getNo());

54 result = statement.executeQuery(); if (result.next()) { p = result.getInt("mape"); usr.setMAPE(p); } conn.commit();

} catch (SQLException exception) { conn.rollback();

throw exception; }

}

public void cariSelisih3(UserClass usr) throws SQLException {

PreparedStatement statement = null; ResultSet result = null;

int p = 0;

try {

conn.setAutoCommit(false);

String sql = "select ((ABS((select penjualan from barangpredik "

+ "where no=?)-(select prediksi from "

+ "barangpredik where no=?))/(select penjualan "

+ "from barangpredik where no=?))*100) as MAPE from dual";

statement =

conn.prepareStatement(sql);

statement.setInt(1, usr.getNo()); statement.setInt(2, usr.getNo() - 12);

55 statement.setInt(3, usr.getNo()); result = statement.executeQuery(); if (result.next()) { p = result.getInt("mape"); usr.setMAPE(p); } conn.commit();

} catch (SQLException exception) { conn.rollback();

throw exception; }

}

2. Button Batal

Merupakan sebuah tombol yang akan mengembalikan semua text field dalam sistem simulasi menjadi bersih kembali sehingga tidak harus menghapusnya satu persatu.

3. Button Keluar

Merupakan sebuah tombol yang fungsinya adalah untuk menutup sistem.

56 4.3Manajemen Dialog

4.3.1 Software Tester

Gambar 4.4 : User Interface SimulasiTest

Sistem simulasi merupakan sistem yang dibuat untuk melakukan percobaan-percobaan penghitungan dengan beberapa permodelan terhadap barang tertentu. Sistem simulasi jika dijalankan akan memiliki tampilan seperti diatas, yaitu tampilan dari form simulasiTest. SimulasiTest memiliki 5 panel sesuai dengan urutan dalam menjalankan sistem simulasi.

Urutan pertama adalah mode prediksi. Panel mode prediksi memiliki pilihan untuk memilih mode prediksi. Mode prediksi yang dapat dipilih adalah mode normal, variasi1, variasi2, dan variasi3. Setiap mode prediksi yang ada memiliki algoritma yang sama tetapi dengan variasi pemodelan data yang berbeda.

Urutan kedua adalah menentukan target prediksi. Target prediksi dibagi menjadi 3 text field yaitu text field bulan, tahun dan n bulan. Text field bulan dan tahun adalah target bulan pada tahun tertentu yang ingin diramalkan. Text field n bulan adalah berapa banyaknya n yang akan dihitung dalam algoritma. Khusus untuk n bulan akan dapat diisi jika mode prediksi yang dipilih adalah mode normal.

57

Urutan ketiga adalah panel data penjualan. Panel data

Dokumen terkait