Dalam artikel sebelumnya,
saya pernah singgung bagaimana membuat query SQL untuk menampilkan
Indeks Prestasi (IP) mahasiswa dalam setiap semester yang telah
ditempuhnya. Hasil query ini nanti bisa digunakan untuk melihat progress
atau perkembangan prestasi akademik mahasiswa. Oleh karena itu
biasanya, query ini sering digunakan dalam suatu sistem informasi
akademik.
Selanjutnya dalam artikel ini, saya akan mencoba memaparkan bagaimana
menampilkan hasil query SQL di atas ke dalam bentuk grafik (chart)
menggunakan script PHP, atau dengan kata lain artikel ini akan membahas
bagaimana membuat grafik (chart) untuk menampilkan perkembangan IP
setiap semester mahasiswa.
Mengapa harus ditampilkan dalam bentuk grafik (chart)? ya… karena
dengan grafik, seseorang dapat dengan mudah membaca suatu informasi.
Dengan grafik, seseorang dapat dengan mudah mengetahui apakah prestasi
akademiknya semakin turun, ataukah naik atau sedang-sedang saja.
OK deh… trus bagaimana skenario dari script ini? adapun skenarionya
adalah pertama akan disajikan terlebih dahulu daftar (list) dari
mahasiswa yang ada. Kemudian disetiap mahasiswa terdapat link untuk
melihat grafik IP nya. Berikut ini adalah gambarannya.
Apabila link VIEW tersebut diklik, maka akan tampil grafik IP untuk setiap semesternya
OK.. paham ya skenarionya? Nah.. selanjutnya kita mulai rancang
tabel-tabel dan field yang diperlukan untuk databasenya. Pada
prinsipnya, struktur tabelnya sama seperti di artikel sebelumnya.
Terdapat 3 tabel yang kita perlukan untuk studi kasus ini, yaitu
‘mhs’ (tabel mahasiswa), ‘mk’ (tabel matakuliah) dan ‘ambilmk’ (tabel
pengambilan matakuliah)
1.
CREATE
TABLE
mhs (
2.
nim
varchar
(5),
3.
nama
varchar
(20),
4.
PRIMARY
KEY
(nim)
5.
)
1.
CREATE
TABLE
mk (
2.
kodeMK
varchar
(5),
3.
namaMK
varchar
(20),
4.
sks
int
(11),
5.
PRIMARY
KEY
(kodeMK)
6.
)
1.
CREATE
TABLE
ambilmk (
2.
nim
varchar
(5),
3.
kodeMK
varchar
(5),
4.
nilai
float
,
5.
smt
varchar
(10)
default
NULL
,
6.
tahun
varchar
(9)
default
NULL
,
7.
PRIMARY
KEY
(nim,kodeMK)
8.
)
Sedangkan untuk sampel recordnya, kita gunakan data seperti di bawah ini
1.
INSERT
INTO
mhs
VALUES
(
'M002'
,
'DWI AMALIA FITRIANI'
);
2.
INSERT
INTO
mhs
VALUES
(
'M003'
,
'FAZA FAUZAN'
);
1.
INSERT
INTO
mk
VALUES
(
'MK01'
,
'DATABASE'
, 3);
2.
INSERT
INTO
mk
VALUES
(
'MK02'
,
'PEMROGRAMAN DASAR'
, 2);
3.
INSERT
INTO
mk
VALUES
(
'MK03'
,
'PEMROGRAMAN WEB'
, 4);
4.
INSERT
INTO
mk
VALUES
(
'MK04'
,
'OOP'
, 3);
5.
INSERT
INTO
mk
VALUES
(
'MK05'
,
'PEMROGRAMAN VISUAL'
, 3);
01.
INSERT
INTO
ambilmk
VALUES
(
'M002'
,
'MK01'
, 3,
'GANJIL'
,
'2008/2009'
);
02.
INSERT
INTO
ambilmk
VALUES
(
'M002'
,
'MK02'
, 2,
'GANJIL'
,
'2008/2009'
);
03.
INSERT
INTO
ambilmk
VALUES
(
'M002'
,
'MK03'
, 2,
'GENAP'
,
'2008/2009'
);
04.
INSERT
INTO
ambilmk
VALUES
(
'M002'
,
'MK04'
, 2,
'GENAP'
,
'2008/2009'
);
05.
INSERT
INTO
ambilmk
VALUES
(
'M002'
,
'MK05'
, 4,
'GANJIL'
,
'2009/2010'
);
06.
INSERT
INTO
ambilmk
VALUES
(
'M003'
,
'MK01'
, 2,
'GANJIL'
,
'2008/2009'
);
07.
INSERT
INTO
ambilmk
VALUES
(
'M003'
,
'MK02'
, 3,
'GANJIL'
,
'2008/2009'
);
08.
INSERT
INTO
ambilmk
VALUES
(
'M003'
,
'MK03'
, 3,
'GENAP'
,
'2008/2009'
);
09.
INSERT
INTO
ambilmk
VALUES
(
'M003'
,
'MK04'
, 2,
'GENAP'
,
'2008/2009'
);
10.
INSERT
INTO
ambilmk
VALUES
(
'M003'
,
'MK05'
, 3,
'GANJIL'
,
'2009/2010'
);
mhs.php
01.
02.
03.
mysql_connect(
"dbhost"
,
"dbuser"
,
"dbpass"
);
04.
mysql_select_db(
"dbname"
);
05.
06.
echo
"
Data Mahasiswa
"
;
07.
08.
$query
=
"SELECT * FROM mhs"
;
09.
$hasil
= mysql_query(
$query
);
10.
11.
echo
"";
12.
echo
"
"
;
13.
while
(
$data
= mysql_fetch_array(
$hasil
))
14.
{
15.
echo
"
16.
17.
18.
19.
";
20.
}
21.
22.
echo
"
NIM Nama Mhs Statistik IP
".$data['nim']."
".$data['nama']."
'statistik.php?nim=".$data['
nim
']."'
>View
"
;
23.
24.
?>
Perhatikan script mhs.php di atas! Untuk menampilkan list mahasiswa
kita cukup membuat query SQL yang memanfaatkan tabel ‘mhs’. Kemudian di
setiap baris data mahasiswa dalam tabel, kita buat link ‘VIEW’ yang
diarahkan ke script ‘statistik.php’. Link ke script ini kita sertakan
parameter ‘?nim=…’ karena NIM ini nanti digunakan sebagai acuan untuk
membuat grafik IP si mahasiswa yang memiliki NIM tersebut. Hasil dari
script mhs.php ini tampak seperti pada gambar pertama di atas.
Selanjutnya kita membuat script statistik.php nya
statistik.php
01.
02.
03.
mysql_connect(
"dbhost"
,
"dbuser"
,
"dbpass"
);
04.
mysql_select_db(
"dbname"
);
05.
06.
// membaca nim dari parameter
07.
$nim
=
$_GET
[
'nim'
];
08.
09.
// query untuk menampilkan NIM dan Nama Mahasiswa berdasarkan NIM
10.
$query
=
"SELECT * FROM mhs WHERE nim = '$nim'"
;
11.
$hasil
= mysql_query(
$query
);
12.
$data
= mysql_fetch_array(
$hasil
);
13.
14.
echo
"
Statistik Indeks Prestasi
"
;
15.
16.
echo
"";
17.
echo
"
"
;
18.
echo
"
"
;
19.
echo
"
NIM : ".
$data
[
'nim'
].
"
Nama Mhs : ".
$data
[
'nama'
].
"
"
;
20.
21.
// menampilkan image grafik IP dari mahasiswa berdasarkan NIM
22.
echo
""
;
23.
24.
?>
Script statistik.php di atas pada prinsipnya adalah menggabungkan
antara informasi si mahasiswa (NIM dan Nama) dengan grafik IP nya. Untuk
menampilkan informasi si mahasiswa, cukup kita buat query SQL SELECT * FROM mhs WHERE nim = '$nim'
, dan grafiknya kita embed menggunakan tag
. Script ‘stat.php’ adalah script untuk membuat grafiknya. Mengapa dalam tag
ini perlu ada parameter ‘?nim=…’ nya? Ya… karena NIM itu nanti juga
digunakan untuk acuan dalam membuat script grafik IP dari mahasiswa
tersebut.
Mungkin Anda bertanya, mengapa tidak dijadikan satu saja antara
script untuk menampilkan informasi mahasiswa dengan script untuk
grafiknya? He.. 3x jawabannya adalah ‘tidak bisa’. Karena script
stat.php ini akan menghasilkan output berupa image. Sedangkan informasi
mahasiswanya (statistik.php) outputnya berupa dokumen HTML sehingga
keduanya tidak bisa langsung dipadukan menjadi satu. Solusinya adalah
mengembed script grafiknya ke dalam script dokumen HTML menggunakan tag
.
Trus… kita akan membuat script grafiknya. Untuk grafik, kita akan menggunakan JpGraph karena free and mudah digunakan Mau menggunakan Open Flash Chart nya yang digunakan KPU, gak jadi, coz it’s very ribet Ane pengin yang simpel-simpel aja deh.
Untuk grafiknya, seperti yang kita lihat pada sampel di atas, akan
kita pilih grafik yang merupakan gabungan dalam bentuk batang (bar
chart) dan garis (line chart).
stat.php
01.
02.
03.
mysql_connect(
"dbhost"
,
"dbuser"
,
"dbpass"
);
04.
mysql_select_db(
"dbname"
);
05.
06.
// membaca parameter NIM dari
07.
$nim
=
$_GET
[
'nim'
];
08.
09.
// menyiapkan array untuk menyimpan smt dan tahun
10.
$smtThn
=
array
();
11.
12.
// menyiapkan array untuk menyimpan ip
13.
$ip
=
array
();
14.
15.
// memanggil modul JpGraph untuk membuat grafik batang dan garis
16.
// modul ini terletak dalam folder bernama 'modul'
17.
include
(
"modul/jpgraph.php"
);
18.
include
(
"modul/jpgraph_bar.php"
);
19.
include
(
"modul/jpgraph_line.php"
);
20.
21.
// query sql untuk mendapatkan IP setiap semester dari mahasiswa
22.
$query
= "SELECT smt, tahun, sum(nilai * sks)/sum(sks)
as
ip
23.
FROM ambilmk, mk
24.
WHERE ambilmk.kodemk = mk.kodemk AND ambilmk.nim =
'$nim'
25.
GROUP BY tahun, smt";
26.
27.
$hasil
= mysql_query(
$query
);
28.
while
(
$data
= mysql_fetch_array(
$hasil
))
29.
{
30.
// menyimpan data semester dan tahun hasil query ke dalam array $smtThn
31.
// smt dan tahun digabung dalam satu string untuk ditampilkan dalam sumbu-y grafik
32.
array_unshift
(
$smtThn
,
$data
[
'smt'
].
" "
.
$data
[
'tahun'
]);
33.
34.
// menyimpan data IP hasil query ke dalam array $ip
35.
array_unshift
(
$ip
,
$data
[
'ip'
]);
36.
}
37.
38.
// membuat image ukuran 500 x 300 pixel
39.
$graph
=
new
Graph(500,300,
"auto"
);
40.
41.
// membuat skala grafik. Nilai 4 di sini adalah nilai maksimum sumbu Y nya, mengingat IP maks adalah 4
42.
$graph
->SetScale(
"textlin"
, 1, 4);
43.
44.
// membuat bayangan dari image
45.
$graph
->SetShadow();
46.
47.
// mengatur batas margin grafik
48.
$graph
->SetMargin(50,50,40,40);
49.
50.
// membuat bar plot dari data IP
51.
$barplot
=
new
BarPlot(
$ip
);
52.
53.
// membuat line plot dari data IP
54.
$lineplot
=
new
LinePlot(
$ip
);
55.
56.
// memberi warna merah pada bar plot
57.
$barplot
->SetFillColor(
"red"
);
58.
59.
// menampilkan value IP pada setiap bar
60.
$barplot
->value->show();
61.
62.
// mengatur tampilan value IP dengan format 1 digit desimal di belakang koma
63.
$barplot
->value->SetFormat(
"%3.1f"
);
64.
65.
// mengatur ketebalan garis pada lineplot
66.
$lineplot
->SetWeight(3);
67.
68.
// mengatur posisi ujung line plot supaya terletak di tengah-tengah bar
69.
$lineplot
->SetBarCenter();
70.
71.
// menampilkan barplot ke dalam image
72.
$graph
->Add(
$barplot
);
73.
74.
// menampilkan lineplot ke dalam image
75.
$graph
->Add(
$lineplot
);
76.
77.
// menampilkan smt dan tahun pada sumbu X
78.
$graph
->xaxis-> SetTickLabels(
$smtThn
);
79.
80.
// menampilkan title grafik
81.
$graph
->title->Set(
"Grafik Indeks Prestasi Mahasiswa"
);
82.
83.
// memberi label pada sumbu X
84.
$graph
->xaxis->title->Set(
"Semester"
);
85.
86.
// memberi label pada sumbu Y
87.
$graph
->yaxis->title->Set(
"Indeks Prestasi (IP)"
);
88.
89.
// mengatur jenis font pada title, label sumbu X dan label sumbu Y
90.
$graph
->title->SetFont(FF_FONT1,FS_BOLD);
91.
$graph
->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
92.
$graph
->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
93.
94.
// menampilkan output grafik
95.
$graph
->Stroke();
96.
?>
Catatan:
Query SQL untuk menghasilkan data IP setiap semester dari mahasiswa
untuk ditampilkan ke dalam grafik, sama dengan query SQL yang pernah
dibahas pada artikel sebelumnya.
Jika Anda ingin mendapatkan script di atas sekaligus modul JpGraph nya, maka dapat didownload di bawah ini.
[ Download Script ]
Selamat mencoba ya. Mudah-mudahan artikel ini bermanfaat bagi Anda
semuanya baik yang sedang belajar, maupun yang sedang mendapat project
membuat sistem informasi akademik Kalau sedang dapat project, jangan lupa bagi-bagi ya
EmoticonEmoticon