Implementasi Algoritma C4.5 Untuk Perekrutan Karyawan Berbasis Android (Studi Kasus : Blackberry Service Center Medan)

A-1

LAMPIRAN A : LISTING PROGRAM

// Source Code MainActivity.java
package com.kurniawan.apptes;
import
import
import
import
import

android.content.Intent;
android.os.Bundle;
android.support.v7.app.AppCompatActivity;
android.view.View;
android.widget.Button;

public class MainActivity extends AppCompatActivity {
Button data,pengujian,help,about;
@Override

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
data = (Button) findViewById(R.id.bdata);
pengujian = (Button) findViewById(R.id.buji);
help = (Button) findViewById(R.id.bhelp);
about = (Button) findViewById(R.id.babout);
data.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, Data.class);
startActivity(intent);
}
});
pengujian.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,
Pengujian.class);
startActivity(intent);

}
});
help.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, Help.class);
startActivity(intent);
}
});
about.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, About.class);
startActivity(intent);
}
});
}
}

// Source Code Data.java


Universitas Sumatera Utara

A-2

package com.kurniawan.apptes;
import
import
import
import
import
import
import

android.app.Activity;
android.content.Intent;
android.os.Bundle;
android.view.View;
android.widget.AdapterView;
android.widget.ArrayAdapter;

android.widget.ListView;

import java.util.List;
public class Data extends Activity{
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.data);
this.listView = (ListView) findViewById(R.id.listView);
DatabaseHandler dbHandler = DatabaseHandler.getInstance(this);
dbHandler.open();
List nomor = dbHandler.getNomor();
ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, nomor);
this.listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView adapterView, View view,

int i, long l) {
Intent intent = new Intent(Data.this, Hasil.class);
String nama = listView.getItemAtPosition(i).toString();
intent.putExtra("nama", nama);
startActivity(intent);
}
});
}
}

// Source Code Pengujian.java
package com.kurniawan.apptes;
import
import
import
import
import
import
import
import

import

android.database.Cursor;
android.database.sqlite.SQLiteDatabase;
android.os.Bundle;
android.support.v7.app.AppCompatActivity;
android.util.Log;
android.view.View;
android.widget.Button;
android.widget.EditText;
android.widget.TextView;

import com.kurniawan.apptes.c45Algorithm.Atribut;
import com.kurniawan.apptes.c45Algorithm.Nilai;
import
import
import
import

java.util.ArrayList;

java.util.HashMap;
java.util.List;
java.util.Map;

public class Pengujian extends AppCompatActivity {
DatabaseOpenHelper dbHelper;

Universitas Sumatera Utara

A-3

private static String[] listField = {"Pendidikan_Terakhir",
"Pengalaman_Bekerja", "Psikotes", "Intellegensi"};
private static Integer[] constAtribut = {0, 0, 0, 0,
1, 1,
2, 2, 2, 2, 2, 2, 2, 2,
3, 3, 3, 3
};
private static String[] constNilai = {"SMA", "D1", "D3", "S1",
"Ya", "Tidak",

"0", "1", "2", "3", "4", "5", "6", "7",
"0", "1", "2", "3"
};
Nilai keterangan;
List listAtribut;
List field;
List value;
Map inputanUser;
private Button btnCek, btnSave, btnClear;
private EditText etNama, etAlamat, etTelp, etPendidikan, etPengalaman,
etIntellegensi, etPsikotes;
private TextView tvHasil;
SQLiteDatabase database;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pengujian);
btnCek = (Button) findViewById(R.id.btn_cek);
btnSave = (Button) findViewById(R.id.btn_save);
btnClear = (Button) findViewById(R.id.btn_clr);

