PELAKSANAAN LANDAS DATA SEKRETARIS BOWLING MENGGUNAKAN DBASE III
Bab ini berisi tiga bagian penting dari infonnasi : (1) Contoh daftardaftar dari empat relaSi yang membentuk landas data sekretaris bowling, karena mereka dilaksanakan atau dijalankan dalam dBASE III. (2) Contoh-contoh perintah-perintah dBASE III penggunaannya dengan relasi-relasi untuk menjawab masalah-masalahsederhana.(3) Suatu diskusi yang mendalam tentang kumpulan modul-modul drive menu prpgram dBASE III yang menjawab masalahmasalah yang rumit dengan menggunakan dBASE III. Pelaksanaan database dikembangkan pada sebuah IBM PC dengan kapasitas memori 256 kByte, dua double side disk drive, dan sebuah monitor monochrome. Disket sistem dBASE III selalu berada di drive A, dan modul-modul program dari file database berada di drive B.
9.1
STUDI KASUS DATABASEDALAM DBASE III
Sebelum melanjutkan pembicaraan tentang masalah-masalah khusus dan bennacam-macam modul program, relasi-relasi database yang nyata akan diselidiki. Uji data dalam database dikembangkan dibawah asumsi sebagai berikut : 1. Liga bowling memiliki enam tim. 99
2. Setiap tim memiliki empat peboling. 3. Musim kompetisi hanyaberlangsung empat minggu. 4. Data-data selama empat minggu dengan menggunakan perintah-perintah EDIT dan APPEND standar dBASE III. 5. Semua peboling memainkan semua pertandingan. Kemungkinan untukmerubah asumsi-asumsi ini, seperti latihan-Iatihan dalam daftar problem pada akhir bab ini. Gambar 9.1 sampai 9.2 menunjukkan dua buah struktur dari ujian data yang aktuil untuk masing-masing relasi (dalam terminologi dBASE III setiap relasi disebut sebuah file database (.dbt).) Dalam melihat data relasi BOWLER pengawasan hendaknya membuat relasi memiliki sejumlah besar tembusan pada alamat jalan dan nomor telepon. Apakah berikut ini FD yang benar ? phone L street
. list off TNUMB
. list structure Structure for dalabase Number of dala record Date of last update Field Field Name 1 TNUMB 2 WEEK 3
LANE
B:sched.dbf 24 05/('1)/86 Type Width Numeric ] Numeric ] Numeric ]
Dec
WEEK
LANE
] 2 3 4 5 6
] ]
]
2 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4
1 2 4 3 6 5 4 5 2 6 ] 3 3 6 ] 4 5 5 I 3 2 4
2 3 4 5 6 I 2 3 4 5 1 2 3 4 5
]
] ]
4
** TOlal **
w Gambar 9.1 (a) Struktur (b) Isi dari relasi SCHED. 100
]
~
Relasi nama-nama akan berhuruf besar, keeuali bila menggunakan notasi dBASE III yang menghubungkan dengan simbol-simbol ke relasi-relasi mereka berada. Contoh: bowwler L bname, ini berarti bname berada di dalam relasi BOWLER. use team . lisl SlrUClure
Slruclure for dalabase Number of dala records Date of lasl updale Field Field name 1 TNUMB 2 TNAME 3 CAP1N ** TOlal **
B : leam.dbf 6 05/10/86 Widlh Type 1 Numeric 15 Character characler 15 32
Dec
lisl off
I 2 3 4 5 6
TNUMB
TNAME
CAP1N
AlleyCalS Incosistenls TenPins HiRollers
Ann Bill Lisa Jill Roy Cindy
Jones Black Moore Miller Lane Fox
Spliuers SandBaggers
(b)
Gambar 9.2 (a) Struktur (b) Isi dari relasi TEAM. Jika demikian relasi BOWLER tidak di dalam BCNF dan raneangan asli daridatabase akan salah. Maka diputuskan bahwa usulan FD adalah salah dengan alasan : 1. Adakemungkinan tertentu bahwadua orang dengan dua alamat yangberbeda mungkin tidak mempunyai telepon. Kata NONE dapat digunakan untuk nomor telepon dalam kasus seperti itu; Bagaimana pun, alamat jalan tidak akan bergantung ser fungsionil pd nomor telepon. 2. Mungkin bahwa nomor telepon digunakan di dalam database adalah sebuah nomor telepon yang mana peboling bisa ditemukanlebih baik daripada sebuah nomor telepon romah, ini mungkin juga disebabkan usulan FD di atas salah.
101
Dibawah perkiraan - perkiraan ini, beberapa data jalan dan telepon menggambarkan relasi BOWLER adalah tembusan, tapi tidak mubasir.
9.2
JAWABAN PERMASALAHAN SEKRETARIS DENGAN DBASE III
Bagian ini bermaksud mengilustrasikan fakta bahwa masalah simpel yang berkaitan dengan database sekretaris bowling dapat dijawab langsung dengan perintah-perintah DBASE III, tanpa mengandung perintah-perintah bahasa pemrograman DBASE III. Semua solusi masalah dalam bagian ini melibatkan relasi spesifik yang diberikan pada gambar 9.1 sampai 9.4. Dalam banyak kasus, sebuah urutan dua atau lebih pereintah-perintah basic yang diperlukan untuk menjawab masalah. Pembaca didorong untuk meng implementasikan database, dan melaksanakan setiap set solusi yang dibahas. Jika pembaca ingin bekerja dengan R:base 5000, daripada dBASE III, mereka cukup membaca masalah yang diberikan dalam chapter ini, dan mengimplementasikan database pada chapter 10. . use bowler . list structure Structure for database Number of data records: Date of last update
Field 1 2 3 4 5
B : bowler.dbf 24 OS/20/86
Field name
Type
BNAME TNUMB PHONE STRET STAVO
Character Numeric Character Character Numeric
15 1 8 20 3 48
** Total'** (a)
102
Width
Dec
list off BNAME
TNUMB
PHONE
STRET
689-1234 689-1234 689-2345 689-2345 NONE NONE
10 10 15 15 12 12
Jean Adams Steve Adams Bill Black Bonnie Black Bo Blow Jo Blow
5 5 2 2 2 2
Joe Brown
3
689-4567
18 Bluebird Ln
Sue Brown
3 6 6 1 1 5 5 4 4 3 3 1 1 6 6 4 4
689-4567 689-5678 689-5678 689-4365 689-4365 689-6789 689-6789 689-7890 689-7890 689-8901 689-8901 689-9012 689-9012 689-0123 689-0123 689-2143 689-2143
18 19 19 12 12
Bluebird Ln Cardinal St Cardinal Ln Finch Dr Finch Dr
21 21 12 12 11 11 13 13 20 20 16 16
Sparrow Ct Sparrow Ct Robin St Robin St Lark Dr Lark Dr Finch Dr Finch Dr Cardinal St Cardinal St Robin St Robin St
Cindy Fox Randy Fox Ann Jones John Jones Joy Lane Roy Lane Jill Miller Paul Miller Lisa Moore Mike Moore Jim Smith Mary Smith Russel Taylor Ruth Taylor Dan White Jan White
Gambar 9.3 (a) Struktur
Robin St Robin St Bluebird Ln Bluebird Ln Meadowbrook Ln Meadowbrook Ln
STAVG 111 130 149 120 143 95 132 124 103 147 105 143 125 167 108 170 115 140 152 115 161 119 158 121
(b) isi dari relasi BOWLER.
103
u.. .cor.. li.t .tructur. Structur. for d.t.b... I BI.core..dbf Numb.r of d.t. r.cords I 96 D.t. of l..t updAte I O~/20/86 Fi.ld Field n.me Type Width 1 BNAME Ch.rActer 15 2 WEEK Numeric 1 3 GAME 1 Numeric 3 4 GAME2 Numeric 3 ~ GAME3 Numeric 3 ** Tot.l ** 26
Dec
(a)
Contoh-contoh dBASE
yang diberikan pada bagian iniberasumsi
III berada pada drive A dari IBM
Sebelum menjalankan dBASE dijalankan dengan perintah
bahwa
PC, dab relasi database
III,disket yang
digunakan
disket sistem pada
drive B.
harus di set .ke B. lni
.SET DEFAULT TO B MASALAH
#1: " Siapakah
kapten regu nomor empat ?"
.
Masalah inimudah, jikasemua informasiyang diperlukanuntukmenjawab berada pada tuple dalam suatu relasi.Sebagai tambahan, hanya satu kondisi diperlukan :tnumb = 4. Jawaban diperoleh dengan menjalankan.perintah : .USE team
.LIST OFF captn FOR tnumb = 4 Jawabancaptn = Jill Miller MASALAH #2: "Cari nama bowler dengan stsrting average dibawah 100." Masalah ini mirip masalah #1 dan dijawab dengan sequence berikut: .USE bowler .LIST OFF bname OR stavg < 100 Jawaban bname = Jo Blow Masalah #3: "Carl nama dan nomor telepon seluruh anggota team tiga" Masalah ini mirip masalah #1 dan #2 bahwa informasi yang diperlukan berada pada satu relasi, walaupun solusinya memberikan beberapa petunjuk output. .USE bowler .LIST OFF bname FOR tnumb = 3 104
li.t off for week >- 3 BNAME WEEK GAMEl GAME2 GAME3 134 Jean Adams 3 123 124 156 Steve Adams 3 134 135 16~ Bill Black 3 1~6 162 119 Bonnie Black 3 123 111 121 Bo Blow 3 165 1~8 120 Jo Blow 3 89 99 16~ Jim Smith 3 164 14~ 114 132 Mary Smith 3 112 109 Ann Jane. 3 108 112 146 John Jane. 3 14~ 144 Joe Brown 3 136 144 12~ 123 Sue Brown 3 124 119 110 107 Cindy FolC 3 99 161 146 Randy FolC 3 1~0 179 167 Ru..el Taylor 3 189 132 112 Ruth Taylor 3 135 132 10~ Joy Lane 3 123 1~6 202 Roy Lane 3 201 Jill Miller 3 108 101 112 Paul Miller 3 198 18~ 167 Can White 3 161 149 162 123 Jan White 3 119 141 Li.a Moore 3 121 107 104 Mike Moore 3 148 1~1 148 Jean Adam. 4 111 121 100 Steve Adam. 4 131 127 132 Bill Black 4 137 169' 154 Bonnie Black 4 119 121 113 Bo Blow 4 143 147 157 Jo Blow 4 89 99 98 Jim Smith 4 1~8 163 169 97 117 Mary Smith 4 116 Ann Jones 4 103 121 68 John Jone. 4 148 137 1~8 Joe Brown 4 130 127 146 Sue Brown 4 124 128 126 109 Cindy FolC 4 104 110 154 153 Randy FolC 4 152 158 202 Ru.sel Taylor 4 16~ 123 117 Ruth Taylor 4 119 130 128 Joy Lane 4 126 168 186 Roy Lane 4 170 Jill Miller 4 110 118 10~ Paul Miller 4 176 202 181 Can White 4. 156 149 1~7 Jan White 4 124 121 115 126 106 Li.a Moore 4 110 Mike Moore 4 14~ 148 162
li.t off for week <- 2 BNAME WEEK GAMEl GAME2 GAME3 94 120 Jean Adam. 1 119 138 140 Steve Adams 1 112 1~~ 1~~ Bill Black 1 137 11~ 12~ 80nnie BlACk 1 120 14~ 12~ Bo Blow 1 160 93 91 Jo Blow 1 101 146 1~0 Jim Smith 1 160 11~ 110 Mary Smith 1 120 107 110 Ann Jon.. 1 98 134 1~0 John Jane. 1 14~ 129 127 Joe Brown 1 140 124 128 Bue Brown 1 121 83 110 Cindy FolC 1 119 148 1~0 Randy FolC 1 143 166 1~0 Ru...l TAylor 1 167 122 12~ Ruth Taylor 1 110 122 127 Joy LAne 1 126 176 180 Roy Lane 1 14~ 112 Jill Miller 1 111 101 134 PAul Miller 1 180 196 163 1~4 Dan White 1 1~6 12~ 108 Jan Whit. 1 130 120 111 li.A Moore 1 99 149 121 Mike Moore 1 1~0 100 12~ Jean Adam. 2 120 140 146 Steve AdAm. 2 130 148 149 Bill Black 2 1~4 110 130 80nnie Black 2 120 12~ 13~ 80 Blow 2 1~9 90 91 Jo Blow 2 10~ 170 160 Jim Smith 2 160 90 110 Mary Smith 2 120 110 110 Ann Jones 2 100 13~ 138 John Jones 2 1~8 12~ 138 Joe Brown 2 139 110 124 Sue Brown 2 126 108 90 Cindy FolC 2 104 163 137 Randy FolC 2 1~0 1~0 16~ Ru..el Taylor 2 160 108 123 Ruth TAylor 2 130 120 11~ Joy Lane 2 130 138 179 Roy Lane 2 183 98 103 Jill Miller 2 110 178 174 Paul Miller 2. 180 1~6 1~~ Dan White 2 161 130 119 JAn White 2 124 100 102 lisa Moore 2 120 12~ Mike Moore 2 1~1 140
.
(b)
Gambar
9.4 (a) Struktur
dan
(b) Isi dari
relasi SCORES
105
Jawaban bname
phone
Joe Brown Sue Brown Lisa Moore Mike Moore
689-4567 689-4567 689-8901 689-8901
MASALAH #4: "Pada lane mana team lima benanding di minggu ketiga ?" Masalah ini hanya sedikit lebih sulit daripada sebelumnya. Tambahan kesulitan disebabkan karena ada dua kondisi yang harus ditempatkan. .USE sched .LIST OFF lane OR tnumb = 5 .AND. week = 3 Jawaban lane = 5. MASALAH #5: Cari nama bowler yang tinggal di Robin St Masalah ini menghendaki pencarian dalam dari setiap record pada field stret dalam relasi BOWLER untuk melihatjika muncul urutan karakter 'Robin St'. Hal ini diselesaikan dengan operator $. ~LIST OFF bname FOR 'Robin St' $(stret) Akan menghasilkan beberapa nama: bname Jean Adams Steve Adams Jill Miller Paul Miller Dan White Jan White Jika menggunakan operator $ ataupun operator atau fungsi yang memisahkan suatu sub rangkaian dari rangkaian karakter, pemakai harus memastikan bahwa tidak terdapat strings didalam data yang dapat menimbulkan kesalahan data. Contoh '21 Blue Robin St' akan memberikan nilai output pada masalah terakhir, walaupun nama jalan adalah 'Blue Robin' bukan 'Robin'. Cara yang mudah untuk memeriksanya adalah dengan mengembalikan nama dan alamat pada output. MASALAH #6 : "Berapa banyak seri tiga games yang lebih dari 550 yang telah dibuat ?" Masalah ini dapat dijawab dengan perintah COUNT. Jawaban menghendaki penjumlahan dalam permasalahan. .USE scores .OUNT FOR gamel + game2 + game3 > 550 106
juga
Jawaban : 2 records. Ini menunjukkan bahwa hanya dua seri tiga games yang lebih dari 550 yang telah dibuat. ketiga ?" Tingkat keterampilan yang dibutuhkan masalah ini sedikit lebih tinggi daripada untuk menjawab masalah sebelumnya; data yang didapat dari satu relasi harus digunakan pada relasi kedua, untuk mendapat hasH yang diinginkan. Untuk menjawab masalah ini, pertama-tama sekretaris bowling harus menggunakan hasil masalah #4 untuk menentukan pada lane mana tim lima bertanding pada minggu ke tiga. Jawabannya adalah lane = 5. Jika lawan bertandingpada lane yang berdampingan, sekretaris dapat menarik kesimpulan bahwa lawan bermain pada lane enam. Dengan informasi ini, tnumb dari lawan dari tim lima pada minggu ketiga dapat dijawab dengan urutan berikut : .LIST OFF captn FOR tnumb = 2 Jawaban keseluruhan masalah captn = Bill Black. Masalah #7 dapat dijawab dengan berbagai cara. Jawaban diatas mungkin yang paling langsung dan paling mudah dimengerti oleh pemakai pemula dBASE III. Jawaban kedua melibatkan penggunaan operator relasi JOIN. Bagian pertama dari jawaban kedua dari masalah #7 sarna seperti yang diberikan sebelumnya: Lane untuk tim lima selama minggu ketiga harus ditemukan (Lane = 5). ari sini ditentukan kembali bahwa lane lawan adalah lane enam. Berikutnya, urutan berikut hams dilaksanakan: .CLEAR ALL .SELECf 2 .USE team .SELECf I .USE sched .JOIN WITH team TO result FOR lane = 6 .AND.week= 3 .AND.; tnumb = team ->tnumb; FIELDS team ->captn .USE results .LIST OFF .USE .ERASE result Perbedaan mendasar dari kedua solusi bahwa JOIN dikerjakan secara eksplisit didalam versi kedua, sedangkan dalam versi pertama JOIN dilakukan oleh sang sekretaris. 107
Padajawaban kedua, perintah CLEAR ALL digunakan untuk menghindarkan kesalahan ALIAS, yang mungkin timbul dalam pengaturan wilayah kerja 1 dan 2 denR!nperimahpenRRabunRRn S~L~:CT.(k~~RIRhRfl ifli ~kRflrimhul ji~~ TEAM atau SCHED sudah digunakan pada masalah sebelumnya.) Perintah USE pada statement next-to-Iast pada file .dbf, yang baru dibentuk, sehingga dapat di ERASE tanpa kesalahan karena perintah berikutnya. Sebuah .dbf file tidak dapat dihapus jika sedang terbuka. MASALAH #8 :
Berapa banyak pin (tanpa handicap) yang dicapai Bill Black pada akhir minggu ketiga ?" Semua informasi yang dibutuhkan untuk menjawab masalah ini dapat ditemukan dalam relasi SCORES, walaupun jawaban akan tampak rumit karena perhitungan aritmatika harus dilakukan dalam dan antara tuple. Jawaban dibuat agak simpel dengan penggunaan fungsi SUM: .USE scores .SUM gamel + game2 + game3 TO total; FOR bname = 'Bill Black' .AND. week ~ 3 .? total Jawaban total
= 1381
SandBaggers" Masalah ini paling mudah dijawab menggunakan perintah JOIN. (Pemakai harus berhati-hati, dengan penggunaan JOIN, sejumlah besar tuple tidak dalam ,
proses. Pada kasus terburuk,jika relasi dengan "m" tuple di JOIN dengan relasi "n"
tuple, akan menghasilkan m kali n tuple.) Hasil yang diinginkan dari MASALAH #9 dapat dihasilkan dengan : .CLEAR ALL .SELECf 2 .USE team .SELECf 2 .USE bowler .JOIN WITH team TO result FOR team ~ tname = 'SandBaggers'; .AND. tnumb <> team ~ tnumb FIELDS bowler ~ bname .USE res'ult .LIST OFF .USE .ERASE result Jawabannya akan berupa dua puluh nama. 108
MASALAH #10 : "Selama minggu ketiga, bowler mana yang lebih baik dari Lisa Moore pada seri tiga game (tanpa handicap)?" Masalah ini akan dijawab dalam dua langkah proses:langkah pertama untuk menentukan nilai Lisa Moore pada minggu ketiga; langkah kedua untuk menemukan nama orang yang melampaui nilai Lisa Moore. Solusinya adalah: .CLEAR ALL .USE scores LIST OFF game1 + game2 + game3 FOR bname = Lisa Moore .AND. week = 3 Hasil disini nilai tiga game adalah 332 . LIST OFF bname FOR game 1 + game2 + game3 > 332; .AND week = 3 Hasil Akhir adalah daftar sembiIan belas nama. use score . list structure Structure for database Number of data records Date of last update Field
B:scores.dbf 96 OS/20/86
Field name
Type
BNAME WEEK GAMEl GAME2 GAME3
Character Numeric Numeric Numeric Numeric
Width
Dec I
1 2 3 4 5
** Total **
15 1 3 3 3 26
109
9.3
MENU UTAMA UNTUK PRAPEMROGRAMAN SOLUSI PERMASALAHAN
Pada seksi terdahulu, dijelaskan solusi untuk beberapa masalah simpel. Diasumsikan bahwa sekretaris bowling akan memasukkan perintah perintah untuk jenis solusi ini langsung dari terminal. Begitu permasalahan menjadi lebih rumit, urutan perintah-perintah yang diperlukan menjadi lebih panjang dan harus dimasukkan langsung oleh sekretaris. Dalam kasus ini, daftar masalah yang potensial dapat ditempatkan di menu dan menu ditampilkan pada terminal komputer. Jika sekretaris ingin memilih salah satu masalah, program yang ditulis dalam bahasa pemrograman dBASE III akan menjawab permasalahan. Bagian berikut dari bab ini menguji beberapa menu dalam detail. Masalah-masalah khusus yang ditempatkan pada menu yang dianggap beralasan ,tetapi daftar permasalahan tidak melelahkan, dan dapat Menu contoh, seperti yang dilihat sekretaris ketika menjalankan program tampak pada gambar 9.5. Jalur utama modul program yang tampak pada menu ini, dan menerima pilihan masalah, bernama "sdbmain.prg." Modul ini ditunjukkan pada gambar 9.6. Setiap lima pilihan menu pertama menghasilkan pelaksanaan dari modul program yang berbeda. Beberapa dari modul tingkat kedua memanggil modullain untuk membuat tugas tertentu. Semua modul program yang terlibatdalam penggunaan menu utama dibahas secara rinei pada bagian berikut pada chapter ini. Logic yang terkandung dalam sdbmain.prg mengulang urutan berikutsampai diambil pilihan "6" yang mengakhiri pelaksanaan. 1. 2. 3.
Display the main menu Wait for input Choice If the choice was valid then Transfer control to the appropriate program module Else Print out an error message; delay for about two seconds; and return to 2 above. MONDA Y_NIGHT _IRREGULAR_BOWLING_LEAGUE_QUERY 1 - DISPLA Y STATISTIC FOR AN INDIVIDUAL BOWLER 2 - DISPLA Y TOTAL PINS FOR EACH TEAM 3 - DISPLA Y TEAM STANDINGS 4 . DISPLAY SCHEDULE FOR A GIVEN WEEK 5 - GENERATE AN END-OF-SEASON REPORT 6 - RETURN TO DBASE III COMMAND LEVEL
-
Enter your choice
Gambar 9.5 Menu utama untuk database sekretaris bowling 110
_MENU
* lype dsdbmain.prg *******************MAIN PROGRAM FOR SECRETARY'S DATABASE ** * Program name is "DSDBMAIN.PRG" * Wriuen by Glenn A. Jackson" * Oakland Universily Rocbesler, MI 48063 * Bowling leagues may use lhis program - allheir own disk * CLEAR SET TALK OFF CLOSE DATABASE SET DEFAULT TO B PUBLIC mac_wk, bavg, hadkp, saveil * * Lisllhe query mend for lhe user and accepllhe nexl query * choise * DO WHILE .l. CLEAR @ 5,IOSAY 'MOND.AYNIGHTIRREGULARS BOWLING LEAGUE QUERY MENU' @ 6,10 SAY '=================================================' @ 9,10 SAY' 1 - DISPLAY STATISTICS FOR AN INDIVIDUAL BOWLER' @ 11,10 SAY' 2 - DISPLAY TOTAL PINS FOR EACH TEAM' @ 13,10 SAY' 3 - DISPLAY TEAM STANDINGS' @ 15,10 SAY' 4 - DISPLAY SCHEDULE FOR A GIVEN WEEK' @ 17,10 SAY' 5 - GENERATE AN END-OF-SEASON REPORT' @ 19,10 SAY' 6 - RETURN TO DBASE III COMMAND LEVEL' @ 22,10 SAY' Enler your choice' WAIT' , TO Choice DO CASE
CASEChoice= 'I'
STORE 'SDB' TO ECS_check DO b:bwlrsl CASE Choice = '2' DO b:leampns CASE Choice = '3.
DO b:leamsld
CASE Choice = '4' DO b:wkschdl
CASE Choice = '5' DO b:eosrpl
CASE Choice ='6' CLEAR CLOSE DATABASES @ 5,10 SAY 'THE SECRETARY'S DATABASE -AS BEEN CLOSED" @ 6,10 SAY'YOU ARE BEING RETURNED TODBASEIIICAMMAND LEVEL' SET DEFAULT TO A SET TALK ON RETURN OTHERWICE @ 22,10 SAY 'YOU HE ENTEREND AN INVAL IS EN1RY II!!!' DO b:delay ENDCASE CLOSE DATABASES ENDDO
Gambar 9.6 Modul program utama untuk database sekretaris 111
DELAY.PRG adalah Modul program pendek yang disebut SbdMain.prg, sewaktu dua detik penundaan (2 second delay) dibutuhkan. Salinan (copy) dari delay.prg akan diberikan pada figure 9.7. Program ini tidak melakukan apa-apa melainkan penambahan pada sekitar alur berantai (loop) wktu secukupnya untuk menggunakannya kira-kira 2 detik. Sec. 9.4 Program Module BWLRST.PRG * type delay.prg ************ two second delay module ************ * * Program module name is "delay.prg" * Wriuen by Glenn A. Jackson * Oarland, University, Rochester, MI 48063 ...
* ... This module gives an appronimaLe Lwo second delay before * returning to the calling program ...
STORE 0 TO delay _ctr DO WHILE delay _ctr < 50
STOREdelaY3tr + 1 to delay_ctr ENDDO RETURN Gambar 9.7 Modul two-second delay delay.prg
9. 4
MODUL PROGRAM BWLRST. PRG
Modul ini akan dipanggil oleh "SbdMain.prg" ketika menu utama menunjukan yaitu "1 - DISPLAY STATISTICSFOR AN INDIVIDUAL BOWLER". Pelasanaan dari hasHperhitungan modul dan hasil statistic terhadap akhir pemain Bowling dari 1minggu yangdiberikan dalam suatumusim. Modul membutuhkan/meminta minggu yang diinginkan untuk data statistik yang dibutuhkan dan nama pemain Bowling. Modul akan mengecek untuk membuat yakin bahwa nama dan minggunya ke dua merupakan nilai yang berlaku. Logika umum dari modul diuraikan dalam figure 9.8. dan implimintasi Dbase III dijelaskan dalam Figure 9.9. Sedangkan hasil tipe daTi modul akan ditemukan dalam Figure 9.10 (hal 121) ke 2 point ini berhubungan dengan Bwlist.prg membutuhkan uraian lebih lanjut, perlakuan penama dengan ke 2-.nya("IF eos_check = 'SDB''') pemyataan itu yang timbul dari modulnya. "Blwrst.prg" dapat dipanggil daTi2 module program yang berbeda : "SdbMiiin.prg" dan "eosrpt.prg" Sewaktu "Bwlrst.prg" dipanggil daTi "SbdMain.prg", seluruh modul dapat dijalankan. Sewaktu "Bwlrst.prg"dipanggil dari "eosprt.prg", sebagian besar daTi logika modul terlongkap, sehingga diketahui nama dari pemain bowling dan minggu yang ditetapkan dalam kasus yang akan datang. 112
Sebelum "Bwlrst.prg" dipanggil dari "SdbMain.prg", nilai dalam test "eos" menentukan terhadap "SDB", disamping itu test "eos" menetukan terhadap "cos" sebelum "blwrsp.prg" dipanggil dari "eosrpt.prg". Point ke 2 dari uraian perlakuan dari dua poin ini dengan perhitungan kegagalannya (rintangan). Rintangan dapat dipastikan 3 atau 4 perbedaan antara rata-rata yang berlaku dan 200dengan tanpa penghapusan tingkat rintangan. Rata-rata pemain bowling dan rintangannya adalah bilangan bulat yang ditetapkan oleh TRUNCATION, jika TRANCAnON tidak digunakan lagi dalam ke dua kasusnya maka "League Standing" akan berfungsi. Implementing use Bowling Secretary's Database Using Dbase III. LOGIC IF eos_check = 'SDB' WHEN BWLRST.PRG IS EXECUTED 1. Excecute findwk.prg to find the last week for written game scores have been entered into the SCORES relation. The value is returned as "sdb_wk" 2. Input the week of the season for which statistic are desired as "wk," and check the value for validity. 3. Input the name of the bowler whose statistics are desired "name," and check the value for validity. 4. For mach tuple in the SCORES relation in which the bname attribute value equals name, and the week attribute value is less than or equal to ~k : a. Check game 1, game2, and game3 to see if any have higher values than the current hi_game score; if so, save that value as hi_game; b. Check the sum of game1, game2, and game3 to see if the sumis higher than the current hi_series value; if sb, save the sum as hi_series; c. Add the sum of game 1, game2, and game3 to tocpins. 5.. Calculete this bowler's average and handicap and save then as "bavg" and "hndkp", respectively. 6. Output the results. LOGIC IF eos_check = 'EOS' WHENBWLRST.PRGIS EXECUTED Sections 1,2,3, and 6 above are skippec. Only sections 4 and 5 are executed. Figure 9.8. General Logic for program module bwlrst. prg.
9. 5
MODUL PROGRAM TEAMPNS. PRG
Modul ini akan dipanggil oleh "Sdbmain.prg" sewaktu menu utama memilih yaitu "2 - DISPLAY TOTAL PIN'S FOR EACH TEAM". Modul program ini memanggil "Findwk.prg" untuk menetukan minggu lalu untuk data yang masuk ke dalam Relasi 'SCORE' dan kemudian menetukan hasil dan menampilkan jumlah nomor dari "SCRATCN" untuk setiap TEAM. Sampel hasil dari "Teampns.prg" diterangkan 9.11. dan logika umum untuk "teampns.prg" diterangkan dalam 9.12 kemudian modul itu sendiri nampak pada Figure 9.13 (haI122). 113
Sewaktu membuat beberapa "Join" dalam data base program, ketelitian harus diusahakan untuk meyakinkan bahwa hasil dari "Join" akan menjadi hubungan yang terlalu lebar untuk penempatan ruangan yang kosong dalam disket berlungsi dalam "Join" yang digunakan "teampns.prg", TEMP 2 akan selalu mempunyai TUPLES. (3 games/week) * (4 bowlers/team) * (N week bowled) Jika itu merupakan minggu 4 season, N=4 tiap konstruksi dari Temp 2 akan menghasilkan generasi dari 4 Tuples. "Teampns.prg" memanggil Findwk.prg untuk menentukan season minggu yang lalu untuk yang sekornya telah dimasukan dalam hubungan "Score". Modul ini diterngkan dalam Figure 9.14.logika dalam modul ini membutuhkan 1 poin pengembangan. Tujuan dari modul adalah untuk menempatkan nilai atribut yang terbesar dalam 1minggu dari file database yang aktif, ini artinya bahwa hubungan (.dbf) yang dicapai pasti merupakan priod yang aktif untuk menjalankan"Findwk.prg" selama hubungan ke duanya yaitu "SCORE" dan "SCHED" mempunyai minggu sebagai atribut field. Jika "Score" merupakan hubungan yang aktif, nilai minggunya menunjukan yaitu "minggu lalu scorenya telah masuk ke dalam data base" sedang jika SCHED merupakan hubungan aktif, nilai minggunya menunjukan yaitu minggu yang lalu merupakan Bowling Season. "Findwk.prg" biasa digunakan untuk menunjukan kedua dari nilai minggunya.
114
* type bwlrst.prg
.
***********************************************************
* Procedure name is "bwlrs1.prg" * Written by Glenn A. Jackson * Oakland University, Rochester, MI48063 * * This procedure calculates and outputs the following * statistcs * on and individual bowler; Hight-series, Hight-game, Total * pins, average and handicap. All statistics include all * games bowled to date. * * Procedure is called by sdbmain.prg * CLEAR * * Initialize running sum variables and counting variables * STORE 0 TO hi_series,tot_pins,hi~ame STORE 1 TO CTR SELECT 1 USE B:SCORES * * Run this next section of code only if called from the * main menu. * IF eos_check = 'SDB' * * Find last week for which score have been entered - as * man_ wk * DO b:findwk * STORE' 'TO wk DO WHILE .1. @ 7,15 SAY 'IF YOU WISH THE STATISTICS FOR THE SEASON TO DATE' @ 8,15 SAY 'ENTER '+STR(max_wk,2)+; " THE LAST WEEK FOR WHICH DATA WERE ENTERED' @ 9,15 SAY 'OTHERWISE, ENTER THE WEEK DESIRED' @ 11,15 GET wk READ IF val(wk) > max_wk .OR. val(wk) < 1 @ 15,10 SAY 'THE WEEK INPUT IS INVALID !!!' DO b:delay STORE' , TO wk CLEAR ELSE CLEAR EXIT ENDIF
* ENDDO * Enter the bowler's name and make certain it is valid * STORE ' *
, TO name
Gambar 9.9 (a) Bagian penama dari modul program bwlrst.prg. 115
DO WHILE .t. @ 7,20 SAY' ENTER THE BOWLER'S NAME. e.g Joe Jones' @ 8,20 GET name READ COUNT FOR bname =name TO check IF check = 0 @ 12,20 SAY 'THE NAME ENTERED IS NOT IN THE DATABASE' @ 13,20 SAY 'CHECK IT AND RE-ENTER' DO b:delay STORE' , TO name CLEAR ELSE EXIT ENDIF ENDDO ENDIF * GOTO TOP DO WHILE ctr <= val(wk) LOCATE FOR bname = name .AND, week=ctr IF gamel > hi~ame STORE gamel TO hi~ame ENDIF IF game2 > hi~ame STORE game2 TO hi~ame ENDIF IF game3 > hi~ame STORE game3 TO hi~ame ENDIF _
STOREgamel + game2+ game3TO tot3 STORE tot-pins + tot3 TO tot_pins IF tot3 > hi_series STORE tot3 TO hi_series ENDIF STORE ctr + 1TO ctr ENDDO * STORE INT(tot-pins/(val(wk)*3) TO bavg IF bavg < 200 STOREINT«2oo - bavg)* 0.75) TO Imdkp .FO # ELSE STORE 0 TO lu1dkp ENDIF * * DO THIS SECTION ONLY IF CALLED FROM MAIN MENU *
IF cos_check = 'SDB' CLEAR @ 7,20 SAY 'STATISTICS FOR' + TRIM(bname) +' THI,m WEEK' + wk @ 8,20 SAY '=====================================' @ 10,20 SAY 'A VERAGE PINS PER GAME: '+ STR(bavg,3) @ 12,20 SAY 'TOTAL PINS - WITHOUT HANDICAP: '+STR(tot-pins,4) @ 14,20 SAY 'HIGH GAME SCORE TO DATE: '+STR(hi~ame,3) @ 16,20 SAY 'HIGH SERIES TO DATE: '+SRT(hi~ame,3) @ 18,20 SAY 'CURRENT HANDICAP: '+STR(hndkp,3) @ 22,20 SAY 116
WAIT CLEAR ENDIF RETURN
Gambar 9.9 (b) Penggalan keduan dari modul program bwlrst.prg STATISTICS FOR JEAN Adams THRU WEEK 3 AVERAGE PINS PER GAME: 1 : 7 TOTAL PINS - WITHOUT HANDICAP: 105 HIGH GAME SCORE TO DATE: 134 HIGH SERIES TO DATE: 381 CURRENT HANDICAP: 62 Gambar9.IO. Macam kelua~alldari pelaksanaan menu utama pilih "1" TOTAL SCRATCH PINS TROUGH WEEK 4 TEAM NO. 1. 2. 3. 4. 5. 6.
TEAM NAME AlIeyCats Inconsistens TenPins HiRollers Splitters SandBaggers
TOTAL PINS 6257 6172 6147 6798 6580 6534
Gambar 9.11 Contoh keluaran dari pelaksanaan modul program teampns.prg. 1. Execute findwk.prg to determine the last week for which score have been entered into the SCORES relation. 2. Output the header for the data that will be output, below. 3. For each team (using the variable "err" as both team number and loop counter), DO the following : a. JOIN the SCORE and BOWLER relations, where bowler -> tnumb = the selected team number and bowler -> bname = score -> bname to form a new relation, TEMP2, keeping only the game, game2, and game3 attributes (FIELDs). TEMP2 will hold all the game score for one team through the current week in the seson. b. Use the TEAM relation to determins the name of the team being evaluated using the team number as the identifying value. Save the name as "name", c. Use the TEAM relation to sum the game score for this team, and output the total team pins. 117
d. ERASE the temporary relation temp2.dbf from the database. e. Increment the team number (ctr) to the next value. Gambar 9.12 Logik umum untuk modul program teampns.prg Implementing the Bowling Secretary's Database using dBASE III · typete8J11pns.prg · Procedure name is "te8J11pns.prg" · Written by Glenn A. Jackson · Oakland. University. Rochester. MI 48063
.
· This procedure prints out the total number of wcratcn pinsfor · for aan tean for the season to data.
. · procedure is called by adbmaim.prg . CLEAR
CLOSE DATABASES SELECT I USE b:bowler SELECT 2 USE b:icores . Find last week for which scores have been entered -return as
· max_wk
DO b:findwk
.
· Print out the header for the ouput data.
.
@ @ @ @
5,20 6,20 7,20 8,20
SAY 'TOTAL SCRETCH PINS THROUGH WEEK'+ STR(max_wk.3) SAY '================================' SAY 'TEAM NO. TEAM NAME TOTAL PINS SAY
. · CALCULATE .
AND PRINT OUT THE DATA
STORE' , TO ctr DO WHILE ctr <= 6 SELL POINTER JOIN WITH scoreS TO b:temp2 FOR tnumb =etr .AND. ; score = score -> bname FIELD gamel,game2,g8J11e3 SELECT 2 USE b:te8J11
LOCATE FOR tnumb =ctr STORE tname TO name SELECT 4 USE b:temp2 SUM g8J11el,g8J11e2.game3 TO gml, gm2, gm3 @ 9+ctr, 20 SAY STR(ctr,4)+' '+name+' '+STR(gml+gm2+gm3) USE ERASE b:te8J11p2.dbf STORE etr+1 TO etr ENDDO @ 22,10 SAY' , WAIT RETURN
Gambar 9.13 Modul program teampns.prg 118
...
type findwk.prg ************************
FINDWK.PRG
****************************
* *Module name is "findwk.prg" *Written by Glenn A. Jackson *Oakland University, Rochester,
*
MI 48063
*This module determines the largest week value that has been *entered in the week attribute field in either the *scores.dbf or sched.dbf relation. The module assumes that *either scores.dbf or sched.dbf is the active database when *the module is executed.
* *Called by the following modules: * bwlrst.prg, teampns.prg, teamstd.prg,
wkschdl.prg
*
*The highest
*
week value
is returned
@ 10,15 SAY "MAKING SOME ma~:_wk = 0 GOTO TOP DO WHILE .NOT. EOF()
IF week
--
DON'T
GO
variable: AWAY
max_wk
!II
= week
Figure 9.14
9. 6
as the integer
> ma>:._wk
ma>:_._wk
ENDIF SKIP ENDDO * CLEAR RETURN
CALCULATIONS
and eosrpt.prg
The program module findwk.prg.
MODUL PROGRAM WKSCHDL.PRG
Modul program ini adalah sdbmain.prg pilih menu dari utama adalah 4 DISPLAY SCHEDULE FOR A GIVEN WEEK". Pelaksanaan dari modlil ini' menghasilkan keluaran dari suatu tabel yang memberikan nama-nama team, danjalur untuk setiap team yang ditugaskan, untuk minggu dalam suatu I1Jusimpenandingan. Modul permintaan minggu yang diinginkan sebagai suatu input, simpan nilai ini sebagai "inval," dan memperbaiki harga input adalah valid, sebelumnya. Satu macam keluaran dari pelaksanaan dari modul ini diberikan pada Gambar 9.15. Logikpadamoduldiberikan padaGambar9.16,dan modul sendiridi pelihatkan pada Gambar 9.17. Penerapan utama adalah JOIN yang membuat relasi sementara, TEMPI. Dalam kasus ini, relasi TEAM dan SCHED serra attribut tnumb, maka nama team dapat digunakan dalam output, dari pada nomor team.
119
THE SCHEDULE
FOR WEEK NUMBER
2
IIIIIIIIIIIIIII.IIUIIW~M'.~~.. T-EAM
LANE NUMBER ----------4 5 2 6 1 3
AlleyCats Inconsistents TenPins HiRollers Spli tters SandBagger.
Gambar 9.15 Keluaran dari modul program wkschdl.prg
1.
2.
Execute findwk.prg to find the last week in the s on. Th. la.t week v..luei. returned ... "max_wk." (Note th..tthe SCHED relation is pl..cedinto USE prior to the calling of findwk.prg, so that SCHED ia the rel..tionaeached by findwk.prg.)
Input.. v..lue de.ir.d,
for the week for which the .chedule is ..nd v.rify th..t the week one. Rep...tthis process
a. "inv..l,"
reque.ted
i. a v..lid
until the we.k is 3.
v..lid.
JOIN the TEAM ..nd SCHED relations where sch~d->week
inval, and .ched-)tnumb = team-)tnumb, to form a new rel..tion, TEMP1, keeping only the tname and lane attributes.
4.
Output
the data header.
5.
Output the tname ..nd lane values from TEMP1.
6.
ERASE the TEMP1 relation from the database.
Gambar 9.16 Logik umum untuk modul program wkschdl.prg
120
=
type wkschdl.prg
.
****************************************************************** * *Proc:edure name is "wkschdl.prg" *Written by Glenn A. Jackson *Oakland University, Rochester, HI 48()b3 * *This procedure prints out the schedule far a given week. * *Input is the week of the season for which the schedule is *desired. *Output is the schedule giving team name and lane aS3iqnment. * *Procedure is called by sdbmain.prq * * CLEAR CLOSE DATABASES SELECT 1 USE b:sched
STORE * *Find
*
DO
TO inval last week
in the season
-- value
returned
as max_wk
b:findwk
* DO WHILE
. t.
~ 7,10 SAY 'ENTER WEEK FOR WHICH SCHEDULE IS DESIRED' ~ 9,10 SAY 'ONLYVALUES BETWEEN 1 AND '+ STR(max_wk,2) + ' ALLOWED' . 11,10 GET inval READ IF VAL(inval).> max_wk .OR. VAL(inval) ( t ~ 15,10 SAY 'THE WEEK INPUT IS INVALID !~,o0' DO b:delay STORE 'TO inval CLEAR ELSE EXIT ENDIF ENDDO * ~ 15,10 SAY
'PLEASE WAIT
SELECT 2 USE team SELECT sched JOIN WITH team TO tnumb
* *Output
*
b:templ FOR team-}tnumb
=
the schedule
CLEAR (i5,10 SAY . 6,10 SAY SAY (jI 7,10 @ 8,10 SAY
CALCULATIONS
to the
BEING
MADE!!
0'
week = VAL (in val) .AND. ; FIELDS team-~tname, lane
screen
THE SCHEDULE FOR WEEK NUMBER =============================='
TEAM
LANE
'+
inval
NUMBER'
-----------
*
SELECT 3 USE b:templ GOTO TOP STORE 9 TO linene DO WHILE .NOT. EOF() 8 linene,10 SAY' STORE lineno+l TO linene SKIP ENDDO 822,10SAY' WAIT CLEAR CLOSE DATABASES ERASE bltempl.dbf
+ tname
+ '
'+ STR
RETURN
Gambar 9.17 Modul program wkschdl.prg 121
9.7
MODUL PROGRAM EOSRPT.PRG
Modul program ini adalahsdbmain.prg jika dari menu utama dipilih "5GENERATE AN END-OF-SEASON REPORT." Pelaksanaan dari modul ini menghasilkan penentuan dan keluaran dari nama-nama dari pemain yaitu (1) skor tertinggi pertandingan tunggal, (2) rangkaian 3-pertandingan, dan (3) rata-rata tertinggi pada akhir musim pertandingan. Keluaran dari modul ini untuk data dalam database diberikan pada Gambar 9.18. Logik pada modul tersebut diberikan dalam Gambar 9.19, dan modulnya sendiri diperlihatkan dalam Gambar 9.20. Suatu keistimewaan yang luar biasa dari eosrpt.prg adalah nama-nama dari pemain yang 'llemiliki skor tertinggi yang sarna dan memberikan kategori yang aman. Nama-nama dari pemain dengan skor tertinggi pada kategori yang diberikan tersimpan dalam suatu relasi unary berhubungan dengan kategori. Nama-nama inikhususnya dibuat relasi HIGHGAM, HIGHSER, dan HIGHAVG. Relasi-relasi unary karena setiap relasi hanya memiliki satu atribut, bname. Setiap skor pemain dinalisa, jika skomya ditemukan sarna dengan satu nilai yang tertinggi yaitu nama pemein adalah relasi yang diijinkan APPEND. Jika skor pemain lebih tinggi dari harga yang diperkirakan, relasi ZAP menghilangkan harga lama dan nama barn di APPEND. Ketiga relasi ini harus diciptakan sebelum program dilaksanakan, tetapJ setiap relasi selalu anggota ketika pelaksanaan dari eosrpLprg dimulai. Semua tupelotupel ERASE dari tiga relasi sebelum eosrpLprg di hentikan. Setelah dihapus, isi dari setiap relasi adalah output menggunakan suatu modul program pendek yaitu out.prg. Suatu listing program fileouLprg dan struktur yang pasti untuk setiap relasi-relasi khusus yang yang diberikan pada akhir bab.
END-OF-SEASON
REPORT
HIGHEST SINGLE GAME SCORE OF 202 WAS BOWLED BY THE FOLLOWING BOWLERCS). Roy Lan. Paul Mille,.. Rua..el Taylo,.. HIGHEST THREE GAME SERIES OF ~~9 WAS BOWLED BY THE FOLLOWING BOWLERCS)I Roy Lane Paul Mille,.. HIGHEST SEASON PER GAME AVERAGE OF 179 WAS BOWLED BY THE FOLLOWING BOWLERCS). Paul Mill.,..
Gambar 9)8 Keluaran dari eosrpLprg untuk data pada contoh data base 122
1.
EMecute proljlr.m modul. f.i ndwk. prg to determi n. tt\8 l..t week in the bowlinljl on. The l..t week v.lue i. returned
2. 3.
..
"maK_wk."
Initi.lize pertinent v.ri.ble.. DO the followinljl 10ljlic .. long .. left in the BOWLER r.l.tion. a)
Save the bname value tuple in "n.me.'1
from
the
there current
ar.
tuple.
bowler
b) EMecute program module bwlrst.prg (after setting variable eos_check to 'EOS') to determine the high.st single game score, highest three-game series scare, and the end-of-s.ason average for this one bowler. These values are returned in vari.bles IIhi_game,1I "hi_series," and IIbavg,1I respectiv.ly.
c) The highest single game score f~r
all bowlers is stored in "best_game" I thus, if hi_game> best_game, save hi_game as best_game, and ..ave the bowler's name in HIGHGAM after eliminating previous names. If hi_game b~t_game, save the bowler's name in HIGHGAM.
=
The highest three game series score for all bowlers is stored in "best_series"; thus if hi_series> best_series, save hi_series as b.st_seri.s, and save the bowler's name in HIGHSER after eliminating previous names. If hi_series a best_series, save the bowler's name in HIGHSER. The highest av.rage for all bowlers is stored in "best_avg"1 thus if bavg > best_.vg, save bavg a. best_avg, and .ave the bowler's name in HIGHAVG .fter eliminating previous names. If bavg > best_avg, save the bowler's name in HIGHAVG.
4.
Output
the final
values.
Gambar 9.19 Logik umum dari modul program eosrpt.prg
9. 8
MODUL PROGRAM TEAMSTD.PRG.
Modul sdbmain.prgjikadipilih dari menu utama"3-DISPLAYTEAM STANDINGS." Pelaksanaan dari modul ini menghasilkan keluaran record menang-kalah dari setiap team untuk satu minggu pada musim pertandingan. Modul dimulai dengan permintaan minggu dari musim pertandingan dimana kedudukan yang diinginkan. Setelah memastikan minggu yang di input adalah sah/valid, program menghitung record menang-kalah untuk setiap team dan mencetak kedudukan dalam bentuk tabular. lumlah lencana untuk setiap tern juga merupakan keluaran. Gambar9.21 memperlihatkan kedudukan team pada akhirminggu kedua untuk data yang tersimpan pada contoh database. Gambar 9.22 memberikan logik umum dari modul, ketika Gambar 9.23 memperlihatkan modul yang sebenarnya. Modul program ini jauh lebih rumit dalam penerapan, dan membutuhkim waktu untuk pelaksanaan. Perkiraan waktu yang dibutuhkan untuk menghitung kedudukan minggu pertama adalah 4 menit, ketika waktu yang dibutuhkan untuk menghitung kedudukan untuk minggu keempat adalah 12menit. Alasan untuk peningkatan pada waktu antara minggu pertama dan minggu ke empat adalah ringkasan data tidak disimpan satu minggu berikutnya. Maka pada suatu perintah untuk mnghitung 123
type .o.rpt.prg **************************************************************** *Proc.dur. n.m. i. ".o.rpt.prg".
*Written
by al.nn
A.
Jack.an
*O.kland Univ.r.ity, Roch..t.r, MI 48063
*
*This proc.dur. c.lcul.t.. .nd print~ out the .nd-of * r.port. *Proc.dur. i. c.ll.d by .dbm.in.prg. *This proc.dur. c.ll. bwlr.t.prg
on
*
CLEAR *80m. data will b. r.turn.d from "bwlr.t.prg" u.ing PUBLIC * v.riabl... PUBLIC nam., hi_..ri.., hi_g.m., b.vg, .o._ch.ck, fn.m., wk
*
. ~,10 SAY 'BE PATIENT -- THIS WILL TAKE SOME TIME-!!!!!'
*
SELECT 2 USE bl.ch.d
*
*Find la.t w..k in the
*
on -- v.lu. r.turn.d a. maK_wk.
DO blfindwk
*
SELECT :5 USE blbowl.r aOTO TOP STORE 0 TO b..t_..ri.., b..t_gam., b..t_avg SET SAFETY OFF DO WHILE .NOT. EOF() STORE bn.m. TO n.m. STORE STR(maK_wk,2) TO wk STORE 'EOS' TO .o._ch.ck DO blbwlr.t SELECT 4
*
IF hi_g.m. > b..t_g.m. STORE hi_game TO b..t_g.m. USE blhighg.m ZAP APPEND BLANK REPLACE bn.m. WITH n.m. USE ELSE IF hi_g.m. b..t_g... USE blhighg.m APPEND BLANK REPLACE bn.m. WITH n.m. USE ENDIF ENDIF
·
* IF hi_..ri..- > b..t_..ri.. STORE hi_..ri.. TO b..t_..ri.. USE blhigh..r ZAP APPEND BLANK REPLACE bn.m. WITH name USE ELSE
Figure 9.10 (a) First half of program module eosrpt.prg. 124
IF hi_..ri..
USE blhi;h..r APPEND BLANK
*
REPLACE bn.m. WITH n.m. USE ENDIF ENDIF
IF b.v;
*
- b..t_..ri..
> b..t_.v;
STORE b.vg TO b~.t_.vg USE blhigh.v; ZAP APPEND BLANK REPLACE bn.m. WITH n.m. USE ELSE IF b.vg - b..t_.vg USE blhigh.vg APPEND BLANK REPLACE bnam. WITH name UBE END IF ENDIF
SELECT bowler SKIP ENDDO *Print out h..d.r for .nd-of *
on output
(I~,2~ SAY 'END-OF-BEASON REPORT' (I6,2~ SAy......................
(I8,20 SAY 'HIGHESTSINGLE GAME SCORE OF
.
+ STR(b..t_g.m.,3)
.
(I9,20 SAY 'WAS BOWLED BY THE FOLLOWING BOWLER(S)I STORE "blhighg.m" TO fn.m. DO blflleout * ROW()+2,20 SAY 'HIGHESTTHREE GAME SERIES OF + STR(b..t_..ri..,3)
.(IROW()+1,20 SAY
.
'WAS BOWLED BY THE FOLLOWING BDWLER(S)I
.
STORE "blhigh&er" TO fn.m. DO blHl.out *
.
ROW()+2,20 BAY 'HIGHEST SEASON PER GAME AVERAGE OF + STR(b..t_.vg,3) SAY WAS BOWLED BY THE FOLLOWING BOWLER (S).I STORE "blhigh.vg" TO fn.m. DO blHl.out * .
(I ROW () +1 ,20
.
(I 24,20 SAY WAIT SET SAFETY ON RETURN .
B> Figure 9.10 (b) Second half of program module eosrpt.prg. 125
kedudukan minggu keempat, kedudukan untuk minggu pertama, kedua dan tiga hams dihitung kembali. Kenyataan ini adalah hasillangsung dari rancangan keputusan, dibuat pada bab 5, tidak menyimpan data pada database dapat menghitung dari atribut yang lain dalam database. Mengingat besarnya nilai waktu yang terlibat, rancangan keputusan hams tidak meragukan untuk dievaluasi kembali. (Dapat memakan waktu sekitar satu jam untuk menghitung kedudukan dalam waktu 15 minggu). Beberapa usul untuk penyusunan waktu pelaksanaan dibahas pada akhir bab ini. Teamstd.prg penggunaan relasi 'extra' permanen yang lain, T_STATS, bukan bagian dari rancangan database yang sebenarnya. Telasi ini memiliki 4 atribut: tnumb, wins, losses, dan totpins. Ketika relasi ini dibentuk, harga tnumb di set 1 sampai dengan 6,jumlah team dalam liga (persatuan), dan s~muaharga-harga atribut lain adalah no1.Semua harga-harga atribut, kecuali tnumbdi setkembali menjadi nol sebelum pelaksanaan program teamstd.prg dihentikan. T_STATS selalu memiliki 6 tupel, satu untuk setiap team dalam perkumpulan (liga), dengan tnumb sebagai kunci primer. Perkembangan pelaksanaan dari teamstd.prg, membuat perhitungan berdasarkan pada minggu demi satu minggu dan team demi team. harga-harga pada T_STATS disesuaikan.
MONDAY
NtBHT
IRREGULARS
BOWLING
LEAGUE
TEAM STANDINGS AT THE END OF WEEK NUMBER ===========================================
NAME --------TEAM
All.yCts Inconsistents TenPins HiRollers Sp 11 t ters
SndBaggers
WINS
----
:5.0 2.0 1.0 7.0 6.5 2.5
LOSSES
------
3.0 6.0 7.0 1.0 1.5 5.5
2
TOTAL PINS
---------3106 3038 3019 3358 3225 3181
Gambar 9.21 Kedudukan team pada akhir minggu kedua, keluaran dari teamstd.prg
126
1. 2.
3.
Execute findwk.prg to determine the last week for which scores have been entered into the SCORES relation. The last week value is returned as "max_wk." Input the value of the week for which standings are desired, as "in_wk," and verify that the week requested is valid. Repeat this proc.ss until a valid value of in_wk has been entered. For each lane (noted as In), DO the following for each week (noted as wk): a) JOIN the SCHED and BOWLER relations where sched-)week = wk, sched-)lane = In and sched-)tnumb = bowler-)tnumb, to form a new relation, NAMES, keeping only the bname, tnumb, and stavg attributes. (NAMES will hold the names of all bowlers from the team that bowled on a given lane on a given week in the season.) b) For each bowler, following: Locate
whose name appears
the tuple in SCORES
Determine
this bowler's
in NAMES,
for this bowler
handicap
DO the
and this week,
for this weekl
Add this bowler's individual game scores to the team totals for each game (including the current handicap). The code used here iSI BIA is the total pins for gamel for the team on an odd-numbered lane, while GIB is the total pins for gamel for the team on the opponent's even-numbered lane. B2A, G3A, G2B, and G3B 'have similar meaning. REPLACE totpins in T_STATS with the old value of totpins plus the sum of this bowler's three game scores (without handicap). Adjust the won and lost records for the last two teams analyzed. The coding here is that the team on the odd-numbered lane has its identifiers ending with "A," 0 "a," while the team on the even-numbe ed lane' has identifie s that end in "B," or "b."
4. 5. 6.
JOIN the T_STATS and TEAM elations whe e t_stats-)tnumb team-)tnumb to fo m a new elation, STATS, keeping only the wins, losses, tname~ and totpins att ibutes. Output the league standings f om STATS. ERASE STATS and ze o-out the app op iate att ibutes in T_STATS.
=
Gambar 9.22 Logik umum untuk modul program teamstd.prg.
127
9.9
STRUKTUR DARI RELASI SEMENTARA
Modul program eosrpt.prg dan teamstd.prg menggunakan beberapa relasi yang bukan bagian dari database yang dirancang. Relasi-relasi ini ditentukan sebagai relasi-relasi sementara (temporary relations), karena mereka mengandung arti hanya selama pelasanaan dari modul program yang diberikan. Isinya adalah kelanjutan dari pembuatan (created) dan penghilangan (destroyed), dan isinya tidak sah suatu modul program digunakan untuk menghentikan pelaksanaan program.
...................................-...........-............. B>type
team.td.prQ
*Pracedu... name
i.
*Thl. procedure * for any week.
calculate. The week
IIt..matd.prg"
*Wrltten by Barbara A. HacNell *Hodlfled by Glenn A. Jackson *Oakland University, Rochester, HI 4BObJ *
*
and print. out the leaQue .tandlnQ. I. Input from the terminal.
*ProcedureI. called by .dbmaln.prQ * *Thl. procedure u.e. several temporary relation. * Intermediate data required In the calculation.. * relations ar. dl.cu...d In Section 9....
.
to .tore These
*
.Thl.
procedure
call.
blhndkp_avQ.prQ
CLEAR SELECT 1 USE b..cor.. SELECT 2 USE blbowler SELECT J
USE b.t .tat. INDEX b.numb SELECT 4 USE
b..ched
SELECT':5 USE blteam
. . -
_Find l..t w..k for which
scor..
have b..n entered
-- ..
mAH_wk
SELECT .Cores DO blfindwk -Enter the w.ek for which the standlnQ. ar. de.Ired -- a. In_wk.
-
STORE' TO in wk DO WHILE .t. . 7,1:5SAY 'IF YOU WISH THE LEAGUE STANDINGS FOR THE SEASON TO DATE' . B,I:5SAY 'ENTER '+STRlmax_wk,2)+ , " THE LAST WEEK FOR WHICH DATA WERE ENTERED' 9,1:5SAY 'OTHERWISE, ENTER THE WEEK DESIRED.' 11,1:5GET In wk READ IF VALlIn_wk) > max_wk .OR. VALlln_wk) ( I . 1:5,10SAY 'THE WEEK INPUT IS INVALID! '!!' DO bldelay STORE' 'TO In_wk CLEAR ELSE CLEAR EXIT ENDIF ENDDO
..
-Calculat. -
team standlnQs for w..ks 1 thru In_wk.
STORE 0 TO GIA,G2A,GJA,G1B,G2B,GJB STORE 1 TO In,wk
Gambar 9.23 (a) modul program teamstd.prg (1)
128
DO WHILE wk <- VALCin_wk) SELECT .ch.d JOIN WITH bow1.r TO blnam.. FOR w..k-wk .AND. 1an.-ln .AND., tnumb-bow1.r->tnumb FIELDS bowl.r-)bnam., tnumb. .tavQ SELECT 6 USE blnam.. SELECT t_.tat. SEEK name.->tnumb SELECT name. DO WHILE .NOT. EOFC) SELECT .core. LOCATE FOR bnam.-nam..-)bnam. .AND. w..k-wk IF wk-1 IF name.-).tavQ < 200 STORE INTCC200-nam..-).tavQ)*0.7~) TO hndkp ELSE STORE 0 TO hndkp ENDIF ELSE STORE bname TO ha_name STORE wk-1 TO ha_week DO blhndkp_av'ij ENDIF IF 1n-1 .OR. 1n-3 .OR. 1n-~ STORE game1+hndkp+G1A TO G1A STORE Qame2+hndkp+G2A TO G2A STORE gam.3+hndkp+G3A TO G3A ELSE STORE 'ijame1+hndkp+G1B TO G1B STORE game2+hndkp+G2B TO G2B STORE 'ijame3+hndkp+G3B TO G3B ENDIF SELECT t_stats REPLACE totpins WITH , totpin.+.core.->Qam.1+.cor..->Qam.2+.core.->gam.3 SELECT nam..'
*
SKIP ENDDO IF In-2 .OR. 1n-4 .OR. 1n-6 GOTO TOP STORE tnumb TO t.amb SELECT t_.tat. STORE 1 TO count DO WHILE count < 4 STORE "G" + STRCcount,1) + "A" TO gamea STORE "S" + STRCcount,1) + "B" TO gam.b IF ~Qam.a < ~gam.b REPLACE win. WITH win.+1 FOR tnumb-t.amb REPLACE 10 WITH + 10 +1 FOR tnumb-t.ama ELSE IF ~gam.a > ~Qam.b REPLACE. win. WITH win.+1 FOR tnumb-t.ama REPLACE 10 WITH 10 + 1 FOR tnumb-t.amb ELSE REPLACE win. WITH win. + O.~, 10 WITH, 10 + o.~ FOR tnumb-t.ama .OR. tnumb-t..mb END IF ENDIF STORE count + 1 TO ~ount ENDDO
Gambar 9.23 (b) modul program teamstd.prg (2) 129
* IF GIA + G2A + G3A < GIB + G2B + G3B REPLACE wins WITH win. + 1 FOR tnumb=te.mb REPLACE 10 WITH 10 + t F'OR tnumb=teama ELSE IF GIA + G2A + G3A > GIB + G2B + G38 REPLACE win. WITH win. + 1 FOR tnumb=teama REPLACE 10sse. WITH 10&&&s + 1 FOR tnumb=teamb ELSE REPLACE wins WITH win. + o.~, 10..es WITH I 10 + o.~ FOR tnumb-t..m. .OR. tnumb=t..mb ENDIF ENDIF STORE ° TO GIA,G~A,G3A,GIB,G2B,G3B ELSE GOTO TOP STORE tnumb TO teama ENDIF IF 1n .. b STORE 1 TO In STORE wk + 1 TO wk ELSE STORE 1n + 1 TO 1n ENDIF SELECT n.mes USE ERASE b:n.mes.dbf ENDDD. SELECT t_st.t. JOIN WITH team TO b:stat. FOR tnumb=te.m->tnumb FIELDS win.,10 ,tn.me,totpln. SELECT 7 USE b:st.ts MONDAY NIGHT IRREGULARS BOWLING LEAGUE' (t 5,10 SAY TEAM STANDINGS AT THE END OF WEEK NUMBER ' (I 6,10 SAY'
===========================================1 TEAM NAME WINS LOSSES TOTAL --------------
" 7,10 SAY , (I 9,10 SAY (I 10,10 SAY'
*
PINS' ----------.
DO WHILE .NOT. EOF() (tROW()+1,10 SAY tname +' '+STR(wins,4,1)+ ' STR(10s.e.,4,1)+' '+ STR(totpins,5) SKIP ENDDO SELECT st.ts USE ERASE blstat..dbf SELECT t._.tat. REPLACE ALL win. WITH 0, 10s.e. WITH 0, totpins WITH °
*
(I 22,10
SAY
WAIT RETURN
B>
Gambar 9.23 (c) modul program teamstd,prg (3)
130
'+
Gambar 9.24 memperlihatkan struktur untuk tiga relasi-relasi semantara yang tidak memiliki populasi (kosong)kecuali selamapelaksanaan darieosrpt.prg. Gambar 9.25 diberikan strukturdari T_STATS, dan isi dari T_STAT akan ditampilkan pada awal dan akhir pelaksanaan dari teampns.prg.
..
highgam list structure structure for database: B:highgam.dbf Number of data records I 0 Date of last update : 11/03/86 Field Field name Type Width 1 BNAME Character 15 ** Total ** 16 use
Dec
(a)
.
.
use list
highser structure
Structure for database I Blhighser.dbf Number of data records I 0 Date of last update : 11/03/86 Field Field name Type Width 1 BNAME Character 15 ** Total ** 16
Dec
(b)
.
highavg structure Structure for database: B:highavg.dbf Number of data records : 0 Date of last update : 11/03/86
.
use list
Field Field name Type Width Character 1~ 1 BNAME ** Total **
Dee
16 (c)
Gambar 9.24 Strukturdari3 relasi sementarayangpadaawalnyatidakmemiliki populasi
131
.
. listuse
t_stats structure Stru~tur. ~or databac~ : e:t_stats.db~
Number of data records I 6 D.te of l.st update I 11/03/86 Field Field name Type Width 1 TNUMB Numeric 1 2 WINS Numeric 4 3 LOSSES Numeric 4 4 TOTPINS ** Total **
Numeric
Dec 1
1
5 15
(a)
.TNUMB list 1 2 3 4 5 6
off WINS LOSSES TOTPINS 0.0 0.0 0 0.0 0.0 0 0.0 0.0 0 0.0 0.0 0 0.0 0.0 0 0 0.0 0.0 (b
Gambar 9.25 (a) Struktur dan (b) isi awal dari relasi sementara T_ST ATS
.**************************************************************** *Procedure name is "fileout.prg". *Written by Glenn A. Jackson *Oakland University, Rochester, MI 48063 * *This procedure outputs names from several * created by e08rpt.prg. * *procedure is called by eosrpt.prg
temporary
relations
*
*The name of the rel.tion to be output is contained in variable * fn.me. The relation h.s only one .ttribute. bname. * USE
~fname
GOTO TOP DO WHILE .NOT. EOF() ~ROW()+1,30 SAY bname SKIP ENDDO ZAP RETURN
Gambar 9.26 Modul program fileout.prg yang disebut eosrpt.prg
132
Suatu daftar dari fileout.prg, modul program dimana keluaran isi dari relasi
HIGHGAM,HIGHVG,dan HIGHSER,diberikanpadaGambar9.26.
9.10
KEBUTUHAN (INPUT)
.
UNTUK SUATU MENU KELUARAN
Menu dari item-item diberikan pada gambar 9.1 membicarakan tentang bagaimana cara pengambilan data dari database. Menu tidak membantu sekretaris dalam menambah tuple pada database. Masalah yang umum ditemukan oleh sekretaris adalah dalam menabah nilai permainan bowling pada minggu kelima. Di bagian ini diharuskan menulis dengan cepat, di dalam database berisi data eletronik dimana standaryang digunakan dalam dBase III adalah perintah APPEND dan EDIT. Perintah ini banyak berkaitan dalam database untuk melihat pandangan dari nilai, di dalam keterangan perintah APPEND dan EDIT tidak mengeceklmembandingkan kunci primer(primary key) yang sarna. Disain dari database yang asli dengan nyata tidak memperbolehkan terjadinya kerangkapan kunci primer. Jika kondisi itu dijalankan, penulis software hams dirancang dan akan menunjukkan tupel-tupel yang dimasukkan kedalam database yang menyebabkan adanya duplikasi kunci primer.
1.
USE bowl.r.
2.
Input valu.. for attribute. and g.me3 a. variable valu.. respectiv.ly.
3.
COUNTthe number of tupl..
4
IF COUNT .. 0 then APPEND the n.w tuple ELSE output an .rror m a new tupl..
and
week
bname, w.ek, game1, gam.2, nam., ~~, g1, g2, and g3, wh.re
.. wk.
bname
to the
relation
g.
..k
.nd
K
name
for
Figure 9.27 Logic to keep duplicate primary keys out of the BOWLER relation.
133