Anda di halaman 1dari 122

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 ca-
haya 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 pro-
gram. 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 diedit September 2009), bisa dibilang sudah usang dan tradisional. Namun pada
kenyataan, penulis masih menggunakannya untuk pengolahan data. Dan mungkin juga masih digu-
nakan 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.staff.unila.ac.id. Siapa saja boleh men-
download, memodifikasi, memperbanyak sebagian atau seluruh isi buku ini. Termasuk contoh-
contoh 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. Mudah-mudahan memberi man-
faat seluas-luasnya kepada siapa saja yang memerlukannya. Hanya kepada Allah-lah kami berharap
balasan dan ampunan-Nya.

iii
iv BAB 1. SAMBUTAN

dwi sakethi
dwijim@unila.ac.id
http://dwijim.staff.unila.ac.id
Daftar Isi

I Pengantar i

1 Sambutan iii
1.1 Kata Pengantar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii

II Pengantar Clipper 3

2 Basis Data dengan Clipper 5


2.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Perangkat-Perangkat yang Dipakai . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3 Perintah DOS Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4 Manajemen Basis Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4.1 Menjalankan Foxbase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4.2 Perintah create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4.3 Perintah use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4.4 Perintah append . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.5 Perintah append blank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.6 Perintah edit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.7 Perintah browse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4.8 Perintah go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4.9 Perintah list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4.10 Perintah zap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4.11 Perintah append from . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.4.12 Perintah index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.4.13 Perintah delete record . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.4.14 Manajemen Basis Data dengan dbu.exe . . . . . . . . . . . . . . . . . . . . . 16

III Gambaran Sistem 17

3 Sistem yang Akan Dibuat 19


3.1 Rancangan Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

IV Pemrograman Clipper 21

4 Program Dasar 23
4.1 Check List for Good Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2 Pemrosesan Program Clipper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3 Proses Kompilasi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.4 First Clipper Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.4.1 Perintah clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.4.2 Perintah say . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.4.3 Perintah wait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

v
vi DAFTAR ISI

4.4.4 Perintah return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31


4.5 Praktikum I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

5 Program Input Data dan Menu 35


5.1 Program Input Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2 Perintah yang Digunakan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.2.1 Perintah get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.2.2 Perintah read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2.3 Perintah store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2.4 Perintah set date italian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2.5 Perintah set century on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.3 Contoh Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.4 Program Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.4.1 Perintah set wrap on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.4.2 Perintah prompt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.4.3 Perintah menu to . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.4.4 Perintah do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.4.5 Perintah do while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.4.6 Perintah do case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.5 Contoh Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.6 Tugas Latihan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

6 Program Input Database 45


6.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.2 English Structured . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.3 Perintah yang Digunakan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.3.1 Perintah save screen to . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.3.2 Perintah restore screen from . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.3.3 Perintah seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.3.4 Perintah found() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.3.5 Perintah if . . . else . . . endif . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.3.6 Perintah #include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.3.7 Perintah lastkey() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.3.8 Perintah dbedit() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.3.9 Perintah delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.3.10 Program Pemasukan Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.3.11 Program Penghapusan Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.3.12 Program Menu Gabungan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6.4 Tugas Latihan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

7 Validasi Input Data 65


7.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
7.2 Cara Validasi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
7.3 Validasi dengan Kondisi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
7.3.1 Perintah valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.4 Validasi dengan Fungsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7.4.1 Structured English . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7.4.2 Contoh Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7.5 Latihan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
7.6 Apa Resikonya ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
7.6.1 Structured English . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
7.6.2 Pengembangan Lebih Lanjut ! . . . . . . . . . . . . . . . . . . . . . . . . . . 70
7.6.3 Perintah yang digunakan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
7.6.4 Perintah save screen to . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
DAFTAR ISI vii

7.6.5 Perintah restore screen from . . . . . . . . . . . . . . . . . . . . . . . . . . 72


