Halo Pecinta Coding pada tutorial kali  ini kita akan membuat program yang berguna untuk memanfaatkan file XML (eXtensible Markup Language) sebagai media penyimpanan data (database). Deskripsi Programnya adalah sebagai berikut : • Program berguna menggunakan XML sebagai database. &bull...

Membuat Database Mahasiswa mengguakan XML

Halo Pecinta Coding pada tutorial kali  ini kita akan membuat program yang berguna untuk

memanfaatkan file XML (eXtensible Markup Language) sebagai media penyimpanan data (database).

Deskripsi Programnya adalah sebagai berikut :

• Program berguna menggunakan XML sebagai database.

• Database yang akan dibuat adalah database data mahasiswa.

• User bisa melakukkan proses penambahan, peng-editan, penghapusan, dan pencarian data.

Pertama kita akan melakukan desain pada user interface, langkah-langkahnya adalah sebagai berikut :

  • Buat project baru dengan nama databaseXML, simpan di folder 2. Masukkan ke dalam Form1 komponen-komponen yang dibutuhkan sebagai berikut. 2 buah Label , 2 buah TextBox , dan 6 buah Button
  • Setelah itu masukkan lagi satu buah komponen tambahan yaitu DataGrid. Caranya adalah, pada Toolbox, klik kanan disembarang tempat pada bagian Data, pilih Choose Items... Lihat gambar di bawah ini

Akan muncul kotak dialog Choose Toolbox Items. Pilih tab .NET Framework Components. Lalu centang DataGrid, karena ada beberapakomponen dengan nama DataGrid, hanya centang DataGrid dengannamespace System.Windows.Forms dan memiliki Assembly Name System.Windows.Forms (2.0.0.0). Hilangkan centang DataGrid selainitu. Lalu tekan OK. Perhatikan Gambar di bawah ini

Kemudian masukkan komponen DataGrid tersebut ke dalam Form1, bersama dengan komponen-komponen yang telah dimasukkan sebelumnya. Atur tata letaknya kira-kira seperti pada gambar di bawah ini

Untuk langkah selanjutnya, kita akan mengubah semua nilai properties pada masing-masing objek yang ada pada Form1, termasuk nilai properties Form1 itu sendiri. Untuk mengetahui komponen dan properties yang mana yang akan diubah, dan apa nilainya, silahkan Anda lihat pada Tabel di bawah ini.

 

Selanjutnya kita akan melakukan pengaturan lebih lanjut untuk dataGrid1. Langkah-langkah pengaturan lanjutan dataGrid1 adalah sebagai berikut:

Klik satu kali pada komponen dataGrid1, lalu klik pada lambang panah kecil yang ada di sudut kanan atas komponen dataGrid1. Lalu pilih AutoFormat... Seperti yang terlihat pada gambar di bawah ini.

 

Lalu pilih Professional 4, pada bagian Formats:

 

Selanjutnya kita akan membuat File XML sebagai databasenya Langkah-langkah membuat file XML adalah sebagai berikut:

Buat file XML baru dengan cara tekan tombol , pilih Add New Item... Atau cukup dengan menekan kombinasi tombol Ctrl + Shift + A.Maka akan tampil kotak dialog Add New Item. Lihat Gambar di bawah ini

 

Pada kotak dialog tersebut, pilih XML File dan isi dengan nama dataMahasiswa.xml, klik tombol Add. Lihat Gambar di bawah ini

 

Setelah itu, pada file XML yang baru kita buat, ketikkan kode berikut ini.

<?xml version="1.0" encoding="utf-8" ?>
<dbMahasiswa>
  <tblMahasiswa>
    <nim>222222</nim>
    <nama>Rama</nama>
  </tblMahasiswa>
  <tblMahasiswa>
    <nim>232323</nim>
    <nama>Joko</nama>
  </tblMahasiswa>  
</dbMahasiswa>

Selanjutnya adalah coding, Langkah-langkah melakukan coding form utama adalah sebagai berikut:

Klik satu kali pada Form1, lalu tekan tombol F7, ketikkan kode di bawah using System.Windows.Forms; Seperti berikut  ini.

using System.Windows.Forms;
using System.Xml;

