bab9 pelaksanaan landas data sekretaris bowling menggunakan dbase3

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

** TOlal **

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

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
15
characler
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
Jean Adams
3
123
134
124
156
Steve Adams
3
134
135
Bill Black
3
1~6
16~
162
Bonnie Black
3
123
111
119
Bo Blow
3
165
121
1~8
Jo Blow
3
89
120
99
16~
Jim Smith
3
164
14~
114
132
Mary Smith
3
112
Ann Jane.
3
108
109
112
John Jane.
3
14~
146
144
Joe Brown
3
136
144
12~
Sue Brown
3
124
123
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
100
121
Steve Adam.
4
131
127
132
Bill Black
4
137
169' 154
Bonnie Black
4
119
113
121
Bo Blow
4
143
147
157
Jo Blow
4
89
98
99
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 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
1
2
3
4
5

B:scores.dbf
96
OS/20/86

Field name

Type

BNAME
WEEK
GAMEl
GAME2
GAME3

Character
Numeric
Numeric
Numeric
Numeric

** Total **

Width

Dec
I

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 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 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
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
===========================================
TEAM NAME
---------

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

the tuple

Determine

whose name appears
in SCORES

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 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'
" 7,10 SAY ,
(I 9,10
SAY
(I 10,10 SAY'

*

===========================================1
TEAM NAME
WINS
LOSSES
TOTAL
--------------

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