AMIGA DATABASE
Retro bilgisayarEğ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