Sekarang adalah tahap akhir yang akan kita lakukan, yaitu melengkapi kode di Presentation Layer. Agar mengingat kembali pembahasan sebelumnya, berikut saya tampilkan 3 gambar Form yang telah kita buat :
Form Menu Utama, Form Golongan dan Form Jabatan
Sebelum kita melengkapi kode di presentation layer, kita akan terlebih dahulu membuat file XML dan menambahkan class DBConnection di dalam project AplikasiPayroll. Untuk koneksi ke database MySql, kita akan membutuhkan string koneksi berikut :
10 SERVER=nama_server;DATABASE=nama_database;UID=user_database;PASSWORD=password_user
Terlihat dengan jelas ada beberapa informasi yang tentunya tidak ingin kita hardcode di program, kita ambil contoh informasi nama_server dan nama_database.
Kalo dulu mungkin kita biasanya meyimpan informasi tersebut di registry windows atau file dengan format INI, tapi kali ini kita akan memanfaatkan file XML yang sudah disediakan .NET
Untuk membuat file XML, silahkan ikuti langkah-langkah berikut :
Membuat File XML
1 <?xml version="1.0" encoding="utf-8" ?>
2 <configuration>
3 <appSettings>
4 <!-- Lokasi server, bisa juga langsung diganti dengan ip address -->
5 <add key="Server" value="192.168.1.131"/>
6
7 <!-- Nama Database -->
8 <add key="Database" value="DB_PayrollDAO"/>
9 </appSettings>
10 </configuration>
Selesai ...
Untuk mengakses file XML tersebut akan kita lakukan melalui class DBConnection.
Note :
Sebelumnya maaf ya, di gambar-gambar sebelumnya saya sudah membuat class DBConnection dan lain-lain, sehingga apabila anda melihat kenapa kok ada gambar-gambar class, form, file xml atau lain-lain, anda jangan bingung karena project yang saya tampilkan adalah project yang sudah jadi. Khusus untuk class DBConnection, pada gambar-gambar sebelum nya anda akan melihat namanya adalah DBConnections.cs, sepertinya ada salah ejaan, tetapi sudah saya perbaiki dengan cara mengganti namanya dengan DBConnection.cs,yang dapat dilihat pada gambar-gambar berikutnya di bawah ini. Cara memperbaikinya cukup mudah, pada Jendela Solution Explorer klik kanan saja pada class tersebut kemudian rename dan Enter, beres.
Saya anggap anda belum membuat class DBConnection, mari kita buat :
Membuat Class DBConnection
Jangan lupa tambahkan namespace MySql.Data.MySqlClient dan access modifier public. Sepertinya tidak perlu saya jelaskan lagi, dah tau kan.. fungsinya ?. :-)Sedangkan namespace System.Configuration berfungsi agar kita bisa menggunakan class ConfigurationSettings untuk mengakses file XML yang sudah kita buat sebelumnya.
Lengkapi kode di class DBConnection.cs menjadi seperti berikut :
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 using MySql.Data.MySqlClient;
7 using System.Configuration;
8
9 namespace AplikasiPayrollDAO
10 {
11 public class DBConnection
12 {
13 private MySqlConnection conn = null;
14 private static DBConnection dbConn = null;
15
16 //constructor
17 private DBConnection()
18 {
19 if (conn == null)
20 {
21 //Baca informasi yang ada pada file xml(App.config)
22 string server = ConfigurationSettings.AppSettings["Server"];
23 string database = ConfigurationSettings.AppSettings["Database"];
24
25 string user = "APPPYRL";
26 string password = "1q2w3e4r";
27
28 string strConn = "SERVER=" + server + "; DATABASE=" + database + "; UID=" + user + "; PASSWORD=" + password;
29
30 conn = new MySqlConnection(strConn);
31 conn.Open();
32 }
33 }
34
35 public static DBConnection GetInstance()
36 {
37 if (dbConn == null)
38 {
39 dbConn = new DBConnection();
40 }
41
42 return dbConn;
43 }
44
45 public MySqlConnection GetConnection()
46 {
47 return this.conn;
48 }
49 }
50 }
Sampai di sini persiapan kita sudah selesai, sekarang saatnya kita melengkapi kode di Form Menu Utama, Form Golongan dan Form Jabatan.
- Menambahkan kode pada Form Menu Utama
Tambahkan kode seperti berikut :
Kemudian double klik golonganToolStripMenuItem :
Lengkapi kodenya :
34 private void golonganToolStripMenuItem_Click(object sender, EventArgs e)
35 {
36 frmGolongan fGLG = new frmGolongan(conn);
37 fGLG.MdiParent = this;
38 fGLG.Show();
39 }
41 private void jabatanToolStripMenuItem_Click(object sender, EventArgs e)
42 {
43 frmJabatan fJBT = new frmJabatan(conn);
44 fJBT.MdiParent = this;
45
46 fJBT.Show();
47 }
- Menambahkan kode pada Form Golongan
Masuk ke editor code nya, dan lengkapi kode seperti berikut :
-> Menampilkan Data Golongan :
Tambahkan Fungsi LoadDataGolongan() di dalam editor code frmGolongan :
91 private void LoadDataGolongan()92 {93 List<Golongan> daftarGlg = glgDAO.GetAll();94 DGV.DataSource = daftarGlg.ToArray();95 DGV.ReadOnly = true;96 }
Kemudian edit constructor frmGolongan :
25 //constructor26 public frmGolongan(DBConnection conn)27 {28 InitializeComponent();2930 //buat objek glgDAO untuk mengakses operasi database31 glgDAO = new GolonganDAO(conn.GetConnection());323334 LoadDataGolongan();35 }
-> Menambahkan Method msgInfo() dan msgInfo2() :
Method msgInfo() berfungsi untuk menampilkan jendela dengan sebuah tombol OK, sedangkan fungsi msgInfo2() berguna untuk menampilkan jendela pemberitahuan dengan tombol Yes dan No.
Di dalam editor code frmGolongan, tuliskan kode berikut :
49 private void msgInfo(string prompt)50 {51 MessageBox.Show(prompt, "Informasi", MessageBoxButtons.OK, MessageBoxIcon.Information);52 }5354 private bool msgInfo2(string prompt)55 {56 if (MessageBox.Show(prompt, "Question", MessageBoxButtons.YesNo) == DialogResult.Yes)57 {58 return true;59 }60 else61 {62 return false;63 }64 }
-> Menyimpan/Mengubah Data :
Double klik btnSimpan, tambahkan kode berikut :
98 private void btnSimpan_Click(object sender, EventArgs e)99 {100 if (txtGolongan.Text == "" || txtTjSuamiIstri.Text == "" || txtTjAnak.Text == "" || txtUangMakan.Text == "" || txtUangLembur.Text == "" || txtAskes.Text == "")101 {102 msgInfo("Data yang anda isikan belum lengkap");103 }104 else if (txtGolongan.Text.Length > 4 || txtTjSuamiIstri.Text.Length > 11 || txtTjAnak.Text.Length > 11 || txtUangMakan.Text.Length > 11 || txtUangLembur.Text.Length > 11 || txtAskes.Text.Length > 11)105 {106 msgInfo("Kolom Golongan maksimal 4 karakter/digit !!!\nKolom lain tidak boleh lebih dari 11 karakter/digit angka !!! ");107 }108 else109 {110 Golongan glg = new Golongan();111112 glg.Tk_Golongan = txtGolongan.Text;113 glg.TJ_Suami_Istri = int.Parse(txtTjSuamiIstri.Text);114 glg.TJ_Anak = int.Parse(txtTjAnak.Text);115 glg.Uang_Makan = int.Parse(txtUangMakan.Text);116 glg.Uang_Lembur = int.Parse(txtUangLembur.Text);117 glg.Askes = int.Parse(txtAskes.Text);118119 resultBool = glgDAO.CheckRecords(txtGolongan.Text);120121 if (resultBool == false)122 {123 result = glgDAO.Save(glg);124125 if (result > 0)126 {127 txtGolongan.Focus();128 msgInfo("Data berhasil disimpan");129 }130 else131 {132 msgInfo("Data gagal disimpan");133 }134 }135 else136 {137 if (msgInfo2("Sudah terdapat Tingkat Golongan " + txtGolongan.Text + ". Apakah anda akan mengupdate data ini ?") == true)138 {139 result = glgDAO.Update(glg);140141 if (result > 0)142 {143 msgInfo("Data Golongan berhasil di-update");144 }145 else146 {147 msgInfo("Data Golongan gagal di-update");148 }149 }150 else151 {152 clearTextBox();153 }154 }155156 LoadDataGolongan();157 }158 }
-> Menghapus Data :
Double klik Tombol Hapus (btnHapus). Tambahkan kode berikut :
175 private void btnHapus_Click(object sender, EventArgs e)176 {177 if (txtGolongan.Text == "")178 {179 msgInfo("Isi Kolom Golongan terlebih dahulu !!!");180 }181 else182 {183 if (msgInfo2("Apakah anda yakin akan menghapus data Golongan dengan Kode " + txtGolongan.Text + "?") == true)184 {185 result = glgDAO.Delete(txtGolongan.Text);186187 if (result > 0)188 {189 msgInfo("Data Golongan berhasil dihapus !!!");190 }191 else192 {193 msgInfo("Data Golongan gagal dihapus !!!");194 }195 }196 else197 {198 clearTextBox();199 }200201 LoadDataGolongan();202 }203 }
-> Membatalkan Input Data :
Terlebih dahulu buat method clearTextBox dalam class frmGolongan :
37 private void clearTextBox()38 {39 txtGolongan.Clear();40 txtTjSuamiIstri.Clear();41 txtTjAnak.Clear();42 txtUangMakan.Clear();43 txtUangLembur.Clear();44 txtAskes.Clear();4546 txtGolongan.Focus();47 }
Kemudian double klik Tombol Batal (btnBatal) dan tambahkan kode berikut :
170 private void btnBatal_Click(object sender, EventArgs e)171 {172 clearTextBox();173 }
-> Menutup Form Golongan :
Double klik Tombol Tutup (btnTutup) dan lengkapi kode :
165 private void btnTutup_Click(object sender, EventArgs e)166 {167 this.Close();168 }
-> Membuat Method ConvertToUpper() dan NumericOnly()
Method ConvertToUpper() berguna agar setiap string yang di-inputkan di dalam txtGolongan selalu di konversi ke huruf Capital. Sedangkan method NumericOnly() mengharuskan setiap karakter yang diketikkan ke dalam txtTjSuamiIstri, txtTjAnak, txtTjUangMakan, txtTjUangLembur dan TjAskes adalah bertipe Numerik (angka 0-9).
Di dalam class frmGolongan tambahkan kode berikut :
66 private string ConvertToUpper(string kata)67 {68 return kata.ToUpper();69 }7071 private bool NumericOnly(System.Windows.Forms.KeyPressEventArgs e)72 {73 string strValid = "0123456789";7475 if (strValid.IndexOf(e.KeyChar) < 0 && !(e.KeyChar == Convert.ToChar(Keys.Back)))76 {77 msgInfo("Masukan Angka !!!.\nDan jumlah maksimum angka yang boleh anda masukan adalah 11 digit !!!");78 return true; //Not valid79 }80 else81 {82 return false; //Valid83 }84 }
-> Method pada Event KeyPress TextBox :
Klik txtTjSuamiIstri, kemudian pada jendela Properties pilih tab Events dan double klik pada event KeyPress :
Masukkan kode berikut :
160 private void txtTjSuamiIstri_KeyPress(object sender, KeyPressEventArgs e)161 {162 e.Handled = NumericOnly(e);163 }
Lakukan hal yang sama pada txtTunjanganAnak, txtUangMakan, txtUangLembur, dan txtAskes :
232 private void txtTjAnak_KeyPress(object sender, KeyPressEventArgs e)233 {234 e.Handled = NumericOnly(e);235 }236237 private void txtUangMakan_KeyPress(object sender, KeyPressEventArgs e)238 {239 e.Handled = NumericOnly(e);240 }241242 private void txtUangLembur_KeyPress(object sender, KeyPressEventArgs e)243 {244 e.Handled = NumericOnly(e);245 }246247 private void txtAskes_KeyPress(object sender, KeyPressEventArgs e)248 {249 e.Handled = NumericOnly(e);250 }
-> Method pada Event PreviewKeyDown Textbox txtGolongan :
Klik sekali txtGolongan, kemudian pada jendela Properties pilih tab Events dan double klik pada event PreviewKeyDown :
215 private void txtGolongan_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)216 {217 if (e.KeyCode == Keys.Tab)218 {219 txtGolongan.Text = ConvertToUpper(txtGolongan.Text);220 Golongan glg = glgDAO.GetByTkGolongan(txtGolongan.Text);221 if (glg != null)222 {223 txtTjSuamiIstri.Text = (glg.TJ_Suami_Istri).ToString();224 txtTjAnak.Text = (glg.TJ_Anak).ToString();225 txtUangMakan.Text = (glg.Uang_Makan).ToString();226 txtUangLembur.Text = (glg.Uang_Lembur).ToString();227 txtAskes.Text = (glg.Askes).ToString();228 }229 }230 }
-> Method pada Event SelectionChanged pada Datagrid View (DGV) :
Klik sekali pada DGV, kemudian pada jendela Properties pilih tab Events dan double klik pada event SelectionChanged :
Ketikkan kode berikut :
205 private void DGV_SelectionChanged(object sender, EventArgs e)206 {207 txtGolongan.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[0].Value.ToString();208 txtTjSuamiIstri.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[1].Value.ToString();209 txtTjAnak.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[2].Value.ToString();210 txtUangMakan.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[3].Value.ToString();211 txtUangLembur.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[4].Value.ToString();212 txtAskes.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[5].Value.ToString();213 }
Alhamdulillah.., sampai disini selesai sudah pekerjaan kita melengkapi kode di Form Golongan. Selanjutnya kita akan melengkapi kode di Form Jabatan, mari kita lakukan dengan mengikuti langkah-langkah berikut ini.
- Menambahkan kode pada Form Jabatan
-> Menampilkan Data Jabatan :
Tambahkan Fungsi LoadDataJabatan() di dalam editor code frmJabatan :
32 private void LoadDataJabatan()33 {34 List<Jabatan> daftarJbt = jbtDAO.GetAll();35 DGV.DataSource = daftarJbt.ToArray();36 DGV.ReadOnly = true;37 }
Kemudian edit constructor frmJabatan :
24 public frmJabatan(DBConnection conn)25 {26 InitializeComponent();2728 //buat objek jbtDAO untuk mengakses operasi database29 jbtDAO = new JabatanDAO(conn.GetConnection());3031 LoadDataJabatan(); //Tambahkan baris kode ini32 }
-> Menambahkan Method msgInfo() dan msgInfo2()
Method msgInfo() berfungsi untuk menampilkan jendela pemberitahuan dengan sebuah tombol OK, sedangkan msgInfo2() berfungsi untuk menampilkan jendela pemberitahuan dengan tombol Yes dan No.
Di dalam editor code frmJabatan, tuliskan kode berikut :
49 private void msgInfo(string prompt)50 {51 MessageBox.Show(prompt, "Informasi", MessageBoxButtons.OK, MessageBoxIcon.Information);52 }5354 private bool msgInfo2(string prompt)55 {56 if (MessageBox.Show(prompt, "Question", MessageBoxButtons.YesNo) == DialogResult.Yes)57 {58 return true;59 }60 else61 {62 return false;63 }64 }
-> Membatalkan Input Data Jabatan
Terlebih dahulu buat Method clearTextBox dalam class frmJabatan :
61 private void clearTextBox()62 {63 txtKodeJbt.Clear();64 txtNamaJbt.Clear();65 txtGajiPokok.Clear();66 txtTJJbt.Clear();6768 txtKodeJbt.Focus();69 }
Kemudian double klik Tombol Batal (btnBatal) dan lengkapi kode :
71 private void btnBatal_Click(object sender, EventArgs e)72 {73 clearTextBox();74 }
-> Menyimpan/Mengubah Data Jabatan
Double klik btnSimpan, tambahkan kode berikut :
77 private void btnSimpan_Click(object sender, EventArgs e)78 {79 if (txtKodeJbt.Text == "" || txtNamaJbt.Text == "" || txtGajiPokok.Text == "" || txtTJJbt.Text == "")80 {81 msgInfo("Data belum lengkap, lengkapi terlebih dahulu...");82 }83 else if(txtKodeJbt.Text.Length > 4 || txtNamaJbt.Text.Length > 20 || txtGajiPokok.Text.Length > 11 || txtTJJbt.Text.Length > 11)84 {85 msgInfo("Kode Jabatan Maks. 4 karakter\n Nama Jabatan Maks. 20 Karakter\n Gaji Pokok Maks. 11 digit angka\n Tunjangan Jabatan Maks. 11 digit angka");86 }87 else88 {89 Jabatan jbt = new Jabatan();9091 jbt.Kode_Jabatan = txtKodeJbt.Text;92 jbt.Nama_Jabatan = txtNamaJbt.Text;93 jbt.Gaji_Pokok = int.Parse(txtGajiPokok.Text);94 jbt.TJ_Jabatan = int.Parse(txtTJJbt.Text);9596 //cek record tabel Jabatan dengan kode record txtKodeJbt.text97 resultBool = jbtDAO.CheckRecords(txtKodeJbt.Text);9899 if (resultBool == false)100 {101 result = jbtDAO.Save(jbt);102103 if (result > 0)104 {105 txtKodeJbt.Focus();106 msgInfo("Data Jabatan berhasil disimpan...");107 }108 else109 {110 msgInfo("Data Jabatan gagal disimpan...");111 }112 }113 else114 {115 if (msgInfo2("Sudah terdapat data dengan Kode Jabatan : " + txtKodeJbt.Text + ". Apakah anda akan meng-update data tersebut ?") == true)116 {117 result = jbtDAO.Update(jbt);118119 if (result > 0)120 {121 msgInfo("Data Jabatan dengan Kode Jabatan " + txtKodeJbt.Text + " berhasil di-update...");122 }123 else124 {125 msgInfo("Data Jabatan dengan Kode Jabatan " + txtKodeJbt.Text + " gagal di-update...");126 }127 }128 else129 {130 clearTextBox();131 }132 }133134 LoadDataJabatan();135 }136 }
-> Menghapus Data Jabatan
Double klik Tombol Hapus (btnHapus). Tambahkan kode berikut :
139 private void btnHapus_Click(object sender, EventArgs e)140 {141 if (txtKodeJbt.Text == "")142 {143 msgInfo("Isi Kode Jabatan terlebih dahulu...");144 }145 else146 {147 if (msgInfo2("Apakah anda yakin akan menghapus data Jabatan dengan Kode Jabatan = " + txtKodeJbt.Text + " ?") == true)148 {149 result = jbtDAO.Delete(txtKodeJbt.Text);150151 if (result > 0)152 {153 msgInfo("Data Jabatan dengan Kode Jabatan " + txtKodeJbt.Text + " berhasil dihapus...");154 }155 else156 {157 msgInfo("Data Jabatan dengan Kode Jabatan " + txtKodeJbt.Text + " gagal dihapus...");158 }159 }160 else161 {162 clearTextBox();163 }164165 LoadDataJabatan();166 }167 }
-> Menutup Form Jabatan
Double klik Tombol Tutup (btnTutup) dan lengkapi kode :
170 private void btnTutup_Click(object sender, EventArgs e)171 {172 this.Close();173 }
-> Method ConvertToUpper() dan NumericOnly()
Method ConvertToUpper() berguna agar setiap string yang di-inputkan di dalam txtKodeJbt dan txtNamaJbt selalu di konversi ke huruf Capital. Sedangkan method NumericOnly() mengharuskan setiap karakter yang diketikkan ke dalam txtGajiPokok dan txtTJJbt adalah bertipe Numerik (angka 0-9).
Di dalam class frmJabatan tambahkan kode berikut :
66 private string ConvertToUpper(string kata)67 {68 return kata.ToUpper();69 }7071 private bool NumericOnly(System.Windows.Forms.KeyPressEventArgs e)72 {73 string strValid = "0123456789";7475 if (strValid.IndexOf(e.KeyChar) < 0 && !(e.KeyChar == Convert.ToChar(Keys.Back)))76 {77 msgInfo("Masukan Angka !!!.\nDan jumlah maksimum angka yang boleh anda masukan adalah 11 digit !!!");78 return true; //Not valid79 }80 else81 {82 return false; //Valid83 }84 }
-> Method pada Event KeyPress Textbox
Klik sekali pada textbox txtGajiPokok, lalu pada jendela Properties pilih tab Events, kemudian klik 2x pada KeyPress. Lakukan juga pada textbox txtTJJbt :
Lengkapi kode :
196 private void txtGajiPokok_KeyPress(object sender, KeyPressEventArgs e)197 {198 e.Handled = NumericOnly(e);199 }200201 private void txtTJJbt_KeyPress(object sender, KeyPressEventArgs e)202 {203 e.Handled = NumericOnly(e);204 }
-> Method pada Event PreviewKeyDown Textbox
Klik sekali pada textbox txtKodeJbt, lalu pada jendela Properties pilih tab Events, kemudian klik 2x pada PreviewKeyDown :
Lengkapi kode :
208 private void txtKodeJbt_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)209 {210 if (e.KeyCode == Keys.Tab)211 {212 txtKodeJbt.Text = ConvertToUpper(txtKodeJbt.Text);213 Jabatan jbt = jbtDAO.GetByKodeJabatan(txtKodeJbt.Text);214215 if (jbt != null)216 {217 txtNamaJbt.Text = jbt.Nama_Jabatan;218 txtGajiPokok.Text = (jbt.Gaji_Pokok).ToString();219 txtTJJbt.Text = (jbt.Gaji_Pokok).ToString();220 }221 }222 }
-> Method pada Event PreviewKeyDown Textbox
Klik sekali pada Data Grid View (DGV), lalu pada jendela Properties pilih tab Events, kemudian klik 2x pada SelectionChanged :
Lengkapi kodenya :
224 private void DGV_SelectionChanged(object sender, EventArgs e)225 {226 txtKodeJbt.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[0].Value.ToString();227 txtNamaJbt.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[0].Value.ToString();228 txtGajiPokok.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[0].Value.ToString();229 txtTJJbt.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[0].Value.ToString();230 }
Alhamdulillah.., akhirnya selesai juga pembuatan Aplikasi Payroll ini. Untuk saat ini pembuatan aplikasi Payroll ini saya cukupkan sampai di 2 tabel (tabel golongan dan tabel jabatan) saja. Mungkin lain waktu saya akan berikan contoh lanjutan pada tabel yang lain sebagai bonus dalam tutorial ini (Insya Allah).
Sebenarnya sampai di sini kita sudah melakukan cukup banyak hal, antara lain program ini terdiri dari Form Induk (Form Menu Utama) dan Form Anak (Form Golongan dan Form Jabatan, program ini telah menerapkan konsep OOP (Objek Oriented Programming) karena setiap variabel / konstanta maupun fungsi, semuanya di sederhanakan menjadi sebuah objek dari sebuah class, karena telah berorientasi pada objek, maka penyebutan variabel / konstanta menjadi properti dan penyebutan fungsi menjadi method.
Untuk mempermudah mengikuti tutorial ini, saya sudah siapkan project aplikasi ini dalam bentuk file .zip. Silahkan download di sini.
Sampai jumpa ...
wah keren...
BalasHapusmas nanya nih,untuk membuat role gimana ya.
misalkan user1 hanya bisa membuka form golongan saja dan form lain tidak boleh melihat.
thx
he2.., belum baca sampe abis ya ? nih kan dah ada di bagian 5 :
Hapushttp://havizul.blogspot.com/2014/02/membuat-aplikasi-payroll-menggunakan-c.html
Are you trying to earn cash from your traffic by using popup advertisments?
BalasHapusIn case you do, have you ever considered using Pop Cash?