7.6.6 Perintah select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
7.6.7 Perintah restore screen from . . . . . . . . . . . . . . . . . . . . . . . . . . 74

8 Pemrosesan Data 77
8.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
8.2 Modifikasi Program Pemasukan Data . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
8.3 Penghitungan Skor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

9 Pencetakan Informasi 83
9.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
9.2 Perintah-perintah yang Digunakan . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
9.2.1 Perintah set printer to . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
9.2.2 Perintah set device to . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
9.2.3 Perintah printer [on—off ] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
9.2.4 Perintah append from ... sdf . . . . . . . . . . . . . . . . . . . . . . . . . . 84
9.2.5 Perintah dbedit() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
9.2.6 Perintah zap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
9.3 Penting Diperhatikan ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
9.4 Structured English . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

10 Integrasi Program 89
10.1 Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

V Clipper Advanced 93

11 Optimasi dan Improvisasi 95


11.1 Improvisasi Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
11.2 Operasi File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
11.3 Perintah-Perintah . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
11.3.1 Perintah file() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
11.4 Optimasi Indeks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
11.4.1 Multipel Indeks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
11.5 Modifikasi Bentuk get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

VI Penutup Buku 105

12 Penutup 107
12.1 Harapan dan Impian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
12.2 Bacaan Tambahan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
viii DAFTAR ISI
Daftar Tabel

2.1 Atribut Tabel PS.DBF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7


2.2 Atribut Tabel IPA2002.DBF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Atribut Tabel SLTA.DBF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4.1 Atribut Tabel SLTA.DBF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32


4.2 Atribut Tabel IPA2002.DBF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

6.1 Nama Atribut dan Variabel Memory-nya . . . . . . . . . . . . . . . . . . . . . . . . . 45


6.2 Kode Tombol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

8.1 Atribut Tabel IPA2002.DBF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

ix
x DAFTAR TABEL
Daftar Gambar

2.1 Tampilan FoxBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9


2.2 Tampilan Posisi Dot Prompt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Perintah create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 Perintah use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5 Perintah append . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.6 Perintah edit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.7 Perintah browse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.8 Perintah go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.9 Tampilan Perintah list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.10 Tampilan Perintah Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.11 Tampilan Data Setelah Dihapus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.1 Rancangan Menu Sistem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4.1 Proses Program Clipper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26


4.2 Letak Program Clipper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3 Kesalahan Pengaturan Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.4 Hasil Program pkab.prg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

5.1 Hasil Program harga.prg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39


5.2 Contoh Program Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

6.1 Ilustrasi Perubahan Tampilan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48


6.2 Tampilan Perintah dbedit() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.3 Program Pemasukan Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.4 Program Penghapusan Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.5 Program Menampilkan Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.6 Program Menu Gabungan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
6.7 Perancangan Menu Latihan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

7.1 Sistem Tanpa Validasi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67


7.2 Sistem dengan Validasi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7.3 Sistem dengan Validasi Kode SMA yang Salah . . . . . . . . . . . . . . . . . . . . . 69
7.4 Sistem dengan Validasi Kode SMA yang Benar . . . . . . . . . . . . . . . . . . . . . 69
7.5 Tampilan Sebelum Tabel Kode SMA . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
7.6 Tampilan Ketika Pencarian Kode SMA . . . . . . . . . . . . . . . . . . . . . . . . . . 71
7.7 Tampilan Setelah Pencarian Kode SMA . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.8 Ilustrasi Perubahan Tampilan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

8.1 Tampilan Pemasukan Data Peserta PKAB . . . . . . . . . . . . . . . . . . . . . . . . 79


8.2 Tampilan Pemrosesan Data Peserta PKAB . . . . . . . . . . . . . . . . . . . . . . . 81

9.1 Tampilan Perintah dbedit() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

10.1 Tampilan Logo Pembuka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

xi
DAFTAR GAMBAR 1

10.2 Tampilan Menu Gabungan Program . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

11.1 Error Membuka File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95


11.2 Tampilan Pemasukan Data Peserta PKAB . . . . . . . . . . . . . . . . . . . . . . . . 98
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. Clip-
per 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 keun-
tungan 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 sis-
tem 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 disam-
paikan 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 diman-
faatkan 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 meru-
pakan 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 penger-
tian 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 beber-
apa pertimbangan, akan digunakan mfoxplus.exe. Perlu diperhatikan bahwa mfoxplus.ini
bermasalah ketika dijalankan pada sistem Operasi Windows XP. Oleh karena itu, pada Win-
dows 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), Mi-
crosoft 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 perintah-
perintah 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 kesala-
hannya (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 (diek-
sekusi), 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 pemro-
gram 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 men-
jalankan 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 Field Name Type Width Dec


1 KODE Character 6
2 KETERANGAN Character 37

Tabel 2.1: Atribut Tabel PS.DBF


8 BAB 2. BASIS DATA DENGAN CLIPPER

Field Field Name Type Width Dec


1 NO PKAB Character 5
2 RESI Character 1
3 PILIHAN 1 Character 6
4 PILIHAN 2 Character 6
5 NAMA SISWA Character 30
6 NO INDUK Character 10
7 JURUSAN Character 1
8 KODE SMA Character 8
9 NAMA SMA Character 35
10 KELAMIN Character 1

Tabel 2.2: Atribut Tabel IPA2002.DBF

Field Field Name Type Width Dec


1 KODE SMA Character 8
2 NEGE SMA Character 1
3 NAMA SMA Character 35
5 JALAN Character 35
6 KOTA Character 25

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<C:>
Multi-User FoxBASE+ 2.00 (c) 1987 Fox Software
Enter a FoxBASE+ command.

Gambar 2.1: Tampilan FoxBase

.
Command Line<C:>
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 berpindah-
pindah record, bisa menggunakan tombol panah, pg-up, pg-dn. Untuk pindah ke samp-
ing, 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 Line<C:>IPA2002 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) use ipa2002
(b) list
(c) list NO PKAB, NAMA SISWA, PILIHAN 1
(d) 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 11547 TANTRI RAHMAWATI 201647


1591 11599 HENI MARLENA 201647
1641 11650 NADRA 201647
1642 11651 MELATI CENDRA KASIH S 201647
1643 11652 ISRUNA HADIANI SIREGAR 201647
1656 11665 ALEX SOELISTYO 201647
1701 11710 SITA YULIANTARI 201647
1729 11738 MERRY ANGGRAENI 201647
1762 11771 DEWI AMARTHANI 201647
1764 11773 ROHANNA DUMA SARI S. 201647
1774 11783 INDAH WAHYUNI 201647
1802 11811 LINDRA GULTOM 201647
1813 11822 NURHASANAH PITRI HRP 201647
1825 11835 RAHMA NOVIYANI 201647
1830 11840 WINDA DERITA SINURAT 201647
1836 11846 OLIVIA SRI FEBRIANTY 201647
1905 11915 IKLILLAH HAYATI 201647
2088 11541 TUTI SURYATUL AZMI 201647
3293 10321 DWINA OKTAVIANI 201647
3305 11099 APRI YULIANI 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) use ipa2002
(b) list nama siswa,skor
(c) index on -SKOR to hasil
(d) list nama siswa,skor
4. Tampilan : sebelum dan setelah di-index
2.4. MANAJEMEN BASIS DATA 15

3305 APRI YULIANI 813.370


3306 DEVITA ACHDALIA 734.460
3307 WIANA PUSPITASARI 767.220
3308 RESY APRILYA 803.070
3309 DEWI SETIATI 843.480
3310 NURMA YULITA 793.460
3311 NOFRINACHAN FACHRI 795.570
3312 FAFIAN 0.000
3313 DENI AWAL SETIAWAN 706.490
3314 YUNITA BUDIARTI 781.500
3315 NANDYA KARTIKA PUTRI 787.660
3316 YULIENI 666.070
3317 EKO HERWINANDA 777.300
3318 MUSPIKA WATNA 795.070
3319 SANDRA RUSDIANA 747.310
3320 ROY KARDO RAYMUN SITUMORANG 754.910
3321 ROZI DEFRIO 786.000
3322 IDA RETNO NINGSIH 781.890
3323 NURLAILA 852.870
3324 DEDI PRAPAT 778.090