Keterangan Program:

  • Baris 2: memanggil namespace lain dengan menggunakan perintah using. Pada program ini namespace yang dipanggil adalah using System.Xml.

Klik dua kali pada Form1, lalu ketikkan kode berikut ini.

private void Form1_Load(object sender, EventArgs e)
        {
            XMLKeDataGrid("dataMahasiswa.xml");
        }

Keterangan Program:

  • Baris 3: memanggil method dengan nama XMLKeDataGrid(). Sedangkan dataMahasiswa.xml adalah file XML yang digunakan.

Langkah selanjutnya, klik dua kali pada txtNim, lalu ketikkan kode di bawah ini.

private void txtNim_TextChanged(object sender, EventArgs e)
        {
            if (txtNim.Text.Length <= 0)
            {
                txtNama.Enabled = false;
                cmdCari.Enabled = false;
                cmdSimpan.Enabled = false;
                cmdUpdate.Enabled = false;
                cmdHapus.Enabled = false;
            }
            else
            {
                txtNama.Enabled = true;
                cmdCari.Enabled = true;
                cmdHapus.Enabled = true;

                if (txtNama.Text.Length <= 0)
                {
                    cmdSimpan.Enabled = false;
                    cmdUpdate.Enabled = false;
                }
                else
                {
                    if (txtNim.ReadOnly == false) cmdSimpan.Enabled = true;
                    else cmdSimpan.Enabled = false;

                    cmdUpdate.Enabled = true;
                }
            }
        }

Keterangan Program:

  • Baris 3: periksa apakah panjang teks yang diinput pada TextBox txtNama kurang dari atau sama dengan 0. Artinya masih kosong. Jika benar, makajalankan baris perintah 5-6. Namun, jika salah, jalankan baris perintah10-12.
  • Baris 5-6: disable / non-aktifkan komponen-komponen berikut ini. cmdSimpan, dan cmdUpdate.
  • Baris 10-11: periksa apakah txtNim tidak dalam status ReadOnly. Jikabenar, maka aktifkan tombol cmdSimpan. Akan tetapi, jika salah, nonaktifkantombol cmdSimpan.
  • Baris 25: aktifkan tombol cmdUpdate.

Setelah itu, klik dua kali pada cmdSimpan, lalu ketikkan kode berikut ini.

private void cmdSimpan_Click(object sender, EventArgs e)
        {
            XmlDocument xmlDoc = new XmlDocument();

            // read file XML
            xmlDoc.Load("dataMahasiswa.xml");

            // ambil first child dari document xml (Child 'dbMahasiswa')                    
            XmlNode xmlRoot = xmlDoc.DocumentElement;

            string strNIM = txtNim.Text;

            ClassXML objClassXML = new ClassXML();
            bool dataDitemukan = objClassXML.cekApakahNIMAda(xmlRoot, strNIM);

            if (dataDitemukan == false)
            {
                // buat node baru dengan nama parent 'tblMahasiswa'
                // child 'nimNode' dan 'namaNode'
                XmlNode tblMahasiswaNode = xmlDoc.CreateElement("tblMahasiswa");
                //xmlRoot.AppendChild(tblMahasiswaNode);
                xmlRoot.PrependChild(tblMahasiswaNode);

                XmlNode nimNode = xmlDoc.CreateElement("nim");
                nimNode.AppendChild(xmlDoc.CreateTextNode(txtNim.Text));
                tblMahasiswaNode.AppendChild(nimNode);

                XmlNode namaNode = xmlDoc.CreateElement("nama");
                namaNode.AppendChild(xmlDoc.CreateTextNode(txtNama.Text));
                tblMahasiswaNode.AppendChild(namaNode);


                // simpan ke dalam file XML                
                bool hasil = objClassXML.simpanKeFileXML(xmlDoc, "dataMahasiswa.xml");
                if (hasil == true)
                    MessageBox.Show("Data berhasil disimpan", "PESAN");
                else
                    MessageBox.Show("Data gagal disimpan", "PESAN");
            }
            else { MessageBox.Show("Maaf NIM yang Anda inputkan sudah ada", "PESAN"); }

            ResetSemua();
        }

Keterangan Program:

  • Baris 3-8: keterangannya sama dengan baris 3-8 pada langkah sebelumnya.
  • Baris 9: periksa apakah variabel dataDitemukan bernilai false. Jika benar, maka jalankan baris perintah 11-23 Namun, jika salah, jalankan baris perintah 25.
  • Baris 11: membuat node dengan nama childYangAkanDiUpdate, yang berguna untuk menampung nilai kembalian yang berupa node, hasil dari method AmbilChildYangDimaksud().
  • Baris 12: membuat node baru dengan nama tblMahasiswa. Dimana node yang baru dibuat tersebut akan disimpan pada tblMahasiswaNode.
  • Baris 13: menumpuk / menimpa / mengganti node yang lama yaitu node childYangAkanDiUpdate dengan node baru yang ada pada tblMahasiswaNode.
  • Baris 14: membuat node baru dengan nama nim. Dimana node yang baru dibuat tersebut akan disimpan pada nimNode.
  • Baris 14: memasukkan isi dari TextBox txtNim ke dalam nimNode.
  • Baris 16: menambahkan / memasukkan / menyisipkan node yang ada pada nimNode, pada posisi node paling akhir (last child) dari node tblMahasiswaNode.
  • Baris 17: membuat node baru dengan nama nama. Dimana node yang baru dibuat tersebut akan disimpan pada namaNode.
  • Baris 18: memasukkan isi dari TextBox txtNama ke dalam namaNode.
  • Baris 19: menambahkan / memasukkan / menyisipkan node yang ada pada namaNode, pada posisi node paling akhir (last child) dari node tblMahasiswaNode.
  • Baris 20: mendeklarasikan variabel boolean dengan nama hasil, yang berguna untuk menampung nilai kembalian dari method simpanKeFileXML().
  • Baris 21-23: periksa apakan variabel hasil, bernilai true. Jika benar, maka tampilkan pesan “Data berhasil diupdate”. Akan tetapi, jika salah, pesan yang akan tampil adalah “Data gagal diupdate”.
  • Baris 24: menampilkan pesan “Data yang akan diupdate tidak ada”.
  • Baris 26: memanggil method ResetSemua().

Klik dua kali pada cmdHapus, lalu ketikkan kode yang berikut ini.

private void cmdHapus_Click(object sender, EventArgs e)
        {
            XmlDocument xmlDoc = new XmlDocument();

            // read file XML            
            xmlDoc.Load("dataMahasiswa.xml");

            // ambil first child dari document xml (Child 'dbMahasiswa')                    
            XmlNode xmlRoot = xmlDoc.DocumentElement;

            string strNIM = txtNim.Text;

            ClassXML objClassXML = new ClassXML();
            bool dataDitemukan = objClassXML.cekApakahNIMAda(xmlRoot, strNIM);

            if (dataDitemukan == true)
            {
                XmlNode childYangAkanDiHapus = objClassXML.AmbilChildYangDimaksud(xmlRoot, strNIM);
                xmlRoot.RemoveChild(childYangAkanDiHapus);

                // simpan ke dalam file XML                
                bool hasil = objClassXML.simpanKeFileXML(xmlDoc, "dataMahasiswa.xml");
                if (hasil == true)
                    MessageBox.Show("Data berhasil dihapus", "PESAN");
                else
                    MessageBox.Show("Data gagal dihapus", "PESAN");
            }
            else { MessageBox.Show("Data yang akan dihapus tidak ada", "PESAN"); }

            ResetSemua();
        }

Keterangan Program:

  • Baris 3-8: keterangannya sama dengan baris 3-8 pada langkah sebelumnya
  • Baris 9: periksa apakah variabel dataDitemukan bernilai false. Jika benar, maka jalankan baris perintah 11-16 Namun, jika salah, jalankan baris perintah 18.
  • Baris 11: membuat node dengan nama childYangAkanDiHapus, yang berguna untuk menampung nilai kembalian yang berupa node, hasil dari method AmbilChildYangDimaksud().
  • Baris 12: menghapus node yang ada pada childYangAkanDiHapus, dengan menggunakan method RemoveChild().
  • Baris 13: mendeklarasikan variabel boolean dengan nama hasil, yang berguna untuk menampung nilai kembalian dari method simpanKeFileXML().
  • Baris 14-16: periksa apakan variabel hasil, bernilai true. Jika benar, maka tampilkan pesan “Data berhasil dihapus”. Akan tetapi, jika salah, pesan yang akan tampil adalah “Data gagal dihapus”.
  • Baris 18: menampilkan pesan “Data yang akan dihapus tidak ada”.
  • Baris 19: memanggil method ResetSemua().

