Aplikasi Pemrograman Berbasis Visual Untuk Pengamanan Undangan Terbatas Menggunakan Barcode.

(1)

Abstrak i

ABSTRAK

Teknologi sekarang ini berkembang sangat cepat dengan tujuan untuk membuat pekerjaan manusia menjadi lebih cepat, lebih mudah, dan praktis. Salah satu penggunaan teknologi saat ini yang dipakai untuk membantu pekerjaan manusia adalah komputer. Supaya pekerjaan manusia dimengerti oleh komputer, dibutuhkan penghubung antara keduanya. Program aplikasi adalah yang menghubungkannya.

Penggunaan komputer juga dapat mengurangi kesalahan yang bisa terjadi karena kelalaian manusia. Salah satunya adalah dalam melakukan pengecekan undangan yang jumlahnya sangat banyak Kesalahan yang bisa terjadi karena kelalaian adalah terlewatnya undangan untuk dicek atau salah memasukkan data pada saat membuat laporan. Sehubungan dalam hal di atas, komputer dapat digunakan untuk membantu mengatasinya. Supaya komputer dapat berinteraksi dengan pengguna, maka sebuah program aplikasi harus dibuat. Dalam tugas akhir ini, penulis mencoba membuat program untuk mengatasi masalah tersebut.

Program yang digunakan adalah Microsoft Visual Basic dan Microsoft Access. Uji coba dilakukan untuk mengetahui apakah program yang telah dibuat dapat beroperasi dengan baik. Berdasarkan uji coba yang dilakukan, didapat bahwa program yang telah dibuat dapat membantu manusia dalam melakukan pengecekan undangan.


(2)

Abstrak ii

ABSTRACT

Now days, technology grow faster and faster to make jobs faster, easier, and handy. One form of using technology to help people is computer. But to make computer understand what people want, a translator will be needed. A program application is the translator.

Use of computer will reduce the mistake that can happen because of human error. As example, when check lots of ticket. In this case, human can make mistake when checking the ticket, like pass a ticket or write different data when make a report. Because of what explained above, using computer can help them. For computer can interact with user, a program application is needed. In this final project, writer will make a program to handle the problem.

Writer use program as Microsoft Visual Basic and Microsoft Access to finish the project. Experiment will be attempted to test the program and to make program operates better. Based on the result, writer concluded that this program can help out the people when checking lots of ticket.


(3)

Daftar Isi vi

DAFTAR ISI

ABSTRAK ... i

KATA PENGANTAR ... iii

DAFTAR ISI... vi

DAFTAR GAMBAR ... ix

DAFTAR TABEL... xi

BAB I PENDAHULUAN ... 1

1.1 Latar Belakang ... 1

1.2 Identifikasi Masalah ... 1

1.3 Tujuan ... 1

1.4 Manfaat ... 2

1.5 Pembatasan Masalah ... 2

1.6 Sistematika Pembahasan ... 2

BAB II LANDASAN TEORI ... 3

2.1 Microsoft Visual Basic... 3

2.2 IDE (Integrated Development Environment) Ms Visual Basic 6.0 ... 4

2.2.1 Menu ... 5

2.2.2 Toolbar ... 5

2.2.3 Toolbox ... 6

2.2.4 Project Explorer ... 6

2.2.5 Properties Windows ... 7


(4)

Daftar Isi vii

2.2.7 Form ... 9

2.2.8 Kode Editor ... 10

BAB III PERANCANGAN ... 11

3.1 Membuat Interface Program ... 11

3.1.1 Interface Utama... 12

3.1.2 Interface Administrator... 14

3.1.3 Interface Laporan ... 18

3.2 Database ... 21

3.3 Barcode ... 23

3.4 Skema Dari Perancangan Program... 24

BAB IV DATA PENGAMATAN ... 28

4.1 Pengujian Memasukkan Data Baru... 28

4.2 Pengujian Mengubah Data ... 31

4.3 Pengujian Penghapusan Data ... 32

4.4 Pengujian Pengurutan Data ... 33

4.5 Pengujian Pencetakkan ... 34

4.6 Pengujian Pembacaaan Kartu... 36

4.7 Pengujian Daftar Hadir ... 40


(5)

Daftar Isi viii BAB V PENUTUP... 46 5.1 Kesimpulan ... 46 5.2 Saran... 46

DAFTAR PUSTAKA

LAMPIRAN 1 Contoh Pencetakkan Kartu... A-1 LAMPIRAN 2 Listing Program... B-1


(6)

Daftar Isi ix

DAFTAR GAMBAR

Gambar 2.1 Tampilan IDE Microsoft Visual Basic 6.0... 4

Gambar 2.2 Tampilan Menu ... 5

Gambar 2.3 Tampilan Toolbar... 5

Gambar 2.4 Tampilan Toolbox... 6

Gambar 2.5 Tampilan Project Explorer ... 6

Gambar 2.6 Tampilan Properties ... 7

Gambar 2.7 Tampilan Form Layout ... 8

Gambar 2.8 Tampilan Form... 9

Gambar 2.9 Tampilan Code Editor ... 10

Gambar 3.1 Tampilan Interface Utama... 13

Gambar 3.2 Tampilan Interface Administrator... 14

Gambar 3.3 Tampilan Jendela Edit Data ... 15

Gambar 3.4 Tampilan Jendela Add New Data ... 16

Gambar 3.5 Contoh Kartu... 17

Gambar 3.6 Tampilan Interface Laporan... 18

Gambar 3.7 Konfirmasi Penghapusan Data Laporan... 19

Gambar 3.8 Konfirmasi Pengundian Ulang Hadiah ... 20

Gambar 3.9 Relasi Ketiga Tabel ... 22

Gambar 3.10 Diagram Alir Menu Utama ... 24

Gambar 3.11 Diagram Alir Proses Data Barcode ... 25

Gambar 3.12 Diagram Alir Mengatur Isi Database ... 26


(7)

Daftar Isi x

Gambar 4.1 Tampilan Pengisian Data ... 29

Gambar 4.2 Peringatan Nama Tidak Diisi ... 29

Gambar 4.3 Peringatan ID Kurang Dari 8 Nomor ... 30

Gambar 4.4 Peringatan ID Sudah Terpakai ... 30

Gambar 4.5 Tampilan Hasil Setelah Memasukkan Data ... 31

