Android Client Server
Danandjaya Saputra, S.T, [Link]
Tujuan
Mempelajari tentang aplikasi
android (client) yang
databasenya diakses di sebuah
server
Mengapa kita harus
menyimpan data di
server ?
Data
• Data tidak bisa di share
• Data tidak bisa di akses
• Data tidak sinkron/terintegrasi
• Data tidak update secara realtime
Contohnya : Sistem Inventori Stok Barang
*Data penjualan hanya tersimpan
di SQLite di device admin
penjualan
ADMIN
PEMBELIAN
Tidak
Sinkron
*Data pembelian hanya
tersimpan di SQLite di device
ADMIN
admin pembelian
PENJUALAN
Contohnya : Sistem Pemesanan Makanan di Restoran
*Data stok makanan ready hanya
tersimpan di SQLite device admin
restoran
KONSUMEN
RESTORAN
Tidak
Sinkron
*Data pemesanan hanya
tersimpan di SQLite device ADMIN
konsumen restoran DAPUR RESTORAN
SOLUSINYA….!!!
Aplikasi Client Server Database
CLIENT D
CLIENT A SERVER
DATABASE
CLIENT B CLIENT C
Aplikasi client server terdiri dari minimal 2 perangkat komputer yang
terhubung pada jaringan, dimana 1 sebagai server dan 1 sebagai
client
Contohnya : Sistem Inventori Stok Barang
SERVER DB
ADMIN
PEMBELIAN
Sinkron
ADMIN
PENJUALAN
Contohnya : Sistem Pemesanan Makanan di Restoran
SERVER DB
KONSUMEN
RESTORAN
Sinkron
ADMIN
DAPUR RESTORAN
GAMBARAN ARSITEKTUR CLIENT SERVER
CLIENT SERVER
2
1 KOMUNIKASI
HTTP
3 4
5
JSON
API DATABASE
NETWORK (LAN/MAN/WAN)
2 KOMUNIKASI HTTP
HTTP merupakan komunikasi yang menghubungkan
server dengan perangkat-perangkat lain (client) yang
ingin mengakses sumber daya (data) di dalam server
tersebut.
Library HTTP untuk android :
3 API (APPLICATION PROGRAMMING INTERFACE) / WEBSERVICE
API/Web Service yang dimaksud merupakan sebuah
program di sisi server yang menjembati permintaan
atau respon data dari client ke database.
Teknologi bahasa pemrograman untuk buat API :
4 DATABASE MANAGEMENT SYSTEM
Database management system merupakan
software untuk menyimpan database.
Database yang bisa digunakan :
5 JSON (JavaScript Object Notation)
JSON adalah format pertukaran data yang ringan,
serta mudah diterjemahkan dan dibuat
(generate) oleh komputer.
Contoh format JSON :
PRAKTIKUM
APLIKASI CLIENT SERVER DATABASE
STUDI KASUS : Aplikasi pencatatan penduduk
APLIKASI DATA PENDUDUK (APDAPEN)
Aplikasi pencatatan data penduduk ini dapat menginput/daftar data
penduduk, mengecek data penduduk berdasarkan [Link] yang sudah di
daftarkan, menampilkan list berita dan set ip server database.
Wireless SERVER (LAPTOP ANDA)
Connection API : Apache dan PHP
Bisa pakai DATABASE : MySQL
APLIKASI DATA Tethering (cukup install XAMPP)
PENDUDUK hp/router
(ANDROID) lainnya
INTERFACE APLIKASI
PERSIAPAN SOFTWARE
1. XAMPP
2. MYSQL FRONT
3. POSTMAN
4. ECLIPSE
TAHAP 1
MEMBUAT DATABASE
DI MYSQL SERVER
Adapun langkah-langkahnya, yaitu:
1. Jalankan modules Apache dan MySQL pada XAMPP dengan
menekan tombol start sampai berubah menjadi stop
2. Buka tools MySQL Front
3. Buat Database baru dengan cara seperti dibawah ini :
Klik kanan
4. Isi nama databasenya dengan Name : dbsensus
jIka sudah..Klik OK
5. Selanjutnya di dbsensus, kita akan membuat 2 tabel, dengan
mengikuti struktur dibawah ini
NAMA TABEL FIELD / KOLOM TIPE DATA SIZE KEY
noktp VARCHAR 25 PRIMARY KEY
t_penduduk nama VARCHAR 100
provinsi VARCHAR 100
NAMA TABEL FIELD / KOLOM TIPE DATA SIZE KEY
Id INT 11 PRIMARY KEY
t_berita judul VARCHAR 100
konten VARCHAR 255
Hasil Pembuatan Tabel t_penduduk
Hasil Pembuatan Tabel t_berita
TAHAP 2
MEMBUAT API/WEBSERVICE APLIKASI
DATA PENDUDUK
MENGGUNAKAN PHP
1. Buat folder webservice di dalam folder C:\xampp\htdocs
2. Ketik coding dibawah ini, kemudian simpan didalam folder
webservice dengan nama [Link]
3. Ketik coding dibawah ini, kemudian simpan didalam folder
webservice dengan nama [Link]
4. Ketik coding dibawah ini, kemudian simpan didalam folder
webservice dengan nama [Link]
5. Ketik coding dibawah ini, kemudian simpan didalam folder
webservice dengan nama [Link]
6. Sehingga ke-4 File yang dibuat sebelumnya menjadi seperti
dibawah ini, yang berada di dalam folder webservice
7. Lakukan API Testing dengan menggunakan aplikasi Postman (dari
laptop) atau Rest API Client dari HP android anda (Download
Playstore) untuk menguji apakah API/Web Service yang kita buat
berfungsi dengan baik.
Berikut ini adalah daftar URL untuk mengakses API yang dibuat
sebelumnya
1. REQUEST UNTUK MENGAMBIL DATA BERITA
URL [Link] SERVER API]/webservice/[Link]
METHOD GET
FORM-DATA TIDAK ADA
2. REQUEST UNTUK CEK KTP TERDAFTAR ATAU TIDAK
URL [Link] SERVER API]//webservice/[Link]
METHOD GET
FORM-DATA noktp <string>
3. REQUEST UNTUK MENYIMPAN DATA PENDUDUK
URL [Link] SERVER API]//webservice/[Link]
METHOD GET
FORM-DATA noktp <string>
nama <string>
provinsi (string>
1. URL untuk 2. URL untuk mengirim
akses API request API
3. Form Data
5. Status Response
4. Response API
Cara Menggunakan POSTMAN
TAHAP 3
Membuat Aplikasi Android
BUATLAH PROJECT BARU
2 3
1. Klik File
2. Klik New
3. Klik Android Project
39
AplikasiDataPenduduk
40
CENTANG
SEMUA
OPSI SESUAI
TANDA PANAH
41
Klik Browse untuk memilih gambar
Pilih gambar icon
aplikasi anda,
Format bisa JPG dan
PNG, Resolusi
ukuran bebas
42
Pilih blank
activity,
Yang artinya
tampilan awal
aplikasi adalah
standar
43
MainActivity
44
Menambah Library [Link]
Library Volley merupakan merupakan produk yang
diperkenalkan oleh Google untuk mempermudah pertukaran
data melalui komunikasi HTTP tanpa harus membuat deretan
kode yang sangat panjang.
Cara menambah library volley
• Copy file [Link]
• Kemudian paste di dalam folder libs pada project di eclipse
Copy kemudian paste
Di folder libs
Tambahkan Permission pada
[Link]
Klik File
[Link]
Tambahkan coding dibawah ini :
<uses-permission android:name="[Link]" />
Modifikasi
[Link]
Buka dan ketik coding activity_main.xml seperti di bawah ini
<TabHost xmlns:android="[Link]
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</TabWidget>
50
Lanjutan coding activity_main.xml
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
</LinearLayout>
</TabHost>
Finish, selanjutnya
51
Buka dan ketik coding [Link] seperti di bawah ini
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class MainActivity extends TabActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_main);
52
Lanjutan coding [Link]
TabHost tabHost = getTabHost();
TabSpec cekSpec = [Link]("Cek");
[Link]("Cek",null);
Intent cekIntent = new Intent(this, [Link]);
[Link](cekIntent);
[Link](cekSpec);
TabSpec daftarSpec = [Link]("Daftar");
[Link]("Daftar",null);
Intent daftarIntent = new Intent(this, [Link]);
[Link](daftarIntent);
[Link](daftarSpec);
53
Lanjutan coding [Link]
TabSpec beritaSpec = [Link]("Berita");
[Link]("Berita",null);
Intent beritaIntent = new Intent(this, [Link]);
[Link](beritaIntent);
[Link](beritaSpec);
TabSpec configSpec = [Link]("Config");
[Link]("Config",null);
Intent configIntent = new Intent(this, [Link]);
[Link](configIntent);
[Link](configSpec);
[Link](0);
}
} Jika ada yang error pada baris activity tertentu abaikan saja,
karena belum buat activitynya
Finish, selanjutnya,
54
Tambahkan
[Link]
Tambahkan activity baru dengan nama [Link]
56
Ketik coding activity_cek.xml seperti di bawah ini
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="18dp"
android:paddingLeft="18dp"
android:paddingRight="18dp">
<TextView
android:id="@+id/TextView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Masukan No KTP anda :"
android:textSize="18dp" />
<EditText
android:id="@+id/EditTextNoKTP"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18dp"
android:layout_below="@+id/TextView1"/>
57
Lanjutan coding activity_cek.xml
<LinearLayout
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_below="@+id/EditTextNoKTP">
<Button
android:id="@+id/buttonSearch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Search" />
</LinearLayout>
</RelativeLayout>
Finish, selanjutnya
58
Ketik coding [Link] seperti di bawah ini
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
59
Lanjutan coding [Link]
public class CekActivity extends Activity {
SharedPreferences sp;
EditText EditTextNoKTP;
Button buttonSearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_cek);
sp = getSharedPreferences("apdapen", MODE_PRIVATE);
EditTextNoKTP = (EditText) findViewById([Link]);
buttonSearch = (Button) findViewById([Link]);
60
Lanjutan coding [Link]
[Link](new [Link]() {
@Override
public void onClick(View v) {
try{
cekNoKTP();
}catch(RuntimeException e){
[Link]([Link], [Link](),Toast.LENGTH_LONG).show();
}
}
});
}
61
Lanjutan coding [Link]
private void cekNoKTP(){
final String noktp = [Link]().toString();
final String ip_address_server = [Link]("ip_address_server","");
StringRequest stringRequest = new StringRequest([Link],
"[Link]
new [Link]<String>() {
@Override
public void onResponse(String response) {
if([Link]("ada")){
[Link]([Link], "No. KTP Sudah
Terdaftar",Toast.LENGTH_LONG).show();
}else if([Link]("tidak")){
[Link]([Link], "No. KTP Belum
Terdaftar",Toast.LENGTH_LONG).show();
}
}
},
62
Lanjutan coding [Link]
new [Link]() {
@Override
public void onErrorResponse(VolleyError error) {
[Link]([Link],[Link](),Toast.LENGTH_LONG).show();
}
}){
@Override
protected Map<String,String> getParams(){
Map<String,String> params = new HashMap<String, String>();
[Link]("noktp", noktp);
return params;
}
};
RequestQueue requestQueue = [Link](this);
[Link](stringRequest);
} Finish, selanjutnya
}
63
Tambahkan
[Link]
Tambahkan activity baru dengan nama [Link]
65
Ketik coding activity_daftar.xml seperti di bawah ini
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="18dp"
android:paddingLeft="18dp"
android:paddingRight="18dp">
<TextView
android:id="@+id/TextView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="No KTP :"
android:textSize="18dp" />
<EditText
android:id="@+id/EditTextNoKTP"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18dp"
android:layout_below="@+id/TextView1"/>
66
Lanjutan coding activity_daftar.xml
<TextView
android:id="@+id/TextView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Nama Lengkap :"
android:textSize="18dp"
android:layout_below="@+id/EditTextNoKTP" />
<EditText
android:id="@+id/EditTextNama"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18dp"
android:layout_below="@+id/TextView2"/>
<TextView
android:id="@+id/TextView3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Asal Provinsi :"
android:textSize="18dp"
android:layout_below="@+id/EditTextNama"/>
67
Lanjutan coding activity_daftar.xml
<Spinner
android:id="@+id/spinnerProvinsi"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18dp"
android:drawSelectorOnTop="true"
android:layout_below="@+id/TextView3" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_below="@+id/spinnerProvinsi">
<Button
android:id="@+id/buttonSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Save" />
68
Lanjutan coding activity_daftar.xml
<Button
android:id="@+id/buttonClear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Clear" />
</LinearLayout>
</RelativeLayout>
Finish, selanjutnya
69
Ketik coding [Link] seperti di bawah ini
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
70
Lanjutan coding [Link]
public class DaftarActivity extends Activity {
SharedPreferences sp;
EditText EditTextNoKTP, EditTextNama;
Spinner spinnerProvinsi;
Button buttonSave, buttonClear;
String[] provinsi = { "KEPULAUAN RIAU", "DKI JAKARTA", "JAWA BARAT", "SUMATERA BARAT" };
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_daftar);
sp = getSharedPreferences("apdapen", MODE_PRIVATE);
71
Lanjutan coding [Link]
EditTextNoKTP = (EditText) findViewById([Link]);
EditTextNama = (EditText) findViewById([Link]);
spinnerProvinsi = (Spinner) findViewById([Link]);
buttonSave = (Button) findViewById([Link]);
buttonClear = (Button) findViewById([Link]);
ArrayAdapter<String> spinnerAdapter = new
ArrayAdapter<String>(this,[Link].simple_spinner_item, provinsi);
[Link]([Link].simple_spinner_dropdown_item);
[Link](spinnerAdapter);
[Link](new [Link]() {
@Override
public void onClick(View v) {
try{
simpanPendafataran();
}catch(RuntimeException e){
[Link]([Link], [Link](),Toast.LENGTH_LONG).show();
}
}
});
72
Lanjutan coding [Link]
[Link](new [Link]() {
@Override
public void onClick(View v) {
[Link]("");
[Link]("");
[Link](0);
}
});
}
73
Lanjutan coding [Link]
private void simpanPendafataran(){
final String noktp = [Link]().toString();
final String nama = [Link]().toString();
final String provinsi = [Link]().toString();
final String ip_address_server = [Link]("ip_address_server","");
StringRequest stringRequest = new StringRequest([Link],
"[Link]
new [Link]<String>() {
@Override
public void onResponse(String response) {
if([Link]("berhasil")){
[Link]([Link], "Data Penduduk Berhasil Di
Daftar",Toast.LENGTH_LONG).show();
}else if([Link]("gagal")){
[Link]([Link], "Data Penduduk Gagal Di
Daftar",Toast.LENGTH_LONG).show();
}
}
},
74
Lanjutan coding [Link]
new [Link]() {
@Override
public void onErrorResponse(VolleyError error) {
[Link]([Link],[Link](),Toast.LENGTH_LONG).show();
}
}){
@Override
protected Map<String,String> getParams(){
Map<String,String> params = new HashMap<String, String>();
[Link]("noktp", noktp);
[Link]("nama", nama);
[Link]("provinsi", provinsi);
return params;
}
};
RequestQueue requestQueue = [Link](this);
[Link](stringRequest);
}
} Finish, selanjutnya
75
Tambahkan
[Link]
Selanjutnya tambahkan activity baru dengan nama [Link]
77
Ketik coding activity_berita.xml seperti di bawah ini
<RelativeLayout xmlns:android="[Link]
xmlns:tools="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="18dp"
android:paddingLeft="18dp"
android:paddingRight="18dp"
tools:context=".BeritaActivity" >
<ListView
android:id="@+id/listview_berita"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20px"/>
</RelativeLayout>
Finish, selanjutnya
78
Ketik coding [Link] seperti di bawah ini
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
79
Lanjutan coding [Link]
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
80
Lanjutan coding [Link]
public class BeritaActivity extends Activity {
SharedPreferences sp;
ListView ListViewBerita;
String[] id;
String[] judul;
String[] konten;
String[] data_berita;
ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_berita);
sp = getSharedPreferences("apdapen", MODE_PRIVATE);
ListViewBerita = (ListView) findViewById([Link].listview_berita);
81
Lanjutan coding [Link]
progressDialog = new ProgressDialog(this);
[Link]("Please wait...");
[Link](false);
loadDataBerita();
}
82
Lanjutan coding [Link]
private void loadDataBerita(){
final String ip_address_server = [Link]("ip_address_server","");
[Link]();
StringRequest stringRequest = new StringRequest("[Link]
new [Link]<String>() {
@Override
public void onResponse(String response) {
showBerita(response);
[Link]();
}
},
new [Link]() {
@Override
public void onErrorResponse(VolleyError error) {
[Link]();
[Link]([Link], "Error1: " + [Link](),Toast.LENGTH_LONG).show();
}
}){
};
RequestQueue requestQueue = [Link](this);
[Link](stringRequest);
}
83
Lanjutan coding [Link]
private void showBerita(String json){
JSONArray jsonberita = null;
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(json);
jsonberita = [Link]("data");
id = new String[[Link]()];
judul = new String[[Link]()];
konten = new String[[Link]()];
data_berita = new String[[Link]()];
for(int i=0;i<[Link]();i++){
JSONObject jo = [Link](i);
id[i] = [Link]("id");
judul[i] = [Link]("judul");
konten[i] = [Link]("konten");
data_berita[i] = id[i] + "\n" + judul[i]+"\n" + konten[i];
}
[Link](new ArrayAdapter(this, [Link].simple_list_item_1, data_berita));
84
Lanjutan coding [Link]
} catch (JSONException e) {
[Link]();
[Link]([Link], "Error2: " + [Link](),Toast.LENGTH_LONG).show();
}
@Override
public void onResume(){
[Link]();
try{
loadDataBerita();
}catch(RuntimeException e){
[Link]();
}
}
} Finish, selanjutnya
85
Tambahkan
[Link]
Tambahkan activity baru dengan nama [Link]
87
Ketik coding activity_config_ip_server.xml seperti di bawah ini
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="[Link]
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="18dp"
android:paddingLeft="18dp"
android:paddingRight="18dp">
<TextView
android:id="@+id/TextView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Masukan Alamat IP Server :"
android:textSize="18dp" />
<EditText
android:id="@+id/EditTextIpServer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18dp"
android:layout_below="@+id/TextView1"/>
88
Lanjutan coding activity_config_ip_server.xml
<LinearLayout
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_below="@+id/EditTextIpServer">
<Button
android:id="@+id/buttonSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Save" />
</LinearLayout>
</RelativeLayout>
Finish, selanjutnya
89
Ketik coding [Link] seperti di bawah ini
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class ConfigIpServerActivity extends Activity {
SharedPreferences sp;
EditText EditTextIpServer;
Button buttonSave;
90
Lanjutan coding [Link]
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_config_ip_server);
sp = getSharedPreferences("apdapen", MODE_PRIVATE);
EditTextIpServer = (EditText) findViewById([Link]);
buttonSave = (Button) findViewById([Link]);
TampilIpServer();
91
Lanjutan coding [Link]
[Link](new [Link]() {
@Override
public void onClick(View v) {
try{
String ip_address_server = [Link]().toString();
[Link] editor = [Link]();
[Link]("ip_address_server", ip_address_server );
[Link]();
[Link](getApplicationContext(), "IP ADDRESS SERVER SEKARANG " +
ip_address_server, Toast.LENGTH_LONG).show();
}catch(RuntimeException e){
[Link]([Link],
[Link](),Toast.LENGTH_LONG).show();
}
}
});
}
92
Lanjutan coding [Link]
public void TampilIpServer(){
try{
String ip_address_server = [Link]("ip_address_server","");
[Link](ip_address_server);
}catch(NullPointerException e){
[Link]();
}catch(RuntimeException e){
[Link]();
}
}
}
Finish, selanjutnya
93
TESTING APLIKASI
1. AKTIFKAN HOTSPOT/ ROUTER HANDPHONE
2. KONEKSIKAN LAPTOP YANG AKAN DI JADIKAN
SERVER KE HOTSPOT/ ROUTER HANDPHONE
3. LIHAT IP ADDRESS LAPTOP
4. BUKA APLIKASI ANDROIDNYA, MASUKAN IP
ADDRESS LAPTOP PADA MENU CONFIG TERLEBIH
DAHULU
5. SELESAI, SILAHKAN INPUT DAFTAR PENDUDUK DAN
CEK