Saturday, March 18, 2017

program aplikasi seleksi penerimaan karyawan vb 6


Aplikasi Seleksi Karyawan VB 6.0

Dalam program seleksi penerimaan karyawan baru ini akan disajikan dua buah model, model pertama dengan bentuk relasi ONE TO ONE yang dapat dilihat bentuk form dan codingnya pada form Nilai dan model kedua dengan model relasi ONE TO MANY yang dapat dilihat bentuk form dan codingnya pada form Nilai1.

Normalisasi File

Setelah mencoba membuat beberapa program aplikasi, kami berasumsi bahwa tidak semua program harus dipola dengan bentuk relasi one to many. Pola relasi tersebut dipengaruhi oleh situasi dan kondisi juga dipengaruhi oleh kebutuhan sistem informasi yang dihasilkan oleh program itu sendiri. Contoh bentuk normalisasi  dengan pola one to many terlihat pada gambar di bawah ini.



Database Dan Tabel
Untuk mengetahui file database dan struktur masing-masing tabel berikut type data dan kunci primer maupun kunci tamunya silakan buka CD pendukung buku ini.



Catatan :
1.        Tabel Nilai digunakan untuk menyimpan data nilai dengan pola relasi one to one.
2.        Tabel Nilai1 dan DetailNilai1 digunakan untuk menyinpan data nilai dengan pola relasi one to many.
3.        Dalam kasus yang sebenarnya data pelamar harus didata selengkap mungkin, misalnya dengan menambahkan field No KTP, jenis kelamin, agama, pendidikan dan sebagainya. Tabel di atas hanya sebagai contoh saja.
4.        Tabel jadwal digunakan untuk memberitahukan kepada para pelamar jadwal testing yang harus diikuti setelah lamaran diseleksi

Membuat Module

Aktifkan VB dan buatlah Module dengan coding sebagai berikut kemudian simpan Module tersebut.

Public Conn As New ADODB.Connection
Public RSPelamar As ADODB.Recordset
Public RSJadwal As ADODB.Recordset
Public RSNilai As ADODB.Recordset
Public RSNilai1 As ADODB.Recordset
Public RSDetail As ADODB.Recordset
Public RSHasil As ADODB.Recordset

Public Sub BukaDB()
Set Conn = New ADODB.Connection
Set RSPelamar = New ADODB.Recordset
Set RSJadwal = New ADODB.Recordset
Set RSNilai = New ADODB.Recordset
Set RSNilai1 = New ADODB.Recordset
Set RSDetail = New ADODB.Recordset
Set RSHasil = New ADODB.Recordset
Conn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\ADOSeleksi.mdb"
End Sub





Entri Jadwal Testing

Dengan asumsi program pengolahan data pelamar telah dibuat, sekarang kita akan membuat program transfer jadwal testing. Dalam kasus ini, entri jadwal testing ditentukan sebagai berikut:
1.              Perserta testing dikelompokan dengan jumlah 5 orang per kelompok Anda dapat mengubah jumlah per kelompok sesuai banyaknya pelamar dan daya tampung tempat testing.
2.              Tiap kelompok berbeda tanggal testing dengan selisih waktu satu hari.
3.              Proses entri jadwal ujian tidak perlu dilakukan secara manual dengan cara menginput data satu persatu, dapat dibayangkan jika jumlah pelamar mencapai ribuan orang, maka pekerjaan entri jadwal ujian untuk masing-masing peserta menjadi sangat tidak efektif dan efisien.  Dalam kasus ini proses entri akan dilakukan cukup dengan membuat sebuah otomasi dengan sekali klik. Oleh karena  itu buatlah GUI seperti Gambar 7.3 berikut ini.



Listing Program :
Private Sub Form_Activate()
DT.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path & "\ADOSeleksi.mdb"
DT.RecordSource = "Jadwal"
DT.Refresh
End Sub

Private Sub Command1_Click()
Call BukaDB 'buka database
Dim Hapus As String 'defiisikan sebuah variabel
Hapus = "delete from jadwal" 'hapus isi data jadwal terlebih dahulu
Conn.Execute (Hapus) 'eksekusi penghapusan

