Bagian I
Pengantar
i
Bab 1
Sambutan 1.1
Kata Pengantar
Tidak ada pujian yang pantas kecuali hanya untuk Allah swt. sebagai Sang Penguasa dan Pencipta alam semesta. Sholawat dan salam semoga senantiasa dicurahkan kepada pembawa cahaya penerang, pemberi tauladan, pembawa kabar gembira, Rasulullah saw. beserta keluarganya, sahabatnya, pengikutnya, para salafush sholeh, dan kepada ummatnya hingga akhir zaman. Buku ini merupakan buku pertama yang penulis susun dengan menggunakan perangkat lunak LATEX. Oleh karenanya, dengan berbagai kendala, maka buku ini masih tampil apa adanya. Sesuai batas pengetahuan tentang LATEXitu sendiri. Penggunaan perangkat LATEXini didasari semangat penggunaan perangkat lunak yang legal disamping rasa penasaran seperti apa LATEXitu. Juga karena kebosanan dengan perangkat lunak yang ada. Materi buku ini disusun belum menggunakan teknik-teknik yang mempercepat eksekusi program. Barangkali dalam buku lanjutan, akan dibahas teknik-teknik untuk efisiensi waktu eksekusi program. Mengapa ? Karena buku ini diarahkan untuk mereka yang baru belajar pemrogram Clipper. Suatu bahasa pemrograman yang pada saat ini (tahun 2002, ini pertama kali buku mulai ditulis, terakhir diperbaiki Desember 2010), bisa dibilang sudah usang dan tradisional. Namun pada kenyataan, penulis masih menggunakannya untuk pengolahan data. Dan mungkin juga masih digunakan di tempat-tempat lain. Dalam kalimat ’pembelaan’, penulis mengungkapkan bahwa untuk membunuh seekor nyamuk, tidak perlu menggunakan senjata AK-47. Cukup dengan sapu lidi. Sapu lidi itulah yang dimaksud dengan Clipper. Penulis mengucapkan terima kasih yang kepada Bapak Warsono, Ph.D, yang telah memberikan ’atmosfir’ yang kondusif untuk penulisan buku ini. Juga kepada reken-rekan di ADPC Puskom Unila beserta asisten (Didik, Jazuli, Yudi, Subian) yang untuk beberapa menjadi lahan percobaan buku ini. Tidak lupa juga kepada Mbah Linux Made Wiryana, karena dari tulisan LATEX-nya penulis mengenal LATEX. Begitu juga kepada komunitas Linux. Satu hal lan yang cukup menarik dari buku ini (kalau penulis boleh ber-gr) adalah adalah indeks. Hal ini menarik, karena pada kebanyakan buku berbahasa Indonesia, Anda tidak menjumpai indeks (daftar kata-kata). Dalam buku ini tentu saja banyak terdapat kekurangan maupun kesalahan. Selain karena sedikitnya pengetahuan yang ada pada penulis, juga karena buku ini belum pernah mendapat kritik, saran dari siapa pun. Untuk itulah, sangat terbuka peluang untuk mengkritisi buku ini, dari sudut manapun juga. Buku ini Insyaa Allah tersedia di http://dwijim.wordpress.com. Siapa saja boleh mendownload, memodifikasi, memperbanyak sebagian atau seluruh isi buku ini. Termasuk contohcontoh program juga tersedia di sana. Akan tetapi ada rencana untuk mencoba memasukkan buku ini ke penerbit. Jika sudah masuk ke penerbit mungkin tidak akan bebas lagi untuk diunduh. Masalahnya ada yang bersedia atau tidak :-). Mudah-mudahan memberi manfaat seluas-luasnya kepada siapa saja yang memerlukannya. Hanya kepada Allah-lah kami berharap balasan dan ampunan-Nya.
iii
iv
dwi sakethi
[email protected] http://dwijim.wordpress.com
BAB 1. SAMBUTAN
Daftar Isi I
Pengantar
i
1 Sambutan iii 1.1 Kata Pengantar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii
II
Pengantar Clipper
3
2 Basis Data dengan Clipper 2.1 Pendahuluan . . . . . . . . . . . . . . . . . . . 2.2 Perangkat-Perangkat yang Dipakai . . . . . . . 2.3 Perintah DOS Command . . . . . . . . . . . . 2.4 Manajemen Basis Data . . . . . . . . . . . . . 2.4.1 Menjalankan Foxbase . . . . . . . . . . 2.4.2 Perintah create . . . . . . . . . . . . . 2.4.3 Perintah use . . . . . . . . . . . . . . . 2.4.4 Perintah append . . . . . . . . . . . . . 2.4.5 Perintah append blank . . . . . . . . 2.4.6 Perintah edit . . . . . . . . . . . . . . . 2.4.7 Perintah browse . . . . . . . . . . . . . 2.4.8 Perintah go . . . . . . . . . . . . . . . . 2.4.9 Perintah list . . . . . . . . . . . . . . . 2.4.10 Perintah zap . . . . . . . . . . . . . . . 2.4.11 Perintah append from . . . . . . . . . 2.4.12 Perintah index . . . . . . . . . . . . . . 2.4.13 Perintah delete record . . . . . . . . . 2.4.14 Manajemen Basis Data dengan dbu.exe
III
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
Gambaran Sistem
5 5 6 7 7 7 8 8 10 11 11 12 13 13 13 14 14 16 16
17
3 Sistem yang Akan Dibuat 19 3.1 Rancangan Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
IV
Pemrograman Clipper
4 Program Dasar 4.1 Check List for Good Programming 4.2 Pemrosesan Program Clipper . . . 4.3 Proses Kompilasi . . . . . . . . . . 4.4 First Clipper Program . . . . . . . 4.4.1 Perintah clear . . . . . . . 4.4.2 Perintah say . . . . . . . . 4.4.3 Perintah wait . . . . . . . .
21 . . . . . . .
. . . . . . .
. . . . . . . v
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
23 23 26 27 30 30 30 31
vi
DAFTAR ISI
4.5
4.4.4 Perintah return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Praktikum I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5 Program Input Data dan Menu 5.1 Program Input Data . . . . . . . 5.2 Perintah yang Digunakan . . . . 5.2.1 Perintah get . . . . . . . 5.2.2 Perintah read . . . . . . 5.2.3 Perintah store . . . . . . 5.2.4 Perintah set date italian 5.2.5 Perintah set century on 5.3 Contoh Program . . . . . . . . . 5.4 Program Menu . . . . . . . . . . 5.4.1 Perintah set wrap on . . 5.4.2 Perintah prompt . . . . 5.4.3 Perintah menu to . . . . 5.4.4 Perintah do . . . . . . . . 5.4.5 Perintah do while . . . . 5.4.6 Perintah do case . . . . . 5.5 Contoh Program . . . . . . . . . 5.6 Tugas Latihan . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
6 Program Input Database 6.1 Pendahuluan . . . . . . . . . . . . . . 6.2 English Structured . . . . . . . . . . . 6.3 Perintah yang Digunakan . . . . . . . 6.3.1 Perintah save screen to . . . 6.3.2 Perintah restore screen from 6.3.3 Perintah seek . . . . . . . . . . 6.3.4 Perintah found() . . . . . . . 6.3.5 Perintah if . . . else . . . endif . 6.3.6 Perintah #include . . . . . . 6.3.7 Perintah lastkey() . . . . . . . 6.3.8 Perintah dbedit() . . . . . . . 6.3.9 Perintah delete . . . . . . . . 6.3.10 Program Pemasukan Data . . . 6.3.11 Program Penghapusan Data . . 6.3.12 Program Menu Gabungan . . . 6.4 Tugas Latihan . . . . . . . . . . . . . 7 Validasi Input Data 7.1 Pendahuluan . . . . . . . . . . . . . . 7.2 Cara Validasi . . . . . . . . . . . . . . 7.3 Validasi dengan Kondisi . . . . . . . . 7.3.1 Perintah valid . . . . . . . . . 7.4 Validasi dengan Fungsi . . . . . . . . . 7.4.1 Structured English . . . . . . . 7.4.2 Contoh Program . . . . . . . . 7.5 Latihan . . . . . . . . . . . . . . . . . 7.6 Apa Resikonya ? . . . . . . . . . . . . 7.6.1 Structured English . . . . . . . 7.6.2 Pengembangan Lebih Lanjut ! 7.6.3 Perintah yang digunakan . . . 7.6.4 Perintah save screen to . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
35 35 36 36 37 37 37 37 38 38 39 39 40 40 40 41 41 43
. . . . . . . . . . . . . . . .
45 45 46 48 48 48 49 49 50 50 51 51 52 53 56 60 63
. . . . . . . . . . . . .
65 65 65 65 67 68 68 68 72 73 73 74 76 76
DAFTAR ISI
vii
7.6.5 7.6.6 7.6.7
Perintah restore screen from . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Perintah select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Perintah restore screen from . . . . . . . . . . . . . . . . . . . . . . . . . . 78
8 Pemrosesan Data 8.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Modifikasi Program Pemasukan Data . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3 Penghitungan Skor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81 81 81 84
9 Pencetakan Informasi 9.1 Pendahuluan . . . . . . . . . . . . . . 9.2 Perintah-perintah yang Digunakan . . 9.2.1 Perintah set printer to . . . . 9.2.2 Perintah set device to . . . . 9.2.3 Perintah printer [on—off ] . . 9.2.4 Perintah append from ... sdf 9.2.5 Perintah dbedit() . . . . . . . 9.2.6 Perintah zap . . . . . . . . . . 9.3 Penting Diperhatikan ! . . . . . . . . . 9.4 Structured English . . . . . . . . . . .
87 87 87 87 87 88 88 88 89 89 90
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
10 Integrasi Program 93 10.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
V
Clipper Advanced
11 Optimasi dan Improvisasi 11.1 Improvisasi Program . . 11.2 Operasi File . . . . . . . 11.3 Perintah-Perintah . . . . 11.3.1 Perintah file() . 11.4 Optimasi Indeks . . . . 11.4.1 Multipel Indeks . 11.5 Modifikasi Bentuk get .
VI
Penutup Buku
97 . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
99 99 99 100 100 100 100 102
109
12 Penutup 111 12.1 Harapan dan Impian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 12.2 Bacaan Tambahan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
viii
DAFTAR ISI
Daftar Tabel 2.1 2.2 2.3
Atribut Tabel PS.DBF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Atribut Tabel IPA2002.DBF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Atribut Tabel SLTA.DBF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1 4.2
Atribut Tabel SLTA.DBF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Atribut Tabel IPA2002.DBF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
6.1 6.2
Nama Atribut dan Variabel Memory-nya . . . . . . . . . . . . . . . . . . . . . . . . . 45 Kode Tombol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
8.1
Atribut Tabel IPA2002.DBF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
ix
7 8 8
x
DAFTAR TABEL
Daftar Gambar 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11
Tampilan FoxBase . . . . . . . . Tampilan Posisi Dot Prompt . . . Perintah create . . . . . . . . . Perintah use . . . . . . . . . . . Perintah append . . . . . . . . . Perintah edit . . . . . . . . . . . Perintah browse . . . . . . . . . Perintah go . . . . . . . . . . . . Tampilan Perintah list . . . . . . Tampilan Perintah Index . . . . Tampilan Data Setelah Dihapus .
3.1
Rancangan Menu Sistem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.1 4.2 4.3 4.4
Proses Program Clipper . . . . Letak Program Clipper . . . . Kesalahan Pengaturan Library Hasil Program pkab.prg . . . .
5.1 5.2
Hasil Program harga.prg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Contoh Program Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.1 6.2 6.3 6.4 6.5 6.6 6.7
Ilustrasi Perubahan Tampilan Tampilan Perintah dbedit() Program Pemasukan Data . . Program Penghapusan Data . Program Menampilkan Data . Program Menu Gabungan . . Perancangan Menu Latihan .
7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8
Sistem Tanpa Validasi . . . . . . . . . . Sistem dengan Validasi . . . . . . . . . . Sistem dengan Validasi Kode SMA yang Sistem dengan Validasi Kode SMA yang Tampilan Sebelum Tabel Kode SMA . . Tampilan Ketika Pencarian Kode SMA . Tampilan Setelah Pencarian Kode SMA Ilustrasi Perubahan Tampilan . . . . . .
8.1 8.2
Tampilan Pemasukan Data Peserta PKAB . . . . . . . . . . . . . . . . . . . . . . . . 83 Tampilan Pemrosesan Data Peserta PKAB . . . . . . . . . . . . . . . . . . . . . . . 85
9.1
Tampilan Perintah dbedit() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
. . . . . . .
. . . .
. . . . . . .
. . . . . . . . . . .
. . . .
. . . . . . .
. . . . . . . . . . .
. . . .
. . . . . . .
. . . . . . . . . . .
. . . .
. . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . .
. . . .
. . . . . . .
. . . . . . .
. . . . . . . . . . .
. . . .
. . . . . . .
. . . . . . . . . . .
. . . .
. . . . . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
. . . . . . . . . . .
. . . .
9 9 10 10 11 12 12 13 14 15 16
26 27 30 32
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
48 52 56 59 61 63 64
. . . . . . . . Salah Benar . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
67 68 73 73 75 75 75 76
10.1 Tampilan Logo Pembuka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 xi
DAFTAR GAMBAR
1
10.2 Tampilan Menu Gabungan Program . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 11.1 Error Membuka File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 11.2 Tampilan Pemasukan Data Peserta PKAB . . . . . . . . . . . . . . . . . . . . . . . . 102
2
DAFTAR GAMBAR
Bagian II
Pengantar Clipper
3
Bab 2
Basis Data dengan Clipper 2.1
Pendahuluan
Clipper adalah bahasa pemrograman yang lebih ditujukan untuk pengelolaan data. Clipper terkenal pada dekade tahun 80-an sampai pertengahan 90-an. Clipper dimasukkan ke dalam kelompok keluarga Xbase, yaitu dBase, Clipper, Foxbase, FoxPro, dan lain-lain. Beberapa keuntungan Clipper di antaranya : tidak memerlukan perangkat keras yang tinggi (PC AT 286 pun bisa digunakan, dan ingat di pelosok mungkin masih ada komputer PC AT 386), berbasis teks (tidak grafis) sehingga cepat dalam pencetakan ke printer dan mudah dalam pemasukan data, kecepatan pemasukan data (tentu disenangi oleh operator pemasukan data). Dalam pengembangan suatu sistem informasi tentu saja dasarnya adalah kebutuhan sisten bukan keinginan pemakai. Jika cukup dengan sistem xBase, maka tidak perlu menggunakan aplikasi grafis apalagi sampai web server. Akan tetapi jika memang sistem membutuhkan sistem yang lebih dari sekedar xBase maka tentu tidak xBase tidak dapat digunakan. Masalah lain yang bisa menjadi perhatian adalah menggarisbawahi pernyataan yang disampaikan oleh Alfons Tanudjaya, spesialis antivirus dari Vaksincom, yang dimuat dalam detikINET, Rabu (8/8/2007). Beliau menyatakan bahwa, ”Pengguna format dbf bisa lebih banyak dari format yang lebih baru. Dan secara persentase jumlah perusahaan, pengguna database .dbf ini mencapai lebih dari 50 % dan tersebar di seluruh Indonesia.” Memang untuk saat ini (September 2009) tentu jumlahnya sudah semakin menurun akan tetapi setidaknya masih ada pasar yang membutuhkan skill xBase ini. Selain itu juga ada kelemahan- kelemahannya, seperti : Clipper tidak menerapkan konsep basis data secara penuh (relasi antar file/entiti tidak didukung oleh manajemen Clipper, tapi harus dilakukan oleh programmer, misal tentang referential integrity), tidak mendukung aplikasi internet (kalau aplikasi jaringan, bisa memakai Novell Netware), segala sesuatu dikerjakan oleh programmer (misal : tidak ada generate code secara otomatis oleh sistem). Kemudian, dalam pemrogramannya bisa dikatakan struktur program dalam Clipper tidak beraturan, tidak seperti Pascal. Ini dapat dipandang sebagai kekurangan tapi dapat juga dimanfaatkan oleh pemrogram sehingga menjadi kelebihan ... :) Bagi para pemakai Linux, sudah ada proyek untuk melakukan porting Clipper ke Linux. Di mana tempatnya ? Anda diyakini dapat mencari sendiri. Jika tidak, program xBase bisa juga dijalankan dengan menggunakan DOS Emulator di GNU Linux. Aplikasi xBase bisa dijalankan dengan baik pada DOS Emulator. Tetapi tentu saja untuk mencetak informasi ke printer merupakan suatu tantangan tersendiri. Tetapi ini bisa diatasi misalnya dengan melakukan pencetakan ke file, kemudian file ini dicetak dengan aplikasi di GNU Linux. Pemilihan perangkat lunak tentu ditentukan oleh kebutuhan pemakai. Bagaimana kita memahami masalah kualitas ini ? Perangkat lunak yang berkualitas bukanlah perangkat lunak yang canggih dengan versi terbaru. Perangkat lunak yang berkualitas adalah perangkat lunak yang memenuhi dan sesuai kebutuhan pemakai. Oleh karenanya, untuk membunuh seekor nyamuk, tidak perlu memakai senjata AK-47, tapi cukup dengan sapu lidi ... :) Dan dalam satu contoh kasus, isi data base dalam perangkat lunak Oracle, justru kemudian diproses dengan Clipper. 5
6
BAB 2. BASIS DATA DENGAN CLIPPER
Sebagai bahan studi kasus, pada materi Clipper ini, akan digunakan masalah PKAB. PKAB secara singkat adalah salah satu model penerimaan mahasiswa baru tanpa tes tetapi melalui seleksi prestasi di SLTA. Namun dalam dokumen ini, tidak akan dijelaskan analisa dan perancangan program PKAB dimaksud. Jika Anda ingin mengetahui dokumentasinya, Anda dapat membaca dokumentasi program PKAB.
2.2
Perangkat-Perangkat yang Dipakai
Clipper bukan merupakan perangkat lunak yang berdiri sendiri. Ada beberapa perangkat bantu (tools) yang dapat digunakan, yaitu : • Sistem Manajemen Basis Data (Data Base Management System) Sistem Manajemen Basis Data (Data Base Management System) di sini, bukan dalam pengertian yang dipahami dalam konteks basis data. Sistem Manajemen Basis Data dalam Clipper menjalankan sebagian fungsi Sistem Manajemen Basis Data yang sebenarnya. Fungsi-fungsi yang dapat dijalankan, yaitu : pembuatan file data (dalam Clipper disebut data base file, yaitu file berekstensi .dbf, dan ingat data base di sini bukanlah pengertian data base dalam perangkat lunak Oracle, mySQL, PostGre SQL, dan lainnya, karena dalam Oracle misalnya .dbf ini disebut dengan tabel). Beberapa program yang dapat dipakai, misalnya : data base utility dari Clipper (dbu.exe), dBase (dbase.exe), Foxplus (mfoxplus.exe). Dengan beberapa pertimbangan, akan digunakan mfoxplus.exe. Perlu diperhatikan bahwa mfoxplus.ini bermasalah ketika dijalankan pada sistem Operasi Windows XP. Oleh karena itu, pada Windows XP bisa digunakan DBase III atau dbu.exe dari Clipper. • Penulisan Program (Editor) Untuk penulisan program bisa digunakan perangkat lunak apapun, yang penting dapat menulis dalam format ASCII.Jadi dapat dipakai perangkat lunak Editor Microsoft (edit.com), Microsoft Word, Notepad, Word Star (anak-anak muda mungkin tidak mengenal ini), Word Perfect. Namun disarankan untuk memakai perangkat QEdit (q.exe). Adapun alasannya adalah : QEdit kecil sehingga mudah dibawa-bawa, ada fasilitas blok kolom (copy, find & replace dalam kolom), bisa membuka banyak file, pindah ke baris tertentu dengan cepat, membuat logo dengan mudah, dapat digunakan untuk mencetak program dengan pemberian nomor baris. Orang tua yang terbiasa dengan Word Star, akan tidak asing dengan perintahperintah dalam QEdit. Tulisan ini pun ditulis dengan perangkat QEdit. Walaupun kemudian dalam perkembangannya diedit dengan TexMaker karena penulisan dokumen menggunakan GNU Linux dalam hal ini Ubuntu 9.04. • Kompilator (Compiler) Untuk mencek tata aturan penulisan, suatu program harus dikompilasi. Proses kompilasi dilakukan oleh kompilator (compiler), yang dalam Clipper diwakili oleh program clipper.exe. Jika terdapat kesalahan penulisan, Clipper akan memberi tahu nomor baris dan jenis kesalahannya (di sinilah kelebihan QEdit terpakai, yaitu pindah ke suatu nomor baris dengan cepat). Ada pun kesalahan logika tidak akan terdeteksi. Hasil dari proses kompilasi akan didapat file obyek, yaitu file dengan ekstensi .obj. Untuk melakukan proses kompilasi, terkadang perlu file- file lain, ini tergantung programnya. File-file lain yang diperlukan, biasanya tersimpan di folder include. • Linker File obyek yang didapat dari proses kompilasi, untuk menjadi file yang bisa dijalankan (dieksekusi), harus di-link. Proses linking memakai program Blinker (blinker.exe) atau program bawaan Clipper sendiri (rtlink.exe). Dalam proses linking, perlu file-file library (.lib) dan mungkin file obyek tambahan lain (.obj). File hasil linking berekstensi .exe yang berarti file tersebut dapat dijalankan. File .exe ini belum tentu bebas error.
2.3. PERINTAH DOS COMMAND
7
• Pencari tulisan Untuk program-program yang besar apalagi jika sudah lama tidak, ada kemungkinan pemrogram atau pengelola sistem lupa letak suatu modul. Nah ... dengan adanya program pencari tulisan, kita dapat mencari letak suatu modul. Hasil pencarian, kita akan mendapatkan file dan nomor baris ditemukannya modul yang kita cari. Di sinilah kolaborasi antara QEdit dengan program pencari ini. Program pencari yang akan digunakan adalah ts.exe. Program ts.exe fungsinya hampir mirip dengan Find-File dalam Microsoft Office. Kelebihan ts.exe adalah adanya nomor baris yang akan memudahkan perbaikan program.
2.3
Perintah DOS Command
Perlu ditekankan kembali tentang perlunya pemahaman DOS Command. Bagaimana menjalankan suatu file dari posisi direktori yang berbeda. Penggunaan tanda \ dalam menjalankan suatu perintah. Hal ini penting karena ketidakpahaman tentang hal ini bisa menghambat proses kompilasi, linking atau mengeksekusi file hasil akhir. Ini bisa membuat putus asa dan berfikir bahwa program ini sama sekali tidak bisa diikuti dan dijalankan. Bisa dikatakan bahwa semua perintah-perintah yang dijalankan, dilakukan dari posisi DOS Prompt. Jadi tinggalkanlah kebiasaan memegang-megang mouse untuk sementara. Bahkan terkadang juga penggunaan keyboard menjadi lebih cepat dibandingkan dengan mouse.
2.4
Manajemen Basis Data
Sebagaimana diungkapkan sebelumnya, manajemen basis data di sini dilakukan dengan mamakai perangkat lunak mfoxplus.exe. Dan Anda juga tentu sudah maklum bahwa manajemen basis data di sini tidak mencakup makna yang sesungguhnya. Proses yang dilakukan hanya sekedar membuat file basis data (.dbf) dengan field-field pelengkapnya (dalam basis data yang beneran disebut dengan tabel dan atribut).
2.4.1
Menjalankan Foxbase
Program Foxbase tersedia dalam versi banyak pemakai multi user dan satu pemakai single user. Untuk menjalankan program Foxbase ini, dari DOS Prompt (Start-Program-MS Dos Prompt), ketikkan mfoxplus[enter]. Namun sebaiknya Anda pindah dulu ke direktori tempat file data Anda, meskipun hal ini dapat dilakukan belakangan. Jika Anda berhasil, maka Anda akan mendapatkan tampilan seperti ini : Untuk membuat file data (tabel), gunakan perintah create nama-file. Contoh create ipa2002. Untuk merekam, dari posisi create tadi, tekan tombol Ctrl-W. Dalam pengisian nama atribut (field), cukup ketikkan huruf pertama dari namanya. Buatlah file data dengan nama dan atribut seperti berikut :
Field 1 2
Field Name KODE KETERANGAN
Type Character Character
Width 6 37
Tabel 2.1: Atribut Tabel PS.DBF
Dec
8
BAB 2. BASIS DATA DENGAN CLIPPER
Field 1 2 3 4 5 6 7 8 9 10
Field Name NO PKAB RESI PILIHAN 1 PILIHAN 2 NAMA SISWA NO INDUK JURUSAN KODE SMA NAMA SMA KELAMIN
Type Character Character Character Character Character Character Character Character Character Character
Width 5 1 6 6 30 10 1 8 35 1
Dec
Tabel 2.2: Atribut Tabel IPA2002.DBF
Field 1 2 3 5 6
Field Name KODE SMA NEGE SMA NAMA SMA JALAN KOTA
Type Character Character Character Character Character
Width 8 1 35 35 25
Dec
Tabel 2.3: Atribut Tabel SLTA.DBF Untuk keluar dari Foxbase, ketikan quit. Program Foxbase tersedia dalam versi banyak pemakai multi user. Meskipun tujuan akhir adalah kemampuan membuat program dengan Clipper, namun perintah-perintah dasar pengelolaan basis data (dalam konteks Clipper) tetap diperlukan. Perintah-perintah dasar ini dikenal dengan sebutan itshape dot command, karena diawali oleh tanda ’.’. Perhatikan tanda ’.’ di atas tulisan Command. Perintah-perintah yang dijalankan di sini, bersifat interaktif. Sistem akan langsung merespon dan menampilkan hasilnya di layar.
2.4.2
Perintah create
1. Fungsi : perintah create digunakan untuk membuat file data (tabel) beserta atribut-atributnya field. 2. Sintaks : create [nama-file] 3. Contoh : create ipa2002 4. Tampilan : 5. Tindak Lanjut : Isi nama field (field nama), tipe (type), ukuran width, dan jumlah angka desimal (dec).
2.4.3
Perintah use
1. Fungsi : perintah use digunakan untuk membuka file data yang telah dibuat dengan perintah create. File data yang telah dibuat, untuk membukanya cukup dengan perintah use. Jika digunakan lagi perintah create, maka data akan hilang.
2.4. MANAJEMEN BASIS DATA
.............. .... ... .. .. .. . .. .. .. .. .. .. .. ..... ..... .. .. ...... .. .. .. .. ... .. .. .. .. .. .. .. .. .. .. .. .. . .. .. .. .. .. .. .. .. .. .. .. . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ...... .. ..... .... ......
9
... ... .. .. .. ... ....... ... .. .. .. ... .... .... ..
.... .. . .. .... ..... ... .. . .. ....
. Serial Number FPE030530 Command Line
Multi-User FoxBASE+ 2.00 (c) 1987 Fox Software Enter a FoxBASE+ command. Gambar 2.1: Tampilan FoxBase
. Command Line Multi-User FoxBASE+ 2.00 (c) 1987 Fox Software Enter a FoxBASE+ command. Gambar 2.2: Tampilan Posisi Dot Prompt
.. .. .. .. .. ........ .. .. ... . ... .. ...
10
BAB 2. BASIS DATA DENGAN CLIPPER
Gambar 2.3: Perintah create 2. Sintaks : use nama file data 3. Contoh : use pkab 4. Tampilan :
Gambar 2.4: Perintah use 5. Tindak Lanjut : Tergantung apa yang akan dilakukan, bisa menghapus data, melihat data, menghapus data, merubah atribut, dan sebagainya.
2.4.4
Perintah append
1. Fungsi : perintah append digunakan untuk menambah data atau record ke dalam file data (tabel). 2. Sintaks : append 3. Contoh : append
2.4. MANAJEMEN BASIS DATA
11
Gambar 2.5: Perintah append 4. Tampilan : 5. Tindak Lanjut : Masukkan data-data sesuai dengan data-data yang ada.
2.4.5
Perintah append blank
1. Fungsi : Perintah append blank digunakan untuk menambahkan data atau record kosong ke dalam file data (tabel). 2. Sintaks : append blank 3. Contoh : append blank 4. Tampilan : 5. Tindak Lanjut : -
2.4.6
Perintah edit
1. Fungsi : perintah edit digunakan untuk memperbaiki isi data atau record di dalam file data (tabel). Data yang diperbaiki sesuai dengan posisi record sekarang. 2. Sintaks : edit 3. Contoh : edit 4. Tampilan : 5. Tindak Lanjut : Gantilah isi data-data sesuai dengan data-data yang ada.
12
BAB 2. BASIS DATA DENGAN CLIPPER
Gambar 2.6: Perintah edit
2.4.7
Perintah browse
1. Fungsi : perintah browse merupakan perintah yang memiliki beberapa fungsi, yaitu : menampilkan data, merubah data, menghapus data. 2. Sintaks : browse [field, nama-nama field 3. Contoh : browse field NO PKAB,NAMA SISWA browse 4. Tampilan :
Gambar 2.7: Perintah browse 5. Tindak Lanjut : (a) Untuk menggantilah isi data-data, maka pada posisi kursor, data bisa langsung diganti. (b) Untuk menghapus data, pada posisi kursor, tekan tombol del, maka data akan dihapus.
2.4. MANAJEMEN BASIS DATA
13
(c) Untuk menampilkan data, otomatis data sudah ditampilkan. Sedangkan untuk berpindahpindah record, bisa menggunakan tombol panah, pg-up, pg-dn. Untuk pindah ke samping, jika field terlalu banyak, gunakan tombol Ctrl-panah.
2.4.8
Perintah go
1. Fungsi : Fungsi go digunakan untuk mengarahkan petunjuk atau pointer ke record tertentu di dalam file data (tabel). 2. Sintaks : go [nomor record] 3. Contoh : go 11 4. Tampilan : Perhatikan tulisan Rec:11/3324, yang artinya sekarang berada di record ke-11 dari 3324 record.
. go 11 . Command LineIPA2002
Rec: 11/3324 Enter a FoxBASE+ command.
Gambar 2.8: Perintah go 5. Tindak Lanjut : Sesuai keperluan, mau memperbaiki data, menambah data, dan sebagainya.
2.4.9
Perintah list
1. Fungsi : Fungsi list digunakan untuk menampilkan data. 2. Sintaks : list [nama field] [for kondisi] 3. Contoh : Perintah list ini sangat bervariasi, tergantung keperluan. (a) (b) (c) (d)
use ipa2002 list list NO PKAB, NAMA SISWA, PILIHAN 1 list NO PKAB, NAMA SISWA, PILIHAN 1 for PILIHAN 1=’201647’
4. Tampilan : Perintah list yang terakhir artinya tampilkan Nomor PKAB, Nama Siswa, Pilihan 1 untuk peserta yang memilih program studi Matematika. 5. Tindak Lanjut : Sesuai keperluan, mau memperbaiki data, menambah data, dan sebagainya.
2.4.10
Perintah zap
1. Fungsi : Fungsi zap digunakan untuk menghapus seluruh data. Data akan terhapus tapi struktur data masih ada. 2. Sintaks : zap 3. Contoh : zap 4. Tampilan : -
14
BAB 2. BASIS DATA DENGAN CLIPPER
1541 1591 1641 1642 1643 1656 1701 1729 1762 1764 1774 1802 1813 1825 1830 1836 1905 2088 3293 3305
11547 11599 11650 11651 11652 11665 11710 11738 11771 11773 11783 11811 11822 11835 11840 11846 11915 11541 10321 11099
TANTRI RAHMAWATI HENI MARLENA NADRA MELATI CENDRA KASIH S ISRUNA HADIANI SIREGAR ALEX SOELISTYO SITA YULIANTARI MERRY ANGGRAENI DEWI AMARTHANI ROHANNA DUMA SARI S. INDAH WAHYUNI LINDRA GULTOM NURHASANAH PITRI HRP RAHMA NOVIYANI WINDA DERITA SINURAT OLIVIA SRI FEBRIANTY IKLILLAH HAYATI TUTI SURYATUL AZMI DWINA OKTAVIANI APRI YULIANI
201647 201647 201647 201647 201647 201647 201647 201647 201647 201647 201647 201647 201647 201647 201647 201647 201647 201647 201647 201647
Gambar 2.9: Tampilan Perintah list
2.4.11
Perintah append from
1. Fungsi : Fungsi append from digunakan untuk memasukkan isi satu file tabel ke tabel aktif (yang sedang di-use). File tabel yang akan dimasukkan diasumsikan sudah ada. Data yang dimasukkan sesuai nama atribut field masing-masing. 2. Sintaks : append from [file data] 3. Contoh : (a) use ipa2002 (b) append from ipa2001 4. Tampilan : -
2.4.12
Perintah index
1. Fungsi : Fungsi index digunakan untuk mengurutkan isi satu file tabel sesuai kebutuhan. Dengan adanya index, maka manajemen data menjadi lebih mudah. Index ini urutannya selalu dari kecil ke besar ascending. Oleh karena itu perlu menggunakan trik khusus, misalnya memberi tanda ’-’ (minus) pada kunci index yang bertipe numerik. 2. Sintaks : index on [atribut] to [nama file] 3. Contoh : (a) (b) (c) (d)
use ipa2002 list nama siswa,skor index on -SKOR to hasil list nama siswa,skor
4. Tampilan : sebelum dan setelah di-index
2.4. MANAJEMEN BASIS DATA
15
3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324
APRI YULIANI DEVITA ACHDALIA WIANA PUSPITASARI RESY APRILYA DEWI SETIATI NURMA YULITA NOFRINACHAN FACHRI FAFIAN DENI AWAL SETIAWAN YUNITA BUDIARTI NANDYA KARTIKA PUTRI YULIENI EKO HERWINANDA MUSPIKA WATNA SANDRA RUSDIANA ROY KARDO RAYMUN SITUMORANG ROZI DEFRIO IDA RETNO NINGSIH NURLAILA DEDI PRAPAT
813.370 734.460 767.220 803.070 843.480 793.460 795.570 0.000 706.490 781.500 787.660 666.070 777.300 795.070 747.310 754.910 786.000 781.890 852.870 778.090
3139 9 1875 3304 3180 728 143 571 1943 1921 181 1904 182 183 695 722 265 180 2868 603
HENDI EKA SETIAWAN AMIRANI ZAIBUN MUHAMMAD DAVID IIN NOVIANI WAHYUNI RAJA GUK-GUK PANCA RAHAYU PRASETYANINGSIH LISA YUNITA YENI ANGGRIANA VERDINA DEKAWATI LISA KARTIKA DEWI RIKI AFRIANDA MAYATIKA DINA SANTI LESTARI NELDA ARIANI ISMONO DIPHO MUHARDIAN SATIMAH MURNI FAJRI SYAMSUL FISSA NURJANAH JUWITA ASTUTI
896.210 897.060 897.660 899.010 899.110 899.550 900.190 901.140 902.590 904.630 905.000 906.800 907.140 908.650 908.750 911.410 913.310 914.530 917.410 949.010
Gambar 2.10: Tampilan Perintah Index
16
BAB 2. BASIS DATA DENGAN CLIPPER
JUMLAH 50 70 60 78 37 90 162 146 84 64 165 BROWSE
NO_PKAB RESI PILIHAN_1 11046 201141 10118 201446 10860 201543 10441 201647 10669 201744 10189 201841 11047 201945 11311 202047 11015 202144 21161 202241 11392 202345 TESTX
PILIHAN_2 201744 203847 202047 200845 200845 202144 201446 204046 200741 203847 200346
Exclusive
NAMA_SISWA ISKANDAR DINATA ISKANDAR G FAHRI MESY SEPRIDAWATI MUHLISIN INDRA HANAFI ZAKI TANTOWI EKO WAHYUDI DENI AWAL SETIAWAN DEDI KURNIAWAN RAHMAWATI SILVIA DIAN ANGGRAENI Rec: 11\39
Del
Gambar 2.11: Tampilan Data Setelah Dihapus
2.4.13
Perintah delete record
1. Fungsi : Fungsi delete record digunakan untuk menghapus record tertentu. Data akan terhapus tapi data masih ada selama belum ada perintah pack. 2. Sintaks : delete record [nomor record] 3. Contoh : delete record 11 4. Tampilan : Perhatikan bahwa record ke 11 (dari 39 record) statusnya terhapus (ada tulisan Del).
2.4.14
Manajemen Basis Data dengan dbu.exe
Jika sistem operasi yang digunakan adalah Windows NT, maka perangkat lunak untuk manajemen basis data yang bisa digunakan adalah database utiliy dbu.exe dari Clipper.
Bagian III
Gambaran Sistem
17
Bab 3
Sistem yang Akan Dibuat Pada materi ini, akan dicoba untuk membuat suatu model sistem penerimaan mahasiswa melalui jalur PMDK (Penelusuran Minat dan Kemampuan). Pada proses ini, suatu perguruan tinggi akan menerima mahasiswa baru. Kriteria penerimaan berdasarkan nilai-nilai raport di SLTA. Nilai-nilai ini kemudian dibobot dan selanjutnya diranking menurut pilihan program studi masing-masing. Untuk mempermudah proses, dalam hal ini nilai raport hanya akan dirata-rata yang kemudian menjadi skor akhir untuk penentuan ranking.
3.1
Rancangan Menu
Menu-menu yang akan dikembangkan dalam sistem ini dapat dilihat pada gambar berikut ini :
Gambar 3.1: Rancangan Menu Sistem
19
20
BAB 3. SISTEM YANG AKAN DIBUAT
Bagian IV
Pemrograman Clipper
21
Bab 4
Program Dasar 4.1
Check List for Good Programming
Ketika seseorang sedang belajar pemrograman biasanya fokus pemikirannya ke masalah yang ada di dalam program itu. Ketika program sudah berjalan dan memberikan hasil sesuai dengan yang seharusnya, maka biasanya pemrogran sudah merasa selesai dalam programnya. Satu hal yang kadang sering dilupakan adalah tentang kaidah-kaidah untuk menulis program yang baik. Oleh karena itu, dalam kesempatan ini akan disampaikan kriteria-kriteria program yang baik. Ini juga penting untuk menumbuhkan budaya bagaimana membuat program yang bukan sekedar bisa dieksekusi dan menyelesaikan masalah tapi juga memberikan nuansa lain. Beberapa kriteria tidak bisa diterapkan di sini atau semestinya dimodifikasi. Paling tidak hal ini bisa menjadi panduan untuk pemrogram yang ingin mencoba mengembangkan budaya menulis program dengan baik. Seperti apakah kriteria pemrograman yang baik ? Salah satu bahan acuan tentang ini, diambil dari tulisan Prof. Finkel (beliau pernah berkunjung ke Jurusan Matematika Universitas Lampung untuk memberikan pelatihan) yang bisa diakses di : http://www.cs.uky.edu/∼raphael/checklist.html Panduan ini memang lebih diarahkan pada pemrograman dengan Perl, akan tetapi ada panduanpanduan yang bisa diterapkan dalam pemrograman secara umum. Checklist for good programming This checklist should help you write high-quality programs. Raphael Finkel, 8/17/2005 1. Identifiers : Make sure all your identifiers are meaningful. (a) One-letter identifiers are almost never meaningful. (b) Names like flag and temp are seldom meaningful. Instead of flag, consider naming the Boolean condition it checks for, such as valueFound. (c) Consider multi-word identifiers, like nameIndex. Long identifiers (within reason) tend to be very readable. 2. Bare literals : Avoid numbers other than 0 and 1 and strings other than ”” in your program except when you define constants. (a) Don’t use a literal integer as an array bound. (b) Don’t use a literal integer as a run parameter, such as a timeout or port number. (c) Don’t use literal integers to select menu entries. (d) Don’t use a literal integer to measure the size of a string or some data; use sizeof() and strlen() in C and C++ and .length() and .size in Java. (e) Don’t use a literal string for a file name. You may output literal strings, though. (f) Don’t use a literal integer to index into an array containing heterogeneous data. 23
24
BAB 4. PROGRAM DASAR (g) Don’t declare an identifier with a name denoting a literal, such as ”thirty”. 3. Modularization : A program is built out of interacting components. (a) Don’t put all your code into the main() routine. (b) In fact, don’t make any routine do too much work. If it’s longer than about 50 lines, it is maybe too long. (c) If you duplicate code several times, consider whether a loop would work better, or perhaps a subroutine. (d) If you find you are indenting very deeply, you most likely aren’t using subroutines when you should. (e) Don’t reinvent library routines (unless your assignment requires it). Look in the manuals to learn about sprintf() and atoi(), for instance. (f) Use header files in C and C++ (header files have names ending .h) to define all constants needed by multiple files and declare all subroutines exported between files. But don’t put the body of subroutines in header files (with the rare exception of inline subroutines). 4. Formatting : Your program should be easy to read. (a) Look at http://geosoft.no/development/javastyle.html for clear suggestions on formatting and other presentation issues. This reference is specifically directed at Java, but it has value for other languages, too. (b) Try to restrict all your lines to 80 characters; many people view code in 80-column windows for historical reasons. (c) Don’t use both tabs and spaces for indentation, because not all text editors treat tabs as exactly 8 spaces. (d) Do follow a consistent indentation pattern that reflects the program’s control structure. (e) Don’t put lots of blank lines in your program. One blank line between subroutines is enough. (f) Different operating systems terminate lines different ways. If you move between Win32 (which uses /r/n), Unix (which uses /n), and MacOS (which uses /r), reformat your file to use a consistent termination method. (g) Don’t set the executable bit (Unix) on your source files. 5. Coding : You want your coding to be clear, maintainable, and efficient, in that order. Some of the rules here are very specific; others are more general. (a) Don’t use a sequence of if statements that have no else if only one can match; use else if. (b) When you want to categorize text input, don’t enumerate the possible first characters. (c) Use shift operators instead of multiplication for constructing bit patterns. (d) In a switch statement, always check for the default case. Likewise, in a sequence of if-then-else statements, use a final else. (e) All system calls can fail. Always check the return code, and use perror() to report the failure. (f) Booleans should always use the boolean type in Java, bool in C++, and 0/1 integers in C. Don’t use characters t and f, and don’t use -1 and 1. (g) Use loops to initialize data structures if possible. (h) Use each variable and each field of a structure for exactly one purpose. Don’t overload them unless there is an excellent reason to do so.
4.1. CHECK LIST FOR GOOD PROGRAMMING
25
(i) Don’t use the same identifier for both a type, a variable, and a file name, even if you change the capitalization. It’s too confusing. (j) If you are modifying data with htonl() or a similar routine before network transmission, don’t modify the data in place. Build a second data structure. (k) Try not to use global or nonlocal variables. Declare each variable in the smallest scope you can. There are legitimate uses of nonlocal variables, but make sure you really need them. (l) Shell and Perl programs should have their # ! line as the first line of the file; otherwise, the line is just a comment. (m) Try to avoid coding special cases. You can often use pseudo-data or other data-structure methods that allow you to fold special cases into the regular cases. 6. Compilers : Let them help you find mistakes (a) Always invoke compilers with all warnings enabled. For C and C++, use the -Wall flag; for Java, use -Xlint:all -deprecation. (b) All Perl programs should run with the -w flag and should have use strict. All Perl cgi-bin scripts should have the -T flag, too. 7. The make utility : Use it, and use it well. (a) A makefile should always have a ”clean” recipe, which should remove all files that can be reconstructed by other recipes in the makefile, including object and executable files. (b) If your project has multiple source files, the makefile should generate object (.o) files as needed and link them together. (c) The makefile should be written so that if you run make twice in a row, the second run does no recompilation. (d) Every recipe should create the file specified in its target. (e) Every recipe should use every file specified in its prerequisite list. (f) Learn to use rules for targets like .c.o to avoid repetitious makefiles. (g) If you have just one C or C++ source file, the executable file should have the same name (without the extension .c or .cpp). (h) Make sure you list all .h files as prerequisites where they are needed. Consider using makedepend to generate the prerequisite list for you. 8. Documentation : It’s not just just for the grader. It helps you as you write the program, too! (a) Add documentation as you write the program. You can always modify it as your design changes. (b) Include external documentation : How does one compile and run the program, and what is it meant to do ? The external documentation could be in a separate file; for small projects, it can be a comment in the single source file. (c) Include internal documentation : What algorithms and data structures are you using? An overview can be in a separate file, but usually internal documentation is placed on the specific routines, declarations, and steps that it describes. (d) Check your whole program and documentation for spelling mistakes. It is impolite to turn in misspelled work. (e) Check all your documentation (and output messages) for grammar mistakes. (f) Programs are much more readable if you put a short comment on closing braces. For instance, the brace closing a conditional can have a comment like ”if value looks good”. A brace closing a loop can have a comment like ”for each input line”. A brace closing a procedure can have a comment just naming the procedure. A brace closing a class can have a comment saying ”class” and then the name of the class.
26
4.2
BAB 4. PROGRAM DASAR
Pemrosesan Program Clipper
Kepopuleran Clipper pada masa jayanya (tahun 1990-an), barangkali tidak dapat dilepaskan dari kesuksesan produk dBase III. Namun kelemahan dBase adalah selalu diperlukannya perangkat dBase itu sendiri untuk menjalankan program yang dibuat menggunakan dBase. Produk Clipper dapat menghasilkan program mandiri yang siap dieksekusi (executable file). Proses pembuatan program Clipper (.prg) menjadi program yang siap dieksekusi (.exe) melalui beberapa tahapan, yaitu kompilasi dan linking. Hal tersebut bisa dilihat pada gambar berikut :
Gambar 4.1: Proses Program Clipper Proses kompilasi dilakukan untuk mencek sintaks penulisan program yang dibuat. Jika ada penulisan yang tidak benar, Clipper akan memberi tahu baris yang salah. Proses kompilasi tidak memberi tahu jika ada kesalahan lain seperti kesalahan logika, pembagian dengan nol, dan sebagainya. Jika tidak ada kesalahan akan dihasilkan file obyek (.obj). Jika masih ada kesalahan, maka program dibetulkan lagi dengan menggunakan teks editor (QEdit : q.exe). Sedangkan proses linking
4.3. PROSES KOMPILASI
27
dilakukan untuk mencek kaitan antar program, keberadaan fungsi atau prosedur yang digunakan. Jika tidak ada kesalahan akan dihasilkan program yang bisa dijalankan dari DOS Prompt (.exe). Jika masih ada kesalahan pada program, maka program dibetulkan lagi dengan menggunakan teks editor (QEdit : q.exe). Program yang sudah menjadi .exe bukan berarti bebas dari kesalahan dan inilah keajaiban Clipper ... :) Sebelum melakukan proses kompilasi dan linking ada variabel lingkungan (environment variable) yang harus diatur. Untuk mengatur variabel lingkungan ini, harus diketahui terlebih dahulu dimana program Clipper disimpan. Pengaturan ini dilakukan dari posisi DOS Prompt, jadi Anda harus memilih Start-Program-DOS Prompt. Sebagai contoh dalam kasus ini, program Clipper disimpan di partisi c: dengan subdirektori ca-52. Lebih jelasnya dapat dilihat pada gambar :
Gambar 4.2: Letak Program Clipper Variabel lingkungan tersebut ada tiga, yaitu : 1. include, untuk menentukan letak direktori file-file include (.ch). Pada contoh ini, maka ketikan set include = c : \ca − 52\include[enter]. 2. obj, untuk menentukan letak direktori file-file obyek (.obj). Pada contoh ini, maka ketikan set obj = c : \ca − 52\obj[enter]. 3. lib, untuk menentukan letak direktori file-file pustaka (.lib). Pada contoh ini, maka ketikan set lib = c : \ca − 52\lib[enter]. Nilai variabel lingkungan ini tentu saja bisa berbeda-beda tergantung Anda menyimpan program Clipper pada komputer Anda.
4.3
Proses Kompilasi
Sebagaimana telah disebutkan sebelumnya, proses kompilasi dilakukan untuk mencek sintaks penulisan program. Untuk program yang menggunakan perintah # include, maka variabel lingkungan include harus sudah diatur. Perlu ditekankan sekali lagi tentang perlunya pemahaman tentang direktori dan posisi file. Perintah compiling dan linking bisa jadi berbeda dengan apa yang seharusnya dilakukan pada komputer Anda karena letak direktori Clipper yang berbeda. Jika ketika Anda memberikan perintah ternyata yang keluar adalah pesan kesalahan :
28
BAB 4. PROGRAM DASAR
Bad command or file name Berarti kesalahan terletak pada perintah compiling atau linking bukan pada source code. Misalkan kita memiliki program seperti berikut :
/* ----------------------------------------file : si.prg program untuk mencetak tulisan saja ----------------------------------------- */ clear * menghapus layar @ 0,0 to 24,79 * membuat kotak pada satu layar penuh set color to gr+*/n * mengatur warna tulisan menjadi kuning dan berkedip * dengan latar belakang berwarna hitam @ 10,20 say ’Program Studi Sistem Informasi * mencetak tulisan Program Studi Sistem Informasi * pada posisi baris 10 kolom 20 set color to * mengembalikan pengaturan warna ke tulisan putih * latar belakang hitam wait ’’ * menghentikan program sampai pemakai menekan suatu tombol return * kembali ke sistem Kemudian program dikompilasi dengan perintah : C:\dwi\clipper>\ca-52\bin\clipper si Hasilnya seperti berikut : 361K available Compiling SI.PRG SI.PRG(16) Error C2007 1 error
Unterminated string: ’Program Studi Sistem Informasi’
No code generated Terlihat bahwa masih ada kesalahan pada baris 16. Pada baris 16, keterangannya Unterminated string: ’Program Studi Sistem Informasi’, yang artinya kurang petik penutup. Maka program lengkapnya, setelah diperbaiki menjadi : /* ----------------------------------------file : si.prg program untuk mencetak tulisan saja ----------------------------------------- */
4.3. PROSES KOMPILASI
29
clear * menghapus layar @ 0,0 to 24,79 * membuat kotak pada satu layar penuh set color to gr+*/n * mengatur warna tulisan menjadi kuning dan berkedip * dengan latar belakang berwarna hitam @ 10,20 say ’Program Studi Sistem Informasi’ * mencetak tulisan Program Studi Sistem Informasi * pada posisi baris 10 kolom 20 set color to * mengembalikan pengaturan warna ke tulisan putih * latar belakang hitam wait ’’ * menghentikan program sampai pemakai menekan suatu tombol return * kembali ke sistem Jika program tersebut kita kompilasi ulang, maka hasilnya seperti berikut : Z:\home\dwijim\kuliah\clipper>ca-52\bin\clipper si.prg Clipper (R) Version 5.2 Copyright (c) 1985-1993, Computer Associates International, Inc. Microsoft C Floating Point Support Routines Copyright (c) Microsoft Corp 1984-1987. All Rights Reserved. 307K available Compiling SI.PRG Code size 130, Symbols 144, Constants 46 Karena sudah tidak ada keterangan error, maka proses dilanjutkan dengan proses linking. Maka kita berikan perintah seperti berikut :
C:\dwi\clipper>\ca-52\bin\blinker file si
Jika proses linking dilakukan dengan DOS Prompt dari Microsoft Windows, tidak akan ada keterangan apapun (meskipun mungkin ada kesalahan). Satu patokan saja, yaitu jika file .exe tidak dihasilkan, berarti masih ada kesalahan. Misal kita berikan perintah : C:\dwi\clipper>si Bad command or file
name
Ini artinya file test.exe belum jadi. Penyebabnya bisa karena masih ada kesalahan dalam program (misal menjalankan fungsi atau prosedur yang tidak ada, atau kita salah dalam memberikan perintah set lib). Untuk proses linking yang dilakukan dengan DOS Prompt murni atau dengan DOS Emulator di GNU LINUX, bisa jadi akan terlihat suatu pesan kesalahan seperti berikut :
30
BAB 4. PROGRAM DASAR
Gambar 4.3: Kesalahan Pengaturan Library BLINKER : 1109 : unable to open file CLIPPER.LIB Hal ini disebabkan karena environment variable set lib belum diatur atau sudah diatur tetapi posisi direktori lib-nya salah. Untuk itu berilah pengaturan set lib sesuai dengan tempat di mana file-file library Clipper disimpan (Lihat kembali catatan tentang environment variable). Jika sudah benar, kita akan mendapatkan file-file berikut : Volume in drive D is home/dwijim Directory of D:\KULIAH\CLIPPER SI SI SI SI
BIF 354 09-25-09 7:01a PRG 653 09-25-09 6:44a EXE 178,460 09-25-09 7:01a OBJ 987 09-25-09 6:45a 4 file(s) 180,454 bytes 0 dir(s) 126,615,552 bytes free
Sekarang kita bisa menjalankan program tersebut dengan nama si.exe. Jadi dari DOS Prompt cukup tulisakan si [enter].
4.4
First Clipper Program
Pada program pertama Clipper ini, kita akan mencoba untuk membuat program yang fungsinya sekedar menampilkan suatu tulisan dan memberhentikan proses sampai pemakai menekan sembarang tombol. Program mirip dengan conton program pada bagian sebelumnya. Perintah-perintah yang digunakan cuma ada 4 macam yaitu clear, say, wait, dan return.
4.4.1
Perintah clear
1. Fungsi : membersihkan layar tampilan 2. Sintaks : clear 3. Contoh : clear
4.4.2
Perintah say
1. Fungsi : mencetak sesuatu ke layar atau printer
4.4. FIRST CLIPPER PROGRAM
31
2. Sintaks : @ baris,kolom say ’tulisan yang mau dicetak’ 3. Contoh : @ 12,30 say ’dwi sakethi : [email protected]’
4.4.3
Perintah wait
1. Fungsi : menghentikan proses sampai pemakai menekan sembarang tombol 2. Sintaks : wait [tulisan] 3. Contoh : (a) wait (b) wait ’tekan tombol apa saja !’ 4. Keterangan : pada contoh pertama, program akan berhenti sementara dan di layar ditampilkan tulisan ’Press any key to continue’, sedangkan pada contoh kedua, akan ditampilkan tulisan ’tekan tombol apa saja’.
4.4.4
Perintah return
1. Fungsi : mengembalikan arah program ke program sebelumnya, dalam hal ini karena program dijalankan dari DOS Prompt, maka program akan kembali ke DOS Prompt. Return ini merupakan akhir dari program, atau bisa juga akhir suatu fungsi atau prosedur. 2. Sintaks : return [hasil] 3. Contoh : return Berikut ini beberapa contoh program yang dapat dicoba dan dilihat hasilnya : /* ----------------------------------------file : dwi.prg program untuk mencetak tulisan dwi yang tersusun dari huruf-huruf d-w-i ----------------------------------------- */ clear * menghapus layar @ 0,0 to 24,79 * membuat kotak pada satu layar penuh @ @ @ @ @ @ @ @ @ @ @ @ @ @
05,20 06,20 07,20 08,20 09,20 10,20 11,20 12,20 13,20 14,20 15,20 16,20 17,20 18,20
say say say say say say say say say say say say say say
’ d ’ d ’ d ’ d ’ d ’ ddddd ’ d d ’ d d ’ d d ’ d d ’ d d ’ d d ’ d d ’ dddddd
’ ’ ’ ’ ’ i ’ i ’ i ’ i ’ i ’ i ’ i ’ i ’ iiii ’
iii i i iii w w w w w w w w w w w w w w w w w w w w w w w
32
BAB 4. PROGRAM DASAR
@ 20,15 say ’dibuat oleh dwi sakethi, http://dwijim.staff.unila.ac.id’ @ 21,20 say ’Tekan tombol apa saja untuk melanjutkan ...’ wait ’’ * menghentikan program sampai pemakai menekan suatu tombol return * kembali ke sistem
4.5
Praktikum I
1. Buatlah file .dbf bernama IPA2002.DBF dan SLTA.DBF. Kemudian isi dengan minimal 10 record untuk data siswa (dalam IPA2002.DBF) dan 15 record untuk kode dan nama-nama SLTA (dalam SLTA.DBF). Struktur tabel SLTA.DBF tampak seperti berikut : Sedangkan Field 1 2 3 5 6
Field Name KODE SMA NEGE SMA NAMA SMA JALAN KOTA
Type Character Character Character Character Character
Width 8 1 35 35 25
Dec
Tabel 4.1: Atribut Tabel SLTA.DBF struktur file IPA2002.DBF seperti berikut : 2. Buatlah program (tentu saja dengan Clipper) dengan hasil seperti pada tampilan berikut ini. Bisa juga Anda membuat kreasi sendiri dan selamat mencoba.
Gambar 4.4: Hasil Program pkab.prg
4.5. PRAKTIKUM I
33
Field 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
Field Name NO PKAB RESI PILIHAN 1 PILIHAN 2 NAMA SISWA NO INDUK JURUSAN KODE SMA NAMA SMA KELAMIN INA 1 INGG 1 MAT 1 FIS 1 KIM 1 BIO 1 SKOR TANDA PILIHAN PIL LAIN KET PILIH TAHAP
Type Character Character Character Character Character Character Character Character Character Character Numeric Numeric Numeric Numeric Numeric Numeric Numeric Character Character Character Character Character
Width 5 1 6 6 30 10 1 8 35 1 4 4 4 4 4 4 7 10 6 6 1 1
Tabel 4.2: Atribut Tabel IPA2002.DBF
Dec
1 1 1 1 1 1 3
34
BAB 4. PROGRAM DASAR
Bab 5
Program Input Data dan Menu 5.1
Program Input Data
Suatu nilai dalam program Clipper bisa disimpan dalam variabel atau atribut (field. Jika disimpan pada variabel, artinya diletakkan di memory komputer, akibatnya jika komputer mati maka nilai variabel tersebut hilang. Sedangkan jika disimpan dalam atribut field, nilai tersebut akan disimpan secara permanen dalam disk berupa file atau tabel. Variabel dalam Clipper memiliki 4 tipe, yaitu : 1. String, dipakai untuk menyimpan suatu nilai yang terdiri dari campuran karakter huruf, karakter angka, dan karakter lainnya. Tipe ini misal dipakai untuk menyimpan nama, alamat, nama mata kuliah, keterangan jenis kelamin, dan sebagainya. Contoh : nama = ’Hakan Sukur’ nama_kes = ’Turki Banteng Bosporus’ alamat := "Jl. Yang Benar No. 1 Gedong Meneng’ kosong := space(11) store ’sejahtera’ to tujuan
2. Numeric, dipakai untuk menyimpan suatu nilai yang berupa angka dan akan diopersikan secara matematis. Misalnya nomor KTP, meskipun isinya berupa nilai-nilai 0-9 akan tetapi karena nomor KTP tidak akan pernah dioperasikan secara matematis maka tipenya bukan numeric. Demikian juga halnya dengan nomor mahasiswa, NIP, nomor HP dan sebagainya. Angka di sini bisa berupa nilai pecahan, nilai bulat, nilai positif atau pun negatif. Dalam Clipper tidak dilakukan pembedaan jenis bilangan. nomor = 0 nilai = 87.11 hasil := -11 store -27 to untung
3. Logical, dipakai untuk menyimpan nilai yang hanya terdiri dari nilai .t. (true) dan nilai .f. (false). Misalnya untuk kondisi lulus tidak lulus, akhir file/tabel, dan sebagainya. Contoh : lulus = .t. jawaban = .f. akhir := .t. store .f. to boleh
35
36
BAB 5. PROGRAM INPUT DATA DAN MENU 4. Date, dipakai untuk menyimpan nilai yang berupa tanggal. Untuk menyimpan nilai tanggal ini, bisa digunakan fungsi date() atau fungsi ctod(). Contoh : tg_lhr = date() && tanggal sekarang tg_lulus = ctod(’11-06-2002’) batas := ctod(’01-01-2003’)
Pendefinisian suatu variabel dilakukan dengan memberi harga awal variabel. Misal variabel urutan ditentukan memiliki tipe numerik, maka cukup dengan memberikan perintah urutan = 0. Salah satu kelebihan (kalau tidak mau dikatakan sebagai kekurangan) Clipper adalah ketidakberaturan masalah variabel ini. Bagi yang pernah menggunakan bahasa Pascal atau C akan dapat merasakannya. Misal suatu variabel semula ditentukan bertipe numerik, dengan perintah : store 1 to baris
Jika tiba-tiba di bagian lain program tipe baris diubah ke string (misalnya), hal itu tidak akan menyebabkan kesalahan program. store ’ini aneh’ to baris
Demikian juga dengan hasil suatu fungsi, suatu fungsi bisa memberikan hasil dengan tipe yang berbeda. Pada satu sisi, misal return .t. dan pada sisi lain return 1. Apakah ini keajaiban dunia yang kesembilan ?
5.2
Perintah yang Digunakan
Program input data yang akan dibuat belum menggunakan tabel (file data base). Program hanya menyimpan data di memory dan akan hilang setelah program kembali ke MS DOS Prompt. Perintah yang digunakan adalah perintah-perintah pada bagian sebelum ini yaitu : clear, say, return. Sedangkan perintah barunya adalah get, read, store.
5.2.1
Perintah get
1. Fungsi : memasukkan data melalui keyboard dan biasanya digabung dengan perintah say 2. Sintaks : @ baris,kolom get nama variabel [picture] [valid] 3. Contoh : @ 1,1 @ 2,1 @ 1,14 @ 2,14 read
say say get get
’Nama Anda : ’ ’Tgl. Lahir : ’ nama picture ’@!’ tgl_lahir
&& huruf besar
4. Keterangan : program akan menunggu pemakai memasukkan nama dan tanggal lahir. Nama akan diubah langsung ke huruf besar karena ada perintah picture ’@!’. Posisi baris dan kolom harus disesuaikan dengan letak baris dan kolom pada perintah say.
5.2. PERINTAH YANG DIGUNAKAN
5.2.2
37
Perintah read
1. Fungsi : mengakhiri perintah pemasukkan data yang didahului dengan perintah get 2. Sintaks : read 3. Contoh : @ 1,1 @ 2,1 @ 1,14 @ 2,14 read
5.2.3
say say get get
’Nama Anda : ’ ’Tgl. Lahir : ’ nama picture ’@!’ tgl_lahir
&& huruf besar
Perintah store
1. Fungsi : memasukkan suatu nilai ke variabel 2. Sintaks : store [nilai] to [variabel] 3. Contoh : nama = ’Hakan Sukur’ nama_kes = ’Turki Banteng Bosporus’ alamat := "Jl. Yang Benar No. 1 Gedong Meneng’ kosong := space(11) store ’sejahtera’ to tujuan
4. Keterangan : perintah store mempunyai fungsi yang sama dengan operator =.
5.2.4
Perintah set date italian
1. Fungsi : merubah format tanggal ke bentuk yang umum di Indonesia yaitu hari-bulan-tahun (dd-mm-yyyy). 2. Sintaks : set date [format-tanggal] 3. Contoh : set date italian
4. Keterangan : Kondisi awal tahun, hanya disediakan sebanyak dua digit dalam pemasukan data. Meskipun demikian, sebenarnya di dalam tabel (file data base), tahun disimpan sebanyak 4 digit.
5.2.5
Perintah set century on
1. Fungsi : supaya dalam operasi tanggal, tahun ditampilkan dalam format 4 digit. 2. Sintaks : set century [on/off] 3. Contoh : set century on
38
BAB 5. PROGRAM INPUT DATA DAN MENU
5.3
Contoh Program
Dengan perintah-perintah yang sudah diberikan, maka berikut ini ada contoh program untuk menghitung harga barang.
/* -----------------------------------------------------nama file : harga.prg program untuk menghitung harga satu item barang ------------------------------------------------------ */ clear * menghapus layar store 0 to jumlah,harga store space(21) to nama_barang store date() to tgl_beli * memberi harga-harga awal ke variabel memori @ @ @ @ *
10,5 say ’Nama Barang : ’ 11,5 say ’Jumlah : ’ 12,5 say ’Harga Satuan : ’ 13,5 say ’Tgl. Beli : ’ menampilkan tulisan-tulisan pemasukan data
@ @ @ @ *
10,20 get nama_barang picture ’@!’ 11,20 get jumlah picture ’999’ 12,20 get harga picture ’999,999.99’ 13,20 get tgl_beli memasukkan nilai-nilai data via keyboard
read * perintah get diakhiri dengan perintah read bayar = jumlah * harga * menghitung harga yang harus dibayar @ 16,5 say ’Total harga : ’ @ 16,20 say bayar * menampilkan hasil perhitungan ke layar return * kembali ke sistem
Hasil dari program tersebut tampak seperti berikut ini :
5.4
Program Menu
Dari contoh dan latihan sebelumnya, maka kita sudah mempunyai beberapa file program Clipper. Selama ini, untuk menjalankan satu file yang ada, maka file .exe dari program tersebut kita jalankan. Menjalankan program-program tersebut akan menjadi lebih mudah jika program-program tersebut disatukan dalam satu menu program. Program yang sudah kita miliki yaitu : • si.prg yaitu program untuk menampilkan tulisan ’Sistem Informasi’.
5.4. PROGRAM MENU
39
Gambar 5.1: Hasil Program harga.prg • dwi.prg yaitu program untuk menampilkan tulisan dwi yang tersusun dari huruf-huruf d-w-i. • harga.prg yaitu program untuk menghitung harga satu item barang. Program-program tersebut akan kita satukan dalam satu menu program.
5.4.1
Perintah set wrap on
1. Fungsi : membuat menu yang ada bisa berbalik arah, jika sudah sampai pada posisi paling bawah, kemudian ditekan panah ke bawan, menu pilihan akan berpindah ke atas. 2. Sintaks : set wrap [on/off] 3. Contoh : set wrap on
4. Keterangan : Harga awal set wrap off, oleh karenanya kita harus menggantinya jika dalam program kita ingin agar menu bisa bergerak bebas. Dalam artian, jika penunjuk menu sudah berada pada posisi paling bawah, kemudian kita dan kolom menekan panah ke bawah, maka penunjuk menu akan pindah ke posisi paling atas. Demikian juga sebaliknya.
5.4.2
Perintah prompt
1. Fungsi : membuat menu tampilan menu yang bisa dipilih dengan menggerakkan anak panah atau huruf pertama dari tulisan di dalam menu. 2. Sintaks : @ baris,kolom prompt ’tulisan menunya’ 3. Contoh : @ @ @ @
07,20 08,20 09,20 10,20
prompt prompt prompt prompt
’a. ’b. ’c. ’x.
Menu Sarapan Pagi’ Menu Makan Siang ’ Menu Makan Malam ’ Keluar ’
4. Keterangan : Untuk memilih menu, dapat menggunakan anak panah kemudian menggantinya tombol Enter, atau huruf pertama masing-masing menu (a, b, c, x). Untuk membuat menu yang menyamping, maka nomor baris harusa sama dan dan kolom kemudian nomor kolom yang berbeda. Kalau pada contoh di atas, nomor baris sama dab nomor kolom berbeda.
40
BAB 5. PROGRAM INPUT DATA DAN MENU
5.4.3
Perintah menu to
1. Fungsi : mengaitkan menu pilihan dengan suatu variabel. 2. Sintaks : menu to [nama-variabel] 3. Contoh : @ 07,20 @ 08,20 @ 09,20 @ 10,20 menu to
prompt prompt prompt prompt makan
’a. ’b. ’c. ’x.
Menu Sarapan Pagi’ Menu Makan Siang ’ Menu Makan Malam ’ Keluar ’
4. Keterangan : makan akan bernilai 1 jika pemakai memilih ’a. Menu Sarapan menggantinya Pagi’, akan bernilai 2 jika pemakai memilih ’b. Menu Makan Siang’, demikian seterusnya. Nilai makan inilah yang kemudian diseleksi dan dan kolom kemudian dijalankan nama program yang sesuai dengan pilihan yang yang dipilih oleh pemakai.
5.4.4
Perintah do
1. Fungsi : menjalan suatu program dari program lain, atau menjalankan suatu prosedur. 2. Sintaks : do [nama-program] 3. Contoh : do logo
4. Keterangan : menjalankan program logo dari program lain. Hal ini berbeda dengan menjalankan program logo dari program logo itu sendiri ... :)
5.4.5
Perintah do while
1. Fungsi : membuat suatu bagian program dijalankan berulang-ulang sampai kondisi untuk berhenti terpenuhi. 2. Sintaks : do while [kondisi] ... enddo 3. Contoh : do while .t. @ 07,20 prompt @ 08,20 prompt @ 09,20 prompt @ 10,20 prompt menu to makan enddo
’a. ’b. ’c. ’x.
Menu Sarapan Pagi’ Menu Makan Siang ’ Menu Makan Malam ’ Keluar ’
4. Keterangan : bagian program yang menjalankan menu ini akan dijalankan berulang-ulang (looping) sampai terpenuhi kondisi untuk selesai. Kalau contoh di atas, belum ada perintah untuk berhenti. Perintah do while harus diakhiri dengan enddo.
5.5. CONTOH PROGRAM
5.4.6
41
Perintah do case
1. Fungsi : melakukan seleksi terhadap suatu nilai dan kemudian menentukan tindakan yang akan dilakukan. 2. Sintaks : do case case [kondisi-1] \dots case [kondisi-2] \dots endcase
3. Contoh : do while .t. @ 07,20 prompt ’a. Menu Sarapan Pagi’ @ 08,20 prompt ’b. Menu Makan Siang ’ @ 09,20 prompt ’c. Menu Makan Malam ’ @ 10,20 prompt ’x. Keluar ’ menu to makan do case case makan=1 do pagi case makan=2 do siang case makan=3 do malam case makan=4 exit && keluar atau program selesai endcase enddo
4. Keterangan : bagian program yang menjalankan menu ini akan dijalankan berulang-ulang (looping) sampai pemakai memilih menu ’x. Keluar’. Pada contoh di atas, maka dianggap ada program pagi.prg, siang.prg, dan malam.prg. Perintah do case harus diakhiri dengan endcase.
5.5
Contoh Program
Berdasarkan contoh-contoh sebelumnya, Anda dianggap sudah memilik program- program seperti berikut : • si.prg yaitu program untuk menampilkan tulisan ’Sistem Informasi’. • dwi.prg yaitu program untuk menampilkan tulisan dwi yang tersusun dari huruf-huruf d-w-i. • harga.prg yaitu program untuk menghitung harga satu item barang. Kita dapat membuat sebuah program yang menggabungkan keempar program tersebut. Contoh lengkap program program tersebut adalah sebagai berikut :
42
BAB 5. PROGRAM INPUT DATA DAN MENU
/* ----------------------------------------------------------nama program : gabung.prg program menu yang akan menjalankan file-file sesuai dengan menu yang dipilih ----------------------------------------------------------- */ set century on * mengatur tahun dicetak 4 digit set date italian * mengatur format tanggal menjadi dd-mm-yyyy set wrap on * mengatur pilian menu supaya bisa membalik do while .t. * looping yang pasti akan dikerjakan clear * mengapus layar @ @ @ @ *
07,15 prompt 08,15 prompt 09,15 prompt 10,15 prompt membuat menu
’a. Tulisan Sistem Informasi ’b. Logo Dwi Sakethi ’c. Mengitung Harga Barang ’x. Selesai pilihan
’ ’ ’ ’
menu to pilih * nilai pilihan menu disimpan ke variabel pilih do case * penyeleksian kondisi case pilih=1 do si * jika pilih bernilai 1, akan menjalankan * program si.prg demikian seterusnya case pilih=2 do dwi case pilih=3 do harga case pilih=4 exit endcase wait ’’ enddo * akhir looping do while return /* akhir program, kembali ke sistem */
5.6. TUGAS LATIHAN
43
Jika program gabung.prg kita kompilasi, terlihat bahwa kompilasi dilakukan juga terhadap programprogram yang dijalankan oleh program gabung.prg. Hal tersebut tampak seperti pada tampilan berikut : C:\dwi\clipper>\ca-52\bin\clipper gabung Clipper (R) Version 5.2 Copyright (c) 1985-1993, Computer Associates International, Inc. Microsoft C Floating Point Support Routines Copyright (c) Microsoft Corp 1984-1987. All Rights Reserved. 307K available Compiling GABUNG.PRG Compiling SI.PRG Compiling DWI.PRG Compiling HARGA.PRG Code size 1161, Symbols 656, Constants 1063 Jika program gabung.exe kita jalankan, akan didapatkan hasil seperti gambar di samping. Untuk memilih menu, gunakan panah atas atau panah bawah, kemudian tekan tombol Enter. Dapat juga dengan menekan tombol huruf pertama masing-masing menu. Gambar 5.2: Contoh Program Menu
5.6
Tugas Latihan
Sebagai bahan latihan dan Anda diharapkan untuk mencobanya. 1. Buatlah program untuk menghitung umur seseorang berdasarkan tanggal kelahiran. 2. Gabungkanlah program menghitung umur pada latihan sebelumnya ke dalam program gabungan.
44
BAB 5. PROGRAM INPUT DATA DAN MENU
Bab 6
Program Input Database 6.1
Pendahuluan
Pada pembahasan sebelumnya, pemasukan data hanya dilakukan di memory. Akibatnya jika komputer dimatikan data pun akan hilang. Pada bahasan berikut ini, akan dilakukan pemasukkan data yang kemudian direkam ke suatu tabel (file data). Dengan adanya perekaman data ini, data tidak akan hilang meskipun komputer dimatikan. Dan memang kondisi seperti inilah yang sebenarnya dilakukan. Kita merancang untuk membuat suatu menu yang terdiri atas beberapa menu seperti berikut : 1. Pemasukan/Editing Data, digunakan untuk memasukkan data baru atau mengedit data yang sudah ada. 2. Penghapusan Data, digunakan untuk menghapus data yang tidak digunakan atau data yang salah sehingga tidak akan dipakai. 3. Lihat Data, digunakan untuk melihat data-data yang sudah ada di dalam tabel/file data. 4. Selesai Program untuk pemasukkan data ini sangat bervariasi tergantung perancangannya. Oleh karenanya, boleh jadi kita akan menemukan perbedaan-perbedaan di antara beberapa program. Dalam program pemasukkan data ini, kita akan membuat variabel memory yang berkaitan dengan atribut (field). Untuk memudahkannya maka dibuat nama variabel memory sama dengan huruf m ditambah nama atribut (field). Contoh : Ini perlu dilakukan karena dalam programnya nanti, kita akan
No. 1 2 3 4 5 6 7 8 9 10
Field NO PKAB RESI PILIHAN 1 PILIHAN 2 NAMA SISWA NO INDUK JURUSAN KODE SMA NAMA SMA KELAMIN
Variabel mNO PKAB mRESI mPILIHAN 1 mPILIHAN 2 mNAMA SISWA mNO INDUK mJURUSAN mKODE SMA mNAMA SMA mKELAMIN
Tabel 6.1: Nama Atribut dan Variabel Memory-nya
mengganti atribut field dengan variabel memory. Contohnya seperti berikut : 45
46
BAB 6. PROGRAM INPUT DATABASE
replace replace replace replace replace replace replace replace
6.2
NO_PKAB PILIHAN_1 PILIHAN_2 NAMA_SISWA NO_INDUK JURUSAN KODE_SMA KELAMIN
with with with with with with with with
mNO_PKAB mPILIHAN_1 mPILIHAN_2 mNAMA_SISWA mNO_INDUK mJURUSAN mKODE_SMA mKELAMIN
English Structured
Kita akan mencoba menggunakan sebuah tools yang disebut English Structured. English Structured adalah ungkapan dalam keseharian yang menunjukkan urutan proses, perhitungan, penyeleksian kondisi terhadap suatu masalah. 1. Sekumpulan blok pernyataan. Contoh : Hitung total Set pajak penjualan sama dengan total dikalikan bobot pajak penjualan Set total sama dengan total ditambah pajak penjualan Hitung diskon Set total bersih sama dengan total dikurangi diskon Cetak total bersih di faktur
2. Struktur keputusan. Contoh : IF (total lebih besar dari 500000) maka Set diskon sama dengan total dikalikan 15% jika tidak Set diskon sama dengan nol
3. Struktur perulangan. Contoh : DO WHILE (condition) do block REPEAT do block UNTIL (condition)
English Structured untuk program pemasukan data ini kita buat seperti berikut : 1. Program Menu : Set wrap menjadi on Hapus layar Kerjakan selama benar Tampilkan menu Pemasukan/Editing Data Tampilkan menu Penghapusan Data Tampilkan menu Browsing Data Tampilkan menu Selesai Rekam gambar tampilan
6.2. ENGLISH STRUCTURED Hapus layar Jika pilihan sama Jika pilihan sama Jika pilihan sama Jika pilihan sama Kembalikan gambar Selesai
dg. 1 jalankan program input data dg. 2 jalankan program hapus data dg. 3 jalankan program browsing data dg. 4 keluar dari program tampilan
2. Program Input Data : Buka file data Buat indeks sesuai atribut kunci Beri harga awal variabel kunci indeks Kerjakan selama benar Tampilkan tulisan untuk input/edit data Input variabel memory yang menjadi kunci indeks Jika menekan tombol ESC maka keluar Cari variabel kunci indeks Jika ditemukan maka Masukkan atribut/field ke variabel memory jika tidak Isi variabel memory sesuai atribut/field Input variabel memory selain kunci indeks Jika tidak menekan ESC maka Cari variabel kunci indeks Jika tidak ketemu Tambahkan record kosong Ganti field dengan variabelnya Tutup file data dan index Selesai 3. Program Hapus Data : Buka file data Buat indeks sesuai atribut kunci Beri harga awal variabel kunci indeks Kerjakan selama benar Tampilkan tulisan untuk input/edit data Input variabel memory yang menjadi kunci indeks Jika menekan tombol ESC maka keluar Cari variabel kunci indeks Jika ditemukan maka Tampilkan atribut/field Input pertanyaan mau dihapus Jika dihapus maka Hapus data tersebut Tutup file data dan index Selesai 4. Program Brow Data : Buka file data Buat indeks sesuai atribut kunci Tampilkan data dengan dbedit() Tutup file data dan index Selesai
47
48
BAB 6. PROGRAM INPUT DATABASE
6.3
Perintah yang Digunakan
Perintah-perintah yang digunakan untuk mengimplementasikan masalah-masalah tersebut di atas ada beberapa perintah. Sebagian perintah sudah dibahas pada bagian-bagian sebelumnya. Di sini hanya akan dibahas perintah-perintah yang baru.
6.3.1
Perintah save screen to
1. Fungsi : Perintah ini dipakai untuk merekam tampilan tulisan di monitor ke memory. Biasanya dilakukan pada suatu proses yang disusul proses lain tapi tampilan akan dikembalikan seperti semula.
Gambar 6.1: Ilustrasi Perubahan Tampilan 2. Sintaks : save screen to nama variabel 3. Contoh : do while .t. @ 07,10 prompt ’1. Pemasukan/Editing Data ’ @ 08,10 prompt ’2. Penghapusan Editing Data’ @ 09,10 prompt ’3. Browsing Data ’ @ 10,10 prompt ’4. Selesai ’ menu to pilihan save screen to lyr_menu do case case pilihan = 4 .or. lastkey()=K_ESC exit ... endcase restore screen from lyr_menu enddo
4. Keterangan : Tampilan menu akan direkam ke variabel lyr menu. Setelah masuk ke salah satu menu yang dipilih, tampilan layar berubah. Ketika kembali ke menu, maka tampilan dikembalikan ke bentuk semula.
6.3.2
Perintah restore screen from
1. Fungsi : Mengembalikan tampilan ke suatu bentuk tampilan sebelumnya. Untuk bisa mengembalikan tampilan ini, tampilan harus direkam dulu dengan perintah save screen to.
6.3. PERINTAH YANG DIGUNAKAN
49
2. Sintaks : restore screen from nama variabel 3. Contoh : save screen to lyr_menu do case case pilihan = 4 .or. lastkey()=K_ESC exit ... endcase restore screen from lyr_menu
4. Keterangan : Perintah ini sangat berhubungan dengan perintah . save screen to. Nama variabel harus sesuai dengan nama variabel pada save screen to.
6.3.3
Perintah seek
1. Fungsi : Melakukan pencarian data sesuai indeks. Hasil pencarian bisa ketemu atau tidak ketemu. Jika ditemukan, maka nilai found() adalah .t. (benar) dan jika tidak ditemukan maka nilai found() adalah .f. (salah). Dengan adanya mekanisme ini, maka tidak mungkin terjadi data kembar. 2. Sintaks : seek [variabel memory /nilai] 3. Contoh : seek mNO_PKAB if found() ... endif seek ’110668’ if found() ... endif 4. Keterangan : Perintah seek ini biasanya dilanjutkan dengan perintah found() sebagai alat pengecekan apakah pencarian mendapatkan hasil (ketemu) atau tidak mendapatkan hasil (tidak ketemu). Dan sebaliknya, sebagai pendahulu, maka perintah ini harus diawali dengan perintah index. Perintah index dapat dilihat pada tulisan sebelumnya.
6.3.4
Perintah found()
1. Fungsi : Melakukan pengecekan terhadap hasil pencarian data sesuai indeks. Hasil pencarian bisa ketemu atau tidak ketemu. Jika ditemukan, maka nilai found() adalah .t. (benar) dan jika tidak ditemukan maka nilai found() adalah .f. (salah). Dengan adanya mekanisme ini, maka tidak mungkin terjadi data kembar. 2. Sintaks : found() 3. Contoh :
50
BAB 6. PROGRAM INPUT DATABASE seek mNO_PKAB if found() ... endif seek ’110668’ if found() ... endif 4. Keterangan : Lihat juga contoh pada perintah if . . . else . . . endif.
6.3.5
Perintah if . . . else . . . endif
1. Fungsi : Melakukan penyeleksian kondisi sesuai yang dikehendaki dan kemudian melakukan proses sesuai dengan kondisi yang terpenuhi. 2. Sintaks : if [kondisi] . . . else . . . endif 3. Contoh : if .not. found() append blank endif if found() mNAMA_SISWA mNO_INDUK mKODE_SMA mKELAMIN else mNAMA_SISWA mNO_INDUK mKODE_SMA mKELAMIN endif
= = = =
NAMA_SISWA NO_INDUK KODE_SMA KELAMIN
= = = =
space(30) space(10) space(8) space(1)
4. Keterangan : Pada contoh pertama, hanya terdapat satu proses yang akan dikerjakan jika kondisi terpenuhi. Yaitu jika data yang dicari tidak ada ( .not. found()) akan dilakukan penambahan record kosong. Sedangkan pada contoh kedua, ada dua blok proses yang akan dikerjakan tergantung kondisi. Jika ada ditemukan (ada di dalam data), variabel memory akan diisi dengan data yang ada (atribut/field). Jika data tidak ada, variabel memory diisi dengan nilai-nilai kosong.
6.3.6
Perintah #include
1. Fungsi : Menyertakan file lain dalam proses kompilasi program. Dengan perintah ini, program atau file yang terpisah dapat saling dikaitkan. 2. Sintaks : #include ’nama file’ 3. Contoh : #include ’inkey.ch’ 4. Keterangan : File inkey.ch adalah file yang berisi definisi-definisi tombol. Dengan disertakannya file inkey.ch ini, pembacaaan dan pembuatan program menjadi lebih mudah. Sebagai contoh lihat tabel berikut : Dengan adanya file inkey.ch, kita tidak perlu menghafal nilainilai suatu tombol. Untuk lebih jelasnya bisa buka file inkey.ch.
6.3. PERINTAH YANG DIGUNAKAN
Nomor 1 2 3 4 10
Tombol Escape Enter F1 F2 ...
51
Nilai 27 13 28 -1 ...
Nilai inkey.ch K ESC K ENTER K F1 K F2 ...
Tabel 6.2: Kode Tombol
6.3.7
Perintah lastkey()
1. Fungsi : Mengetahui tombol terakhir yang ditekan. 2. Sintaks : lastkey() 3. Contoh : @05,21 get mNO_PKAB read if lastkey()=K_ESC exit endif 4. Keterangan : Biasanya digunakan untuk mendeteksi apakah pemakai menekan tombol ESC (misalnya) ketika pemasukan data atau di menu. File inkey.ch adalah file yang berisi definisidefinisi tombol. Dengan disertakannya file inkey.ch ini, pembacaaan dan pembuatan program menjadi lebih mudah. Sebagai contoh lihat tabel berikut : Dengan adanya file inkey.ch, kita tidak perlu menghafal nilai-nilai suatu tombol. Untuk lebih jelasnya bisa buka file inkey.ch.
6.3.8
Perintah dbedit()
1. Fungsi : Menampilkan isi suatu tabel (file data) dalam bentuk baris dan kolom. 2. Sintaks : dbedit(baris1,kolom1,baris2,kolom2) 3. Contoh : procedure lihat use ipa2002 index on NO_PKAB to ipa2002 dbedit(0,0,24,78) close index close data return
4. Keterangan : Baris1 dan kolom1 menunjukkan posisi kiri atas dan baris2 serta kolom2 menunjukkan posisi kanan bawah. Untuk memindah-mindah penunjuk bisa digunakan tombol panah, pg up, pg dn, home, dan sebagainya.
52
BAB 6. PROGRAM INPUT DATABASE
Gambar 6.2: Tampilan Perintah dbedit()
6.3.9
Perintah delete
1. Fungsi : Menghapus suatu record pada posisi record aktif. 2. Sintaks : delete 3. Contoh : seek mNO_PKAB if found() save screen to belum_hapus @06,21 say KODE_SMA @07,21 say KELAMIN @08,21 say NO_INDUK @09,21 say NAMA_SISWA hapus = ’T’ @ 11,7 say "Mau dihapus [y/t] : " get hapus read if hapus=’Y’ .or. hapus=’y’ .and. lastkey()#K_ESC delete endif restore screen from belum_hapus else @06,21 say ’Data tidak ada ... !’ wait ’’ @06,21 say ’ ’ endif 4. Keterangan : Perintah delete diawali dengan perintah seek untuk mengarahkan pointer ke suatu record tertentu. Perintah ini berhubungan dengan perintah set delete on. Contoh selengkapnya dari program untuk pemasukan, editing, penghapusan, dan browsing data dapat dilihat seperti berikut.
6.3. PERINTAH YANG DIGUNAKAN
6.3.10
53
Program Pemasukan Data
Model-model program pemasukkan data ada berbagai macam. Berbeda programmer terkadang berbeda gaya. Pada contoh berikut akan diberikan program yang berfungsi dua hal sekaligus yaitu : 1. Memasukkan data baru. 2. Mengedit data lama. Program berikut memerlukan basis data bernama IPA2002.DBF yang semestinya sudah ada karena sudah dibuat pada latihan sebelumnya. /* --------------------------------------------------file : ent.prg program untuk memasukkan data baru dan mengedit data lama program ini memerlukan file ipa2002.dbf file ini ketika di-link memerlukan library fast.lib karena ada perintah wall() jika tidak memiliki fast.lib, perintah wall() bisa di-remark saja link : blinker file ent lib fast up date : 27 september 2009 --------------------------------------------------- */ #include ’inkey.ch’ * menyertakan file definisi kode-kode tombol * karena di dalam program ini ada K\_ESC clear * membersihkan layar wall(0,0,24,79) * membuat latar belakang seperti tembok bata merah use ipa2002 * membuka file database ipa2002.dbf index on NO_PKAB to ipa2002 * membuat index dengan kuncinya NO_PKAB * supaya bisa dilakukan pencarian dengan * perintah seek mNO_PKAB = space(5) * memberi harga awal ke variabel kunci index do while .t. * membuat looping pemasukan data @ 3,7 say ’Pemasukan/Editing Peserta PKAB’ @ 5,7 say ’No. PKAB : ’ @ 6,7 say ’Kode SMA : ’
54
BAB 6. PROGRAM INPUT DATABASE
@ 7,7 say ’Kelamin : ’ @ 8,7 say ’No. Induk : ’ @ 9,7 say ’Nama Siswa : ’ * mencetak tampilan pemasukan data @05,21 get mNO_PKAB read * input awal adalah variabel kunci if lastkey()=K_ESC exit endif * kalau menekan tombol ESC berarti sudah selesai * dan keluar dari program pemasukan data seek mNO_PKAB * mencari no_pkab yang diinputkan
* *
* *
if found() jika ketemu maka isi variabel memori dengan fieldnya dengan demikian berfungsi untuk mengedit data yang sudah ada mNAMA_SISWA = NAMA_SISWA mNO_INDUK = NO_INDUK mKODE_SMA = KODE_SMA mKELAMIN = KELAMIN else jika tidak ketemu berarti data baru maka variabel diisi dengan nilai-nilai kosong mNAMA_SISWA = space(30) mNO_INDUK = space(10) mKODE_SMA = space(8) mKELAMIN = space(1) endif
@06,21 get mKODE_SMA @07,21 get mKELAMIN @08,21 get mNO_INDUK @09,21 get mNAMA_SISWA read * memasukkan data-data selain yang menjadi kunci if lastkey()#K_ESC * jika tidak menekan tombol ESC artinya tidak * melakukan pembatalan seek mNO_PKAB if .not. found() append blank * karena data baru maka ditambahkan record kosong * ke dalam basis datanya endif replace NO_PKAB
with mNO_PKAB
6.3. PERINTAH YANG DIGUNAKAN
55
replace NAMA_SISWA with mNAMA_SISWA replace NO_INDUK with mNO_INDUK replace KODE_SMA with mKODE_SMA replace KELAMIN with mKELAMIN * merekam variabel memori ke field-fieldnya endif enddo * akhir looping pemasukan data close index * menutup index close data * menutup file database clear * membersihkan layar kembali return * kembali ke sistem atau program sebelumnya Kemudian program di-compile dan di-link sesuai dengan letak program Clipper. Jika belum melakukan pengaturan environment variables akan ditemukan pesan kesalahan seperti berikut Z:\home\dwijim\kuliah\clipper>ca-52\bin\clipper ent.prg Clipper (R) Version 5.2 Copyright (c) 1985-1993, Computer Associates International, Inc. Microsoft C Floating Point Support Routines Copyright (c) Microsoft Corp 1984-1987. All Rights Reserved. 307K available Compiling ENT.PRG ENT.PRG(17) Fatal C3007 Can’t open #include file: ’inkey.ch’ Jika demikian maka berikan pengaturan seperti berikut : Z:\home\dwijim\kuliah\clipper>set include=ca-52\include Z:\home\dwijim\kuliah\clipper>set lib=ca-52\lib Z:\home\dwijim\kuliah\clipper>ca-52\bin\clipper ent Clipper (R) Version 5.2 Copyright (c) 1985-1993, Computer Associates International, Inc. Microsoft C Floating Point Support Routines Copyright (c) Microsoft Corp 1984-1987. All Rights Reserved. 307K available Compiling ENT.PRG Code size 656, Symbols 432, Constants 240 Z:\home\dwijim\kuliah\clipper>ca-52\bin\blinker file
ent lib fast
BLINKER : overlay opsize set to 40 Kb - minimum is 14 Kb (SETENGLISH) BLINKER : link was successful ENT.EXE (268 Kb) (0.3 seconds)
56
BAB 6. PROGRAM INPUT DATABASE
Sampai di sini program input sudah berhasil dikembangkan. Selanjutnya tinggal mencoba menjalankan program pemasukan data tersebut dan semoga bisa berjalan. Untuk menjalankan program ini, cukup ketikkan perintah ent enter .
Gambar 6.3: Program Pemasukan Data
6.3.11
Program Penghapusan Data
Setelah pemasukan dan pengeditan data maka biasanya suatu sistem dilengkapi juga dengan penghapusan data. Sebagaimana halnya pemasukan data, penghapusan data juga ada berbagai macam model. Contoh program untuk menghapus data bisa dilihat pada contoh berikut. /* --------------------------------------------------file : hapus.prg program untuk menghapus data program ini memerlukan file ipa2002.dbf file ini ketika di-link memerlukan library fast.lib karena ada perintah wall() jika tidak memiliki fast.lib, perintah wall() bisa di-remark saja link : blinker file ent lib fast up date : 27 september 2009 --------------------------------------------------- */ #include ’inkey.ch’ * menyertakan file definisi kode-kode tombol * karena di dalam program ini ada K\_ESC clear * membersihkan layar wall(0,0,24,79) * membuat latar belakang seperti tembok bata merah use ipa2002 * membuka file database ipa2002.dbf
6.3. PERINTAH YANG DIGUNAKAN index on NO_PKAB to ipa2002 * membuat index dengan kuncinya NO_PKAB * supaya bisa dilakukan pencarian dengan * perintah seek mNO_PKAB = space(5) * memberi harga awal ke variabel kunci index set delete on * supaya data yang sudah ditandai sebagai data yang dihapus * tidak akan ikut diolah lagi * karena data yang dihapus masih ada selama belum diberikan * perintah pack (semacam empty recycle bin do while .t. * untuk looping penghapusan data * penghapusan selesai jika pemakai menekan tombol ESC @ 3,7 say @ 5,7 say @ 6,7 say @ 7,7 say @ 8,7 say @ 9,7 say *menampilkan
’Penghapusan Peserta PKAB’ ’No. PKAB : ’ ’Kode SMA : ’ ’Kelamin : ’ ’No. Induk : ’ ’Nama Siswa : ’ tulisan penghapusan data
@05,21 get mNO_PKAB read * memasukan field yang menjadi kunci if lastkey()=K_ESC exit * jika menekan tombol ESC berarti selesai dari proses * penghapusan data dan kembali ke sistem atau program sebelumnya endif seek mNO_PKAB * mencari berdasarkan field yang menjadi kunci index * yaitu nomor PKAB if found() save screen to belum_hapus * merekam tampilan layar ke suatu variabel @06,21 say KODE_SMA @07,21 say KELAMIN @08,21 say NO_INDUK @09,21 say NAMA_SISWA * jika ketemu berarti datanya ada maka sebelum dihapus * ditampilkan dulu data-datanya untuk meyakinkan hapus = ’T’ * memberi nilai awal ke variabel yang di-GET
57
58
BAB 6. PROGRAM INPUT DATABASE
@ 11,7 say "Mau dihapus [y/t] : " get hapus pict ’@!’ read * menanyakan untuk meyakinkan bahwa data akan dihapus if hapus=’Y’ delete pack wait ’Data sudah dihapus’ * jika yakin maka data betul-betul dihapus endif restore screen from belum_hapus * mengembalikan tampilan ke tampilan awal ketika layar * masih belum terisi data-data apapun else * jika no_pkab tidak ketemu berarti datanya tidak ada * maka tampilkan pesan supaya pemakai tahu masalahnya @06,21 say ’Data tidak ada ... !’ wait ’’ * menunggu sampai suatu tombol ditekan @06,21 say ’ * menghapus pesan data tidak ada
’
endif enddo * akhir looping pemasukan data close index * menutup index close data * menutup file database clear * membersihkan layar kembali return * kembali ke sistem atau program sebelumnya Hasil compile dan link : Z:\home\dwijim\kuliah\clipper>ca-52\bin\clipper hapus.prg Clipper (R) Version 5.2 Copyright (c) 1985-1993, Computer Associates International, Inc. Microsoft C Floating Point Support Routines Copyright (c) Microsoft Corp 1984-1987. All Rights Reserved. 307K available Compiling HAPUS.PRG Code size 631, Symbols 512, Constants 297
6.3. PERINTAH YANG DIGUNAKAN
59
Z:\home\dwijim\kuliah\clipper>ca-52\bin\blinker file hapus lib fast BLINKER : overlay opsize set to 40 Kb - minimum is 14 Kb (SETENGLISH) BLINKER : link was successful HAPUS.EXE (268 Kb) (0.2 seconds)
Gambar 6.4: Program Penghapusan Data Fasilitas tambahan yang biasanya diberikan adalah kemampuan untuk menampilkan datadata yang sudah dimasukkan. Ini untuk meyakinkan bahwa data yang dimasukkan sudah disimpan dengan benar. Untuk menampilkan data-data pada suatu basis data, sangat mudah dilakukan dengan Clipper. Cukup dengan menggunakan satu fungsi dbedit() saja. Contoh program untuk menampilkan data dapat dilihat seperti berikut : /* --------------------------------------------------file : lihat.prg program untuk menampilkan data pada suatu database program ini memerlukan file ipa2002.dbf file ini ketika di-link memerlukan library fast.lib karena ada perintah wall() jika tidak memiliki fast.lib, perintah wall() bisa di-remark saja link : blinker file ent lib fast up date : 29 september 2009 --------------------------------------------------- */ clear * membersihkan layar wall(0,0,24,79) * membuat latar belakang seperti tembok bata merah use ipa2002 * membuka file database ipa2002.dbf index on NO_PKAB to ipa2002
60
BAB 6. PROGRAM INPUT DATABASE
* membuat index dengan kuncinya NO_PKAB * supaya data terurut berdasarkan NO_PKAB @ 4,6 to 21,76 * membuat kotak persis di luar area penampilan data dbedit(5,7,20,75) * menampilkan data pada area tertentu return * kembali ke sistem atau program sebelumnya Hasil compile dan link Z:\home\dwijim\kuliah\clipper>ca-52\bin\clipper lihat.prg Clipper (R) Version 5.2 Copyright (c) 1985-1993, Computer Associates International, Inc. Microsoft C Floating Point Support Routines Copyright (c) Microsoft Corp 1984-1987. All Rights Reserved. 307K available Compiling LIHAT.PRG Code size 148, Symbols 176, Constants 44 blinker file lihat lib fast BLINKER : overlay opsize set to 40 Kb - minimum is 14 Kb (DBEDSETUP) BLINKER : link was successful LIHAT.EXE (276 Kb) (0.2 seconds)
6.3.12
Program Menu Gabungan
Selanjutnya ketiga program di atas yaitu pemasukan, penghapusan dan lihat data akan digabungkan. Untuk bisa digabung tentu saja ketiga program tersebut harus sudah selesai dan berjalan dengan baik. /* --------------------------------------------------file : menux.prg program untuk menggabungkan program : pemasukan, penghapusan dan lihat data program ini memerlukan file : ipa2002.dbf, ent.prg, hapus.prg, lihat.prg file ini ketika di-link memerlukan library fast.lib karena ada perintah wall(), dan tetris() jika tidak memiliki fast.lib, perintah wall() dan tetris() bisa di-remark saja link : blinker file menux lib fast up date : 29 september 2009 --------------------------------------------------- */
6.3. PERINTAH YANG DIGUNAKAN
Gambar 6.5: Program Menampilkan Data
#include ’inkey.ch’ * menyertakan file definisi kode-kode tombol * karena di dalam program ini ada K\_ESC tone(500,100) *mengeluarkan suara set wrap on * membuat menu supaya bisa membalik dari * atas ke bawah atau dari bawah ke atas clear * membersihkan layar do while .t. * membuat looping wall (0,0,24,79) * membuat latar belakang tembok @7,15 clear to 20,75 * membersihkan layar pada area 7,15 sampai 20,75 @8,30 say ’program menu’ @10,17 prompt "1. Pemasukan data " ; message " menu untuk memasukkan data/mengedit data" @11,17 prompt "2. Penghapusan data " ; message " menu untuk memasukkan data/mengedit data"
61
62
BAB 6. PROGRAM INPUT DATABASE @12,17 prompt "3. Browsing data " ; message " menu untuk memasukkan data / mengedit data" @13,17 prompt "4. Game Tetris " ; message " menu untuk memasukkan data / mengedit data" * membuat menu pilihan * tanda ; untuk memotong baris program karena terlalu panjang menu to pilihan * hasil menu disimpan ke variabel bernama pilihan
if lastkey() = K\_ESC exit * jika menekan tombol ESC maka program keluar dan selesai endif do case case pilihan =1 do ent * menjalankan program pemasukan data case pilihan = 2 do hapus * menjalankan program penghapusan data case pilihan = 3 do lihat * menjalankan program menampilkan data case pilihan = 4 tetris() * menjalankan game tetris dan fast.lib end case enddo * akhir looping menu return /* kembali ke sistem atau program sebelumnya */ Hasil compile dan link : Z:\home\dwijim\kuliah\clipper>ca-52\bin\clipper menux.prg Clipper (R) Version 5.2 Copyright (c) 1985-1993, Computer Associates International, Inc. Microsoft C Floating Point Support Routines Copyright (c) Microsoft Corp 1984-1987. All Rights Reserved. 307K available Compiling MENUX.PRG Compiling ENT.PRG Compiling HAPUS.PRG Compiling LIHAT.PRG Code size 1793, Symbols 1168, Constants 911
BLINKER : overlay opsize set to 40 Kb - minimum is 15 Kb (GIRO) BLINKER : link was successful MENUX.EXE (301 Kb) (0.3 seconds)
6.4. TUGAS LATIHAN
63
Gambar 6.6: Program Menu Gabungan
6.4
Tugas Latihan
Setelah mempelajari program tersebut di atas, maka sekarang buatlah program yang memiliki fungsi seperti pada contoh tetapi untuk tabel (data) kode program studi dan kode nama-nama SLTA. Jelasnya adalah membuat program untuk pemasukan data, penghapusan data dan melihat data untuk data-data kode program studi dan kode nama-nama SLTA. Kemudian untuk entri peserta PKAB, program juga dilengkapi untuk entri atribut-atribut lainnya sesuai dengan fieldfield yang ada pada berkas IPA2002.DBF. Kemudian program tersebut disatukan dalam program menu sehingga kurang lebih memiliki struktur seperti berikut :
64
BAB 6. PROGRAM INPUT DATABASE
Gambar 6.7: Perancangan Menu Latihan
Bab 7
Validasi Input Data 7.1
Pendahuluan
Pada pembahasan sebelumnya, dalam proses pemasukan data tidak dilakukan proses validasi. Proses validasi maksudnya adalah proses pengujian apakah data yang dimasukkan benar. Misalkan pada saat pemasukan Jenis Kelamin, tidak dilakukan pengujian apakah pemakai memasukkan 1 atau 2, atau harus L atau P, dan sebagainya tergantung perancangan. Pemakai dapat mengisi dengan apapun tanpa ada peringatan dari sistem bahwa data yang dimasukkan salah. Juga misalkan pada saat pemasukan kode SMA, pemakai masih dapat memasukkan kode SMA yang tidak ada dalam data. Itulah yang dimaksud dengan belum adanya proses validasi di dalam sistem. Semestinya sistem memberikan peringatan jika ada kesalahan dalam pemasukan data. Sebab jika tidak dilakukan validasi, maka informasi yang didapat sebagai hasil pengolahan data menjadi tidak akurat. Dengan demikian informasi tidak dapat digunakan dalam pengambilan keputusan. Yang dimaksud dengan menguji apakah suatu data benar atau tidak adalah apakah data sesuai dengan daerah asal dari data itu, bukan benar sesuai dengan realita. Misalnya jenis kelamin boleh diisi dengan L untuk laki-laki dan P untuk perempuan. Maka jika suatu data diisi dengan L ataukah dengan P akan dianggap benar. Apakah orang itu benar-benar L atau P, tentu saja tidak bisa dideteksi dengan sistem ini.
7.2
Cara Validasi
Secara garis besar ada dua macam cara untuk melakukan validasi. Cara pertama dengan menggunakan perintah valid dilanjutkan dengan suatu kondisi, bisa dikatakan sebagai validasi sederhana. Sedangkan cara kedua menggunakan perintah valid dilanjutkan dengan menjalankan suatu fungsi atau bisa disebut validasi dengan fungsi. Pada prinsipnya, kedua model tersebut melakukan prosedur yang sama, yaitu selama perintah valid belum menghasilkan nilai .t., maka proses pemasukan data tidak dapat diteruskan ke attribute berikutnya. Seandainya daerah asal yang menjadi persyaratan validasi tidak banyak (misal tidak sampai sepuluh), akan lebih mudah menggunakan perintah valid kondisinya. Misalnya : validasi kode jenis kelamin, hanya ada laki-laki atau perempuan, validasi pencetakan ke printer atau ke layar. Sedangkan untuk validasi yang memiliki banyak kondisi, akan lebih mudah jika kita melakukannya dengan validasi fungsi. Contoh untuk hal ini, misalnya : pengisian kode sekolah, pengisian kode propinsi, pengisian kode kabupaten. Kode-kode yang dimasukkan harus merupakan kode yang benar, artinya kode tersebut ada di dalam kode yang tersedia. Selain untuk validasi, fungsi tersebut juga bisa dikembangkan sehingga dapat dipakai untuk menampilkan kode-kode propinsi, kode-kode SMA, kode-kode kabupaten jika pemakai tidak mengetahui kode yang seharusnya.
7.3
Validasi dengan Kondisi
Sebelumnya, akan diperlihatkan contoh program yang belum melakukan validasi. Misalkan kita lihat program berikut : 65
66
BAB 7. VALIDASI INPUT DATA
* nama program entri.prg #include ’inkey.ch’ clear use ipa2002 index on NO_PKAB to ipa2002 mNO_PKAB = space(5) do while .t. @ 3,7 say ’Pemasukan/Editing Peserta PKAB’ @ 5,7 say ’No. PKAB : ’ @ 6,7 say ’Kode SMA : ’ @ 7,7 say ’Kelamin : ’ @ 8,7 say ’No. Induk : ’ @ 9,7 say ’Nama Siswa : ’ @05,21 get mNO_PKAB read if lastkey()=K_ESC exit endif seek mNO_PKAB if found() mNAMA_SISWA = NAMA_SISWA mNO_INDUK = NO_INDUK mKODE_SMA = KODE_SMA mKELAMIN = KELAMIN else mNAMA_SISWA = space(30) mNO_INDUK = space(10) mKODE_SMA = space(8) mKELAMIN = space(1) endif @06,21 get mKODE_SMA @07,21 get mKELAMIN @08,21 get mNO_INDUK @09,21 get mNAMA_SISWA read if lastkey()#K_ESC seek mNO_PKAB if .not. found() append blank endif replace NO_PKAB with mNO_PKAB replace NAMA_SISWA with mNAMA_SISWA replace NO_INDUK with mNO_INDUK replace KODE_SMA with mKODE_SMA replace KELAMIN with mKELAMIN endif enddo close index close data return
Jika program kita jalankan, dan pada item Jenis Kelamin diisi dengan isian yang sembarang, ternyata sistem tidak menolaknya. Apakah hal yang seperti ini akan dibiarkan terjadi ? Ingat bahwa
7.3. VALIDASI DENGAN KONDISI
67
’Garbage In Garbage Out. Dari gambar tersebut, terlihat bahwa Jenis Kelamin yang seharusnya
Gambar 7.1: Sistem Tanpa Validasi diisi dengan 1 untuk laki-laki dan 2 untuk perempuan, ternyata diisi dengan ’X’. Bukan hanya dengan ’X’, diisi apa pun, sistem tidak akan menolaknya. Karena pada pengisian jenis kelamin, hanya ditentukan bahwa jenis kelamin harus diisi dengan laki-laki (1) atau perempuan (2), maka dapat dikatakan bahwa kondisi untuk syarat validasi sedikit (hanya dua kondisi). Oleh karenya akan lebih mudah kalau validasi dilakukan dengan perintah valid diikuti dengan kondisi.
7.3.1
Perintah valid
indent 1. Fungsi : Melakukan validasi terhadap data yang dimasukkan oleh pemakai. 2. Sintaks : @ baris,kolom get nama variabel [pict ’9’] [valid [’kondisi’—fungsi]] 3. Contoh : * potongan program ini sama dengan program entri * hanya ditampilkan yang berbedanya saja @ 3,7 say ’Pemasukan/Editing Peserta PKAB’ ... @ 7,7 say ’Kelamin : [1:Laki-laki 2:Perempuan]’ ... @ 07,21 get mKELAMIN picture ’9’ valid mKELAMIN$’12’ @ 05,21 get mNO_PKAB read if lastkey()=K_ESC exit endif 4. Keterangan : perintah picture untuk membatasi tipe data yang bisa dimasukkan. Perintah picture ’9’ artinya data yang bisa dimasukkan hanya data yang berjenis numeric dan banyaknya satu digit. Sedangkan perintah valid mKELAMIN$’12’ artinya mKELAMIN harus berupa karakter 1 atau 2. Arti sebenarnya adalah bahwa mKELAMIN harus merupakan karakter yang terkandung dalam karakter atau string ’12’. Setelah kita melakukan validasi, maka hasil dari sistem tampak seperti berikut.
68
BAB 7. VALIDASI INPUT DATA
Gambar 7.2: Sistem dengan Validasi Dari gambar terlihat bahwa jika attribute jenis kelamin diisi dengan data yang salah, sistem akan menolaknya. Pada contoh, jenis kelamin diisi dengan ’9’, maka isian tidak dapat diteruskan ke isian berikutnya. Kursor masih tetap pada isian jenis kelamin.
7.4
Validasi dengan Fungsi
Validasi dengan fungsi lebih cocok diterapkan pada proses validasi dengan banyak kondisi. Untuk keperluan itu, kita buat suatu tabel yang berisi data- data. Paling tidak tabel-tabel yang diperlukan berisi atribut KODE dan KETERANGAN. Data yang dimasukkan ke dalam sistem akan dicocokan dengan data di dalam tabel. Jika data yang dimasukkan ternyata tidak ada di dalam tabel, artinya data yang dimasukkan salah dan sistem akan memberi peringatan. Fungsi yang dibuat harus menghasilkan nilai .t. atau .f. sesuai kondisinya. Nilai .t. didapat jika data yang dimasukkan benar dan sebaliknya. Nilai yang dimasukkan benar artinya data tersebut ada di dalam tabel. Kemudian KETERANGAN dari KODE yang dimasukkan akan ditampilkan di layar pada posisi baris dan kolom yang ditentukan. Jika ternyata data yang dimasukkan salah, maka sistem akan memberi peringatan ’Kode salah ...!’ dan fungsi harus memberikan nilai .f..
7.4.1
Structured English
Untuk lebih mempermudah, dapat dilihat proses validasi menggunakan fungsi pada structured English berikut : Aktifkan tabel kode SMA Cari kode yang dimasukkan Jika ditemukan maka Tampilkan nama SMA pada posisi yang ditentukan Set nilai hasil fungsi menjadi .t. jika tidak ditemukan maka Tampilkan penjelasan ’Kode salah’ pada posisi yang ditentukan Set nilai hasil fungsi menjadi .f. Aktifkan tabel PKAB Kembalikan nilai hasil fungsi
7.4.2
Contoh Program
Contoh program lengkap untuk masalah pemasukkan kode SMA dan jenis kelamin dapat dilihat seperti berikut : /* ---------------------------------------------------
7.4. VALIDASI DENGAN FUNGSI file : entriv.prg program untuk memasukkan data baru dan mengedit data lama dengan validasi program ini memerlukan file ipa2002.dbf dan slta.dbf file ini ketika di-link memerlukan library fast.lib karena ada perintah wall() jika tidak memiliki fast.lib, perintah wall() bisa di-remark saja link : blinker file entriv lib fast up date : 29 september 2009 --------------------------------------------------- */ #include ’inkey.ch’ * menyertakan file definisi kode-kode tombol * karena di dalam program ini ada K_ESC clear * membersihkan layar select b * karena akan membuka dua file dbf, * jadi menggunakan select use SMA * membuka file database SMA.DBF untuk select b index on KODE_SMA to SMA * index dengan kunci kode_sma select a use IPA2002 * membuka file database IPA2002.DBF untuk select a index on NO_PKAB to ipa2002 * membuat index dengan kuncinya NO_PKAB * supaya bisa dilakukan pencarian dengan * perintah seek mNO_PKAB = space(5) * memberi harga awal ke variabel kunci index do while .t. * membuat looping sampai ada tombol ESC @ @ @ @ @
3,7 5,7 6,7 7,7 8,7
say say say say say
’Pemasukan/Editing Peserta PKAB’ ’No. PKAB : ’ ’Kode SMA : ’ ’Kelamin : [1:Laki-laki 2:Perempuan]’ ’No. Induk : ’
69
70
BAB 7. VALIDASI INPUT DATA
@ 9,7 say ’Nama Siswa : @10,7 say ’B. Indonesia: @11,7 say ’B. Inggris : @12,7 say ’Matematika : @13,7 say ’Fisika : @14,7 say ’Kimia : @15,7 say ’Biologi : * menampilkan tulisan untuk
’ ’ ’ ’ ’ ’ ’ pemasukan data
@05,21 get mNO_PKAB read * input awal adalah variabel kunci if lastkey()=K_ESC exit endif * kalau menekan tombol ESC berarti sudah selesai * dan keluar dari program pemasukan data seek mNO_PKAB * mencari no_pkab yang diinputkan if found() * jika ketemu maka isi variabel memori dengan fieldnya * dengan demikian berfungsi untuk mengedit data yang sudah ada mNAMA_SISWA = NAMA_SISWA mNO_INDUK = NO_INDUK mKODE_SMA = KODE_SMA mKELAMIN = KELAMIN else * jika tidak ketemu berarti data baru * maka variabel diisi dengan nilai-nilai kosong mNAMA_SISWA = space(30) mNO_INDUK = space(10) mKODE_SMA = space(8) mKELAMIN = space(1) endif @06,21 get mKODE_SMA pict ’99999999’ valid cari_sma(@mKODE_SMA,06,31) * memasukkan kode sma dengan validasi menggunakan fungsi cari_sma @07,21 get mKELAMIN pict ’9’ valid mKELAMIN$’12’ * memasukkan jenis kelamin dengan validasi biasa * jenis kelamin hanya boleh diisi dengan karakter 1 atau 2 @08,21 get mNO_INDUK @09,21 get mNAMA_SISWA * memasukkan data-data lain read * get diakhiri dengan perintah read if lastkey()#K_ESC
7.4. VALIDASI DENGAN FUNGSI * jika tidak menekan tombol ESC berarti data akan direkam seek mNO_PKAB if .not. found() append blank * jika dicari data tidak ada, berarti data baru * maka tambahkan baris kosong endif replace NO_PKAB with mNO_PKAB replace NAMA_SISWA with mNAMA_SISWA replace NO_INDUK with mNO_INDUK replace KODE_SMA with mKODE_SMA replace KELAMIN with mKELAMIN * merekam, nilai-nilai di field diganti dengan * nilai-nilai yang ada di memori endif enddo * akhir looping pemasukan data close index * menutup index close data * menutup file database clear * membersihkan layar kembali return * kembali ke sistem atau program sebelumnya function cari_SMA * fungsi untuk melakukan validasi terhadap kode sma parameter kode_cari,baris,kolom * kode cari ini adalah kode yang diisi oleh pemakai * baris dan kolom adalah posisi untuk mencetak * nama sekolah atau keterangan kode salah save screen to layar_akhir * sebelum tampilan berubah maka direkam dulu select_akhir = select() * merekam select terakhir, setelah ini akan masuk ke * database SMA dan kemudian akan kembali ke IPA2002 select b * pindah ke database SMA if kode_cari=space(7) * jika kode sms kosong, berarti pemakai bingung
71
72
BAB 7. VALIDASI INPUT DATA
* maka akan ditampilkan kode-kode sma yang ada @ 6,23 clear to 23,74 @ 6,23 to 23,74 * menghapus layar dan membuat kotak dbedit(7,24,22,73) * menampilkan isi dari database SMA if lastkey()=K_ENTER * jika pemakai menekan tombol ENTER berarti * pemakai memilih kode yang sedang disorot kode_cari = KODE_SMA endif endif go top * mengembalikan penunjuk record ke awal restore screen from layar_akhir * mengembalikan tampilan layar ke tampilan sebelumnya seek kode_cari * cari kode sma yang dipilih atau yang diisikan if found() @ baris,kolom say NAMA_SMA hasil = .t. * jika ketemu berarti kode sma tersebut ada maka * tampilkan nama smanya dan hasil fungsi adalah .t. else @ baris,kolom say ’Kode salah ... ! ’ hasil = .f. * jika tidak ketemu berarti kode sma tersebut tidak ada maka * tampilkan ’kode salah’ dan hasil fungsi adalah .f. endif select(select_akhir) * mengembalikan database yang sedang digunakan * ke ipa2002 return hasil * kembali ke proses sebelumnya dan mengembalikan nilai * .t. atau .f. tergantung kode benar atau salah Hasil running program jika kode SMA yang dimasukkan salah, tampak seperti berikut : Sedangkan jika kode SMA-nya benar, maka pemasukkan data dapat dilanjutkan ke proses berikutnya.
7.5
Latihan
Buatlah program untuk memasukkan data-data peserta PKAB sesuai dengan atribut pada tabel yang telah dibuat. Semestinya di sana terdapat pemasukan data program studi pilihan satu dan pilihan dua. Lakukan validasi terhadap pilihan yang dimasukkan ke dalam sistem.
7.6. APA RESIKONYA ?
73
Gambar 7.3: Sistem dengan Validasi Kode SMA yang Salah
Gambar 7.4: Sistem dengan Validasi Kode SMA yang Benar
7.6
Apa Resikonya ?
Dengan adanya validasi, pemakai harus memasukkan data benar ke dalam sistem. Masalah yang timbul adalah seandainya pemakai tidak mengetahui dengan benar kode-kode yang harus diisi. Karena jika pemakai belum mengisi dengan isian yang benar, maka selamanya proses pengisian tidak bisa diteruskan. Untuk itulah perlu disediakan fasilitas bagi pengguna untuk melihat kode-kode yang ada di dalam sistem. Dengan tersedianya fasilitas ini, pemakai dapat melihat daftar kode dan kemudian memilih kode yang ada di dalamnya. Hal ini penting juga, karena tidak jarang data yang tertulis di form isian bukan data yang sebenarnya, walau sudah disediakan buku panduan. Pembuatan fungsi untuk menampilkan kode-kode yang ada dapat dilakukan dengan banyak variasi. Salah satu yang akan kita lakukan adalah dengan memodifikasi fungsi untuk validasi sehingga dapat digunakan untuk menampilkan kode. Misal kita menentukan bahwa jika isian kode SMA diisi dengan kosong (spasi), maka sistem akan menampilkan kode-kode yang ada.
7.6.1
Structured English
Dengan adanya tambahan fungsi untuk menampilkan kode-kode yang ada, maka fungsi validasi dimodifikasi. Oleh karena itu, fungsi validasi (misal validasi kode SMA) diubah menjadi seperti berikut : Aktifkan tabel kode SMA Jika kode masih kosong maka Tampilkan isi tabel dengan dbedit() Jika pemakai menekan tombol ENTER maka Ambil kode dari tabel ke varibael cari kode Cari kode yang dimasukkan Jika ditemukan maka
74
BAB 7. VALIDASI INPUT DATA
Tampilkan nama SMA pada posisi yang ditentukan Set nilai hasil fungsi menjadi .t. jika tidak maka Tampilkan penjelasan ’Kode salah’ pada posisi yang ditentukan Set nilai hasil fungsi menjadi .f. Aktifkan tabel PKAB Kembalikan nilai hasil fungsi Fungsi untuk validasi selengkapnya menjadi seperti berikut : function cari_SMA parameter kode_cari,baris,kolom select b if kode_cari=space(7) @ 6,23 clear to 23,74 @ 6,23 to 23,74 dbedit(7,24,22,73) if lastkey()=K_ENTER kode_cari = KODE_SMA endif endif seek kode_cari if found() @ baris,kolom say NAMA_SMA hasil = .t. else @ baris,kolom say ’Kode salah ... ! hasil = .f. endif return hasil
’
Contoh lengkap sudah diberikan pada bagian validasi. Maksudnya pada contoh validasi tersebut, fungsi cari sma sudah mencakup peran untuk melakukan validasi dan untuk menampilkan kodekode SMA yang ada jika pemakai mengisi kode SMA dengan nilai kosong.
7.6.2
Pengembangan Lebih Lanjut !
Ada beberapa hal yang bisa disebut bugs walaupun tidak mengganggu jalannya sistem secara serius. Masalah-masalah tersebut adalah : 1. Tampilan layar yang mengganggu. Jika kita mencoba menampilkan layar tabel kode help, semestinya setelah selesai, layar kembali ke tampilan sebelumnya. Contoh tampak seperti berikut : Kemudian jika kode SMA diisi dengan isian kosong, maka akan ditampilkan tabel kode SMA seperti berikut : Setelah selesai pemakai memilih kode SMA yang benar, maka posisi layar mestinya kembali seperti semula Gambar 7.5, namun pada kenyataannya tampilan malah menjadi seperti berikut :
2. Posisi tabel aktif data base semestinya juga kembali ke posisi tabel aktif sebelumnya. Kalau dilihat contoh, maka diawal fungsi tabel aktif adalah IPA2002 dengan nama area select a pada akhir fungsi juga harus kembali seperti semula. Pada contoh, memang area kembali ke select a. Masalah akan timbul jika area terakhir bukan select a.
7.6. APA RESIKONYA ?
Gambar 7.5: Tampilan Sebelum Tabel Kode SMA
Gambar 7.6: Tampilan Ketika Pencarian Kode SMA
Gambar 7.7: Tampilan Setelah Pencarian Kode SMA
75
76
BAB 7. VALIDASI INPUT DATA
Adanya masalah-masalah tersebut maka posisi area dan tampilan layar harus disimpan dan pada akhir fungsi dikembalikan lagi. Fungsi masih sama dengan sebelumnya, hanya pada awal dan akhir dimodifikasi dengan memberikan perintah untuk menyimpan nilai area dan tampilan layar.
7.6.3
Perintah yang digunakan
Perintah yang digunakan untuk menyimpan nilai area dan tampilan layar seperti berikut :
7.6.4
Perintah save screen to
1. Fungsi : Perintah ini dipakai untuk merekam tampilan tulisan di monitor ke memory. Biasanya dilakukan pada suatu proses yang disusul proses lain tapi tampilan akan dikembalikan seperti semula.
Gambar 7.8: Ilustrasi Perubahan Tampilan
2. Sintaks : save screen to nama variabel 3. Contoh : do while .t. @ 07,10 prompt ’1. Pemasukan/Editing Data ’ @ 08,10 prompt ’2. Penghapusan Editing Data’ @ 09,10 prompt ’3. Browsing Data ’ @ 10,10 prompt ’4. Selesai ’ menu to pilihan save screen to lyr_menu do case case pilihan = 4 .or. lastkey()=K_ESC exit ... endcase restore screen from lyr_menu enddo
4. Keterangan : Tampilan menu akan direkam ke variabel lyr menu. Setelah masuk ke salah satu menu yang dipilih, tampilan layar berubah. Ketika kembali ke menu, maka tampilan dikembalikan ke bentuk semula.
7.6. APA RESIKONYA ?
7.6.5
77
Perintah restore screen from
1. Fungsi : Mengembalikan tampilan ke suatu bentuk tampilan sebelumnya. Untuk bisa mengembalikan tampilan ini, tampilan harus direkam dulu dengan perintah save screen to. 2. Sintaks : restore screen from nama variabel 3. Contoh : function cari_SMA parameter kode_cari,baris,kolom save screen to layar_akhir select_akhir = select() select b if kode_cari=space(7) @ 6,23 clear to 23,74 @ 6,23 to 23,74 dbedit(7,24,22,73) if lastkey()=K_ENTER kode_cari = KODE_SMA endif endif go top restore screen from layar_akhir seek kode_cari if found() @ baris,kolom say NAMA_SMA hasil = .t. else @ baris,kolom say ’Kode salah ... ! hasil = .f. endif select(select_akhir) return hasil
’
4. Keterangan : Perintah ini sangat berhubungan dengan perintah . save screen to. Nama variabel harus sesuai dengan nama variabel pada save screen to.
7.6.6
Perintah select()
1. Fungsi : Menyimpan area data base atau tabel yang aktif ke suatu variabel memory. Biasanya perintah ini diletakkan di awal fungsi atau ketika area akan berubah ke area lain. Di samping itu perintah ini juga dapat digunakan untuk mengubah area ke area lain. 2. Sintaks : nama variabel = select() atau select(nama area) 3. Contoh : function cari_SMA parameter kode_cari,baris,kolom select_akhir=select() select b seek kode_cari if found() @ baris,kolom say NAMA_SMA
78
BAB 7. VALIDASI INPUT DATA hasil = .t. else @ baris,kolom say ’Kode salah ... ! hasil = .f. endif select(select_akhir) return hasil
’
4. Keterangan : Perintah ini sangat berhubungan dengan perintah use. Lihat juga contoh fungsi cari sma pada bagian sebelumnya.
7.6.7
Perintah restore screen from
Program selengkapnya untuk melakukan pemasukan data, dapat dilihat seperti berikut. * nama file : entriv.prg #include ’inkey.ch’ clear select b use SMA index on KODE_SMA to SMA select a use IPA2002 index on NO_PKAB to ipa2002 mNO_PKAB = space(5) do while .t. @ 3,7 say ’Pemasukan/Editing Peserta PKAB’ @ 5,7 say ’No. PKAB : ’ @ 6,7 say ’Kode SMA : ’ @ 7,7 say ’Kelamin : [1:Laki-laki 2:Perempuan]’ @ 8,7 say ’No. Induk : ’ @ 9,7 say ’Nama Siswa : ’ @05,21 get mNO_PKAB read if lastkey()=K_ESC exit endif seek mNO_PKAB if found() mNAMA_SISWA = NAMA_SISWA mNO_INDUK = NO_INDUK mKODE_SMA = KODE_SMA mKELAMIN = KELAMIN else mNAMA_SISWA = space(30) mNO_INDUK = space(10) mKODE_SMA = space(8) mKELAMIN = space(1) endif @06,21 get mKODE_SMA pict ’99999999’ valid cari_sma(@mKODE_SMA,06,31) @07,21 get mKELAMIN pict ’9’ valid mKELAMIN$’12’ @08,21 get mNO_INDUK
7.6. APA RESIKONYA ? @09,21 get mNAMA_SISWA read if lastkey()#K_ESC seek mNO_PKAB if .not. found() append blank endif replace NO_PKAB with replace NAMA_SISWA with replace NO_INDUK with replace KODE_SMA with replace KELAMIN with endif enddo close index close data return
79
mNO_PKAB mNAMA_SISWA mNO_INDUK mKODE_SMA mKELAMIN
function cari_SMA parameter kode_cari,baris,kolom save screen to layar_akhir select_akhir = select() select b if kode_cari=space(7) @ 6,23 clear to 23,74 @ 6,23 to 23,74 dbedit(7,24,22,73) if lastkey()=K_ENTER kode_cari = KODE_SMA endif endif go top restore screen from layar_akhir seek kode_cari if found() @ baris,kolom say NAMA_SMA hasil = .t. else @ baris,kolom say ’Kode salah ... ! hasil = .f. endif select(select_akhir) return hasil
’
80
BAB 7. VALIDASI INPUT DATA
Bab 8
Pemrosesan Data 8.1
Pendahuluan
Apa yang telah dipelajari dalam bagian-bagian terdahulu, masih berhubungan dengan masalah pemasukan data (entry). Pembahasan bagian-bagian tersebut dimulai dari persiapan wadah penyimpanan berupa pembuatan tabel (file .dbf) sampai kepada masalah validasi pemasukan data. Pada bahasan berikut, kita akan membicarakan masalah pemrosesan data. Sebagaimana telah disampaikan pada awal buku ini, bahwa masalah yang dibahas dalam buku ini berkaitan dengan simulasi masalah PKAB. Tentu saja apa yang dibahas tidak semuanya sama persis dengan realita. Terutama dalam masalah pemrosesan data ini. Untuk penyederhanaan, penghitungan skor hanya dilakukan dengan menghitung rata-rata mata pelajaran. Skor akhir diperoleh dengan menjumlahkan skor beberapa mata pelajaran kemudian dihitung rata-ratanya. Lantas dimana letak perbedaan dengan kasus sebenarnya ? Dapat dijelaskan di sini, bahwa nilai mata pelajaran yang sama untuk sekolah yang berbeda tentu memiliki bobot yang berbeda pula. Nah ... dalam simulasi ini, tidak dilakukan pembobotan antar sekolah. Hal ini perlu dipahami agar kita dapat membedakan antara simulasi pada materi ini dengan proses yang sebenarnya.
8.2
Modifikasi Program Pemasukan Data
Untuk dapat melanjutkan materi ini, terlebih dahulu struktur file data peserta PKAB yaitu IPA2002.DBF mesti dimodifikasi. Struktur lengkapnya menjadi seperti berikut ini : Dengan demikian, pemasukan data peserta PKAB menjadi seperti berikut :
Contoh program lengkap dapat dilihat seperti berikut : * nama file : ful_ent.prg #include ’inkey.ch’ clear select b use SMA index on KODE_SMA to SMA select a use IPA2002 81
82
BAB 8. PEMROSESAN DATA
Field 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
Field Name NO PKAB RESI PILIHAN 1 PILIHAN 2 NAMA SISWA NO INDUK JURUSAN KODE SMA NAMA SMA KELAMIN INA 1 INGG 1 MAT 1 FIS 1 KIM 1 BIO 1 SKOR TANDA PILIHAN PIL LAIN KET PILIH TAHAP
Type Character Character Character Character Character Character Character Character Character Character Numeric Numeric Numeric Numeric Numeric Numeric Numeric Character Character Character Character Character
Width 5 1 6 6 30 10 1 8 35 1 4 4 4 4 4 4 7 10 6 6 1 1
Dec
1 1 1 1 1 1 3
Tabel 8.1: Atribut Tabel IPA2002.DBF
index on NO_PKAB to ipa2002 mNO_PKAB = space(5) do while .t. @ 3,7 say ’Pemasukan/Editing Peserta PKAB’ @ 5,7 say ’No. PKAB : ’ @ 6,7 say ’Kode SMA : ’ @ 7,7 say ’Kelamin : [1:Laki-laki 2:Perempuan]’ @ 8,7 say ’No. Induk : ’ @ 9,7 say ’Nama Siswa : ’ @10,7 say ’B. Indonesia: ’ @11,7 say ’B. Inggris : ’ @12,7 say ’Matematika : ’ @13,7 say ’Fisika : ’ @14,7 say ’Kimia : ’ @15,7 say ’Biologi : ’ @05,21 get mNO_PKAB read if lastkey()=K_ESC exit endif seek mNO_PKAB if found() mNAMA_SISWA = NAMA_SISWA mNO_INDUK = NO_INDUK mKODE_SMA = KODE_SMA
8.2. MODIFIKASI PROGRAM PEMASUKAN DATA
Gambar 8.1: Tampilan Pemasukan Data Peserta PKAB
mKELAMIN = KELAMIN mINA_1 = INA_1 mINGG_1 = INGG_1 mMAT_1 = MAT_1 mFIS_1 = FIS_1 mKIM_1 = KIM_1 mBIO_1 = BIO_1 else mNAMA_SISWA = space(30) mNO_INDUK = space(10) mKODE_SMA = space(8) mKELAMIN = space(1) mINA_1 = 0 mINGG_1 = 0 mMAT_1 = 0 mFIS_1 = 0 mKIM_1 = 0 mBIO_1 = 0 endif @06,21 get mKODE_SMA pict ’99999999’ valid cari_sma(@mKODE_SMA,06,31) @07,21 get mKELAMIN pict ’9’ valid mKELAMIN$’12’ @08,21 get mNO_INDUK @09,21 get mNAMA_SISWA @10,21 get mINA_1 pict ’999.9’ @11,21 get mINGG_1 pict ’999.9’ @12,21 get mMAT_1 pict ’999.9’ @13,21 get mFIS_1 pict ’999.9’ @14,21 get mKIM_1 pict ’999.9’ @15,21 get mBIO_1 pict ’999.9’ read if lastkey()#K_ESC seek mNO_PKAB if .not. found() append blank endif
83
84
BAB 8. PEMROSESAN DATA
replace replace replace replace replace replace replace replace replace replace replace endif enddo close index close data return
NO_PKAB NAMA_SISWA NO_INDUK KODE_SMA KELAMIN INA_1 INGG_1 MAT_1 FIS_1 KIM_1 BIO_1
with with with with with with with with with with with
mNO_PKAB mNAMA_SISWA mNO_INDUK mKODE_SMA mKELAMIN mINA_1 mINGG_1 mMAT_1 mFIS_1 mKIM_1 mBIO_1
function cari_SMA parameter kode_cari,baris,kolom save screen to layar_akhir select_akhir = select() select b if kode_cari=space(7) @ 6,23 clear to 23,74 @ 6,23 to 23,74 dbedit(7,24,22,73) if lastkey()=K_ENTER kode_cari = KODE_SMA endif endif go top restore screen from layar_akhir seek kode_cari if found() @ baris,kolom say NAMA_SMA hasil = .t. else @ baris,kolom say ’Kode salah ... ! hasil = .f. endif select(select_akhir) return hasil
8.3
’
Penghitungan Skor
Perlu ditekankan sekali lagi bahwa perhitungan skor yang dilakukan di sini hanya sekedar contoh dan untuk memudahkan maka dilakukan penyederhaan proses perhitungan. Skor akhir diperoleh dengan merata-rata nilai pada beberapa mata pelajaran yaitu Bahasa Indonesia, Bahasa Inggris, Matematika, Fisika, Kimia dan Biologi. Proses ini dilakukan untuk semua data yang ada. Structured English untuk proses perhitungan tersebut dapat kita susun seperti berikut : Buka file IPA2002 Hitung jumlah data Set nomor = 0
8.3. PENGHITUNGAN SKOR
85
Kerjakan dari awal sampai akhir data { Tambahkan nilai counter nomor Hitung jumlah nilai Hitung nilai rata-rata Simpan nilai rata-rata ke file data base Tampilkan keterangan proses Lanjutkan ke data berikutnya } Dengan contoh hasil dan programnya seperti berikut :
Gambar 8.2: Tampilan Pemrosesan Data Peserta PKAB * nama file : proses.prg #include ’inkey.ch’ clear use IPA2002 count to jml_data store 0 to nomor dbgotop() do while .not. eof() nomor = nomor + 1 jml_nilai = INA_1 + INGG_1 + MAT_1 rata = jml_nilai/6 replace SKOR with rata @ 09,20 say ’Nomor PKAB @ 10,20 say ’Nama Siswa @ 11,20 say ’Skor Akhir @ 12,20 say ’Sedang proses data ke @ 13,20 say ’Prosentasi proses dbskip() enddo return
+ FIS_1 + KIM_1 + BIO_1
: : : : :
’+NO_PKAB ’+NAMA_SISWA ’+str(rata,6,2) ’+str(nomor,5,0) ’+str(nomor/jml_data*100,6,2)+’ %’
Selanjutnya kita tinggal merangking peserta berdasarkan pilihan masing- masing dan skornya.
86
BAB 8. PEMROSESAN DATA
Bab 9
Pencetakan Informasi 9.1
Pendahuluan
Pencetakan informasi menjadi bagian yang sangat penting. Mengapa ? Bagaimana pun rumit dan canggihnya suatu sistem informasi, tetapi manakala sistem itu sendiri tidak dapat memberikan informasi (tentu saja dalam bentuk cetakan), apalah artinya. Seringkali informasi dalam bentuk cetakan menjadi dokumen yang sangat lebih komunikatif bagi pemakai dan itulah yang menjadi bahan pengambilan keputusan. Sebagaimana umumnya proses pencetakan, pencetakan bisa dilakukan ke printer atau ke layar. Pencetakan ke layar berfungsi semacam preview sebelum dicetak langsung ke printer.
9.2
Perintah-perintah yang Digunakan
Di sini akan dijelaskan perintah-perintah khusus yang berhubungan langsung dengan pencetakan. Perintah-perintah lain, tentu saja ada yang berkaitan namun perintah-perintah tersebut sudah dijelaskan. Sebagai contoh, tidak mungkin mencetak informasi tanpa ada tabel data base yang digunakan artinya perintah user otomatis harus digunakan.
9.2.1
Perintah set printer to
1. Fungsi : Perintah ini dipakai untuk mengarahkan pencetakan ke suatu file teks atau tidak. 2. Sintaks : set printer to [nama file] 3. Contoh : set printer to hasil.txt
4. Keterangan : Sedangkan untuk membatalkan pencetakan ke file, cukup dengan perintah set printer to tanpa tambahan apa-apa. Pencetakan ke file diperlukan manakala kita akan mencetak ke layar. Sebab pencetakan ke layar, pada hakekatnya adalah pencetakan ke suatu file teks dan kemudian file teks tersebut di- import ke suatu tabel file data base. Dari file data base kemudian ditampilkan ke layar dengan perintah dbedit().
9.2.2
Perintah set device to
1. Fungsi : Perintah ini dipakai untuk mengarahkan pencetakan ke suatu printer atau layar. Jika perintah set printer to diarahkan ke suatu file maka pencetakan akan diarahkan ke file tersebut, jika tidak maka pencetakan diarahkan ke printer. 2. Sintaks : set device to [screen—printer] 87
88
BAB 9. PENCETAKAN INFORMASI 3. Contoh : set printer to hasil.txt set device to printer
4. Keterangan : Rangkaian perintah di atas akan mengarahkan pencetakan ke file teks bernama hasil.txt. dbedit().
9.2.3
Perintah printer [on—off ]
1. Fungsi : Perintah ini dipakai untuk mengaktifkan atau mematikan printer. 2. Sintaks : set printer [on—off] 3. Contoh : set printer to hasil.txt set device to printer set printer on
4. Keterangan : Rangkaian perintah di atas akan mengarahkan pencetakan ke file teks bernama hasil.txt.
9.2.4
Perintah append from ... sdf
1. Fungsi : Fungsi append from ... sdf digunakan untuk memasukkan isi satu file teks ke tabel aktif (yang sedang di-use). File teks yang akan dimasukkan diasumsikan sudah ada sebagai hasil pencetakan ke file. Data yang dimasukkan sesuai nama atribut field masing-masing. 2. Sintaks : append from [file teks] sdf 3. Contoh : (a) use layar (b) append from hasil.txt sdf
9.2.5
Perintah dbedit()
1. Fungsi : Menampilkan isi suatu tabel (file data) dalam bentuk baris dan kolom. 2. Sintaks : dbedit(baris1,kolom1,baris2,kolom2) 3. Contoh : do case case alat=1 set device to screen set printer off set printer to use layar zap append from hasil.txt sdf dbgotop() dbedit(0,0,24,79) case alat=2
9.3. PENTING DIPERHATIKAN !
89
Gambar 9.1: Tampilan Perintah dbedit() set device to screen set printer off endcase 4. Keterangan : Baris1 dan kolom1 menunjukkan posisi kiri atas dan baris2 serta kolom2 menunjukkan posisi kanan bawah. Untuk memindah-mindah penunjuk bisa digunakan tombol panah, pg up, pg dn, home, dan sebagainya.
9.2.6
Perintah zap
1. Fungsi : Fungsi zap digunakan untuk menghapus seluruh data. Data akan terhapus tapi struktur data masih ada. 2. Sintaks : zap 3. Contoh : zap 4. Tampilan : -
9.3
Penting Diperhatikan !
Suatu hal yang penting untuk diperhatikan yaitu bahwa sebelum proses pencetakan harus disiapkan kondisi-kondisi pendahuluan. Kondisi-kondisi tersebut terlihat seperti pada perintah berikut ini :
90
BAB 9. PENCETAKAN INFORMASI @ 15,11 @ 16,11 menu to do case case
prompt ’ L. Layar ’ prompt ’ P. Printer ’ alat
alat=1 set printer to hasil.txt set printer on set device to print case alat=2 set printer on set device to print endcase
Setelah selesai, maka dilakukan proses penutupan kondisi. Proses penutupan ini dilakukan dengan memberi parameter kebalikan dari proses sebelumnya dan penulisan baris program juga dalam urutan terbalik seperti berikut : do case case alat=1 set device to screen set printer off set printer to use layar zap append from hasil.txt sdf dbgotop() dbedit(0,0,24,79) case alat=2 set device to screen set printer off endcase
9.4
Structured English
Structured English untuk masalah pencetakan informasi dapat dilihat seperti pada contoh berikut. Tentu saja, karena ini hanya sebagai contoh, pada aplikasi lain harus disesuaikan dengan keperluan. Kerjakan selama benar { Buka file data Tampilkan menu jenis Urutan Pencetakan Jika menekan tombol ESC maka Keluar looping Tampilkan menu cetak ke layar atau printer Jika cetak ke layar maka Set pencetakan ke file teks Jika cetak ke printer maka Siapkan printer Jika mencetak berdasarkan urutan nama maka { Index data menurut urutan nama Cetak data yang diperlukan dari awal sampai akhir } Jika mencetak berdasarkan urutan skor akhir maka {
9.4. STRUCTURED ENGLISH
91
Index data menurut urutan skor Cetak data yang diperlukan dari awal sampai akhir } Jika cetak ke layar maka { Import file teks hasil cetakan ke file dbf Tampilkan isi file dbf dengan dbedit() } Jika cetak kr printer maka Non aktifkan printer } Selesai Dengan contoh program lengkapnya seperti berikut ini : #include ’inkey.ch’ do while .t. wall(0,0,24,79) use ipa2002 @ 09,10 clear to 17,65 @ 10,11 prompt ’ A. Cetak Daftar Peserta Urut Nama ’ @ 11,11 prompt ’ B. Cetak Daftar Peserta Urut Skor ’ @ 12,11 prompt ’ X. Selesai ... ’ menu to cetak if lastkey()=K_ESC .or. cetak=3 exit endif @ 15,11 prompt ’ L. Layar ’ @ 16,11 prompt ’ P. Printer ’ menu to alat do case case alat=1 set printer to hasil.txt set printer on set device to print case alat=2 set printer on set device to print endcase do case case cetak=1 index on NAMA_SISWA to nama dbgotop() do while .not. eof() @ prow()+1,1 say NO_PKAB+’ ’+NAMA_SISWA+’ ’+PILIHAN_1+’ ’+NAMA_SMA dbskip() enddo case cetak=2 index on PILIHAN_1+str(1000-SKOR) to skor dbgotop() do while .not. eof() @ prow()+1,1 say NO_PKAB+’ ’+NAMA_SISWA+’ ’+PILIHAN_1+’ ’+str(SKOR,8,3) dbskip() enddo
92
BAB 9. PENCETAKAN INFORMASI
endcase do case case alat=1 set device to screen set printer off set printer to use layar zap append from hasil.txt sdf dbgotop() dbedit(0,0,24,79) case alat=2 set device to screen set printer off endcase enddo return Jika program ini dijalankan, kita dapat memilih cetak ke layar atau printer. Seandainya terdapat printer dan kita memilih cetak ke printer, maka hasil pencetakan akan langsung ke printer. Untuk dapat menjalankan program ini, maka kita harus memiliki file data IPA2002.DBF sebagaimana telah dibuat diawal dan file data LAYAR.DBF. File data LAYAR.DBF memiliki struktur seperti berikut : Structure for database: LAYAR.DBF Number of data records: 3800 Date of last update : 12/23/02 Field Field Name Type Width 1 LAYAR_1 Character 70 2 LAYAR_2 Character 70 3 LAYAR_3 Character 70 4 LAYAR_4 Character 70 ** Total ** 281
Dec
Bab 10
Integrasi Program 10.1
Pendahuluan
Meskipun kita sudah membahas pembuatan menu, namun dapat dikatakan bahwa program yang dibuat masih terpisah-pisah. Pada aplikasi yang dipakai oleh pelanggan, sebaiknya aplikasi sudah terintegrasi. Oleh karena itu, pada bagian ini kita akan membahas bagaimana menggabungkan program-program yang sudah dibuat. Jika Anda mengikuti secara runut dan mengerjakan setiap latihan dengan baik, Anda akan memiliki file data dan program seperti berikut : Directory of C:\dwi\clipper IPA2002 SLTA LAYAR PS
DBF DBF DBF DBF
529,095 127,648 934,206 6,760
12-26-02 11:14a ipa2002.dbf 09-14-02 7:58p SLTA.DBF 12-26-02 7:05p LAYAR.DBF 05-21-02 7:43p PS.DBF
CETAK LOGO HAPUS LIHAT ENT_FUL PROSES
PRG PRG PRG PRG PRG PRG
1,524 1,126 958 66 2,806 607
12-26-02 6:56p CETAK.PRG 06-14-02 2:58a LOGO.PRG 11-04-02 8:47p HAPUS.PRG 11-11-02 7:58p LIHAT.PRG 12-26-02 10:32a ENT_FUL.PRG 12-26-02 11:14a PROSES.PRG
Program menu yang dibuat selengkapnya dapat dilihat pada bagian berikut. Sedangkan isi bagianbagian program tidak ditampilan ulang karena sama dengan program-program pada bagian sebelumnya. * nama file inte.prg #include ’inkey.ch’ tone(500,10) set wrap on do logo clear do while .t. wall (0,0,24,79) @7,15 clear to 20,75 @8,30 say ’program menu’ @10,17 prompt "1 Pemasukan data @11,17 prompt "2 Penghapusan data @12,17 prompt "3 Browsing data @13,17 prompt "4 Proses Skoring @14,17 prompt "5 Pencetakan
" " " " " 93
94
BAB 10. INTEGRASI PROGRAM
@15,17 prompt "6 Game Tetris menu to pil_utama if lastkey() = K\_ESC exit endif do case case pil_utama =1 do ent_ful case pil_utama = 2 do hapus case pil_utama = 3 do lihat case pil_utama = 4 do proses case pil_utama = 5 do cetak case pil_utama = 6 tetris() end case enddo return
"
Tampilan program tampak seperti berikut :
Gambar 10.1: Tampilan Logo Pembuka
10.1. PENDAHULUAN
Gambar 10.2: Tampilan Menu Gabungan Program
95
96
BAB 10. INTEGRASI PROGRAM
Bagian V
Clipper Advanced
97
Bab 11
Optimasi dan Improvisasi 11.1
Improvisasi Program
Pada bagian-bagian sebelumnya, pembuatan program dengan Clipper dilakukan dengan tidak memperhatikan masalah-masalah optimasi dan kesempurnaan program. Oleh karenanya, hal-hal tersebut akan dibahas pada bagian-bagian berikut. Dalam kondisi tertentu (data masih sedikit, tidak ada kelainan kondisi) maka program akan berjalan normal. Namun hal itu akan menjadi masalah manakala, misalnya data sudah banyak, file data hilang atau tidak ada, dan sebagainya. Dengan demikian, program perlu dioptimasi dan ada improvisasi untuk mengurangi kesalahan-kesalahan program.
11.2
Operasi File
Operasi file yang dimaksud di sini adalah membuka dan menutup file data. Sebagaimana sudah kita pahami bersama, secara mudah perintah untuk membuka itshape file data adalah use dan untuk menutupnya adalah close data. Masalah akan muncul manakala file data yang hendak digunakan tidak ada. Misalkan kita lihat contoh berikut : clear wall(0,0,24,79) use ipa2002 dbedit(5,7,20,75) return Jika file ipa2002.dbf tidak ada, maka program akan timbul error. Error yang muncul tampak seperti berikut :
Gambar 11.1: Error Membuka File
99
100
BAB 11. OPTIMASI DAN IMPROVISASI
11.3
Perintah-Perintah
Perintah baru yang digunakan untuk improvisasi program adalah :
11.3.1
Perintah file()
1. Fungsi : Mengetahui ada tidaknya suatu file. 2. Sintaks : file(’nama-file.ext’) 3. Contoh : file(’ipa2002.dbf’) 4. Keterangan : Fung file(’ipa2002.dbf’) akan menghasilkan nilai .t. jika file ipa2002.dbf ada dan sebaliknya.
11.4
Optimasi Indeks
11.4.1
Multipel Indeks
Dengan menggunakan Clipper yang masih standar, satu file iundeks hanya bisa diisi dengan satu kunci indeks. Jika ada indeks dengan kunci yang lain, maka harus dilakukan proses indeks lagi. Perhatikan potongan program berikut : #include ’inkey.ch’ do while .t. wall(0,0,24,79) use ipa2002 @ 09,10 clear to @ 10,11 prompt ’ @ 11,11 prompt ’ @ 12,11 prompt ’ menu to cetak ... ... ... do case case cetak=1 index on count to ... ... ... case cetak=2 index on ... ... ... endcase ... ... ... enddo return
17,65 A. Cetak Daftar Peserta Urut Nama ’ B. Cetak Daftar Peserta Urut Skor ’ X. Selesai ... ’
NAMA_SISWA to nama jumlah_data
PILIHAN_1+str(1000-SKOR) to skor
11.4. OPTIMASI INDEKS
101
Untuk membuat satu file bisa berisi beberapa kunci indeks, diperlukan pustaka (library) tambahan SIXCDX. Pustaka ini bukan pustaka standar, sehingga belum ada pada program Clipper. #include "sixcdx.ch" #include "machsix.ch" #include "inkey.ch" set date italian *if date()>ctod(’01-03-2003’) * clear * @ 1,1 say ’fatal error ....’ * return *endif *if .not. file(’roda.dat’) * clear * @ 1,1 say ’file sistem tidak ada’ * return *endif select a if file(’ipa2002.dbf’) use ipa2002 else clear @ 1,1 say ’file data tidak ada !’ return endif clear @ 1,1 say time() if file(’ipa2002.ntx’) set index to IPA2002 else index on NO_PKAB tag NO_PKAB of ipa2002 index on NAMA_siswa tag NAMA of ipa2002 index on -SKOR tag SKOR of ipa2002 endif @ 2,1 say time() wait do while .t. clear @ 10,10 prompt ’Cetak urut skor’ @ 11,10 prompt ’Cetak urut nama’ @ 12,10 prompt ’Cetak urut no ’ menu to cetak if lastkey()=K_ESC exit endif do case case cetak=1 set order to tag SKOR case cetak=2 set order to tag NAMA case cetak=3 set order to tag NO_PKAB endcase
102
BAB 11. OPTIMASI DAN IMPROVISASI
dbgotop() dbedit(1,1,23,77) enddo return
11.5
Modifikasi Bentuk get
Dari beberapa contoh program terdahulu, bisa dilihat adanya salah satu ciri program yang dibuat dengan menggunakan Clipper. Ciri tersebut adalah bentuk input yang berupa blok warna. Contoh seperti berikut : Untuk memperindah bentuk pemasukan data, maka dibuat fungsi dan
Gambar 11.2: Tampilan Pemasukan Data Peserta PKAB prosedur tersendiri. Fungsi penting yang harus diperhatikan ada tiga, yaitu : 1. nget init(jumlah get), perintah ini digunakan untuk menentukan jumlah pemasukan data yang ada (nget()). 2. nget(baris,kolom,”nama variabel”,”validasi”), perintah ini digunakan untuk memasukkan data. Fungsinya sama dengan perintah get pada Clipper biasa. 3. nread(.f.), perintah ini untuk mengakhiri perintah nget(). Contoh selengkapnya dapat dilihat seperti berikut : #include "box.ch" #include "inkey.ch" #include "setcurs.ch" PUBLIC READ_NUM, NUM_NREADS, GET_NUM, Chus, St_Kursor, Tblcol[16],ST_INS:=.F. STORE 0 TO READ_NUM, NUM_NREADS Tblcol[1] = ’N’ Tblcol[2] = ’B’ Tblcol[3] = ’G’ Tblcol[4] = ’BG’ Tblcol[5] = ’R’ Tblcol[6] = ’RB’
11.5. MODIFIKASI BENTUK GET Tblcol[7] = ’GR’ Tblcol[8] = ’W’ For Chus = 9 To 16 Tblcol[Chus] = Tblcol[Chus-8]+’+’ Next SETCANCEL(.T.)
&& DWI
READEXIT(.T.) * bagian sebelum ini tidak boleh dihapus * bagian berikut ini yang bisa dimodifikasi set talk off set status off set date italian set scoreboard off set menu off set wrap on clear @ 10,1 say "SSN : " @ 11,1 say "Masukkan Nama : " @ 12,1 say "Masukkan Alamat : " mssn = space(11) mnama = space(21) malamat = space(41) nget_init(3) nget(10,19,"mssn","") nget(11,19,"mNAMA","") nget(12,19,"malamat","") nread(.f.) * bagian setelah ini, tidak boleh diedit FUNCTION NREAD PARAMETER PermitUP, StartGet * Belum Pake Awal Get PRIVATE NUM_GETS, CUR_GET, NRD_OK, CUR_VALID, CUR_NAME, NRD_KEY, NRD_LONG, TESQ PRIVATE MORE_GETS, STR_READ, SIMPAN_SCR, NRD_X, NRD_Y, NRD_Keyhome PRIVATE NRD_Kers, NRD_Cl1, NRD_Cl2, NRD_X1 Do Transcol With (setcolor()), NRD_Cl1, NRD_Cl2 CLEAR GETS NUM_NREADS = NUM_NREADS + 1 STR_READ = LTRIM(STR(READ_NUM)) NUM_GETS = LEN(ROWS&STR_READ) CUR_GET = If(StartGet != Nil, Startget, 1) Store 1 To NRD_X, NRD_Y, SIMPAN_SCR, NRD_LONG
103
104
BAB 11. OPTIMASI DAN IMPROVISASI
MORE_GETS = .T. NRD_KEY = 0 NRD_Keyhome = 0 DRAWGET(NUM_GETS, ROWS&STR_READ, COLS&STR_READ, VARS&STR_READ, PICS&STR_READ) SIMPAN_SCR = ASC(RIGHT(SAVESCREEN(ROWS&STR_READ[1], COLS&STR_READ[1], ; ROWS&STR_READ[1], COLS&STR_READ[1]),1)) SIMPAN_SCR = SIMPAN_SCR - (SIMPAN_SCR % 16) NRD_X1 = Ascan(Tblcol, Forecol(NRD_Cl1)) NRD_X1 = If(NRD_X1 = 0, 0, NRD_X1-1) SKURSOR(.T.) DO WHILE MORE_GETS CUR_NAME = VARS&STR_READ[CUR_GET] NRD_OK = .F. NRD_X = ROWS&STR_READ[CUR_GET] NRD_Y = COLS&STR_READ[CUR_GET] NRD_LONG = LEN ( IIF( LEN(PICS&STR_READ[CUR_GET]) = 0, ; TRANS(&CUR_NAME, ""), TRANS(&CUR_NAME, PICS&STR_READ[CUR_GET]) ) ) DO WHILE (! NRD_OK) @NRD_X, NRD_Y GET &CUR_NAME PICTURE PICS&STR_READ[CUR_GET] READ NRD_KEY = Lastkey() NRD_OK = .T. CUR_VALID = VALIDS&STR_READ[CUR_GET] IF (NRD_KEY = K_UP) .and. (PermitUP) .and. (CUR_GET = 1) MORE_GETS = .F. Exit Endif IF ! Empty(CUR_VALID) IF (NRD_KEY = K_UP .AND. CUR_GET != 1) .OR. NRD_KEY=K_ESC NRD_OK = .T. Exit Elseif (NRD_KEY = K_UP) .AND. (CUR_GET = 1) NRD_OK = .F. Else NRD_Kers = SKURSOR() SKURSOR(.F.) @NRD_X, NRD_Y Say ’’ If Valtype(CUR_VALID)==’B’ NRD_OK = Eval(CUR_VALID) Else NRD_OK = (&CUR_VALID)
11.5. MODIFIKASI BENTUK GET Endif SKURSOR(NRD_Kers) IF TYPE(’NRD_OK’)=’C’ If NRD_OK=’OUT’ MORE_GETS = .F. Exit Endif Elseif TYPE(’NRD_OK’) != ’L’ NRD_OK = .T. Else If NRD_OK Exit Endif Endif Endif Endif Enddo Gfattr(NRD_X, NRD_Y, NRD_X, NRD_Y + NRD_LONG - 1, NRD_X1+SIMPAN_SCR) DO CASE CASE NRD_KEY = K_DOWN .OR. NRD_KEY = K_ENTER IF CUR_GET != NUM_GETS CUR_GET = CUR_GET + 1 ELSE MORE_GETS = .F. ENDIF CASE NRD_KEY = K_UP IF CUR_GET != 1 CUR_GET = CUR_GET - 1 ENDIF CASE NRD_KEY = K\_ESC .OR. NRD_KEY = K_PGUP .OR. NRD_KEY = K_PGDN MORE_GETS = .F. OTHERWISE IF CUR_GET != NUM_GETS CUR_GET = CUR_GET + 1 ELSE MORE_GETS = .F. ENDIF ENDCASE ENDDO SKURSOR(.F.) RELEASE ROWS&STR_READ, COLS&STR_READ RELEASE VARS&STR_READ, PICS&STR_READ, VALIDS&STR_READ *----------------------------------------------------------release NUM_GETS, CUR_GET, NRD_OK, CUR_VALID, CUR_NAME, NRD_KEY, NRD_LONG, TESQ release MORE_GETS, STR_READ, SIMPAN_SCR, NRD_X, NRD_Y, NRD_Keyhome release NRD_Kers, NRD_Cl1, NRD_Cl2, NRD_X1 *-----------------------------------------------------------
105
106
BAB 11. OPTIMASI DAN IMPROVISASI
READ_NUM = READ_NUM - 1 RETURN NRD_Keyhome
FUNCTION NGET_INIT PARAM MAX_GETS PRIVATE STR_READ READ_NUM = READ_NUM + 1 STR_READ = LTRIM(STR(READ_NUM)) GET_NUM = 0 PUBLIC ROWS&STR_READ[MAX_GETS],COLS&STR_READ[MAX_GETS] PUBLIC VARS&STR_READ[MAX_GETS] PUBLIC PICS&STR_READ[MAX_GETS],VALIDS&STR_READ[MAX_GETS] RETURN.T. FUNCTION NGET PARAM ROW_NUM, COL_NUM, VAR_NAME, PIC_STR, VALID_STR PRIVATE STR_READ GET_NUM = GET_NUM + 1 STR_READ = LTRIM(STR(READ_NUM)) ROWS&STR_READ[GET_NUM] = COLS&STR_READ[GET_NUM] = VARS&STR_READ[GET_NUM] = PICS&STR_READ[GET_NUM] = VALIDS&STR_READ[GET_NUM] RETURN.T.
ROW_NUM COL_NUM VAR_NAME PIC_STR = VALID_STR
Procedure Transcol Parameter Strcolx, Ret1, Ret2 Private Cari, Dum,dumx Dum = Alltrim(Strcolx) Cari = AT(’,’, Dum) If Cari = 0 Dumx = setcolor() Ret1 = Subdata(Dumx, 1, Len(Dumx)) Ret1 = If(Empty(Ret1), "W/N", Ret1) Ret2 = "W/N" Else Ret1 = Subdata(Dum, 1, Cari-1) Ret2 = Subdata(Dum, Cari+1, Len(Dum)) Endif Return Function Subdata Parameter Sumber, Dari, akhir if VALTYPE(sumber)=’N’ hom=’’ else hom=Substr(Sumber, Dari, akhir-Dari+1) endif
11.5. MODIFIKASI BENTUK GET Return hom FUNCTION DRAWGET PARAMETER NUM_GETS, ROWS, COLS, VARS, PICS PRIVATE D_I, CUR_NAME FOR D_I = 1 TO NUM_GETS CUR_NAME=VARS[D_I] @ROWS[D_I], COLS[D_I] SAY &CUR_NAME PICTURE PICS[D_I] NEXT CLEA GETS RETURN .T. Function Forecol Parameter Strcol Private Cari, Dum, Hom := ’W’ Dum = Alltrim(Strcol) Cari = AT(’/’, Dum) If Cari <> 0 Hom = Subdata(Dum, 1, Cari-1) Endif Cari = AT(’,’, Hom) If Cari != 0 Hom = Subdata(Hom, 1, Cari-1) Endif Return Hom FUNCTION SKURSOR PARAMETER SETIN IF PCOUNT()=1 IF SETIN SET CURSOR ON If St_Ins Setcursor(SC_NORMAL) Else Setcursor(SC_SPECIAL1) Endif ELSE SET CURSOR OFF ENDIF ST_KURSOR = SETIN ENDIF RETURN ST_KURSOR
FUNCTION Kotakx Parameter X, Y, X1, Y1, Pesen Return EXBOX(X, Y, X1, Y1, 4, 5,,.T., Pesen) Untuk meng-compile program ini, perintahnya : blinker file new_get lib grump
107
108
BAB 11. OPTIMASI DAN IMPROVISASI
Bagian VI
Penutup Buku
109
Bab 12
Penutup 12.1
Harapan dan Impian
Apa-apa yang disampaikan dalam buku ini masih sangat sederhana alias apa adanya. Sebagai contoh, dalam suatu proses tidak dilakukan optimalisasi algoritma. Hal-hal tersebut mudahmudahan akan dibahas pada kesempatan lain (Insyaa Allah) jika ada. Mengapa ? Buku ini memang ditujukan untuk pembaca yang baru belajar pemrograman Clipper. Kalau para pembaca yang budiman pernah memiliki pengalaman buruk mencoba contoh-contoh program tetapi ternyata program tersebut tidak dapat dieksekusi, maka mudah-mudahan semua contoh yang ada pada buku ini dapat dicoba dengan baik dan memberi pelajaran kepada kita semua. Contoh-contoh yang ada sudah dikompilasi dan dieksekusi dan kemudian tidak ada yang disembunyikan. Dengan penggunaan perangkat lunak LATEXdalam penulisan buku ini, maka semoga ini menjadi inspirasi pemakaian perangkat lunak yang legal. Selain memang features yang tersedia dan perangkat LATEXyang powerfull. Kapan bangsa ini akan terlepas dari predikat ’pembajak perangkat lunak’ dan koruptor ? Kami mengucapkan terima kasih jika Anda berkenan memberi masukan-masukan dalam penulisan buku ini. Semoga bermanfaat . . . meskipun nampaknya buku ini hanyalah sebutir pasir di padang pasir nan luas.
12.2
Bacaan Tambahan
Bagi pembaca yang ingin mencari sumber referensi tambahan, dapat melihat-lihat situs berikut : 1. Panduan lengkap tentang perintah-perintah yang ada di dalam sistem Clipper. Informasi ini dapat diakses di Advantage CA Clipper Guide v5.5, The Guide To Clipper 5.2 : http://www.clipx.net/norton.php. 2. Petunjuk penggunaan Dbase III sebagai pedoman dalam penggunaan perintah-perntah dot prompt. Informasi ini bisa diakses di Dbase III User Guide : http://www.csuhayward.edu/ics/walab/u guides/db3guide.htm. 3. Pemrograman Menggunakan FoxPro : http://www.geocities.com/wardiepeniron/foxpro.html. Mudah-mudahan situs-situs tersebut masih aktif dan bisa diakses sampai sekarang. 111
Indeks .dbf, 7 .or., 87 #include, 87, 89 LATEX, iii, 107 append from, 14 browse, 16 delete, 16 go, 13 index, 15 list, 13 zap, 13 executable file, 26 Editor, 6 Insyaa Allah, 107 Structured English, 86 append blank, 11 append, 10 browse, 11 compiler, 6 create, 7, 8 dot command, 8 download, iii edit, 11 features, 107 field, 7 multi user, 7 porting, 5 printer, 5, 88 programmer, 5 record, 11 referential integrity, 5 single user, 7 tools, 6 use, 8 AK-47, iii, 5 alat, 86 Alfons Tanudjaya, 5 algoritma, 107 Allah, iii Allah swt., iii analisa, 6 aplikasi, 86, 89 append, 59 append blank, 52 append from, 86, 87
ascending, 14 ASCII, 6 atribut, 7 bahasa pemrograman, 5 basis data, 5, 7, 8 blinker, 6 cetak, 87 CETAK.PRG, 89 clear, 87, 89 clear to, 87, 89 Clipper, iii, 5, 6, 8, 107 copy, 6 database, 45 dBase, 6 dbedit, 51, 86, 87 dbedit(), 59 dbgotop(), 86, 87 dbskip(), 87 delete, 51 desimal, 8 detikINET, 5 do, 89 do case, 86, 87, 89 do while .t., 87, 89 DOS Command, 7 DOS Prompt, 7 Dos Prompt, 7 dwi sakethi, iii edit.com, 6 else, 50 ENT FUL.PRG, 89 error, 6, 7 exe, 6 exit, 87, 89 field, 8 Field Name, 7 file data, 7 file obyek, 6 find, 6 Find-File, 7 Finkel, 25 found, 49, 59 112
INDEKS FoxBase, 7 Foxbase, 7, 8 Foxplus, 6 get, 36, 59 GNU Linux, 5 hapus data, 59 HAPUS.PRG, 89 if, 50 include, 6, 50 index, 87 inkey.ch, 50 input, 45 integrasi, 89 interaktif, 8 internet, 5 IPA2002.DBF, 88, 89 jaringan, 5 K ESC, 87, 89 kebutuhan pemakai, 5 keluar, 8 kesalahan, 6 keyboard, 36 kompilasi, 6 kualitas, 5 lastkey, 50 lastkey(), 87, 89 layar, 8, 88 LAYAR.DBF, 88, 89 legal, 107 lib, 6 library, 6 lidi, iii LIHAT.PRG, 89 link, 6 linking, 6 Linux, iii LOGO.PRG, 89 Made Wiryana, iii manajemen basis data, 7 memory, 45 memperbaiki, 11 menambah data, 10 menampilkan data, 11 menghapus data, 11 menu, 43, 87, 89 menu to, 85, 87, 89 merekam, 7 merubah data, 11 message, 62
113 mfoxplus, 7 Microsoft Word, 6 mouse, 7 mySQL, 6 nomor baris, 7 Notepad, 6 Novell Netware, 5 nyamuk, iii obj, 6 operator, 5 Oracle, 5 Pascal, 5 PC AT, 5 PC AT 286, 5 pelanggan, 89 pencari tulisan, 7 pencetakan, 85 perancangan, 6 perangkat bantu, 6 perangkat lunak, 5 picture, 36 PKAB, 6 PostGre SQL, 6 printer, 5 programming, 25 prompt, 59, 85, 87, 89 PROSES.PRG, 89 prow(), 87 PS.DBF, 89 QEdit, 6 Rasulullah saw., iii read, 59 record, 52 replace, 6 restore screen from, 48 rtlink, 6 save screen to, 48 say, 59, 87, 89 sdf, 86, 87 seek, 49, 59 set device, 86, 87 set printer, 86, 87 set wrap on, 87, 89 sholawat, iii SLTA.DBF, 89 tabel, 7 tetris(), 89 TexMaker, 6 tipe, 8
114 tone, 89 ts.exe, 7 Type, 7 Ubuntu, 6 ukuran, 8 use, 86, 87 valid, 36, 65 validasi, 65 wall, 89 Width, 7 Word Perfect, 6 Word Star, 6 xbase, 5 zap, 86, 87
INDEKS
Buku Panduan
Pemrograman Clipper Oleh : Dwi Sakethi, S.Si, M.Kom http://dwijim.staff.unila.ac.id
Jurusan Matematika Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Lampung Bandar Lampung 2009