AMIGA DATABASE

Eğer arkadaşlarınızın adreslerini ve telefon numaralarını saklayabileceğiniz kullanışlı bir database programına sahip olmak hoşunuza gidecekse hiç düşünmeden bilgisayarınızın karşısına geçip bu programı yazmaya başlamalısınız. Yaklaşık 9K'lık bir program olan AMIGA-DATABASE, AMIGA BASIC kullanılarak yazılmıştır. Programı çalıştırmak için önce AMIGA BASIC’i yükleyin ve liste penceresinden programı aynı şekilde yazın ve diskete kaydedin. Satır sonlarındaki semboller RETURN tuşuna basılacağını belirtmektedir. Programı yazarken dikkat edeceğiniz nokta sadece RETURN işareti olan yerlerde satırları bitirmeniz gerektiğidir. Yani RETURN işareti ile sonlanmamış bir satır, altta devam ediyor demektir. Siz de satıra ara vermeden RETURN tuşuna kadar olan tüm satırı yanyana ve ara vermeden yazmalısınız.

AMIGA-DATABASE'in kullanımı oldukça basit. Programı çalıştırdığınızda ekranda üç ayrı pencere açılıyor. Üst kısımdaki büyük pencere, kayıtların gösterildiği database penceresi. Onun altında veri girişinin yapıldığı başka bir pencere yer alıyor. Sağ alt köşedeki minik pencerede ise o an database penceresinde bulunan kaydın numarası gösteriliyor.

Programı çalıştırır çalıştırmaz kayıtları girmeye başlayabilirsiniz. Burada küçük harflerle yazdığınız isim, soyadı, adres vb. kayıtların ilk harfleri database ekranında büyük harf olarak değiştiriliyor. Ülke isimlerinin harfleri ise tamamen büyük harflere dönüştürülüyor. Kayıtları yazdıktan sonra satır numarasını yazarak istediğiniz kayıt üzerinde düzeltmeler de yapabilirsiniz. Bundan sonra, girdiğiniz kayıt diskete kaydediliyor.

Ana menüde fonksiyon tuşları veya mouse ile seçebildiğiniz beş ayrı seçenek var. Bunlar KAYIT GİRİŞİ (F1), KAYIT ARAMA (F2), KAYIT LİSTESİ (F3), KAYIT BASIMI (F4) ve PROGRAMDAN ÇIKIŞ (F5) olarak düzenlenmiş. Kayıt girmeye devam edecekseniz F1'i seçin. Beş ayrı kayıt girdikten sonra program, bunları alfabetik sıraya göre yeniden düzenleyecektir. Eğer F3'e basarak kayıtların listesine baktığınızda bunu kendiniz de görebilirsiniz.

F2 ile kayıt aramak isterseniz önce isim veya kayıt numarası soruluyor. Kayıt numarasını biliyorsanız bu numarayla hemen o kaydı ekrana getirebilirsiniz. Eğer isim yazarsanız ayrıca bir de soyadı girmeniz gerekli. Aradığınız kaydı bulduktan sonra ekranda çıkan altı değişik seçenekle kayıt üzerinde değişiklik yapabilir, kaydı silebilir, önceki veya sonraki kayda geçebilir, kaydı yazıcıya bastırabilir veya ana menüye geri dönebilirsiniz.

Program etiketler üzerine çıkış almanızı da sağlıyor. F4 seçeneğiyle tüm veya sizin belirteceğiniz harfler arasında kalan kayıtların çıkışını etiketler üzerine alabilirsiniz.