etNama = (EditText) findViewById(R.id.et_nama);
etAlamat = (EditText) findViewById(R.id.et_alamat);
etTelp = (EditText) findViewById(R.id.et_telp);
etPendidikan = (EditText) findViewById(R.id.et_pendidikan);
etPengalaman = (EditText) findViewById(R.id.et_pengalaman);
etIntellegensi = (EditText) findViewById(R.id.et_intellegensi);
etPsikotes = (EditText) findViewById(R.id.et_psikotes);
tvHasil = (TextView) findViewById(R.id.tv_hasilProses);
dbHelper = new DatabaseOpenHelper(this);
DatabaseHandler dbHandler = DatabaseHandler.getInstance(this);
dbHandler.open();
database = dbHandler.database;
btnCek.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
clear();
inputanUser.put("Pendidikan_Terakhir",
etPendidikan.getText().toString());
inputanUser.put("Pengalaman_Bekerja",

etPengalaman.getText().toString());
inputanUser.put("Psikotes",
etPsikotes.getText().toString());
inputanUser.put("Intellegensi",
etIntellegensi.getText().toString());
for(String field : listField){

Universitas Sumatera Utara

A-4

Atribut n = new Atribut(field);
listAtribut.add(n);
}
for(int i = 0; i < constNilai.length; i++){
try {
Nilai n = new Nilai(listField[constAtribut[i]],
constNilai[i]);
n.AmbilDariDataSet(database, field, value);
n.HitungEntropy();

listAtribut.get(constAtribut[i]).nilai.add(n);
} catch (Exception e){
}
}
c45Algorithm();
btnSave.setVisibility(View.VISIBLE);
btnClear.setVisibility(View.VISIBLE);
} catch (Exception e){
Log.d("Exception", e.toString());
}
}
});
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final SQLiteDatabase db = dbHelper.getWritableDatabase();
db.execSQL("INSERT INTO DataPelamar (No, Nama, Alamat, Telp,
Pendidikan_Terakhir, Pengalaman_Bekerja, Psikotes, Intellegensi, Keterangan)
VALUES ('"+ nomorId() +"', '" +
etNama.getText().toString()+"', '" +
etAlamat.getText().toString()+"', '"+
etTelp.getText().toString()+"', '"+
etPendidikan.getText().toString()+"', '"+
etPengalaman.getText().toString()+"', '"+
etPsikotes.getText().toString()+"', '"+
etIntellegensi.getText().toString()+"', '" +
tvHasil.getText().toString()+"')");
}
});
}
int nomorId() {
int nomor = 0;
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT MAX(No) FROM DataPelamar", null);
if (cursor.moveToFirst()) {
nomor = cursor.getInt(0);
}
return nomor + 1;
}
void clear(){
inputanUser
field = new
value = new
listAtribut
}

= new HashMap();
ArrayList();
ArrayList();
= new ArrayList();

void c45Algorithm(){
keterangan = new Nilai("*", "*");
keterangan.AmbilDariDataSet(database, field, value);
keterangan.HitungEntropy();
if(listAtribut.size() == 0){

Universitas Sumatera Utara

A-5

if(keterangan.getSumYa() > 0){
tvHasil.setText("LULUS");
return;
}
else if(keterangan.getSumTidak() > 0){
tvHasil.setText("TIDAK LULUS");
return;
}
}
Atribut bestGain = new Atribut();
Double maxGain = new Double(Double.MIN_VALUE);
for(Atribut n : listAtribut){
n.HitungGain(keterangan.getEntropy(), keterangan.getSumNilai());
if(maxGain < n.gain || listAtribut.indexOf(n) == 0){
maxGain = n.gain;
bestGain = n;
}
Log.d("TRACE", n.nama + " GAIN : " + n.gain);
}
String userValue = inputanUser.get(bestGain.nama);
Nilai userNilai = new Nilai();
for(Nilai n : bestGain.nilai){
if(n.getNama().equals(userValue)){
userNilai = n;
}
}
if(userNilai.getEntropy() != 0){
field.add(bestGain.nama);
value.add(userValue);
int i = 0;
for(int index = 0; index < listAtribut.size(); index++){
if(listAtribut.get(index).nama.equals(bestGain.nama)){
i = index;
}
}
listAtribut.remove(i);
c45Algorithm();
} else {
if(userNilai.getSumYa() > 0){
tvHasil.setText("DATA TERSEBUT LULUS");
}
else if(userNilai.getSumTidak() > 0){
tvHasil.setText("DATA TERSEBUT TIDAK LULUS");
}
}
}
}