3139 HENDI EKA SETIAWAN 896.210


9 AMIRANI ZAIBUN 897.060
1875 MUHAMMAD DAVID 897.660
3304 IIN NOVIANI 899.010
3180 WAHYUNI RAJA GUK-GUK 899.110
728 PANCA RAHAYU PRASETYANINGSIH 899.550
143 LISA YUNITA 900.190
571 YENI ANGGRIANA 901.140
1943 VERDINA DEKAWATI 902.590
1921 LISA KARTIKA DEWI 904.630
181 RIKI AFRIANDA 905.000
1904 MAYATIKA 906.800
182 DINA SANTI LESTARI 907.140
183 NELDA ARIANI 908.650
695 ISMONO 908.750
722 DIPHO MUHARDIAN 911.410
265 SATIMAH MURNI 913.310
180 FAJRI SYAMSUL 914.530
2868 FISSA NURJANAH 917.410
603 JUWITA ASTUTI 949.010

Gambar 2.10: Tampilan Perintah Index


16 BAB 2. BASIS DATA DENGAN CLIPPER

JUMLAH NO_PKAB RESI PILIHAN_1 PILIHAN_2 NAMA_SISWA


50 11046 201141 201744 ISKANDAR DINATA
70 10118 201446 203847 ISKANDAR G FAHRI
60 10860 201543 202047 MESY SEPRIDAWATI
78 10441 201647 200845 MUHLISIN
37 10669 201744 200845 INDRA HANAFI
90 10189 201841 202144 ZAKI TANTOWI
162 11047 201945 201446 EKO WAHYUDI
146 11311 202047 204046 DENI AWAL SETIAWAN
84 11015 202144 200741 DEDI KURNIAWAN
64 21161 202241 203847 RAHMAWATI
165 11392 202345 200346 SILVIA DIAN ANGGRAENI

BROWSE <C:>TESTX Exclusive 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 mana-
jemen 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 panduan-
panduan 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 format-


ting 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 BAB 4. PROGRAM DASAR

4.2 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 seba-
gainya. 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 vari-
able) yang harus diatur. Untuk mengatur variabel lingkungan ini, harus diketahui terlebih dahulu
dimana program Clipper disimpan. Pengaturan ini dilakukan dari posisi DOS Prompt, jadi An-
da 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 lingkun-
gan 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 kom-
puter 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 Unterminated string: ’Program Studi Sistem Informasi’
1 error

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 pro-
gram 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 keteran-
gan apapun (meskipun mungkin ada kesalahan). Satu patokan saja, yaitu jika file .exe tidak di-
hasilkan, 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 per-
intah 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 BIF 354 09-25-09 7:01a


SI PRG 653 09-25-09 6:44a
SI EXE 178,460 09-25-09 7:01a
SI 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 sem-
barang 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 : dwijim@unila.ac.id’

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 dita-
mpilkan 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 say ’ d ’
@ 06,20 say ’ d iii ’
@ 07,20 say ’ d i i ’
@ 08,20 say ’ d iii ’
@ 09,20 say ’ d ’
@ 10,20 say ’ ddddd w w i ’
@ 11,20 say ’ d d w w i ’
@ 12,20 say ’ d d w w i ’
@ 13,20 say ’ d d w w i ’
@ 14,20 say ’ d d w w w i ’
@ 15,20 say ’ d d w w w i ’
@ 16,20 say ’ d d w w w i ’
@ 17,20 say ’ d d w w w w i ’
@ 18,20 say ’ dddddd w w iiii ’
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 Field Name Type Width Dec