RSPelamar.Open "Select * from pelamar", Conn 'buka tabelpelamar
RSPelamar.MoveFirst 'mulailah dari data pertama
Do While Not RSPelamar.EOF 'baca tabel pelamar sampai record terakhir
    Dim Tgl As Date 'definisikan tanggal
    DT.Refresh 'data jadwal direfresh
    If DT.Recordset.RecordCount < 4 Then 'jika jumlah data 5..
        Tgl = Date + 10 'tanggal test 10 hari kemudian
        Grup = 1 'grup 1
    ElseIf DT.Recordset.RecordCount >= 4 And DT.Recordset.RecordCount < 8 Then 'jika data 6-10
        Tgl = Date + 11 'tanggal test 11 hari kemudian
        Grup = 2 'grup 2
    ElseIf DT.Recordset.RecordCount >= 9 Then 'jika jumlah data 11 lebih
        Tgl = Date + 12 'tgl test 12 hari kemudian
        Grup = 3 'grup 3
    End If
    Tempat = "Aula" 'tempat test di Aula
    Test1 = "Ruang 1"
    Test2 = "Ruang 2"
    Test3 = "Ruang 3"
    Test4 = "Ruang 4"
    'simpan data pelamar ke tabel jadwal sesuai kriteria di atas
    Dim Simpan As String
    Simpan = "insert into jadwal(Nomorlmr,Tanggal,Tempat,Grup,Test1,Test2,Test3,Test4) " & Chr(13) & _
    "values ('" & RSPelamar!NomorLmr & "','" & Tgl & "','" & Tempat & "','" & Grup & "','" & Test1 & "','" & Test2 & "','" & Test3 & "','" & Test4 & "')"
    Conn.Execute (Simpan)
    RSPelamar.MoveNext
Loop
Conn.Close
MsgBox "Transfer Jadwal Sukses" 'tampilkan pesan sukses
Menu.mnjadwal.Visible = False 'menu transfer disembunyikan
Unload Me 'form langsung ditutup
End Sub

Jika program di atas dijalankan akan menghasilkan data sebagai berikut:



Transfer Data Pelamar
Program ini digunakan untuk menyalin data pelamar (nomor lamaran dan nama pelamar) ke tabel nilai. Hal ini dilakukan mengingat jumlah pelamar yang sangat banyak tidak mungkin dientri satu persatu secara manual. Buatlah GUI di VB seperti Gambar 7.5 di bawah ini.



Listing Program :
Private Sub Command1_Click()
Call BukaDB 'buka database
Dim HapusNilai As String 'definisikan variabel string
HapusNilai = "delete * from Nilai" 'hapus dulu isi tabel nilai
Conn.Execute (HapusNilai) 'eksekusi penghapusan

RSPelamar.Open "Select * from pelamar", Conn 'buka tabel pelamar
RSPelamar.Requery
RSPelamar.MoveFirst 'mulailah dari reord pertama
Do While Not RSPelamar.EOF 'baca tabel pelamar hingga record terakhir
    Dim Transfer As String
    'simpan nomor lamaran dan nama pelamar ke tabel nilai
    Transfer = "insert into Nilai(Nomorlmr,Nama) " & Chr(13) & _
    "values ('" & RSPelamar!NomorLmr & "','" & RSPelamar!Nama & "')"
    Conn.Execute (Transfer)
    RSPelamar.MoveNext
Loop
MsgBox "Transfer Data Pelamar Sukses" 'tampilkan pesan sukses
Menu.mntransfer.Visible = False 'menu transfer data disembunyikan
Unload Me 'form langsung ditutup
End Sub


Jika program di atas dijalankan akan menghasilkan data sebagai berikut:



Entri Nilai Testing (Model Pertama)

Data nilai dientri langsung dalam DataGrid, di mana nomor lamaran dan nama pelamar telah ditransfer oleh program sebelumnya. Buatlah GUI dengan bentuk seperti Gambar 7.7 berikut ini.



