Emely.Net Banner Exchange
Emely.Net Banner Exchange

Home, Forum diskusi, Chatting, Download


Latihan 3

Judul : Tantangan penyempurnaan Program Peserta Indoprog-vb

1. Buka kembali program Latihan1 diatas, jalankan program diatas, dan carilah kelemahan-kelemahan yang ada, serta lengkapi program diatas untuk menutupi lubang kelemahan tersebut.

Salah satu kelemahan dari program adalah tidak memeriksa kebenaran pengetikkan tanggal pada txtTglLahir, sehingga perlu di buat Event Validate.

Private Sub txtTglLahir_Validate(Cancel As Boolean)
If Not IsDate(txtTglLahir.Text) Then
   MsgBox "Anda perlu memasukkan tanggal lahir"
   Cancel = True
End If
End Sub

2. Lengkapi program Latihan2 dengan kemampuan memeriksa apakah data yang dimasukkan telah ada pada random file atau tidak, adapun kunci yang digunakan adalah alamat Email pada saat penyimpanan.

Solusi :

Untuk memeriksa apakah alamat Email data yang akan ditambahkan telah pernah terdaftar atau tidak, kita perlu membuat suatu fungsi pencarian berdasarkan alamat Email.

Adapun proses yang dilakukan oleh fungsi ini adalah mencari mulai dari record 1 s/d JlhRec (posisicari), dan akan mengembalikan nomor record dimana data berhasil ditemukan ( 1 s/d JlhRec). Jika pencarian tidak ditemukan, maka akan dikembalikan (JlhRec+1).

Private Function PeriksaUnique(Email As String) As Integer
Static nama As String
Dim posisicari As Integer
posisicari = 1                             'Mulai dari record 1
Do While posisicari <= JlhRec              'Sampai jlhRec
   Get #1, posisicari, DatPeserta          'Baca record
   If RTrim(DatPeserta.Email) = Email Then 'Bandingkan alamat Email
      Exit Do                              'Kalau ketemu keluar dari looping
   End If
   posisicari = posisicari + 1             'Naikan posisicari
Loop
PeriksaUnique = posisicari                 'Kembalikan posisi
End Function                               'Jika JlhRec+1 adalah tidak ketemu

Kemudian lakukan modifikasi pada bagian Update, dimana sebelum melakukan penyimpanan, perlu di periksa apakah alamat email yang sama telah ada dengan memanggil fungsi yang telah dibuat sebelumnya. Sesuatu hal yang perlu diperhatikan adalah, jika Aksi adalah flAdd maka alamat email tidak boleh ditemukan, tetapi jika flEdit, maka kalau alamat email ditemukan tidak boleh sama dengan posisi record yang sedang diperbaiki.

Private Sub cmdUpdate_Click()
Dim nPeriksaUnique
If Aksi = flAdd Or Aksi = flEdit Then
   If Trim$(txtEmail.Text) = "" Then
      MsgBox "Alamat Email tidak bisa kosong"
      txtEmail.SetFocus
      Exit Sub
   End If
   If Trim$(txtNama.Text) = "" Then
      MsgBox "Nama tidak bisa kosong"
      txtNama.SetFocus
      Exit Sub
   End If
   'Bagian ini ditambahkan
   nPeriksaUnique = PeriksaUnique(txtEmail.Text)     'Periksa keberadaan email
   If nPeriksaUnique <= JlhRec Then                  'Jika posisi <= JlhRec (Ketemu)
      If Aksi = flAdd Then                           'Kalau Aksi adalah flAdd
         MsgBox "Alamat Email address telah ada"     'Buat pesan telah ada
         txtEmail.SetFocus                           'Kembalikan fokus ke Email
         Exit Sub
      Else                                           'Jika flEdit
         If nPeriksaUnique <> Posisi Then            'Jika bukan nomor record yang sedang diPerbaiki
            MsgBox "Alamat Email address telah ada"
            txtEmail.SetFocus                        'Kembalikan fokus ke Email
            Exit Sub
         End If
      End If
   End If
   If Aksi = flAdd Then
      JlhRec = JlhRec + 1
      Posisi = JlhRec
   End If
   DatPeserta.Email = txtEmail.Text
   DatPeserta.nama = txtNama.Text
   DatPeserta.Alamat = txtAlamat.Text
   DatPeserta.Kota = txtKota.Text
   DatPeserta.Negara = cboNegara.Text
   DatPeserta.Propinsi = cboPropinsi.Text
   DatPeserta.Tempat = txtTempat.Text
   DatPeserta.TglLahir = txtTglLahir.Text
   DatPeserta.Pria = chkPria.Value
   Put #1, Posisi, DatPeserta
   Call Kunci
