• Tidak ada hasil yang ditemukan

bab10 database sekretaris bowling dengan rbase5000

N/A
N/A
Protected

Academic year: 2017

Membagikan "bab10 database sekretaris bowling dengan rbase5000"

Copied!
34
0
0

Teks penuh

(1)

DATABASE

SEKRETARIS

BOW-LING DENGAN R:BASE

5000

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 PC dengan 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)

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

# Name Type Length Key Table: schoo

Read Password: NO Modify Password: NO

Column definitions Itnumb 2 week 3 lane INTEGER INTEGER INTEGER I value(s) I value(s) I value(s) yes

Current number of rows: 24 (a)

Gambar 10.1 (a) Struktur dan

R>list team

Table: team Read Password: NO Modify Password: NO

Column definitions

(a)

Gambar 10.2 (a)Struktur dan (b) isi dari relasi TEAM

tnumb week lane

1 1 1

2 1 2

3 1 4

4 1 3

5 1 6

6 1 5

I 2 4

2 2 5

3 2 2

4 2 6

5 2 1

6 2 3

1 3 3

2 3 6

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)

(b) isi relasi SCHED tnumb tname captn

1 AlleyCats Ann Jones 2 Inconsistents Bill Black 3 TenPins Lisa Moore. 4 HighRollers Jill Miller 5 Splitters. Roy Lane 6 SandBaggers Cindy Fox

(b) # Name Type Length Key

I tnumb INTEGER I value(s) yes 2 tname TEXT 15 characters 3 captn TEXT 15 characters

(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 Read Password: NO Modify Password: NO

Column definitions

# Name Type Lenglh I bname 2 Lnumb 3 phone 4 stret 5 Slavg TEXT INTEGER TEXT . TEXT. INTEGER

15 characters yes I value(s) 8 characters 20 characters 1 value(s) Current number of rows : 6

R>

(a)

Garnbar 10. 3 (a) Struktur

(b) Isi dari relasi BOWLER

Key

Jeam adams 5 689-1234 10 Robin St III Slcve adams 5 689-1234 10 Robin Sl 130 Bill Black 2 689-2345 15 Bluebird Ln 149 Bonnie Black 2 689-2345 15 Bluebird Ln 120 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 Sue Brown 3 689-4567 18 Bluebird Ln 124 Cindy Fox 6 689-5678 19 Cardmal St 103 Randy Fox 6 689-5678 19 Cardinal St 147 Ann Jones I 689-4365 12 Finch Dr 105 John Jones I 689-4365 12 Finch Dr 143 Joy Lane 5 689--6789 21 Sparrow Ct 125 Roy Lane 5 689--6789 21 Sparrow Ct 167 Jill Miller 4 689-7890 12 Robin St 108 Paul Miller 4 689-7890 12 Robin St 170 Lisa Moore 3 689-890 I 11 Lark Dr 110 Mike Moore 3 689-8901 11 Lark Dr 140 Jim Smith I 689-9<)12 13 Finch Dr 152 Mary Smith 1 689-9012 13 Finch Dr 115 bname Lnumb phone stret Slavg Ruth Taylor 6 89-0123 20 Cardinal St 119 Dan White 4 689-2134 16 Robin St 158 Jan While 4 689-2143 16 Robin Sl 121 Russel Taylor 6 689--{) I 23 20 Cardinal St 161

(4)

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.

R>list scores bname week gamel game2 game3

Table: scores Jeams Adams I 119 120 94 Read Password: NO Steve Adams 1 112 140 138 Modify Password: NO Bill BlackBonnie Black 11 137120 155125 155115 Column definitions Bo BlowJo Blow 1I 160101 14591 12593 # Name Type Length Key Jim Smith 1 160 150 146 Mary Smith 1 120 110 115 bname TEXT 15 characters yes Ann Jones I 98 110 107 2 week INTEGER I value(s) John Jones 1 145 150 134 3 game I INTEGER I value(s) Joe Brown 1 140 127 129 4 game2 INTEGER I value(s) Sue Brown I 121 128 124 5 game2 INTEGER I value(s) Cindy Fox I 119 110 83 Randy Fox I 143 150 148 Current number of rows: 96 Russel Taylor ] 167 150 166 Ruth Taylor ] 110 125 122

R> Joy Lane I ]26 127 122

(a) Jill MillerRoy Lane II ]45III 180101 176112 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