Listing Program :
Private Sub Form_Activate()
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path & "\ADOSeleksi.mdb"
Adodc1.RecordSource = "Nilai"
Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1
DataGrid1.Refresh
End Sub

Private Sub Command1_Click() 'jika command1 diklik
Pesan = MsgBox("yakin akan dihapus..?", vbYesNo, "konfirmasi") 'tampilkan pesan..
If Pesan = vbYes Then 'jika dijawab YES
    Adodc1.Recordset.MoveFirst 'mulailah dari record pertama
    Do Until Adodc1.Recordset.EOF 'baca tabel sampai record terakhir
        For i = 1 To Adodc1.Recordset.RecordCount 'lakukan berulang-ulang sebanyak data nilai
            Adodc1.Recordset!Nilai1 = 0 'nilai1 kosongkan (dan seterusnya)
            Adodc1.Recordset!Nilai2 = 0
            Adodc1.Recordset!Nilai3 = 0
            Adodc1.Recordset!Nilai4 = 0
            Adodc1.Recordset!Total = 0
            Adodc1.Recordset!Skor = 0
            Adodc1.Recordset!Ket = vbNullString
        Next i
        Adodc1.Recordset.MoveNext
    Loop
End If
End Sub

Private Sub Command2_Click() 'jika command2 diklik
Call BukaDB 'buka database
Dim HapusHasil As String
HapusHasil = "delete * from  Hasil" 'hapus dulu isi tabel nilai
Conn.Execute (HapusHasil) 'eksekusi penghapusan
Adodc1.Recordset.MoveFirst 'mulailah dari baris awal
Do Until Adodc1.Recordset.EOF 'lakukan sampai baris akhir
    If Adodc1.Recordset!Ket = "LULUS" Then 'jika keteragannya LULUS
        Dim SimpanHasil As String
        'simpan data yang lulus tersebut
        SimpanHasil = "insert into hasil(Nomorlmr,nama,Nilai1,Nilai2,Nilai3,Nilai4,Total,Skor,ket) values " & Chr(13) & _
        "('" & Adodc1.Recordset!NomorLmr & "','" & Adodc1.Recordset!Nama & "', " & Chr(13) & _
        "'" & Adodc1.Recordset!Nilai1 & "','" & Adodc1.Recordset!Nilai2 & "', " & Chr(13) & _
        "'" & Adodc1.Recordset!Nilai3 & "','" & Adodc1.Recordset!Nilai4 & "', " & Chr(13) & _
        "'" & Adodc1.Recordset!Total & "','" & Adodc1.Recordset!Skor & "','" & Adodc1.Recordset!Ket & "')"
        Conn.Execute (SimpanHasil) 'eksekusi penyimpanan
    End If
    Adodc1.Recordset.MoveNext
Loop
MsgBox "Data Yang Lulus Berhasil Disimpan" 'tampilkan pesan
End Sub

Private Sub DataGrid1_AfterColUpdate(ByVal ColIndex As Integer) 'setelah kolom diedit (diisi data)
On Error GoTo salah
If DataGrid1.Col = 2 Then 'jika saat itu kursor berada di kolom 3 (nilai1)
    Nilai 'jalankan prosedur pencari nilai
    Adodc1.Recordset.MoveNext 'kursor pindah ke baris berikutnya
    DataGrid1.Col = 2 'kursor pindah ke kolom 3 (nilai1)
ElseIf DataGrid1.Col = 3 Then
    Nilai
    Adodc1.Recordset.MoveNext
    DataGrid1.Col = 3
ElseIf DataGrid1.Col = 4 Then
    Nilai
    Adodc1.Recordset.MoveNext
    DataGrid1.Col = 4
ElseIf DataGrid1.Col = 5 Then
    Nilai
    Adodc1.Recordset.MoveNext
    DataGrid1.Col = 5
End If
On Error GoTo 0
Exit Sub
salah:
MsgBox "Cek isi data, harus angka"
End Sub

Private Sub Form_Load()
DataGrid1.Col = 2
End Sub

'prosedur mencari nilai
Sub Nilai()
    'Total=(Nilai1+Nilai2+Nilai3+Nilai4)
    DataGrid1.Columns(6) = Val(Adodc1.Recordset!Nilai1) + Val(Adodc1.Recordset!Nilai2) + Val(Adodc1.Recordset!Nilai3) + Val(Adodc1.Recordset!Nilai4)
    'Skor=Total/4
    Adodc1.Recordset!Skor = DataGrid1.Columns(6) / 4
    'Ket=Jika skor >=80 maka LULUS
    If Val(Adodc1.Recordset!Skor) >= 80 Then Adodc1.Recordset!Ket = "LULUS" Else Adodc1.Recordset!Ket = "GAGAL"
End Sub

Data di tabel nilai seperti Gambar 7.9 sifatnya dinamis, artinya setiap kali terjadi perubahan maka data tersebut secara otomatis akan disimpan. Ketika command “Simpan Pelamar Yang Lulus” di klik akan menghasilkan data sebagai berikut:

Entri Nilai Testing (Model Kedua)
Pada model kedua ini pola relasi berbentuk one to many dimana data disimpan pada tabel Nilai1 dan DetailNilai1. buatlah form seperti gambar berikut ini.



Coding:
'mencari nomor otomatis
Private Sub Auto()
Call BukaDB
'baca tabelNilai1 yang IDnya paling akhir
RSNilai1.Open "select * from Nilai1 Where ID In(Select Max(ID)From Nilai1)Order By ID Desc", Conn
RSNilai1.Requery
    Dim Urutan As String * 10
    Dim Hitung As Long
    With RSNilai1
        'jika tidak ditemukan maka...
        If .EOF Then
            Urutan = Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2) + "0001"
            'no IDnya adalah YYMMDD0001
            LblID = Urutan
        Else
            'jika ganti hari maka... nomor IDnya
            If Left(!ID, 6) <> Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2) Then
                'YYMMDD0001
                Urutan = Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2) + "0001"
            Else
                'jika harinya sama maka... YYMMDD0001+1
                Hitung = (!ID) + 1
                Urutan = (Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2)) + Right("0000" & Hitung, 4)
            End If
        End If
        ID = Urutan
    End With
End Sub

Private Sub Form_Activate()
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path & "\ADOBeli.mdb"
Adodc1.RecordSource = "Transaksi"
Set DataGrid1.DataSource = Adodc1
DataGrid1.Refresh

Call BukaDB
RSPelamar.Open "Pelamar", Conn
Combo1.Clear
Do Until RSPelamar.EOF
    Combo1.AddItem RSPelamar!NomorLmr
    RSPelamar.MoveNext
Loop
Call Tabel_Kosong
Adodc1.Recordset.MoveFirst
Call Auto
End Sub

Private Sub Combo1_Keypress(Keyascii As Integer)
On Error Resume Next
Keyascii = Asc(UCase(Chr(Keyascii)))
If Keyascii = 13 Then
    If Combo1 = "" Then
        MsgBox "pilih kode Pelamar...!"
        Combo1.SetFocus
        Exit Sub
    Else
        Call BukaDB
        RSPelamar.Open "Select * from Pelamar where NomorLmr='" & Combo1 & "'", Conn
        If Not RSPelamar.EOF Then
            RSDetail.Open "Select distinct nomorlmr from DetailNilai1 where nomorlmr='" & Combo1 & "'", Conn
            If Not RSDetail.EOF Then
                MsgBox "Data nilai sudah dientri"
                Combo1.SetFocus
                Exit Sub
            Else
                Nama = RSPelamar!Nama
                DataGrid1.SetFocus
                DataGrid1.Col = 2
            End If
        Else
            MsgBox "nomor pelamar tidak terdaftar"
            Combo1.SetFocus
            Exit Sub
        End If
    End If
End If
If Keyascii = 27 Then Unload Me
End Sub

Private Sub Combo1_Click()
    Call BukaDB
    RSPelamar.Open "Select * from Pelamar where NomorLmr='" & Combo1 & "'", Conn
    If Not RSPelamar.EOF Then
        Nama = RSPelamar!Nama
    End If
    Conn.Close
