Contoh Membuat Program Penjualan Visual Basic 6.0 : Membuat Form Transaksi
Selamat datang kembali di tutorial belajar VB. Pada kali ini kita
akan belajar yang lebih sulit lagi yaitu membuat form transaksi yang
merupakan inti dari program ini dibuat. Kalau yang namanya penjualan
sudah pasti ada transaksi yang terjadi disitu. Pada tutorial yang ke 1
dulu kita sudah membuat sebanyak 7 Table dan yang akan kita bahas
disini adalah semua table tersebut yang dijadikan satu di dalam form
transaksi ini
Membuat FORM TRANSAKSI
- Buat form baru lagi lalu isikan dengan isi dan properties dibawah ini :
NAME
|
CAPTION/TEXT
|
KETERANGAN
|
TAMBAHAN
|
|
Label1 | No Faktur | Label | ||
Label2 | Kode Pelanggan | Label | ||
Label3 | Nama Pelanggan | Label | ||
Label4 | Nomor Hp/Telpon | Label | ||
Label5 | Alamat | Label | ||
Label6 | ID User | Label | ||
Label7 | Kode Buku | Label | ||
Label8 | Nama Buku | Label | ||
Label9 | Stok Buku | Label | ||
Label10 | Harga Buku | Label | ||
Label11 | Biaya Pengiriman | Label | ||
Label12 | Jumlah beli | Label | ||
Label13 | Total Harga | Label | ||
Label14 | Total Bayar | Label | ||
Label15 | Uang bayar | Label | ||
Label16 | Uang Kembali | Label | ||
Label17 | Masukan Kode Buku | Label | ||
Label18 | Masukan Kode Pelanggan | Label | ||
txtnofak |
-
|
Textbox | ||
txtkdpel |
-
|
Textbox | ||
txtnmpel |
-
|
Textbox | ||
txttelpon |
-
|
Textbox | ||
txtalamat |
-
|
Textbox | ||
txtkasir |
-
|
Textbox | ||
txtkdbuku |
-
|
Textbox | ||
txtnmbuku |
-
|
Textbox | ||
txtstok |
-
|
Textbox | ||
txtharga |
-
|
Textbox | ||
txtkirim |
-
|
Textbox | ||
txtjumbel |
-
|
Textbox | ||
txttohar |
-
|
Textbox | ||
txttobay |
-
|
Textbox | ||
txtubar |
-
|
Textbox | ||
txtukem |
-
|
Textbox | ||
txtfindb |
-
|
Textbox | ||
txtfindp |
-
|
Textbox | ||
txtjam |
-
|
Textbox | ||
txttgl |
-
|
Textbox | ||
cmdfindp | Find Pelanggan | Command Button | ||
cmdfindb | Find Barang | Command Button | ||
Cmdadd | &add | Command Button | ||
Cmdclear | &clear | Command Button | ||
Cmdsave | &save | Command Button | ||
Cmdexit | &exit | Command Button | ||
Cmdlagi | lagi | Command Button | ||
Cmdselesai | selesai | Command Button | ||
Optdalam | Dalam kota | Command Button | ||
Optluar | Luar kota | Command Button | ||
Opttidak | Tidak dikirim | Command Button | ||
Timer1 |
-
|
Timer | Interval : 10 | |
Dbgrid1 |
-
|
Dbgrid | Data source: data6 | |
Dbgrid2 |
-
|
Dbgrid | Data source: data2 | |
Dbgrid3 |
-
|
Dbgrid | Data source: data1 | |
Data1 | Data | |||
Data2 | Data | |||
Data3 | Data | |||
Data4 | Data | |||
Data5 | Data | |||
Data6 | Data | |||
Data7 | Data | |||
FTransaksi | Transaksi | Form | ||
Frame1 | Biaya Pengiriman Buku | Frame | ||
Frame2 | Buku | Frame | Visible: False | |
Frame3 | Pelanggan | Frame | Visible: False | |
Frame4 |
-
|
Frame | ||
Frame5 |
-
|
Frame | ||
CR |
-
|
Crystal Report | Jika Punya CR |
Adapun Listing Program dari Form Transaksi Ini Adalah :
Private Sub Form_Activate()
Call nonaktif
Call kosong
TXTKASIR.Text = Menuutama.txtuser.Text
End Sub
Private Sub Form_Load()
Data1.DatabaseName = App.Path & "/buku.mdb"
Data1.RecordSource = "select * from Table_buku order by Kode_buku"
Data2.DatabaseName = App.Path & "/buku.mdb"
Data2.RecordSource = "select * from Table_pelanggan"
Data3.DatabaseName = App.Path & "/buku.mdb"
Data3.RecordSource = "select * from Table_transaksi"
Data4.DatabaseName = App.Path & "/buku.mdb"
Data4.RecordSource = "select * from Table_detail"
Data5.DatabaseName = App.Path & "/buku.mdb"
Data5.RecordSource = "select * from Table_user"
Data6.DatabaseName = App.Path & "/buku.mdb"
Data6.RecordSource = "select * from Table_bantu"
Data7.DatabaseName = App.Path & "/buku.mdb"
Data7.RecordSource = "select * from Table_bayar"
End Sub
Private Sub CMDADD_Click()
Call Auto
Call aktif
CMDFINDP.Enabled = True
CMDADD.Enabled = False
CMDEXIT.Enabled = False
End Sub
Private Sub CMDCLEAR_Click()
Call kosong
Call hapus_grid
Call nonaktif
CMDADD.Enabled = True
CMDEXIT.Enabled = True
End Sub
Private Sub CMDEXIT_Click()
Unload Me
Menuutama.Show
End Sub
Sub aktif()
CMDCLEAR.Enabled = True
CMDSAVE.Enabled = False
End Sub
Sub nonaktif()
CMDFINDB.Enabled = False
CMDFINDP.Enabled = False
TXTKASIR.Enabled = False
TXTNOFAK.Enabled = False
TXTKDPEL.Enabled = False
TXTNMPEL.Enabled = False
TXTTELPON.Enabled = False
TXTALAMAT.Enabled = False
TXTKDBUKU.Enabled = False
TXTNMBUKU.Enabled = False
TXTSTOK.Enabled = False
TXTHARGA.Enabled = False
TXTJUMBEL.Enabled = False
TXTTOHAR.Enabled = False
TXTTOBAY.Enabled = False
TXTUBAR.Enabled = False
TXTUKEM.Enabled = False
TXTKIRIM.Enabled = False
OPTDALAM.Enabled = False
OPTLUAR.Enabled = False
OPTTIDAK.Enabled = False
CMDCLEAR.Enabled = False
CMDSAVE.Enabled = False
CMDLAGI.Enabled = False
CMDSELESAI.Enabled = False
End Sub
Sub kosong()
TXTNOFAK.Text = ""
TXTKDPEL.Text = ""
TXTNMPEL.Text = ""
TXTALAMAT.Text = ""
TXTTELPON.Text = ""
TXTKDBUKU.Text = ""
TXTNMBUKU.Text = ""
TXTSTOK.Text = ""
TXTHARGA.Text = ""
TXTJUMBEL.Text = ""
TXTTOHAR.Text = ""
TXTUBAR.Text = ""
TXTUKEM.Text = ""
TXTTOBAY.Text = ""
TXTKIRIM.Text = ""
OPTDALAM.Value = False
OPTLUAR.Value = False
OPTTIDAK.Value = False
End Sub
Private Sub CMDFINDB_Click()
Frame2.Visible = True
TXTFINDB.SetFocus
End Sub
Private Sub CMDFINDP_Click()
Frame3.Visible = True
TXTFINDP.SetFocus
End Sub
VISIBLE digunakan sebagai pilihan apakah suatu objek akan ditampilkan atau disembunyikan.
Jika VISIBLE = TRUE maka objek akan ditampilkan.
Jika VISIBLE = FALSE maka objek akan disembunyikan.
Private Sub TXTFINDB_Change()
Data1.RecordSource = "SELECT*FROM Table_buku WHERE Kode_buku LIKE’*" & TXTFINDB.Text & "*’"
DBGrid3.Refresh
Data1.Refresh
If Data1.Recordset.EOF Then
MsgBox "DATA TIDAK ADA !"
End If
End Sub
Private Sub TXTFINDB_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
TXTKDBUKU.Text = Data1.Recordset!Kode_buku
TXTNMBUKU.Text = Data1.Recordset!Judul_buku
TXTSTOK.Text = Data1.Recordset!Stok_buku
TXTHARGA.Text = Data1.Recordset!Harga_buku
Frame2.Visible = False
TXTJUMBEL.Enabled = True
TXTJUMBEL.SetFocus
TXTFINDB.Text = ""
CMDFINDB.Enabled = False
End If
End Sub
Private Sub TXTFINDP_Change()
Data2.RecordSource = "SELECT*FROM Table_pelanggan WHERE Kode_pelanggan LIKE’*" & TXTFINDP.Text & "*’"
DBGrid2.Refresh
Data2.Refresh
If Data2.Recordset.EOF Then
MsgBox "DATA TIDAK ADA !"
End If
End Sub
Private Sub TXTFINDP_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
TXTKDPEL.Text = Data2.Recordset!Kode_pelanggan
TXTNMPEL.Text = Data2.Recordset!Nama_Pelanggan
TXTTELPON.Text = Data2.Recordset!Telp_pelanggan
TXTALAMAT.Text = Data2.Recordset!Almt_pelanggan
Frame3.Visible = False
CMDFINDB.Enabled = True
CMDFINDP.Enabled = False
TXTFINDP.Text = ""
End If
End Sub
Private Sub CMDLAGI_Click()
CMDFINDB.Enabled = True
CMDSELESAI.Enabled = False
CMDLAGI.Enabled = False
TXTJUMBEL.Text = ""
End Sub
Private Sub CMDSELESAI_Click()
OPTDALAM.Enabled = True
OPTLUAR.Enabled = True
OPTTIDAK.Enabled = True
If Data6.Recordset.RecordCount = 0 Then
Data6.Recordset.AddNew
Data6.Recordset!Nofak = TXTNOFAK.Text
Data6.Recordset!Kode_buku = TXTKDBUKU.Text
Data6.Recordset!Jumlah_beli = TXTJUMBEL.Text
Data6.Recordset!Total_harga = Val(TXTTOHAR.Text)
Data6.Recordset.Update
Data6.Refresh
DBGrid1.Refresh
TXTTOBAY.Text = Val(TXTTOBAY.Text) + Val(TXTTOHAR.Text)
End If
CMDLAGI.Enabled = False
CMDSELESAI.Enabled = False
TXTJUMBEL.Enabled = False
End Sub
Maksud dari If Data6.Recordset.RecordCount = 0 Then dst…
yang ada pada CmdSelesai ini adalah jika isi dari field data6
(Table_bantu) masih kosong maka terjadi penyimpanan data dan isi data
txttobay adalah txttobay yang lama ditambah dengan txttohar.
Private Sub OPTDALAM_Click()
If OPTDALAM.Value = True Then
TXTKIRIM.Text = 5000
TXTTOBAY.Text = Val(TXTTOBAY.Text) + Val(TXTKIRIM.Text)
TXTUBAR.Enabled = True
TXTUBAR.SetFocus
OPTLUAR.Enabled = False
OPTTIDAK.Enabled = False
TXTUBAR.SetFocus
End If
End Sub
Private Sub OPTLUAR_Click()
If OPTLUAR.Value = True Then
TXTKIRIM.Text = 10000
TXTTOBAY.Text = Val(TXTTOBAY.Text) + Val(TXTKIRIM.Text)
TXTUBAR.Enabled = True
TXTUBAR.SetFocus
OPTDALAM.Enabled = False
OPTTIDAK.Enabled = False
TXTUBAR.SetFocus
End If
End Sub
Private Sub OPTTIDAK_Click()
If OPTTIDAK.Value = True Then
TXTKIRIM.Text = 0
TXTTOBAY.Text = Val(TXTTOBAY.Text) + Val(TXTKIRIM.Text)
TXTUBAR.Enabled = True
TXTUBAR.SetFocus
OPTLUAR.Enabled = False
OPTDALAM.Enabled = False
TXTUBAR.SetFocus
End If
End Sub
Maksud dari VALUE pada Option Button adalah:
Jika VALUE = TRUE berarti Option Button tersebut dipilih.
Jika VALUE = FALSE berarti Option Button tersebut tidak dipilih.
Keterangan dari data biaya pengirimannya adalah:
Jika yang dipilih adalah OptDalam (dalam kota) maka biaya kirimnya adalah 5000
Jika yang dipilih adalah OptLuar(luar kota) maka biaya kirimnya adalah 10000
Jika yang dipilih adalah OptTidak (tidak dikirim) maka biaya kirimnya adalah 0
Total bayar berisi penjumlahan dari Total bayar yang lama ditambah biaya kirim tersebut.
Private Sub TXTJUMBEL_Change()
TXTTOHAR.Text = Val(TXTJUMBEL.Text) * Val(TXTHARGA.Text)
End Sub
Private Sub TXTJUMBEL_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
If Val(TXTJUMBEL.Text) > Val(TXTSTOK.Text) Then
MsgBox "stok terbatas"
Else
Data6.Recordset.AddNew
Data6.Recordset!No_faktur = TXTNOFAK.Text
Data6.Recordset!Kode_buku = TXTKDBUKU.Text
Data6.Recordset!Jumlah_beli = Val(TXTJUMBEL.Text)
Data6.Recordset!Total_harga = Val(TXTTOHAR.Text)
Data6.Recordset.Update
Data6.Refresh
DBGrid1.Refresh
TXTTOBAY.Text = Val(TXTTOBAY.Text) + Val(TXTTOHAR.Text)
TXTJUMBEL.Text = ""
TXTTOHAR.Text = ""
CMDFINDB.Enabled = False
CMDLAGI.Enabled = True
CMDSELESAI.Enabled = True
TXTKDBUKU.Text = ""
TXTNMBUKU.Text = ""
TXTSTOK.Text = ""
TXTHARGA.Text = ""
TXTJUMBEL.Enabled = False
End If
End If
End Sub
Perhatikan bahwa TxtJumbel (jumlah beli) disitu ada 2 bagian yaitu CHANGE dan KEYPRESS.
CHANGE : Pada txtjumbel ketika ditulis suatu data maka secara langsung
akan terjadi perkalian antara txtjumbel dan txtharga dan hasilnya akan
ditaruh di txttohar (total harga).
KEYPRESS : Pada txtjumbel ketika ditekan Enter maka akan terjadi
perhitungan data stok, Jika angka yang dimasukan pada txtjumbel lebih
besar daripada angka yang ada di txtstok maka akan muncul pesan bahwa
Stok terbatas. Tapi jika lebih kecil maka akan terjadi proses
penyimpanan data.
Private Sub TXTUBAR_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
If Val(TXTUBAR.Text) < Val(TXTTOBAY.Text) Then
MsgBox "uang bayar kurang"
Else
TXTUKEM.Text = Val(TXTUBAR.Text) – Val(TXTTOBAY.Text)
CMDSAVE.Enabled = True
CMDSAVE.SetFocus
End If
End If
End Sub
Pada txtubar apabila ditekan Enter maka akan terjadi perhitungan data sebagai berikut :
Jika angka yang dimasukan pada txtubar (uang bayar) lebih kecil dari
angka yang ada di txttobay (total bayar) maka akan muncul pesan bahwa
uang bayar kurang.
Tapi jika lebih besar maka terjadi pengurangan antara txtubar dikurangi
dengan txttobay yang hasilnya diletakkan pada txtukem (uang kembali).
Private Sub Timer1_Timer()
TXTTGL.Text = Date
TXTJAM.Text = Time
End Sub
Listing ini digunakan untuk memunculkan tanggal dan waktu terjadinya transaksi (hari itu juga)
Txttgl berisi Tanggal terjadinya transaksi.
txtjam berisi Jam terjadinya transaksi.
Diperlukan Tool TIMER dan jangan lupa untuk merubah INTERVAL nya pada properties.
Sub hapus_grid()
If Data6.Recordset.RecordCount <= 0 Then
Exit Sub
End If
Data6.Recordset.MoveFirst
Do While Not Data6.Recordset.EOF
Data6.Recordset.Delete
Data6.Recordset.MoveNext
Loop
End Sub
Sub hapus_bayar()
If Data7.Recordset.RecordCount <= 0 Then
Exit Sub
End If
Data7.Recordset.MoveFirst
Do While Not Data7.Recordset.EOF
Data7.Recordset.Delete
Data7.Recordset.MoveNext
Loop
End Sub
Private Sub CMDSAVE_Click()
‘TABLE DETAIL DAN TABLE BANTU
While Not Data6.Recordset.EOF
Data4.Recordset.AddNew
Data4.Recordset!No_faktur = Data6.Recordset!No_faktur
Data4.Recordset!Kode_buku = Data6.Recordset!Kode_buku
Data4.Recordset!Jumlah_beli = Data6.Recordset!Jumlah_beli
Data4.Recordset!Total_harga = Data6.Recordset!Total_harga
‘ PENGURANGAN STOK
Data1.Recordset.MoveFirst
Data1.Recordset.FindFirst "Kode_buku= ‘" & Data6.Recordset!Kode_buku & "’"
If Not Data1.Recordset.NoMatch Then
Data1.Recordset.Edit
Data1.Recordset!Stok_buku = Val(Data1.Recordset!Stok_buku) – Val(Data6.Recordset!Jumlah_beli)
Data1.Recordset.Update
Data1.Refresh
End If
Data4.Recordset.Update
Data6.Recordset.MoveNext
N = N + 1
Wend
Data4.Refresh
Data6.Refresh
‘TABLE TRANSAKSI
Data3.Recordset.AddNew
Data3.Recordset!No_faktur = TXTNOFAK.Text
Data3.Recordset!Tgl_faktur = TXTTGL.Text
Data3.Recordset!Kode_pelanggan = TXTKDPEL.Text
Data3.Recordset!Total_bayar = TXTTOBAY.Text
Data3.Recordset!Id_user = TXTKASIR.Text
Data3.Recordset!Biaya_kirim = TXTKIRIM.Text
Data3.Recordset.Update
Data3.Refresh
‘TABLE BAYAR
Data7.Recordset.AddNew
Data7.Recordset!No_faktur = TXTNOFAK.Text
Data7.Recordset!Uang_bayar = TXTUBAR.Text
Data7.Recordset!Uang_kembali = TXTUKEM.Text
Data7.Recordset.Update
Data7.Refresh
‘MENCETAK FAKTUR
‘CR.ReportFileName = App.Path & "\Faktur.rpt"
‘CR.SelectionFormula = "({Table_detail.No_faktur}=’" & TXTNOFAK.Text & "’)"
‘CR.WindowState = crptMaximized
‘CR.RetrieveDataFiles
‘CR.Action = 1
CMDADD.Enabled = True
CMDSAVE.Enabled = False
Call kosong
Call nonaktif
Call hapus_grid
Call hapus_bayar
CMDEXIT.Enabled = True
End Sub
Dalam Tombol Save ini terjadi Penyimpanan data pada beberapa Table
yaitu : Table Detail (diambil dari Table Bantu), Table Transaksi
(diambil dari form), dan Table Bayar (diambil dari form).
Isi dari Table Detail didapat dari isi dari Table Bantu. Sedangkan
isi Table Bantu itu sendiri didapat dari data yang dimasukan pada form
transaksi ini.
Pada Penyimpanan data ke dalam Table Detail terjadi perintah
perulangan yaitu WHILE WEND karena data Table Bantu yang akan disimpan
ke dalam Table Detail berjumlah banyak sehingga berulang ulang
memasukannya.
Contoh dari perulangan itu adalah apabila ada
pelanggan yang membeli buku banyak yang berbeda beda pastinya semua itu
hanya dicatat dalam 1 faktur atau 1 struk saja. Makanya disini terjadi
pengulangan. Karena tidak mungkin setiap 1 pelanggan yang membeli buku
yang banyak harus menggunakan banyak faktur juga.
Didalam penyimpanan Table Detail diatas juga terjadi PENGURANGAN STOK.
Maksud Listing Programnya adalah:
FINDFIRST dipakai untuk mencari kode_buku yang ada pada data1
(Table_buku) yang sama dengan kode_buku yang ada pada data6
(Table_bantu).
Dan jika data tersebut ditemukan maka stok_buku yang ada di data1
(Table_buku) akan dikurangi oleh Jumlah_beli yang ada di data6
(Table_bantu).
Dan setelah data tersebut di Save, maka terjadi perintah untuk memanggil Sub Hapus_Grid dan Sub Hapus_bayar.
Dengan adanya Sub Hapus_Grid tersebut, maka semua data yang ada di
data6 (table_bantu) akan dikosongkan karena sudah disimpan pada data4
(table_detail).
Dan dengan adanya Sub Hapus_Bayar tersebut, maka semua data yang ada
di data7 (table_bayar) juga akan dikosongkan karena sudah dipakai dan
ditampilkan di dalam Faktur.
MENCETAK FAKTUR hanya dipakai jika anda mempunyai software pembuat
laporan yang bernama CRYSTAL REPORT. Jika tidak punya, silahkan hapus
rumusnya. Tapi jika anda punya, gunakan listing program tersebut dan
hilangkan tanda petik di depan rumusnya. Untuk keterangan lebih lanjut
baca
Tutorial Membuat Laporan dengan Crystal Report.
Private Sub Auto()
Data3.RecordSource =
"select * from Table_Transaksi Where No_faktur In(Select
Max(No_faktur)From Table_Transaksi)Order By No_faktur Desc"
Data3.Refresh
Dim Urutan As String * 10
Dim Hitung As Long
With Data3.Recordset
If .EOF Then
Urutan = Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2) + "0001"
No_faktur = Urutan
Else
If Left(!No_faktur, 6) <> Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2) Then
Urutan = Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2) + "0001"
Else
Hitung = (!No_faktur) + 1
Urutan = (Right(Date, 2) + Mid(Date, 4, 2) + Left(Date, 2)) + Right("0000" & Hitung, 4)
End If
End If
TXTNOFAK.Text = Urutan
End With
End Sub
Sub AUTO ini digunakan untuk memunculkan nomor faktur secara otomatis.
Jumlah karakter dari nomor faktur ini adalah 10 digit angka yang
terdiri dari: 2 angka pertama untuk Tahun faktur, 2 angka berikutnya
untuk Bulan faktur, 2 angka berikutnya untuk Tanggal faktur dan 4 angka
terakhir digunakan untuk Nomor faktur.
Contoh: jika ada Nomor Faktur yang bertuliskan 0806250099 maka
Tahun faktur tersebut adalah 08 (2008)
Bulan faktur tersebut adalah 06 (Juni)
Tanggal faktur tersebut adalah 25
Nomor faktur tersebut adalah 0099
PERHATIAN : untuk memakai nomor faktur otomatis ini, settingan waktu
komputer anda harus berformat ”dd/mm/yy” (2 digit angka
hari/bulan/tahun). Contoh: 30/12/09.
Jika belum dirubah, maka
rubahlah format tanggal tersebut dari CONTROL PANEL lalu pilihlah
REGIONAL AND LANGUAGE OPTIONS lalu tekan tombol CUSTOMIZE dan pilih
DATE lalu rubahlah SHORT DATE FORMAT menjadi dd/mm/yy jika sudah tekan
Oke.
CARA MEMAKAI FORM TRANSAKSI INI :
1. Klik Add, untuk memasukan data transaksi yang baru
2. Klik
tombol find yang ada disamping kode pelanggan lalu masukan kode
pelanggan pada kotak pencarian data kemudian tekan enter.
3. Klik tombol find yang ada disamping kode buku lalu masukan kode buku pada kotak pencarian data kemudian tekan enter.
4. Masukan jumlah beli, lalu tekan enter.
5. Klik tombol Lagi untuk membeli buku yang lainnya lagi.
6. Klik tombol Selesai bila semua buku yang diinginkan sudah selesai dimasukkan.
7. Pilih cara pengiriman buku yang telah disediakan.
8. Masukan uang bayar pada tempat yang disediakan.
9. Klik Save, untuk menyimpan data atau Klik Clear, untuk mengosongkan dan membatalkan data yang akan disimpan.
10. Klik Exit untuk keluar.
- Jangan lupa untuk mengganti Name dari form ini di properties
menjadi ”Ftransaksi” dan menyimpannya dengan nama ”Transaksi.frm”.
Demikianlah pembahasan tentang program transaksi yang memang sangat
panjang dan lebar. Tapi jika anda mengerti maka terasa tidak terlalu
sulit untuk membuatnya. Selamat menikmati tutorial selanjutnya !
Tidak ada komentar:
Posting Komentar