//Source Code Edit.java
package com.kurniawan.apptes;
import
import
import
import
import
import
import
import
import

android.app.Activity;
android.database.Cursor;
android.database.sqlite.SQLiteDatabase;
android.os.Bundle;
android.util.Log;
android.view.View;
android.widget.Button;
android.widget.EditText;
android.widget.TextView;

Universitas Sumatera Utara

A-6

import com.kurniawan.apptes.c45Algorithm.Atribut;
import com.kurniawan.apptes.c45Algorithm.Nilai;
import
import
import
import

java.util.ArrayList;
java.util.HashMap;
java.util.List;
java.util.Map;

public class Edit extends Activity{
private static String[] listField = {"Pendidikan_Terakhir",
"Pengalaman_Bekerja", "Psikotes", "Intellegensi"};
private static Integer[] constAtribut = {0, 0, 0, 0,
1, 1,
2, 2, 2, 2, 2, 2, 2, 2,
3, 3, 3, 3
};
private static String[] constNilai = {"SMA", "D1", "D3", "S1",
"Ya", "Tidak",
"0", "1", "2", "3", "4", "5", "6", "7",
"0", "1", "2", "3"
};
Nilai keterangan;
List listAtribut;
List field;
List value;
Map inputanUser;
private Button btnCek, btnSave, btnClear;
SQLiteDatabase database;
DatabaseOpenHelper dbHelper;
Cursor cursor;
EditText nama, alamat, telp, pend, pengalaman, psikotes, intellegensi;
TextView ket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit);
btnCek = (Button) findViewById(R.id.editCekBtn);
btnSave = (Button) findViewById(R.id.editSaveBtn);
btnClear = (Button) findViewById(R.id.editClrBtn);
nama = (EditText) findViewById(R.id.editNamaTxt);
alamat = (EditText) findViewById(R.id.editAlamatTxt);
telp = (EditText) findViewById(R.id.editTelpTxt);
pend = (EditText) findViewById(R.id.editPendTxt);
pengalaman = (EditText) findViewById(R.id.editPengalamanTxt);
intellegensi = (EditText) findViewById(R.id.editIntTxt);
psikotes = (EditText) findViewById(R.id.editPsikotesTxt);
ket = (TextView) findViewById(R.id.editHasilTxt);
final String namaIntent = getIntent().getStringExtra("primKey");
dbHelper = new DatabaseOpenHelper(this);
final SQLiteDatabase db = dbHelper.getReadableDatabase();
cursor = db.rawQuery("SELECT * FROM DataPelamar WHERE No = '" +
namaIntent + "'", null);
cursor.moveToFirst();
if (cursor.getCount() > 0) {
cursor.moveToPosition(0);
nama.setText(cursor.getString(1).toString());
alamat.setText(cursor.getString(2).toString());
telp.setText(cursor.getString(3).toString());
pend.setText(cursor.getString(4).toString());

Universitas Sumatera Utara

A-7

pengalaman.setText(cursor.getString(5).toString());
psikotes.setText(cursor.getString(6).toString());
intellegensi.setText(cursor.getString(7).toString());
ket.setText(cursor.getString(8).toString());
}
btnCek.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
clear();
inputanUser.put("Pendidikan_Terakhir",
pend.getText().toString());
inputanUser.put("Pengalaman_Bekerja",
pengalaman.getText().toString());
inputanUser.put("Psikotes",
psikotes.getText().toString());
inputanUser.put("Intellegensi",
intellegensi.getText().toString());
for(String field : listField){
Atribut n = new Atribut(field);
listAtribut.add(n);
}
for(int i = 0; i < constNilai.length; i++){
try {
Nilai n = new Nilai(listField[constAtribut[i]],
constNilai[i]);
n.AmbilDariDataSet(database, field, value);
n.HitungEntropy();
listAtribut.get(constAtribut[i]).nilai.add(n);
} catch (Exception e){
}
}
c45Algorithm();
btnSave.setVisibility(View.VISIBLE);
btnClear.setVisibility(View.VISIBLE);
ket.setVisibility(View.VISIBLE);
} catch (Exception e){
Log.d("Exception", e.toString());
}
}
});
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final SQLiteDatabase db = dbHelper.getWritableDatabase();
db.execSQL("UPDATE DataPelamar SET Nama = '"+
nama.getText().toString() +"'," +
" Alamat = '"+ alamat.getText().toString() +"', " +
" Telp = '"+ telp.getText().toString() +"'," +
" Pendidikan_Terakhir = '"+ pend.getText().toString()
+"'," +
" Pengalaman_Bekerja = '"+
pengalaman.getText().toString() +"'," +
" Psikotes = '"+ psikotes.getText().toString() +"',"
+
" Intellegensi = '"+
intellegensi.getText().toString() +"'," +
" Keterangan = '"+ ket.getText().toString() +"' WHERE
No = '"+ namaIntent +"'");

Universitas Sumatera Utara

A-8

}
});
}
void clear(){
inputanUser
field = new
value = new
listAtribut
}

