Implementasi Subsistem Manajemen Data Implementasi Subsistem Manajemen Model

45

BAB IV IMPLEMENTASI SISTEM

4.1 Implementasi Subsistem Manajemen Data

Langkah pertama yang dilakukan dalam implementasi manajemen data adalah membuat database. Database dibuat dengan nama “lanjoet” yang dibuat menggunakan MYSQL melalui phpmyadmin sebagai aplikasi pengolahan query. Berikut ini adalah langkah-langkah pembuatan database-nya : 1. Membuat user baru dengan nama username root dan password root, selajutnya membuat database dengan nama lanjoet. 2. Langkah berikutnya adalah membuat tabel-tabel yang akan digunakan dalam sistem. Maka diperlukan perintah create untuk membuat tabel- tabel tersebut. Berikut ini adalah implementasi query: a. Implementasi tabel menu Query 4.1 create data menu PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 46 b. Implementasi tabel batasan Query 4.2 create data batasan

4.2 Implementasi Subsistem Manajemen Model

1. Source Code Button Tambah dan Edit Menu publicpartialclass TambahMenu : Form { static MySqlConnection con = new MySqlConnection datasource=localhost;database=lanjoet;port=3306;username=roo t;password= ; MySqlCommand cmd; int ID; publicvoid ExecuteQuery string q { try { if con.State == ConnectionState .Closed { con.Open; } cmd = new MySqlCommand q, con; cmd.ExecuteNonQuery; } catch Exception ex { MessageBox .Showex.Message; } finally { if con.State == ConnectionState .Open { con.Close; } } } public TambahMenu string x_ID { InitializeComponent; if x_ID = Kalau 0 berarti Tambah Menu, kalau bukan 0 berarti Edit Menu { ID = Int32 .Parsex_ID; EditMenu; } } 47 privatevoid EditMenu { cmd = con.CreateCommand; cmd.CommandText = SELECT FROM menu WHERE id= + ID + ; con.Open; MySqlDataReader read_menu = cmd.ExecuteReader; while read_menu.Read { txMenu_Nama.Text = read_menu[1].ToString; txMenu_HargaBahanBaku.Text = read_menu[2].ToString; txMenu_BiayaJasa.Text = read_menu[3].ToString; txMenu_BiayaTambahan.Text = read_menu[4].ToString; txMenu_LamaPembuatan.Text = read_menu[5].ToString; txMenu_BatasMaksimal.Text = read_menu[6].ToString; txMenu_HargaJual.Text = read_menu[7].ToString; } con.Close; } privatevoid btnSimpanMenu_Click object sender, EventArgs e { string x_nama = - ; string x_harga_bahan_baku = ; string x_biaya_jasa = ; string x_biaya_tambahan = ; string x_lama_pembuatan = ; string x_batas_maksimal = ; string x_harga_jual = ; x_nama = txMenu_Nama.Text; x_harga_bahan_baku = txMenu_HargaBahanBaku.Text; x_biaya_jasa = txMenu_BiayaJasa.Text; x_biaya_tambahan = txMenu_BiayaTambahan.Text; x_lama_pembuatan = txMenu_LamaPembuatan.Text; x_batas_maksimal = txMenu_BatasMaksimal.Text; x_harga_jual = txMenu_HargaJual.Text; if ID == 0 { string q = INSERT INTO menu nama, harga_bahan_baku, biaya_jasa, biaya_tambahan, lama_pembuatan, batas_maksimal, harga_jual + VALUES + x_nama + , + x_harga_bahan_baku + , + x_biaya_jasa + , + x_biaya_tambahan + , + x_lama_pembuatan + , + x_batas_maksimal + , + x_harga_jual + ; ExecuteQueryq; } else { string q = UPDATE menu SET nama = + x_nama + , harga_bahan_baku = + x_harga_bahan_baku + , biaya_jasa = + x_biaya_jasa + , biaya_tambahan = + x_biaya_tambahan + , lama_pembuatan = + x_lama_pembuatan + , batas_maksimal = + x_batas_maksimal + , harga_jual = + x_harga_jual + WHERE id = + ID + ; ExecuteQueryq; } MessageBox .Show Menu + x_nama + berhasil disimpan ; Beranda f = new Beranda ; this .Hide; f.ShowDialog; this .Close; } privatevoid btnKembali_Click object sender, EventArgs e 48 { Beranda f = new Beranda ; this .Hide; f.ShowDialog; this .Close; } privatevoid CEK_AngkaSaja KeyPressEventArgs e { string karakter = 0123456789 ; if karakter.IndexOfe.KeyChar = 0 || e.KeyChar == char Keys .Back { e.Handled = false ; } else { MessageBox .Show Inputan harus berupa angka ; e.Handled = true ; } } privatevoid txMenu_HargaBahanBaku_KeyPress object sender, KeyPressEventArgs e { CEK_AngkaSajae; } privatevoid txMenu_BiayaJasa_KeyPress object sender, KeyPressEventArgs e { CEK_AngkaSajae; } privatevoid txMenu_BiayaTambahan_KeyPress object sender, KeyPressEventArgs e { CEK_AngkaSajae; } privatevoid txMenu_LamaPembuatan_KeyPress object sender, KeyPressEventArgs e { CEK_AngkaSajae; } privatevoid txMenu_BatasMaksimal_KeyPress object sender, KeyPressEventArgs e { CEK_AngkaSajae; } privatevoid txMenu_HargaJual_KeyPress object sender, KeyPressEventArgs e { CEK_AngkaSajae; } privatevoid TambahMenu_FormClosing object sender, FormClosingEventArgs e { e.Cancel = true ; } } privatevoid btnTambahMenu_Click object sender, EventArgs e { TambahMenu f = new TambahMenu ; this .Hide; f.ShowDialog; 49 this .Close; } privatevoid btnEdit_Click object sender, EventArgs e { if txNomorHapus.Text == { MessageBox .Show Anda belum memasukkan ID Menu yang akan diedit ; } else { cmd = con.CreateCommand; cmd.CommandText = SELECT COUNT FROM menu WHERE id= + txNomorHapus.Text + ; con.Open; int count = Int32 .Parsecmd.ExecuteScalar.ToString; con.Close; if count 0 { TambahMenu f = new TambahMenu txNomorHapus.Text; this .Hide; f.ShowDialog; this .Close; } else { MessageBox .Show Data menu dengan ID= + txNomorHapus.Text + tidak ditemukan ; } } } 2. Source Code Button Batasan publicpartialclass Batasan : Form { static MySqlConnection con = new MySqlConnection datasource=localhost;database=lanjoet;port=3306;username=roo t;password= ; static MySqlCommand cmd = con.CreateCommand; publicvoid ExecuteQuery string q { try { if con.State == ConnectionState .Closed { con.Open; } cmd = new MySqlCommand q, con; cmd.ExecuteNonQuery; } catch Exception ex { MessageBox .Showex.Message; } finally 50 { if con.State == ConnectionState .Open { con.Close; } } } public Batasan { InitializeComponent; EditBatasan; } privatevoid EditBatasan { cmd = con.CreateCommand; cmd.CommandText = SELECT FROM batasan_lain ; con.Open; MySqlDataReader read_menu = cmd.ExecuteReader; while read_menu.Read { txBatasan_JamKerja.Text = read_menu[0].ToString; txBatasan_BiayaAnggaran.Text = read_menu[1].ToString; } con.Close; } privatevoid btnSimpanBatasan_Click object sender, EventArgs e { string x_jam_kerja = ; string x_biaya_anggaran = ; x_jam_kerja = txBatasan_JamKerja.Text; x_biaya_anggaran = txBatasan_BiayaAnggaran.Text; ExecuteQuery TRUNCATE TABLE batasan_lain ; string q1 = INSERT INTO batasan_lain jam_kerja, biaya_anggaran + VALUES + x_jam_kerja + , + x_biaya_anggaran + ; ExecuteQueryq1; MessageBox .Show Batasan tambahan berhasil disimpan ; this .Close; } privatevoid btnKembali_Click object sender, EventArgs e { Beranda f = new Beranda ; this .Hide; f.ShowDialog; this .Close; } privatevoid CEK_AngkaSaja KeyPressEventArgs e { string karakter = 0123456789 ; if karakter.IndexOfe.KeyChar = 0 || e.KeyChar == char Keys .Back { e.Handled = false ; } else { MessageBox .Show Inputan harus berupa angka ; e.Handled = true ; 51 } } privatevoid txBatasan_JamKerja_KeyPress object sender, KeyPressEventArgs e { CEK_AngkaSajae; } privatevoid txBatasan_BiayaAnggaran_KeyPress object sender, KeyPressEventArgs e { CEK_AngkaSajae; } privatevoid Batasan_FormClosing object sender, FormClosingEventArgs e { e.Cancel = true ; } } privatevoid btnBatasan_Click object sender, EventArgs e { Batasan f = new Batasan ; this .Hide; f.ShowDialog; this .Close; } 3. Source Code ButtonHapus privatevoid btnHapusSatu_Click object sender, EventArgs e { DialogResult dr = MessageBox .Show Apakah Anda yakin akan menghapus menu dengan ID= + txNomorHapus.Text + ? , , MessageBoxButtons .YesNo, MessageBoxIcon .Warning; if dr == DialogResult .Yes { ExecuteQuery DELETE FROM menu WHERE id= + txNomorHapus.Text + ; MessageBox .Show Menu dengan ID= + txNomorHapus.Text + berhasil dihapus ; } LoadData; } privatevoid btnHapusSemua_Click object sender, EventArgs e { DialogResult dr = MessageBox .Show Apakah Anda yakin akan menghapus semua menu ? , , MessageBoxButtons .YesNo, MessageBoxIcon .Warning; if dr == DialogResult .Yes { ExecuteQuery DELETE FROM menu ; MessageBox .Show Semua menu berhasil dihapus ; } LoadData; } 52 publicvoid LoadData { dgv.Rows.Clear; cmd = con.CreateCommand; cmd.CommandText = SELECT id, nama, harga_jual FROM menu ; con.Open; MySqlDataReader read_menu = cmd.ExecuteReader; while read_menu.Read { string d_id = read_menu[0].ToString; string d_nama = read_menu[1].ToString; string d_harga = read_menu[2].ToString; d_harga = ToRupiah Int32 .Parsed_harga; string [] row = newstring [] {d_id, d_nama, d_harga}; dgv.Rows.Addrow; } con.Close; } 4. Source Code Button Cara Penyelesaian publicpartialclass Perhitungan : Form { static MySqlConnection con = new MySqlConnection datasource=localhost;database=lanjoet;port=3306;username=roo t;password= ; MySqlCommand cmd; publicvoid ExecuteQuery string q { try { if con.State == ConnectionState .Closed { con.Open; } cmd = new MySqlCommand q, con; cmd.ExecuteNonQuery; } catch Exception ex { MessageBox .Showex.Message; } finally { if con.State == ConnectionState .Open { con.Close; } } } public Perhitungan { InitializeComponent; THE_SUPER_SIMPLEX; } 53 int jmlVar, jmlBts, ITR, cjminZ_TERPILIH, rasio_TERPILIH; int [] indexRasioYangTerpilih, nilaiCjMinZjYangTerpilih; double angkaKunci; double [, ,] nilai; double [] Z, cjminZ, rasio, namaAsal, namaTujuan; publicstaticdouble [] hasilKomposisi; void THE_SUPER_SIMPLEX { Tentukan jumlah kolom pada tabel iterasi awal Jumlah kolomnya sesuai dengan jumlah menu yang diinputkan cmd = con.CreateCommand; cmd.CommandText = SELECT COUNT FROM menu ; con.Open; jmlVar = Int32 .Parsecmd.ExecuteScalar.ToString; con.Close; Tentukan jumlah baris pada tabel iterasi awal Jumlah barisnya sesuai dengan jumlah batasan ditambah batasan produksi maksimal sejumlah menu jmlBts = 2 + jmlVar; tx_Proses.Text = Jumlah Menu= + jmlVar + \nJumlah Batasan= + jmlBts; ITR = 0; nilai = newdouble [jmlVar + 2, jmlBts + 1, jmlVar + jmlBts + 2]; Z = newdouble [jmlVar + jmlBts + 1]; cjminZ = newdouble [jmlVar + jmlBts]; rasio = newdouble [jmlBts]; hasilKomposisi = newdouble [jmlVar]; namaAsal = newdouble [jmlVar+jmlBts+2]; for int I = 0; I jmlVar + jmlBts; I++ { namaAsal[I] = I + 1; } namaTujuan = newdouble [jmlBts+1]; for int I = 0; I jmlBts; I++ { namaTujuan[I] = 0; } cjminZ_TERPILIH = 0; rasio_TERPILIH = 0; angkaKunci = 0; indexRasioYangTerpilih = newint [jmlBts + 1]; nilaiCjMinZjYangTerpilih = newint [jmlBts + 1]; inputKasusMaksimasi; inputBatasan; hitung_Zj_cjminZj_rasio; cetakIterasi0; int i = 1; while cjminZ.Max 0 { buatIterasiBaru; 54 hitung_Zj_cjminZj_rasio; cetakIterasii; i++; } int J = 0; for int I = 0; I namaTujuan.Length; I++ { tx_Proses.Text += namaTujuan[I] + : + Math.Roundnilai[i-1, I, 1] + \n; for int K = 3; K 3 + jmlVar; K++ { if namaTujuan[I] == K { hasilKomposisi[J] = Math .Roundnilai[i - 1, I, 1]; J++; } } } tx_Proses.Text += Perhitungan Keuntungan Total\n ; tx_Proses.Text += Jumlah menu diproduksi dikalikan keuntungan tiap menu\n\n ; cmd = con.CreateCommand; cmd.CommandText = SELECT nama, harga_jual - harga_bahan_baku + biaya_jasa + biaya_tambahan FROM menu ; con.Open; MySqlDataReader read_menu = cmd.ExecuteReader; int L = 0; double TOT = 0; while read_menu.Read { string d_nama = read_menu[0].ToString; double tot = 0; tot = hasilKomposisi[L] Double .Parseread_menu[1].ToString; TOT += tot; tx_Proses.Text += + d_nama + : + hasilKomposisi[L] + x + read_menu[1].ToString + = + ToRupiahtot + \n ; L++; } con.Close; tx_Proses.Text += \nTotal Keuntungan = + ToRupiahTOT + \n ; } publicstring ToRupiah double angka { return String .Format CultureInfo .CreateSpecificCulture id-ID , Rp{0:N} , angka; } void inputKasusMaksimasi { Hitung keuntungan tiap menu int n = jmlVar; string [] keuntungan = newstring [n]; int x = 0; cmd = con.CreateCommand; cmd.CommandText = SELECT harga_jual - harga_bahan_baku + biaya_jasa + biaya_tambahan FROM menu ; con.Open; MySqlDataReader read = cmd.ExecuteReader; while read.Read { keuntungan[x] = read[0].ToString; 55 x++; } con.Close; Tetapkan nilai keuntungan sebagai cj for int j = 2; j jmlVar + 2; j++ { nilai[0, 0, j] = Int32 .Parsekeuntungan[j - 2]; } Nilai cj yang lainnya diisi 0 for int j = jmlVar + 2; j jmlVar + jmlBts + 2; j++ { nilai[0, 0, j] = 0; } } void inputBatasan { Ambil nilai batasan biaya dan waktu cmd = con.CreateCommand; cmd.CommandText = SELECT biaya_anggaran, jam_kerja FROM batasan_lain ; con.Open; MySqlDataReader read1 = cmd.ExecuteReader; while read1.Read { nilai[ITR, 1, 1] = Int32 .Parseread1[0].ToString; nilai[ITR, 2, 1] = Int32 .Parseread1[1].ToString; } con.Close; Ambil nilai batasan jumlah produksi cmd.CommandText = SELECT batas_maksimal FROM menu ; con.Open; MySqlDataReader read2 = cmd.ExecuteReader; int a = 3; while read2.Read { nilai[ITR, a, 1] = Int32 .Parseread2[0].ToString; a++; } con.Close; Ambil nilai batasan modal beli bahan baku cmd.CommandText = SELECT harga_bahan_baku + biaya_tambahan FROM menu ; con.Open; MySqlDataReader read3 = cmd.ExecuteReader; int b = 2; while read3.Read { nilai[ITR, 1, b] = Int32 .Parseread3[0].ToString; b++; } con.Close; Ambil nilai batasan waktu pembuatan cmd.CommandText = SELECT lama_pembuatan FROM menu ; con.Open; MySqlDataReader read4 = cmd.ExecuteReader; 56 int c = 2; while read4.Read { nilai[ITR, 2, c] = Int32 .Parseread4[0].ToString; c++; } con.Close; Tetapkan nilai 1 atau 0 untuk batas produksi maksimal for int i = 3; i jmlBts + 1; i++ { for int j = 2; j jmlVar + 2; j++ { if j == i-1 { nilai[ITR, i, j] = 1; } else { nilai[ITR, i, j] = 0; } } } Tetapkan nilai 1 atau 0 untuk slack for int i = 1; i jmlBts + 1; i++ { int x = 0; nilai[ITR, i, 0] = nilai[ITR, 0, jmlVar + 2 + x]; x++; for int j = jmlVar + 2; j jmlVar + jmlBts + 2; j++ { if j == jmlVar + i + 1 { nilai[ITR, i, j] = 1; } else { nilai[ITR, i, j] = 0; } } } } void hitung_Zj_cjminZj_rasio { namaTujuan[rasio_TERPILIH] = namaAsal[cjminZ_TERPILIH]; for int j = 1; j jmlVar + jmlBts + 2; j++ { Z[j - 1] = 0; for int i = 1; i jmlBts + 1; i++ { Z[j - 1] = Z[j - 1] + nilai[ITR, i, 0] nilai[ITR, i, j]; } } cjminZ_TERPILIH = 0; rasio_TERPILIH = 0; for int j = 2; j jmlVar + jmlBts + 2; j++ { cjminZ[j - 2] = nilai[0, 0, j] - Z[j - 1]; 57 } dapatkan index dari cj-Zj terbesar cjminZ_TERPILIH = cjminZ.ToList.IndexOfcjminZ.Max + 2; for int i = 1; i jmlBts + 1; i++ { if nilai[ITR, i, cjminZ_TERPILIH] == 0 { rasio[i - 1] = 0; } else { rasio[i - 1] = nilai[ITR, i, 1] nilai[ITR, i, cjminZ_TERPILIH]; } } dapatkan index dari rasio positif terkecil double temp_max_rasio = rasio.Max; for int i = 1; i jmlBts + 1; i++ { if rasio[i - 1] 0 { rasio[i - 1] = rasio[i - 1] - temp_max_rasio; } else { rasio[i - 1] = rasio[i - 1] - 0; } } rasio_TERPILIH = rasio.ToList.IndexOfrasio.Min + 1; indexRasioYangTerpilih[ITR] = rasio_TERPILIH; nilaiCjMinZjYangTerpilih[ITR] = cjminZ_TERPILIH; MessageBox.Showrasio= + rasio_TERPILIH + + rasio.Min + \ncjminZj= + cjminZ_TERPILIH + + cjminZ.Max + ; angkaKunci = nilai[ITR, rasio_TERPILIH, cjminZ_TERPILIH]; ITR++; } void buatIterasiBaru { for int BH = 0; BH ITR; BH++ { int rarasio = indexRasioYangTerpilih[BH]; int cecejemin = nilaiCjMinZjYangTerpilih[BH]; nilai[ITR, rarasio, 0] = nilai[0, 0, cecejemin]; } for int j = 1; j jmlVar + jmlBts + 2; j++ { nilai[ITR, rasio_TERPILIH, j] = nilai[ITR - 1, rasio_TERPILIH, j] angkaKunci; } for int i = 1; i jmlBts + 1; i++ { for int j = 1; j jmlVar + jmlBts + 2; j++ { if i = rasio_TERPILIH { nilai[ITR, i, j] = nilai[ITR - 1, i, j] - nilai[ITR - 1, i, cjminZ_TERPILIH] 58 nilai[ITR - 1, rasio_TERPILIH, cjminZ_TERPILIH] nilai[ITR - 1, rasio_TERPILIH, j]; } } } } void cetakIterasi int haha { tx_Proses.Text = tx_Proses.Text + \n================================================================ ; tx_Proses.Text = tx_Proses.Text + \nITERASI KE- + ITR; tx_Proses.Text = tx_Proses.Text + \n================================================================\n ; for int i = 0; i jmlBts + 1; i++ { for int j = 0; j jmlVar + jmlBts + 2; j++ { nilai[haha, i, j] = Math .Roundnilai[haha, i, j], 2; tx_Proses.Text = tx_Proses.Text + nilai[haha, i, j] + \t ; } tx_Proses.Text = tx_Proses.Text + Environment .NewLine; } tx_Proses.Text = tx_Proses.Text + ================================================================\n\t ; for int j = 1; j jmlVar + jmlBts + 2; j++ { Z[j - 1] = Math .RoundZ[j - 1], 2; tx_Proses.Text = tx_Proses.Text + Z[j - 1] + \t ; } tx_Proses.Text = tx_Proses.Text + Environment .NewLine + \t\t ; for int j = 2; j jmlVar + jmlBts + 2; j++ { cjminZ[j - 2] = Math .RoundcjminZ[j - 2], 2; tx_Proses.Text = tx_Proses.Text + cjminZ[j - 2] + \t ; } tx_Proses.Text = tx_Proses.Text + \n\ncj-Zj\t\t: + cjminZ_TERPILIH + \nRasio\t\t: + rasio_TERPILIH + \nAngka Kunci\t: + angkaKunci; tx_Proses.Text = tx_Proses.Text + \n================================================================\n\n\n ; } } privatevoid btnLihatPerhitungan_Click object sender, EventArgs e { cmd = con.CreateCommand; cmd.CommandText = SELECT COUNT FROM menu ; con.Open; int count1 = Int32 .Parsecmd.ExecuteScalar.ToString; con.Close; if count1 0 { cmd = con.CreateCommand; cmd.CommandText = SELECT COUNT FROM batasan_lain ; con.Open; int count2 = Int32 .Parsecmd.ExecuteScalar.ToString; con.Close; 59 if count2 0 { Perhitungan f = new Perhitungan ; f.ShowDialog; btnLihatKomposisi.Enabled = true ; } else { MessageBox .Show Anda belum menetapkan batasan. ; } } else { MessageBox .Show Anda belum memasukkan menu. ; } } 5. Source Code Button Lihat Komposisi privatevoid btnLihatKomposisi_Click object sender, EventArgs e { string pesan = ; pesan += Perhitungan Keuntungan Total\n ; pesan += Jumlah menu diproduksi dikalikan keuntungan tiap menu\n\n ; cmd = con.CreateCommand; cmd.CommandText = SELECT nama, harga_jual - harga_bahan_baku + biaya_jasa + biaya_tambahan FROM menu ; con.Open; MySqlDataReader read_menu = cmd.ExecuteReader; int L = 0; double TOT = 0; double [] hasilKompos = Perhitungan .hasilKomposisi; while read_menu.Read { string d_nama = read_menu[0].ToString; double tot = 0; tot = hasilKompos[L] Double .Parseread_menu[1].ToString; TOT += tot; pesan += + d_nama + : + hasilKompos[L] + \tx + read_menu[1].ToString + = + ToRupiahtot + \n ; L++; } con.Close; pesan += \nTotal Keuntungan = + ToRupiahTOT + \n ; MessageBox .Showpesan; } public Beranda { InitializeComponent; LoadData; btnLihatKomposisi.Enabled = false ; } 60

4.3 Implementasi Subsistem Manajemen Dialog