C 64
Adreß- und Telefonregister
5/84, S. 64-68

Adreß- und Telefonregister

Machen Sie Schluß mit der Zettelwirtschaft! Wozu haben Sie einen Commodore 64 mit Floppy? Im Zeitafter der Elektronik verwaltet man seine Adressen mit dem Computer.

Dieses Programm bietet eine komfortable Möglichkeit, Adressen und Telefonnummern auf Diskette abzuspeichern. Man kann Adressen und Telefonnummern

Menüsteuerung

Vom Menü aus kann man in die Programmteile »Eingabe«, »Ausgabe«, »Suchen«, »Daten speichern«, »Daten einlesen« und »Datei vorbereiten« springen (Funktionstasten). Der Programmteil »Datei vorbereiten« dient zur Eröffnung einer Datei und braucht daher nur einmal bei der ersten Benutzung des Programms ausgeführt werden. Jedesmal, nachdem Datensätze eingegeben, gelöscht oder geändert wurden, muß die Datei natürlich wieder mit »f2« abgespeichert werden.

Eingabe

Bei der Eingabe (mit »f3«) werden Name, Vorname, Geburtstag, Wohnort, Postleitzahl, Straße, Hausnummer, Telefon und Vorwahl eingetippt. Dabei kann »DEL« zum Löschen benutzt werden. Ist ein Name, Vorname etc. vollständig eingegeben, wird mit »RETURN« abgeschlossen, und der Cursor springt zum nächsten Eingabekriterium (wenn über die gesamte Linie geschrieben wird, springt der Cursor automatisch weiter).

Bei der Ausgabe kann unter »sortiert« und »physikalisch« ausgewählt werden, das heißt, die Datensätze werden entweder nach Name und Vorname sortiert ausgegeben oder in der Reihenfolge wie sie eingegeben wurden.

Beim Suchen wird zunächst abgefragt, wonach gesucht werden soll. Wird ein entsprechender Datensatz gefunden, so wird dieser dann ausgegeben. Danach kann nach dem gleichen Suchkriterium sofort weitergesucht werden. Im Such- und Ausgabemodus (hierbei nur in der sortierten Ausgabe) kann der gerade angezeigte Datensatz gelöscht oder geändert werden.

Beim Verändern der Daten muß auf jeden Fall der gesamte Teil, wie bei der Eingabe, neu überschrieben werden (GET-Schleife, kein INPUT). Soll ein Teil nicht geändert werden, so ist »f7« zu drücken und der Cursor springt weiter. Verändern lassen sich alle elf Datensatzteile, außer Name und Vorname.

Beliebig viele Daten

Die Datei ist für 100 Datensätze angelegt. Bei mehr als 100 Datensätzen ist die DIM-Anweisung für F$ in Zeile 100 entsprechend zu ändern. Die Datei selbst wird unter »ADR.-DATEI« auf Diskette abgespeichert und ist als verkettete Liste organisiert, das heißt, in jedem Datensatz ist notiert, wo sich der nächste Satz befindet. Dadurch lassen sich neu eingegebene Daten schnell einsortieren und in der Ausgabe kann zwischen »sortiert« und »physikalisch« unterschieden werden.

Alle Eingaben werden überprüft, so daß keine Fehlermeldungen (zum Beispiel »REDO FROM START«) auftreten können.