Gambar 4.6 Tampilan Konfirmasi Hapus Data ... 33

Gambar 4.7 Tampilan Untuk Mencetak Kartu... 34

Gambar 4.8 Tampilan Untuk Daftar Nama... 35

Gambar 4.9 Tampilan Untuk Daftar Nama Berdasarkan ID ... 36

Gambar 4.10 Kartu Peserta ... 37

Gambar 4.11 Tampilan Memasukkan Nomor ID ... 38

Gambar 4.12 Tampilan ID Cocok... 38

Gambar 4.13 Tampilan ID Tidak Cocok ... 39

Gambar 4.14 Tampilan ID Sudah Pernah Terdaftar ... 39

Gambar 4.15 Tampilan Daftar Hadir ... 42

Gambar 4.16 Tampilan Pencetakan Daftar Hadir... 42


(8)

Daftar Isi xi

DAFTAR TABEL

Tabel 3.1 Nama-Nama Field Tabel Account ... 21

Tabel 3.2 Nama-Nama Field Tabel Status ... 21

Tabel 3.3 Nama-Nama Field Tabel Prize... 22

Tabel 3.4 Contoh Nomor ID Dan Hasilnya Pada Kedua Jenis Data... 23

Tabel 3.5 Tabel Barcode Code 39... 23

Tabel 4.1 Daftar Nama Dan Data Pribadinya ... 28

Tabel 4.2 Pengurutan Data Account Berdasarkan Nama... 33

Tabel 4.3 Pengurutan Data Account Berdasarkan ID ... 33

Tabel 4.4 Nomor ID Dan Tampilan Barcodenya ... 35

Tabel 4.5 Nomor ID Yang Dimasukkan ... 40

Tabel 4.6 Daftar Hadir Setelah Pengujian... 40

Tabel 4.7 Daftar Hadir Dengan Pengurutan Menurut Waktu Masuk ... 41

Tabel 4.8 Daftar Hadir Dengan Pengurutan Menurut ID... 41

Tabel 4.9 Daftar Hadir Dengan Pengurutan Menurut Nama ... 41

Tabel 4.10 Daftar Hadir Setelah Menekan Clear Report ... 43

Tabel 4.11 Daftar Pemenang Dengan Satu Pemenang... 44

Tabel 4.12 Daftar Pemenang Dengan Dua Pemenang ... 44

Tabel 4.13 Daftar Pemenang Dengan Tiga Pemenang ... 44

Tabel 4.14 Daftar Pemenang Dengan Pengurutan Menurut Urutan Pemenang. 45 Tabel 4.15 Daftar Pemenang Dengan Pengurutan Menurut ID ... 45


(9)

Lampiran Contoh Pencetakkan Kartu A-1

LAMPIRAN 1

CONTOH

PENCETAKKAN

KARTU


(10)

(11)

Lampiran Listing Prgram B-1

LAMPIRAN 2

LISTING

PROGRAM


(12)

Lampiran Listing Prgram B-2

Form Utama

Private WithEvents Cat As CuteCat Private Sub cmdAdmin_Click() frmTabel.Show vbModal, Me End Sub

Private Sub cmdExit_Click() Unload frmTabel

Unload frmReport Unload Me

End Sub

Private Sub cmdInput_Click()

If (txtInput = "") Or (Len(txtInput.Text) < 8) Then 'no blank input

txtInput.SetFocus Else

With frmTabel.dtaFlex.Recordset .MoveFirst

Do Until .EOF

If (txtInput.Text = .Fields(0)) Then

Call login(txtInput.Text, Format(Time, "hh:mm:ss"))

lblStatus.Caption = frmReport.dtaStatus.Recordset.RecordCount Call clearText

Exit Sub Else

.MoveNext End If

Loop

Call MsgBox("ID Denied" & vbCrLf & _ "Illegal ID", vbCritical, "Confirm") Call clearText

End With End If End Sub

Private Sub cmdInput_KeyPress(KeyAscii As Integer)

'set function to backspace and plus key when focus at button If (KeyAscii = 27) Or (KeyAscii = 8) Or (KeyAscii = 43) _ Then txtInput.SetFocus

End Sub

Private Sub Form_Activate()

lblStatus.Caption = frmReport.dtaStatus.Recordset.RecordCount End Sub


(13)

Lampiran Listing Prgram B-3 Private Sub Form_Initialize()

Set Cat = New CuteCat Me.KeyPreview = True End Sub

Private Sub Form_Load() Load frmTabel

Load frmReport

Call DisableClose(Me, False) End Sub

Private Sub Cat_BarcodeScanned(BCData As String, BCType As String, BCValid As Boolean)

If Not BCValid Then Exit Sub txtInput.Text = BCData Call cmdInput_Click End Sub

Private Sub Cat_ScanStarted() Beep

End Sub

Private Sub txtInput_Change() If (Len(txtInput.Text) > 0) Then lblInput.Visible = True lblSign.Visible = False End If

lblInput.Caption = "*" & txtInput.Text & "*" 'set focus when input 8 number id

If (Len(txtInput.Text) >= 8) Then cmdInput.SetFocus End Sub

Private Sub txtInput_KeyPress(KeyAscii As Integer) 'input number only

If Not ((KeyAscii >= 48) And (KeyAscii <= 57) Or (KeyAscii = 8)) Then KeyAscii = 0

End Sub

Private Sub login(ByVal loginId As String, ByVal loginTime As String) Dim regID As Boolean

regID = False

With frmReport.dtaStatus.Recordset 'check if database empty or not If .RecordCount = 0 Then .AddNew

Else

.MoveFirst


(14)

Lampiran Listing Prgram B-4 Do Until .EOF

If (.Fields(0) = loginId) Then regID = True

Exit Do Else

.MoveNext End If

Loop

'if registered If regID Then

lblInput.Visible = False lblSign.Visible = True

lblSign.Caption = "ID : " & .Fields(0) & vbCrLf _

& "Name : " & .Fields(1) & vbCrLf & "Already Registered" Exit Sub

Else

.AddNew End If End If

.Fields(0) = loginId

.Fields(1) = frmTabel.dtaFlex.Recordset.Fields(1) .Fields(2) = loginTime

.Fields(3) = .RecordCount + 1 .Update

lblInput.Visible = False lblSign.Visible = True

lblSign.Caption = "Registering" & vbCrLf & "ID : " & _

loginId & vbCrLf & "Name : " & frmTabel.dtaFlex.Recordset.Fields(1) End With

End Sub

Private Sub clearText() txtInput.Text = "" txtInput.SetFocus End Sub

Form Administrator

Private Sub cmdAdd_Click() 'add new data

frmInput.Show vbModal, Me Call refreshFlex

Call hlCol End Sub

Private Sub cmdDelete_Click() 'delete selected data


(15)

Lampiran Listing Prgram B-5 Call DeletingData(flxView.Text, dtaFlex)

Call refreshFlex End Sub

Private Sub cmdEdit_Click() 'edit selected data

If flxView.Row = 0 Then Exit Sub For i = 0 To 3

flxView.Col = i + 1

frmInput.txtInput(i).Text = flxView.Text Next i

Call hlCol

frmInput.txtInput(0).Enabled = False 'open input form

frmInput.Show vbModal, Me Call refreshFlex

End Sub

Private Sub cmdExit_Click()

'frmCreateDB.Show vbModal, Me Me.Hide

End Sub

Private Sub cmdPrintBarcode_Click() 'opening report

With envReport.rscomReport If optSort(0).Value Then .Sort = "ID"

ElseIf optSort(1).Value Then .Sort = "Nama"

End If End With

Load rptPrintBarcode

rptPrintBarcode.Show vbModal, Me End Sub

Private Sub cmdReport_Click() 'opening report

With envReport.rscomReport If optSort(0).Value Then .Sort = "ID"

ElseIf optSort(1).Value Then .Sort = "Nama"

End If End With Load rptReport

rptReport.Show vbModal, Me End Sub


(16)

Lampiran Listing Prgram B-6 Private Sub cmdReportFlex_Click()

frmReport.Show vbModal, Me End Sub

Private Sub flxView_Click() Call hlCol

End Sub

Private Sub flxView_DblClick() Call cmdEdit_Click

End Sub

Private Sub Form_Load() Call DisableClose(Me, True) 'Prepare database

dtaFlex.DatabaseName = App.path & "\Account.mdb" dtaFlex.RecordSource = "select * from account" Call refreshFlex

'open connection for report

envReport.conReport.ConnectionString =

"Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source= " & App.path & "\Account.mdb"

'grid size With flxView

.ColWidth(0) = 100 .ColWidth(1) = 1000 .ColWidth(2) = 2000 .ColWidth(3) = 1500 .ColWidth(4) = 4700 .ColWidth(5) = 0 End With

End Sub

Public Function DeletingData(toDel As String, dataName As Data) As Boolean 'set location

Call searchId(toDel, dataName) With dataName.Recordset

If MsgBox("Are you sure want to delete" & vbCrLf & _ "ID : " & .Fields(0) & vbCrLf & "Name : " & _ .Fields(1), vbYesNo, "Delete Data") = vbYes Then .Delete

End If End With End Function

Public Function EditingData(toEdit As String, dataName As Data) As Boolean 'set location


(17)

Lampiran Listing Prgram B-7 Call searchId(toEdit, dataName)

With dataName.Recordset .Edit

For i = 0 To 3

.Fields(i) = frmInput.txtInput(i).Text Next i

.Update End With End Function

Public Function EditingDataName(IDtoEdit As String, dataName As Data) As Boolean

'set location

If Not (dataName.Recordset.RecordCount = 0) Then If searchId(IDtoEdit, dataName) Then

With dataName.Recordset .Edit

.Fields(1) = frmInput.txtInput(1).Text .Update

End With End If End If End Function

Public Function AddingData(dataName As Data) As Boolean 'set location

With dataName.Recordset .AddNew

For i = 0 To 3

.Fields(i) = frmInput.txtInput(i).Text Next i

.Fields(4) = "*" & .Fields(0) & "*" .Update

End With End Function Private Sub hlCol() flxView.Col = 1 flxView.ColSel = 4

lblCurrent.Caption = flxView.Row & " / " End Sub

Private Sub refreshFlex() i = flxView.Row dtaFlex.Refresh

If i = flxView.Rows Then i = i - 1

End If


(18)

Lampiran Listing Prgram B-8 lblTotal.Caption = flxView.Rows - 1

Call hlCol End Sub

Private Sub optSort_Click(Index As Integer) 'sort by what

Dim sortType As String With dtaFlex

Select Case (Index) Case 0

sortType = "ID" Case 1

sortType = "Nama" End Select

.RecordSource = "select * from Account ORDER BY " & sortType .Refresh

End With End Sub

Private Sub tmrTime_Timer()

lblTime.Caption = Format(Time, "hh:mm:ss ampm")

lblDate.Caption = WeekdayName(Weekday(Date), False, vbSunday) & ", " & VBA.MonthName(VBA.Month(Date)) & " " & Day(Date) & ", " &

VBA.Year(Date)

frmMain.lblTime.Caption = lblTime.Caption frmMain.lblDate.Caption = lblDate.Caption frmReport.lblTime.Caption = lblTime.Caption frmReport.lblDate.Caption = lblDate.Caption End Sub

Form Laporan

Private Sub cmdAdmin_Click() Me.Hide

End Sub

Private Sub cmdExit_Click() Me.Hide

frmTabel.Hide End Sub

Private Sub cmdPrintPrize_Click() 'generate temporary data

With dtaTemp.Recordset

If Not (.RecordCount = 0) Then .MoveFirst If dtaStatus.Recordset.RecordCount = 0 Then

Call MsgBox("Can't Print Anything" & vbCrLf & _ "Database is empty")


(19)

Lampiran Listing Prgram B-9 Exit Sub

End If

Do Until .EOF .Delete .MoveNext Loop

dtaPrize.Recordset.MoveFirst Do Until dtaPrize.Recordset.EOF

If searchId(dtaPrize.Recordset.Fields(0), frmTabel.dtaFlex) Then .AddNew

.Fields(0) = frmTabel.dtaFlex.Recordset.Fields(0) .Fields(1) = frmTabel.dtaFlex.Recordset.Fields(1) .Fields(2) = frmTabel.dtaFlex.Recordset.Fields(2) .Fields(3) = "Empty"

.Fields(4) = frmTabel.dtaFlex.Recordset.Fields(3) .Fields(5) = dtaPrize.Recordset.Fields(2)

.Update End If dtaPrize.Recordset.MoveNext Loop End With dtaTemp.Refresh 'opening report With envReport.rscomStatus If optSortPrize(0).Value Then .Sort = "ID"

ElseIf optSortPrize(1).Value Then .Sort = "Nama"

ElseIf optSortPrize(2).Value Then .Sort = "Time"

End If End With Load rptPrize

rptPrize.Show vbModal, Me End Sub

Private Sub cmdPrintStatus_Click() 'generate temporary data

With dtaTemp.Recordset

If Not (.RecordCount = 0) Then .MoveFirst If dtaStatus.Recordset.RecordCount = 0 Then

Call MsgBox("Can't Print Anything" & vbCrLf & _ "Database is empty")

Exit Sub End If

Do Until .EOF .Delete .MoveNext


(20)

Lampiran Listing Prgram B-10 Loop

dtaStatus.Recordset.MoveFirst Do Until dtaStatus.Recordset.EOF

If searchId(dtaStatus.Recordset.Fields(0), frmTabel.dtaFlex) Then .AddNew

.Fields(0) = frmTabel.dtaFlex.Recordset.Fields(0) .Fields(1) = frmTabel.dtaFlex.Recordset.Fields(1) .Fields(2) = frmTabel.dtaFlex.Recordset.Fields(2) .Fields(4) = frmTabel.dtaFlex.Recordset.Fields(3) .Fields(3) = dtaStatus.Recordset.Fields(2)

.Fields(5) = dtaStatus.Recordset.Fields(3) .Update End If dtaStatus.Recordset.MoveNext Loop End With dtaTemp.Refresh 'opening report With envReport.rscomStatus If optSortStatus(0).Value Then .Sort = "ID"

ElseIf optSortStatus(1).Value Then .Sort = "Nama"

ElseIf optSortStatus(2).Value Then .Sort = "Time"

End If End With Load rptStatus

rptStatus.Show vbModal, Me End Sub

Private Sub cmdShufflePrize_Click() Dim accIn As Integer

Dim i As Integer Dim pass As Boolean Dim max As Integer

If txtMax.Text = "" Then max = 1

Else

max = txtMax.Text End If

If MsgBox("Are you sure to clear current winner and shuffle new one?", _ vbYesNo, "Warning") = vbYes Then

'clear database for prize

With frmReport.dtaPrize.Recordset If Not .RecordCount = 0 Then 'Clear Database


(21)

Lampiran Listing Prgram B-11 .MoveFirst

Do Until .EOF .Delete .MoveNext Loop

End If 'shuffle prize Call Randomize

accIn = dtaStatus.Recordset.RecordCount If max > accIn Then max = accIn

txtMax.Text = max i = 1

Do Until (i > max)

dtaStatus.Recordset.AbsolutePosition = Rnd() * accIn pass = False

If .RecordCount = 0 Then pass = True

ElseIf Not searchId(dtaStatus.Recordset.Fields(0), frmReport.dtaPrize) Then

pass = True End If If pass Then .AddNew

.Fields(0) = dtaStatus.Recordset.Fields(0) .Fields(1) = dtaStatus.Recordset.Fields(1) .Fields(2) = i

.Update i = i + 1 End If Loop End With

Call refreshFlexPrize End If

End Sub

Private Sub flxViewPrize_Click() Call hlColPrize

End Sub

Private Sub flxViewStatus_Click() Call hlColStatus

End Sub

Private Sub Form_Activate() Call refreshFlexStatus Call refreshFlexPrize End Sub


(22)

Lampiran Listing Prgram B-12

Private Sub Form_Load() Call DisableClose(Me, True) 'prepare database

dtaStatus.DatabaseName = App.path & "\Account.mdb"

dtaStatus.RecordSource = "select * from status ORDER BY Time" dtaPrize.DatabaseName = App.path & "\Account.mdb"

dtaPrize.RecordSource = "select * from prize ORDER BY NoList" dtaTemp.DatabaseName = App.path & "\Account.mdb"

dtaTemp.RecordSource = "select * from temp"

'grid size

With flxViewStatus .ColWidth(0) = 100 .ColWidth(1) = 1000 .ColWidth(2) = 2000 .ColWidth(3) = 1350 .ColWidth(4) = 0 End With

With flxViewPrize .ColWidth(0) = 100 .ColWidth(1) = 1000 .ColWidth(2) = 2000 .ColWidth(3) = 1000 End With

End Sub

Private Sub cmdCleardtaStatus_Click() With frmReport.dtaStatus.Recordset If .RecordCount = 0 Then

'if database already empty Call MsgBox("Empty") Else

'clear database .MoveFirst Do Until .EOF .Delete .MoveNext Loop

End If End With

Call refreshFlexStatus End Sub

Private Sub hlColStatus() flxViewStatus.Col = 1 flxViewStatus.ColSel = 4


(23)

Lampiran Listing Prgram B-13 End Sub

Private Sub refreshFlexStatus() i = flxViewStatus.Row dtaStatus.Refresh

If i = flxViewStatus.Rows Then i = i - 1

End If

flxViewStatus.Row = i

lblTotalStatus.Caption = flxViewStatus.Rows - 1 Call hlColStatus

End Sub

Private Sub hlColPrize() flxViewPrize.Col = 1 flxViewPrize.ColSel = 3

lblCurrentPrize.Caption = flxViewPrize.Row & " / " End Sub

Private Sub refreshFlexPrize() i = flxViewPrize.Row dtaPrize.Refresh

If i = flxViewPrize.Rows Then i = i - 1

End If

flxViewPrize.Row = i

lblTotalPrize.Caption = flxViewPrize.Rows - 1 Call hlColPrize

End Sub

Private Sub optSortPrize_Click(Index As Integer) 'sort by what

Dim sortType As String With dtaPrize

Select Case (Index) Case 0

sortType = "ID" Case 1

sortType = "Nama" Case 2

sortType = "NoList" End Select

.RecordSource = "select * from Prize ORDER BY " & sortType .Refresh

End With End Sub


(24)

Lampiran Listing Prgram B-14 'sort by what

Dim sortType As String With dtaStatus

Select Case (Index) Case 0