AMIGA-DATABASE'de 300 ayrı kayıt saklanabiliyor fakat prog- 
ramın ikinci satırındaki dosya değişkenini istediğiniz kayıt adedine 
uygun olarak ayarlayabilirsiniz. Ayrıca, kayıt satırlarının uzunluk- 
ları da program sonundaki DA TA satırlarından değiştirebilir. An- 
cak bu değişiklikten sonra daha önce, başka formatta kaydettiği- 
niz kayıtlarınızı kullanamazsınız. Bol programlı günler. 
DEFINT d-m,r,w-z: DEFSTR a-c,n,o,s,t <— 
dosya=300 : chrn=CHR$(248) : chrd=CHR$(208) <—  
OPTION BASE 1:DIM SHARED recno(dosya),sl(dosya),s2(dosya) <— 
DIM SHARED typestat(7),fs(7),s(7),stat(7),boxl(468),box2(930)
watch(86) <— 
SCREEN 1,640,200,3,2 <— 
, 
WINDOW 2, "DATABASE”,(0,0)-(617,144),7,1 <— 
WINDOW 4,"KAYIT#“(550,133)-(617,141),2,1 <— 
WIND0W 3,,(0,158)-(617,186),7,1  <—
PALETTE 0,.6,.9,.9:PALETTE 1,0,.5,.5 <— 
PALETTE 2,0,0,0:PALETTE 3,1,1,1 <— 
PALETTE 4,1,.8,.7:PALETTE 5,.8,.8,1 <— 
PALETTE 6,1,.8,.8:PALETTE 7,.9,0,0 <— 
LINE(32,5)-(108,18),7,b:PAINT(42,10),4,7:GET (32,5)-(108,18),boxl:CLS <— 
LINE(32,5)-(92,24),7,b:PAINT(42,10),4,7:GET (32,5)-(92,24),box2:CLS <— 
CIRCLE (40,12),12,2:PAINT (40,12),3,2 <—
LINE (40,12)-(39,9),2,b:LINE (40,12)-(45,12),2:GET (28,7)-(52,17),watch <—
setcity=chrn:setprov=chrn 
FOR i=1 TO 5:READ title1(i):NEXT 
FOR i=1 TO 6:READ title2(i):NEXT 
FOR i=1 TO 4:READ title3(i):NEXT 
FOR i=1 TO 7:READ typestat(i),fs(i):ln=ln+fs(i):NEXT 
ON ERROR GOTO hata 
OPEN "DATALAR" AS 1 LEN=ln 
FIELD 1,fs(1) AS s(1),fs(2) AS s(2),fs(3) AS s(3),fs(4) AS s(4), 
fs(5) AS s(5),fs(6) AS s(6),fs(7) AS s<7) 
ON ERROR GOTO 0 
rend=LOF(1)/ln:IF LOF(1)=0 THEN GOSUB giris 
FOR i-1 TO rend:recno(i)=i:NEXT:CALL sort 
rend-rend+1:s2=chrd 
WHILE LEFT$(s2,1)=chrd:rend-rend-1:GET 1,recno(rend):s2=s(2):WEND 
ana: 
WINDOW OUTPUT 2:COLOR 2,0:CLS 
WINDOW OUTPUT 4:COLOR 7,6:CLS:PRINT TAB(4)USING"###”;rend; 
WINDOW OUTPUT 3:COLOR 2,5:CLS:COLOR 2,4 
FOR f-1 TO 5:g=11*f-5:h=(g-2)*8:PUT (h,5),box2,PSET
LOCATE 2,g:PRINT title1(f);:LOCATE 3,g+2:PRINT USING"_£#";f; 
NEXT:a="" 
WHILE (a<CHR$(129) OR a>CHR$(135)) AND MOUSE(0)>-1:a=INKEY$:WEND 
IF a<> THEN ON ASC(a)-128 GOSUB giris,arama,tamliste,etiketler,etiketler,cikis  
ON INT((MOUSE(1)-40)/88)+1 GOSUB giris,arama,tamliste,etiketler 
cikis: 
MENU RESET: SCREEN CLOSE 1:END 
kayitoku: 
 GET 1,recno:FOR j=1 TO 7:stat(j)=s(j):NEXT:RETURN 