= new HashMap();
ArrayList();
ArrayList();
= new ArrayList();

void c45Algorithm(){
keterangan = new Nilai("*", "*");
keterangan.AmbilDariDataSet(database, field, value);
keterangan.HitungEntropy();
if(listAtribut.size() == 0){
if(keterangan.getSumYa() > 0){
ket.setText("LULUS");
return;
}
else if(keterangan.getSumTidak() > 0){
ket.setText("TIDAK LULUS");
return;
}
}
Atribut bestGain = new Atribut();
Double maxGain = new Double(Double.MIN_VALUE);
for(Atribut n : listAtribut){
n.HitungGain(keterangan.getEntropy(), keterangan.getSumNilai());
if(maxGain < n.gain || listAtribut.indexOf(n) == 0){
maxGain = n.gain;
bestGain = n;
}
Log.d("TRACE", n.nama + " GAIN : " + n.gain);
}
String userValue = inputanUser.get(bestGain.nama);
Nilai userNilai = new Nilai();
for(Nilai n : bestGain.nilai){
if(n.getNama().equals(userValue)){
userNilai = n;
}
}
if(userNilai.getEntropy() != 0){
field.add(bestGain.nama);
value.add(userValue);
int i = 0;
for(int index = 0; index < listAtribut.size(); index++){
if(listAtribut.get(index).nama.equals(bestGain.nama)){
i = index;
}
}
listAtribut.remove(i);
c45Algorithm();
} else {
if(userNilai.getSumYa() > 0){
ket.setText("DATA TERSEBUT LULUS");
}
else if(userNilai.getSumTidak() > 0){
ket.setText("DATA TERSEBUT TIDAK LULUS");
}

Universitas Sumatera Utara

A-9

}
}
}

//Source Code Hasil.java
package com.kurniawan.apptes;
import
import
import
import
import
import
import
import
import
import

android.app.Activity;
android.app.AlertDialog;
android.content.DialogInterface;
android.content.Intent;
android.database.Cursor;
android.database.sqlite.SQLiteDatabase;
android.os.Bundle;
android.view.View;
android.widget.Button;
android.widget.TextView;

