1. PELAKSANAAN LANDAS DATA SEK-
RETARIS BOWLING MENGGUNAKAN
DBASE III
Bab ini berisi tiga bagian penting dari infonnasi : (1) Contoh daftar-
daftar 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 masalah-
masalah 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. 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 WEEK LANE
] ] 1
2 ] 2
3 ] 4
4 ] 3
5 ] 6
6 ] 5
] 2 4
2 2 5
3 2 2
4 2 6
5 2 ]
6 2 3
I 3 3
2 3 6
. list structure 3 3 ]
Structure for dalabase B:sched.dbf 4 3 4
Number of dala record 24 5 3 5
Date of last update 05/('1)/86 1 4 5
Field Field Name Type Width Dec 2 4 I
1 TNUMB Numeric ] 3 4 3
2 WEEK Numeric ] 4 4 2
3 LANE Numeric ] 5 4 4
** TOlal ** 4
w ~
Gambar 9.1 (a) Struktur (b) Isi dari relasi SCHED.
100
3. 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 B : leam.dbf
Number of dala records 6
Date of lasl updale 05/10/86
Field Field name Type Widlh Dec
1 TNUMB Numeric 1
2 TNAME Character 15
3 CAP1N characler 15
** TOlal ** 32
lisl off
TNUMB TNAME CAP1N
I AlleyCalS Ann Jones
2 Incosistenls Bill Black
3 TenPins Lisa Moore
4 HiRollers Jill Miller
5 Spliuers Roy Lane
6 SandBaggers Cindy Fox
(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
4. 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 pe-
rintah-perintah DBASE III, tanpa mengandung perintah-perintah bahasa pemro-
graman 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 B : bowler.dbf
Number of data records: 24
Date of last update OS/20/86
Field Field name Type Width Dec
1 BNAME Character 15
2 TNUMB Numeric 1
3 PHONE Character 8
4 STRET Character 20
5 STAVO Numeric 3
** Total'** 48
(a)
102
5. list off
BNAME TNUMB PHONE STRET STAVG
Jean Adams 5 689-1234 10 Robin St 111
Steve Adams 5 689-1234 10 Robin St 130
Bill Black 2 689-2345 15 Bluebird Ln 149
Bonnie Black 2 689-2345 15 Bluebird Ln 120
Bo Blow 2 NONE 12 Meadowbrook Ln 143
Jo Blow 2 NONE 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 Cardinal St 103
Randy Fox 6 689-5678 19 Cardinal Ln 147
Ann Jones 1 689-4365 12 Finch Dr 105
John Jones 1 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-8901 11 Lark Dr 115
Mike Moore 3 689-8901 11 Lark Dr 140
Jim Smith 1 689-9012 13 Finch Dr 152
Mary Smith 1 689-9012 13 Finch Dr 115
Russel Taylor 6 689-0123 20 Cardinal St 161
Ruth Taylor 6 689-0123 20 Cardinal St 119
Dan White 4 689-2143 16 Robin St 158
Jan White 4 689-2143 16 Robin St 121
Gambar 9.3 (a) Struktur (b) isi dari relasi BOWLER.
103
6. 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 Dec
1 BNAME Ch.rActer 15
2 WEEK Numeric 1
3 GAME 1 Numeric 3
4 GAME2 Numeric 3
~ GAME3 Numeric 3
** Tot.l ** 26
(a)
Contoh-contoh yang diberikan pada bagian iniberasumsi bahwa disket sistem
dBASE III berada pada drive A dari IBM PC, dab relasi database pada drive B.
Sebelum menjalankan dBASE III,disket yang digunakan harus di set .ke B. lni
dijalankan dengan perintah
.SET DEFAULT TO B
MASALAH #1: " Siapakah kapten regu nomor empat ?" .
Masalah inimudah, jikasemua informasi
yang diperlukan
untukmenjawab
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
7. li.t off for week <- 2 li.t off for week >- 3
BNAME WEEK GAMEl GAME2 GAME3 BNAME WEEK GAMEl GAME2 GAME3
Jean Adam. 1 119 120 94 Jean Adams 3 123 134 124
Steve Adams 1 112 140 138 Steve Adams 3 134 156 135
Bill Black 1 137 1~~ 1~~ Bill Black 3 1~6 16~ 162
80nnie BlACk 1 120 12~ 11~ Bonnie Black 3 123 119 111
Bo Blow 1 160 14~ 12~ Bo Blow 3 165 121 1~8
Jo Blow 1 101 91 93 Jo Blow 3 89 120 99
Jim Smith 1 160 1~0 146 Jim Smith 3 164 16~ 14~
Mary Smith 1 120 110 11~ Mary Smith 3 112 114 132
Ann Jon.. 1 98 110 107 Ann Jane. 3 108 109 112
John Jane. 1 14~ 1~0 134 John Jane. 3 14~ 146 144
Joe Brown 1 140 127 129 Joe Brown 3 136 144 12~
Bue Brown 1 121 128 124 Sue Brown 3 124 123 119
Cindy FolC 1 119 110 83 Cindy FolC 3 99 110 107
Randy FolC 1 143 1~0 148 Randy FolC 3 1~0 161 146
Ru...l TAylor 1 167 1~0 166 Ru..el Taylor 3 189 179 . 167
Ruth Taylor 1 110 12~ 122 Ruth Taylor 3 135 112 132
Joy LAne 1 126 127 122 Joy Lane 3 123 132 10~
Roy Lane 1 14~ 180 176 Roy Lane 3 201 202 1~6
Jill Miller 1 111 101 112 Jill Miller 3 108 112 101
PAul Miller 1 180 196 134 Paul Miller 3 198 167 18~
Dan White 1 1~6 163 1~4 Can White 3 161 162 149
Jan Whit. 1 130 12~ 108 Jan White 3 119 123 141
li.A Moore 1 99 120 111 Li.a Moore 3 121 107 104
Mike Moore 1 1~0 149 121 Mike Moore 3 148 148 1~1
Jean Adam. 2 120 12~ 100 Jean Adam. 4 111 121 100
Steve AdAm. 2 130 146 140 Steve Adam. 4 131 127 132
Bill Black 2 1~4 149 148 Bill Black 4 137 169' 154
80nnie Black 2 120 130 110 Bonnie Black 4 119 121 113
80 Blow 2 1~9 13~ 12~ Bo Blow 4 143 157 147
Jo Blow 2 10~ 91 90 Jo Blow 4 89 99 98
Jim Smith 2 160 160 170 Jim Smith 4 1~8 163 169
Mary Smith 2 120 110 90 Mary Smith 4 116 117 97
Ann Jones 2 100 110 110 Ann Jones 4 103 68 121
John Jones 2 1~8 138 13~ John Jone. 4 148 137 1~8
Joe Brown 2 139 138 12~ Joe Brown 4 130 127 146
Sue Brown 2 126 124 110 Sue Brown 4 124 126 128
Cindy FolC 2 104 90 108 Cindy FolC 4 104 109 110
Randy FolC 2 1~0 137 163 Randy FolC 4 152 153 154
Ru..el Taylor 2 160 16~ 1~0 Ru.sel Taylor 4 16~ 158 202
Ruth TAylor 2 130 123 108 Ruth Taylor 4 119 123 117
Joy Lane 2 130 11~ 120 Joy Lane 4 126 130 128
Roy Lane 2 183 179 138 Roy Lane 4 170 168 186
Jill Miller 2 110 98 103 Jill Miller 4 110 118 10~
Paul Miller 2. 180 174 178 Paul Miller 4 176 202 181
Dan White 2 161 1~~ 1~6 Can White 4. 156 149 1~7
JAn White 2 124 119 130 Jan White 4 124 121 115
lisa Moore 2 120 102 100 Li.a Moore 4 110 126 106
Mike Moore 2 1~1 140 12~ Mike Moore 4 14~ 148 162
(b)
Gambar 9.4 (a) Struktur dan (b) Isi dari relasi SCORES
105
8. Jawaban
bname phone
Joe Brown 689-4567
Sue Brown 689-4567
Lisa Moore 689-8901
Mike Moore 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 me-
meriksanya 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 juga
menghendaki penjumlahan dalam permasalahan.
.USE scores
.OUNT FOR gamel + game2 + game3 > 550
106
9. 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 dari-
pada 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
10. 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 ~kRflrimhul ji~~ TEAM
ifli
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
11. 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 men-
emukan 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 B:scores.dbf
Number of data records 96
Date of last update OS/20/86
Field Field name Type Width Dec
I
1 BNAME Character 15
2 WEEK Numeric 1
3 GAMEl Numeric 3
4 GAME2 Numeric 3
5 GAME3 Numeric 3
** Total ** 26
109
12. 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 dimasuk-
kan 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 pemro-
graman 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. Display the main menu
2. Wait for input Choice
3. 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 _MENU
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
13. * 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
14. 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
15. 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 kega-
galannya (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 TRUNCA-
TION, 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.PRG EXECUTED IS
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
16. 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
17. * 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
18. 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
19. 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. TEAM NAME TOTAL PINS
1. AlIeyCats 6257
2. Inconsistens 6172
3. TenPins 6147
4. HiRollers 6798
5. Splitters 6580
6. SandBaggers 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 cur-
rent 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
20. 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
· type
te8J11pns.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 SAY 'TOTAL SCRETCH PINS THROUGH WEEK'+ STR(max_wk.3)
@ 6,20 SAY '================================'
@ 7,20 SAY 'TEAM NO. TEAM NAME TOTAL PINS
@ 8,20 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, 8J11e2.
g 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
21. 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 and eosrpt.prg
*
*The highest week value is returned as the integer variable: max_wk
*
@ 10,15 SAY "MAKING SOME CALCULATIONS -- DON'T GO AWAY !II
ma~:_wk = 0
GOTO TOP
DO WHILE .NOT. EOF()
IF week > ma>:._wk
ma>:_._wk = week
ENDIF
SKIP
ENDDO
*
CLEAR
RETURN
Figure 9.14 The program module findwk.prg.
9. 6 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
22. THE SCHEDULE FOR WEEK NUMBER 2
IIIIIIIIIIIIIII.IIUIIW~M'.~~..
T-EAM LANE NUMBER
-----------
AlleyCats 4
Inconsistents 5
TenPins 2
HiRollers 6
Spli tters 1
SandBagger. 3
Gambar 9.15 Keluaran dari modul program wkschdl.prg
1. 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.)
2. Input.. v..lue for the week for which the .chedule is
de.ir.d, a. "inv..l," ..nd v.rify th..t the week
reque.ted i. a v..lid one. Rep...tthis process
until the we.k is v..lid.
3. 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
23. . 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 TO inval
*
*Find last week in the season -- value returned as max_wk
*
DO 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 CALCULATIONS BEING MADE!! 0'
SELECT 2
USE team
SELECT sched
JOIN WITH team TO b:templ FOR week = VAL (in val) .AND. ;
tnumb = team-}tnumb FIELDS team-~tname, lane
*
*Output the schedule to the screen
*
CLEAR
(i5,10 SAY THE SCHEDULE FOR WEEK NUMBER '+ inval
. 6,10 SAY =============================='
SAY TEAM LANE NUMBER'
(jI 7,10
@ 8,10 SAY
-----------
*
SELECT 3
USE b:templ
GOTO TOP
STORE 9 TO linene
DO WHILE .NOT. EOF()
8 linene,10 SAY' + tname + ' '+ STR<lane,2)
STORE lineno+l TO linene
SKIP
ENDDO
822,10SAY'
WAIT
CLEAR
CLOSE DATABASES
ERASE bltempl.dbf
RETURN
Gambar 9.17 Modul program wkschdl.prg
121
24. 9.7 MODUL PROGRAM EOSRPT.PRG
Modul program ini adalahsdbmain.prg jika dari menu utama dipilih "5-
GENERATE 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 tupelo-
tupel 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
25. 1. EMecute proljlr.m modul. f.i ndwk. prg to determi n. tt8 l..t
week in the bowlinljl on. The l..t week v.lue i.
returned .. "maK_wk."
2. Initi.lize pertinent v.ri.ble..
3. DO the followinljl 10ljlic .. long .. there ar. tuple.
left in the BOWLER r.l.tion.
a) Save the bname value from the current bowler
tuple in "n.me.'1
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 STAND-
INGS." 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
26. 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 on
* r.port.
*Proc.dur. i. c.ll.d by .dbm.in.prg.
*This proc.dur. c.ll. bwlr.t.prg
*
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. ·
USE blhighg.m
b..t_g...
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
27. IF hi_..ri.. - b..t_..ri..
USE blhi;h..r
APPEND BLANK
REPLACE bn.m. WITH n.m.
USE
ENDIF
ENDIF
*
IF b.v; > 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
(IROW()+1,20 SAY
+ STR(b..t_..ri..,3)
.
'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
(I ROW () +1 ,20
SAY
+ STR(b..t_.vg,3)
WAS BOWLED BY THE FOLLOWING BOWLER (S).I
.
.
STORE "blhigh.vg" TO fn.m.
DO blHl.out
*
(I 24,20 SAY .
WAIT
SET SAFETY ON
RETURN
B>
Figure 9.10 (b) Second half of program module eosrpt.prg.
125
28. 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 2
===========================================
TEAM NAME WINS LOSSES TOTAL PINS
--------- ---- ------ ----------
All.yCts :5.0 3.0 3106
Inconsistents 2.0 6.0 3038
TenPins 1.0 7.0 3019
HiRollers 7.0 1.0 3358
Sp 11 t ters 6.5 1.5 3225
SndBaggers 2.5 5.5 3181
Gambar 9.21 Kedudukan team pada akhir minggu kedua, keluaran dari
teamstd.prg
126
29. 1. 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."
2. 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.
3. 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, whose name appears in NAMES, DO the
following:
Locate the tuple in SCORES for this bowler and this week,
Determine this bowler's handicap 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. 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.
5. Output the league standings f om STATS.
6. 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
30. 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 kelanju-
tan 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.
*Wrltten by Barbara A. HacNell
IIt..matd.prg"
*Hodlfled by Glenn A. Jackson
*Oakland University, Rochester, HI 4BObJ
*
*Thl. procedure calculate. and print. out the leaQue .tandlnQ.
* for any week. The week I. Input from the terminal.
*
*ProcedureI. called by .dbmaln.prQ
*
*Thl. procedure u.e. several temporary relation. to .tore
* Intermediate data required In the calculation.. These
* relations ar. dl.cu...d In Section 9....
.
*
.Thl.
CLEAR
SELECT
procedure
1
call. blhndkp_avQ.prQ
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
31. 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
32. *
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
(t 5,10 SAY MONDAY NIGHT IRREGULARS BOWLING LEAGUE'
(I 6,10 SAY' TEAM STANDINGS AT THE END OF WEEK NUMBER '
" 7,10 SAY , ===========================================1
(I 9,10 SAY TEAM NAME WINS LOSSES TOTAL PINS'
(I 10,10 SAY' --------- ------ ----------.
*
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
33. 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.
.
. use
list
highgam
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 Dec
1 BNAME Character 15
** Total ** 16
(a)
. use highser
. list 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 Dec
1 BNAME Character 15
** Total ** 16
(b)
.
.
highavg
use
structure
list
Structure for database: B:highavg.dbf
Number of data records : 0
Date of last update : 11/03/86
Field Field name Type Width Dee
1 BNAME Character 1~
** Total ** 16
(c)
Gambar 9.24 Strukturdari3 relasi sementarayangpadaawalnyatidakmemiliki
populasi
131
34. . use t_stats
. list 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 Dec
1 TNUMB Numeric 1
2 WINS Numeric 4 1
3 LOSSES Numeric 4 1
4 TOTPINS Numeric 5
** Total ** 15
(a)
.TNUMB
list off
WINS LOSSES TOTPINS
1 0.0 0.0 0
2 0.0 0.0 0
3 0.0 0.0 0
4 0.0 0.0 0
5 0.0 0.0 0
6 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 temporary relations
* created by e08rpt.prg.
*
*procedure is called by eosrpt.prg
*
*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
35. Suatu daftar dari fileout.prg, modul program dimana keluaran isi dari relasi
HIGHGAM,HIGHVG,dan HIGHSER,diberikanpadaGambar9.26. .
9.10 KEBUTUHAN UNTUK SUATU MENU KELUARAN
(INPUT)
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 dijal-
ankan, 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. bname, w.ek, game1, gam.2,
and g.me3 a. variable valu.. nam., ~~, g1, g2, and g3,
respectiv.ly.
3. COUNTthe number of tupl.. wh.re bname K name
and week .. wk.
4 IF COUNT .. 0 then
APPEND the n.w tuple to the relation
ELSE
output an .rror m g. .nd ..k for
a new tupl..
Figure 9.27 Logic to keep duplicate primary keys out of the BOWLER relation.
133