kayityaz: 
FOR j-1 TO 7:LSET s(j)=stat(j):NEXT:PUT 1,recno:RETURN 
giris: 
rend=rend+-1:IF recno(rend)=0 THEN recno(rend)=rend 
recno=recno(rend):GOSUB ulkelistesi 
WINDOW OUTPUT 4:C0L0R 2,6:PRINT TAB(4)USINGM###";recno; 
kayitgir 1:kayitgir 2:sf-stat(1):sl=stat(2) 
IF stat(l)=chrn AND stat(2)=chrn THEN rend=rend-1:RETURN ana 
FOR j=3 TO 7: kayitgir j:NEXT:GOSUB degistir
GOSUB saat 
IF rend-5 THEN CALL sort 
IF rend:-5 THEN
GET 1", recno(rend-l) 
IF s2>s(2) OR (s2 = s<2) AND sl>s(1)) THEN RETURN ana 
find sf.sl 
FOR j=rend TO i+1 STEP-1:recno(j)=recno(j-1):NEXT 
recno(i)=recno 
END IF 
RETURN ana 
kayitbul: 
WINDOW OUTPUT 3:C0L0R 2,5:CLS:i=1 
PRINT :INPUT" ADINI YA DA KAYIT NUMARASINI GiRiN:",sf 
IF sf="”   THEN  sf=”a" 
F=ASC(UCASE$(LEFT$(sf,1))-64
IF f<l THEN
j=VAL(sf)
IF j>rend THEN i = rend ELSE i = l:WHILE recno(i)<>j:i = i+l:WEND 
RETURN 
END IF 
sf=UCASE$(LEFT$(sf,l)) + RIGHT$(sf,LEN(sf)-l) 
CLS:PRINT: INPUT" SOYADINI GiRiN: ",sl 
IF sl=""THEN sl="a" 
sl=UCASE$(LEFT$(sl,l)) + RIGHT$<sl,LEN(sl)-l)  
GET l,recno(rend):IF sl>s(2) OR (sl=s<2) AND sf>=s(l)) THEN i=rend:
RETURN 
find sf,si:RETURN
SUB find <sf,sl) STATIC 
SHARED rend, I 
sl=sl+SPACE$(fs(2)-LEN(sl)):sf=sf+SPACE$(fs(l)-LEN(sf)) 
f=ASC(LEFT$<sl,l))-64 
GET l,recno(l):IF sl<s(2) OR <sl=s(2) AND sf<s(l)) THEN i=l:EXIT SUB
i=INT(f/22*rend+l):WHILE i>rend-l:i = rend-l:WEND:GET 1,recno(i) 
IF sl = s(2) THEN
IF sf<s(l) THEN
WHILE sl = s(2) AND sf <s< 1):i=i-l:GET 1,recno(i):WEND 
ELSEIF sf>s(l) THEN
WHILE sl=s(2) AND sf<s(1):i=i-l:GET 1,recno(i):WEND 
END IF  
ELSEIF sl<s<2) THEN
WHILE sl<s(2):i=i-l:GET 1,recno(i):WEND
IF sl=s(2) AND sf<s(l) THEN
WHILE sl = s(2) AND sf<s(1):i = i-l:GET 1,recno(i) :WEND 
END   IF 
ELSE
WHILE  s l > s ( 2 )   AND   iorend : i = i + 1 :GET   1, recno( i ) : 
WEND
IF sl=s<2) AND sf>s(l) THEN
WHILE sl = s(2) AND sf>s(1) :i=i+l:GET 1,recno(i):WEND 
END IF  
END IF 
IF iorend AND (<sl>s<2) OR (sl = s(2)) AND sf>s(l)>) THEN i=i+1 
END SUB
kayitlistesi: 
WINDOW OUTPUT 4:C0L0R 2,6:PRINT TAB(4) USING"****" ; recno(i) 
WINDOW. OUTPUT 2:C0L0R 2,3:FQR 0 = 1 TO 7:L0CATE 2*j,25:PRINT stat(j):
NEXT
RETURN
ulkelistesi: 
WINDOW OUTPUT 4:COLOR 2,6:CLS:WINDOW OUTPUT 2:COLOR 2,0:CLS 
FOR j=l TO 7
COLOR 2,0:L0CATE 2*j,7:PRINT typestat(j); 
COLOR 2,3:PRINT TAB(25)SPACE$(fs(o)) 
NEXT: RETURN
tamliste : 
WINDOW OUTPUT 3:COLOR 2,5:CLS:COLOR 2,4
FOR f=l TO 2:g=12*f-5:h=(g-2)*8:PUT (h,5>,boxl,PSET:NEX 
LOCATE 2,7:PRINT "SONRAKI"TAB(21)"CIKIS 
WINDOW OUTPUT 2:COLOR 2,0:CLS:h=0:i=-33 
WHILE i< = rend AND h=0  
CLS:f=0:g=2:i=i+34  
FOR j = l TO i+33  
IF j<=rend THEN
GET l,recno(j):f=f+l:IF f=18 THEN f=l:g=39  
x=INSTR(s(2),"  ")-l:LOCATE f,g 
PRINT USING"***";recno(j);:PRINT TAB(g+6)s(2); 
LOCATE f,g+6+x:PRINT ", "s(l)  
END IF 
NEXT I 
WHILE MOUSE(0)>-1:WEND 
CLS:h=INT<(MOUSE(1)-40)/96) 
WEND  
RETURN ana
arama 
IF rend<5 THEN RETURN ana 
GOSUB ulkelistesi:GOSUB kayitbul:recno=recno(i) 
GOSUB kayitoku:GOSUB kayitlistesi
aramamenusu: 
WINDOW OUTPUT 3:COLOR 2,5:CLS:COLOR 2,4 
FOR f = l TO 6:g=ll*f-5:h=(g-2)*8
PUT (h,5),boxl,PSET:L0CATE 2,g:PRINT title2(f) 
NEXT
aramasonu: 
WHILE MOUSE(0)>-l:WEND:e=INT((MOUSE(l)-40)/88)+1 
ON e GOSUB ondegisiklik,silme,onceki,sonraki,etiket 
RETURN ana
ondegisiklik: 
o1=s(1):o2=s(2):G0SUB degistir 
IF o1<>s(1) OR o2<>s(2) THEN
sf=s(1):sl=s(2):GOSUB saat 
IF I<>rend THEN
FOR k=i TO rend:recno(k) = recno(k+l):NEXT 
recno(rend )=recno 
END IF 
GET l,recno(rend-l)
IF s2>s<2) OR (s2=s(2) AND sl>s(l)) THEN recno(i)=recno
RETURN aramamenusu 
find sf,sl 
FOR j=rend TO i + 1 STEP -1:recno(j) = recno(j-1) :NEXT_ 
recno(i)=recno
END IF 
RETURN aramamenusu
degistir: 
WINDOW OUTPUT 3:C0L0R 2,5:CLS:WINDOW OUTPUT 2:C0L0R 2,0 
FOR j=l TO 7:L0CATE 2*j,3:PRINT USING"#_.";j :NEXT _______ I 
WINDOW OUTPUT 3:CLS:PRINT:PRINT" DEGiSiKLiK VAR MI (E/H)?":a=”” 
WHILE a<>"E" AND a<>"H" AND (VAL(a)<1 OR VAL(a)>7):a=UCASE$(INKEY$): 
WEND_ 
IF a="E" THEN
CLS:PRINT:PRINT"DEGiSTiRiLECEK SATIR NUMARASI”  
WHILE VAL(a)<1 OR VAL(a)>7:a=UCASE$(INKEY$):WEND 
END   IF 
IF  a<>"H"   THEN
j=VAL(a):WINDOW OUTPUT 
LINE (191,16*(j-1)+7)-STEP(8*fs(o),9),7,b 
kayitgir j:LINE (191,16*(0-1)+7 )-STEP(8*fs(o ),9),0,b:GOTO degistir  
END IF 
WINDOW OUTPUT 2:C0L0R 0,0:FOR j=1 TO 7:LOCATE 2*j,3:PRINT "  ":NEXT  
GOSUB kayityaz:RETURN
silme: 
WINDOW OUTPUT 3: COLOR 2,5 :CLS-.COLOR 2,4 
FOR f=l TO 2:g=12*f-5:h=(g-2)*8:PUT (h,5),boxl,PSET:NEXT 
LOCATE 2,8:PRINT "Sil"TAB(20)" iPTAL 
FOR j=1 TO 2000:NEXT
WHILE MOUSE(0)>-1:WEND 
IF INT((M0USE(1)-40)/96)=0 THEN
recno = recno(i):FOR j = 1 TO 7 : stat(o )=chrd : NEXT :GOSUB kayityaz 
rend=rend-1 
IF iorend+1 THEN
FOR k=i TO rend:recno(k)=recno(k+1):NEXT 
recno(rend+1)-recno 
END IF
IF I<>l THEN i=i-1 
recno=recno(i):GOSUB kayitoku:GOSUB kayitlistesi  
END IF:RETURN aramamenusu
onceki :
i=i-1:IF i=0 THEN i=rend 
recno=recno(i) :GOSUB kayitoku:GOSUB kayitlistesi 
RETURN aramasonu
sonraki :
i=i+1:IF i=rend+1 THEN i=1 
recno=reeno(i):GOSUB kayitoku:GOSUB kayitlistesi 
RETURN aramasonu
etiket: 
FOR j=1 TO 6:1=LEN(s(o))
WHILE MID$(s(j),l,1)=” “:l=l-1:WEND 
ss(j )=LEFT$(s(j ),1 ) 
IF LEFT$(ss(o),l)= ehrn THEN ss(j)= " " 
NEXT 
LPRINT ss(1)” “ss(2):LPRINT ss(3):LPRINT ss(4) 
IF LEN(ss(6))=6 THEN ss(6)=LEFT$(ss(6),3) + " "+RIGHT$(ss(6),3)  
LPRINT ss(5)SPC(3)ss(6):LPRINT:LPRINT
IF e THEN RETURN aramasonu 
RETURN
etiketler: 
WINDOW OUTPUT 3: COLOR 2,5 : CLS:COLOR 2,4:e=0 
FOR f=l TO 4:g=12*f-5:h=(g-2)*8
PUT Ch,5),boxl,PSET:LOCATE 2,g+1:PRINT title3(f) 
N E XT 
WINDOV OUTPUT 2:COLOR 2,0:FOR j=l TO 2600:NEXT
WHILE M0USE(0)>-l:WEND:m=lNT((M0USE(l)-40)/96)+1:k1=1:k2=rend 
IF m=2 THEN GOSUB kayitbul:k2=i  
IF m=3 THEN GOSUB kayitbul:k1=i  
IF m=4 THEN GOSUB kayitbul:k1=i:GOSUB kayitbul:k=2 
COLOR 2,5:CLS:IF k2>rend THEN k2=rend 
GOSUB saat
FOR k=k1 TO k2:GET 1,recno(k):GOSUB etiket:NEXT 
RETURN ana
saat: 
WINDOW OUTPUT 3:COLOR 0.0:CLS:PUT (28,7), watch,PSET 
RETURN
hata:  
RUN
SUB kayitgir (i) STATIC 
SHARED setcity,setprov.chrn 
WINDOW OUTPUT 3:COLOR 2,5:CLS:PRINT 
PRINT typestat(i)" girin ";:LINE INPUT”: “,s 
WHILE LEN(s)>fs(i):LINE INPUT" GiRiS COK UZUN. TEKRARLAYIN: ",s:WEND 
IF s="" THEN
IF i<>4 AND i<>5 THEN s=chrn 
IF i-4 THEN s=setcity
IF i-5 THEN s=setprov  
ELSEIF i<5 THEN
s=UCASE$(LEFT$(s, 1; >+RIGHT$(s,LEN(s)-l>:j=2 
WHILE INSTR(j,s," ")<>0
j-INSTR(j,s,” “)+1:MID$(s,j,1)=UCASE$(MID$(s,j,1)) 
WEND
IF i-4 THEN setoity=s  
ELSEIF i = 5 OR i=6 THEN
s = UCASE$(s):IF i=5 THEN setprov=s  
END IF  
IF i=2 THEN
j-INSTR(s,”%”):IF j   THEN MID$(s,j,3)=”%”
END IF
WINDOW OUTPUT 2:COLOR 2,3 
LOCATE 2*i,25:PRINT SPACE$( f s( i ) ) 
stat<i) = s: LOCATE 2* i,25: PRINT  
END SUB
SUB sort STATIC  
SHARED rend,ln 
IF rend<3 THEN EXIT SUB 
FOP i=1 TO rend:GET 1,i:sl(i)=s(1):s2(i)=s(2):NEXT
FOR k=1 TO rend 
jtop=k:top1=s1(k):top2=s2(k)
FOR j=k+1 TO rend
IF s2(j)<top2 THEN
top2=s2(j):top1=s1(j):jtop=j 
ELSEIF s2(j) = top2 THEN
IF s1(j)<top1 THEN top1=s1(j):jtop=j 
END IF  
NEXT:SWAP recno(k),recno(jtop):SWAP sl(k),sl(jtop):SWAP s2(k),s2<jtop) 
NEXT  
END SUB
DATA GiRiS,ARAMA,LiSTE,YAZMA,CIKIS 
DATA DEGiSTiR,SiL,ONCEKi,SONRAKi,YAZ,CIKIS
DATA HEPSI,A'DAN ?,? - Z,? - ? 
DATA ADI,12,SOYADI,20,ADRES,55,SEHiR,14 
DATA ULKE,15,POSTA KODU,6,TELEFON,12 
AMİGA DÜNYASI 92