1 KODE SMA Character 8
2 NEGE SMA Character 1
3 NAMA SMA Character 35
5 JALAN Character 35
6 KOTA Character 25

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 Field Name Type Width Dec


1 NO PKAB Character 5
2 RESI Character 1
3 PILIHAN 1 Character 6
4 PILIHAN 2 Character 6
5 NAMA SISWA Character 30
6 NO INDUK Character 10
7 JURUSAN Character 1
8 KODE SMA Character 8
9 NAMA SMA Character 35
10 KELAMIN Character 1
11 INA 1 Numeric 4 1
12 INGG 1 Numeric 4 1
13 MAT 1 Numeric 4 1
14 FIS 1 Numeric 4 1
15 KIM 1 Numeric 4 1
16 BIO 1 Numeric 4 1
17 SKOR Numeric 7 3
18 TANDA Character 10
19 PILIHAN Character 6
20 PIL LAIN Character 6
21 KET PILIH Character 1
22 TAHAP Character 1

Tabel 4.2: Atribut Tabel IPA2002.DBF


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 merasakan-
nya. 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. Perin-
tah 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 say ’Nama Anda : ’


@ 2,1 say ’Tgl. Lahir : ’
@ 1,14 get nama picture ’@!’ && huruf besar
@ 2,14 get tgl_lahir
read

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 37

5.2.2 Perintah read


1. Fungsi : mengakhiri perintah pemasukkan data yang didahului dengan perintah get

2. Sintaks : read

3. Contoh :

@ 1,1 say ’Nama Anda : ’


@ 2,1 say ’Tgl. Lahir : ’
@ 1,14 get nama picture ’@!’ && huruf besar
@ 2,14 get tgl_lahir
read

5.2.3 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 da-
ta. 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 Clip-
per. 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 prompt ’a. Menu Sarapan Pagi’


@ 08,20 prompt ’b. Menu Makan Siang ’
@ 09,20 prompt ’c. Menu Makan Malam ’
@ 10,20 prompt ’x. 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 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

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. Ni-
lai 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 men-
jalankan 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 ’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
enddo

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 41

5.4.6 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 ’a. Tulisan Sistem Informasi ’


@ 08,15 prompt ’b. Logo Dwi Sakethi ’
@ 09,15 prompt ’c. Mengitung Harga Barang ’
@ 10,15 prompt ’x. Selesai ’
* membuat menu 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 program-
program 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, gu-
nakan panah atas atau panah bawah,
kemudian tekan tombol Enter. Da-
pat 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 gabun-
gan.
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 kare-
nanya, 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 ditam-
bah nama atribut (field). Contoh : Ini perlu dilakukan karena dalam programnya nanti, kita akan

No. Field Variabel


1 NO PKAB mNO PKAB
2 RESI mRESI
3 PILIHAN 1 mPILIHAN 1
4 PILIHAN 2 mPILIHAN 2
5 NAMA SISWA mNAMA SISWA
6 NO INDUK mNO INDUK
7 JURUSAN mJURUSAN
8 KODE SMA mKODE SMA
9 NAMA SMA mNAMA SMA
10 KELAMIN 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 NO_PKAB with mNO_PKAB


replace PILIHAN_1 with mPILIHAN_1
replace PILIHAN_2 with mPILIHAN_2
replace NAMA_SISWA with mNAMA_SISWA
replace NO_INDUK with mNO_INDUK
replace JURUSAN with mJURUSAN
replace KODE_SMA with mKODE_SMA
replace KELAMIN with mKELAMIN

6.2 English Structured


Kita akan mencoba menggunakan sebuah tools yang disebut English Structured. English Struc-
tured adalah ungkapan dalam keseharian yang menunjukkan urutan proses, perhitungan, penyelek-
sian 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 47