/**
* Created by Kurniawan on 12/30/2016.
*/
public class Hasil extends Activity{
DatabaseOpenHelper dbHelper;
Cursor cursor;
Button edit,hapus;
TextView nomor, nama, alamat, telp, pend, pengalaman, psikotes,
intellegensi, ket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hasil);
nomor = (TextView) findViewById(R.id.tvNo);
nama = (TextView) findViewById(R.id.editNamaTxt);
pend = (TextView) findViewById(R.id.editPendTxt);
alamat = (TextView) findViewById(R.id.editAlamatTxt);
telp = (TextView) findViewById(R.id.noTelpTxt);
pengalaman = (TextView) findViewById(R.id.editPengalamanTxt);
psikotes = (TextView) findViewById(R.id.editPsikotesTxt);
intellegensi = (TextView) findViewById(R.id.editIntTxt);
ket = (TextView) findViewById(R.id.hasilTxt);
final String namaIntent = getIntent().getStringExtra("nama");
nama.setText(namaIntent);
dbHelper = new DatabaseOpenHelper(this);
final SQLiteDatabase db = dbHelper.getReadableDatabase();
cursor = db.rawQuery("SELECT * FROM DataPelamar WHERE Nama = '" +
namaIntent + "'", null);
cursor.moveToFirst();
if (cursor.getCount() > 0) {
cursor.moveToPosition(0);
nomor.setText(cursor.getString(0).toString());
alamat.setText(cursor.getString(2).toString());
telp.setText(cursor.getString(3).toString());
pend.setText(cursor.getString(4).toString());
pengalaman.setText(cursor.getString(5).toString());
psikotes.setText(cursor.getString(6).toString());
intellegensi.setText(cursor.getString(7).toString());
ket.setText(cursor.getString(8).toString());
}
hapus = (Button) findViewById(R.id.deleteBtn);
hapus.setOnClickListener(new View.OnClickListener() {

Universitas Sumatera Utara

A-10

@Override
public void onClick(View view) {
new AlertDialog.Builder(Hasil.this).setMessage("Hapus
data?").setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.execSQL("DELETE FROM DataPelamar WHERE No = '"+
nomor.getText().toString() +"'");
Intent intent = new Intent(Hasil.this, Data.class);
startActivity(intent);
}
}).show();
}
});
edit = (Button) findViewById(R.id.editBtn);
edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Hasil.this, Edit.class);
String primKey = nomor.getText().toString();
intent.putExtra("primKey", primKey);
startActivity(intent);
}
});
}
}

//Source Code Nilai.java
package com.kurniawan.apptes.c45Algorithm;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.List;
public class Nilai {
public static final String LULUS = "L";
public static final String TIDAK_LULUS = "TL";
public static final String NAMA_TABEL = "DataPelamar";
String nama, namaAtribut;
Integer sumNilai, sumYa, sumTidak;
Double Entropy;
public Nilai(){
}
public Nilai(String namaAtribut, String nama){
this.nama = nama;
this.namaAtribut = namaAtribut;
}
public Double getEntropy(){
return this.Entropy;
}
public Integer getSumNilai(){
return this.sumNilai;
}
public Integer getSumYa(){
return this.sumYa;

Universitas Sumatera Utara

A-11

}
public Integer getSumTidak(){
return this.sumTidak;
}
public String getNama(){
return this.nama;
}
public void HitungEntropy() {
if (sumYa == 0 || sumTidak == 0) {
this.Entropy = 0.0;
} else {
this.Entropy = (-(sumYa / sumNilai.doubleValue()) *
(Math.log(sumYa / sumNilai.doubleValue()) / Math.log(2))) +
(-(sumTidak / sumNilai.doubleValue()) *
(Math.log(sumTidak / sumNilai.doubleValue()) / Math.log(2)));
}
}
public void AmbilDariDataSet(SQLiteDatabase database, List field,
List value){
String query = "SELECT " + namaAtribut + " FROM " + NAMA_TABEL + "
WHERE ";
List _value = new ArrayList();
_value.addAll(value);
List _field = new ArrayList();
_field.addAll(field);
for(int i = 0; i < _field.size(); i++){
query += _field.get(i) + " = ? AND ";
}
if(!namaAtribut.equals("*")) {
query += " " + namaAtribut + " = ? AND ";
_value.add(nama);
}
query += " Keterangan = ? ";
List valueYes, valueNo;
valueYes = new ArrayList();
valueYes.addAll(_value);
valueYes.add(LULUS);
valueNo = new ArrayList();
valueNo.addAll(_value);
valueNo.add(TIDAK_LULUS);
Cursor cursor = database.rawQuery(query, valueYes.toArray(new
String[valueYes.size()]));
sumYa = cursor.getCount();
cursor = database.rawQuery(query, valueNo.toArray(new
String[valueNo.size()]));
sumTidak = cursor.getCount();
this.sumNilai = sumYa + sumTidak;
}
}

