Tutorial CodeIgniter : Membuat Aplikasi Transkrip Nilai Sederhana (Sistem Akademik)

Tak terasa besok kita sudah dihadapkan kembali pada hari valentine. Satu hari dimana kata orang-orang yang sudah berpasangan itu indah. Di sisi lain, orang-orang yang sedang sendiri a.k.a jomblo seperti saya ini (bukan curhat lho yaw) cuma bisa bengong meratapi nasib jomblo yang berkepanjangan. Yaw….walaupun saya punya pacar, mungkin acaranya juga akan sama seperti acara apel di malam minggu biasanya. Jemput ke rumah pacar > jalan-jalan gak jelas > makan bareng > pulang (#haha). Daripada galau gak jelas mikirin valentine, mending kita isi dengan kegiatan positif seperti postingan saya kali ini, yang tidak lain dan tidak bukan yaitu, ngOding :D. Pada postingan kali ini, saya akan membagikan sedikit tutorial untuk menampilkan transkrip nilai perkuliahan. Masih berhubungan dengan tutorial sebelumnya, yaitu tentang aplikasi input kartu rencana studi. Kan gak lengkap rasanya, kalau pas KRS’an cuma bisa buka form rencana studi. Makanya saya tambahkan modul untuk melihat transkrip nilai yang diperoleh selama nangkring di bangku kuliah. Berikut tutorialnya, cekidot gan….

1. Karena masih berhubungan dengan aplikasi KRS yang saya posting kemarin, maka saya gunakan file-file framework yang kemarin. Controller, Model dan View-nya saya bedakan agar bisa dengan mudah ditambahkan oleh rekan-rekan yang mungkin sudah men-download file lengkap aplikasi KRS yang kemarin.

2. Kita buat terlebih dahulu class logic alias Controller-nya. Saya buat yang sederhana saja dengan 2 buah function, index() dan lihat_transkrip().

class Transkrip extends CI_Controller
{
	public function index()
	{
		$page=$this->uri->segment(3);
      	$limit=12;
		if(!$page):
		$offset = 0;
		else:
		$offset = $page;
		endif;

		$tot_hal = $this->transkrip_model->baca("pw_mst_mahasiswa");
		$config['base_url'] = base_url() . 'transkrip/index/';
        	$config['total_rows'] = $tot_hal->num_rows();
        	$config['per_page'] = $limit;
			$config['uri_segment'] = 3;
	    	$config['first_link'] = 'First';
			$config['last_link'] = 'Last';
			$config['next_link'] = 'Next';
			$config['prev_link'] = 'Previous';
       		$this->pagination->initialize($config);
		$dt["paginator"] =$this->pagination->create_links();

		$dt['siswa'] = $this->transkrip_model->baca_siswa($offset,$limit);
		$this->load->view('transkrip/daftar_siswa',$dt);
	}

	public function lihat_transkrip()
	{
		if ($this->uri->segment(3) === FALSE)
		{
				echo "<meta http-equiv='refresh' content='0; url=".base_url()."/transkrip'>";
		}
		else
		{
				$dt['nim'] = $this->uri->segment(3);
				$seleksi = array('nim' => $dt['nim']);
				$detail = $this->transkrip_model->baca_detail("pw_mst_mahasiswa",$seleksi);
				foreach($detail->result() as $d)
				{
					$dt["nama_mhs"] = $d->nama_mhs;
				}
				$dt['transkrip'] = $this->transkrip_model->transkrip_nilai($dt['nim']);
		}
		$this->load->view('transkrip/lihat_transkrip',$dt);
	}
}

3. Selanjutnya kita lanjutkan ke class business process alias Model-nya. Saya tambahkan 2 tabel, yaitu tabel nilai dan tabel bobot nilai agar perhitungan IPK menjadi lebih statis. Sebenarnya bisa saja kalau hanya menggunakan tabel nilai, tapi query database-nya menjadi lebih ruwet karena kita harus menggunakan fungsi CASE.

class Transkrip_Model extends CI_Model
{

	public function baca($tabel)
	{
		$q = $this->db->get($tabel);
		return $q;
	}

	public function baca_siswa($offset,$limit)
	{
		$q = $this->db->get("pw_mst_mahasiswa",$limit,$offset);
		return $q;
	}

	public function baca_detail($tabel,$seleksi)
	{
		$q = $this->db->get_where($tabel,$seleksi);
		return $q;
	}

	public function transkrip_nilai($nim){
		$q = $this->db->query("
			SELECT t_n.nim, m.nama_mhs, t_n.kode_mk, t_n.nama_mk, t_n.semester_ditempuh, t_n.jum_sks, t_n.grade, b.bobot, (
			t_n.jum_sks * b.bobot) AS NxB FROM
			(SELECT n.nim, n.kode_mk, mk.nama_mk, mk.jum_sks, n.semester_ditempuh, n.grade
			FROM eva_tr_nilai as n LEFT JOIN ja_mst_mk as mk ON n.kode_mk = mk.kode_mk
			WHERE n.nim = '$nim') as t_n
			LEFT JOIN eva_mst_bobot as b ON b.nilai = t_n.grade
			LEFT JOIN pw_mst_mahasiswa as m ON t_n.nim = m.nim
			ORDER BY t_n.semester_ditempuh
			");
		return $q;
	}
}

4. Dan terakhir, kita buat sebuah View untuk menampilkan transkrip nilai. Jika rekan-rekan ingin memodifikasinya sedikit, bisa juga digunakan untuk menampilkan kartu hasil studi yang dikelompokkan per semesternya.

	<table border="1" width="100%" style="border-collapse: collapse;" cellpadding="4">
	<tr bgcolor="#FFFFFF">
	<td align="center">No</td>
	<td align="center">Kode MK</td>
	<td align="center">Nama MK</td>
	<td align="center">Semester</td>
	<td align="center">SKS</td>
	<td align="center">Nilai</td>
	<td align="center">Bobot</td>
	<td align="center">SKS x Bobot</td>
	</tr>
	<?php
	$totalNB=0;
	$totalSKS=0;
	$no=1;

	foreach($transkrip->result_array() as $value)
	{
		echo '<tr>
			<td>'. $no.'</td>
			<td>'. $value['kode_mk'].'</td>
			<td>&nbsp;'. $value['nama_mk'].'</td>
			<td align="center">'.$value['semester_ditempuh'].'</td>
			<td align="center">'. $value['jum_sks'].'&nbsp;</td>
			<td align="center">'. $value['grade'].'</td>
			<td align="center">'. $value['bobot'].'</td>
			<td align="center">'. $value['NxB'].'</td>
		</tr>';

		$no++;
		if($value['grade'] != 'T') {
			$totalNB +=$value['NxB'];
			$totalSKS+=$value['jum_sks'];
		}
	}
	$ip = 0;
	if($totalNB !=0)
		$ip = round($totalNB/$totalSKS, 2);
	echo '
			<tr>
			<td colspan="4"><strong>Jumlah SKS yang telah diselesaikan : '.$totalSKS.' SKS</strong></td>
			<td colspan="4"><strong>IP Kumulatif : '.$ip.'</strong></td>
			</tr>';
	?>
	</table>

5. Silahkan di jalankan via localhost dan hasilnya akan seperti di bawah ini :

Mungkin yang terlihat ruwet ada di bagian Model, query database-nya join kemana-mana :D. Itu agar proses query-nya lebih dinamis, walaupun saya tau waktu komputasi dan beban kerja server akan meningkat jika menggunakan proses join yang banyak. OK deh, sekian dulu postingan saya di malam detik-detik menyambut hari valentine ini. Semoga bisa bermanfaat untuk rekan-rekan.

Happy Blogging and Keep Coding

Cheerrrsss….!!!!

[to_like]Download Aplikasi[/to_like]

13 comments

  1. Andis Reply

    sungguh kegiatan yang cukup positif… mantap Bli… ingin skli cepat bisa Kyak Bli… hebat coding dan yg terpenting mau berbagi…

  2. kifly Reply

    semoga bli selalu diberikan kesehatan dan dilancarkan rezekinya oleh Allah SWT.

  3. panega Reply

    wah keren nih buat belajar2 tambahan implementasi di codeigniter…

    mas buat tutorial membuat member_system gitu dong, kaya ion_auth tapi sayang saya bingung baca coding ion_auth..

    lagi pengen bikin user login sesuai dengan hak akses tertentu atau group tertentu..

    terimakasih..

  4. afrian Reply

    bli tutorial bikin report di CI donk…jd transkrip nilainya bisa di cetak bli

  5. zhul Reply

    mf nih mas mau tnya, tp nggk berhbungan dengan topik diatas…
    gmna caranya biar file/gmbar yg diupload bisa disimpan di database….????
    trus nama file/imagenya bisa ditampilkan dalam sbuah tabel…??? ada referensi nggk mas…???

  6. Agung Reply

    Mantap mas broo,,, sangat membantu sekali tutorialnya,,, terus lanjutkan,, hehehe,,, =)