End Sub

Function Tabel_Kosong()
    Adodc1.Recordset.MoveFirst
    Do While Not Adodc1.Recordset.EOF
        Adodc1.Recordset.Delete
        Adodc1.Recordset.MoveNext
    Loop
    For i = 1 To 1
        Adodc1.Recordset.AddNew
        Adodc1.Recordset!Nomor = i
        Adodc1.Recordset!Test = "Nilai" + Str(i)
        Adodc1.Recordset.Update
    Next i
    DataGrid1.Col = 1
End Function

Function Tambah_Baris()
    For i = Adodc1.Recordset.RecordCount To Adodc1.Recordset.RecordCount
        Adodc1.Recordset.AddNew
        Adodc1.Recordset!Nomor = i + 1
        Adodc1.Recordset!Test = "Nilai " + Adodc1.Recordset!Nomor
        Adodc1.Recordset.Update
    Next i
End Function

Private Sub DataGrid1_Keypress(Keyascii As Integer)
If DataGrid1.Col = 2 Then
    If Not (Keyascii >= Asc("0") And Keyascii <= Asc("9") Or Keyascii = vbKeyBack Or Keyascii = vbKeyReturn) Then Keyascii = 0
End If
End Sub

Private Sub DataGrid1_AfterColEdit(ByVal ColIndex As Integer)
    On Error Resume Next
    If DataGrid1.Col = 2 Then
        Adodc1.Recordset!Nilai = DataGrid1.SelText
        Adodc1.Recordset.Update
        DataGrid1.Refresh
        Call Tambah_Baris
        Adodc1.Recordset.MoveNext
        DataGrid1.Col = 2
        Adodc1.Recordset.MoveLast
        Total = Format(TotalNilai, "#,###,###")
        Skore = Total / 4
        If Skore >= 80 Then
            Ket = "Lulus"
        Else
            Ket = "Gagal"
        End If
        If Adodc1.Recordset.RecordCount = 6 Then
            DataGrid1.Enabled = False
            Cmdsimpan.SetFocus
        End If
    End If
End Sub

Private Sub Bersihkan()
    Total = ""
    Skore = ""
    Ket = ""
    Nama = ""
End Sub

Private Sub CmdSimpan_Click()
If Combo1 = "" Or Total = "" Or Skore = "" Or Ket = "" Then
    MsgBox "Data belum lengkap"
    Exit Sub
Else
    If Total = "" Then
        MsgBox "tidak ada entri nilai"
        Exit Sub
    End If
End If
    Call BukaDB 
    'simpan transaksi ke tbl Nilai1
    Dim SimpanNilai1 As String
    SimpanNilai1 = "Insert Into Nilai1(id,Total,Skor,Ket)" & _
    "values('" & ID & "','" & Total & "','" & Skore & "','" & Ket & "')"
    Conn.Execute (SimpanNilai1)
   
    'simpan data transaksi ke tabel DetailNilai1
    Adodc1.Recordset.MoveFirst
    Do While Not Adodc1.Recordset.EOF
        If Adodc1.Recordset!Nilai <> vbNullString Then
            Dim SQLDetail As String
            SQLDetail = "Insert Into DetailNilai1(id,Nomorlmr,Test,Nilai) " & _
            "values ('" & ID & "','" & Combo1 & "','" & Adodc1.Recordset!Test & "','" & Adodc1.Recordset!Nilai & "')"
            Conn.Execute (SQLDetail)
        End If
    Adodc1.Recordset.MoveNext
    Loop
    Bersihkan
    Form_Activate
    Combo1.SetFocus
End Sub

Private Sub CmdBatal_Click()
Call Bersihkan
Combo1.SetFocus
Form_Activate
End Sub

Function TotalNilai()
    Set TTLNilai = New ADODB.Recordset
    TTLNilai.Open "select sum(Nilai) as JumTotal from Transaksi", Conn
    TTLNilai.Requery
    TotalNilai = TTLNilai!JumTotal
End Function