sortType = "ID" Case 1

sortType = "Nama" Case 2

sortType = "Time" End Select

.RecordSource = "select * from Status ORDER BY " & sortType .Refresh

End With End Sub

Private Sub txtShuffle_KeyPress(KeyAscii As Integer) 'input number only

If Not ((KeyAscii >= 48) And (KeyAscii <= 57) Or (KeyAscii = 8)) Then KeyAscii = 0

End Sub

Form Input

Private Sub cmdCancel_Click() txtInput(0).Enabled = True Unload Me

End Sub

Private Sub cmdOk_Click() 'check edit mode or add mode If txtInput(0).Enabled Then 'add mode

If frmTabel.flxView.Row = 0 Then If txtInput(1).Text = "" Then MsgBox "Fill your Name" Exit Sub

ElseIf Len(txtInput(0).Text) = 8 Then

Call frmTabel.AddingData(frmTabel.dtaFlex) Else

MsgBox "Fill your ID with 8 number" Exit Sub

End If

ElseIf searchId(txtInput(0).Text, frmTabel.dtaFlex) Then MsgBox "Id Used"

Exit Sub

ElseIf txtInput(1).Text = "" Then MsgBox "Fill your Name"


(25)

Lampiran Listing Prgram B-15 Exit Sub

ElseIf Len(txtInput(0).Text) = 8 Then

Call frmTabel.AddingData(frmTabel.dtaFlex) Else

MsgBox "Fill your ID with 8 number" Exit Sub

End If Else 'edit mode

Call frmTabel.EditingData(frmTabel.flxView.Text, frmTabel.dtaFlex) Call frmTabel.EditingDataName(txtInput(0).Text, frmReport.dtaStatus) Call frmTabel.EditingDataName(txtInput(0).Text, frmReport.dtaPrize) End If

'exit input form

Call cmdCancel_Click End Sub

Private Sub Form_Activate() If txtInput(0).Enabled Then

lblTitle.Caption = "Add New Data"

frmInput.Caption = "Administrator - Add New Data" Else

lblTitle.Caption = "Edit Data"

frmInput.Caption = "Administrator - Edit Data" End If

End Sub

Private Sub txtInput_Change(Index As Integer) 'set focus when input 8 number id

If Index = 0 And lblTitle.Caption = "Add New Data" Then If (Len(txtInput(0).Text) >= 8) Then txtInput(1).SetFocus End If

End Sub

Private Sub txtInput_KeyPress(Index As Integer, KeyAscii As Integer) 'input number only

If Index = 0 Then

If Not ((KeyAscii >= 48) And (KeyAscii <= 57) Or (KeyAscii = 8)) Then KeyAscii = 0

End If End Sub

Modul Database

Public Sub MoveData(ByVal Index As Integer, dataName As Data) 'Database navigator

With dataName.Recordset Select Case Index


(26)

Lampiran Listing Prgram B-16 Case 0:

.MoveFirst Case 1:

.MovePrevious

If .BOF Then .MoveFirst Case 2:

.MoveNext

If .EOF Then .MoveLast Case 3:

.MoveLast End Select End With End Sub

Public Sub ViewData(controlsName As Variant, dataName As Data) 'View data

Dim i As Integer

For i = controlsName.LBound To controlsName.UBound controlsName(i).Text = dataName.Recordset.Fields(i) Next i

End Sub

Public Sub ModeView(modeData As Boolean, controlsName As Variant, Optional fromData As Integer = 0, Optional todata As Integer = 0)

'View data Dim i As Integer

For i = controlsName.LBound + fromData To controlsName.UBound - todata controlsName(i).Enabled = modeData

Next i End Sub

Public Function searchId(toFind As String, dataName As Data) As Boolean 'Searching ID

searchId = False

With dataName.Recordset .MoveFirst

Do Until .EOF

If (.Fields(0) = toFind) Then searchId = True

Exit Function Else

.MoveNext End If

Loop End With End Function


(27)

Lampiran Listing Prgram B-17

Class CuteCat

Option Explicit

Private CatScratching As Boolean, CatData As String

Private BCData As String, BCType As String, BCValid As Boolean, PrevPtr As Integer

Public Event ScanStarted()

Public Event BarcodeScanned(BCData As String, BCType As String, BCValid As Boolean)

'Base64 decode constants

Private m_bytReverseIndex(0 To 255) As Byte Private Const k_bytEqualSign As Byte = 61

Private Const k_bytMask1 As Byte = 3 '00000011 Private Const k_bytMask2 As Byte = 15 '00001111 Private Const k_bytMask3 As Byte = 63 '00111111 Private Const k_bytMask4 As Byte = 192 '11000000 Private Const k_bytMask5 As Byte = 240 '11110000 Private Const k_bytMask6 As Byte = 252 '11111100 Private Const k_bytShift2 As Byte = 4

Private Const k_bytShift4 As Byte = 16 Private Const k_bytShift6 As Byte = 64

Private Const k_lMaxBytesPerLine As Long = 152

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long) Public Property Get BarcodeData() As String

BarcodeData = BCData End Property

Public Property Get BarcodeType() As String BarcodeType = BCType

End Property

Public Property Get BarcodeValid() As String BarcodeValid = BCValid

End Property

Private Sub Class_Initialize() Dim i As Integer

For i = Asc("a") To Asc("z") 'lowercase letters m_bytReverseIndex(i) = (i - Asc("a")) Next i

For i = Asc("A") To Asc("Z") 'uppercase letters m_bytReverseIndex(i) = 26 + (i - Asc("A")) Next i

For i = Asc("0") To Asc("9") '0-9


(28)

Lampiran Listing Prgram B-18 Next i

m_bytReverseIndex(43) = 62 'Asc("+") m_bytReverseIndex(47) = 63 'Asc("/") End Sub

Private Function Decode(sInput As String) As String If sInput = "" Then Exit Function

Decode = StrConv(DecodeArr(sInput), vbUnicode) End Function

Private Function DecodeArr(sInput As String) As Byte() 'returns a SBCS byte array

Dim bytInput() As Byte 'base64 encoded string to work with Dim bytWorkspace() As Byte 'byte array to use as workspace Dim bytResult() As Byte 'array that result will be copied to Dim lInputCounter As Long 'iteration counter for input array