(Arne Weitzel)
F$(i,j) (i:0-100;j:0-11) 100 Datensätze (0 nicht belegt) mit jeweils 12 Daten (für mehr als 100 Datensätze ist in Zeile 100 zu ändern!)
SU$(j) (j:1-11): Vergleichsstring beim Suchen
MO : Modus (Eingabe, Ausgabe etc.)
L : maximale Länge einer Eingabe
ll : Aktuelle Länge eines Eingabestrings während einer Eingabe
SP : Spaltenposition des Cursors
ZE : Zeilenposition des Cursors
MA, MB : Nummer der vorherigen Datensätze (für Einsortieren und Löschen von Datensätzen)
AN : Anzahl der Datensätze
MO$: Titel des Modi (»Ausgabe«, »Eingabe« etc.)
Z : Nummer des Datensatzes
Die wichtigsten Variablen
Zeilen
100 Dimensionierung der Felder und Ausschalten von RUN/STOP
110-140 Variablenzuweisungen
150-340 Menü anzeigen und Menüeingabe
360-430 Eingabe von Datensätzen
450-510 Auswahl zwischen sortierter und physikalischer Ausgabe
520-580 Physikalische Ausgabe
590-600 Sortierte Ausgabe
610-620 'Keine weiteren Personen erfasst !'
630-660 Routine zur Ausgabe eines Datensatzes
680-810 GET-Schleife zur Eingabe eines Strings
830-950 Zeichnen der Maske
970 Zeichnen der Linien bei der Eingabe
980-1030 Einlesen der Datei von Diskette
1050-1090 Speichern der Datei auf Diskette
1110-1160 Einsortieren eines neu eingegebenen Datensatzes
1180-1310 Auswahl des Suchkriteriums
1330-1360 Eingabe des gesuchten Strings
1370-1330 'Eingabe zu lang !'
1400-1470 Suchen des Strings
(1420-1450 nicht gefunden)
1480 Ausgabe des gefundenen Strings
1490-1560 Weiter / Ändern / Löschen oder Ende ?
1580-1620 Löschen eines Datensstzes
1640-1708 Erzeugen des Tons
1720-1730 Ausgabe des Datensatzes im 'AENDERN'-Modus
1740-1760 Überschreiben des Strings (bzw. nicht verändern)
1770-1798 'Änderungen korrekt ?'
1810-1840 Weiter ?
1860-1980 Festlegen der Cursorposition und der max. Länge eines Strings
1998-2010 Festlegen der Farben fuer Bildschirm sowie Titel für verschiedene Modi
2020-2070 Datei vorbereiten
Aufschlüsselung des Adreß- und Telefonregisterprogramms nach Zeilennummer
10 rem*********************************
20 rem*********************************
30 rem*****      arne weitzel      ****
40 rem*****                        ****
50 rem***** ritter-von-halt-str.17 ****
60 rem*****                        ****
70 rem*****    5608 radevormwald   ****
80 rem*********************************
90 rem*********************************
100 dimf$(100,11),su$(11),na$(11):poke788,52
110 si=54272:fl=si:fh=si+1:tl=si+2:th=si+3:ww=si+4:aa=si+5:hh=si+6:vl=si+24
120 na$(1)="Name":na$(2)="Vorname":na$(3)="Geburtstag":na$(4)="Geburtsmonat"
130 na$(5)="Geburtsjahr":na$(6)="Strasse":na$(7)="Hausnummer"
140 na$(8)="Postleitzahl":na$(9)="Wohnort":na$(10)="Vorwahl":na$(11)="Telefon"
150 rem********* m e n u e *************
160 poke198,0:printchr$(142):poke53280,12:poke53281,3
170 print"{clr}{down}{down}"tab(11)"{blu}U{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}I"
180 printtab(11)"B"tab(27)"B"
190 printtab(11)"J{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}K"
200 print"{home}{down}{down}{down}"tab(13)"personendatei"
210 printtab(7)"{down}{down}{down}{blu}U{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}I"
220 fori=1to13:printtab(7)"B"tab(32)"B":nexti
230 printtab(7)"J{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}K"
240 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}"tab(9)"{gry1}ausgaben          : {lblu}f1"
250 print tab(9)"{down}{gry1}eingabe           : {lblu}f3"
260 print tab(9)"{down}{gry1}suchen            : {lblu}f5"
270 print tab(9)"{down}{gry1}daten einlesen    : {lblu}f7"
280 print tab(9)"{down}{gry1}daten speichern   : {lblu}f2"
290 print tab(9)"{down}{gry1}datei vorbereiten : {lblu}f4"
300 print tab(9)"{down}{down}{down}{gry1}ende              : {lblu}f6"
310 gete$:ife$=""then310
320 if(asc(e$)<133)or(asc(e$)>139)then310
330 mo=asc(e$)-131:onmogoto170,450,360,1180,990,1050,2020,340
340 print"{clr}";:clr:restore:poke53280,14:poke53281,6:end
350 rem********** eingabe *************
360 mo$="EINGABE :":f3=151:f4=151:poke53280,15:poke53281,12:printchr$(f3)
370 print"{clr}":gosub830:printchr$(f4):gosub970
380 forj=1to11:gosub1860:sys58640
390 gosub680:f$(an+1,j)=a$:next:an=an+1
400 gosub1110:gosub1640:print:print"{down}{down}{down}{down}{rght}{rght}{cyn}Weitere Eingabe (-/n)";
410 getw$:ifw$=""then410
420 ifw$="n"then160
430 goto360
440 rem********** ausgabe *************
450 poke53280,14:poke53281,14
460 print"{clr}{down}{down}{down}{down}{down}{down}{down}{down}{lblu}"tab(15)"{wht}ausgabe :{gry1}"
470 printtab(10)"{down}f1 - sortiert"
480 printtab(10)"{down}f3 - physikalisch"
490 getau$:if(au$="")or(au$<>"{f1}"andau$<>"{f3}")then490
500 z=0:gosub2000
510 ifau$="{f1}"then590
520 z=z+1:ifz>anthengosub610:goto160
530 print"{clr}":iff$(z,0)="@"then520
540 gosub630:gosub1640
550 print"{down}{down}{down}{down}{rght}{rght}{gry3}Weitere Ausgaben ? (-/n)";
560 getw$:ifw$=""then560
570 ifw$="n"then160
580 goto520
590 ma=z:z=val(f$(z,0)):ifz=0thengosub610:goto160
600 print"{clr}":gosub630:goto1490
610 print"{clr}{down}{down}{down}{down}{down}{down}{rght}{rght}{gry3}Keine weiteren Personen erfasst !":gosub1640
620 fori=1to3000:next:return
630 poke53280,f1:poke53281,f2:printchr$(f3):gosub830
640 print"{home}"tab(25)"{down}{lred}Datensatz "z;chr$(f4)
650 forj=1to11:gosub1860:sys58640
660 printf$(z,j):nextj:return
670 rem************ input ************
680 ll=0:a$="":poke204,0
690 getaa$:ifaa$=""then690
700 ifasc(aa$)<>13then730
710 ifll=0then690
720 print"{CBM-@}";:poke204,1:return
730 ifasc(aa$)<>20then760
740 ifll=0then690
750 print"{CBM-@}{left}{left}{CBM-@}{left}";:a$=left$(a$,len(a$)-1):ll=ll-1:goto690
760 ifaa$<>"{f7}"then780
770 goto800
780 printaa$;:a$=a$+aa$:ll=ll+1
790 ifll<lthen690
800 ifpeek(207)then800
810 poke204,1:return
820 rem********** 1.maske **************
830 printchr$(14):print"{home}{down}{rght}{rght}{rvon}"mo$
840 print"{down}{rght}{rvon}";:fori=1to35:print" ";:nexti:print
850 fori=1to5:printtab(1)"{rvon}"tab(35)" ":nexti
860 print"{rght}{rvon}";:fori=1to35:print" ";:nexti
870 print"{home}{rvof}{down}{down}{down}{down}{down}{rght}{rght}{rght}Name    :":print"{down}{rght}{rght}{rght}Vorname :"
880 print"{down}{down}{down}{rght}Geboren :{rght}{rght}{rght}.{rght}{rght}."
890 print"{down}{rght}{rvon}Wohnhaft :"
900 print"{down}{rght}Str.:";
910 printtab(27)"Nr.:"
920 print"{down}{rght}Plz :";
930 printtab(13)"Ort :"
940 print"{down}{rght}Telefon :{rght}{rght}{rght}{rght}{rght}{rght}/"
950 return
960 rem********* 2.maske **************
970 forj=1to11:gosub1860:sys58640:fori=1tol:print"{CBM-@}";:nexti,j:return
980 rem********** einlesen ************
990 print"{clr}{down}{down}"tab(15)"{rvon}{gry1} einlesen ":i=0:open1,8,2,"adr.-datei,s,r"
1000 forj=0to11
1010 input#1,f$(i,j)
1020 next:ifst<>64theni=i+1:goto1000
1030 close1:an=i:goto 160
1040 rem*********** speichern *********
1050 print"{clr}{down}{down}"tab(15)"{rvon}{gry1} speichern ":open1,8,2,"@:adr.-datei,s,w"
1060 fori=0toan
1070 forj=0to11
1080 print#1,f$(i,j)
1090 nextj,i:close1:goto160
1100 rem********* einsortieren ********
1110 ma=0:vz=val(f$(0,0)):zz=vz
1120 ifvz=0then1160
1130 mb=ma:ma=vz:vz=val(f$(ma,0))
1140 if(f$(ma,1)<f$(an,1))or((f$(ma,1)=f$(an,1))and(f$(ma,2)<f$(an,2)))then1120
1150 f$(an,0)=str$(ma):f$(mb,0)=str$(an):return
1160 f$(an,0)="0":f$(ma,0)=str$(an):return
1170 rem********** suchen *************
1180 poke53280,14:poke53281,7:printchr$(14)
1190 print"{clr}";:gosub1990
1200 print"{down}{blu}{rvon}               SUCHEN :                 "
1210 print"{down}{rght}{rght}{gry1}Wonach soll gesucht werden ?{down}{down}"
1220 forj=1to11:print"{rght}{rght}- ";na$(j)tab(20)":";
1230 ifj=10thenprint" 0":goto1260
1240 ifj=11thenprint" +":goto1260
1250 printj
1260 next
1270 gete$:ife$=""then1270
1280 if(asc(e$)<48 or asc(e$)>57)and(e$<>"+")then1270
1290 ife$="0"thensu=10:goto1320
1300 ife$="+"thensu=11:goto1320
1310 su=asc(e$)-48
1320 j=su:gosub1860
1330 print"{clr}{down}{down}{down}{rght}{rght}{gry1}"na$(su)
1340 input"{home}{down}{down}{down}{down}{down}{rght}{rght}";su$(su):iflen(su$(su))=0then1340
1350 iflen(su$(su))>1thengosub1370:goto1340
1360 goto1400
1370 gosub1640:fori=1to4
1380 print"{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{rght}{rght}EINGABE ZU LANG !":forj=1to200:nextj
1390 print"{up}{rght}{rght}                 ":forj=1to200:nextj,i:return
1400 gf=0:z=0
1410 ifval(f$(z,0))<>0thengoto1460
1420 ifgf=0thenprint"{clr}{down}{down}{down}{down}{down}{down}{rght}{gry1}Keine entsprechenden Personen erfasst !":goto1450
1430 print"{clr}{down}{down}{down}{down}{down}{down}{rght}{rght}{gry3}Weitere, fuer das Suchkriterium        {down}zutreffende";
1440 print"{rght}Personen nicht erfasst !"
1450 gosub1640:fori=1to5000:nexti:goto160
1460 ma=z:z=val(f$(z,0))
1470 iff$(z,su)<>su$(su)then1410
1480 print"{clr}":gosub 630:gf=1
1490 gosub1640:print"{down}{rght}{rght}Weiter"m2$;tab(18)" - f1"
1500 print"{rght}{rght}Ende "m1$;tab(18)" - f3"
1510 print"{rght}{rght}Loeschen"tab(18)" - f5"
1520 print"{rght}{rght}Aendern"tab(18)" - f7";
1530 getw$:ifw$=""then1530
1540 la=asc(w$)-132:if(la<1)or(la>4)then1530
1550 ifmo=2thenonlagoto590,160,1590,1730
1560 onlagoto1410,160,1580,1720
1570 rem********** loeschen ***********
1580 print"{clr}{down}{down}{down}{rght}{rght}{gry3}{rvon}Loeschen :":print"{down}{down}{down}{rght}{rght}Datensatz "z" : ";f$(z,1)" , "f$(z,2)
1590 z1$=f$(z,0):f$(z,0)="@"
1600 f$(ma,0)=z1$
1610 forw=1to3000:next
1620 z=ma:goto1800
1630 rem************** ton ************
1640 pokevl,15
1650 pokeaa,2*16+3
1660 poketl,0:poketh,8
1670 pokehh,15*16+2
1680 pokefh,62:pokefl,5
1690 pokeww,65:fori=1to100:nexti:pokeww,64
1700 return
1710 rem********** aendern ************
1720 mo$="AENDERN :":f1=9:f2=9:f3=155:f4=5
1730 print"{clr}{CBM-+}":gosub970:gosub630:printtab(8)"{down}{down}{cyn}+{gry1}keine Aenderungen - f7{rvof}+"
1740 poke198,0
1750 forj=3to11:gosub1860:sys58640:gosub680:ifaa$<>"{f7}"thenf$(z,j)=a$
1760 next
1770 print:gosub1640:print"{down}{down}{down}{down}{rght}{rght}Aenderungen Korrekt ? (-/n)";
1780 getw$:ifw$=""then1780
1790 ifw$="n"then1730
1800 print"{clr}{down}{down}{down}{down}{down}{down}{rght}{rght}{cyn}Weiter"m2$" (-/n)"
1810 getw$:ifw$=""then1810
1820 ifw$="n"then160
1830 ifmo=4thengosub1990:goto1410
1840 gosub2000:goto610
1850 rem********* print at ************
1860 onjgoto1870,1880,1890,1900,1910,1920,1930,1940,1950,1960,1970
1870 l=21:sp=13:ze=5:goto1980
1880 l=21:sp=13:ze=7:goto1980
1890 l=2:sp=11:ze=11:goto1980
1900 l=2:sp=14:ze=11:goto1980
1910 l=4:sp=17:ze=11:goto1980
1920 l=18:sp=7:ze=15:goto1980
1930 l=4:sp=33:ze=15:goto1980
1940 l=4:sp=7:ze=17:goto1980
1950 l=18:sp=19:ze=17:goto1980
1960 l=5:sp=11:ze=19:goto1980
1970 l=6:sp=17:ze=19:goto1980
1980 poke214,ze:poke 211,sp:return
1990 mo$="SUCHEN :":ml$="Suchen ":m2$="suchen":f1=14:f2=6:f3=155:f4=158:return
2000 mo$="AUSGABE :":ml$="Ausgaben":m2$="e Ausgaben":f1=14:f2=11:f3=155
2010 f4=5:return
2020 print"{clr}{down}{down}"tab(10)"{gry1}{rvon} datei vorbereiten "
2030 f$(0,0)="0":forj=1to11:f$(0,j)="-":next
2040 open1,8,2,"adr.-datei,s,w"
2050 forj=0to11
2060 print#1,f$(0,j)
2070 nextj:close1:goto160
Listing des Basic-Programms für das Adreß- und Telefonregister
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →