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
- eingeben
- auf dem Bildschirm ausgeben lassen
- löschen
- ändern
- suchen
- auf Diskette abspeichern
- von Diskette einlesen.
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 |
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 |
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