Private Sub Cmdtutup_Click()
Bersihkan
Call Tabel_Kosong
Unload Me
End Sub
Membuat Laporan
Laporan Jadwal Ujian
1.              Buatlah laporan jadwal ujian dengan rancangan seperti Gambar 7.12 berikut ini kemudian simpan dengan nama Lap Data Jadwal.


Cara menyisipkan pengelompokkan tanggal adalah dengan melakukan klik kanan pada salah satu field di area detail kemudian pilih insert sumary. Pilihlah pengelompokkan berdasarkan tanggal, lalu klik OK.

2.              Buatlah sebuah menu di menu utama untuk memanggil laporan data jadwal, kemudian tulis coding berikut ini dan jangan lupa menambahkan objek Crystal Report (Ubah namanya menjadi CR1) di form menu.
Private Sub mnlapjadwal_Click()
'memanggil file laporan
CR1.ReportFileName = App.Path & "\Lap Jadwal.rpt"
'tampilkan satu layar penuh
CR1.WindowState = crptMaximized
'jika ada perubahan data direfresh
CR1.RetrieveDataFiles
'tampilkan le layar
CR1.Action = 0
End Sub

3.              Jika program dijalankan akan menghasilkan laporan sebagai berikut.


Laporan di atas hanya diambil sebagian saja, dalam kondisi sebenarnya akan terlihat laporan lain di bawahnya yaitu tanggal 24/09/07, Grup 2, dimulai dari nomor lamaran 0006 sampai 0010.
Laporan Nilai Ujian
Buatlah form dengan bentuk sebagai berikut dengan mengubah nama objek Crystal Report menjadi CR.



Coding:

Private Sub Command1_Click()
'panggil file laporan
CR.ReportFileName = App.Path & "\Lap Nilai.rpt"
'jika ada perubahan data direfresh
CR.WindowState = crptMaximized
'tampilkan satu layar penuh
CR.RetrieveDataFiles
'tampilkan ke layar
CR.Action = 0
End Sub

Private Sub Command2_Click()
CR.ReportFileName = App.Path & "\Lap Cadangan.rpt"
CR.WindowState = crptMaximized
CR.RetrieveDataFiles
CR.Action = 0
End Sub




Private Sub Form_Load()
List1.AddItem "LULUS"
List1.AddItem "GAGAL"
End Sub

Private Sub List1_Click()
'panggil laporan nilai yang keterangannya = list1
CR.SelectionFormula = "{Nilai.Ket}='" & List1 & "'"
CR.ReportFileName = App.Path & "\Lap Nilai.rpt"
CR.WindowState = crptMaximized
CR.RetrieveDataFiles
CR.Action = 0
End Sub



1.              Selain itu rancanglah laporan data hasil (pelamar yang dinyatakan lulus). Di sini Anda tidak perlu membuat rancangan laporan dari awal, cukup dengan menyimpan file Lap Data Nilai melalui menu Save As, kemudian ganti nama filenya setelah itu ganti judul laporan. Untuk menyaring data pelamar yang lulus saja klik kanan field KET di baris detail kemudian pilih Select Record Expert. Dalam menu klik combobox kemudian pilih Equal To dan klik juga combobox di sebelah kanannya lalu pilih LULUS lalu klik OK



2.              Anda juga dapat membuat laporan data pelamar yang gagal untuk mengantisipasi pelamar yang dinyatakan lulus tetapi mengundurkan diri. Dengan laporan data pelamar yang gagal kita dapat mempertimbangkan pelamar dengan nilai tertinggi. Cara membuat rancangannya cukup dengan membuka file laporan nilai, simpan dengan Save As, ubah judul laporan, saring data berdasarkan yang gagal dan urutkan berdasarkan skor secara descending. Caranya adalah klik field Skor di baris detail, Klik menu report > Sort Records > klik Nilai.Skor > Add > Descending.


Perhatikanlah nomor pelamar, terlihat tidak terurut. Tetapi kita lihat skor telah diurutkan dengan nilai tertinggi. Laporan seperti ini dapat membantu mempermudah mencari data yang diperlukan dengan cara mengurutkan data skor dengan nilai terbesar.





EmoticonEmoticon