Dim lWorkspaceCounter As Long 'iteration counter for workspace array 'get rid of CrLfs, and "="s since they're not required for decoding,

'and place the input in the byte array If sInput = "" Then Exit Function

bytInput = Replace(Replace(sInput, vbCrLf, ""), "=", "") 'size the workspace

ReDim bytWorkspace(LBound(bytInput) To (UBound(bytInput) * 2)) As Byte lWorkspaceCounter = LBound(bytWorkspace)

'pass bytes back through index to get original values

For lInputCounter = LBound(bytInput) To UBound(bytInput)

bytInput(lInputCounter) = m_bytReverseIndex(bytInput(lInputCounter)) Next lInputCounter

For lInputCounter = LBound(bytInput) To (UBound(bytInput) - ((UBound(bytInput) Mod 8) + 8)) Step 8

'left shift first input byte by 2 and right shift second input byte by 4 bytWorkspace(lWorkspaceCounter) = (bytInput(lInputCounter) * k_bytShift2) + (bytInput(lInputCounter + 2) \ k_bytShift4)

'mask bits 5-8 of second byte, left shift it by 4

'right shift third byte by 2, add it to result of second byte

bytWorkspace(lWorkspaceCounter + 1) = ((bytInput(lInputCounter + 2) And k_bytMask2) * k_bytShift4) + _

(bytInput(lInputCounter + 4) \ k_bytShift2) 'mask bits 3-8 of third byte, left shift it by 6, add it to fourth byte

bytWorkspace(lWorkspaceCounter + 2) = ((bytInput(lInputCounter + 4) And k_bytMask1) * k_bytShift6) + _

bytInput(lInputCounter + 6) lWorkspaceCounter = lWorkspaceCounter + 3

Next lInputCounter

'decode any remaining bytes that are not part of a full 4 byte block Select Case (UBound(bytInput) Mod 8):


(29)

Lampiran Listing Prgram B-19 'left shift first input byte by 2 and right shift second input byte by 4

bytWorkspace(lWorkspaceCounter) = (bytInput(lInputCounter) * k_bytShift2) + (bytInput(lInputCounter + 2) \ k_bytShift4)

Case 5:

'left shift first input byte by 2 and right shift second input byte by 4 bytWorkspace(lWorkspaceCounter) = (bytInput(lInputCounter) * k_bytShift2) + (bytInput(lInputCounter + 2) \ k_bytShift4)

'mask bits 5-8 of second byte, left shift it by 4

'right shift third byte by 2, add it to result of second byte

bytWorkspace(lWorkspaceCounter + 1) = ((bytInput(lInputCounter + 2) And k_bytMask2) * k_bytShift4) + _

(bytInput(lInputCounter + 4) \ k_bytShift2) lWorkspaceCounter = lWorkspaceCounter + 1

Case 7:

'left shift first input byte by 2 and right shift second input byte by 4 bytWorkspace(lWorkspaceCounter) = (bytInput(lInputCounter) * k_bytShift2) + (bytInput(lInputCounter + 2) \ k_bytShift4)

'mask bits 5-8 of second byte, left shift it by 4

'right shift third byte by 2, add it to result of second byte

bytWorkspace(lWorkspaceCounter + 1) = ((bytInput(lInputCounter + 2) And k_bytMask2) * k_bytShift4) + _

(bytInput(lInputCounter + 4) \ k_bytShift2) 'mask bits 3-8 of third byte, left shift it by 6, add it to fourth byte

bytWorkspace(lWorkspaceCounter + 2) = ((bytInput(lInputCounter + 4) And k_bytMask1) * k_bytShift6) + _

bytInput(lInputCounter + 6) lWorkspaceCounter = lWorkspaceCounter + 2 End Select

'size the result array

ReDim bytResult(LBound(bytWorkspace) To lWorkspaceCounter) As Byte 'if option base is set to 1 then don't increment this value

If LBound(bytWorkspace) = 0 Then

lWorkspaceCounter = lWorkspaceCounter + 1 End If

'move decoded data to a properly sized array

CopyMemory VarPtr(bytResult(LBound(bytResult))),

VarPtr(bytWorkspace(LBound(bytWorkspace))), lWorkspaceCounter 'return

'CuteCat encryption hack

For lWorkspaceCounter = LBound(bytResult) To UBound(bytResult) bytResult(lWorkspaceCounter) = bytResult(lWorkspaceCounter) Xor 67 Next

DecodeArr = bytResult End Function

Public Sub KeyDown(KeyCode As Integer, Shift As Integer) Static PrevKey As Integer, PrevShift As Integer


(30)

Lampiran Listing Prgram B-20 'start processing barcode data from scanner if Alt-F10 is detected

If PrevKey = 18 And PrevShift = 4 And KeyCode = 121 And Shift = 4 Then CatData = ""

CatScratching = True

PrevPtr = Screen.MousePointer RaiseEvent ScanStarted

Screen.MousePointer = vbHourglass End If

PrevKey = KeyCode PrevShift = Shift End Sub

Public Sub KeyPress(KeyAscii As Integer) Dim X As Long, Y As Long, Z As Long If CatScratching Then

If KeyAscii = 13 Then CatScratching = False

If CatData = "" Then GoTo quit

'Parse out barcode data from scanner input X = InStr(2, CatData, ".") + 1

If X = 1 Then GoTo quit Y = InStr(X, CatData, ".") + 1 If Y = 1 Then GoTo quit Z = InStr(Y, CatData, ".") If Z = 0 Then GoTo quit

BCType = Decode(Mid$(CatData, X, (Y - X))) BCData = Decode(Mid$(CatData, Y, (Z - Y))) BCValid = True

RaiseEvent BarcodeScanned(BCData, BCType, BCValid) quit:

Screen.MousePointer = PrevPtr Else

If (Len(CatData) = 0) And (KeyAscii <> 46) Then

'Invalid barcode data; should always start with a period CatScratching = False

BCValid = False

RaiseEvent BarcodeScanned("", "", BCValid) Screen.MousePointer = PrevPtr

Else

CatData = CatData & Chr$(KeyAscii) End If

End If

KeyAscii = 0 End If


(31)

Bab I Pendahuluan 1

BAB I

PENDAHULUAN

1.1Latar Belakang

