KEMENTERIAN PENDIDIKAN NASIONAL UNIVERSITAS SUMATERA UTARA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM PROGRAM STUDI D.III TEKNIK INFORMATIKA Jl. Bioteknologi No. 1 Kampus USU MEDAN Telp/FAX. 061-8214290 KARTU BIMBINGAN TUGAS AKHIR MAHASISWA Nama Mahasiswa : JEANY CYNTHYA NIM : 082406052 Judul Tugas Akhir : Perangkat Lunak Simulasi Algoritma Banker Dosen Pembimbing : Dra. Normalina Napitupulu, M.Sc Tanggal Mulai Bimbingan : Tanggal Selesai Bimbingan : No. Tanggal Asisten Bimbingan Pembahasan Pada Asisten Mengenai Pada BAB Paraf Dosen Pembimbing Keterangan 1. 2. 3. 4. 5. 6. 7. Kartu ini dikembalikan ke Departemen Matematika bila Bimbingan Mahasiswa telah selesai Diketahui, Departemen Matematika FMIPA USU Ketua Disetujui, Pembimbing Utama/ Penanggung Jawab Prof. Dr. Tulus, M.Si Dra. Normalina Napitupulu, M.Sc NIP. 196209011988031002 NIP. 196311061989022001
SURAT KETERANGAN Hasil Uji Program Tugas Akhir Yang bertanda tangan dibawah ini, menerangkan bahwa Mahasiswa Tugas Akhir Program Diploma III Teknik Informatika/Statistika : Nama : JEANY CYNTHYA NIM : 082406052 Prog. Studi : Teknik Informatika Judul TA : PERANGKAT LUNAK SIMULASI ALGORITMA BANKER Telah melaksanakan test program Tugas Akhir Mahasiswa tersebut di atas pada tanggal. Dengan Hasil : Sukses / Gagal Demikian diterangkan untuk digunakan melengkapi syarat pendaftaran Ujian Meja Hijau Tugas Akhir Mahasiswa bersangkutan di Departemen Matematika FMIPA USU Medan. Medan, Juli 2011 Dosen Pembimbing Program Studi D3 Teknik Informatika Dra. Normalina Napitupulu, M.Sc NIP. 196311061989022001
LISTING PROGRAM 1. Form Untuk Menampilkan Splash Screen Option Explicit Private nload As Integer Private Sub Form_Load() nload = 0 Private Sub Timer1_Timer() nload = nload + 1 shpload.width = Int(CDbl(nLoad) * 2280 / 100) If nload = 100 Then Sleep 1500 Timer1.Enabled = False Unload Me frminput.show 2. Form Untuk Menampilkan Menu Masukkan Option Explicit Private N As Integer Private nbykpinjaman As Integer Private ctmp(5) As String Private Sub cbobyk_click() 'Banyak Pinjaman nbykpinjaman = cbobyk.listindex + 1 'Tabel Pinjaman Call FormatTabelR 'Tabel Pinjaman Bank Call FormatTabelRBank 'Tabel Pinjaman Call FormatTabelRPlgn Private Sub chkinput_click() TblRPlgn.BackColor = IIf(chkInput.Value, &HFFFFFF, &HC0C0C0)
cmdacak.enabled = chkinput.value Private Sub cmdabout_click() frmabout.show 1 Private Sub cmdacak_click() 'Simpan banyak Pinjaman bank ke variabel Dim R() As Integer ReDim R(TblRBank.Rows - 1) For N = 1 To UBound(R) R(N) = Val(TblRBank.TextMatrix(N, 1)) Next N 'Acak nilai Pelanggan Dim N1 As Integer Dim Acak As Integer For N = 1 To UBound(Plgn) Next N 'Tipe Pinjaman For N1 = 1 To UBound(R) Next N1 'Maksimum Randomize Acak = Int(Rnd * (Int(R(N1) / 3.3) + 1)) TblRPlgn.TextMatrix(N + 1, N1) = Acak 'Allocate Randomize Acak = Int(Rnd * Acak) TblRPlgn.TextMatrix(N + 1, N1 + nbykpinjaman) = Acak Private Sub cmdhelp_click() Dim m_hwndhelp As Long App.HelpFile = App.Path & "\BankerHelp.chm" m_hwndhelp = HtmlHelp(Me.hWnd, App.HelpFile, HH_DISPLAY_TOPIC, ByVal "Simulasi Banker - Help.htm") Private Sub cmdkeluar_click() End Private Sub cmdsimulasi_click() 'Lama Simulasi If Val(Text1.Text) = 0 Then MsgBox "Lama simulasi belum di-input!", vbcritical Exit Sub
WaktuSimulasi = Val(Text1.Text) JlhIndeks = 0 'Nama Pinjaman ReDim NamaPinjaman(nBykPinjaman) For N = 1 To nbykpinjaman NamaPinjaman(N) = Trim(TblR.TextMatrix(N, 1)) If NamaPinjaman(N) = "" Then MsgBox "Nama Pinjaman R" & N & " belum di-input!", vbcritical Exit Sub Next N 'Alokasi Bank ReDim Bank.MaximumR(nBykPinjaman) ReDim Bank.TersediaR(nBykPinjaman) ReDim Bank.TempTersediaR(nBykPinjaman) For N = 1 To nbykpinjaman Bank.MaximumR(N) = Val(TblRBank.TextMatrix(N, 1)) Bank.TersediaR(N) = Val(TblRBank.TextMatrix(N, 1)) If Bank.TersediaR(N) = 0 Then MsgBox "Banyak Pinjaman R" & N & " pada bank belum diinput!", vbcritical Exit Sub ElseIf Bank.TersediaR(N) > 100 Then MsgBox "Banyak Pinjaman R" & N & " pada bank dibatasi maksimum 100!", vbcritical Exit Sub Next N 'Default Properti Pelanggan For N = 1 To UBound(Plgn) Plgn(N).Tipe = 0 Plgn(N).Aktif = False Plgn(N).Aktivitas = "" ReDim Plgn(N).RequestR(nBykPinjaman) ReDim Plgn(N).MaximumR(nBykPinjaman) ReDim Plgn(N).PenempatanR(nBykPinjaman) ReDim Plgn(N).TempPenempatanR(nBykPinjaman) ReDim Plgn(N).NeedsR(nBykPinjaman) ReDim Plgn(N).TempPenempatanR(nBykPinjaman) Next N 'Keadaan awal ditentukan If chkinput.value Then Dim N1 As Integer For N = 1 To UBound(Plgn) With Plgn(N).Aktif = True.Aktivitas = "PROSES" JlhIndeks = JlhIndeks + 1.Indeks = JlhIndeks 'Banyak Pinjaman
For N1 = 1 To nbykpinjaman 'Maksimum R.MaximumR(N1) = Val(TblRPlgn.TextMatrix(N + 1, N1)) If.MaximumR(N1) > 30 Then MsgBox "Maksimum Pinjaman R" & N1 & " pada Pelanggan dibatasi " & _ "maksimum 30!", vbcritical Exit Sub N1 + nbykpinjaman)) 'Alokasi R.PenempatanR(N1) = Val(TblRPlgn.TextMatrix(N + 1, 'Kurangi Pinjaman pada banker Bank.TersediaR(N1) = Bank.TersediaR(N1) -.PenempatanR(N1) If Bank.TersediaR(N1) < 0 Then MsgBox "Alokasi Pinjaman R" & N1 & " pada Pelanggan melebihi " & _ "maksimum Pinjaman pada bank!", vbcritical Exit Sub 'Needs R = Maksimum - Alokasi.NeedsR(N1) =.MaximumR(N1) -.PenempatanR(N1) If.NeedsR(N1) < 0 Then MsgBox "Alokasi Pinjaman R" & N1 & " pada -" & N & " melebihi maksimum Pinjaman!", vbcritical Exit Sub Next N1 End With Next N 'Simulasi algoritma banker frmsimulasibanker.show vbmodal Private Sub Form_Load() 'Isi combo banyak Pinjaman For N = 1 To 5 cbobyk.additem N & " tipe" Next N cbobyk.listindex = 4 'Tabel Pinjaman Call FormatTabelR 'Tabel Pinjaman Bank Call FormatTabelRBank 'Tabel Pinjaman Pelanggan
Call FormatTabelRPlgn 'Contoh Data With TblR.TextMatrix(1, 1) = "Rp".TextMatrix(2, 1) = "Rp".TextMatrix(3, 1) = "Rp".TextMatrix(4, 1) = "Rp".TextMatrix(5, 1) = "Rp" 'Isi ctmp For N = 1 To.Rows - 1 ctmp(n) =.TextMatrix(N, 1) Next N End With With TblRBank.TextMatrix(1, 1) = "100".TextMatrix(2, 1) = "100".TextMatrix(3, 1) = "100".TextMatrix(4, 1) = "100".TextMatrix(5, 1) = "100" End With 'Format Tabel Pinjaman Private Sub FormatTabelR() 'Tabel Pinjaman With TblR.Rows = nbykpinjaman + 1.Cols = 2.ColWidth(0) = 2000.ColAlignment(0) = 4.TextMatrix(0, 0) = "Tipe Pinjaman".ColWidth(1) = 2500.ColAlignment(1) = 4.TextMatrix(0, 1) = "Nama Pinjaman" 'Isi For N = 1 To.Rows - 1.TextMatrix(N, 0) = "R" & N.TextMatrix(N, 1) = ctmp(n) Next N End With 'Format Tabel Pinjaman Bank Private Sub FormatTabelRBank() 'Tabel Pinjaman With TblRBank.Rows = nbykpinjaman + 1.Cols = 2.ColWidth(0) = 2000.ColAlignment(0) = 4.TextMatrix(0, 0) = "Tipe Pinjaman"
.ColWidth(1) = 2500.ColAlignment(1) = 4.TextMatrix(0, 1) = "Banyak Pinjaman" 'Isi For N = 1 To.Rows - 1.TextMatrix(N, 0) = "R" & N '.TextMatrix(N, 1) = "0" Next N End With 'Format Tabel Pinjaman Pelanggan Private Sub FormatTabelRPlgn() 'Tabel Pinjaman Pelanggan With TblRPlgn.Redraw = False.Rows = 7.Cols = 1 + (2 * nbykpinjaman).colwidth(0) = 1850.ColAlignment(0) = 4.TextMatrix(0, 0) = "Pelanggan".TextMatrix(1, 0) = "Pelanggan" 'Tulis Pelanggan For N = 2 To.Rows - 1.TextMatrix(N, 0) = "Pelanggan - " & N - 1 Next N 'Tulis Kolom For N = 1 To nbykpinjaman.colwidth(n) = Int(3970 \ nbykpinjaman).colalignment(n) = 4.TextMatrix(0, N) = "MAKSIMUM".TextMatrix(1, N) = "R" & N.ColWidth(N + nbykpinjaman) = Int(3970 / nbykpinjaman).colalignment(n + nbykpinjaman) = 4.TextMatrix(0, N + nbykpinjaman) = "PENEMPATAN".TextMatrix(1, N + nbykpinjaman) = "R" & N Next N.MergeCells = flexmergefree.mergecol(0) = True.MergeRow(0) = True.Redraw = True End With Private Sub TblR_KeyPress(KeyAscii As Integer) Dim ckey As String ckey = Chr(KeyAscii) With TblR
Select Case KeyAscii Case vbkeyreturn 'Enter Key - pindah baris If.Row <.Rows - 1 Then.Row =.Row + 1 End Select End With Case vbkeyback 'BackSpace - hapus satu karakter If Len(.Text) > 0 Then.Text = Left(.Text, Len(.Text) - 1) Case Else 'Only character allowed If Len(.Text) >= 3 Then Exit Sub If IsNumeric(Chr(KeyAscii)) = False Then.Text =.Text & ckey Private Sub TblRBank_KeyPress(KeyAscii As Integer) Dim ckey As String ckey = Chr(KeyAscii) With TblRBank Select Case KeyAscii Case vbkeyreturn 'Enter Key - pindah baris If.Row <.Rows - 1 Then.Row =.Row + 1 End Select End With Case vbkeyback 'BackSpace - hapus satu karakter If Len(.Text) > 0 Then.Text = Left(.Text, Len(.Text) - 1) Case Else 'Only number allowed If Len(.Text) >= 3 Then Exit Sub If ckey Like "#" Then.Text =.Text & ckey Private Sub TblRPlgn_KeyPress(KeyAscii As Integer) If cmdacak.enabled Then Dim ckey As String ckey = Chr(KeyAscii) With TblRPlgn Select Case KeyAscii Case vbkeyreturn 'Enter Key - pindah baris If.Col <.Cols - 1 Then.Col =.Col + 1
ElseIf.Row <.Rows - 1 Then.Col = 1.Row =.Row + 1 karakter Case vbkeyback 'BackSpace - hapus satu If Len(.Text) > 0 Then.Text = Left(.Text, Len(.Text) - 1) Case Else 'Only number allowed If Len(.Text) >= 3 Then Exit Sub If ckey Like "#" Then.Text = Val(.Text & ckey) maksimum bank 'Cek maksimum, tidak boleh lebih besar dari If.Col < nbykpinjaman + 1 Then If Val(.Text) > Val(TblRBank.TextMatrix(.Col, 1)) Then MsgBox "Maksimum Pinjaman " &.TextMatrix(1,.Col) & " tidak boleh " & _ "melebihi batas maksimum Pinjaman bank!", vbcritical.text = "" ElseIf.Col >= nbykpinjaman + 1 Then 'Cek alokasi, tidak boleh lebih besar dari maksimum If Val(.Text) > Val(.TextMatrix(.Row,.Col - nbykpinjaman)) Then MsgBox "Alokasi Pinjaman " &.TextMatrix(1,.Col) & " tidak boleh " & _ "melebihi maksimum Pinjaman Pelanggan-" &.Row - 1 & "!", vbcritical.text = "" End Select End With Private Sub Text1_KeyPress(KeyAscii As Integer) If IsNumeric(Chr(KeyAscii)) = False And KeyAscii <> vbkeyback Then KeyAscii = 0 3. Form Untuk Menampilkan Tentang Program
Private Sub cmdok_click() Unload Me 4. Form Untuk Menampilkan Laporan Option Explicit Public TipeForm As String Public Isi As String Private Sub Form_Load() Me.Caption = IIf(TipeForm = "H", "Hasil Transaksi", "Hasil Analisis Transaksi") RTB.Text = Isi Private Sub Form_Resize() RTB.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight 5. Form Untuk Menampilkan Menu Simulasi Banker Option Explicit Private ndelayrequest As Long Private N As Integer Private Temp1 As Integer Private Temp2 As Integer Private Temp3 As Integer Private Temp4 As Integer Private Temp5 As Integer Private stemp1 As String Private btemp1 As Boolean Private TBanker As Integer Private TBankerRnd As Integer Private bisproses As Boolean Private Sub cmdexit_click() Unload Me Private Sub cmdhasil Transaksi_Click() Dim ctmp As String
If Timer1.Enabled Then ctmp = "STOP" Timer1.Enabled = False frmnote.tipeform = "H" frmnote.isi = H frmnote.show vbmodal If ctmp = "STOP" Then Timer1.Enabled = True Private Sub cmdpause_click() Timer1.Enabled = False DoEvents DoEvents cmdplay.enabled = True cmdpause.enabled = False cmdexit.enabled = True Private Sub cmdplay_click() Timer1.Enabled = True cmdplay.enabled = False cmdpause.enabled = True cmdexit.enabled = False Private Sub Form_Load() 'Kecepatan proses Slider1.Value = 2 'Hasil Transaksi & Hasil Analisis H = "SIMULASI ALGORITMA BANKER" & vbcrlf & _ "-------------------------" & vbcrlf HA = "" 'T = 0 sekon lblt = "0" 'Nama Pinjaman For N = 1 To UBound(NamaPinjaman) lblr0(n).caption = NamaPinjaman(N) lblr1(n).caption = NamaPinjaman(N) lblr2(n).caption = NamaPinjaman(N) lblr3(n).caption = NamaPinjaman(N) lblr4(n).caption = NamaPinjaman(N) lblr5(n).caption = NamaPinjaman(N) Next N 'Progress bar banker Call AturProgressBar(0) 'Tempat Progress Bar For N = 0 To UBound(Plgn) PProses(N).Height = 75 + (210 * UBound(NamaPinjaman)) Next N 'Keadaan awal disetting - langsung aktif
If Plgn(1).Aktif Then For N = 1 To UBound(Plgn) PPlgn(N).Top = 6945 'Indeks lblindeks(n).caption = "Pelanggan " & Plgn(N).Indeks lblindeks(n).visible = True 'Progress Bar Call AturProgressBar(N) PProses(N).Visible = True 'Tipe Randomize Temp1 = 1 + Int(Rnd * 3) Plgn(N).Tipe = Val(Temp1) PPlgn(N).Picture = PlgnUp1(Plgn(N).Tipe).Picture PPlgn(N).Tag = "1" Next N Private Sub Form_Unload(Cancel As Integer) Cancel = bisproses Private Sub Slider1_Change() Timer1.Interval = Slider1.Value * 100 ndelayrequest = Slider1.Value * 200 lbldelay.caption = "Kecepatan (Delay = " & Slider1.Value * 100 & ")" Private Sub Slider1_Scroll() Call Slider1_Change Private Sub Timer1_Timer() bisproses = True 'Tambah t (waktu) lblt = Val(lblT) + 1 'Untuk 5 orang Pelanggan For N = 1 To UBound(Plgn) With Plgn(N) If.Aktif = False Then '~~~~~~~~~~~~~~~~~~~~ 'PELANGGAN BELUM AKTIF '~~~~~~~~~~~~~~~~~~~~ 'Random untuk mengaktifkan Pelanggan Randomize Temp1 = 1 + Int(Rnd * 30) If Temp1 = 10 Then '+ Indeks
Else JlhIndeks = JlhIndeks + 1 'Aktifkan Pelanggan.Aktif = True.Indeks = JlhIndeks.Aktivitas = "UP" 'Tipe Randomize Temp1 = 1 + Int(Rnd * 3).Tipe = Val(Temp1) '~~~~~~~~~~~~~~~~~~~~ 'PELANGGAN SUDAH AKTIF '~~~~~~~~~~~~~~~~~~~~ Select Case.Aktivitas '~ Case "UP" 'Kurangi TOP PPlgn(N).Top = PPlgn(N).Top - 75 If PPlgn(N).Tag = "1" Then PPlgn(N).Picture = PlgnUp2(.Tipe).Picture PPlgn(N).Tag = "2" Else PPlgn(N).Picture = PlgnUp1(.Tipe).Picture PPlgn(N).Tag = "1" 'Pengaturan Pintu If PPlgn(N).Top = 11445 Then Pintu(N).Visible = Not Pintu(N).Visible ElseIf PPlgn(N).Top = 9945 Then Pintu(N).Visible = Not Pintu(N).Visible 'Sampai ke atas -> Ganti jadi Proses If PPlgn(N).Top = 6945 Then.Aktivitas = "PROSES" 'Acak Max Pinjaman For Temp1 = 1 To UBound(NamaPinjaman) Randomize.MaximumR(Temp1) = 1 + Int(Rnd * Int(Bank.MaximumR(Temp1) * 0.5)).PenempatanR(Temp1) = 0.NeedsR(Temp1) =.MaximumR(Temp1).RequestR(Temp1) = 0 Next Temp1 'Progress Bar Call AturProgressBar(N) PProses(N).Visible = True
.Indeks _ kredit." 'Indeks lblindeks(n).caption = "Pelanggan " & lblindeks(n).visible = True 'Hasil Transaksi H = H & vbcrlf & _ "t = " & lblt & ", Pelanggan-" &.Indeks & " masuk ke dalam proses permohonan '~ Case "PROSES" 'Status If lblstatus(n).visible = True Then lblstatus(n).visible = False If PicState.Visible Then PicState.Visible = False 'Cek sudah pernah ada alokasi Pinjaman Temp2 = 0 For Temp1 = 1 To UBound(NamaPinjaman) If.PenempatanR(Temp1) > 0 Then Temp2 = 1 Exit For Next Temp1 Then 'Cek sudah memenuhi maksimum Temp3 = 1 For Temp1 = 1 To UBound(NamaPinjaman) If.PenempatanR(Temp1) <.MaximumR(Temp1) Temp3 = 0 Exit For Next Temp1 'Random Randomize Temp1 = Int(Rnd * 100) Then 'Cek Return atau Request If (Temp3 = 1) Or (Temp1 = 20 And Temp2 = 1) 'Mengembalikan uang.aktivitas = "RETURN" ElseIf Temp1 <= 10 Then 'Memohon Kredit.Aktivitas = "REQUEST" '~
Case "REQUEST" 'Jenis Request Randomize Temp1 = Int(Rnd * 10) ",".NeedsR(Temp2)) "," stemp1 = "(" If Temp1 = 9 Then 'Request maximum Pinjaman For Temp2 = 1 To UBound(NamaPinjaman).RequestR(Temp2) =.NeedsR(Temp2) If Temp2 > 1 Then stemp1 = stemp1 & stemp1 = stemp1 &.RequestR(Temp2) Next Temp2 Else 'Request not maximum Pinjaman For Temp2 = 1 To UBound(NamaPinjaman) If.NeedsR(Temp2) > 0 Then Randomize.RequestR(Temp2) = 1 + Int(Rnd * Else.RequestR(Temp2) = 0 If Temp2 > 1 Then stemp1 = stemp1 & stemp1 = stemp1 &.RequestR(Temp2) Next Temp2 stemp1 = stemp1 & ")" bankir." bankir." ----- ALGORITHM ----- _ 'Hasil Transaksi H = H & vbcrlf & _ "t = " & lblt & ", Plgn-" &.Indeks & _ " memohon kredit " & stemp1 & " kepada 'Delay sebentar - REQUEST lblstate.forecolor = 0 Shape1.FillColor = &HFFFF& lblstate.caption = "PERMINTAAN" lblstate1.caption = "Pelanggan-" &.Indeks & _ " memohon kredit " & stemp1 & " kepada PicState.Visible = True DoEvents Sleep ndelayrequest '--------------------------------------------- ' HASIL ANALISIS DENGAN PINJAMAN REQUEST '--------------------------------------------- HA = "KEJADIAN: " & vbcrlf & "---------" & _ vbcrlf & "t = " & lblt & ", Plgn-" &.Indeks &
bankir." " memohon kredit " & stemp1 & " kepada 'If Request <= Tersedia HA = HA & vbcrlf & vbcrlf & _ "ANALISIS DENGAN PINJAMAN REQUEST ALGORITHM:" & vbcrlf & _ "-------------------------------------------" & vbcrlf & vbcrlf & _ "1. CEK REQUEST HARUS <= TERSEDIA." & vbcrlf btemp1 = True For Temp1 = 1 To UBound(NamaPinjaman) If.RequestR(Temp1) <= Bank.TersediaR(Temp1) Then _ 'REQUEST <= TERSEDIA HA = HA & vbcrlf & _ " - " &.RequestR(Temp1) & " <= " & Bank.TersediaR(Temp1) & " (TRUE)" Else _ 'REQUEST > TERSEDIA HA = HA & vbcrlf & _ " - " &.RequestR(Temp1) & " <= " & Bank.TersediaR(Temp1) & " (FALSE)" 'TUNDA HA = HA & vbcrlf & _ " Permintaan lebih besar dari dana yang tersedia." & vbcrlf & _ " Permohonan kredit Plgn-" &.Indeks & " ditunda (TUNDA)." Pelanggan-" &.Indeks & _ Pelanggan-" &.Indeks & _ (TUNDA)." 'Hasil Transaksi H = H & vbcrlf & _ "t = " & lblt & ", Permohonan kredit " ditunda (TUNDA)." 'Delay sebentar - TUNDA lblstatus(n).visible = True lblstate.forecolor = &HFFFFFF Shape1.FillColor = &HFF& lblstate.caption = "TUNDA" lblstate1.caption = "Permohonan kredit PicState.Visible = True DoEvents Sleep ndelayrequest " ditunda 'Tunjukkan Hasil Analisis If Check1.Value Then frmnote.tipeform = "HA"
Next Temp1 frmnote.isi = HA frmnote.show vbmodal.aktivitas = "TUNDA" btemp1 = False Exit For 'Jika Request <= Tersedia If btemp1 Then PERMOHONAN PELANGGAN." '~~~~~~~~~~~ HA = HA & vbcrlf & vbcrlf & _ "2. BANKER BERPURA-PURA UNTUK MEMENUHI Plgn(Temp1).PenempatanR Plgn(Temp1).NeedsR 'COBA ALOKASI For Temp1 = 1 To UBound(Plgn) Plgn(Temp1).TempPenempatanR = Plgn(Temp1).TempNeedsR = Plgn(Temp1).Finish = False Next Temp1 'KURANGI & TAMBAH PINJAMAN For Temp1 = 1 To UBound(NamaPinjaman) 'NamaPinjaman stemp1 = NamaPinjaman(Temp1) 'Kurangi bank Bank.TempTersediaR(Temp1) = Bank.TersediaR(Temp1) _ -.RequestR(Temp1) HA = HA & vbcrlf & vbcrlf & " " & _ stemp1 & "_Bank = " & stemp1 & "_Bank - " & stemp1 & "_Request = " & _ Bank.TersediaR(Temp1) & " - " &.RequestR(Temp1) & " = " & _ Bank.TempTersediaR(Temp1) 'Tambah Penempatan di Pelanggan.TempPenempatanR(Temp1) =.PenempatanR(Temp1) +.RequestR(Temp1) HA = HA & vbcrlf & _ " Penempatan_" & stemp1 & "_Plgn" &.Indeks & " = " & _ "Penempatan_" & stemp1 & "_Plgn" &.Indeks & " + " & _ stemp1 & "_Request = " &.PenempatanR(Temp1) & " + " & _.RequestR(Temp1) & " = " &.TempPenempatanR(Temp1) 'Kurangi Needs di Pelanggan
.RequestR(Temp1).Indeks & " = " & _ & " - " & _.NeedsR(Temp1) & " - " & _.TempNeedsR(Temp1).TempNeedsR(Temp1) =.NeedsR(Temp1) - HA = HA & vbcrlf & _ " Needs_" & stemp1 & "_Plgn" & "Needs_" & stemp1 & "_Plgn" &.Indeks stemp1 & "_Request = " &.RequestR(Temp1) & " = " & Next Temp1 SAFETY ALGORIGHTM" '~~~~~~~~~~~ HA = HA & vbcrlf & vbcrlf & _ "3. PERIKSA APAKAH KEADAAN SAFE DENGAN 'Indeks yang akan diselesaikan Temp1 = 1 'Cari dimana Need <= Tersedia While Temp1 > 0 Temp1 = 0 And _ Then Then 'Looping cari temp1 berikutnya For Temp2 = 1 To UBound(Plgn) If Plgn(Temp2).Aktif And _ Plgn(Temp2).Aktivitas <> "UP" Plgn(Temp2).Aktivitas <> "DOWN" 'Finish = False btemp1 = False If Plgn(Temp2).Finish = False 'Cek apakah semua need <= Tersedia Temp1 = Temp2 btemp1 = True For Temp3 = 1 To UBound(NamaPinjaman) If Plgn(Temp2).TempNeedsR(Temp3) > Bank.TempTersediaR(Temp3) Then btemp1 = False Exit For Next Temp3 'Sesuai kriteria If btemp1 Then Temp1 = Temp2 Exit For
Next Temp2 'Selesaikan Pelanggan Temp1 If Temp1 > 0 Then Plgn(Temp1).Finish = True Plgn(Temp1).Indeks & "." UBound(NamaPinjaman) HA = HA & vbcrlf & vbcrlf & _ " Selesaikan kredit Plgn-" & 'Tambah di bank For Temp2 = 1 To 'NamaPinjaman stemp1 = NamaPinjaman(Temp2) 'Bank = Bank + Plgn HA = HA & vbcrlf & _ " " & stemp1 & "_Bank = " & _ stemp1 & "_Bank + Penempatan_" & stemp1 & "_Plgn" & Plgn(Temp1).Indeks & " = " & _ Bank.TempTersediaR(Temp2) & " + " & Plgn(Temp1).TempPenempatanR(Temp2) & " = " & _ Bank.TempTersediaR(Temp2) + Plgn(Temp1).TempPenempatanR(Temp2) Bank.TempTersediaR(Temp2) + _ 'Perhitungan Bank.TempTersediaR(Temp2) = Plgn(Temp1).TempPenempatanR(Temp2) Next Temp2 HA = HA & vbcrlf & " Finish(Plgn" & Plgn(Temp1).Indeks & ") = TRUE." Wend _ 'Cek ada Pelanggan = false For Temp1 = 1 To UBound(Plgn) If Plgn(Temp1).Aktif And _ Plgn(Temp1).Aktivitas <> "UP" And _ Plgn(Temp1).Aktivitas <> "DOWN" And Plgn(Temp1).Finish = False Then HA = HA & vbcrlf & vbcrlf & _ " Kredit Pelanggan-" & Plgn(Temp1).Indeks & _ " tidak bisa diselesaikan (UNSAFE STATE)." & vbcrlf & _ " Oleh karena itu, permohonan kredit Pelanggan-" &.Indeks & " ditunda (TUNDA)." 'Hasil Transaksi H = H & vbcrlf & _
kredit Plgn-" &.Indeks & _ kredit -" &.Indeks & _ (TUNDA)." "t = " & lblt & ", Permohonan " ditunda (TUNDA)." 'Delay sebentar - TUNDA lblstatus(n).visible = True lblstate.forecolor = &HFFFFFF Shape1.FillColor = &HFF& lblstate.caption = "TUNDA" lblstate1.caption = "Permohonan PicState.Visible = True DoEvents Sleep ndelayrequest " ditunda Next Temp1 'Tunjukkan Hasil Analisis If Check1.Value Then frmnote.tipeform = "HA" frmnote.isi = HA frmnote.show vbmodal.aktivitas = "TUNDA" Exit For 'BUKAN TUNDA - BERARTI APPROVED If.Aktivitas <> "TUNDA" Then HA = HA & vbcrlf & vbcrlf & _ " Semua kredit terselesaikan (SAFE STATE)." & vbcrlf & _ " Oleh karena itu, permohonan kredit Pelanggan-" &.Indeks & " disetujui (SETUJU)." 'Delay sebentar - APPROVED lblstate.forecolor = 0 Shape1.FillColor = &HFF00& lblstate.caption = "SETUJU" lblstate1.caption = "Permohonan kredit Pelanggan-" &.Indeks & " disetujui (SETUJU)." PicState.Visible = True PUang(N).Visible = True PKasir(N).Picture = Kasir(2).Picture DoEvents Sleep ndelayrequest 'Tunjukkan Hasil Analisis If Check1.Value Then frmnote.tipeform = "HA" frmnote.isi = HA frmnote.show vbmodal
PicState.Visible = False PUang(N).Visible = False PKasir(N).Picture = Kasir(1).Picture Pelanggan-" &.Indeks & _ 'Hasil Transaksi H = H & vbcrlf & _ "t = " & lblt & ", Permohonan kredit " disetujui (SETUJU)." 'Tambah Penempatan For Temp1 = 1 To UBound(NamaPinjaman) 'Alokasi.PenempatanR(Temp1) =.PenempatanR(Temp1) +.RequestR(Temp1).RequestR(Temp1) 'Needs.NeedsR(Temp1) =.NeedsR(Temp1) - 'Kurangi Bank Bank.TersediaR(Temp1) = Bank.TersediaR(Temp1) -.RequestR(Temp1) Next Temp1 '~ Case "TUNDA" 'Bank Call AturProgressBar(0) 'Plgn Call AturProgressBar(N).Aktivitas = "PROSES" stemp1 = "(" For Temp1 = 1 To UBound(NamaPinjaman) If Temp1 > 1 Then stemp1 = stemp1 & "," stemp1 = stemp1 &.RequestR(Temp1) Next Temp1 stemp1 = stemp1 & ")" '--------------------------------------------- ----- ' HASIL ANALISIS DENGAN PINJAMAN REQUEST ALGORITHM '--------------------------------------------- ----- HA = "KEJADIAN: " & vbcrlf & "---------" & _ vbcrlf & "t = " & lblt & ", Permintaan Pelanggan-" &.Indeks & _ " atas kredit " & stemp1 & " dicek kembali." 'If Request <= Tersedia HA = HA & vbcrlf & vbcrlf & _
"ANALISIS DENGAN PINJAMAN REQUEST ALGORITHM:" & vbcrlf & _ "-------------------------------------------" & vbcrlf & vbcrlf & _ "1. CEK REQUEST HARUS <= TERSEDIA." & vbcrlf btemp1 = True For Temp1 = 1 To UBound(NamaPinjaman) If.RequestR(Temp1) <= Bank.TersediaR(Temp1) Then _ 'REQUEST <= TERSEDIA HA = HA & vbcrlf & _ " - " &.RequestR(Temp1) & " <= " & Bank.TersediaR(Temp1) & " (TRUE)" Else _ 'REQUEST > TERSEDIA HA = HA & vbcrlf & _ " - " &.RequestR(Temp1) & " <= " & Bank.TersediaR(Temp1) & " (FALSE)" 'TUNDA HA = HA & vbcrlf & _ " Permintaan lebih besar dari dana yang tersedia." & vbcrlf & _ " Permohonan kredit Pelanggan-" &.Indeks & " ditunda (TUNDA)." Next Temp1 btemp1 = False Exit For 'Jika Request <= Tersedia If btemp1 Then PERMOHONAN PELANGGAN." '~~~~~~~~~~~ HA = HA & vbcrlf & vbcrlf & _ "2. BANKER BERPURA-PURA UNTUK MEMENUHI Plgn(Temp1).PenempatanR Plgn(Temp1).NeedsR 'COBA ALOKASI For Temp1 = 1 To UBound(Plgn) Plgn(Temp1).TempPenempatanR = Plgn(Temp1).TempNeedsR = Plgn(Temp1).Finish = False Next Temp1 'KURANGI & TAMBAH PINJAMAN For Temp1 = 1 To UBound(NamaPinjaman) 'NamaPinjaman stemp1 = NamaPinjaman(Temp1)
'Kurangi bank Bank.TempTersediaR(Temp1) = Bank.TersediaR(Temp1) _ -.RequestR(Temp1) HA = HA & vbcrlf & vbcrlf & _ stemp1 & "_Bank = " & stemp1 & "_Bank - " & stemp1 & "_Request = " & _ Bank.TersediaR(Temp1) & " - " &.RequestR(Temp1) & " = " & _ Bank.TempTersediaR(Temp1) 'Tambah Penempatan di Pelanggan.TempPenempatanR(Temp1) =.PenempatanR(Temp1) +.RequestR(Temp1) HA = HA & vbcrlf & _ "Penempatan_" & stemp1 & "_Plgn" &.Indeks & " = " & _ "Penempatan_" & stemp1 & "_Plgn" &.Indeks & " + " & _ stemp1 & "_Request = " &.PenempatanR(Temp1) & " + " & _.RequestR(Temp1) & " = " &.TempPenempatanR(Temp1).RequestR(Temp1) & " = " & _ & " - " & _.NeedsR(Temp1) & " - " & _.TempNeedsR(Temp1) 'Kurangi Needs di Pelanggan.TempNeedsR(Temp1) =.NeedsR(Temp1) - HA = HA & vbcrlf & _ "Needs_" & stemp1 & "_Plgn" &.Indeks "Needs_" & stemp1 & "_Plgn" &.Indeks stemp1 & "_Request = " &.RequestR(Temp1) & " = " & Next Temp1 SAFETY ALGORIGHTM" '~~~~~~~~~~~ HA = HA & vbcrlf & vbcrlf & _ "3. PERIKSA APAKAH KEADAAN SAFE DENGAN 'Indeks yang akan diselesaikan Temp1 = 1 'Cari dimana Need <= Tersedia While Temp1 > 0 Temp1 = 0 And _ Then 'Looping cari temp1 berikutnya For Temp2 = 1 To UBound(Plgn) If Plgn(Temp2).Aktif And _ Plgn(Temp2).Aktivitas <> "UP" Plgn(Temp2).Aktivitas <> "DOWN"
Then 'Finish = False btemp1 = False If Plgn(Temp2).Finish = False 'Cek apakah semua need <= Tersedia Temp1 = Temp2 btemp1 = True For Temp3 = 1 To UBound(NamaPinjaman) If Plgn(Temp2).TempNeedsR(Temp3) > Bank.TempTersediaR(Temp3) Then btemp1 = False Exit For Next Temp3 Next Temp2 'Sesuai kriteria If btemp1 Then Temp1 = Temp2 Exit For 'Selesaikan Pelanggan Temp1 If Temp1 > 0 Then Plgn(Temp1).Finish = True & Plgn(Temp1).Indeks & "." UBound(NamaPinjaman) HA = HA & vbcrlf & vbcrlf & _ " Selesaikan kredit Pelanggan-" 'Tambah di bank For Temp2 = 1 To 'NamaPinjaman stemp1 = NamaPinjaman(Temp2) 'Bank = Bank + Plgn HA = HA & vbcrlf & _ " " & stemp1 & "_Bank = " & _ stemp1 & "_Bank + Penempatan_" & stemp1 & "_Plgn" & Plgn(Temp1).Indeks & " = " & _ Bank.TempTersediaR(Temp2) & " + " & Plgn(Temp1).TempPenempatanR(Temp2) & " = " & _ Bank.TempTersediaR(Temp2) + Plgn(Temp1).TempPenempatanR(Temp2) Bank.TempTersediaR(Temp2) + _ 'Perhitungan Bank.TempTersediaR(Temp2) = Plgn(Temp1).TempPenempatanR(Temp2) Next Temp2
HA = HA & vbcrlf & " Finish(Plgn" & Plgn(Temp1).Indeks & ") = TRUE." Wend _ 'Cek ada Pelanggan = false.aktivitas = "" For Temp1 = 1 To UBound(Plgn) If Plgn(Temp1).Aktif And _ Plgn(Temp1).Aktivitas <> "UP" And _ Plgn(Temp1).Aktivitas <> "DOWN" And Plgn(Temp1).Finish = False Then HA = HA & vbcrlf & vbcrlf & _ " Kredit Plgn-" & Plgn(Temp1).Indeks & _ " tidak bisa diselesaikan (UNSAFE STATE)." & vbcrlf & _ " Oleh karena itu, permohonan kredit Pelanggan-" &.Indeks & " ditunda (TUNDA)." Next Temp1.Aktivitas = "TUNDA" Exit For 'BUKAN TUNDA - BERARTI APPROVED If.Aktivitas <> "TUNDA" Then HA = HA & vbcrlf & vbcrlf & _ " Semua kredit terselesaikan (SAFE STATE)." & vbcrlf & _ " Oleh karena itu, permohonan kredit Pelanggan-" &.Indeks & " disetujui (SETUJU)." Pelanggan-" & _ disetujui (SETUJU)." 'Delay sebentar - APPROVED lblstate.forecolor = 0 Shape1.FillColor = &HFF00& lblstate.caption = "SETUJU" lblstate1.caption = "Permohonan kredit.indeks & " PicState.Visible = True PUang(N).Visible = True PKasir(N).Picture = Kasir(2).Picture DoEvents Sleep ndelayrequest 'Tunjukkan Hasil Analisis If Check1.Value Then frmnote.tipeform = "HA" frmnote.isi = HA
frmnote.show vbmodal PicState.Visible = False PUang(N).Visible = False PKasir(N).Picture = Kasir(1).Picture Pelanggan-" &.Indeks & _ (SETUJU)." 'Hasil Transaksi H = H & vbcrlf & _ "t = " & lblt & ", Permohonan kredit " yang tertunda telah disetujui 'Tambah Penempatan For Temp1 = 1 To UBound(NamaPinjaman) 'Alokasi.PenempatanR(Temp1) =.PenempatanR(Temp1) +.RequestR(Temp1).RequestR(Temp1) 'Needs.NeedsR(Temp1) =.NeedsR(Temp1) - 'Kurangi Bank Bank.TersediaR(Temp1) = Bank.TersediaR(Temp1) -.RequestR(Temp1) Next Temp1 '~ Case "RETURN" 'Bank Call AturProgressBar(0) 'Plgn Call AturProgressBar(N).Aktivitas = "PROSES" stemp1 = "(" For Temp1 = 1 To UBound(NamaPinjaman) If Temp1 > 1 Then stemp1 = stemp1 & "," stemp1 = stemp1 &.PenempatanR(Temp1) Next Temp1 stemp1 = stemp1 & ")" 'Hasil Transaksi H = H & vbcrlf & _ "t = " & lblt & ", Pelanggan-" &.Indeks & _ " telah menyelesaian semua permasalahan bisnisnya dan mengembalikan " & _ " semua pinjamannya " & stemp1 & " kepada bank." 'Pengembalian uang For Temp1 = 1 To UBound(NamaPinjaman)
Bank.TersediaR(Temp1) = Bank.TersediaR(Temp1) +.PenempatanR(Temp1) Next Temp1 Call AturProgressBar(0) End With Next N '~ Case "DOWN" End Select 'Turun ke bawah.aktivitas = "DOWN" PProses(N).Visible = False lblindeks(n).visible = False 'Tambah TOP PPlgn(N).Top = PPlgn(N).Top + 75 If PPlgn(N).Tag = "1" Then PPlgn(N).Picture = PlgnDw2(.Tipe).Picture PPlgn(N).Tag = "2" Else PPlgn(N).Picture = PlgnDw1(.Tipe).Picture PPlgn(N).Tag = "1" 'Pengaturan Pintu If PPlgn(N).Top = 11520 Then Pintu(N).Visible = Not Pintu(N).Visible ElseIf PPlgn(N).Top = 9945 Then Pintu(N).Visible = Not Pintu(N).Visible 'Sampai ke bawah -> Aktif = FALSE If PPlgn(N).Top = 11520 Then.Aktif = False.Aktivitas = "" 'ANIMASI BANKER TBanker = TBanker + 1 If Left(PBanker.Tag, 1) = "1" Then 'Berpikir PBanker.Picture = Banker(1).Picture 'Acak waktu berpikir If TBanker = 1 Then Randomize TBankerRnd = 1 + Int(Rnd * 20) 'Ganti jadi menulis If TBanker = TBankerRnd Then PBanker.Tag = "21" TBanker = 0
Else 'Menulis PBanker.Picture = Banker(Val(Right(PBanker.Tag, 1)) + 1).Picture 'Acak waktu menulis If TBanker = 1 Then Randomize TBankerRnd = 1 + Int(Rnd * 30) If TBanker = TBankerRnd Then 'Ganti jadi berpikir TBanker = 0 PBanker.Tag = "1" Else PBanker.Tag = "2" & IIf(Right(PBanker.Tag, 1) = "1", "2", "1") bisproses = False 'Batas waktu simulasi If Val(lblT) = WaktuSimulasi Then Timer1.Enabled = False MsgBox "Simulasi telah berakhir!", vbinformation cmdplay.enabled = False cmdpause.enabled = False cmdhasil Transaksi.Enabled = True cmdexit.enabled = True 'ProgressBar Private Sub AturProgressBar(nPlgn As Integer) Dim P As Integer Select Case nplgn Case 0 For P = 1 To UBound(NamaPinjaman) shpr0(p).width = Hitung(Bank.TersediaR(P), 1170, Bank.MaximumR(P)) lblp0(p).caption = Bank.TersediaR(P) & "/" & Bank.MaximumR(P) 'Bagi(Bank.TersediaR(P) * 100, Bank.MaximumR(P)) & "%" Next P Case 1 For P = 1 To UBound(NamaPinjaman) shpr1(p).width = Hitung(Plgn(1).PenempatanR(P), 795, Plgn(1).MaximumR(P)) lblp1(p).caption = Plgn(1).PenempatanR(P) & "/" & Plgn(1).MaximumR(P) 'Bagi(Plgn(1).PenempatanR(P) * 100, Plgn(1).MaximumR(P)) & "%" Next P
Case 2 For P = 1 To UBound(NamaPinjaman) shpr2(p).width = Hitung(Plgn(2).PenempatanR(P), 795, Plgn(2).MaximumR(P)) lblp2(p).caption = Plgn(2).PenempatanR(P) & "/" & Plgn(2).MaximumR(P) 'Bagi(Plgn(2).PenempatanR(P) * 100, Plgn(2).MaximumR(P)) & "%" Next P Case 3 For P = 1 To UBound(NamaPinjaman) shpr3(p).width = Hitung(Plgn(3).PenempatanR(P), 795, Plgn(3).MaximumR(P)) lblp3(p).caption = Plgn(3).PenempatanR(P) & "/" & Plgn(3).MaximumR(P) 'lblp3(p).caption = Bagi(Plgn(3).PenempatanR(P) * 100, Plgn(3).MaximumR(P)) & "%" Next P Case 4 For P = 1 To UBound(NamaPinjaman) shpr4(p).width = Hitung(Plgn(4).PenempatanR(P), 795, Plgn(4).MaximumR(P)) lblp4(p).caption = Plgn(4).PenempatanR(P) & "/" & Plgn(4).MaximumR(P) 'lblp4(p).caption = Bagi(Plgn(4).PenempatanR(P) * 100, Plgn(4).MaximumR(P)) & "%" Next P Case 5 For P = 1 To UBound(NamaPinjaman) shpr5(p).width = Hitung(Plgn(5).PenempatanR(P), 795, Plgn(5).MaximumR(P)) lblp5(p).caption = Plgn(5).PenempatanR(P) & "/" & Plgn(5).MaximumR(P) 'lblp5(p).caption = Bagi(Plgn(5).PenempatanR(P) * 100, Plgn(5).MaximumR(P)) & "%" Next P End Select 'Hitung Private Function Hitung(ByVal A1 As Double, ByVal A2 As Double, ByVal A3 As Double) As Double If A3 = 0 Then Hitung = A2 Else Hitung = Round(A1 * A2 / A3) End Function 6. Form Modul Banker Option Explicit 'Hasil Transaksi
Public H As String 'Hasil Analisis Public HA As String 'Indeks Pelanggan Public JlhIndeks As Long 'Nama Pinjaman Public NamaPinjaman() As String 'Waktu Simulasi Public WaktuSimulasi As Long 'Properti Banker Public Type PropBanker MaximumR() As Integer TersediaR() As Integer TempTersediaR() As Integer End Type 'Bank Public Bank As PropBanker 'Properti Pelanggan Public Type PropPlgn 'Indeks Indeks As Integer 'Tipe Tipe As Integer 'Sedang aktif / tidak Aktif As Boolean 'Aktivitas Aktivitas As String 'Request Pinjaman RequestR() As Integer 'Maksimum Pinjaman MaximumR() As Integer 'Alokasi Pinjaman PenempatanR() As Integer TempPenempatanR() As Integer 'Maximum - Penempatan NeedsR() As Integer TempNeedsR() As Integer 'u/ Pinjaman Request Alg Finish As Boolean End Type
'Pelanggan Public Plgn(5) As PropPlgn 'Delay Public Declare Sub Sleep Lib "kernel32" (ByVal dwmilliseconds As Long) 'Help Public Const HH_DISPLAY_TOPIC = &H0 Public Const HH_CLOSE_ALL = &H12 Public Declare Function HtmlHelp Lib "HHCtrl.ocx" Alias "HtmlHelpA" _ (ByVal hwndcaller As Long, ByVal pszfile As String, ByVal ucommand As Long, _ dwdata As Any) As Long