Hapus layar
Jika pilihan sama dg. 1 jalankan program input data
Jika pilihan sama dg. 2 jalankan program hapus data
Jika pilihan sama dg. 3 jalankan program browsing data
Jika pilihan sama dg. 4 keluar dari program
Kembalikan gambar tampilan
Selesai

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
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. Bi-
asanya 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 mengem-
balikan 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. Na-
ma 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 = 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

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 disertakan-
nya 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. PERINTAH YANG DIGUNAKAN 51

Nomor Tombol Nilai Nilai inkey.ch


1 Escape 27 K ESC
2 Enter 13 K ENTER
3 F1 28 K F1
4 F2 -1 K F2
10 ... ... ...

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 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 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 me-
nunjukkan 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 53

6.3.10 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 men-
jalankan 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 57

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 ’Penghapusan 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 : ’
*menampilkan 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
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 data-
data 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 diga-
bungkan. 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 61

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"
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 field-
field 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 den-
gan 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 menggu-
nakan 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 prose-
dur 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. Perin-
tah 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 meru-
pakan karakter yang terkandung dalam karakter atau string ’12’.
Setelah kita melakukan validasi, maka hasil dari sistem tampak seperti berikut. 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.
68 BAB 7. VALIDASI INPUT DATA

Gambar 7.2: Sistem dengan Validasi

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 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 :

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 69

Gambar 7.3: Sistem dengan Validasi Kode SMA yang Salah

Gambar 7.4: Sistem dengan Validasi Kode SMA yang Benar

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 ?


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
70 BAB 7. VALIDASI INPUT DATA

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
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

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 kem-
bali 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
7.6. APA RESIKONYA ? 71

Gambar 7.5: Tampilan Sebelum Tabel Kode SMA

Gambar 7.6: Tampilan Ketika Pencarian Kode SMA

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.

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. Bi-
asanya dilakukan pada suatu proses yang disusul proses lain tapi tampilan akan dikembalikan
seperti semula.

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
72 BAB 7. VALIDASI INPUT DATA

Gambar 7.7: Tampilan Setelah Pencarian Kode SMA

Gambar 7.8: Ilustrasi Perubahan Tampilan

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.5 Perintah restore screen from


1. Fungsi : Mengembalikan tampilan ke suatu bentuk tampilan sebelumnya. Untuk bisa mengem-
balikan tampilan ini, tampilan harus direkam dulu dengan perintah save screen to.

2. Sintaks : restore screen from nama variabel


7.6. APA RESIKONYA ? 73

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. Na-
ma 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
hasil = .t.
else
@ baris,kolom say ’Kode salah ... ! ’
hasil = .f.
endif
select(select_akhir)
74 BAB 7. VALIDASI INPUT DATA

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
@09,21 get mNAMA_SISWA
read
if lastkey()#K_ESC
seek mNO_PKAB
if .not. found()
append blank
endif
7.6. APA RESIKONYA ? 75

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

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
76 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 peny-
impanan 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

77
78 BAB 8. PEMROSESAN DATA

Field Field Name Type Width Dec


1 NO PKAB Character 5
2 RESI Character 1
3 PILIHAN 1 Character 6
4 PILIHAN 2 Character 6
5 NAMA SISWA Character 30
6 NO INDUK Character 10
7 JURUSAN Character 1
8 KODE SMA Character 8
9 NAMA SMA Character 35
10 KELAMIN Character 1
11 INA 1 Numeric 4 1
12 INGG 1 Numeric 4 1
13 MAT 1 Numeric 4 1
14 FIS 1 Numeric 4 1
15 KIM 1 Numeric 4 1
16 BIO 1 Numeric 4 1
17 SKOR Numeric 7 3
18 TANDA Character 10
19 PILIHAN Character 6
20 PIL LAIN Character 6
21 KET PILIH Character 1
22 TAHAP Character 1

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 79

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
80 BAB 8. PEMROSESAN DATA

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
replace INA_1 with mINA_1
replace INGG_1 with mINGG_1
replace MAT_1 with mMAT_1
replace FIS_1 with mFIS_1
replace KIM_1 with mKIM_1
replace BIO_1 with mBIO_1
endif
enddo
close index
close data
return

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 81

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 + FIS_1 + KIM_1 + BIO_1
rata = jml_nilai/6
replace SKOR with rata
@ 09,20 say ’Nomor PKAB : ’+NO_PKAB
@ 10,20 say ’Nama Siswa : ’+NAMA_SISWA
@ 11,20 say ’Skor Akhir : ’+str(rata,6,2)
@ 12,20 say ’Sedang proses data ke : ’+str(nomor,5,0)
@ 13,20 say ’Prosentasi proses : ’+str(nomor/jml_data*100,6,2)+’ %’
dbskip()
enddo
return