Teknologi sekarang ini berkembang sangat cepat dengan tujuan untuk membuat pekerjaan manusia menjadi lebih cepat, lebih mudah, dan praktis. Dengan berkembangnya teknologi ini, manusia mengharapkan pekerjaannya dapat dilakukan dengan lebih mudah. Banyak program aplikasi komputer yang dibuat oleh manusia untuk mencapai tujuan tersebut. Salah satunya adalah untuk menangani undangan terbatas. Dengan adanya perkembangan teknologi, pemeriksaan para undangan yang terdaftar dapat dilakukan dengan cepat dan pasti serta hanya memerlukan sedikit sumber daya manusia. Hal ini akan sangat dirasakan bila terjadi pada pemeriksaan undangan yang berjumlah sangat banyak. Dengan menggunakan teknologi sekarang, undangan yang terdaftar dapat diperiksa dengan teliti, bila terdaftar maka akan dikatakan terdaftar dan bila tidak tedaftar maka akan dikatakan tidak terdaftar, berbeda bila menggunakan sumber daya manusia dimana pada saat pemerikasaan dapat terlewat sehingga undangan yang seharusnya terdaftar dikatakan tidak terdaftar. Hal tersebut dapat terjadi disebabkan oleh karena keteledoran ataupun karena terlalu sibuk mengurusi undangan yang sangat banyak sehingga ada beberapa undangan yang terabaikan atau lupa untuk dicatat dalam daftar kehadiran. Selain itu dengan aplikasi ini, laporan para undangan yang telah terdaftar dapat dibuat pada saat kapan saja dan dapat ditambahkan kapan saja. Laporan dapat dicetak kapan saja dengan menggunakan printer.


(32)

Bab I Pendahuluan 2

1.2Identifikasi Masalah

Bagaimana merealisasikan sebuah program yang mudah digunakan untuk mengolah data masukan yang berupa simbol-simbol barcode?

1.3Tujuan

Membuat program yang menggunakan simbol-simbol Barcode untuk pengamanan undangan terbatas.

1.4Pembatasan Masalah

1. Program dibuat dengan menggunakan program Microsoft Visual Basic 6.0 dan Microsoft Access 2000.

2. Menggunakan interface berupa Barcode reader.

1.5Sistematika Pembahasan

Laporan Tugas Akhir ini disusun dengan sistematika sebagai berikut :

¾ Bab I : Berisi tentang latar belakang, identifikasi masalah, tujuan, pembatasan masalah, dan sistematika pembahasan.

¾ Bab II : Berisi tentang pengenalan Visual Basic dan Access.

¾ Bab III : Berisi tentang flowchart dan cara kerja program.

¾ Bab IV : Berisi hasil-hasil pengujian dari program.


(33)

Bab V Kesimpulan dan Saran 46

BAB V

KESIMPULAN DAN SARAN

5.1Kesimpulan

ƒ Program untuk pengamanan undangan terbatas mengunakan barcode ini telah berfungsi dengan baik.

ƒ Pengundian hadiah berjalan dengan baik dan dapat mengundi dengan baik, yaitu mengundi secara acak, sehingga semua pengunjung mendapat kemungkinan untuk menang.

5.2Saran

ƒ Program dapat dikembangkan sehingga bisa berhubungan dengan komputer lain, sehingga input didapat bukan hanya dari satu komputer saja tetapi bisa dari lebih dari satu komputer.


(34)

Daftar Pustaka 47

DAFTAR PUSTAKA

1. Balena. Francesco, Programing Microsoft Visual Basic 6.0, Microsoft Corporation, Redmond, Washington, 1999.

2. Deitel, H. M., Visual Basic 6 : How To Program, Prentice Hall, New Jersey, 1999.

3. Holzner. Steven, Visual Basic 6 Black Book, The Coriolis Group, 1998. 4. Microsoft Press, Visual Basic 6.0 : Programmer’s Guide, Microsoft

Corporation, Redmond, Washington, 1998.

5. Thayer. Rob , Visual Basic 6 Unleash, SAMS Publishing, Indiana Polis, Indiana , 1999.

6. Winemiller. Eric, Visual Basic 6 Database How-To, SAMS Publishing, Indiana Polis, Indiana, 1997.


(1)

Lampiran Listing Prgram B-19 'left shift first input byte by 2 and right shift second input byte by 4

bytWorkspace(lWorkspaceCounter) = (bytInput(lInputCounter) * k_bytShift2) + (bytInput(lInputCounter + 2) \ k_bytShift4)

Case 5:

'left shift first input byte by 2 and right shift second input byte by 4 bytWorkspace(lWorkspaceCounter) = (bytInput(lInputCounter) * k_bytShift2) + (bytInput(lInputCounter + 2) \ k_bytShift4)

'mask bits 5-8 of second byte, left shift it by 4

'right shift third byte by 2, add it to result of second byte

bytWorkspace(lWorkspaceCounter + 1) = ((bytInput(lInputCounter + 2) And k_bytMask2) * k_bytShift4) + _

(bytInput(lInputCounter + 4) \ k_bytShift2) lWorkspaceCounter = lWorkspaceCounter + 1

Case 7:

'left shift first input byte by 2 and right shift second input byte by 4 bytWorkspace(lWorkspaceCounter) = (bytInput(lInputCounter) * k_bytShift2) + (bytInput(lInputCounter + 2) \ k_bytShift4)

'mask bits 5-8 of second byte, left shift it by 4

'right shift third byte by 2, add it to result of second byte

bytWorkspace(lWorkspaceCounter + 1) = ((bytInput(lInputCounter + 2) And k_bytMask2) * k_bytShift4) + _

(bytInput(lInputCounter + 4) \ k_bytShift2) 'mask bits 3-8 of third byte, left shift it by 6, add it to fourth byte

bytWorkspace(lWorkspaceCounter + 2) = ((bytInput(lInputCounter + 4) And k_bytMask1) * k_bytShift6) + _

bytInput(lInputCounter + 6) lWorkspaceCounter = lWorkspaceCounter + 2 End Select

'size the result array

ReDim bytResult(LBound(bytWorkspace) To lWorkspaceCounter) As Byte 'if option base is set to 1 then don't increment this value

If LBound(bytWorkspace) = 0 Then

lWorkspaceCounter = lWorkspaceCounter + 1 End If

'move decoded data to a properly sized array