(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

, Joe Brown

Sue Brown Lisa Moore Mike Moore

phone I

689-4567 689-4567 689-8901 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

(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

(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
(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> SETVARternTO tnumbIN sched+

R> WHERElane= 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> WHEREtnumb

= .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> WHEREtname<>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

(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

(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

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 terdapat pada Gambar 10.6:modul ini dinamakan secdb.app.

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

(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 5 pilihan 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 "DISPLA Y 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)

(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) angka riil 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

(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 SET VAR SET VAR SET VAR SET VAR SET VAR SET YAR SET YAR SET YAR SET VAR SET VAR SET VAR * ( )

* (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 hU;ame INTEGER hi_ser INTEGER bavg INTEGER hndkp INTEGER max_wk INTEGER temp INTEGER tot pins INTEGER name TEXT done TEXT check INTEGER tot3 INTEGER totgam INTEGER

(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...,gameTO 0 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...,gameTHEN

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

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

Gambar 10.10 Tipe output dari pelaksanaan teampns.prg

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

(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 dBaseIIIdari modul yang sarna (bag .tb 9.4), maka dapat kita ketahui bahwa dalam dBase IIIdipakai 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 "DISPLA Y 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.

(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 WRITE "TEAM NO. TEAM NAME TOTAL PINS"

WRITE "__.nnnnn. 00 00.000000. 00 00000000.

* (

· (Calculate and print out the total pins for each team.

.

( SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR * ( )

· (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 COMPUTE gsum AS SUM game2 COMPUTE gsum AS SUM game3 SET VAR totpins TO ,totpins + SET VAR totpins TO .totpins + SET VAR totpins TO .totpins + 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

20 AT 7 20 AT 8 20

ctr INTEGER Iyne INTEGER gsuml INTEGER gsum 2 INTEGER gsum3 INTEGER name_t TEXT name_b TEXT totpins INTEGER erl INTEGER ctr TO I

FORM FORM FORM ,gsuml ,gsum2 ,gsum3 scores scores scores WHERE WHERE WHERE bname bname bname

Gambar 10. 12 Modul program teampns. prg

(19)

THE SCHEDULE FOR WEEK NUMBER 3

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

TEAM LANE NUMBER

AlIeyCats 3

Inconsistents 6

TenPins 1

HighRollers 4

Splitters 5

(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" ++++++++++++++++ I I I I I I I I I I I I I I " 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 .

(21)

10. 7 MODUL PROGRAM R:5000 EOSRPT.PRG

MW~Iini~iFftn9BiI

Vlih minWW\ftmftVftift~ftft\vilibftnmin~ftQNfth

"QijtmR-ATEANEND-OF-SEASONREPORT".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 sedangmenunjuk-kan gambar 10.20 menunjukmenunjuk-kan logika umum model, sedangkan kode nilai terdapat pada gambar 10.21.

Gambar 10.16 Output dari eosrpt.prg untuk contoh database

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)

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

(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

(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 linCCl20 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 .totpinsI.tgame INtemp2 WHERWE bname=.name NEXT #1 errl

ENDWHILE

COMPUTE best_avg AS MAX avg FROM temp2 *()

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

(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... and verify

.

( )

SET VAR done TO "false" 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 SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR SET VAR

.

< )

· (Make cenain than wins, losses and totpins auribute values )

·

<areaU zero in the scratch-pad relation TSTATS, before new )

Gambar 10.21 (a) Bagian pertama dari modul program teamstd.prg.

(27)

* (team slanding calculations begin.) * ( ) ASSIGN ASSIGN ASSIGN * ( )

* (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 wins TO 0.0 + O. 0 IN tstats losses TO O. 0 + O. 0 IN lSlats totpins TO O. 0 + O. 0 IN tstals

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 SET SET SET SET SET ENDIF SET VAR SET VAR ASSIG!'\ tolpins 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)

VAR VAR VAR VAR VAR VAR

glb TO .glb + glb TO .glb + g2b TO .g2b + g2b TO .g2b + g3b TO .g3b + g3b TO .g3b ..

.gl .hndkp .g2 .hndkp .g3 .hndkp

101 TO .gl .. .g2 101 TO 101 .. .g3

TO tolpins .. .101 1'\ Islals WIIERE lnumb =.ulb

* *

*

(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 ASSIGN losses TOlosses + 1.0 IN tstats

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

IF g2b > ASSIGN ASSIGN 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 > ASSIGN ASSIGN ELSE

IF g3b > ASSIGN ASSIGN ELSE

ASSIGN wins TOwins + 0.5 IN tstats WHERE !numb= .teama OR tnumb = ASSIGN losses TOlosses + 0.5 IN tstats

WHERE !numb= .teama OR tnumb = 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 WHERE WHERE

!numb =.teama !numb =.teamb

.g2b THEN

wins TOwins + 1.0 IN tstats WHERE losses TO losses + 1.0 IN tstats WHERE

!numb =.teamb !numb =.teama

.g2a TII EN

wins TOwins + 1.0 IN tslats losses TO losses + 1.0 IN lslats

WHERE WHERE

!numb =.teama tnumb =.teamb

.g3b THBN

wins TOwins + 1.0 IN !Slats WHERE tnumb=.teamb losses TOlosses + 1.0 IN !SIalS WHERE !numb =.teama

.g3a THEN

wins TO wins + 1.0 IN lstats losses TOlosses + 1.0 IN tstats

WHERE !numb =.leama WHERE !numb

=

:teamb

+ .teamb

+ .leamb

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

WHEREtnumb

=

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

(30)

R > list tst.ats

Table: tst.ats Read Password: NO

Modify Password: NO R > sc\ect all from lstats

Column definitions

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" seperti 91a. 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.

Relasi TSTATS 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 yang ditemukandalam 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.

tnumb wins losses tOlpins

I 0.00000 0.00000 2 0.00000 0.00000 3 0.00000 0.00000 4 0.00000 0.00000 5 0.00000 0.00000 6 0.00000 0.00000

(31)

Pointer # 1 ~ /'

I

I

\

"-"

Pointer # 1 ~ /'

/

I

\

\

"

Pointer # 1 ~

SCHED

week =1 and lane =2 sets Pointer #1 to tnumb =5

BOWLER

!numb = 5 from Pointer #1 sets Pointer #2 to tnumb =5 to get a bname; Jean Adams is one possibility.

SCORES

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

!numb week lane

....5 2 1

"

..

bname !numb

--:.5 Jean Adams

,

.

bname week game 1 game2 game3

Jean Adams 2 120 125 100

(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 WIIERE COMPCTE

WIIERE COMPUTE

WHERE SET VAR SET VAR SET VAR SET VAR SET VAR RETURN

sl AS SliM gamel FROM scores + bname =.name AND week < .wk s2 AS SCM game2 FROM scores + bname =.name AND week < .wk s3 AS SUM game3 FROM scores + bname =.name AND week < .wk sum TO. s I + .s2

sum TO. sum + .s3 numgams TO .wk - I numgams TO .numgams x 3 avg. TO .sllmI .numgams

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 perintahLOADdanEDIT

R : base 5000 standar akan membantu seketaris liga bowling jika menu masukan dikembangkan sehingga akan membantunya dalam 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 membuatDBMSmencek 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.

(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 mencakuppengambilandaripenggolahandatadaridatabase,solusi

ini dapat tercakup dan harus dikembangkan oleh seseorang yang telah berpengala-man dengan filosofy databse, yang mempunyai kemampuan pemprograberpengala-man.

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.
(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 isi dari 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).

Gambar

Gambar 10.6Modul program menu utama
gambar 10.8sedangkankeluaran khususdari modul ini adapada gambar 10.9)hanya
Gambar 10.7Logik urnurn dalam bwlrst.prg
Gambar 10. 8 (a) Bagian pertama dari modul program bwlrst. prg.
+7

Referensi

Dokumen terkait

Saat AC sedang dalam keadaan mati, bukalah jendela agar udara segar dan cahaya matahari dapat menembus ruangan; (2) kurangi menyemprot pewangi ruangan yang mengandung

Pemohon memahami proses asesmen untuk skema Klaster Perawatan Pencegahan ( Preventive Maintenance ) Alat Berat Big Bulldozer yang mencakup persyaratan dan ruang

35 Tahun 2009 tentang Narkotika, menentukan beberapa aspek penting yakni Impor dan Ekspor (Bab V), peredaran (Bab VI), Pengobatan dan Rehabilitasi (Bab IX),

Untuk ujian tema interview yang akan dilakukan beberapa koperasi di wilayah aceh, maka penyelidik bersama pasukan moderator pada tarikh 15 April 2014 melakukan

Soal Bentuk Soal 1 &#34;#$ Menganalisis spesifkasi komponen utama pada perangkat keras komputer- noteook- smartp,one dan talet dalam menentukan keutu,an pekerjaan Komponen

Berdasarkan penelitian juga diketahui hasil belajar peserta didik melalui pretest dan posttest yang diberikan kepada 33 siswa kelas X TKJ 2 di SMKN 1 Mojokerto, dan

Ucapan terima kasih terkhusus penulis ucapkan kepada segenap keluarga penulis: Ibu Jainem, Bapak Gimin, Widia Jumiasih dan Rohmat Susanto sebagai orang-orang