Selanjutnya kita tinggal merangking peserta berdasarkan pilihan masing- masing dan skornya.
82 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 penc-
etakan. 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]

83
84 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 ! 85

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 me-
nunjukkan 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 disi-
apkan kondisi-kondisi pendahuluan. Kondisi-kondisi tersebut terlihat seperti pada perintah berikut
ini :
86 BAB 9. PENCETAKAN INFORMASI

@ 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
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 87

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
88 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 ter-
dapat 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 seba-
gaimana 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 Dec
1 LAYAR_1 Character 70
2 LAYAR_2 Character 70
3 LAYAR_3 Character 70
4 LAYAR_4 Character 70
** Total ** 281
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 su-
dah 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 DBF 529,095 12-26-02 11:14a ipa2002.dbf


SLTA DBF 127,648 09-14-02 7:58p SLTA.DBF
LAYAR DBF 934,206 12-26-02 7:05p LAYAR.DBF
PS DBF 6,760 05-21-02 7:43p PS.DBF

CETAK PRG 1,524 12-26-02 6:56p CETAK.PRG


LOGO PRG 1,126 06-14-02 2:58a LOGO.PRG
HAPUS PRG 958 11-04-02 8:47p HAPUS.PRG
LIHAT PRG 66 11-11-02 7:58p LIHAT.PRG
ENT_FUL PRG 2,806 12-26-02 10:32a ENT_FUL.PRG
PROSES PRG 607 12-26-02 11:14a PROSES.PRG
Program menu yang dibuat selengkapnya dapat dilihat pada bagian berikut. Sedangkan isi bagian-
bagian program tidak ditampilan ulang karena sama dengan program-program pada bagian se-
belumnya.
* 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 "

89
90 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 91

Gambar 10.2: Tampilan Menu Gabungan Program


92 BAB 10. INTEGRASI PROGRAM
Bagian V

Clipper Advanced

93
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

95
96 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 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
...
...
...
do case
case cetak=1
index on NAMA_SISWA to nama
count to jumlah_data
...
...
...
case cetak=2
index on PILIHAN_1+str(1000-SKOR) to skor
...
...
...
endcase
...
...
...
enddo
return
11.4. OPTIMASI INDEKS 97

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
98 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 mema-


sukkan 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 99

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
100 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 101

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
*-----------------------------------------------------------
102 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] = ROW_NUM
COLS&STR_READ[GET_NUM] = COL_NUM
VARS&STR_READ[GET_NUM] = VAR_NAME
PICS&STR_READ[GET_NUM] = PIC_STR
VALIDS&STR_READ[GET_NUM] = VALID_STR
RETURN.T.

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 103

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


104 BAB 11. OPTIMASI DAN IMPROVISASI
Bagian VI

Penutup Buku

105
Bab 12

Penutup

12.1 Harapan dan Impian

Apa-apa yang disampaikan dalam buku ini masih sangat sederhana alias apa adanya. Seba-
gai contoh, dalam suatu proses tidak dilakukan optimalisasi algoritma. Hal-hal tersebut mudah-
mudahan 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 men-
jadi 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.

107
Indeks