CopyMemory VarPtr(bytResult(LBound(bytResult))),

VarPtr(bytWorkspace(LBound(bytWorkspace))), lWorkspaceCounter 'return

'CuteCat encryption hack

For lWorkspaceCounter = LBound(bytResult) To UBound(bytResult) bytResult(lWorkspaceCounter) = bytResult(lWorkspaceCounter) Xor 67 Next

DecodeArr = bytResult End Function


(2)

Lampiran Listing Prgram B-20 'start processing barcode data from scanner if Alt-F10 is detected

If PrevKey = 18 And PrevShift = 4 And KeyCode = 121 And Shift = 4 Then CatData = ""

CatScratching = True

PrevPtr = Screen.MousePointer RaiseEvent ScanStarted

Screen.MousePointer = vbHourglass End If

PrevKey = KeyCode PrevShift = Shift End Sub

Public Sub KeyPress(KeyAscii As Integer) Dim X As Long, Y As Long, Z As Long If CatScratching Then

If KeyAscii = 13 Then CatScratching = False

If CatData = "" Then GoTo quit

'Parse out barcode data from scanner input X = InStr(2, CatData, ".") + 1

If X = 1 Then GoTo quit Y = InStr(X, CatData, ".") + 1 If Y = 1 Then GoTo quit Z = InStr(Y, CatData, ".") If Z = 0 Then GoTo quit

BCType = Decode(Mid$(CatData, X, (Y - X))) BCData = Decode(Mid$(CatData, Y, (Z - Y))) BCValid = True

RaiseEvent BarcodeScanned(BCData, BCType, BCValid) quit:

Screen.MousePointer = PrevPtr Else

If (Len(CatData) = 0) And (KeyAscii <> 46) Then

'Invalid barcode data; should always start with a period CatScratching = False

BCValid = False

RaiseEvent BarcodeScanned("", "", BCValid) Screen.MousePointer = PrevPtr

Else

CatData = CatData & Chr$(KeyAscii) End If

End If

KeyAscii = 0 End If


(3)

Bab I Pendahuluan 1

BAB I

PENDAHULUAN

1.1Latar Belakang

Teknologi sekarang ini berkembang sangat cepat dengan tujuan untuk membuat pekerjaan manusia menjadi lebih cepat, lebih mudah, dan praktis. Dengan berkembangnya teknologi ini, manusia mengharapkan pekerjaannya dapat dilakukan dengan lebih mudah. Banyak program aplikasi komputer yang dibuat oleh manusia untuk mencapai tujuan tersebut. Salah satunya adalah untuk menangani undangan terbatas. Dengan adanya perkembangan teknologi, pemeriksaan para undangan yang terdaftar dapat dilakukan dengan cepat dan pasti serta hanya memerlukan sedikit sumber daya manusia. Hal ini akan sangat dirasakan bila terjadi pada pemeriksaan undangan yang berjumlah sangat banyak. Dengan menggunakan teknologi sekarang, undangan yang terdaftar dapat diperiksa dengan teliti, bila terdaftar maka akan dikatakan terdaftar dan bila tidak tedaftar maka akan dikatakan tidak terdaftar, berbeda bila menggunakan sumber daya manusia dimana pada saat pemerikasaan dapat terlewat sehingga undangan yang seharusnya terdaftar dikatakan tidak terdaftar. Hal tersebut dapat terjadi disebabkan oleh karena keteledoran ataupun karena terlalu sibuk mengurusi undangan yang sangat banyak sehingga ada beberapa undangan yang terabaikan atau lupa untuk dicatat dalam daftar kehadiran. Selain itu dengan aplikasi ini, laporan para undangan yang telah terdaftar dapat dibuat pada saat kapan saja dan dapat ditambahkan


(4)

Bab I Pendahuluan 2 1.2Identifikasi Masalah

Bagaimana merealisasikan sebuah program yang mudah digunakan untuk mengolah data masukan yang berupa simbol-simbol barcode?

1.3Tujuan

Membuat program yang menggunakan simbol-simbol Barcode untuk pengamanan undangan terbatas.

1.4Pembatasan Masalah

1. Program dibuat dengan menggunakan program Microsoft Visual Basic 6.0 dan Microsoft Access 2000.

2. Menggunakan interface berupa Barcode reader.

1.5Sistematika Pembahasan

Laporan Tugas Akhir ini disusun dengan sistematika sebagai berikut : ¾ Bab I : Berisi tentang latar belakang, identifikasi masalah, tujuan,

pembatasan masalah, dan sistematika pembahasan. ¾ Bab II : Berisi tentang pengenalan Visual Basic dan Access. ¾ Bab III : Berisi tentang flowchart dan cara kerja program. ¾ Bab IV : Berisi hasil-hasil pengujian dari program. ¾ Bab V : Berisi tentang kesimpulan dan saran.


(5)

Bab V Kesimpulan dan Saran 46

BAB V

KESIMPULAN DAN SARAN

5.1Kesimpulan

ƒ Program untuk pengamanan undangan terbatas mengunakan barcode ini telah berfungsi dengan baik.

ƒ Pengundian hadiah berjalan dengan baik dan dapat mengundi dengan baik, yaitu mengundi secara acak, sehingga semua pengunjung mendapat kemungkinan untuk menang.

5.2Saran

ƒ Program dapat dikembangkan sehingga bisa berhubungan dengan komputer lain, sehingga input didapat bukan hanya dari satu komputer saja tetapi bisa dari lebih dari satu komputer.


(6)

Daftar Pustaka 47

DAFTAR PUSTAKA

1. Balena. Francesco, Programing Microsoft Visual Basic 6.0, Microsoft Corporation, Redmond, Washington, 1999.

2. Deitel, H. M., Visual Basic 6 : How To Program, Prentice Hall, New Jersey, 1999.

3. Holzner. Steven, Visual Basic 6 Black Book, The Coriolis Group, 1998. 4. Microsoft Press, Visual Basic 6.0 : Programmer’s Guide, Microsoft

Corporation, Redmond, Washington, 1998.

5. Thayer. Rob , Visual Basic 6 Unleash, SAMS Publishing, Indiana Polis, Indiana , 1999.

6. Winemiller. Eric, Visual Basic 6 Database How-To, SAMS Publishing, Indiana Polis, Indiana, 1997.