Universitas Sumatera Utara

A-12

//Source Code Atribut.java
package com.kurniawan.apptes.c45Algorithm;
import java.util.ArrayList;
import java.util.List;
public class Atribut {
public String nama;
public List nilai;
public Double gain;
public Atribut(){
}
public Atribut(String nama){
this.nama = nama;
this.nilai = new ArrayList();
}
public void HitungGain(Double totalEntropy, Integer S){
this.gain = totalEntropy;
for(Nilai n : nilai){
this.gain -= ((n.sumNilai / S.doubleValue()) *
(Math.log(n.sumNilai / S.doubleValue()) / Math.log(2)));
}
}
}

//Source Code DatabaseOpenHelper.java
package com.kurniawan.apptes;
import android.content.Context;
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;
public class DatabaseOpenHelper extends SQLiteAssetHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "DataPelamar (2)";
public DatabaseOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
}

//Source Code Hasil.java
package com.kurniawan.apptes;
import
import
import
import

android.content.Context;
android.database.Cursor;
android.database.sqlite.SQLiteDatabase;
android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;
import java.util.List;
public class DatabaseHandler {
private SQLiteOpenHelper openHelper;
public SQLiteDatabase database;
private static DatabaseHandler instance;
public DatabaseHandler(Context context) {

Universitas Sumatera Utara

A-13

this.openHelper = new DatabaseOpenHelper(context);
}
public static DatabaseHandler getInstance(Context context){
if (instance == null){
instance = new DatabaseHandler(context);
}
return instance;
}
public void open() {
this.database = openHelper.getWritableDatabase();
}
}

//Source Code Help.java
package com.kurniawan.apptes;
import android.app.Activity;
import android.os.Bundle;
public class Help extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.help);
}
}

// Source Code About.java
package com.kurniawan.apptes;
import android.app.Activity;
import android.os.Bundle;
public class About extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about);
}
}

Universitas Sumatera Utara

B-1

CURRICULUM VITAE

Nama

:

Kurniawan Wardani AP. Hutagaol

NIM

:

101401050

Alamat Sekarang

:

Jln. Pasar III No. 103 Kel. Tegal Rejo, Kec. Medan
Perjuangan

Alamat Orangtua

:

Jln. Pasar III No. 103 Kel. Tegal Rejo, Kec. Medan
Perjuangan

Telp/Hp

:

082276336927

Email

:

hutagaol.kurniawan@gmail.com

2010 – 2017

:

S-1 Ilmu Komputer Universitas Sumatera Utara, Medan

2007 – 2010

:

SMA Negeri 3 Medan

2004 – 2007

:

SMP Swasta Budi Murni 1 Medan

1998 – 2004

:

SD Swasta Budi Murni 6 Medan

Riwayat Pendidikan

Keahlian
Bahasa Pemrograman :

Java.

Multimedia

:

Adobe Illustrator, Adobe Photoshop.

Database

:

Microsoft Access, MySQL.

Universitas Sumatera Utara