Pada langkah ini kita akan membuat kode yang berguna untuk memanggil method ResetSemua(). Klik dua kali cmdReset, lalu ketikkan kodenya.

private void cmdReset_Click(object sender, EventArgs e)
        {
            ResetSemua();
        }

Dan kode berikut berguna untuk menutup aplikasi, yaitu kode untuk tombol dengan nama cmdKeluar.

private void cmdKeluar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

Sekarang kita akan membuat method yang akan kita gunakan pada program kita tadi. Method yang pertama akan kita buat adalah XMLKeDataGrid(). Berguna untuk menampilkan isi file XML ke dalam komponen DataGrid dgTabelMhs. Berikut kodenya.

private void XMLKeDataGrid(string fileXML)
        {
            DataSet objDataSet = new DataSet();            
            objDataSet.ReadXml(fileXML, XmlReadMode.InferSchema);            
            dgTabelMhs.SetDataBinding(objDataSet, "tblMahasiswa");
        }

Keterangan Program:

  • Baris 3: membuat objek baru dengan nama objDataSet, yang berguna sebagai media penampung data sementara di dalam memory.
  • Baris 4: membaca isi file XML. Nama file XML yang akan dibaca isinya terdapat pada variabel fileXML. Dan mode pembacaan file XML yang digunakan adalah InferSchema.
  • Selanjutnya method yang akan kita buat adalah ResetSemua(). Berguna untuk mengembalikan setting / kondisi beberapa komponen, kembali seperti keadaan pada saat program pertama kali dijalankan. Berikut kodenya.
private void ResetSemua()
        {
            txtNim.Text = "";
            txtNim.Focus();
            txtNim.ReadOnly = false;
            txtNim.BackColor = Color.FromKnownColor(KnownColor.Window);

            txtNama.Text = "";
            txtNama.Enabled = false;

            cmdSimpan.Enabled = false;
            cmdUpdate.Enabled = false;
            cmdHapus.Enabled = false;

            XMLKeDataGrid("dataMahasiswa.xml");
        }

Keterangan Program:

  • Baris 3-6: adalah pengaturan untuk komponen TextBox txtNim. Pengaturan yang dilakukan adalah sebagai berikut. Kosongkan isinya, ubah fokus kursor ke txtNim, ubah statusnya menjadi TIDAK ReadOnly lagi, dan terakhir ubah warna background-nya menjadi warna background client area dari window.
  • Baris 7 & 8: adalah pengaturan untuk komponen TextBox txtNama. Pengaturan yang dilakukan adalah sebagai berikut. Kosongkan isinya, dan non-aktifkan komponen tersebut.
  • Baris 9-11: non-aktifkan komponen tombol, yaitu cmdSimpan, cmdUpdate, dan cmdHapus.
  • Baris 12: panggil method XMLKeDataGrid(). Dengan file XML yang digunakan adalah dataMahasiswa.xml.

Selanjutny kita akan membuat kelas baru Langkah-langkah untuk membuat class sendiri adalah sebagai berikut:

Buat class baru dengan  menekan kombinasi tombol Ctrl + Shift + A. Maka akan tampil kotak dialog Add New Item. lalu pilih Class dan isi dengan nama ClassXML.cs, klik tombol Add.

