1. DATABASE SEKRETARIS BOW-
LING DENGAN R:BASE5000
Bab ini berisikan tiga bagian infonnasi dan pembahasan utama: 1. daftar
sampel empat relasi yang menentukan bentuk database sekretaris jika digunakan
R:base 5000; 2. contoh tentang cara kerja perintah-perintah R:base 5000 yang dapat
digunakan dengan relasi-relasi ini untuk menjawab query yang banyak; dan 3.
pembahasan yang mendalam tentang satu set modul program yang dikendalikan
dengan menu yang menjawab query kompleks dengan menggunakan perintah R:base
5000 yang terdapat pada bahasa pemrograman R:base 5000. Implementasi data ini
dikembangkan oleh IBM PCdengan memori 320 K, dua doubled sided disk drive, dan
satu monitor monochrome. Disket sistem R:base 5000 selalu berada di drive A.
Sedangkan file database dan modul program terdapat di B.
10. 1 STUDI KASUS DATABASE R:BASE 5000
Sebelum memulai pembahasan queri khusus dan berbagai modul pemro-
graman, rela-sidatabase yang sesungguhnya akan kita bahas terlebih dahulu. Data
yang diuji dalam database dikembangkan dengan asumsi yang sarna seperti pada
Bab 9. Asumsi tersebut adalah :
1. Liga bowling mempunyai enam team.
2. Masing-masing team mempunyai empat anggota
134
2. 3. Masa pertandingan hanya empat minggu
4. Data untuk keempat minggu dimasukkan dalam R:base 5000 yang standar.
5. Semua bowler bermain tiap kali perlombaan
Perubahan-perubahan yang mungkin dalam asumsi ini dibahas dalam latihan
masalah yang terdapat pada akhir bab ini.
R>list sched tnumb week lane
1 1 1
Table: schoo 2 1 2
Read Password: NO 3 1 4
Modify Password: NO 4 1 3
5 1 6
Column definitions 6 1 5
I 2 4
# Name Type Length Key 2 2 5
3 2 2
Itnumb INTEGER I value(s) yes 4 2 6
2 week INTEGER I value(s) 5 2 1
3 lane INTEGER I value(s) 6 2 3
1 3 3
Current number of rows: 24 2 3 6
(a) 3 3 .1
4 3 4
5 3 5
6 3 2
I 4 5
2 4 I
tnumb week lane
3 4 3
4 4 2
5 4 4
6 4 6
(b)
Gambar 10.1 (a) Struktur dan (b) isi relasi SCHED
R>list team tnumb tname captn
Table: team 1 AlleyCats Ann Jones
Read Password: NO 2 Inconsistents Bill Black
Modify Password: NO 3 TenPins Lisa Moore.
4 HighRollers Jill Miller
Column definitions 5 Splitters. Roy Lane
6 SandBaggers Cindy Fox
# Name Type Length Key
(b)
I tnumb INTEGER I value(s) yes
2 tname TEXT 15 characters
3 captn TEXT 15 characters
Current number of rows: 6
R>
(a)
Gambar 10.2 (a)Struktur dan (b) isi dari relasi TEAM
135
3. Garnbar 10.1 sarnpai 10.4 rnenunjukkan struktur dan data tes yang sebenarnya
untuk rnasing-rnasing relasi. Data yang disirnpan dalarn relasi-relasi ~nisarnadengan
data yang ada pada Bab 9, sehingga hasil dari dua pelaksanaan (irnplernentasi) ini
dapat dibandingkan.Narna database dalam pelaksanaan R:base 5000 adalah SDB.
Dengan rnelihatkernbali data dalam relasi BOWLER, (sepertidalarn Bab9) kita
ketahui bahwa akan muncul duplikat tentang data alarnatjalan dan nomor telpon. Hal
yang rnenarik adalah keinginan untuk menentukan bahwa telepon - > stret merupakan
FD yang benar. Kita hendaknya mengkaji kembali hal-hal yang menyebabkan FD
tidak benar, serta tidak teIjadinya pengulangan tentang data stret dan telepon seperti
pada Bagian 9.1
10.2 MENJAWAB QUERY SEKRETARIS DENGAN R:BASE
5000
Contoh-contoh pada bagian ini dimaksudkan untuk menggarnbarkan bahwa
query sederhana yang berhubungan dengan data dalam database sekretaris bowling
dapat dibuat dengan rnenggunakan perintah R:base 5000, tanpa harus rnenyisipkan
perintah tersebut ke dalam bahasa penerirna. Semua query dalam bagian ini meliputi
relasi spesifik yang terdapat dalam Gambar 10.1 sampai 10.4. Kita hendaknya
melaksanakan database dan mengisinya dengan data percobaan serta rnemeriksa
query yang tengah dibahas. Dalam banyak kasus dua atau tiga perintah secara
berturut-turut diperlukan untuk menjawab query yang nampak relatif sederhana.
Contoh-contoh berikut merupakan contoh bahwa pemakai menggunakan
tingkatan perintah R:base 5000 dengan R> prompt.
R>lislleam bname Lnumb phone Slrel slaavg
Table: learn Jeam adams 5 689-1234 10 Robin St III
Read Password: NO Slcve adams 5 689-1234 10 Robin Sl 130
Bill Black 2 689-2345 15 Bluebird Ln 149
Modify Password: NO Bonnie Black 120
2 689-2345 15 Bluebird Ln
Column definitions Bo Blow 2 689-3456 12 Meadowbrook Ln 143
Jo Blow 2 689-3456 12 Meadowbrook Ln 95
Joe Brown 3 689-4567 18 Bluebird Ln 132
# Name Type Lenglh Key Sue Brown 3 689-4567 18 Bluebird Ln 124
I bname TEXT Cindy Fox 6 689-5678 19 Cardmal St 103
15 characters yes
2 Lnumb INTEGER Randy Fox 6 689-5678 19 Cardinal St 147
I value(s) 105
8 characters Ann Jones I 689-4365 12 Finch Dr
3 phone TEXT . John Jones 143
4 stret TEXT. 20 characters I 689-4365 12 Finch Dr
INTEGER Joy Lane 5 689--6789 21 Sparrow Ct 125
5 Slavg 1 value(s)
Roy Lane 5 689--6789 21 Sparrow Ct 167
Current number of rows : 6 Jill Miller 4 689-7890 12 Robin St 108
Paul Miller 4 689-7890 12 Robin St 170
R> Lisa Moore 3 689-890 I 11 Lark Dr 110
Mike Moore 3 689-8901 11 Lark Dr 140
(a) 13 Finch Dr
Jim Smith I 689-9<)12 152
Mary Smith 1 689-9012 13 Finch Dr 115
bname Lnumb phone stret Slavg
Ruth Taylor 6 89-0123 20 Cardinal St 119
Garnbar 10. 3 Dan White 4 689-2134 16 Robin St 158
Jan While 4 689-2143 16 Robin Sl 121
(a) Struktur 6 20 Cardinal St 161
Russel Taylor 689--{) I 23
(b) Isi dari relasi BOWLER (b)
136
4. R>list scores bname week gamel game2 game3
Jeams Adams I 119 120 94
Table: scores
Steve Adams 1 112 140 138
Read Password: NO
Bill Black 1 137 155 155
Modify Password: NO Bonnie Black 1 120 125 115
Bo Blow 1 160 145 125
Column definitions
Jo Blow I 101 91 93
Jim Smith 1 160 150 146
# Name Type Length Key 110
Mary Smith 1 120 115
15 characters Ann Jones I 98 110 107
bname TEXT yes John Jones 1 145 150 134
2 week INTEGER I value(s)
INTEGER I Joe Brown 1 140 127 129
3 game I value(s)
Sue Brown I 121 128 124
4 game2 INTEGER I value(s)
INTEGER I Cindy Fox I 119 110 83
5 game2 value(s)
Randy Fox I 143 150 148
96 Russel Taylor ] 167 150 166
Current number of rows:
Ruth Taylor ] 110 125 122
Joy Lane I ]26 127 122
R>
Roy Lane I ]45 180 176
(a) Jill Miller I III 101 112
Paul Miller I 180 196 134
bname week game I game2 game3
Dan White I 156 163 154
Jan White I 130 125 108
Lisa Moore I 99 120 III
Mike MOore I 150 149 121
(b)
Gambar 10.4 (a) Struktur dan (b) isi relasi SCORES. (Hanya nilai dalam satu
minggu. Lihat Gambar 9.4 untuk mengetahui isi selama empat minggu.)
Juga diasumsikan bahwa database sekretaris bowling dibuka dengan perintah:
R> OPEN b:sdb
QUERY #1: "Daftar nama semua team dalam kelompok."
Query ini sangat mudah untuk dijawab karena dua hal: pertama, semua
informasi yang diperlukan untuk menjawab query terletak pada satu relasi; kedua,
tidak terdapat kualifikasi (klausa WHERE) yang diperlukan. Jawaban query ini dapat
diperoleh dengan perintah berikut:
R> SELECT tname FROM team
atau
R> SELECT tname +
R> FROM team
Untuk jenis kedua, perintah tunggal telah berada pada dua baris sehingga
memungkinkan untuk menggunakan karakter "+" sebagai simbol kontinuitas.
Sedangkan pelaksanaan jenis lainnya akan berpengaruh terhadap pendaftaran nama-
nama keenam team dalam liga tersebut.
QUERY #2: "Siapakah nama kapten team nomor empat?"
Penyelesaian terhadap query ini hanya sedikit lebih sukar dibandingkan Query
#1 hal ini disebabkan dalam Query #2 diperlukan klausa WHERE.
137
5. R> SELECT captn +
R> FROM team +
R> WHERE TNUMB = 4
Respon DBMS adalah =Jill Miller
QUERY #3: "Carilah nama semua pemain bowling yang mempunyai rata-rata
permulaankurangdari 100." .
Bentuk penyelesaian query ini sangat mirip dengan penyelesaian Query#2:
R> select bname +
R> FROM bowler +
R> WHERE stavg < 100
Jawabannya adalah nama tunggal: Jo Blow
QUERY #4: "Siapakah nama serta berapa nOnlor telepon semua anggota team
nomor tiga?"
Solusinya adalah
R> SELECT bname,phone +
R> FROM bowler +
R> WHERE tnumb = 3
Responsenya adalah:
I bname phone I
, Joe Brown 689-4567
Sue Brown 689-4567
Lisa Moore 689-8901
Mike Moore 689-8901
QUERY #5: "Pada jalur manakah team nomor lima bermain selama minggu ke
tiga dalam masa pertandingan tersebut?"
Pemecahan query ini menuntut klause WHERE dengan suatu set yang
menggunkan beberapa syarat:
R> SELECT lane +
R> FROM sched +
R> WHERE tnumb = 5 AND week = 3
Respon terhadap query ini adalah = 5
QUERY #6: "Cari semua nama pemain yang tinggal di Robin St."
. Olehkarenaalamatdalamdatabasedisimpandalambentukstring"21 Robin
St" maka solusi dari QUERY #6 memerlukan suatu pencarian, di dalam field stret
pada n:tasing-masingtupel yang terdapat dalam relasi BOWLER, untuk mengetahui
138
6. apakah karakter string "Robin St" telah muncul. Pencarian ini dapat dilakukan
dengan menggunakan operator CONTAINS dalam klausa WHERE. Bet>erapa
kemungkinan pemecahannya adalah
R> SELECT bname +
R> FROM bowler +
R> WHERE stret CONTAINS "Robin St"
atau
R> SELECT bname +
R> FROM bowler +
R> WHERE stret CONTAINS "Robin St"
atau
R> SET VAR subsrt TO Robin & St
R> SELECT bname +
R> FROM bowler +
R> WHERE stret CONTAINS .substr
Respon terhadap ketiga kasus di atas memberikan hasil yang sarna:
bname
Jean Adams
Steve Adams
Jill Miller
Paul Miller
Dan White
Jan White
Perbedaan antara ke tiga solusi itu meliputi cara membuat spesifikasi "Robin
St". Dalam dua solusi pertama, pemakai harus meyakinkan bahwa satu tempat yang
tepat terdapat di antara dua string "Robin" dab "S1". Beginilah cara menyimpan
alamat jalan dalam database. Dalam kasus terakhir operator "&" menyebabkan
sistem meduduki hanya satu tempat antara dua string. Satu keuntungan dari bentuk
terakhir ini adalah bahwa bentuk tersebut menekankan kondisi satu tempat bagi kita
yang mengkaji ulang solusi ini.
QUERY#7 ; "Berapa banyak tiga seri permainan yang lebih besar dari pada 550
dilakukan sampai sekarang?"
Solusi ini rumit, karena R:base 5000 hanya menunjukkan operasi aritmatik
tunggal dalam suatu ekpresi. Sebagai contoh ekspresi dari bentuk umum:
varl+var2
dapat ditempatan ke dalam bentuk legal dengan R:base 5000, sementara tidak
terdapat cara ekspresi dengan dua operator seperti:
139
7. varl + var2 +var3
dapat ditempatkan dalam satu perintah. Ramifikasi pembatasan terhadap query
khusus ini adalah bahwa satu set lokasi temporer harus dibuat dengan menyimpan
kalkulasi intennediate. Salah satu cara untuk membuat lokasi temporer ini adalah
dengan menambahkan satu kolom ke relasi yang datanya sedang dianalisis. Jika
jawaban akhir telah didapat maka kolom itu dihilangkan dari relasi. Total solusi
memerlukan urutan tatap-tahap:
R> EXPAND scores WITH total INTEGER
R> ASSIGWtotal TO gamel + game2 IN scores
R> ASSIGN total TO total + game3 IN scores
R> COMPUTE number AS COUNT total +
R> FROM scores +
R> WHERE tatal > 550
R> SHOW VAR number
R> REMOVE COLUMN total FROM scores
Perintah EXPAND akan menambah kolom barn ke ralasi SCORES, memberi
nama total kolom, sena menuliskannya sebagai integer. Dua perintah ASSIGN akan
menghitungjumlah (game 1+ game 2 + game 3) untuk tiap-tiap tupel dalam SCORES
dan menempatkan masing-masing jumlah dalam total field yang berhubungan.
Dalam posisi ini total field pada tiap-tiap tupel be:risikanjumlah tiga nilai pennainan
tunggal. Tiga baris berikutnya dalam sofusi ini adalah perintah: "COMPUTE-
FROM-WHERE". Perintah ini akan menghitung jumlah tupel dumana total nilai
lebih besar dari 550 dan menempatkan hitungan ini dalam angka variabel. Nilai ini
kemudian dicetak dengan perintah SHOW VAR. Akhimya kolom yang ditambahkan
ke relasi SCORES dihilangkan dengan perintah REMOVE COLUMN. Jawaban
akhir terhadap-query ini adalah angka = 2
Solusi yan'gJuga diajukan untuk Query #7 ini mempunyai satu solusi. Selain
solusi itu dapat menyebabkan kerugian yang serius: solusi akan mengubah struktur
dasar dari relasi SCORES dengan menambah dan kemudian menghilangkan kolom
yang baru. Banyak pemakai tidak menyukai query yang mengubah struktur relasi
dalam database, jika database telah dibuat. Mereka beralasan bahwa relasi temporer
dalam satu kolom atau lebih (atribut) hendaknya dibuat untuk menampung data
temporer selama kalkulasi berlangsung, dari pada harus membuat kolom barn dalam
salah satu relasi disain. pengan cara ini, jika selama pelaksanaan solusi terdapat
sesuatu yang hHangmaka database yang asli masih ada. Dengan posisi demikian kita
punya keuntungan namun kita hendaknya merencanakan cara memecahkan query
terakhir dengan c.arayang tidak mengubah struktur dasar relasi SCORES
140
8. QUERY #8 : "Siapakah pemimpin lawan team nomor lima selama minggu ke
tiga?"
Query ini paling tepat dijawab dengan proses dua tahap. Pertama, Query #5
dapat dipakai untuk menentukan bahwa team nomor lima ada pada jalur=5 selama
minggu ke tiga. Ini berarti bahwa lawan pada malam tersebut akan bermain padajalur
6. Dengan menggunakan informasi ini nomor team yang bermain pada jalur enam
selama minggu ke tiga dapat ditemukan dan disimpan dalam sebuah variabel,
misalnya "team".
R> SETVAR ternTO tnumbIN sched+
R> WHERE lane = 6 and week= 3
Nilai yang disimpan dalam variabel tern sekarang dapat dipakai untuk menep-
tukan nama pemimpin.
R> SET VAR ans TO captn IN team +
R> WHERE tnumb = .tem
R> SHOW VAR ans
Jawabannya adalah = Bill Black
QUERY #9: "Buat daftar nama semua anggota liga bowling yang bukan anggota
Sand Baggers".
Solusi ini, seperti solusi yang terakhir, menuntut adanya daftar informasi yang
diperoleh dari satu relasi ke relasi ke dua untuk memperoleh jawaban yang benar.
Dalam contoh ini operator aljabar relasional JOIN akan digunakan.
R> PROJECTtempr FROM team USING tnumb +
R> WHERE tname <> SandBaggers
R> RENAME COLUMN tnumb TO ttnumb IN tempr
R> JOIN tempr USING ttnJlmb +
R> WITH bowler USING tnumb +
R> FORMING result
R> SELECT bname +
R> FROM result
R> REMOVE result
R> REMOVE tempr
Keluaran ini akan berupa daftar dua puluh nama. Solusi terakhir adalah sebagai
berikut: (1) Relasi baru disebut TEMPR adalah hasil dari relasi TEAM. TEMPR
hanya mempunyai satu kolom, tnum. TEMPR memuat nomor team dari semua team
kecuali Sand Baggers. (2) Hanya kolom TEMPR diberi nama kembali ke ttnumb,
sehingga akan berbeda dengan kolom nomor team dalam relasi BOWLER. Selama
operasi JOIN, R:base 5000 menghendaki kolom-kolom yang sedang digabungkan/
joined dengan nomor-nomor yang berbeda. (3) TEMPR dan digabungkan/JOIN
untuk membentuk relasi ke tiga, RESULT. Kolom bname dalam RESULT memuat
141
9. nama-nama anggota liga yang dikehendaki. (4) Perintah SELECT menunjukkan
solusipada query tersebut. (5) Dua relasi temporer, RESULT dan TEMPR dihi-
langkan dari database.
QUERY # 10: "Berapa total pin yang diperoleh Bill Black pada akhir minggu ke
tiga?"
Solusi query ini dapat berupa sebagai berikut:
R> COMPUTE tot AS SUM game 1 FROM scores +
R> WHERE week <= 3 and bname = "Bill Black"
R> COMPUTE s2 AS SUM game 2 FROM scores +
R> WHERE week <= 3 AND bname = "Bill Black"
R> COMPUTE s3 AS SUM game 3 FROM scores +
R> WHERE week <= 3 AND bname = "Bill Black"
R> SET VAR tot TO .tot + .s2
R> SET VAR tot TO .tot + .s3
R> SHOW VAR tot
Keluaran akhir di sini adalah tot = 1381
Dalam solusi ini, perintah COMPUTE pertama menambah semua nilai game1
Bill Black pada tiga minggu pertama, dan menyimpanjumlah tersebutdalam variabel
tot. Dua perintah COMPUTE berikutnya akan mengulangi proses untuk permainan
2 dan permainan 3,dengan menyimpan masing-masingjumlah dalam variabel s2 dan
s3. Perintah SET VAR akan menambahkan nilai ke tiga variabel ini bersama-sama
untuk mendapatkan hasil akhir. Perintah SHOW VAR akan menghasilkan jawaban
akhir.
QUERY # 11 : "Berapa anggota liga bowling yang telah bermain paling tidak satu
permainan .lebih 50?"
R> PROJECT tempr FROM scores USING bname+
R> WHERE game 1 > 150 OR game3 > 150
R> DELETE DUPLICATES FROM tempr
R> COMPUTE ans AS ROWS FROM tempr
R> SHOW VAR ams
R:> RMOVE tempr
Solusi terhadap query ini adalah ans= 11
Dalam solusi ini ralsi temporei-,TEMPR, di-PROJEK-kan dari relasi nilai.
TEMPR hanya mempunyai satu kolom dan bname. Terdapat satu tupel dalam relasi
ini untuk tiap tupel dalam relasi SCORES dimana terdapat paling tidak satu nilai
tunggal di atas 150. Oleh karena satu orang yang sa,madapat bermain lebih dari 150
pada malam yang berbeda, maka mungkin bahwa nama yang sarna akan muncul
beberapa kali dalam TEMPR. Perintah DELETE DUPLICATES akan menghi-
langkan semua nama duplikat dari TEMPR. Nama-nama lainnya kemudian dihitung
dengan menggunakan perintah COMPUTE untuk memperoleh jawaban terakhir.
142
10. Dalam TEMPR, mungkin terdapat adanya tupel duplikat, ini berarti bahwa
R:base 5000's PROJECf bukan merupakan operator aljabarrelasional yang sesung-
guhnya, dan TEMPR pun demikian. Seperti yang dinyatakan dalam bab sebelumnya
bahwa tak ada sistem manajemen database relasional yang didasarkan mikro kom-
puter yang semuanya relasional, dan ini harus kita pertimbangkan pada saat membuat
query. R:base 5000 lebih mendekati DBMS yang benar-bnar relasional dari pada
sebagian besar sistem manajemen yang didasarkan pada mikrokomputer.
Dalam solusi query di atas, hendaknya perlu kita perhatikan bahwa solusi ini
tidak bersifat unik. Biasanya terdapat beberapa cara untuk memperoleh solusi query.
Beberapa solusi dapat dipakai dengan kecepatan yangjauh lebih tinggi dari pada yang
lainnya, dan beberapa solusijuga mempunyai logika yangjauh lebih gampang untuk
diikuti. Cara terbaik untuk mempelajari cara menulis solusi yang baik adalah dengan
mempelajari solusi yang ditulis oleh orang lain dan kemudian kita tulis beberapa
solusi kita sendiri dengan menggunakan beberapa metode yang berbeda untuk
masing-masing masalah
10. 3 MENU UT AMA UNTUK SOL US I QUERY
TERPROGRAM
Query pada bagian 10.2 merupakan query yang ditanyakan oleh sekretaris
bowling yang khusus dan, kebanyakan, solusi query mudah dipahami dan jumlah
pernyataan R:base 5000 tidak terlalu panjang yang digunakn untuk menjawab
pertanyaan. Kita asumsikan bahwa sekretaris bowling akan memasukkan solusi
secara manual, meskipun panjang dari beberapa solusi dapat dengan mudah menim-
bulkan kesalahan dalam memasukkannya. Lebih lanjut sekretaris bowling hen-
daknya mempunyai pengetahuan yang cukup tentang teori database, dan sintak
R:base 5000 untuk menjabarkan solusi tersebut, bukan hanya sekedar menyalin.
Untuk membantu sekretaris dari kesulitan menjabarkan kembali sebuah solusi query
tiap waktu query tertcacahkan, sebuah menu yang sering digunakan query disimpan,
dan penyelesaian yang telah diprogram untuk setiap permintaan yang dilaksanakan
setiap saat untuk permintaan yang telah dipilih. Bagian berikut pada bab ini meru-
pakan kerangka yang rinci tentang menu khusus serta program yang berhubungan
dengan menu itu.
Seperti yang terlihat oleh sekretaris, menu ini disajikan dalam Gambar 10.5.
Sedangkan modul program yang menguraikan menu, menerima pilihan menu, dan
kemudian mentransfer kontrol ke modul program terdapatpada Gambar 10.6:modul
ini dinamakan secdb.app.
143
11. MONDAY NIGHT IRREGULAR BOWLING LEAGUE QUERY MENU
(1) DISPLAY STATISTICS FOR AN INDIVIDUAL BOWLER
(2) DISPLAY TOTAL PINS FOR EACH TEAM
(3) DISPLAY TEAM STANDING
(4) DISPLAY SCHEDULE FOR A GIVEN WEEK
(5) GENERATE AN END-OF-SEASON REPORT
(6) RETURN TO RBASE 5000
Gambar 10.5 Menu utama yang dijabarkan oleh secdb.apx.
.COMMAND
SECDB
SETMESSAGE OFF
OPEN SDB
SET ERROR MESSAGE OFF
SET BAR PICKI INT
LABEL STARTAPP
NEWPAGE
CHOOSE PICK] ('J{OMsdbmain IN SECDB. APX
IF PICKI EQ I THEN
J{UNbwlrsl. com
GO TO STARTAPP
ENDIF
IF PICKI EQ 2 THEN
RUN leampns IN SECOR. APX
GOTOSTARTAPP
ENDIF
IF PICKI EQ 3 THEN
RUN teampns IN SECDB. APX
GOTO STARTAPP
ENDIF
IF PICKI EQ 4 THEN
RUN wkschdl IN SECDB. APX
GO TO STARTAPP
ENDIF
IF PICKI EQ 5 THEN
RUN eosrpt. com
GOTO STARTAPP
ENDIF
IF PICKI EQ 6 THEN
GOTO ENDAPP
ENDIF
GOTO STARTAPP
LABEL ENDAPP
CLEAR PICK I
RETURN
-MENU
sdbmain
COLUMN MONDAY NIGHT IRREGULARS BOWLING LEAGUE QUERY MENU
DISPLA Y STATISTICS FOR AN INDIVIDUAL BOWLER
DISPLA Y TOTAL I'INS FOR EACH TEAM
DISPLA Y TEAM STANDINGS
DISPLA Y SCHEDULE FOR A GIVEN WEEK
GENERATE AN END-OF-SESAON REPORT
RETURN TO RBASE 5000
Gambar 10.6 Modul program menu utama
144
12. Secdb.app dikembangkan dengan menggunakan APPLICATION EXPRESS,
paket utilitas perangkat lunak yang merupakan bagian dari R:base 5000. Untuk
menambah kecepatan, secdb.app dipadukan ke dalam modul yang mudah pela-
ksanaannya dengan nama secdb.apx. Jika R: base 5000 dibawa ke tingkat perintah
program menu ctilaksanakandengan urutan perintah sbb:
R>B:
R> RUN secdb IN secdb.apx
Jika salah satu dari 5pilihan pertama diambil, maka modul program yang ditulis
dalam bahasa pemprograman R: 5000 akan dilaksanakan. Pada gilirannya sebagian
dari modul ini akan memanggil submodullainnya. Modul program yang dipanggil ini
akan dibahas secara rinei pada bagian berikut. Pelaksanaan program yang dipakai
untuk menjabarkan keluaran yang ada pada bagian ini adalahjenis & program sumber
yang digabungkan.
10. 4 R: BASE 5000 PROGRAM MODUL BWLRST.PRG
Modul ini dipanggil oleh program menu utama pada saat pilihan menu adalah
"DISPLAY STATISTICS FOR AN INDIVIDUAL BOWLER". Pelaksanaan modul
ini mempengaruhi perhitungan dan keluaran berupa statistic untuk pemain individ-
ual. Statistik ini dapat diperoleh pada setiap minggu dalam masa perlombaan, sampai
dan meliputi minggu ke akhir dimana nilai di masukkan ke dalam database (logika
yang terdapat dalam modul ini ada pada gambar 10.7 programnya terdapat pada
gambar 10.8sedangkan keluaran khusus dari modul ini ada pada gambar 10.9)hanya
bagian logika BWRST.PRG yang perlu di tekankan adalah bagian kalkulasi ham-
batan (handicap) yang berisi dua peryataan.
SET VAR hndkp TO 200 - .bavg
SET VAR hndkp TO .hndkp X 0.75
"hndkp" Merupakan variabel yang dinyatakan sebagai I N T E G E R dan dipakai
untuk menampung hambatan yang ada sekarang untuk tiap individual "baug" juga
variabel INTEGER menampung rata-rata akhir pemain. Kedua peryataan tersebut
akan memecahkan persamaan tersebut dimana TRUNC merupakan fungsi trunkasi
(truncation)
handicap =TRUNC«200-currencaverage)*0.75)
145
13. 1. Determine the last week for which scores have been entered into the
SCORES relation. Store the week as "max_wk".
2. Input the weekof the season for which statistics are desired as "wk", and
check the value for validity.
3. Input the name ofthe bowler for which statistics are desired as "name,"
and check the name for validity.
4. Using the SET POINTER feature of R:base 5000, identify aUtuples in
the SCORES relation that will be used in the calculations. (The
condition is that bname =name AND week <=wk.).
5. For each tuple in the group selected via SET PqITER :
(a) Check each individual game score to find the highest game
bowled by this bowler as "hiJame."
(b) Check the sum of ech three game series to find the highest series
score as "hi_series."
(c) Add aU the idividual game scores to find the total number of
scratch pinss as "tot-pins."
6. Calculate this bowler's current average and handicap as "bavg" and
"hndkp," respectively.
7. Output the results.
Gambar 10.7 Logik urnurn dalam bwlrst.prg
Meskipun hndhp merupakan variabel integer perkalian hndkp dengan 0.75
mempengaruhi nilai riil. nilai riil ini kemudian bisa namakan sebagai hndkp variabel
integer R: base 5000 secara otomatis akan melaksanakan trukasi (memperpendek
denagn mengurangi ujung-ujungnya) angkariil yang ditunjuk sebagai variabel yang
dinyatakan sebagai integer Jika nilai riil ini dikumpulkan untuk mendapatkan
handicap/hambatan, sttistik individual maupun team akan sangat dipengaruhi.
10. 5 R: BASE 5000 MODUL PROGRAM TEAMPNS.PRG
Menu ini dipanggil ketika pilihan menu utamanya adalah " DISPLAYTOTAL
PINS FOR EACH TEAM" total angka pin yang dihitung adalah pin "scatch" (tanpa
hambatan) yaitu hitungan pin tanpa mempertimbangkan hambatan. Penambahan
modul ini ditujukan untuk mencakup total pin ynag dihitung bersama hambatan.
Penambahan modul ini dikembangkan denagn asumsi bahwa jumlah pin yang
dikehendaki rneliputi minggu terakhir nilai-nialai perlombaan di masukkan dalam
database pada bagian ini.
146
14. * (Procedure name is : "bwlrst. prg"
* (Written by Glenn A. Jackson
* (Oakland University, Rochester, MI 48063
* (
* (This procedure calculates and outputs the following
* (statistics on an individual bowler: High game, High series,
* (Total Pins and Handicap. all statistics include all games
* (bowled to date.
* (
* (This procedure is called by : sdbmain menu.
* (This procedure calls no other modules.
* (
NEWPAGE
SET VAR hU;ame INTEGER
SET VAR hi_ser INTEGER
SET VAR bavg INTEGER
SET VAR hndkp INTEGER
SET VAR max_wk INTEGER
SET VAR temp INTEGER
SET YAR tot pins INTEGER
SET YAR name TEXT
SET YAR done TEXT
SET VAR check INTEGER
SET VAR tot3 INTEGER
SET VAR totgam INTEGER
* ( )
* (Find the last week for which scores were entered as max_wk
* ( )
COMPUTE max_wk AS MAX week FROM scores
* ( )
* Onput the week for which statistics are desired as wk
* ( )
SET VAR done TO "false"
WHILE done EXISTS THEN
WRITE "IF YOU WISH THE STATISTICS FOR THE SEASON TO DATE" AT 7.15
WRITE "ENTER" AT 8.15
SHOWVARmax_wk=l AT8.21
WRITE ", THE LAST WEEK FOR WHICH DATA WERE ENTERED" AT 8.23
FILLINwk USING"OTHERWISE,
ENTERTHEWEEKDESIRED: " AT9.15
IF wk GE 1 AND wk LE. max_wk THEN
BREAJ
ENDIF
WRITE 'THE WEEK INPUT IS INYALlD" AT 15. 15
WRITE "Press any key to continue AT 17.15: PAUSE
NEWPAG~
ENDWHILE
* ( )
* (Enter the bowler's name and make certain it is valid
* ( )
NEWPAGE
WHILE done EXISTS THEN
FILLIN name USING "ENTER THE BOWLER'S NAME, e. g. Joe Jones. " AT 10. 15
COMPUTE check AS COUNT bname FROM bowler WHERE bname = .name
IF check GT 0 THEN
Gambar 10. 8 (a) Bagian pertama dari modul program bwlrst. prg.
147
15. BREAK
ENDIF
WRITE" THE NAME ENTERED IS NOT IN THE DATABASE" AT 12 15
WRITE "Press any key... then enter anotname." AT 14 15; PAUSE
NEWPAGE
ENDWHILE
NEWPAGE
. ( )
· (Calculate this bowler's statistics)
. ( )
SET VAR hi...,game 0 TO
SET VAR hUer TO 0
SET VAR 10tpins TOO
SET POINTER # 1 errl FOR scores WHERE bname EQ. name AND week LE. wk
WHILE errl EQ 0 THEN
SET VAR temp TO gamel IN #1
IF temp GT. hi...,game THEN
SET VAR hi...,gameTO. temp.
ENDIF
SET VAR 1013TO .temp
SET VAR temp TO game2 IN #1
IF temp GT .hi...,gameTHEN
SET VAR hi...,gameTO . temp
ENDIF
SET VAR tot3 TO . temp + . to13
SET VAR temp TO game3 IN #1
IF temp GT .hi...,gameTHEN .
SET VAR hi...,gameTO .temp
ENDIF
SET VAR 1013TO .temp + .to13
IF to13 GT .hi_ser THEN
SET VAR hi_ser TO . 1013
ENDIF
SET VAR 10tpins TO .totpins + . to13
NEXT #1 errl
ENDWHILE
. ( )
· (Calculate this bowler's handicap)
. ( )
SET VAR 10tgam TO . wk x 3
SET VAR bavg TO .1otpinsI .1otgam
IF bavg LT 200 THEN
SET VAR hndkp TO 200 - .bavg
SET VAR hndkp TO .hndkp x O.75
ELSE
SET VAR hndkp TO 0
ENDIF
. ( )
· (OUTPUTTHERESULTS)
. ( ) .
WRITE "STATISTICS FOR" AT 7 20
SHOW VAR name =15 AT7 36
WRITE "THRU WEEK" AT 7 51
SHOW VAR wk=1 AT 7 61
WRITE' +++++ I I I I I I I +t++++ I I I I I I I I I I I I I I +" AT 8 20
Gambar 10. 8 (b) Bagian kedua dari modul program bwlrst. prg
148
16. WRITE "AVERAGE PINS PER GAME:" AT 10 20
SHOW BAR bavg = 3 AT 1043
WRITE 'TOTALPINS- WITHOUT HANDICAP: " AT 12 20
SHOW VAR totpins =4 AT 12 50 .
WRITE "HIGH GAME SCORE TO DATE: " AT 14 20
SHOW BAR hi-&ame=3 AT 14 45
WRITE "HIGH SERIES TO DATE: " AT 16 20
SHOW VAR hi_ser=3 AT 16 41
WRITE "CURRENT HANDICAP: " AT 18 20
SHOW VAR hndkp=2 AT 1838
WRITE "Press any key to continue.. " AT 23 20: PAUSE
CLEAR ALL VAR
RETURN
Gambar 10.8 (c) Bagian terakhir dari mOOulprogram bwlrst.prg
STATISTICS FOR bill Black THRU WEEK 3
++++1111111++++++11 I 1 1 1 1 1 1 1 1 1 I 1++++++
AVERAGE PINS PER GAME: 153
TOTAL PINS - WITHOUT HANDICAP: 1381
HIGH GAME SCORE TO DATE: 165
HIGH SERIES TO DATE: 483
CURRENT HANDICAP : 35
Gambar 10.9 Macam output dari bwlrst.prg
Sebuah keluaran sampel di pelaksanaan mOOulprogram ini terdapat pada
gambar 10.10 logika umum yang terdapat dalam mOOulini ada dalam gambar 10.11
dan kOOenilai untuk mOOulini terdapat dalam gamabar 10.12.
TOTAL SCRATCH PINS THROUGH WEEK 4
TEAM NO. TEAM NAME TOTAL PINS.
1 alleyCats 6257
2 Inconsistents 6172
3 TenPins 6147
4 HinghRollers 6798
5 Slitters 6580
6 SandBaggers 6534
Gambar 10.10 Tipe output dari pelaksanaan teampns.prg
149
17. 1. Determine the last week for which scores have been entered into the
SCORES relation. Save the week value as "max_wk."
2. Print out the header for the table of data that wiil be output later.
3. Use an outer WHILE-THEN loop to find the variable "ctr" as loop as a
1000variable, to cycle through each of the six teams in the league. for
each team, use SET POINTER #1 to locate all the vowlers on that team :
a) Use an inner WHILE - THEN loop to find the total number of pinds
for one team. Save the total as "totpins."
b) Check the TEAM relation to find the name of the team for this team
number. Save the team name as "name_I."
c) Output the data on this team. adjusting the line count on tohe output
accordingly.
Gambar 10.11 Logik umum dari teampns.prg
Jika logika lama versi R: base 5000 teampns.prg di bandingkan dengan versi
dBase IIIdari modul yang sarna (bag .tb 9.4), maka dapat kita ketahui bahwa dalam
dBase III dipakai operasi Join untuk mengumpulkan semua nilai pemain dan satu
team ke dalam bagian informasi umum. Informasi ini disimpan dalam relasi temporer
yaitu TEMP2. Meskipun JOIN dapat di pakai dengan cara yang sarna dalam R:base
5000, namun dari sudut pemprograman, akan lebih sederhana dalam R:base 5000
untuk mengidenfikasikan semua anggota dalam suatu team, dan kemudian jumlah
nilai permainan untuk team ini digunakan loop WHILE - THEN. Belum ada usaha
untuk membandingkan mana yang lebih cepat antara SET POINTER dengan JOIN
dalam R: base 5000.
10. 6 MODUL PROGRAM R: BASE 5000 TEAM STD. PRG
Modul program ini dipanggil oleh program menu utama ketika pilihan menu
"DISPLAY SCHEDULEFOR A GIVEN WEEK." Modul ini akan kepengaruh
terhadap keluaran tabel yang memberikan nama-nama team dan jalur-jalur yang
ditentukan pada minggu masa perlombaan. Modul ini memalukan informasi yang
minggu keberapajadwal dimulai keluaran yang khas dipelaksanaa modul ini terdapat
dalam gambar 10.13, logika umumnya yang terdapat dalam modul ini ada pada
gambar 10.14, dan modul itu sendiri terdapat dalam gambar 10.15.
Pusat logika dalam WKSCHDL.PRG. Dilaksakan dengan perintah set pointer
yang diikuti oleh WHILE-THEN untuk menggantikan operasi JOIN yang mungkin.
Penggunaan JOIN dalam algoritma di bicarakan dalam peablema di akhir bab ini.
150
18. * (Procedure name is : "teampns"
* (Written by Glenn A, Jackson
* (Oakland University, Rochester, MI 48063
* (
· (This procedure print out the total number of "scratch"
· (pins for each team for the season to date,
. (
.* (This procedure is called by : sdbmain menu.
* (This procedure calls :
* (
* (No parameters are passed into or out of this module
NEWPAGE
SET V AR max_ wk INTEGER
COMPUTE max_wk AS MAC week FROM scores
* (Print out the header for the output data
WRITE "TOTAL SCRATCH PINS TIlROUGH WEEK" AT 5 20
SHOWVARmax_wk=1 AT 5 53
WRITE "++++++++++++++++++++++++++++++++" AT 6 20
WRITE "TEAM NO. TEAM NAME TOTAL PINS" AT 7 20
WRITE "__.nnnnn. 00 00.000000. 00 00000000. AT 8 20
* (
.
· (Calculate and print out the total pins for each team.
(
SET VAR ctr INTEGER
SET VAR Iyne INTEGER
SET VAR gsuml INTEGER
SET VAR gsum 2 INTEGER
SET VAR gsum3 INTEGER
SET VAR name_t TEXT
SET VAR name_b TEXT
SET VAR totpins INTEGER
SET VAR erl INTEGER
SET VAR ctr TO I
* ( )
· (Outer loop picks the team
* ( )
WHILE ctr LE 6 THEN
SET POINTER #1 errl FOR bowler WHERE tnumb EQ. ctr
* ( )
* (Inner loop picks the bowlers on a team
* ( )
SET BAR totpins TO 0
WHILE err I EQ 0 TIlEN
SET BAR name_b TO bname IN #1
COMPUTE gsum AS SUM gameI FORM scores WHERE bname .name_b
COMPUTE gsum AS SUM game2 FORM scores WHERE bname .name_b
COMPUTE gsum AS SUM game3 FORM scores WHERE bname ,name_b
SET VAR totpins TO ,totpins + ,gsuml
SET VAR totpins TO .totpins + ,gsum2
SET VAR totpins TO .totpins + ,gsum3
. (
)
ENDWHILE
SET VAR name_t TO tname IN team WHERE tnumb = ,ctr
SET V AR Iyne TO ,ctr +8
SHOW V AR ctr =. I AT .lyne 23
SHOW V AR name_t = 15 AT ,Iyne 30
SHOW V AR totpins = 5 AT .lyne 49
SET V AR ctr TO ,ctr + I
ENDWHILE
WRITE "Press any key to continue .,," AT 20 20; PAUSE
CLEAR ALL V AR
REruRN
Gambar 10. 12 Modul program teampns. prg
151
19. THE SCHEDULE FOR WEEK NUMBER 3
TEAM LANE NUMBER
AlIeyCats 3
Inconsistents 6
TenPins 1
HighRollers 4
Splitters 5
SandBaggers 2
Gambar 10.13 Tipe output dari modul program wkschd1.prg
1. Detennine the last week of the bowling season. Assign'this value to
variable "max_wk".
2. Input the week of the season for which the schedule is desired as
"in_val", and check to make cenain that the value is valid.
3. Output the header for the table of values that is to follow.
4. Use a SET POINTER command in the SCHED relation to identify all of
the tuples that have week values equal to the value in in_val.
5. Use a WHILE -THEN loop to cycle through all of the teams that are in
the set of teams linked together via the SET POINTER coommand in 4.
Output the team name (tname) found in the TEAM relation. and the lane
number (lane) found in the CHED relaition for each team.
Gambar 10.14 Logik Umum untuk modul program wkschd1.prg
152
20. COMMAND
wkschdl
· (Procedure name is : "wkschdl" )
· (Written by Glenn A. Jackson )
· (Oakland University, Rochester, MI 48063 )
. ( )
· (This procedure prints out the schedule for a given week )
· (The week for which the schedule is desired is input from )
· (the terminal. )
.( )
· (This procedure is catled by : sdbmain menu. )
· (Thisprocedurecalls :delay )
.( )
NEWP AGE
· (Find the last week of the season as max_wk
SET VAR done TEXT
SET VAR done TO "false".
SET VAR in_val INTEGER
WHILE done EXISTS THEN
WRITE "ENTER WEEK FPR SCHEDULE IS DESIRED" AT 710
WRITE "ONLYVALUESBETWEEN1AND " AT 8 10
SHOE VAR max_wk = 1 AT 836
FILLIN in_val USING "ALLOWED" AT 8 38
IF in_val LE .max_wk AND in_val GE I THEN
BREAK
ENDIF
WRITE'THE WEEKINPUTIS INVAUD " AT 5 10
WRITE "Press any key to continue" AT 16 10; PAUSE
NEWPAGE
ENDWHILE
.(
· (Output header
NEWPAGE
WRITE 'THE SCHEDULE FOR WEEK NUMBER "AT 5 10
SHOW VAR in_val = I AT 546
WRITE" ++++++++++++++++ IIIIIIIIIIIIII " AT 6 10
WRITE" TEAM LANE NUMBER " AT 7 10
WRITE" mum um___mmmm_ " AT 8 10
· (Determine and output the schedule
SET POINTER #1 errl FOR sched WHERE week EQ .in_val
SET VAR in INTEGER
SET VAR lyne INTEGER
SET VAR Iyne TO 9
WHILE errl EQTHEN
SET VAR numb TO tnumb IN #1
SET VAR name TO tname In team WHERE tnumb EQ .numt-
SET VAR in TO lane IN #1
SHOWVARname=15 AT .lyne17
SHOW VAR In =1 AT .lyne41
SET VAR Iyne TO . Iyne + 1
NEXT #1 errl
ENDWHILE
WRITE "Press and key to continue... " AT 20 17; PAUSE
CLEAR ALL VAR
RETURN .
Gambar 10. 15 Modul program wkschdl.prg
153
21. 10. 7 MODUL PROGRAM R:5000 EOSRPT.PRG
MW~Ini~iFftn9BiI minW
i Vlih Wftmft
Vftift~ftft
vilibftnmin~ftQNfth
"QijtmR-
ATEANEND-OF-SEASON REPORT".Pelaksanaanmodulini akanmempengar-
uhi dalam penentuandan keluarantetangnamapemainyang (1) mempunyainilai
perlombaantunggaltertinggi(2) mempunyainilai seritigapemaintertinggiselama
naikpertandingan(3)mengakhirimasperlombaandenganrata-ratatiapperlombaan
yangtertinggi.Keluaranmoduliniuntukdatadalamdatabasesampelterdapatdalam
gambar 10.16 logika umum untuk modul ini terdapat dalam gambar 10.17 dan
sedangkanmodulnyaada dalamgambar10.18
10. 8 M~PROG R: BASE 5000 TEAMSTD.PRG
Modul program ini dipanggil oleh program menu utama pada saat pilihan
menu adalah "DISPLAY TEAM STANDINGS" Pelaksanaan program ini akan
menentukan kalkulasi dan tampilan record menangkah bagi semua team dalam liga
tersebut. Selama satu minggu dalam masa perlombaan. lalah angka pins yang tanpa
hambatan untuk tiap-tiap team selam minggu tersebut juga merupakan keluaran.
Modul dimulai dengan menunjukan informasi minggu kapan. Untuk mana posisi
diharapkan setelah yakin bahwa minggu yang dikenhendaki benar, program mualai
menhitung posisi dan mencetak hasil dalam bentuk tabular gambar 10.19 menunjuk-
kan keluaran di program ini sedangkan gambar 10.20 menunjukkan logika umum
model, sedangkan kode nilai terdapat pada gambar 10.21.
END-OF-SEASON REPORT
IDGHEST SINGLE GAME SCORE OF 202
WAS BOWLED BY THE FOLLOWING BOWLER(S)
Roy Lane
Russel Taylor
Paul Miller
IDGHEST THREE-GAME SERIES SCORE OF 559
WAS BOWED BY THE FOLLOWING BOWLER(S)
Roy Lane
Riussel Taylor
Paul Miller
HIGHEST AVERAGE GAME SCORE OF 179
WAS BOWLED BY THE FOLLOWING BOWLER(S)
Paul Miller.
Gambar 10.16 Output dari eosrpt.prg untuk contoh database
154
22. 1. Detennine the laSl week ofthe season from the SCHED relation. Save this value as "max_wk."
2. Detennine the highest single game score for the season. Save this score as "best~am."
3. Output the high game score infonnation :
a) PROJECf a nuary temporary relation TEMPR from SCORES that holds the names (bname) of all bowlers
who have bowled at least one game score equal to the value in best~am.
b) Print out the end-of-season repon header followed by the names of all those people who bowled the
highest single game score.
c) REMOVE the temporary relation TEMPR from the database.
4. Determine the highest three-game series score as "best_ser" as follows :
a) EXPAND the SCORES relation with the addition of a new column named total.
b) Fill the total field value in each tuple with the sum gamel~ame2+game3 fonn that tuple
c) Find the best_ser value using the COMPUTE - MAX command on the total field in SCORES.
d) PROJECf a temporary relation TEMPR from SCORES that holds the names of all bowlers with a
three-game score of bescser.
e) Output the infonnation on best series.
S. Detennine the season's best average game score as "best_avg" as follows:
a) PROJECf a temporary relation, TEMP2, from the BOWLER relation thatholds each bowler's name
(bname) and staning average (stavg)
b) OIange the column name stavg to avg in TEMP2.
c) Calculate the average game score for each bowler and fill in the avg field value in TEMP2 with this value.
d) Compute the value for best_avg using a COMPUTE-MAX command and output the final results.
e) Output the infonnation on best average.
6. REMOVE COLUMN total from SCORES.
7. REMOVE TEMP2 from the database.
Gambar 10.17 Logik umum untuk eospt.prg
155
23. · (Procedure name is : "eosprt. prg" )
· (Written by Glenn A. Jackson )
· (Oakland University, Rochester, MI 48063 )
. ( )
.
·
·
(fhis procedure calculates and print out the end-of-season report
(
(fhis procedure is called by: sdbmain menu.
)
)
)
· (fhis procedure calls no other modules. )
. ( )
NEWP AGE
SET MESSAGE OFF
SET ERROR MESSAGE OFF
. (
· (Find the last week of the season as max_wk
SET VAR max_wk INTEGER
COMPUTE max_wk AS MAX week FROM schoo
· (Initialize variables required for the raport
SET VAR besuer INTEGER
SET VAR best_avg INTEGER
SET VAR best~am INTEGER
SET VAR name TEXT
SET VAR hgl INTEGER
SET VAR hg2 INTEGER
SET VAR hg3 INTEGER
SET VAR linect INTEGER
. ( )
· (Findseason's high game score as best~am.
. ( )
COMPUTE hg} AS MAX game} J;'ROMscores
COMPUTE hg2 AS MAX game2 FROM scores
COMPUTE hg3 AS MAX game3 FROM scores
IF hgl > = .hg2 THEN
SET VAR best~am TO .hgI
ELSE
SET VAR best~am TO .hg2
ENDIF
IF hg3 > .best~am THEN
SET VAR best~am TO .best~am + .hg3
ENDIF
. ( )
· (Place the names of all those who got bcst~am in TEMPR
. ( )
PROJECTtemprFROMscoresUSINGbname+ .
WHERE game} = .best~am OR game2 = .best~am OR game3 =.best~am
DELETE DUPLICATES FROM tempr
. ( )
· (Print otu the end~f-season report header and high game data
. ( )
WRITE "END-OF-SEASON REPORT" AT} 26
WRITE "+ I I I I I I I I I I I I I I+++++++" AT 2 26
WRITE "HIGHEST SINGLE GAME SCORE OF" AT 4 20
SHOW VAR best-8am = 3 AT 4 49
WRITE "WAS BOWLED BY THE FOLLOWING BOWLER(S)" AT 5 20
SET VAR linect TO 6
Gambar 10. 18 (a) Bagian pertama dari modul program eosrpt. prg.
156
24. SET POINTER #1 errlforb tenpr
WHILE errl =0 THEN
SET VAR name TO bname in #1
SHOW VAR name= 15 At .Iinect +1
SETVAR linect TO .Iinect +1
NECf #1 errl
ENDWHILE
REMOVE Tempr
*()
* (Find the season's high three game series score as best _ser)
* ( and output the results )
*()
EXPANDscores WITH total INTEGER
ASSIGN total TO gamel + ganle2 IN scores
ASSIGN total TO total + game3 IN scores
COMPUTE best _ser AS MAX total FROM scores
PROJECf tempr FROM scores USING bnanle +
WHEREtotal =,best _sar
DELETE DUPLCATES FROM lcmpr'
SET VAR linect TO .Iinecl + 2
WRITE"HIGHEST THREE-GAME SERIES SCORE OF" AT linCCl 0 2
SHOW VAR best_ser=3 AT .Iinect + 1
WRITE "WAWSA BOWLED BY THE FOLLOWING BOWLER (S):" AT .Iinect 20
SET VAR linect TO .Iineect + I
SET POINTER #1 errl FOR tempr
WHILE errl = oTHEN
SET VAR name =TO bname IN#1
SHOW VAR name =15 AT .Iinect 30
SET VAR linect TO . 1inect+ 1
NEXT #1 errl
ENDWHILE
REMOVE tempr
*0
* (Find the highestseason's average as best_avg)
* ( and output the result)
*()
SET VAR tgames INTEGER
SET VAR totpins INTEGER
SET VAR tgames INTEGER
SET VAR errl INTEGER
SET VAR ERR2 INTEGER
PROJECf temp2 FROM bowler USING bname stavg
CHANGE COLUMN stavg IN temp2 TOavg
SET VAR tgames TO .max_wk x 3
SET POINTER#1 err1 FOR temp2
WHILE err 1 = 0 THEN
SET VAR name TObname IN31
COMPUTE totpins AS SUM total FROM scores +
WHERE bname = .name
ASSIGN avg TO .totpins I .tgame INtemp2 WHERWE bname = .name
NEXT #1 errl
ENDWHILE
COMPUTE best_avg AS MAX avg FROM temp2
*()
Gambar 10. 18 (b) Bagian kedua daTimodul program eosrpt.prg
157
25. SET VAR linect TO .linect + 2
WRITE "HIGHEST AVERAGE GAME SCORE OF" AT .1incct 20
SHOW VAR best_avg = 3 AT .1inect 50
SET VAR linect TO .linect + 1
WRITE "WAS BOWLED BY THE FOLLOWING BOWLER(S)" AT .linect 20
SET VAR linect TO .linect + 1
SET POINTER #2 crr2 FOR temp2 +
WHEREavg = .best_avg
WHILE err2 = 0 THEN
SET VAR name TO bname IN #2
SHOW VAR name = 15 AT .lincct 30
SET VAR Iinect TO . linect + 1
NEXT #2 eI1"2
ENDWHILE
REMOVE temp2
REMOVE COLUMN total FROM scores
SET MESSAGE ON
WRITE "Press any key to continue ..." AT 21 20;PAUSE
Gambar 10. 18 (c) Bagian akhir dari modul program eosrpt.prg
Dalam pelaksanaan logika teamstd.prg lebih rumit dari pada modul-modul
lainnya oleh karena keputusan desain dalam Bab 5 maka jumlah menang, kalah dan
total pin untuk masing-masing team pada akhir tiap minggu tidak disimpan dalam
database. Hal ini dilakukan unruk menghindari kemungkinan adanya data yang tidak
tetapl inkonsisten dalam database. Oalam kasus ini dimana seseorang dapat men-
gubah nilai perlombaan anggota liga tanpa menghitung kembali akibatnya, akan ada
pada kemenangan, kalah total pin salah satu akibat dari keputusan disain ini adalah
jika posisi team dihitung tiap minggu, kedudukan harus dihitung kembali untuk setiap
minggu diawali dengan pertanyaan, dimulai dengan minggu pertama. Hal ini tak saja
mengakibatkan rumitnya logika dalam teamstd.prg tetapi juga secara dratis menam-
bah waktu yang diperlukan untuk menghitung hasil waktu perhitungannya untuk
menjabarkan posisi team bertambambah secara linier dengan jumlah minggu dalam
masa penandingan dimana posisi ini dikehendaki yaitu akan membutuhkan waktu
kurang lebih 3 minggu lamanya untuk menghitung posisi minggu ketiga seperti
halnya pada minggu pertama .
1. Detennine the last week of the season for which scores have been entered into the SCORES relation. Save this value as
"m8Jl_ wk."
2. Input the week for which the standings are desired as "in_wk." and make cenain that value inpul is valid.
3. Zero the wins: losses, and lOlpins values in aillupies in the extra relation TST A TS.
4. For each lane (noted as In), do the following for each week (noted as wk) :
a) Use the SET POINTER #2, WHILE-THEN combination to operale on the scores for each bowler on the team
bowling on this lane for this week. The following things are done for each bowler: (I) their current hindicap is
calculated and slored in "hndkp"; (2) each individual game score is added to the learn lotal for lhal game for lhat
night (including handicap); (3) lhe lOlpins value in TSTATS for this learn is replaced wilh the current value plus the
sum of this bowler's lhree game lOlal (wilhoUl handicap),
The coding used here is thal g I a is lhe lOlal pin counl for game I for the team on thc odd numbered lane, while g I b
is the total pin counl for gamc I for the learn on thc even numbered lane. g I a, g3a, g2b, and g3b have similar
meanings..
b) Adjust lhe won-Iosl record (inTSTATS) of lhe lasllwo learns analY/.ed, The codmg here IS lhallhe lcam on the odd
numbered lane has ils idenlifier names ending wilh "a," while lhe team on lhe even nembered lane has identifiers
that end in "b,"
5, Output the le"gue slandings by merely SELECTing all the dala lhal are in TS1'A 1'S, afler a proper heading has been
output.
Gambar 10. 20 Logik umum untuk teamstd.prg
158
26. Oleh karena menang kalah dan hasil pin tidak disimpan sebagai bagian dari set
relasi utama dari database, relasi temporer dikembangkan untuk menampung data
ini hanya selamapenghitungan dibuat dalam menghasilkan kedudukan team. Relasi
ini adalah
TSTATS(tnumb, wins,losses,totpins)
dan isi TSTATS yang ada pada saat kalkulasi posisi tiem dimulai, terdapat pada
gambar 10.22.
·
· (Procedure name is : "teamstd.prg"
(Written by Glenn A. Jackson
.
· (Oakland University, Rochester, MI 48063
· (
(This procedure calculates and prints out the league standings
.
· (for any week. The week desired is input from the terminal.
· (
. (This procedure is called by : sdbmain menu.
(
NEWPAGE
SET VAR max_wk INTEGER
SET VAR in_wk INTEGER
SET VAR done TEXT
· (Determine the last week for which scores have been entered as max_wk
.
COMPUTE max_wk AS MAX week FROM scores
· ( )
. (Enter week for which the standings are desired...
( )
SET VAR done TO "false"
and verify
WHILE done EXISTS THEN
WRITE "ENTER WEEK FOR WHICH LEAGUE STANDINGS ARE DESIRED" AT 7 10
WRITE "ONLY VALUES BETWEEN 1 AND" AT 8 10
SHOW V AR max_wk =1 AT 8 36
ALLIN in_ wk USING "aUowed" at 15 10
IF in_wk LE . max_wk AND in_wk GE 1 THEN
BREAK
ENDIF
WRITE "THE WEEK INPUT IS INVALID" AT 15 10
WRITE "Press any key to continue AT 16 10; PAUSE
NEWPAGE
.
ENDWHILE
SET
( )
VAR err I INTEGER
SET VAR err2 INTEGER
SET VAR err3 INTEGER
SET VAR tot INTEGER
SET VAR avg INTEGER
SET VAR tnb INTEGER
SET VAR hndkp INTEGER
SET VAR teama INTEGER
SET VAR teamb INTEGER
SET VAR tota INTEGER
SET VAR totb INTEGER
SET VAR name TEXT
SET VAR gla TO 0
SET VAR g2a TO 0
SET VAR g3a TO 0
SET VAR glb TO 0
SET VAR g2b TO 0
SET VAR g3b TO 0
SET VAR In TOO
.
SET
<
VAR
)
wk TOO
·
· (Make cenain than wins, losses and totpins auribute values
<areaUzero in the scratch-pad relation TSTATS, before new
)
)
Gambar 10.21 (a) Bagian pertama dari modul program teamstd.prg.
159
27. * (team slanding calculations begin.)
* ( )
ASSIGN wins TO 0.0 + O. 0 IN tstats
ASSIGN losses TO O. 0 + O. 0 IN lSlats
ASSIGN totpins TO O. 0 + O. 0 IN tstals
* ( )
-
* (Calculation of slandings begins here calculalions go a week)
- - =
(at a time from wk I to in_wk. )
( )
WIIILE wk <= .in_wk TIIEN
SET POINTER # I errl FOR sched WIIERE week = .wk AND lane =.In
SET VAR tnb TO lnumb IN #]
SET POINTER #2 err2 FOR bowler WI(ERE tnumb = .lnb
WIIILE err2 = 0 TIIEN
SET VAR name TO bname IN #2
)
IF wk = I 'I'll EN
SET VAR avg TO slavg 1: #2
ELSE
RUi'i gelavg.prg * (FI"'D TilE avg TO USE FOR TillS WEEK)
ENDIF
IF avg < 200 TIIEN
SET VAR hndkp TO 2(X) - . avg
SET VAR hndkp TO .hndkp x O.75
ELSE
SET V AR hndkp TO ()
ENDIF
* )
SET POINTER #3 FOR scores WIIERE bname = .name AND week = .wk
SET VAR gl TO game! IN #3
SET VAR g2 TO game2 IN #3
SET VAR g3 TO game3 IN #3
IF In = I OR In = 3 OR In = 5 'I'll EN
SET VAR gla TO .gla + .gl
SET VAR gla TO .gla + .hndkp
SET VAR g2a TO .g2a + .g2
SET VAR g2a TO .g2a + .hndkp
SET VAR g3a TO .g3a + .g3
SET VAR g3a TO .g3a + .hndkp
ELSE
SET VAR glb TO .glb + .gl
SET VAR glb TO .glb + .hndkp
SET VAR g2b TO .g2b + .g2
SET VAR g2b TO .g2b + .hndkp
SET VAR g3b TO .g3b + .g3
SET VAR g3b TO .g3b .. .hndkp
ENDIF
SET VAR 101 TO .gl .. .g2
SET VAR 101 TO 101 .. .g3
ASSIG!' tolpins TO tolpins .. .101 1' Islals WIIERE lnumb = .ulb
NEXT 1/2 err2
ENDWHILE
*
( )
*
(When an even numbered lane is pres,-,"I,calculate wins and losses)
*
(for the team on this lane and the team on the odd numbered lane)
Gambar 10.21 (b) Bagian kedua dari modul program teamstd.prg
160
28. ·
. (bfore it.)
( )
IF In = 2 OR In =
6 THEN
SET VAR teamb TO.tnb
IF gla > .glb THEN
ASSIGN wins TOwins + 1.0 IN tstats WHERE !numb = .teamb
ASSIGN losses TOlosses + 1.0 IN tstats WHERE !numb =.teama
ELSE .
IF glb > .gla THEN
ASSIGN wins TOwins + 1.0 IN !Slats WHERE !numb = .teama
ASSIGN losses TOlosses + 1.0 IN tstats WHERE !numb = .teamb
ELSE
ASSIGN wins TOwins + 0.5 IN tstats +
WHERE !numb =.teama OR tnumb = .teamb
ASSIGN losses TOlosses + 0.5 IN tstats +
WHERE !numb =.teama OR tnumb = .teamb
ENDIF
. (
ENDIF
)
IF g2a > .g2b THEN
ASSIGN wins TOwins + 1.0 IN tstats WHERE !numb = .teamb
ASSIGN losses TO losses + 1.0 IN tstats WHERE !numb = .teama
ELSE
IF g2b > .g2a TII EN
ASSIGN wins TOwins + 1.0 IN tslats WHERE !numb = .teama
ASSIGN losses TO losses + 1.0 IN lslats WHERE tnumb = .teamb
ELSE
ASSIGN wins TOwins + 0.5 1:' lstats +
WHERE tnumb = .tcama OR tnumb = .leamb
ASSIGN losses TO losses + 0.5 1] tstals +
WIIERE tnumb= .teama OR tnumb = .teamb
ENDIF .
. ENDIF
( )
IF g3a > .g3b THBN
=
ASSIGN wins TOwins + 1.0 IN !Slats WHERE tnumb .teamb
ASSIGN losses TOlosses + 1.0 IN !SIalS WHERE !numb = .teama
ELSE
IF g3b > .g3a THEN
ASSIGN wins TO wins + 1.0 IN lstats WHERE !numb = .leama
ASSIGN losses TOlosses + 1.0 IN tstats =
WHERE !numb :teamb
ELSE
ASSIGN wins TOwins + 0.5 IN tstats +
WHERE !numb = .teama OR tnumb = .teamb
ASSIGN losses TOlosses + 0.5 IN tstats +
WHERE !numb = .teama OR tnumb = .leamb
ENDIF
. ENDIF
( )
SET VAR IOta TO .gla + .g2a
SET VAR tota TO .tota + .g3a
SET VAR tota TO .gIb + .g2b
SET VAR tota TO .totb + .g3b
IF tota > .totb THEN
ASSIGN wins TO wins + 1.0 Ub tstats WHERE tnumb = .teama
Gambar 10.21 (c) Bagian ketiga dari modul program teamstd.prg
161
29. ASSIGNlosses TO losses + 1.0 IN tstats WHEREtnumb = .teamb
ELSE
IF totb > .tota THEN
ASSIGN wins TO wins + 1.0 IN tstats WHEREtnumb = .teamb
ASSIGNlosses TO losses + 1.0 IN tstats WHEREtnumb = .teamb
ELSE
ASSIGN wins TO wins + 0.5 IN tstats +
WHERE tnumb =
.teama OR tnumb = .teamb
ASSIGN losses TO losses + 0.5 IN tstats +
WHERE tnumb =
.teamaOR tnumb .teamb =
ENDIF
. ( )
ENDIF
SET VAR gla TO 0
SET VAR g2a TO 0
SET VAR g3a TO 0
SET VAR glb TO 0
SET VAR g2b TO 0
SET VAR g3b TO 0
ELSE
SET VAR teama TO .tnb
ENDIF
IF In =
6 THEN
SET VAR In TO I
SET VAR wk TO .wk + I
ELSE
SET VAR gla TO 0
ENDIF
.
ENDWHILE
· ( )
(Output the league standings for the week value input above.)
. ( )
NEWPAGE
WRITE "MONDAY NIGHT IRREGULARS BOWLING LEAGUE" AT 5 I
WRITE" STANDINGS AT THE END OF WEEK" AT 6 1
SHOW VAR in_wk = I AT 6 36
WRITE " "
SELECT ALL FROM tstats
WRITE "Press and key to continue ' AT 22 5; PAUSE
Gambar 10.21 (d) Bagian akhir dari modul program teamstd.prg
Untuk menyakinkan bahwa nilai menang, kalah dan totpin merupakan set nol
pada perlombaan pelaksanaan teamstd.prg salah satu cara untuk mempercepat
pelaksanaan modul ini adalah salah satu cara untuk mempercepat pelaksanaan modul
ini adalah dengan mengamankan data dalam relasi ini dari minggu ke minggu. Namun
hal ini merupakan metode pemprograman untuk mencegah pelaksanaan rencana
keputusan desain yang menyebabkan nilai ini berada diluar database pada bagian
pertama. .
Titik utama yang membingungkan dimana mungkin dialami oleh pembaca
dalam melihat 10gikadidalam teamstd.prg, adalah cara dimana teams padajalur yang
berdekatan dapat berpasangan. Logika pertama akan menentukan trumb team yang
ditunjuk nke jalur satu pad suatu minggu dengan menggunakan SET POINTER # 1
pada relasi SCHED (lihat Gambar 10.23) Tnumb yang diperoleh dari pointer # 1 di
pakai untuk mencari tempat dari semua anggota team ini dengan menggunakan set
POINTER # 2 pada relasi BOWLER. Niali pemain individu dicari dengan pointer #2
dari team pointer # 1 di peroleh dengan SET POINTER #3 pada nilai SCORES.
162
30. R > list tst.ats
Table: tst.ats
Read Password: NO R > scect all from lstats
Modify Password: NO
tnumb wins losses tOlpins
Column definitions
1/ Name Key I 0.00000 0.00000
Type Length
2 0.00000 0.00000
I tnumb INTEGER I value(s) 3 0.00000 0.00000
2 wins REAL I value(s) 4 0.00000 0.00000
3 losses REAL I value(s) 5 0.00000 0.00000
4 totpins INTEGER I value(s) 6 0.00000 0.00000
Current number of rows: 6
Ib
R> (b)
(a)
Gambar 10.22 (a) Struktur dari TSTATS, dan
(b) isi dari TSTATS pada awal pelaksanaan dari teamstd.prg
Nilai perlombaan dari semua anggota team pada lajur satu disimpan dalam
variabel yang terakhirdengan "a" seperti91a. Huruf"a" menunjukkan team yang ada
pada bagian yang bernomor ganjil jika variabel jalur (1") diubah ke jalur dua, nilai
dari team anggota team disimpan dalam variabel yang berakhir dengan "b" seperti
91b. Huruf"b" menunjukkan bahwa team tersebut ada pada bagian yang bernama
genap dari 2 team yang sedang diperhimbangkan. Jika semua nilai dari seluruh
anggota ke dua team telah dianalisis menang dan kalah untuk minggu itu dapat
dipakai untuk team yang ditunjuk ke dua jalur berikutnya.Proses inidilanjutkan
sampai semua team dianalisa.
RelasiTSTATS harusdibuat sebelumteam SID.PRG dapatdigunakan meskipun
relasi ini dalain database berjalan dari proses yang satu ke proses lainnya, namun ini
bukan relasi yang reguler sebab .isinya diasumsikan salah' pada awal tiap-tiap
pelaksanaan team std.prg. Relasi ini temporer dalam arti bahwa data dan outputnya
'dibuatkemudian dihapuskan. Nilai yangditemukandalam relasi ini tidakdimaksudkan
untuk dipakai dengan menggunakan proses yang satu ke proses yang lain. Beberapa
sistem manajemen database memiliki perintah untuk membuat struktur relasi tem-
porer selama pelaksanaan suatu program. Relasi temprorer ini ada, dan dapat
digunakan seperti relasi lain. Pada saat program pembuatan mengakhiri suatu
pelaksanan, relasi temporer akan menghilang.
Teamstd.prg menianggil prosedur : getarg.prg. Modul yang terdapat dalam
gambar 10.24 menghitung rata-rata yang diperlukan untuk perhitungan hambatan
pada suatu minggu, bagi seorang pemain. Sebagai contoh, jika team Std.prg meng-
hitung menag dan kalah yang ada selama minggu ke empat, hambatan yang dipakai
dalam penghitungan ini menggunakan rata-rata tiga minggu pertama dalam masa
pertandingan. Geiavg.prg menghitung rata-rata tiap pemain.
163
31. SCHED
!numb week lane
Pointer # 1 ~ ....5 2 1
/'
"
I week = 1 and lane = 2 sets Pointer #1
I to tnumb =5
BOWLER
..
bname !numb
"-
" --
Pointer # 1 ~ Jean Adams :. 5
/
/'
. !numb = 5 from Pointer #1 sets Pointer #2 to tnumb
,
=5 to get a
I bname; Jean Adams is one possibility.
SCORES
bname week game 1 game2 game3
Pointer # 1 ~
" Jean Adams 2 120 125 100
<: .
bnamc = Jean Adams from Pointer #2, plus week = 2, sets Pointer #3
to locate the desired game scores.
,Gambar 10. 23 Contoh Bagaimana Pointerdigunakan dalam modul program
teamstd.prg
]64
32. · (Procedure name is "gelavg.prg" )
·
·
.
(Wrinem by Glenn A. Jackson )
(Oakland University, Rochesler, MI 48063 )
·
·
( )
(This procedure calculates the average to be used to calculate)
(the handicap for a given bowler for a given week in the season.)
·
·
·
(The week is input via the global variable "wk"; the bowler's)
(name is input via the global variable "name", and the average)
·
·
(is output via the global variable "avg". Input and output)
(variables are defined as integers in the calling program.)
(This module is caUed only when the week input is greater)
· (than one. )
. ( )
· (Procedure is called by teamstd.prg)
( )
SET VAR sum INTEGER
SET VAR sl INTEGER
SET VAR s2 INTEGER
SET VAR s3 INTEGER
.
SET VAR numgams INTEGER
(
COMPliTE
)
sl AS SliM gamel FROM scores +
WIIERE bname =.name AND week < .wk
COMPCTE s2 AS SCM game2 FROM scores +
WIIERE bname =.name AND week < .wk
COMPUTE s3 AS SUM game3 FROM scores +
WHERE bname = .name AND week < .wk
SET VAR sum TO. sI + .s2
SET VAR sum TO. sum + .s3
SET VAR numgams TO .wk - I
SET VAR numgams TO .numgams x 3
SET VAR avg. TO .sllm I .numgams
RETURN
Gambar 10.24 Modul program getavg.prg
10. 9 MASALAH DALAM MEMASUKKAN DATA BARU KE
DALAM DATABASE
Menu dari item yang ada dalam gamabar 10.5membicarakan data yang akan
ditampilkan dari database. Seperti yang telah kita bicarakan dalam bab sebelumnya
bahwa data yang ada dalam database dimasukkan dengan perintah LOAD dan EDIT
R : base 5000 standar akan membantu seketaris liga bowling jika menu masukan
dikembangkan sehingga akan membantunyadalam memas.lkkansemua nilai pemain
pada minggu berikutnya dalam masa pertandingan tersebut. Masalah ini terdapat
dalam latihan di akhir bab ini untuk membantu dalam menjaga keutuhan data dalam
database R: 5000 menggabungkan perintah RULES. Perintah ini dipakai untuk
kondisi yang membuat DBMS mencek pembatasab tertentu yang diset oleh pemakai
pada data dalam database. Jika suatu aturan ditentukan untuk relasi khusus, sistem
ini akan mencek taiap modifikasi data dan tiap tambahan data ke relsi tersebut,
Sebagai contoh jika tupel dalam relasi team dengan-nomor team yang ada (tnumb
adalah kunci primair), Kemudian aturan berikut harus ditempatkan pada relasi
TEAM dengan perintah RUES.
"Duplicate Key" tnumb IN team NEA thumb IN team
165
33. " Duplicate Key" adalah pesan yang salah akan dicetak tiap kali suatu usaha
dibuat untuk menghilangkan/memaksa kondisi ini, dan NEA singkatan "NOT
EQUAL TO ANY" Masalah 10 pada akhir bab membahas kondisi jenis ini.
10. 10 RINGKASAN BAB 10
Oleh karena query hanya mencakup pemerolehan informasi dari database,
solusi query dapat diselesaikan dengan menggunakan perintah R: base 5000.
Sebagian dari so~usi ini tidak dapat dikembangkan oleh seseorang yang tidak
konpeten dalam bidang ini.
. Jikaquery mencakuppengambilan
daripenggolahandatadaridatabase,solusi
ini dapat tercakup dan harus dikembangkan oleh seseorang yang telah berpengala-
man dengan filosofy databse, yang mempunyai kemampuan pemprograman.
10. 11 . MASALAH-MASALAH BAB 10
1. Implementasi menu R:base 5000diberikan pada babini semuaoutputdikirimke
terminal komputer. Tambahkan suatu pilihan pada menu akan memperbolehkan
sekretaris untuk memilih peralatan output yang digunakan untuk pelaksanaan
yang sedang berlangsung. Pilihan-pilihan yang beralasan hanya terminal, printer
dan keduanya printer dan terminal.
2. Perluas menu yang diberikan pada Gambar 10.5 sampai dengan penambahan
modul-modul program baru yang akan menjawab beberapa penyelesaian per-
tanyaan yang lebih panjang diberikan pada bagian 10.2.
3. Ulangi Masalah 1 dari Bab 9 menggunakan implementasi R:base 5000
.
4. Ulangi Masalah 3 dari Bab 9 menggunakan implementasi R:base 5000.
5. Modifikasi teamstd.prg sehingga kedudukan akhir adalah output dalam format
yang terlihat profesional. Pada implementasi yang sekarang kedudukan adalah
output menggunakan suatu perintah SELECT ALL.
6. Modifikasi bwlrst.prg se~ingga TATAL PINS WITH HANDICAP tennasuk
dalam output.
7. Keluaran teampns.prg yang sekarang menghasilkan jumlah total "scratc.hpins"
untuk setiap team. Modifikasi program sehingga"TOTAL PINS WIlli HANDI-
CAP" juga keluaran.
8. Porsi utamadari logikdalammodulwkschdCprgdiimplementasikanmenggunakan
SET POINTER diikuti suatu konstruksi WHILE-THEN. Tulis kembali bagian
ini menggunakan JOIN dan tentukan apakah ada catatan setiap perubahan dalam
kecepatan dari pelaksanaan modul. Penyelesaian mana yang lebih mudah ?
9. Ulangi masalah 9 pada Bab 9 menggunakan implementasi R:base 5000
34. 10. Gunakan perintah-perintah aturan untuk sekelompok batasan pada setiap relasi
dimana kunci-kunci primer dari setiap relasi unik.
11. Tulislah suatu kelompok modul program driven menu yang mengizinkan
kumpulan sekretaris, yang tidak memiliki pengetahuan tentangdatabase, untuk
menambahkaJl score permainan ke database untuk semua team setiap minggu.
Module harus harus memberikan sekretaris sekumpulan prompt yang mungkin,
dan suatu template untuk isidari data yang tepaLMemiliki modul membuat setiap
pengujian yang tepat pada data yang dimasukkan belum diperiksa melallui
Aturan-atllran pada Masalah 10.
12. Periksa modul-modul yang lambat dalam pelaksanaan, seperti teamstd.prg, dan
selidiki berbagai macam cara memperkecil waktll pekaksanaan. (Suatu kontes
kelas yang baik adalah untuk melihat siapa yang dapat menghasilkan modul
program yang waktu pelaksanaannya tercepat).
13. Ulangi Masalah 5 pada Bab 9 menggllnakan implementasi R:base 5000.
167