End If
End Sub

3. Lengkapi program Latihan2 dengan kemampuan Find Next, dimana mencari data memenuhi syarat yang berikutnya.

Solusi :

Untuk membuat fasilitas FindNext, kita perlu membuat suatu Sub Cari, dimana memiliki satu argumen yang menunjukkan apakah pencarian tersebut merupakan Find pertama kali atau merupakan Find Berikutnya. Adapun proses yang dilakukan adalah jika merupakan Find pertama kali, maka Sub akan menampilkan inputbox yang menanyakan "Nama yang akan dicari", dan melakukan pencarian mulai dari posisi record nomor 1, tetapi jika merupakan Find berikutnya, maka pencarian akan dilanjutkan dari posisi sebelumnya.

Dalam hal ini kita membutuhkan variabel Static untuk menyimpan PosisiCari dan Nama pencarian sehingga data PosisiCari dan Nama akan dipertahankan untuk pemanggilan berikutnya.

Private Sub Cari(Pertama As Boolean)
Static nama As String           'Nama Static agar bisa dipertahankan isinya
Static posisicari As Integer    'PosisiCari Static
If Pertama Then                 'Jika Find Pertama kali
   nama = InputBox("Masukkan nama :", "Pencarian")  'Tanya nama yang dicari
   posisicari = 1               'Mulai dari record 1
Else                            'Find Berikutnya
   posisicari = posisicari + 1  'Mulai dari posisi sebelumnya + 1
End If
If nama <> "" Then
   Do While posisicari <= JlhRec
      Get #1, posisicari, DatPeserta
      If RTrim(DatPeserta.nama) = nama Then
         Exit Do
      End If
      posisicari = posisicari + 1
   Loop
   If posisicari <= JlhRec Then
      Posisi = posisicari
      Call Tampil
   Else
      MsgBox "Peserta dengan nama tersebut tidak ada", vbOKOnly + vbInformation, "Pencarian"
   End If
End If
End Sub

Lakukan modifikasi pada cmdFind

Private Sub cmdFind_Click()
Cari (True)                       'Find pertama kali (True)
End Sub

Lakukan modifikasi pada cmdFindNext

Private Sub cmdFindNext_Click()
Cari (False)                      'Find berikutnya (False)
End Sub

4. Buatlah semua form-form diatas ditampilkan ditengah layar pada saat di jalankan.

Solusi :

Buatlah sub Tengah dengan parameter adalah suatu form

Private Sub Tengah(x)
Move (Screen.Width - x.Width) \ 2, (Screen.Height - x.Height) \ 2
End Sub

Tambahkan perintah Call Tengah(Me) pada Event Form Load.

Private Sub Form_Load()
'Subrutin ini akan dijalankan ketika form di load
'ke memory
'Isi cboNegara dengan file Negara.txt
Dim Item As String
Open "Negara.txt" For Input As #1
Do While Not EOF(1)
   Input #1, Item
   cboNegara.AddItem (Item)
Loop
Close #1
'Isi cboPropinsi dengan file Propinsi.txt

Open "Propinsi.txt" For Input As #1
Do While Not EOF(1)
   Input #1, Item
   cboPropinsi.AddItem (Item)
Loop
Close #1

'Buka Random file Peserta.Dat
Open "Peserta.Dat" For Random As #1 Len = Len(DatPeserta)
JlhRec = LOF(1) / Len(DatPeserta)
If JlhRec > 0 Then
   Posisi = 1
Else
   Posisi = 0
End If
Call Tengah(Me)
Call Tampil
End Sub

Dibuat  oleh hendra@indoprog.com
Medan - Sumatera Utara
Indonesia