.dbf, 7 ascending, 14
.or., 87 ASCII, 6
#include, 87, 89 atribut, 7
LATEX, iii, 107
append from, 14 bahasa pemrograman, 5
browse, 16 basis data, 5, 7, 8
delete, 16 blinker, 6
go, 13
cetak, 87
index, 15
CETAK.PRG, 89
list, 13
clear, 87, 89
zap, 13
clear to, 87, 89
executable file, 26
Clipper, iii, 5, 6, 8, 107
Editor, 6
copy, 6
Insyaa Allah, 107
Structured English, 86 database, 45
append blank, 11 dBase, 6
append, 10 dbedit, 51, 86, 87
browse, 11 dbedit(), 59
compiler, 6 dbgotop(), 86, 87
create, 7, 8 dbskip(), 87
dot command, 8 delete, 51
download, iii desimal, 8
edit, 11 detikINET, 5
features, 107 do, 89
field, 7 do case, 86, 87, 89
multi user, 7 do while .t., 87, 89
porting, 5 DOS Command, 7
printer, 5, 88 DOS Prompt, 7
programmer, 5 Dos Prompt, 7
record, 11 dwi sakethi, iii
referential integrity, 5
single user, 7 edit.com, 6
tools, 6 else, 50
use, 8 ENT FUL.PRG, 89
error, 6, 7
AK-47, iii, 5 exe, 6
alat, 86 exit, 87, 89
Alfons Tanudjaya, 5
algoritma, 107 field, 8
Allah, iii Field Name, 7
Allah swt., iii file data, 7
analisa, 6 file obyek, 6
aplikasi, 86, 89 find, 6
append, 59 Find-File, 7
append blank, 52 Finkel, 25
append from, 86, 87 found, 49, 59

108
INDEKS 109

FoxBase, 7 mfoxplus, 7
Foxbase, 7, 8 Microsoft Word, 6
Foxplus, 6 mouse, 7
mySQL, 6
get, 36, 59
GNU Linux, 5 nomor baris, 7
Notepad, 6
hapus data, 59 Novell Netware, 5
HAPUS.PRG, 89 nyamuk, iii
if, 50 obj, 6
include, 6, 50 operator, 5
index, 87 Oracle, 5
inkey.ch, 50
input, 45 Pascal, 5
integrasi, 89 PC AT, 5
interaktif, 8 PC AT 286, 5
internet, 5 pelanggan, 89
IPA2002.DBF, 88, 89 pencari tulisan, 7
pencetakan, 85
jaringan, 5 perancangan, 6
perangkat bantu, 6
K ESC, 87, 89
perangkat lunak, 5
kebutuhan pemakai, 5
picture, 36
keluar, 8
PKAB, 6
kesalahan, 6
PostGre SQL, 6
keyboard, 36
printer, 5
kompilasi, 6
programming, 25
kualitas, 5
prompt, 59, 85, 87, 89
lastkey, 50 PROSES.PRG, 89
lastkey(), 87, 89 prow(), 87
layar, 8, 88 PS.DBF, 89
LAYAR.DBF, 88, 89
QEdit, 6
legal, 107
lib, 6 Rasulullah saw., iii
library, 6 read, 59
lidi, iii record, 52
LIHAT.PRG, 89 replace, 6
link, 6 restore screen from, 48
linking, 6 rtlink, 6
Linux, iii
LOGO.PRG, 89 save screen to, 48
say, 59, 87, 89
Made Wiryana, iii sdf, 86, 87
manajemen basis data, 7 seek, 49, 59
memory, 45 set device, 86, 87
memperbaiki, 11 set printer, 86, 87
menambah data, 10 set wrap on, 87, 89
menampilkan data, 11 sholawat, iii
menghapus data, 11 SLTA.DBF, 89
menu, 43, 87, 89
menu to, 85, 87, 89 tabel, 7
merekam, 7 tetris(), 89
merubah data, 11 TexMaker, 6
message, 62 tipe, 8
110 INDEKS

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
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

Anda mungkin juga menyukai