Setelah itu akan tercipta file class baru yang kita buat tadi. Tambahkan kode ini pada bagian awal, sebelum namespace.

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace cobaXMLDenganInput
{

Keterangan Program:

  • Baris 4: memanggil namaspace System.Windows.Forms, yang bertugas menangani komponen-komponen form.
  • Baris 5: memanggil namaspace System.Xml, yang bertugas menangani method-method yang berhubungan dengan file XML.

Selanjutnya, pada class classXML tersebut akan kita buat tiga buah method, masing-masing dengan nama sebagai berikut. simpanKeFileXML(), cekApakahNIMAda(), dan yang terakhir adalah method AmbilChildYangDimaksud()

Method pertama yang akan dibuat adalah simpanKeFileXML(). Ketikkan kode berikut di dalam class classXML.

public bool simpanKeFileXML(XmlDocument xmlDoc, string
namaFileXML)
{
XmlTextWriter objSimpanXML = new
XmlTextWriter(namaFileXML, null);
objSimpanXML.Formatting = Formatting.Indented;
objSimpanXML.Indentation = 4;
try
{
xmlDoc.Save(objSimpanXML);
return true;
}
catch (XmlException e)
{
MessageBox.Show(e.ToString(), “Error!!!”);
return false;
}
finally
{
objSimpanXML.Close();
}
}

Keterangan Program:

  • Baris 1: membuat method dengan nama simpanKeFileXML(), yang memiliki nilai kembalian bertipe boolean, dan dua buah parameter yaitu xmlDoc dan namaFileXML.
  • Baris 3: membuat objek dengan nama objSimpanXML, yang bertugas untuk menulis ke dalam file XML. Variabel namaFileXML, berisikan nama file XML yang akan kita tulisi. Dan parameter null, digunakan karena encoding yang digunakan pada file XML kita adalah utf-8 (coba lihat lagi file XML dataMahasiswa.xml).
  • Baris 4: menentukan bagaimana format keluaran dari file XML. Dan karena yang format yang dipakai adalah Formatting.Indented, maka output file XML kita, akan tersusun dengan pola menjorok ke dalam (indent) pada setiap level / child / node-nya.
  • Baris 5: men-set nilai indent sebesar 4 point.
  • Baris 6-15: mencoba untuk menyimpan file XML. Jika sukses, kembalikan nilai true. Akan tetapi, jika gagal, tampilkan pesan kesalahan / error yang terjadi, dan juga kembalikan nilai false.
  • Baris 16-19: baris ini akan tetap dijalankan walau apapun yang terjadi. Kode yang dieksekusi berguna untuk menutup XmlTextWriter yang bernama objSimpanXML.

Selanjutnya method yang akan dibuat adalah cekApakahNIMAda(), yang berguna untuk memeriksa apakah data dengan nim yang tercantum pada parameter strNIM1 sudah ada atau belum. Ketikkan kode berikut tepat di bawah method yang telah kita buat pada langkah sebelumnya.

private bool dataDitemukan = false;
public bool cekApakahNIMAda(XmlNode xmlRoot, string
strNIM1)
{
int i;
dataDitemukan = false;
for (i = 0; i < xmlRoot.ChildNodes.Count; i++)
{
if (xmlRoot.ChildNodes.Item(i).NodeType == XmlNodeType.
Element)
{
XmlNode data = xmlRoot.ChildNodes.Item(i);
string strNIM2 = data.ChildNodes.Item(0).FirstChild.
Value;
if (strNIM1 == strNIM2)
{
dataDitemukan = true;
break;
}
}
}
return dataDitemukan;
}

Keterangan Program:

  • Baris 1: mendeklarasikan variabel boolean dengan nama dataDitemukan, dan langsung di-set dengan nilai false.
  • Baris 2: membuat method dengan nama cekApakahNIMAda(), yang memiliki nilai kembalian bertipe boolean, dan dua buah parameter yaitu xmlRoot dan strNIM1.
  • Baris 4: mendeklarasikan variabel integer dengan nama i.
  • Baris 5: men-set variabel dataDitemukan dengan nilai false.
  • Baris 6: lakukan proses perulangan sebanyak jumlah child yang ada pada xmlRoot.
  • Baris 8: periksa apakah tipe node pada posisi i adalah Element. Jika benar, maka jalankan kode pada baris 10-16.
  • Baris 10: membuat variabel penampung node dengan nama data. Lalu ambil child / node dari xmlRoot pada posisi / index i.
  • Baris 11: ambil isi / value dari child nim (child nim ditunjukkan oleh Item(0)). Yang ada pada node data. Lalu simpan ke variabel strNIM2.
  • Baris 12-16: bandingkan apakah isi dari variabel strNIM1 sama dengan isi variabel strNIM2. Jika sama, set nilai variabel dataDitemukan menjadi true, lalu hentikan proses perulangan dengan menggunakan perintah break.
  • Baris 19: kembalikan nilai dari variabel dataDitemukan.

Dan untuk yang terakhir, method yang akan dibuat adalah Am ilChildYangDimaksud(), yang berguna untuk mengambil child / node yang berada pada posisi yang benar. Posisi node tersebut tergantung pada proses perbandingan parameter strNIM1 dengan strNIM2.

public XmlNode AmbilChildYangDimaksud(XmlNode xmlRoot,
string strNIM1)
{
XmlNode childYangDiKehendaki = xmlRoot;
int i;
for (i = 0; i < xmlRoot.ChildNodes.Count; i++)
{
if (xmlRoot.ChildNodes.Item(i).NodeType == XmlNodeType.
Element)
{
XmlNode data = xmlRoot.ChildNodes.Item(i);
string strNIM2 = data.ChildNodes.Item(0).FirstChild.
Value;
if (strNIM1 == strNIM2)
{
childYangDiKehendaki = data;
break;
}
}
}
return childYangDiKehendaki;
}

Keterangan Program:

  • Baris 1: membuat method dengan nama AmbilChildYangDimaksud(), yang memiliki nilai kembalian XmlNode, dan dua buah parameter yaitu xmlRoot dan strNIM1.
  • Baris 3: isi node childYangDiKehendaki dengan xmlRoot. Supaya pada saat return selalu ada isinya.
  • Baris 4: mendeklarasikan variabel integer dengan nama i.
  • Baris 5: lakukan proses perulangan sebanyak jumlah child yang ada pada xmlRoot.
  • Baris 7: periksa apakah tipe node pada posisi i adalah Element. Jika benar, maka jalankan kode pada baris 10-16.
  • Baris 9: membuat variabel penampung node dengan nama data. Lalu ambil child / node dari xmlRoot pada posisi / index i.
  • Baris 10: ambil isi / value dari child nim (child nim ditunjukkan oleh Item(0)). Yang ada pada node data. Lalu simpan ke variabel strNIM2.
  • Baris 11-15: bandingkan apakah isi dari variabel strNIM1 sama dengan isi variabel strNIM2. Jika sama, set nilai variabel dataDitemukan menjadi true, lalu hentikan proses perulangan dengan menggunakan perintah break.
  • Baris 18: kembalikan node yang ada pada childYangDiKehendaki.

Sebelum program dijalankan, copy-kan terlebih dahulu file dataMahasiswa.xml, ke dalam folder debug yang ada pada folder project kita. Tekan tombol F5. Maka program akan dijalankan maka akan tampil seperti gambar di bawah ini.

Setelah tampil seperti gambar di atas, untuk memasukkan data baru, silahkan isi NIM dan Nama. Lalu tekan tombol Simpan Baru .seperti gambar di bawah ini.

Untuk meng-update data, masukkan NIM di NIM, tekan tombol Cari. Jika data ditemukan, silahkan ubah yang diperlukan. Yang bisa diubah hanya Nama saja, NIM tidak bisa. Setelah itu tekan tombol Update. Seperti gambar di bawah ini.

Untuk menghapus data, masukkan NIM di NIM, tekan tombol Cari. Jika data ditemukan, tekan tombol Hapus. Seperti gambar di bawah ini

 

Tekan tombol Reset, untuk kembali ke kondisi awal program.

Tekan tombol Keluar, untuk menutup aplikasi.

 Sekian Tutorial kali ini, sampai jumpa di tutorial selanjutnya, Salam Jago Coding, kalian Luar Biasa :D

 

 

 

 


About Author

Sendy PK

Saya adalah Programmer yang memiliki impian untuk menguasai dunia kunjungi situs pribadi saya di www.spk.my.id dan Online Shop saya di www.spkshop.web.id


Comment & Discussions

    Please LOGIN before if you want to give the comment.