Damit Sie wissen, was Sie ausgeben
Egal, ob Sie viel oder wenig Geld verdienen, auf jeden Fall hat es Vorteile, einen Überblick über seine Ausgaben zu haben. Und warum soll dazu nicht der C 64 eingesetzt werden? Mit diesem elektronischen Haushaltsbuch können Sie jederzeit Bilanz ziehen.

Seit Anfang 1984 der C 64 ins Haus kam, ist die Arbeit daran zu einer Leidenschaft geworden. (Wie bei vielen anderen auch!) Soweit der Beruf es ermöglicht, verbringe ich meine Freizeit (das sind hauptsächlich die Wochenenden) mit der Entwicklung von Anwendungen am Computer. Ausgangspunkt war die Begeisterung für technische »Spielereien«. Doch bald reizte die Eigenentwicklung von Programmen. Es gibt eine tiefe Befriedigung, wenn nach stunden- oder tagelanger Arbeit ein Programmteil das erste Mal gestartet wird und nach vielleicht nur einer Korrektur zufriedenstellend läuft. Ein andermal wird stundenlang über die Lösung eines Problems getüftelt. »Gelernt« habe ich jedenfalls dadurch einiges über die Basic-Programmierung des C 64. Wenn auch häufig »Probieren über Studieren« ging.
Als Familienvater finde ich volles Verständnis bei Frau und Tochter. (Das muß mal gesagt werden!)
In der Familie liegt der Ausgangspunkt für das Programm. Die Aufzeichnung der monatlichen Einnahmen und Ausgaben erfolgte manuell. Das ließ natürlich die »Ehre« des EDV-Anwenders nicht zu. Ein entsprechendes Programm mußte her. Es sollten nicht nur die Beträge als Salden auf Konten geführt werden, sondern es sollte auch möglich sein, einzelne Buchungen wieder abzurufen. Wiederkehrende Posten sollten über die einzelnen Monate hinweg beobachtbar sein.
So entstand das »Haushaltsbuch« als eine Kombination aus sequentieller und relativer Datei: die relative zur Kontenführung (Salden); die sequentielle zur Speicherung der Kostenart, des Betrages und des Buchungsdatums als Einzelpositionen.
Von der Floppy lassen sich mit »INPUT« bekanntlich nur 88 Zeichen einlesen. Der relative Datensatz hat aber eine Länge von 141 Zeichen. Die Alternative »GET« in einer FOR-NEXT-Schleife ist sehr langsam. Dies fällt besonders bei der Bildung des Jahressaldos auf.
Es blieb nur, den INPUT-Befehl zu modifizieren. Die entsprechenden DATAs für das kleine Maschinenprogramm sind im »Haushaltsbuch« enthalten und werden in den Kassettenpuffer eingelesen.
Als Tauschroutine fand gleich die im 64’er, Ausgabe 1/85 beschriebene SWAP-Simulation Verwendung. Durch diese Funktion konnte die Produktion von »String-Müll« deutlich reduziert werden.
Ich habe mich bemüht, das Programm »wasserdicht« zu machen. Floppy und Drucker werden auf Bereitschaft geprüft. Unter normalen Bedingungen dürfte es keinen Absturz geben. Aber eine Eingabe von falschen Beträgen muß der Anwender verantworten.
(Martin Schumann/gk)Das Programm »Haushaltsbuch« dient der Aufzeichnung der Ein- und Ausgaben im privaten Bereich. Neben den monatlichen Bestandskonten (relative Dateien) werden zur Dokumentation der Buchungsposten die Einzelpositionen in sequentiellen Buchungsdateien gespeichert.
Die in den relativen Dateien geführten Konten ermöglichen innerhalb eines Jahres den Abruf des aktuellen Standes in der »Kasse«. Aus den sequentiellen Dateien lassen sich alle Buchungen mit Angabe der Kostenart, des Betrages und des Buchungsdatums auflisten oder einzelne selektieren; zum Beispiel bestimmte Kostenarten oder Buchungsmonate.
Geschrieben wurde das »Haushaltsbuch« für einen C 64. Das für die Modifikation des INPUT-Befehls notwendige kleine Maschinenprogramm wird in dem Kassettenpuffer abgelegt. Die DATAs für die Simulation der SWAP-Tauschroutine werden in der Zero-Page in den Freiraum ab Speicherstelle715 eingelesen.
Die sinnvolle Nutzung des Programms setzt ein Diskettenlaufwerk voraus. Ein Drucker wäre recht nützlich, ist aber keine Notwendigkeit. Sollten trotz nicht vorhandenem Drucker die betreffenden Druckroutinen aufgerufen werden, führt dies zu keinem Programmabsturz.
Ausgelegt ist das Druckunterprogramm für Epson-kompatible Drucker. Eine Anpassung an Commodore-Drucker sollte – falls es notwendig ist – leicht zu bewerkstelligen sein.
Neben der Bereitschaft des Druckers wird selbstverständlich die des Diskettenlaufwerks geprüft.
Funktionsbeschreibung
Wie aus den einleitenden Sätzen ersichtlich, gliedert sich das Programm in zwei übergreifende Programmteile: die Kontenführung und die Bearbeitung der Buchungspositionen.
Nach dem Start des Programms geben Sie bitte das zu bearbeitende Jahr (»aktuelles Jahr«) ein. Der Zeitraum wurde auf 1984 bis 2000 beschränkt. Dies kann selbstverständlich dem Bedarf des Lesers entsprechend angepaßt werden. Nur sollte dabei die Diskettenkapazität beachtet werden!
Nach Eingabe der Jahreszahl meldet sich »Haushaltsbuch« mit dem Hauptmenü. Es stehen folgende Funktionen zur Verfügung:
— 1 | Konten anlegen |
— 2 | Buchen |
— 3 | Kontenübersicht |
(Kontennamen ausgeben) | |
— 5 | Monatsübersicht |
— 6 | Jahresübersicht |
— 7 | Buchungsposten abfragen |
— 0 | Programm beenden |
Die Funktion »Kontennamen ausgeben« wird automatisch von den übrigen Funktionen — soweit notwendig — aufgerufen. Denn warum sollte man sich die Nummern der einzelnen Konten merken, dies kann der C 64 viel besser.
Wenn Sie also »4« eingeben, erfolgt eine entsprechende Meldung. Versuchen Sie es!
Konten anlegen
Beachten Sie bei dieser Funktion, daß eine existierende Datei des gewählten Jahres gelöscht wird. Es wird zur Vorsicht abgefragt, ob Sie dies auch wirklich beabsichtigen. Beantworten Sie die Frage mit »JA«, so werden die bisherigen Konten gelöscht und Sie aufgefordert, die Zahl der neu anzulegenden Konten einzugeben. Anschließend können Sie die Konten benennen. Drücken Sie bei einer Kontonummer RETURN, so wird das Anlegen der Konten abgebrochen. Es werden nur die bis zu diesem Moment eingegebenen Konten gespeichert. Die Kontenzahl (KZ) wird entsprechend korrigiert. Geben Sie bei der Frage nach der Zahl der Konten »0« ein, so wird die Programmfunktion verlassen. Dadurch können Sie also nicht mehr benötigte Jahre löschen. (Klar, daß das auch außerhalb des Programms mit »SCRATCH« erfolgen kann.)
Gleichzeitig mit dem Anlegen der relativen (Salden-)Konten werden auch die sequentiellen Buchungsdateien eingerichtet.
Die Zahl der Konten wurde auf 20 beschränkt, um noch mit einer Bildschirmseite auszukommen. Außerdem sollten 20 Konten für die private »Buchführung« ausreichend sein. Wem dies dennoch zu wenig ist, muß in Zeile 1440 die betreffende Prüfung und in Zeile 60 die Dimensionierung anpassen.
Außerdem wäre das Scrollen des Bildschirms über eine Routine (ähnlich der in Zeile 5800-5830) zu steuern.
Buchen
Ein Aufruf dieser Funktion gibt zuerst die Nummern und Namen der Konten aus. Durch Eingabe der gewünschten Nummer wird das betreffende Konto eingelesen. Mit »E« kann man die Funktion ohne Aktivitäten verlassen. Anschließend wird nach Einnahme oder Ausgabe gefragt. An dieser Stelle kann die Routine ebenfalls durch die Taste »f7« abgebrochen werden. Diese Möglichkeiten wurden eingefügt, um ein Verlassen der Buchungsfunktion zu erlauben. Wurde jedoch dieser Punkt überschritten, bleibt nur, eine Buchung durchzuführen. Bei Abbruch werden die bis dahin getätigten Buchungen gesichert.
Nachdem Sie den Buchungsmonat angegeben haben, wird der alte Saldo angezeigt. Nun können »KOSTENART«, »BETRAG« und »TAG« (durch Kommata trennen) eingetippt werden. Wenn alles korrekt ist, können weitere Eingaben auf dem gewählten Konto gemacht werden. Wird die Frage nach weiteren Buchungen mit »N« beantwortet, werden die Eingaben auf das Konto »geschrieben«.
Nun können andere Konten aufgerufen oder die Funktion »Buchen« verlassen werden.
Kontenübersicht
Wählen Sie diese Funktion, wenn Sie die Monatssalden eines Kontos wünschen. Auch hier werden die Konten wieder vorgegeben.
Nach Anzeige der Übersicht ruft »f3« weitere ab oder »f1« druckt die aktuelle aus. Zum Menü kommt man mit »f5« zurück.
Monatsübersicht und Jahresübersicht
Tippen Sie die »5« im Menü und geben den gewünschten Monat ein, erhalten Sie einen Überblick über die Salden aller Konten für den betreffenden Monat.
Die »6« ruft den Jahressaldo aller Konten ab. Dabei kann allerdings der zu kumulierende Zeitraum (Monate) frei gewählt werden. Ober- und Untergrenze können in beliebiger Reihenfolge eingegeben werden.
Auch hier kann durch Drücken von »f1« ein Protokoll über Drucker erstellt werden.
Programm beenden
Mit dieser Funktion kann das Programm »ordnungsgemäß« beendet werden. Sollte dies mal aus Versehen geschehen sein, kann man mit »GOTO 960« sofort wieder zurückkehren. Es reicht, RETURN zu drücken, da der Cursor entsprechend positioniert wird.
Buchungsposten abfragen
Dieser Programmteil springt in das Untermenü »Sonderfunktion Buchungsposten bearbeiten«. Hier stehen als weitere Funktionen zur Verfügung:
- <Datei laden>
- 2 Datei sichern
- 3 Buchungen ausgeben
- 4 Buchungen ändern
- 5 Buchungen sortieren
- 0 Sonderfunktionen verlassen
»Datei laden« braucht nicht gesondert aufgerufen zu werden, da dies wieder bei den übrigen Programmteilen des Untermenüs geschieht.
Vor dem Start der Laderoutine prüft der Computer, ob das Diskettenlaufwerk vorbereitet wurde. Auch eine »falsche« Datendisk wird mit »Datei nicht gefunden« quittiert. Es erfolgt Rücksprung zum Menü.
Datei sichern
Diese Funktion ist nur dann notwendig, wenn Änderungen (Kostenart oder Datum) durchgeführt wurden (vergleiche »Buchungen ändern«).
Allerdings kann ein unbeabsichtigtes Starten dieser Routine auch keinen »Schaden« anrichten. Es werden dann die Daten im Rechner gesichert und die identische Datei auf der Diskette gelöscht.
Darüber hinaus wird nach Aufruf dieses Programmteils zur Vorsicht gefragt, ob eine Diskette eingelegt wurde. Zusätzlich prüft der Computer, ob das Laufwerk »bereit« ist.
Buchungen ausgeben
Als erstes geben Sie ein, ob die Ausgabe auf Drucker oder Bildschirm erfolgen soll. Dann wählen Sie die Datei (mit dem betreffenden Kontennamen), aus der Buchungen selektiert werden sollen. Gesucht werden kann nach »Kostenart« und/oder »Buchungsmonat«. Ist ein Suchbegriff nicht relevant, drücken Sie RETURN. Wurde beide Male RETURN gedrückt, wird die Datei komplett aufgelistet. Nach jeweils 15 Buchungsposten wird die Bildschirmausgabe angehalten und mit Betätigen einer beliebigen Taste fortgesetzt.
Hier bieten sich also vielfältige Möglichkeiten, Kostenarten über Monate hinweg zu verfolgen oder Monate in die einzelnen Buchungspositionen zu »zerlegen«.
Buchungen ändern
Diese Funktion ist dazu bestimmt, Änderungen an den Buchungsposten vorzunehmen. Das gilt aber nur für Kostenart und Buchungsdatum, wenn man sich bei der Eingabe versehen und dies beim Buchen nicht bemerkt hat. Eine Änderung des Betrages ist dagegen nur durch eine Korrekturbuchung möglich, weil in diesem Fall auch die relativen Konten korrigiert werden müssen.
Gewählt werden kann zwischen zwei Änderungsmodi:
- Selektion und Korrektur von Einzelbuchungen oder
- Auflisten aller Buchungen
Bei Änderungen werden Spalten und Zeilen beziffert, so daß die Datensätze und die Felder eindeutig identifiziert werden können.
Nach Eingabe der betreffenden Zeilen- und Spaltennummer wird das zu ändernde Feld in die spezielle »Änderungszeile« ausgegeben. Der Cursor wird so positioniert, daß das (geänderte) Feld sofort wieder übernommen wird. Dies hat den Vorteil, daß bei nur einer Buchstabenänderung nicht das ganze Feld neu geschrieben werden muß.
Sind mehrere Änderungen vorzunehmen, können diese nacheinander durchgeführt werden.
Ist der letzte Datensatz erreicht, wird gefragt, ob die geänderte Datei gesichert werden soll. Dies wird in der Regel der Fall sein.
Buchungen sortieren
Die Buchungen werden in der Reihenfolge der Eingabe gespeichert. Wird für bestimmte Anwendungen eine andere Folge benötigt, kann nach Kostenart oder Betrag oder Datum aufsteigend sortiert werden.
Auch hier entscheidet der Anwender, ob die neu sortierte Datei gespeichert werden soll. In diesem Fall wird es nicht immer gewünscht sein, weil die Datei in einer bestimmten Reihenfolge auf der Diskette erhalten bleiben soll.
Ein Hinweis sei an dieser Stelle gegeben. Bei umfangreicheren Dateien (zum Beispiel 200 Datensätzen) können schon ein bis zwei Minuten vergehen, bis der Computer die Vollzugsmeldung gibt. Also nur keine Aufregung, wenn er sich nicht sofort wieder meldet. Es muß nicht unbedingt ein Programmfehler vorliegen!
Die 200 Datensätze (genauer 201 pro Konto) stellen die Obergrenze dar. »Vielbucher« müssen die Dimensionierung (D$(200,2)) in Zeile 60 ändern.
Sonderfunktion verlassen
Bevor das Programm zum Hauptmenü zurückspringt, prüft es, ob Änderungen oder Sortierungen an der sich im Computer befindenden Datei vorgenommen wurden. Sollten die noch nicht gesichert sein, kann dies jetzt — solange keine andere Datei von Diskette geladen wurde — nachgeholt werden. Andernfalls RETURN drücken, um zum Menü zu gelangen.
Aufschlüsselung nach Zeilennummern
Die folgende Grobeinteilung kann vorgenommen werden:
1 - 830 | Vorbereitung und Unterprogramme, die der Schnelligkeit wegen, oder weil sie häufiger aufgerufen werden, an den Anfang gesetzt wurden (zum Beispiel Sortieren, Cursor positionieren). |
850 - 4310 | Hauptmenü und Bearbeitung der relativen Datei (Kontenführung). |
4500 - 7780 | Untermenü und Bearbeitung der sequentiellen Buchungsdateien. |
7830 - 7940 | DATAs für »INPUT«-Modifikation zum Einlesen von Files; werden in den Kassettenpuffer ab 828 geschrieben: Syntax: input# Filenummer, Satzlänge, Variable. Erlaubt mehr als 88 Zeichen (253) direkt einzulesen, findet Anwendung bei der relativen Datei, Satzlänge 141 Zeichen. |
7990 - 8050 | DATAs für die Simulation der »SWAP«-Funktion (vergleiche 64’er, Ausgabe 1/85) von Boris Schneider): Ermöglicht das Vertauschen zweier Strings ohne zusätzliche Variable (»String-Müll«), eingesetzt in der Sortierroutine. Syntax: SYS Startadresse(string1,string2) Startadresse im Programm: Speicherstelle 715 in der Zero-Page. |
Wichtiger Hinweis:
Sollte jemand mit Simons Basic editieren, ist zu beachten, daß nach dem ersten Start des Programms nicht mehr alle Befehle dieser Basic-Erweiterung wegen der DATAs im Kassettenpuffer einwandfrei funktionieren (Syntax-Error!?)
Eine Beeinträchtigung von Exbasic Level II konnte bisher nicht beobachtet werden.
Gestartet wird das Programm mit RUN.
Auf eines sei noch aufmerksam gemacht. Durch die Kommentarzeilen sind eine Vielzahl von Blöcken entstanden, die der Gliederung des Programms dienen, aber ohne Bedeutung für den Programmablauf sind. Es lassen sich einige Byte einsparen, wenn die Kommentare entfallen. Da sie keine Sprungadressen sind, kann dies auch bedenkenlos geschehen.
Das Programm selbst gewinnt jedenfalls dadurch an Schnelligkeit.
Nun wünsche ich allen Interessierten viel Erfolg beim Eingeben und Anwenden des »Haushaltsbuchs«. Möge die Kasse nun immer stimmen.
(Martin Schumann/gk)

Variable | Bedeutung |
A | enthält bei Änderungen die Satznummer des zu ändernden Feldes |
AK | Anzahl der Konten (relative Datei) |
AV | Flag bei Änderungen |
B | Feldnummer des zu ändernden Feldes |
BD$ | Buchungstag |
BL$ | Leerstring mit 20 Positionen, wird beim Auffüllen der Inhalte von RC$ benutzt |
C | Zeilenposition des Cursors |
D$(Y,I) | Satz der sequentiellen Buchungsdatei Y,0 = Kostenart; Y,1 = Betrag Y,2 = Buchungsdatum |
F% | Normalwert in Speicherstelle 768 der Fehlerroutine des Interpreters |
F$(I) | Bezeichnung der Funktionen im Hauptmenü |
FB$(I) | Feldbezeichnung (sequentieller Datensatz) |
FS$(I) | Sonderfunktionen |
FU | gewählte Funktion des Untermenüs |
GS | Gesamtsaldo in den Übersichten |
I,J,T,K,Y | Laufvariable in Schleifen |
J$ | aktuelles Jahr (4stellig) |
JA$ | die beiden Endziffern des aktuellen Jahres |
JS | Jahressaldo aller Konten |
KN$(I) | Name der Konten (relative Datei) |
KN | Nummer des gewählten Kontos (Datei) |
KZ | Zahl der Konten (wird nur bei »Konten anlegen« benutzt; sonst AK) |
L | Position des Dezimalpunktes |
LV | Laufvariable (Buchen) für die Aufbereitung der Felder der sequentiellen Buchungsdateien |
M$(I) | Monatsnamen |
MS(I) | Jahressalden der Konten bei Jahresübersicht |
MO$ | String für gewählten Monat (für Datum) |
M | Nummer des gewählten Monats |
N$(I) | Kurzform des Kontennamens für sequentielle Datei) |
O | Obergrenze bei Jahressaldo, wenn nicht das komplette Jahr kumuliert werden soll |
RC$ | relativer Datensatz (Record) |
U | Untergrenze bei Jahressaldo, wenn nicht das komplette Jahr kumuliert werden soll. |
S | Spaltenposition des Cursors |
S(M) | Monatssalden des eingelesenen Kontos |
S$(I) | Monatssalden als String |
S% | Flag für Sortieren |
SB$(I) | enthält die Suchbegriffe auf |
SU |
|
X | gewählte Funktion |
X$ | Eingaben in GET-Funktionen |
Z | Anzahl der Sätze einer sequentiellen Datei |
ZS(M) | Zwischenspeicher der Monatssalden der Konten |
ZZ |
|
ZW | Zwischenspeicher für die Nummer der aktuellen sequentiellen Datei im Computer |
1 rem ********************************* 2 rem * > h a u s h a l t s b u c h < * 3 rem * * 4 rem * martin schumann * 5 rem ********************************* 40 printchr$(147):poke211,12:poke214,10:sys58732:print"ich lese daten !" 50 gosub7830:gosub7970:dimsb$(2),f$(7),fs$(5) 60 dimms(20),m$(12),d$(200,2),s(12),zs(12),n$(20),s$(20),kn$(20):t1$="0" 70 m$(1)="januar ":m$(2)="februar " 80 m$(3)="maerz ":m$(4)="april " 90 m$(5)="mai ":m$(6)="juni " 100 m$(7)="juli ":m$(8)="august " 110 m$(9)="september":m$(10)="oktober " 120 m$(11)="november ":m$(12)="dezember " 130 f$(1)=" konten anlegen " 140 f$(2)=" buchen " 150 f$(3)=" kontenuebersicht " 160 f$(4)=" kontennamen ausgeben" 170 f$(5)=" monatsuebersicht " 180 f$(6)=" jahresuebersicht " 190 f$(7)=" buchungsposten abfr." 200 f$(0)=" programm beenden " 210 f%=peek(768):goto880 220 rem 230 rem =*= d r u c k e r vorhanden? 240 rem 250 poke768,185:open1,4:print#1,"":close1:poke768,f% 260 ifst<>-128goto290 270 poke214,24:poke211,2:sys58732:print" drucker nicht bereit ! "; 280 :fori=0to2500:next 290 return 300 rem 310 rem =*= f l o p p y vorhanden? 320 rem 330 poke768,185:open1,8,15,"i":close1:poke768,f% 340 ifst<>-128goto365 350 c=23:s=9:gosub830:print"{red} floppy nicht bereit !" 360 :fori=0to2500:next:return 365 open1,8,15,"m-w"+chr$(7)+chr$(28)+chr$(1)+chr$(15):rem floppyzugriff beschl. 370 input#1,r:close1 375 ifr=21thens=9:c=23:gosub830:print"{red}diskette einlegen !":fori=0to3500:next 380 return 390 rem ============================== 400 rem ** shell - sort /(num.) ** 410 rem ============================== 420 d=4 430 ifd<nthend=d+d:goto430 440 d=d-1 450 d=int(d/2) 460 ifd<1thenreturn 470 forj=1ton-d 480 :fori=jto1step-d 490 : ifval(d$(i+d,x))>=val(d$(i,x))goto540 500 : fort=0to2 510 : sys715(d$(i,t),d$(i+d,t)) 520 : nextt 530 :nexti 540 nextj 550 goto450 570 rem =========================== 580 rem ** shell - sort/alpha ** 590 rem =========================== 600 d=4 610 ifd<nthend=d+d:goto610 620 d=d-1 630 d=int(d/2) 640 ifd<1thenreturn 650 forj=1ton-d 660 :fori=jto1step-d 670 : ifd$(i+d,x)>=d$(i,x)then720 680 : fort=0to2 690 : sys715(d$(i,t),d$(i+d,t)) 700 : nextt 710 :nexti 720 nextj 730 goto630 740 rem 750 rem *=* u e b e r s c h r i f t e n 760 printtab(8)"{orng}UCCCCCCCCCCCCCCCCCCCCCCI":rem 22 chr$(99)=shift c 770 printtab(8)"B";f$(x);" B":rem menuefunktionen 780 printtab(8)"JCCCCCCCCCCCCCCCCCCCCCCK{brn}":rem com-taste+2 790 return 810 rem =*= cursor positionieren =*= 830 poke211,s:poke214,c:sys58732:return 850 rem ** erster bildschirm **** 860 rem =============================== 870 : 880 poke53281,7:poke53280,8:print"{brn}":bl$=" ":rem 20 blank 890 gosub4010:poke788,52:rem stop aus 900 input"aktuelles jahr (1984-1999): ";j$:ja$=right$(j$,2) 910 :ifj$<"1983"orj$>"1999"thenprint"unzulaessiges jahr!":print"{up}{up}";:goto900 920 rem shift/crsr^ <chr$(145)> 930 rem =============================== 940 rem menue / aufruf unterprogramme 950 rem =============================== 960 gosub4010 970 printtab(10)"{red}funktionsauswahl:" 980 printtab(10)"-----------------":print 990 printtab(5)"{blu}-1-{brn} konten anlegen" 1000 printtab(5)"{blu}-2-{brn} buchen":print 1010 printtab(5)"{blu}-3-{brn} kontenuebersicht":print 1020 printtab(5)" {orng} <kontennamen ausgeben>":printtab(11)"-----> {blu}2-3,5-7" 1030 printtab(45)"{blu}-5-{brn} monatsuebersicht" 1040 printtab(5)"{blu}-6-{brn} jahresuebersicht":print 1050 printtab(5)"{blu}-7-{brn} buchungsposten abfragen":print 1060 printtab(5)"{grn}-0-{brn} programm beenden":print 1070 printtab(10)"{rvon}{red} auswahl (0-7) {rvof}{brn}" 1080 get x$: if x$<"0"orx$>"7"then1080 1090 : x=val(x$):if x=0 goto1200 1100 : ifx<>4goto1130 1110 : s=6:c=22:gosub830:print"{red}werden bei den uebrigen funktio-" 1120 : printtab(6)"nen automatisch ausgegeben";:fori=0to2000:next:goto960 1130 : on x gosub 1310,1750,2510,2890,3240,3580,4500 1140 goto960 1160 rem ========================== 1170 rem ** programm beenden ** 1180 rem ========================== 1200 gosub4010:gosub760:print:print:print 1210 close1:close2:close3 1220 print"sollten sie versehentlich das programm beendet haben, so koennen "; 1230 print"sie es mit",tab(15)chr$(17)"{rvon}{red} goto 960 {rvof}{brn}"chr$(17),,"wieder "; 1240 print"starten !":poke788,49:rem stop ein 1250 s=0:c=13:gosub830:sys42115:rem end ohne ready 1270 rem ***======================*** 1280 rem === konten anlegen === 1290 rem ***======================*** 1310 gosub4010:gosub760:rem gew.funkt. 1320 print"{blu}achtung ! eine evtl. bereits angelegte datei dieses jahres wird"; 1330 print" geloescht.":printchr$(28) 1340 print"{red}wollen sie das (j/n)" 1350 get x$:if x$<>"j"and x$<>"n"then1350 1360 :ifx$="n"thenreturn 1370 gosub330:ifst=-128orr=21thenreturn 1380 open3,8,15,"s:"+j$+"*":close3:ak=0 1390 open2,8,15,"s:konten"+j$ 1400 printchr$(147);:gosub760 1410 print:print" wieviele konten wollen sie anlegen" 1420 print" {red}{rvon} 0 {rvof}{brn} = keine konten neu anlegen ":input"(1-20) ";kz 1430 : ifkz=0thenclose1:close2:return 1440 : ifkz<1orkz>20thenprintchr$(145)chr$(145)chr$(145);:goto1420 1450 open1,8,2,"konten"+j$+",l,"+chr$(141) 1460 printchr$(145);:zz=0:d$(0,0)="noch keine buchungen" 1470 s=1:c=4:gosub830:print"<{red}{rvon}return{rvof}{brn}> = konten anlegen abbrechen " 1480 print" " 1490 print" ":rem 36 x space 1500 fori=1tokz 1510 :print"name konto nr.";spc(3-len(str$(i)))i":"; 1520 : input kn$ 1530 : ifkn$=""theni=kz:goto1610 1540 : if len(kn$)>20 then kn$=left$(kn$,20) 1550 : rc$=kn$+left$(bl$,20-len(kn$)) 1560 : n$(i)=left$(rc$,12) 1570 : for t=1 to 12 1580 : rc$=rc$+str$(0)+left$(bl$,10-len(str$(0))) 1590 : nextt:zz=zz+1 1600 : print#1,rc$:kn$="" 1610 nexti 1620 close1:close2:close3 1630 ifzz<kzthenkz=zz:rem abbruch ? 1640 for i=1 to kz 1650 : open3,8,3,j$+n$(i)+",s,w" 1660 : print#3,d$(0,0) 1670 : close3 1680 next i 1690 close1:close2:close3:return 1710 rem ============================ 1720 rem *** b u c h e n *** 1730 rem ============================ 1750 gosub2900:ifkn$="e"orak=0thenreturn 1760 ifst=-128orr=21thenreturn 1770 x=2:gosub4110:lv=1 1780 printchr$(147)"{lblu}";:gosub760:su=0 1790 print"-------------------------------" 1800 print"{lblu}nr.";kn;" - {red}";kn$(kn) 1810 print"{brn}-------------------------------" 1820 print"einnahme oder ausgabe (e/a) ?" 1830 print"-------------------------------" 1840 print 1850 print"{blu} funktion verlassen mit {red}f7{brn}!"; 1860 getx$:ifx$<>"e"andx$<>"a"thenifx$<>chr$(136)goto1860 1870 : ifx$=chr$(136)andlv>1thenlv=lv-1:goto2210 1880 : ifx$=chr$(136)thenclose1:close2:return 1890 ba$=x$:rem buchungsart merken 1900 s=30:c=6:gosub830:printba$:s=1:c=9:gosub830 1910 input"monat (1-12) : {blu}";mo$:m=val(mo$) 1920 : if m<1 or m>12 then printchr$(145);:goto 1910 1930 print"{brn}-------------------------------" 1940 print"alter stand : {lblu}";s(m):zs(m)=s(m) 1950 print"{brn}-------------------------------" 1960 print"kostenart, betrag, tag :{blu}" 1970 inputd$(lv,0),su,bd$ 1980 print"{brn}-------------------------------" 1990 ifx$="e"thens(m)=s(m)+su:goto2010 2000 s(m)=s(m)-su 2010 print"neuer stand : {blu}";s(m) 2020 print"{brn}-------------------------------":print 2030 print"{lblu}alles richtig (j/n) ?{brn}" 2040 get x$:if x$<>"j"and x$<>"n"then 2040 2050 ifx$="n"thens(m)=zs(m):goto1780 2090 iflen(bd$)=1 then bd$=t1$+bd$ 2110 :::rem *=*= tag zu datum aufbereiten *=*= monat/tag/jahr 2120 : d$(lv,2)=mo$+bd$+ja$ 2130 : ifba$="a"thensu=su-2*su 2140 : gosub4370:rem nachkommastelle pruefen 2150 : iflen(d$(lv,0))>20thend$(lv,0)=left$(d$(lv,0),20) 2160 : d$(lv,1)=su$ 2180 print:print"{blu}weitere buchungen auf diesem konto (j/n) ?{brn}" 2190 get x$:if x$<>"j"and x$<>"n"then 2190 2200 :ifx$="j"thenlv=lv+1:su=0:printchr$(147);:gosub760:goto1790 2210 printchr$(147):poke211,10:poke214,11:sys58732 2220 print"{lblu}ok. ich speichere !" 2230 rc$="" 2240 rc$=rc$+kn$+left$(bl$,20-len(kn$)) 2250 fori=1to12 2260 : s$=str$(s(i)) 2270 : rc$=rc$+s$+left$(bl$,10-len(s$)) 2280 next i 2290 print#2,"p"+chr$(2)+chr$(kn)+chr$(0)+chr$(1) 2300 print#1,rc$ 2310 close1:close2:close3 2320 : 2330 rem == abspeichern der seq.datei 2340 rem == daten anhaengen _ "append" 2350 n$=left$(kn$(kn),12) 2360 open3,8,3,j$+n$+",s,a" 2370 for y=1 to lv 2380 : for i=0 to 2 2390 : print#3,d$(y,i) 2400 : next i 2410 next y 2420 close3 2430 printchr$(145);:print"{red}weitere buchungen auf anderen konten (j/n) ?{brn}" 2440 get x$:if x$<>"j"and x$<>"n"then 2440 2450 if x$="j" then 1750 2460 return 2470 rem ============================ 2480 rem *** konten-uebersicht **** 2490 rem ============================ 2500 : 2510 gosub2900:ifkn$="e"orak=0thenreturn 2520 x=3:gosub4110:ifst=-128orr=21thenreturn 2530 printchr$(147);:gosub760 2540 print"{lblu}--------------------------------------{blu}" 2550 print" nr.";kn;"- ";"{red}"kn$"{lblu}" 2560 print"--------------------------------------" 2570 printspc(2)"monat"spc(22)"saldo" 2580 print"--------------------------------------{brn}" 2590 gs=0 2600 fori=1to12 2610 : printspc(2)m$(i);spc(22-len(str$(int(s(i)))))"{lblu}"s(i)"{brn}" 2620 : gs=gs+s(i) 2630 next i 2640 print"--------------------------------------" 2650 printspc(2)"{red}"j$;spc(3)"{brn}gesamt"spc(18-len(str$(int(gs))))"{blu}"gs 2660 printspc(27)"==========" 2670 close1:close2:ifx$=chr$(133)thenprint#4:close4:goto2780 2680 print"weitere uebersichten = {red}f3{blu}" 2690 goto2760 2700 return 2720 rem ============================ 2730 rem =*= up ausdrucken ? === 2740 rem ============================ 2760 poke214,24:poke211,0:sys58732 2770 print" ausdrucken = {red}f1{blu} zum menue = {red}f5{blu}";:printchr$(145); 2780 : getx$:ifx$=chr$(133)goto2820 2790 : ifx$=chr$(134)andx=3goto2510 2800 :ifx$=chr$(135)goto960 2810 : goto2780 2820 gosub250:ifst=-128thenx$="":goto2760 2830 close4:open4,4:print#4,chr$(27)+chr$(108)+chr$(10):cmd4:ifx=3goto2540 2840 : ifx=5goto3420 2850 : ifx=6goto3850 2860 : 2870 rem ============================ 2880 rem ** kontennamen ausgeben *** 2890 rem ============================ 2900 x=4:printchr$(147);:gosub760:print 2910 ifak<>0thengosub3120:return 2920 gosub330:ifst=-128orr=21thenreturn 2930 open1,8,2,"konten"+j$+",l,"+chr$(141) 2940 open2,8,15 2950 : ak=1 2960 : print#2,"p"+chr$(2)+chr$(ak)+chr$(0)+chr$(1) 2970 : rc$="" 2980 : input*1,141,rc$:ifleft$(rc$,1)="~"thenrc$="":goto3040 2990 : input#2,r 3000 : ifr=50thenrc$="":goto3040 3010 : kn$(ak)=left$(rc$,20):l%=len(str$(ak)) 3020 : printspc(3-l%)ak;" - ";kn$(ak) 3030 : ak=ak+1:goto 2960 3040 ak=ak-1:close1:close2:ifak<>0goto3060 3050 printtab(6)"{red}datei "j$" nicht gefunden !{brn}":fori=0to2000:next:return 3060 gosub3130:return 3070 : 3080 rem ** k o n t o auswaehlen ** 3090 rem ============================ 3110 gosub4990 3120 fori=1toak:l%=len(str$(i)):printspc(3-l%)i;kn$(i):nexti 3130 print:print"abbrechen mit {rvon}{red} e {rvof}{brn}" 3140 input"kontonummer (1-20) : ";kn$ 3150 : ifkn$="e"orak=0thenreturn 3160 : kn=val(kn$) 3170 : ifkn<1 or kn>akthenprintchr$(145);:goto3140 3180 return 3200 rem ============================ 3210 rem ** monatsuebersicht *** 3220 rem ============================ 3240 printchr$(147);:gosub760:print 3250 input"monat : ";m 3260 : ifm<1orm>12thenprintchr$(145);:goto3250 3270 : 3280 gosub330:ifst=-128orr=21thenreturn 3290 open1,8,2,"konten"+j$+",l,"+chr$(141) 3300 open2,8,15 3310 gs=0:kn=1 3320 print#2,"p"+chr$(2)+chr$(kn)+chr$(0)+chr$(1) 3330 :rc$="" 3340 : input*1,141,rc$:ifleft$(rc$,1)="~"thenrc$="":goto3410 3350 : input#2,r 3360 : ifr=50thenrc$="":goto3410 3370 : kn$(kn)=left$(rc$,20) 3380 : s$(kn)=mid$(rc$,(20+(m-1)*10),10) 3390 : gs=gs+val(s$(kn)) 3400 : kn=kn+1:goto3320 3410 su=gs:gosub4370 3420 printchr$(145)"---------- {red}";m$(m);" "j$" {brn}--------" 3430 print"{blu}nr. name saldo" 3440 print"{brn}----------------------------------" 3450 fork=1tokn-1:l%=len(str$(k)) 3460 : printspc(3-l%)k;kn$(k);spc(6-len(str$(int(val(s$(k))))))"{lblu}"s$(k)"{brn}" 3470 next 3480 print"{brn}----------------------------------" 3490 printm$(m)" "j$;spc(3)"gesamt "spc(7-(l-1))"{blu}"su$"{brn}" 3500 printspc(24)"==========" 3510 close1:close2:ifx$=chr$(133)thenprint#4:close4 3520 goto2760 3540 rem *** ====================== ** 3550 rem *** jahresuebersicht ** 3560 rem *** ====================== ** 3580 printchr$(147);:gosub760:print 3590 print" saldo 12 monate ( j/ n ) ?":print:print 3600 getx$:ifx$<>"j"andx$<>"n"goto3600 3610 : ifx$="j"thenu=1:o=12:goto3660 3620 print"geben sie bitte unter- und obergrenze an":input"(u,o) --> ";u,o 3630 if u<1 or u>12 or o<1or o>12thenprintchr$(145)chr$(145)chr$(145);:goto3620 3640 ifu>othent=u:u=o:o=t 3660 gosub330:ifst=-128orr=21thenreturn 3670 printchr$(147);:gosub760:print 3680 open1,8,2,"konten"+j$+",l,"+chr$(141) 3690 open2,8,15 3700 js=0:fork=1toak:ms(k)=0:next:kn=1 3710 : print#2,"p"+chr$(2)+chr$(kn)+chr$(0)+chr$(1) 3720 ::input*1,141,rc$:ifleft$(rc$,1)="~"thenrc$="":goto3840 3730 : input#2,r 3740 : if r=50 then rc$="":goto 3840 3750 : kn$(kn)=left$(rc$,20) 3760 : form=utoo 3770 : s$(kn)=" ":s=0 3780 : s$(kn)=mid$(rc$,(20+(m-1)*10),10) 3790 : s=val(s$(kn)) 3800 : ms(kn)=ms(kn)+s 3810 : nextm 3820 : js=js+ms(kn) 3830 kn=kn+1:goto 3710 3840 su=js:gosub4370 3850 print"{brn}-------------- {red}"j$"{brn} --------------" 3860 print"{blu}nr. name saldo" 3870 print"{brn}----------------------------------" 3880 fork=1tokn-1:l%=len(str$(k)) 3890 :printspc(3-l%)k;kn$(k);spc(6-len(str$(int(ms(k)))))"{lblu}"ms(k)"{brn}" 3900 next 3910 print"{brn}----------------------------------" 3920 print" {red}";j$;" saldo "; 3930 printleft$(m$(u),3)" - "left$(m$(o),3)spc(9-(l-1))"{blu}"su$"{brn}" 3940 printspc(23)"===========" 3950 close1:close2:ifx$=chr$(133)thenprint#4:close4 3960 goto2760 3980 rem ========================== ** 3990 rem *** programmkopf erstellen ** 4000 rem ========================== ** 4010 printchr$(147); 4020 printtab(4)"================================" 4030 printtab(4)"h a u s h a l t s b u c h "+j$ 4040 printtab(4)"================================" 4050 print:return 4070 rem *** ====================== ** 4080 rem ** konto einlesen ** 4090 rem *** ====================== ** 4110 gosub330:ifst=-128orr=21thenreturn 4120 printchr$(147);:gosub760:print:print 4130 print:print"{lblu}konto {red}";kn$(kn);"{lblu} wird eingele-sen !{brn}" 4140 open1,8,2,"konten"+j$+",l,"+chr$(141) 4150 open2,8,15 4160 print#2,"p"+chr$(2)+chr$(kn)+chr$(0)+chr$(1) 4170 rc$="" 4180 :input*1,141,rc$:ifleft$(rc$,1)="~"thenrc$="":goto4310 4190 : input#2,r 4200 : if r<>50 then 4250 4210 print:print"jahresdatei bzw. konto nicht gefunden !":print 4220 print"weiter mit {rvof}{lgrn} taste {rvof}{brn} !";:wait 198,1:poke 198,0 4230 close1:close2:return 4240 : 4250 kn$=left$(rc$,20) 4260 gs=0 4270 for i=1 to 12 4280 : s(i)=val(mid$(rc$,20+(i-1)*10,10)) 4290 : gs=gs+s(i) 4300 next i 4310 return 4320 : 4330 rem ============================== 4340 rem = up summenausgabe aufbereiten 4350 rem = <print using>-simulation 4360 rem ============================== 4370 su$=str$(su):a=len(su$):l=0:fort=1toa:ifmid$(su$,t,1)="."thenl=t:t=a 4380 nextt 4390 : ifl=0thensu$=su$+".00":l=a+1:return 4400 : ifa>=l+2andsu<0thensu=su-.00001:su$=left$(str$(su),l+2):return 4410 : ifa>=l+2andsu>0thensu=su+.00001:su$=left$(str$(su),l+2):return 4420 : ifa=l+1thensu$=su$+"0" 4430 return 4440 : 4450 rem ============================ 4460 rem == sonderfunktionen == 4470 rem == seq.buchungsdateien == 4480 rem ============================ 4490 : 4500 fs$(1)="datei laden {$a0}" 4510 fs$(2)="datei sichern {$a0}" 4520 fs$(3)="buchungen ausgeben{$a0}" 4530 fs$(4)="buchungen aendern {$a0}" 4540 fs$(5)="buchungen sortieren" 4550 fs$(0)="s-funktion beenden " 4560 : 4570 fb$(0)="kostenart " 4580 fb$(1)="betrag " 4590 fb$(2)="buchungsmonat" 4600 :s%=0 4610 gosub 3990:print 4620 printtab(8)"{red}sonderfunktion":printtab(8)"-----------------" 4630 printtab(8)"{blu}buchungsposten bearbeiten":print 4640 printtab(5)" {orng} <datei laden> ----> {rvon}{blu}3{rvof} - {rvon}5{rvof}" 4650 printtab(5)"{blu}{rvon}2{rvof}{brn} datei sichern":print 4660 printtab(5)"{blu}{rvon}3{rvof}{brn} buchungen ausgeben" 4670 printtab(5)"{blu}{rvon}4{rvof}{brn} buchungen aendern" 4680 printtab(5)"{blu}{rvon}5{rvof}{brn} buchungen sortieren":print:print 4690 printtab(5)"{grn}0{brn} sonderfunktion verlassen":print:print 4700 : 4710 printtab(8)"{red}{rvon} auswahl 0-5 {rvof}{brn} " 4720 : 4730 getf$:iff$="0"thenclose3:gosub4820:return:rem zum hauptmenue 4740 iff$<"2"orf$>"5"then4730 4750 fu=val(f$) 4760 :onfugosub6300,6560,5070,6880,6030 4770 goto4610 4780 : 4790 rem =*=*= sonderfunktionen verlassen *=* 4800 rem pruefen, ob aenderungen gesichert =*= 4810 : 4820 ifav=0ands%=0thenreturn 4830 printchr$(147):gosub4990:print 4840 ifav=0ands%=1goto4890 4850 print"die datei {red}"kn$(zw)"{brn} wurde","veraendert, aber nicht gesichert !" 4860 print:print"wollen sie sichern ? ---> {red}{rvon} s {rvof}{blu}" 4870 print:print"zurueck zum menue ? ---> {red}return{blu}":gosub4920:av=0:return 4880 : 4890 print"datei {red}"kn$(zw)"{brn} wurde","sortiert, aber noch nicht gesichert !" 4900 print:print"wollen sie sichern ? ---> {red}{rvon} s {rvof}{blu}":print 4910 print"zurueck zum menue ? ---> {red}return{blu}" 4920 getx$:ifx$=chr$(13)thenreturn 4930 ifx$="s"thens%=0:gosub6590:return 4940 goto4920 4950 : 4960 rem =*= ueberschrift / funktion 4970 rem ============================ 4980 : 4990 printtab(8)"{orng}UCCCCCCCCCCCCCCCCCCCCCCI" 5000 printtab(8)"B ";fs$(fu);" B" 5010 printtab(8)"JCCCCCCCCCCCCCCCCCCCCCCK{brn}" 5020 print:return 5030 : 5040 rem ============================ 5050 rem == buchungen ausgeben == 5060 rem ============================ 5070 printchr$(147); 5080 gosub4990:print:print"{blu}drucker ({rvon}{red}d{rvof}{blu}) oder bildschirm ({rvon}{red}b{rvof}{blu}) ?" 5090 geta$:aa$=a$:ifa$<>"d"anda$<>"b"goto5090 5100 gosub6300:ifkn$="e"orak=0thenreturn 5110 ifst=-128orr=21thenreturn 5120 ifa$<>"d"goto5180 5130 gosub250:ifst=-128thenzw=0:return 5140 close4:open4,4:print#4,chr$(27)+chr$(108)+chr$(10); 5145 print#4,chr$(10);chr$(14);kn$(kn);"{$a0}";j$;chr$(10) 5150 print#4,"kostenart betrag datum " 5160 print#4,"------------------------------------------------":print#4 5170 ifz=0thenprint#4:print#4,spc(9)d$(z,0):print#4:close4:return 5180 fu=3:su=0:zz=0 5190 printchr$(147);:gosub4990:print:print kn$(kn):print 5200 ifz=0thenprinttab(90)"{red}"d$(z,0):fori=0to2000:next:return 5210 : sb$(0)="":sb$(2)="" 5220 poke211,3:poke214,13:sys58732:print"{blu}druecken sie bei nicht relevanten" 5230 printtab(3)"feldern ----> {red}return{brn}" 5240 poke214,7:print 5250 : printfb$(0);:inputsb$(0) 5260 : printfb$(2);:inputsb$(2) 5270 ifsb$(2)<>""andval(sb$(2))<1orval(sb$(2))>12thenprintchr$(145);:goto5260 5280 printchr$(147);:gosub4990:print"{red}"kn$(kn)" "j$:print"{brn}":iffu=4goto5300 5290 ifsb$(0)=""andsb$(2)=""anda$<>"d"thenfory=1toz:gosub5680:nexty:goto5470 5300 for y=1 to z 5310 : sb=0 5320 : if sb$(0)="" then sb=1:goto 5340 5330 : if left$(d$(y,0),len(sb$(0)))=sb$(0) then sb=sb+1 5340 : ifsb$(2)=""thensb=sb+1:goto5380 5350 :::rem =*= datum 1- od. 2-stellig? 5360 : iflen(d$(y,2))=5andleft$(d$(y,2),1)=sb$(2)thensb=sb+1:goto5380 5370 : iflen(d$(y,2))=6andleft$(d$(y,2),2)=sb$(2)thensb=sb+1 5380 :iffu=4goto5420 5390 :ifa$<>"d"goto5410 5400 : ifsb=2andfu=3thengosub5860:goto5440 5410 : ifsb=2andfu=3thengosub5680:goto5440 5420 : ifsb=2andzz>0thengosub7150:goto5440 5430 : ifsb=2andzz<1thengosub7140 5440 next y 5450 iffu=4ore$="e"thenreturn:rem zu "aenderungen" 5460 ifa$="d"thengosub5960:goto5500 5470 printtab(20)"----------":printtab(10)"{lblu}summe{blu} ";:gosub4370 5480 printtab(26-(l-1))su$;"{brn}" 5490 zz=0 5500 print:print"{red}dateiende erreicht." 5510 print"suchbegriff nicht (nochmals) gefunden !":print 5520 print"{blu}weitere buchungen suchen (j/n) ?" 5530 : get x$: if x$<>"j" and x$<>"n" goto5530 5540 ::ifx$="j"ands%<>0goto5180 5550 :ifx$="n"thenclose3:return 5560 printchr$(145)"{blu}gleiches konto {brn}"kn$(kn),"{blu} (j/n) ?"; 5570 :getx$:ifx$<>"j"andx$<>"n"goto5570 5580 :ifx$="j"goto5180 5590 kn=0 5600 printchr$(147):gosub3110:ifkn$="e"orak=0thenreturn 5610 if kn=zw then 5180: rem pruefen, 5620 zw=kn:rem ob gleiche kn wie vorher 5630 close3:gosub6330:ifaa$="d"thena$=aa$:goto5140 5640 goto5180 5650 ::rem =*=* buchung auf bildschirm 5660 ::rem ============================ 5670 : 5680 printd$(y,0);"{blu}"; 5690 d=val(d$(y,1)):su=su+d 5700 printtab(29-len(d$(y,1)));d$(y,1);"{brn}"; 5710 iflen(d$(y,2))=5 goto 5730 5720 printtab(31);mid$(d$(y,2),3,2)"."left$(d$(y,2),2)"."right$(d$(y,2),2):goto5740 5730 printtab(31);mid$(d$(y,2),2,2)". "left$(d$(y,2),1)"."right$(d$(y,2),2) 5740 zz=zz+1 5750 ify=z-1andzz>=11thenzz=0:gosub5780:goto5770 5760 ifzz>14andy<z-1thenzz=0:gosub5780:rem =*= ausgeben bis 15 stueck 5770 return 5780 printtab(20)"----------":printtab(10);"{lblu}summe{blu} ";:gosub4370 5790 printtab(26-(l-1))su$;"{brn}" 5800 print:print"{lblu}weiter mit {red}{rvon} taste {rvof}"; 5810 : wait 198,1:poke 198,0 5820 ::printchr$(147);:gosub4990:print"{red}"kn$(kn)" "j$"{brn}":print 5830 return 5840 : rem ** ausgabe auf drucker ** 5850 : rem ============================ 5860 d=val(d$(y,1)):su=su+d 5870 print#4,chr$(27)"d"; 5880 print#4,chr$(1)+chr$(34-len(d$(y,1)))+chr$(39)+chr$(0); 5890 print#4,chr$(9);d$(y,0);chr$(9);d$(y,1); 5900 iflen(d$(y,2))=5goto5930 5910 print#4,chr$(9)mid$(d$(y,2),3,2)"."left$(d$(y,2),2)"."right$(d$(y,2),2) 5920 goto5940 5930 print#4,chr$(9)mid$(d$(y,2),2,2)". "left$(d$(y,2),1)"."right$(d$(y,2),2) 5940 return 5950 : 5960 print#4,spc(25)"----------":print#4,spc(10);"{lblu}summe{blu} ";:gosub4370 5970 print#4,spc(15-(l-1));su$;"{brn}":close4:a$="":return 5980 : 5990 rem ============================ 6000 rem == datei sortieren == 6010 rem ============================ 6020 : 6030 gosub6300:ifkn$="e"orak=0thenreturn 6040 ifst=-128orr=21thenreturn 6050 n=z:fu=5:printchr$(147):gosub4990 6060 ifz=0thenprint:printtab(10)"{red}"d$(z,0):fori=0to2000:next:return 6070 for i=0 to 2 6080 ::printtab(8)"{rvon}{red}"i+1"{rvof}{brn} "fb$(i) 6090 nexti:print:s%=0 6100 printtab(4)"{blu}wonach soll sortiert werden ?" 6110 printtab(4)"geben sie bitte die nummer an !":print 6120 printtab(4)"zurueck zum menue --> {red}return{blu} !" 6130 getx$:ifx$=chr$(13)thenreturn 6140 ifx$<"1"orx$>"3"goto6130 6150 x=val(x$)-1:print 6160 printtab(4)"ich sortiere, bitte warten sie !":s%=1:rem kennz. datei sort. 6170 ifx=0thengosub600:goto6190 6180 gosub420 6190 printtab(4)"{blu}datei {red}"kn$(kn)"{blu} wurde",tab(4)"nach {red}",fb$(x)"{blu} sortiert !" 6200 print:printtab(4)"buchungsposten ausgeben (j/n) ?" 6210 :getx$:ifx$<>"j"andx$<>"n"goto6210 6220 :ifx$="j"thengosub5180 6230 :fu=5:gosub4820 6240 return 6250 : 6260 rem ============================ 6270 rem == datei laden == 6280 rem ============================ 6290 : 6300 gosub2900:ifkn$="e"orak=0thenreturn 6310 ifkn=zwthenreturn:rem pruefen, 6320 ifs%<>0orav<>0thengosub4820:s%=0:rem ob gleiche kn wie vorher 6330 zw=kn:n$=left$(kn$(kn),12) 6340 printchr$(147):fu=1:gosub 4990 6350 print:print:print"{blu}datei {red}"kn$(kn) "{blu}wird geladen !" 6360 gosub330:ifst=-128orr=21thenreturn 6370 open2,8,15 6380 open3,8,3,j$+n$+",s,r" 6390 input#2,r:ifr<>62goto6410 6400 ::print"datei nicht gefunden !":close2:close3:fort=0to3000:next:return 6410 z=0:input#3,d$(z,0),d$(z,1):ifst=64thenclose3:close2:return 6420 close3 6430 open3,8,3,j$+n$+",s,r" 6440 input#3,d$(0,0) 6450 z=1 6460 : 6470 ::input#3,d$(z,0),d$(z,1),d$(z,2) 6480 : 6490 if st<>64 then z=z+1:goto 6460 6500 close3:close2:return 6510 : 6520 rem ============================ 6530 rem == datei sichern == 6540 rem ============================ 6550 : 6560 ifz>0goto6590 6570 poke214,23:poke211,8:sys58732:print"keine daten im rechner" 6580 :forx=0to2000:next:return 6590 printchr$(147);:fu=2:gosub4990 6600 print:print"{blu}diskette eingelegt ?":print 6610 print"{brn}druecken sie anschliessend {red}{rvon} s {rvof}{blu}":print:fori=0to800:next 6620 print:print"wollen sie die geaenderte datei ",kn$(zw)" nicht sichern ?" 6630 print"dann menue ---> {red}return{blu}" 6640 getx$:ifx$<>"s"andx$<>chr$(13)goto6640 6650 : ifx$=chr$(13)thenreturn 6660 gosub330:ifst=-128orr=21thenreturn 6670 print:print"buchungsdatei {red}"kn$(zw)"{blu} wird","gesichert !" 6680 n$=left$(kn$(zw),12) 6690 close3:open3,8,15,"s:"+j$+n$ 6700 close3:open3,8,3,j$+n$+",s,w" 6710 : print#3,d$(0,0) 6720 : for y=1 to z 6730 : for i=0 to 2 6740 : print#3,d$(y,i) 6750 : next i 6760 : next y 6770 close3 6780 print:av=0:s%=0 6790 print"buchungsdatei {red}"kn$(zw)"{blu} ist gesichert !":print 6800 print:print"weiter mit {red}taste{blu} !" 6810 wait 198,1:poke 198,0 6820 return 6830 : 6840 rem ============================ 6850 rem == buchungen aendern == 6860 rem ============================ 6870 : 6880 gosub6300:ifkn$="e"orak=0thenreturn 6890 ifst=-128orr=21thenreturn 6900 printchr$(147):fu=4:gosub 4990 6910 ifz=0thenprint:printtab(9)"{red}"d$(z,0):fori=0to2000:next:return 6920 zz=0:zs=10:av=0:print 6930 print"{blu}wenn sie gezielt buchungpositionen oder monate aendern wollen,"; 6940 print" geben sie bitte"," {red}{rvon}e{blu}{rvof} ein." 6950 print:print"{red}return{lblu} listet die datei vollstaendig auf !" 6960 gete$:ife$<>"e"ande$<>chr$(13)goto6960 6970 ife$="e"thengosub5190:goto7060 6980 : 6990 rem =*= alle pos. auflisten =*= 7000 rem =========================== 7010 printchr$(147);:gosub 4990 7020 gosub 7780 7030 for y=1 to z 7040 : gosub 7150 7050 next y 7060 print:print"{blu}dateiende erreicht !" 7070 ife$=chr$(13)then7280 7080 ifzz<>0ande$="e"thene$="":goto7280 7090 :::fori=1to2000:next 7100 return 7110 : 7120 rem =*= ausgabe auf bildschirm == 7130 rem ===-----------------------=== 7140 gosub7780:rem bei einzel-selekt. 7150 ify<11ande$<>"e"thenprintspc(3-len(str$(y)))"{red}"y"{brn}"d$(y,0)"{blu}";:goto7170 7160 printspc(4-len(str$(y)))"{red}"y"{brn}"d$(y,0)"{blu}"; 7170 printtab(30-len(d$(y,1)));d$(y,1)"{orng}"; 7180 iflen(d$(y,2))=5goto7210 7190 printtab(31);mid$(d$(y,2),3,2)"."left$(d$(y,2),2)"."right$(d$(y,2),2) 7200 goto7220 7210 printtab(31);mid$(d$(y,2),2,2)". "left$(d$(y,2),1)"."right$(d$(y,2),2) 7220 zz=zz+1 7230 :ifzz=zsandzz<zthenzs=zs+10:gosub7280 7240 return 7250 : 7260 rem =*= aenderungsabfrage =*= 7270 : 7280 print:print"{red}aenderungen (j/n) ?" 7290 : get x$:if x$<>"j"and x$<>"n" then 7290 7300 : if x$="n"and y<z then printchr$(147):gosub 4990:gosub 7780:return 7310 : ifx$="n"andy>=zandav=1thengosub6590:return:rem aend.sichern 7320 : ifx$="n"andy>=zandav=0thenreturn:rem keine aenderung-->menue 7330 :printchr$(145)" ":rem 39 x leert. 7340 : 7350 rem =*= aenderung =*= 7360 rem ========================= 7370 c=17:s=0:gosub830 7380 print"{lblu}geben sie bitte die zu aendernde posi- tion ein (zeile, spalte) !" 7390 :inputa,b:b=b-1:ifb<>0andb<>2goto7370 7400 : ifa<1ora>ygoto7370 7410 : ify-1=zanda>y-1orb>2orb<0thenc=17:s=0:gosub830:goto7380 7420 : ifb<>2goto7470 7430 : iflen(d$(a,2))=5goto7460 7440 : printtab(2);mid$(d$(a,2),3,2)"."left$(d$(a,2),2)"."right$(d$(a,2),2) 7450 : goto7480 7460 : printtab(2);mid$(d$(a,2),2,2)". "left$(d$(a,2),1)"."right$(d$(a,2),2) 7470 ifb<>2thenprint"{brn} ";d$(a,b) 7480 print:print"bitte aendern sie ! ":av=1 7490 c=20:s=0:gosub830 7500 : 7510 inputd$(a,b):print" {red}"d$(a,b):iflen(d$(a,b))>20thend$(a,b)=left$(d$(a,b),20) 7520 ifb<>2goto7590:rem datum pruefen 7530 ifmid$(d$(a,2),3,1)="."andmid$(d$(a,2),6,1)="."goto7570 7540 ifmid$(d$(a,2),2,1)="."andmid$(d$(a,2),4,1)="."thengosub7710:goto7590 7550 ifmid$(d$(a,2),2,1)="."andmid$(d$(a,2),5,1)="."thengosub7720:goto7590 7560 ifmid$(d$(a,2),3,1)="."andmid$(d$(a,2),5,1)="."thengosub7730:goto7590 7570 d$(a,2)=mid$(d$(a,2),4,2)+left$(d$(a,2),2)+right$(d$(a,2),2) 7580 : 7590 print" weitere aenderungen (j/n) ?" 7600 : getx$:if x$<>"j"and x$<>"n"then 7600 7610 ::ifx$="n"andy<zthenprintchr$(147):gosub4990:gosub7780:return 7620 :ifx$="n"andy>=zandav=1thengosub6590:return:rem aend.sichern 7630 c=19:s=1:gosub830 7640 print"{blu} " 7650 print" ":rem 39 x leertaste 7660 print" " 7670 c=17:s=0:gosub830 7680 goto7380 7690 : 7700 rem =*= datum aufbereiten mmttjj * 7710 d$(a,2)=mid$(d$(a,2),3,1)+"0"+left$(d$(a,2),1)+right$(d$(a,2),2):return 7720 d$(a,2)=mid$(d$(a,2),3,2)+"0"+left$(d$(a,2),1)+right$(d$(a,2),2):return 7730 d$(a,2)=mid$(d$(a,2),4,1)+left$(d$(a,2),2)+right$(d$(a,2),2):return 7740 : 7750 rem =*= spalten-beschriftung =*= 7760 rem =========================== 7770 : 7780 printtab(5)"{red}1";tab(26)"2";tab(33)"3":print:return 7790 : 7800 rem ============================== 7810 rem ** datas fuer input-modifikat. 7820 rem ============================== 7830 fori=828to922 7840 readx:pokei,x:s=s+x:nexti 7850 data169,71,160,3,141,8,3,140,9,3,96,32 7860 data115,0,201,133,240,6,32,121,0,76,231,167 7870 data32,115,0,201,172,240,6,32,191,171,76,174 7880 data167,32,155,183,32,30,225,32,253,174,32,158 7890 data183,138,72,32,253,174,32,139,176,133,73,132 7900 data74,32,163,182,104,32,117,180,160,2,185,97 7910 data0,145,73,136,16,248,200,32,18,225,145,98 7920 data200,196,97,208,246,32,204,255,76,174,167 7930 ifs<>11096thenprint"fehler in datas!!":end 7940 sys828:return 7945 rem ============================== 7950 rem * swap - funktion simulieren * 7960 rem ============================== 7970 rem syntax:sys715(string1,string2) 7980 rem ============================== 7990 data 32,250,174,32,158,173,32,143,173,165,100,133,247,165,101,133 8000 data248,32,253,174,32,158,173,32,143,173,160,0,177,247,133,249 8010 data177,100,145,247,165,249,145,100,200,192,3,208,239,32,247,174,96 8030 sa=715:se=sa+48:fori=satose:readx:pokei,x:cs=cs+x:next 8040 ifcs<>7314thenprint"fehler in data's":end 8050 return
1 REM ********************************* 2 REM * > H A U S H A L T S B U C H < * 3 REM * * 4 REM * MARTIN SCHUMANN * 5 REM ********************************* 40 PRINTCHR$ (147):POKE 211,12:POKE 214,10:SYS 58732:PRINT"ICH LESE DATEN !" 50 GOSUB 7830:GOSUB 7970:DIM SB$(2),F$(7),FS$(5) 60 DIM MS(20),M$(12),D$(200,2),S(12),ZS(12),N$(20),S$(20),KN$(20):T1$="0" 70 M$(1)="JANUAR{3SPACE}":M$(2)="FEBRUAR{2SPACE}" 80 M$(3)="MAERZ{4SPACE}":M$(4)="APRIL{4SPACE}" 90 M$(5)="MAI{6SPACE}":M$(6)="JUNI{5SPACE}" 100 M$(7)="JULI{5SPACE}":M$(8)="AUGUST{3SPACE}" 110 M$(9)="SEPTEMBER":M$(10)="OKTOBER{2SPACE}" 120 M$(11)="NOVEMBER ":M$(12)="DEZEMBER " 130 F$(1)=" KONTEN ANLEGEN{6SPACE}" 140 F$(2)=" BUCHEN{14SPACE}" 150 F$(3)=" KONTENUEBERSICHT{4SPACE}" 160 F$(4)=" KONTENNAMEN AUSGEBEN" 170 F$(5)=" MONATSUEBERSICHT{4SPACE}" 180 F$(6)=" JAHRESUEBERSICHT{4SPACE}" 190 F$(7)=" BUCHUNGSPOSTEN ABFR." 200 F$(0)=" PROGRAMM BEENDEN{4SPACE}" 210 F%=PEEK (768):GOTO 880 220 REM 230 REM =*= D R U C K E R VORHANDEN? 240 REM 250 POKE 768,185:OPEN 1,4:PRINT#1,"":CLOSE 1:POKE 768,F% 260 IF ST<>-128GOTO 290 270 POKE 214,24:POKE 211,2:SYS 58732:PRINT"{6SPACE}DRUCKER NICHT BEREIT !{9SPACE}"; 280 :FOR I=0 TO2500:NEXT 290 RETURN 300 REM 310 REM =*= F L O P P Y VORHANDEN? 320 REM 330 POKE 768,185:OPEN 1,8,15,"I":CLOSE 1:POKE 768,F% 340 IF ST<>-128GOTO 365 350 C=23:S=9:GOSUB 830:PRINT"{RED,SPACE}FLOPPY NICHT BEREIT !" 360 :FOR I=0 TO2500:NEXT :RETURN 365 OPEN 1,8,15,"M-W"+CHR$ (7)+CHR$ (28)+CHR$ (1)+CHR$ (15):REM FLOPPYZUGRIFF BESCHL. 370 INPUT#1,R:CLOSE 1 375 IF R=21 THENS=9:C=23:GOSUB 830:PRINT"{RED}DISKETTE EINLEGEN !":FOR I=0 TO3500:NEXT 380 RETURN 390 REM ============================== 400 REM ** SHELL - SORT /(NUM.) ** 410 REM ============================== 420 D=4 430 IF D<N THEND=D+D:GOTO 430 440 D=D-1 450 D=INT (D/2) 460 IF D<1 THENRETURN 470 FOR J=1 TON-D 480 :FOR I=J TO1STEP -D 490 : IF VAL (D$(I+D,X))>=VAL (D$(I,X))GOTO 540 500 : FOR T=0 TO2 510 : SYS 715(D$(I,T),D$(I+D,T)) 520 : NEXT T 530 :NEXT I 540 NEXT J 550 GOTO 450 570 REM =========================== 580 REM ** SHELL - SORT/ALPHA ** 590 REM =========================== 600 D=4 610 IF D<N THEND=D+D:GOTO 610 620 D=D-1 630 D=INT (D/2) 640 IF D<1 THENRETURN 650 FOR J=1 TON-D 660 :FOR I=J TO1STEP -D 670 : IF D$(I+D,X)>=D$(I,X) THEN720 680 : FOR T=0 TO2 690 : SYS 715(D$(I,T),D$(I+D,T)) 700 : NEXT T 710 :NEXT I 720 NEXT J 730 GOTO 630 740 REM 750 REM *=* U E B E R S C H R I F T E N 760 PRINTTAB( 8)"{ORANGE}UCCCCCCCCCCCCCCCCCCCCCCI":REM 22 CHR$(99)=SHIFT C 770 PRINTTAB( 8)"B";F$(X);" B":REM MENUEFUNKTIONEN 780 PRINTTAB( 8)"JCCCCCCCCCCCCCCCCCCCCCCK{BROWN}":REM COM-TASTE+2 790 RETURN 810 REM =*= CURSOR POSITIONIEREN =*= 830 POKE 211,S:POKE 214,C:SYS 58732:RETURN 850 REM ** ERSTER BILDSCHIRM **** 860 REM =============================== 870 : 880 POKE 53281,7:POKE 53280,8:PRINT"{BROWN}":BL$="{SPACE,19SPACE}":REM 20 BLANK 890 GOSUB 4010:POKE 788,52:REM STOP AUS 900 INPUT"AKTUELLES JAHR (1984-1999): ";J$:JA$=RIGHT$ (J$,2) 910 :IF J$<"1983"OR J$>"1999" THENPRINT"UNZULAESSIGES JAHR!":PRINT"{2UP}";:GOTO 900 920 REM SHIFT/CRSR↑ <CHR$(145)> 930 REM =============================== 940 REM MENUE / AUFRUF UNTERPROGRAMME 950 REM =============================== 960 GOSUB 4010 970 PRINTTAB( 10)"{RED}FUNKTIONSAUSWAHL:" 980 PRINTTAB( 10)"-----------------":PRINT 990 PRINTTAB( 5)"{BLUE}-1-{BROWN,2SPACE}KONTEN ANLEGEN" 1000 PRINTTAB( 5)"{BLUE}-2-{BROWN,2SPACE}BUCHEN":PRINT 1010 PRINTTAB( 5)"{BLUE}-3-{BROWN,2SPACE}KONTENUEBERSICHT":PRINT 1020 PRINTTAB( 5)"{2SPACE,ORANGE,2SPACE}<KONTENNAMEN AUSGEBEN>":PRINTTAB( 11)"----->{SPACE,BLUE}2-3,5-7" 1030 PRINTTAB( 45)"{BLUE}-5-{BROWN,2SPACE}MONATSUEBERSICHT" 1040 PRINTTAB( 5)"{BLUE}-6-{BROWN,2SPACE}JAHRESUEBERSICHT":PRINT 1050 PRINTTAB( 5)"{BLUE}-7-{BROWN,2SPACE}BUCHUNGSPOSTEN ABFRAGEN":PRINT 1060 PRINTTAB( 5)"{GREEN}-0-{BROWN,2SPACE}PROGRAMM BEENDEN":PRINT 1070 PRINTTAB( 10)"{RVSON,RED,SPACE}AUSWAHL (0-7){SPACE,RVOFF,BROWN}" 1080 GET X$: IF X$<"0"OR X$>"7" THEN1080 1090 : X=VAL (X$):IF X=0 GOTO 1200 1100 : IF X<>4GOTO 1130 1110 : S=6:C=22:GOSUB 830:PRINT"{RED}WERDEN BEI DEN UEBRIGEN FUNKTIO-" 1120 : PRINTTAB( 6)"NEN AUTOMATISCH AUSGEGEBEN";:FOR I=0 TO2000:NEXT :GOTO 960 1130 : ON X GOSUB 1310,1750,2510,2890,3240,3580,4500 1140 GOTO 960 1160 REM ========================== 1170 REM ** PROGRAMM BEENDEN ** 1180 REM ========================== 1200 GOSUB 4010:GOSUB 760:PRINT:PRINT:PRINT 1210 CLOSE 1:CLOSE 2:CLOSE 3 1220 PRINT"SOLLTEN SIE VERSEHENTLICH DAS PROGRAMM{2SPACE}BEENDET HABEN, SO KOENNEN "; 1230 PRINT"SIE ES MIT",TAB( 15)CHR$ (17)"{RVSON,RED,SPACE}GOTO 960{SPACE,RVOFF,BROWN}"CHR$ (17),,"WIEDER "; 1240 PRINT"STARTEN !":POKE 788,49:REM STOP EIN 1250 S=0:C=13:GOSUB 830:SYS 42115:REM END OHNE READY 1270 REM ***======================*** 1280 REM === KONTEN ANLEGEN === 1290 REM ***======================*** 1310 GOSUB 4010:GOSUB 760:REM GEW.FUNKT. 1320 PRINT"{BLUE}ACHTUNG ! EINE EVTL. BEREITS ANGELEGTE{SPACE,SPACE}DATEI DIESES JAHRES WIRD"; 1330 PRINT" GELOESCHT.":PRINTCHR$ (28) 1340 PRINT"{RED}WOLLEN SIE DAS (J/N)" 1350 GET X$:IF X$<>"J"AND X$<>"N" THEN1350 1360 :IF X$="N" THENRETURN 1370 GOSUB 330:IF ST=-128OR R=21 THENRETURN 1380 OPEN 3,8,15,"S:"+J$+"*":CLOSE 3:AK=0 1390 OPEN 2,8,15,"S:KONTEN"+J$ 1400 PRINTCHR$ (147);:GOSUB 760 1410 PRINT:PRINT" WIEVIELE KONTEN WOLLEN SIE ANLEGEN" 1420 PRINT"{2SPACE,RED,RVSON,SPACE}0{SPACE,RVOFF,BROWN,2SPACE}= KEINE KONTEN NEU ANLEGEN{3SPACE}":INPUT"(1-20) ";KZ 1430 : IF KZ=0 THENCLOSE 1:CLOSE 2:RETURN 1440 : IF KZ<1OR KZ>20 THENPRINTCHR$ (145)CHR$ (145)CHR$ (145);:GOTO 1420 1450 OPEN 1,8,2,"KONTEN"+J$+",L,"+CHR$ (141) 1460 PRINTCHR$ (145);:ZZ=0:D$(0,0)="NOCH KEINE BUCHUNGEN" 1470 S=1:C=4:GOSUB 830:PRINT"<{RED,RVSON}RETURN{RVOFF,BROWN}> = KONTEN ANLEGEN ABBRECHEN{2SPACE}" 1480 PRINT"{37SPACE}" 1490 PRINT"{37SPACE}":REM 36 X SPACE 1500 FOR I=1 TOKZ 1510 :PRINT"NAME KONTO NR.";SPC( 3-LEN (STR$ (I)))I":"; 1520 : INPUT KN$ 1530 : IF KN$="" THENI=KZ:GOTO 1610 1540 : IF LEN (KN$)>20 THEN KN$=LEFT$ (KN$,20) 1550 : RC$=KN$+LEFT$ (BL$,20-LEN (KN$)) 1560 : N$(I)=LEFT$ (RC$,12) 1570 : FOR T=1 TO 12 1580 : RC$=RC$+STR$ (0)+LEFT$ (BL$,10-LEN (STR$ (0))) 1590 : NEXT T:ZZ=ZZ+1 1600 : PRINT#1,RC$:KN$="" 1610 NEXT I 1620 CLOSE 1:CLOSE 2:CLOSE 3 1630 IF ZZ<KZ THENKZ=ZZ:REM ABBRUCH ? 1640 FOR I=1 TO KZ 1650 : OPEN 3,8,3,J$+N$(I)+",S,W" 1660 : PRINT#3,D$(0,0) 1670 : CLOSE 3 1680 NEXT I 1690 CLOSE 1:CLOSE 2:CLOSE 3:RETURN 1710 REM ============================ 1720 REM *** B U C H E N *** 1730 REM ============================ 1750 GOSUB 2900:IF KN$="E"OR AK=0 THENRETURN 1760 IF ST=-128OR R=21 THENRETURN 1770 X=2:GOSUB 4110:LV=1 1780 PRINTCHR$ (147)"{LIG.BLUE}";:GOSUB 760:SU=0 1790 PRINT"-------------------------------" 1800 PRINT"{LIG.BLUE}NR.";KN;" -{SPACE,RED}";KN$(KN) 1810 PRINT"{BROWN}-------------------------------" 1820 PRINT"EINNAHME ODER AUSGABE (E/A) ?" 1830 PRINT"-------------------------------" 1840 PRINT 1850 PRINT"{BLUE,SPACE}FUNKTION VERLASSEN MIT{SPACE,RED}F7{BROWN}!"; 1860 GET X$:IF X$<>"E"AND X$<>"A" THENIF X$<>CHR$ (136)GOTO 1860 1870 : IF X$=CHR$ (136)AND LV>1 THENLV=LV-1:GOTO 2210 1880 : IF X$=CHR$ (136) THENCLOSE 1:CLOSE 2:RETURN 1890 BA$=X$:REM BUCHUNGSART MERKEN 1900 S=30:C=6:GOSUB 830:PRINTBA$:S=1:C=9:GOSUB 830 1910 INPUT"MONAT (1-12){7SPACE}:{5SPACE,BLUE}";MO$:M=VAL (MO$) 1920 : IF M<1 OR M>12 THEN PRINTCHR$ (145);:GOTO 1910 1930 PRINT"{BROWN}-------------------------------" 1940 PRINT"ALTER STAND{6SPACE}:{SPACE,LIG.BLUE}";S(M):ZS(M)=S(M) 1950 PRINT"{BROWN}-------------------------------" 1960 PRINT"KOSTENART, BETRAG, TAG{2SPACE}:{BLUE}" 1970 INPUTD$(LV,0),SU,BD$ 1980 PRINT"{BROWN}-------------------------------" 1990 IF X$="E" THENS(M)=S(M)+SU:GOTO 2010 2000 S(M)=S(M)-SU 2010 PRINT"NEUER STAND{6SPACE}:{SPACE,BLUE}";S(M) 2020 PRINT"{BROWN}-------------------------------":PRINT 2030 PRINT"{LIG.BLUE}ALLES RICHTIG (J/N) ?{BROWN}" 2040 GET X$:IF X$<>"J"AND X$<>"N" THEN 2040 2050 IF X$="N" THENS(M)=ZS(M):GOTO 1780 2090 IF LEN (BD$)=1 THEN BD$=T1$+BD$ 2110 :::REM *=*= TAG ZU DATUM AUFBEREITEN *=*= MONAT/TAG/JAHR 2120 : D$(LV,2)=MO$+BD$+JA$ 2130 : IF BA$="A" THENSU=SU-2*SU 2140 : GOSUB 4370:REM NACHKOMMASTELLE PRUEFEN 2150 : IF LEN (D$(LV,0))>20 THEND$(LV,0)=LEFT$ (D$(LV,0),20) 2160 : D$(LV,1)=SU$ 2180 PRINT:PRINT"{BLUE}WEITERE BUCHUNGEN AUF DIESEM KONTO{SPACE,5SPACE}(J/N) ?{BROWN}" 2190 GET X$:IF X$<>"J"AND X$<>"N" THEN 2190 2200 :IF X$="J" THENLV=LV+1:SU=0:PRINTCHR$ (147);:GOSUB 760:GOTO 1790 2210 PRINTCHR$ (147):POKE 211,10:POKE 214,11:SYS 58732 2220 PRINT"{LIG.BLUE}OK. ICH SPEICHERE !" 2230 RC$="" 2240 RC$=RC$+KN$+LEFT$ (BL$,20-LEN (KN$)) 2250 FOR I=1 TO12 2260 : S$=STR$ (S(I)) 2270 : RC$=RC$+S$+LEFT$ (BL$,10-LEN (S$)) 2280 NEXT I 2290 PRINT#2,"P"+CHR$ (2)+CHR$ (KN)+CHR$ (0)+CHR$ (1) 2300 PRINT#1,RC$ 2310 CLOSE 1:CLOSE 2:CLOSE 3 2320 : 2330 REM == ABSPEICHERN DER SEQ.DATEI 2340 REM == DATEN ANHAENGEN ← "APPEND" 2350 N$=LEFT$ (KN$(KN),12) 2360 OPEN 3,8,3,J$+N$+",S,A" 2370 FOR Y=1 TO LV 2380 : FOR I=0 TO 2 2390 : PRINT#3,D$(Y,I) 2400 : NEXT I 2410 NEXT Y 2420 CLOSE 3 2430 PRINTCHR$ (145);:PRINT"{RED}WEITERE BUCHUNGEN AUF ANDEREN KONTEN{SPACE,3SPACE}(J/N) ?{BROWN}" 2440 GET X$:IF X$<>"J"AND X$<>"N" THEN 2440 2450 IF X$="J" THEN 1750 2460 RETURN 2470 REM ============================ 2480 REM *** KONTEN-UEBERSICHT **** 2490 REM ============================ 2500 : 2510 GOSUB 2900:IF KN$="E"OR AK=0 THENRETURN 2520 X=3:GOSUB 4110:IF ST=-128OR R=21 THENRETURN 2530 PRINTCHR$ (147);:GOSUB 760 2540 PRINT"{LIG.BLUE}--------------------------------------{BLUE}" 2550 PRINT" NR.";KN;"- ";"{RED}"KN$"{LIG.BLUE}" 2560 PRINT"--------------------------------------" 2570 PRINTSPC( 2)"MONAT"SPC( 22)"SALDO" 2580 PRINT"--------------------------------------{BROWN}" 2590 GS=0 2600 FOR I=1 TO12 2610 : PRINTSPC( 2)M$(I);SPC( 22-LEN (STR$ (INT (S(I)))))"{LIG.BLUE}"S(I)"{BROWN}" 2620 : GS=GS+S(I) 2630 NEXT I 2640 PRINT"--------------------------------------" 2650 PRINTSPC( 2)"{RED}"J$;SPC( 3)"{BROWN}GESAMT"SPC( 18-LEN (STR$ (INT (GS))))"{BLUE}"GS 2660 PRINTSPC( 27)"==========" 2670 CLOSE 1:CLOSE 2:IF X$=CHR$ (133) THENPRINT#4:CLOSE 4:GOTO 2780 2680 PRINT"WEITERE UEBERSICHTEN ={SPACE,RED}F3{BLUE}" 2690 GOTO 2760 2700 RETURN 2720 REM ============================ 2730 REM =*= UP AUSDRUCKEN ? === 2740 REM ============================ 2760 POKE 214,24:POKE 211,0:SYS 58732 2770 PRINT"{2SPACE}AUSDRUCKEN ={SPACE,RED}F1{BLUE,3SPACE}ZUM MENUE{2SPACE}={SPACE,RED}F5{BLUE}";:PRINTCHR$ (145); 2780 : GET X$:IF X$=CHR$ (133)GOTO 2820 2790 : IF X$=CHR$ (134)AND X=3GOTO 2510 2800 :IF X$=CHR$ (135)GOTO 960 2810 : GOTO 2780 2820 GOSUB 250:IF ST=-128 THENX$="":GOTO 2760 2830 CLOSE 4:OPEN 4,4:PRINT#4,CHR$ (27)+CHR$ (108)+CHR$ (10):CMD 4:IF X=3GOTO 2540 2840 : IF X=5GOTO 3420 2850 : IF X=6GOTO 3850 2860 : 2870 REM ============================ 2880 REM ** KONTENNAMEN AUSGEBEN *** 2890 REM ============================ 2900 X=4:PRINTCHR$ (147);:GOSUB 760:PRINT 2910 IF AK<>0 THENGOSUB 3120:RETURN 2920 GOSUB 330:IF ST=-128OR R=21 THENRETURN 2930 OPEN 1,8,2,"KONTEN"+J$+",L,"+CHR$ (141) 2940 OPEN 2,8,15 2950 : AK=1 2960 : PRINT#2,"P"+CHR$ (2)+CHR$ (AK)+CHR$ (0)+CHR$ (1) 2970 : RC$="" 2980 : INPUT*1,141,RC$:IF LEFT$ (RC$,1)="↑" THENRC$="":GOTO 3040 2990 : INPUT#2,R 3000 : IF R=50 THENRC$="":GOTO 3040 3010 : KN$(AK)=LEFT$ (RC$,20):L%=LEN (STR$ (AK)) 3020 : PRINTSPC( 3-L%)AK;" - ";KN$(AK) 3030 : AK=AK+1:GOTO 2960 3040 AK=AK-1:CLOSE 1:CLOSE 2:IF AK<>0GOTO 3060 3050 PRINTTAB( 6)"{RED}DATEI "J$" NICHT GEFUNDEN !{BROWN}":FOR I=0 TO2000:NEXT :RETURN 3060 GOSUB 3130:RETURN 3070 : 3080 REM ** K O N T O AUSWAEHLEN ** 3090 REM ============================ 3110 GOSUB 4990 3120 FOR I=1 TOAK:L%=LEN (STR$ (I)):PRINTSPC( 3-L%)I;KN$(I):NEXT I 3130 PRINT:PRINT"ABBRECHEN MIT{SPACE,RVSON,RED,SPACE}E{SPACE,RVOFF,BROWN}" 3140 INPUT"KONTONUMMER (1-20) : ";KN$ 3150 : IF KN$="E"OR AK=0 THENRETURN 3160 : KN=VAL (KN$) 3170 : IF KN<1 OR KN>AK THENPRINTCHR$ (145);:GOTO 3140 3180 RETURN 3200 REM ============================ 3210 REM ** MONATSUEBERSICHT *** 3220 REM ============================ 3240 PRINTCHR$ (147);:GOSUB 760:PRINT 3250 INPUT"MONAT{2SPACE}: ";M 3260 : IF M<1OR M>12 THENPRINTCHR$ (145);:GOTO 3250 3270 : 3280 GOSUB 330:IF ST=-128OR R=21 THENRETURN 3290 OPEN 1,8,2,"KONTEN"+J$+",L,"+CHR$ (141) 3300 OPEN 2,8,15 3310 GS=0:KN=1 3320 PRINT#2,"P"+CHR$ (2)+CHR$ (KN)+CHR$ (0)+CHR$ (1) 3330 :RC$="" 3340 : INPUT*1,141,RC$:IF LEFT$ (RC$,1)="↑" THENRC$="":GOTO 3410 3350 : INPUT#2,R 3360 : IF R=50 THENRC$="":GOTO 3410 3370 : KN$(KN)=LEFT$ (RC$,20) 3380 : S$(KN)=MID$ (RC$,(20+(M-1)*10),10) 3390 : GS=GS+VAL (S$(KN)) 3400 : KN=KN+1:GOTO 3320 3410 SU=GS:GOSUB 4370 3420 PRINTCHR$ (145)"----------{SPACE,RED}";M$(M);" "J$"{SPACE,BROWN}--------" 3430 PRINT"{BLUE}NR.{SPACE,2SPACE}NAME{16SPACE}SALDO" 3440 PRINT"{BROWN}----------------------------------" 3450 FOR K=1 TOKN-1:L%=LEN (STR$ (K)) 3460 : PRINTSPC( 3-L%)K;KN$(K);SPC( 6-LEN (STR$ (INT (VAL (S$(K))))))"{LIG.BLUE}"S$(K)"{BROWN}" 3470 NEXT 3480 PRINT"{BROWN}----------------------------------" 3490 PRINTM$(M)" "J$;SPC( 3)"GESAMT "SPC( 7-(L-1))"{BLUE}"SU$"{BROWN}" 3500 PRINTSPC( 24)"==========" 3510 CLOSE 1:CLOSE 2:IF X$=CHR$ (133) THENPRINT#4:CLOSE 4 3520 GOTO 2760 3540 REM *** ====================== ** 3550 REM *** JAHRESUEBERSICHT ** 3560 REM *** ====================== ** 3580 PRINTCHR$ (147);:GOSUB 760:PRINT 3590 PRINT"{2SPACE}SALDO{2SPACE}12{2SPACE}MONATE{2SPACE}( J/ N ) ?":PRINT:PRINT 3600 GET X$:IF X$<>"J"AND X$<>"N"GOTO 3600 3610 : IF X$="J" THENU=1:O=12:GOTO 3660 3620 PRINT"GEBEN SIE BITTE UNTER- UND OBERGRENZE AN":INPUT"(U,O) --> ";U,O 3630 IF U<1 OR U>12 OR O<1OR O>12 THENPRINTCHR$ (145)CHR$ (145)CHR$ (145);:GOTO 3620 3640 IF U>O THENT=U:U=O:O=T 3660 GOSUB 330:IF ST=-128OR R=21 THENRETURN 3670 PRINTCHR$ (147);:GOSUB 760:PRINT 3680 OPEN 1,8,2,"KONTEN"+J$+",L,"+CHR$ (141) 3690 OPEN 2,8,15 3700 JS=0:FOR K=1 TOAK:MS(K)=0:NEXT :KN=1 3710 : PRINT#2,"P"+CHR$ (2)+CHR$ (KN)+CHR$ (0)+CHR$ (1) 3720 ::INPUT*1,141,RC$:IF LEFT$ (RC$,1)="↑" THENRC$="":GOTO 3840 3730 : INPUT#2,R 3740 : IF R=50 THEN RC$="":GOTO 3840 3750 : KN$(KN)=LEFT$ (RC$,20) 3760 : FOR M=U TOO 3770 : S$(KN)=" ":S=0 3780 : S$(KN)=MID$ (RC$,(20+(M-1)*10),10) 3790 : S=VAL (S$(KN)) 3800 : MS(KN)=MS(KN)+S 3810 : NEXT M 3820 : JS=JS+MS(KN) 3830 KN=KN+1:GOTO 3710 3840 SU=JS:GOSUB 4370 3850 PRINT"{BROWN}--------------{SPACE,RED}"J$"{BROWN,SPACE}--------------" 3860 PRINT"{BLUE}NR.{SPACE,SPACE}NAME{17SPACE}SALDO" 3870 PRINT"{BROWN}----------------------------------" 3880 FOR K=1 TOKN-1:L%=LEN (STR$ (K)) 3890 :PRINTSPC( 3-L%)K;KN$(K);SPC( 6-LEN (STR$ (INT (MS(K)))))"{LIG.BLUE}"MS(K)"{BROWN}" 3900 NEXT 3910 PRINT"{BROWN}----------------------------------" 3920 PRINT"{SPACE,RED}";J$;" SALDO "; 3930 PRINTLEFT$ (M$(U),3)" - "LEFT$ (M$(O),3)SPC( 9-(L-1))"{BLUE}"SU$"{BROWN}" 3940 PRINTSPC( 23)"===========" 3950 CLOSE 1:CLOSE 2:IF X$=CHR$ (133) THENPRINT#4:CLOSE 4 3960 GOTO 2760 3980 REM ========================== ** 3990 REM *** PROGRAMMKOPF ERSTELLEN ** 4000 REM ========================== ** 4010 PRINTCHR$ (147); 4020 PRINTTAB( 4)"================================" 4030 PRINTTAB( 4)"H A U S H A L T S B U C H{3SPACE}"+J$ 4040 PRINTTAB( 4)"================================" 4050 PRINT:RETURN 4070 REM *** ====================== ** 4080 REM ** KONTO EINLESEN ** 4090 REM *** ====================== ** 4110 GOSUB 330:IF ST=-128OR R=21 THENRETURN 4120 PRINTCHR$ (147);:GOSUB 760:PRINT:PRINT 4130 PRINT:PRINT"{LIG.BLUE}KONTO{SPACE,RED}";KN$(KN);"{LIG.BLUE,SPACE}WIRD EINGELE-SEN !{BROWN}" 4140 OPEN 1,8,2,"KONTEN"+J$+",L,"+CHR$ (141) 4150 OPEN 2,8,15 4160 PRINT#2,"P"+CHR$ (2)+CHR$ (KN)+CHR$ (0)+CHR$ (1) 4170 RC$="" 4180 :INPUT*1,141,RC$:IF LEFT$ (RC$,1)="↑" THENRC$="":GOTO 4310 4190 : INPUT#2,R 4200 : IF R<>50 THEN 4250 4210 PRINT:PRINT"JAHRESDATEI BZW. KONTO NICHT GEFUNDEN !":PRINT 4220 PRINT"WEITER MIT{SPACE,RVOFF,LIG.GREEN,SPACE}TASTE{SPACE,RVOFF,BROWN,SPACE}!";:WAIT 198,1:POKE 198,0 4230 CLOSE 1:CLOSE 2:RETURN 4240 : 4250 KN$=LEFT$ (RC$,20) 4260 GS=0 4270 FOR I=1 TO 12 4280 : S(I)=VAL (MID$ (RC$,20+(I-1)*10,10)) 4290 : GS=GS+S(I) 4300 NEXT I 4310 RETURN 4320 : 4330 REM ============================== 4340 REM = UP SUMMENAUSGABE AUFBEREITEN 4350 REM = <PRINT USING>-SIMULATION 4360 REM ============================== 4370 SU$=STR$ (SU):A=LEN (SU$):L=0:FOR T=1 TOA:IF MID$ (SU$,T,1)="." THENL=T:T=A 4380 NEXT T 4390 : IF L=0 THENSU$=SU$+".00":L=A+1:RETURN 4400 : IF A>=L+2AND SU<0 THENSU=SU-.00001:SU$=LEFT$ (STR$ (SU),L+2):RETURN 4410 : IF A>=L+2AND SU>0 THENSU=SU+.00001:SU$=LEFT$ (STR$ (SU),L+2):RETURN 4420 : IF A=L+1 THENSU$=SU$+"0" 4430 RETURN 4440 : 4450 REM ============================ 4460 REM == SONDERFUNKTIONEN == 4470 REM == SEQ.BUCHUNGSDATEIEN == 4480 REM ============================ 4490 : 4500 FS$(1)="DATEI LADEN{7SPACE,SHIFT-SPACE}" 4510 FS$(2)="DATEI SICHERN{5SPACE,SHIFT-SPACE}" 4520 FS$(3)="BUCHUNGEN AUSGEBEN{SHIFT-SPACE}" 4530 FS$(4)="BUCHUNGEN AENDERN{SPACE,SHIFT-SPACE}" 4540 FS$(5)="BUCHUNGEN SORTIEREN" 4550 FS$(0)="S-FUNKTION BEENDEN " 4560 : 4570 FB$(0)="KOSTENART{4SPACE}" 4580 FB$(1)="BETRAG{7SPACE}" 4590 FB$(2)="BUCHUNGSMONAT" 4600 :S%=0 4610 GOSUB 3990:PRINT 4620 PRINTTAB( 8)"{RED}SONDERFUNKTION":PRINTTAB( 8)"-----------------" 4630 PRINTTAB( 8)"{BLUE}BUCHUNGSPOSTEN BEARBEITEN":PRINT 4640 PRINTTAB( 5)"{2SPACE,ORANGE,SPACE}<DATEI LADEN> ---->{SPACE,RVSON,BLUE}3{RVOFF,SPACE}-{SPACE,RVSON}5{RVOFF}" 4650 PRINTTAB( 5)"{BLUE,RVSON}2{RVOFF,BROWN,2SPACE}DATEI SICHERN":PRINT 4660 PRINTTAB( 5)"{BLUE,RVSON}3{RVOFF,BROWN,2SPACE}BUCHUNGEN AUSGEBEN" 4670 PRINTTAB( 5)"{BLUE,RVSON}4{RVOFF,BROWN,2SPACE}BUCHUNGEN AENDERN" 4680 PRINTTAB( 5)"{BLUE,RVSON}5{RVOFF,BROWN,2SPACE}BUCHUNGEN SORTIEREN":PRINT:PRINT 4690 PRINTTAB( 5)"{GREEN}0{BROWN,2SPACE}SONDERFUNKTION VERLASSEN":PRINT:PRINT 4700 : 4710 PRINTTAB( 8)"{RED,RVSON,SPACE}AUSWAHL{2SPACE}0-5{SPACE,RVOFF,BROWN,SPACE}" 4720 : 4730 GET F$:IF F$="0" THENCLOSE 3:GOSUB 4820:RETURN :REM ZUM HAUPTMENUE 4740 IF F$<"2"OR F$>"5" THEN4730 4750 FU=VAL (F$) 4760 :ON FUGOSUB 6300,6560,5070,6880,6030 4770 GOTO 4610 4780 : 4790 REM =*=*= SONDERFUNKTIONEN VERLASSEN *=* 4800 REM PRUEFEN, OB AENDERUNGEN GESICHERT =*= 4810 : 4820 IF AV=0AND S%=0 THENRETURN 4830 PRINTCHR$ (147):GOSUB 4990:PRINT 4840 IF AV=0AND S%=1GOTO 4890 4850 PRINT"DIE DATEI{SPACE,RED}"KN$(ZW)"{BROWN,SPACE}WURDE","VERAENDERT, ABER NICHT GESICHERT !" 4860 PRINT:PRINT"WOLLEN SIE SICHERN ? --->{2SPACE,RED,RVSON,SPACE}S{SPACE,RVOFF,BLUE}" 4870 PRINT:PRINT"ZURUECK ZUM MENUE{2SPACE}? --->{SPACE,RED}RETURN{BLUE}":GOSUB 4920:AV=0:RETURN 4880 : 4890 PRINT"DATEI{SPACE,RED}"KN$(ZW)"{BROWN,SPACE}WURDE","SORTIERT, ABER NOCH NICHT GESICHERT !" 4900 PRINT:PRINT"WOLLEN SIE SICHERN ? --->{2SPACE,RED,RVSON,SPACE}S{SPACE,RVOFF,BLUE}":PRINT 4910 PRINT"ZURUECK ZUM MENUE{2SPACE}? --->{SPACE,RED}RETURN{BLUE}" 4920 GET X$:IF X$=CHR$ (13) THENRETURN 4930 IF X$="S" THENS%=0:GOSUB 6590:RETURN 4940 GOTO 4920 4950 : 4960 REM =*= UEBERSCHRIFT / FUNKTION 4970 REM ============================ 4980 : 4990 PRINTTAB( 8)"{ORANGE}UCCCCCCCCCCCCCCCCCCCCCCI" 5000 PRINTTAB( 8)"B ";FS$(FU);"{2SPACE}B" 5010 PRINTTAB( 8)"JCCCCCCCCCCCCCCCCCCCCCCK{BROWN}" 5020 PRINT:RETURN 5030 : 5040 REM ============================ 5050 REM == BUCHUNGEN AUSGEBEN == 5060 REM ============================ 5070 PRINTCHR$ (147); 5080 GOSUB 4990:PRINT:PRINT"{BLUE}DRUCKER ({RVSON,RED}D{RVOFF,BLUE}) ODER BILDSCHIRM ({RVSON,RED}B{RVOFF,BLUE}) ?" 5090 GET A$:AA$=A$:IF A$<>"D"AND A$<>"B"GOTO 5090 5100 GOSUB 6300:IF KN$="E"OR AK=0 THENRETURN 5110 IF ST=-128OR R=21 THENRETURN 5120 IF A$<>"D"GOTO 5180 5130 GOSUB 250:IF ST=-128 THENZW=0:RETURN 5140 CLOSE 4:OPEN 4,4:PRINT#4,CHR$ (27)+CHR$ (108)+CHR$ (10); 5145 PRINT#4,CHR$ (10);CHR$ (14);KN$(KN);"{SHIFT-SPACE}";J$;CHR$ (10) 5150 PRINT#4,"KOSTENART{18SPACE}BETRAG{7SPACE}DATUM{3SPACE}" 5160 PRINT#4,"------------------------------------------------":PRINT#4 5170 IF Z=0 THENPRINT#4:PRINT#4,SPC( 9)D$(Z,0):PRINT#4:CLOSE 4:RETURN 5180 FU=3:SU=0:ZZ=0 5190 PRINTCHR$ (147);:GOSUB 4990:PRINT:PRINT KN$(KN):PRINT 5200 IF Z=0 THENPRINTTAB( 90)"{RED}"D$(Z,0):FOR I=0 TO2000:NEXT :RETURN 5210 : SB$(0)="":SB$(2)="" 5220 POKE 211,3:POKE 214,13:SYS 58732:PRINT"{BLUE}DRUECKEN SIE BEI NICHT RELEVANTEN" 5230 PRINTTAB( 3)"FELDERN{2SPACE}---->{2SPACE,RED}RETURN{BROWN}" 5240 POKE 214,7:PRINT 5250 : PRINTFB$(0);:INPUTSB$(0) 5260 : PRINTFB$(2);:INPUTSB$(2) 5270 IF SB$(2)<>""AND VAL (SB$(2))<1OR VAL (SB$(2))>12 THENPRINTCHR$ (145);:GOTO 5260 5280 PRINTCHR$ (147);:GOSUB 4990:PRINT"{RED}"KN$(KN)" "J$:PRINT"{BROWN}":IF FU=4GOTO 5300 5290 IF SB$(0)=""AND SB$(2)=""AND A$<>"D" THENFOR Y=1 TOZ:GOSUB 5680:NEXT Y:GOTO 5470 5300 FOR Y=1 TO Z 5310 : SB=0 5320 : IF SB$(0)="" THEN SB=1:GOTO 5340 5330 : IF LEFT$ (D$(Y,0),LEN (SB$(0)))=SB$(0) THEN SB=SB+1 5340 : IF SB$(2)="" THENSB=SB+1:GOTO 5380 5350 :::REM =*= DATUM 1- OD. 2-STELLIG? 5360 : IF LEN (D$(Y,2))=5AND LEFT$ (D$(Y,2),1)=SB$(2) THENSB=SB+1:GOTO 5380 5370 : IF LEN (D$(Y,2))=6AND LEFT$ (D$(Y,2),2)=SB$(2) THENSB=SB+1 5380 :IF FU=4GOTO 5420 5390 :IF A$<>"D"GOTO 5410 5400 : IF SB=2AND FU=3 THENGOSUB 5860:GOTO 5440 5410 : IF SB=2AND FU=3 THENGOSUB 5680:GOTO 5440 5420 : IF SB=2AND ZZ>0 THENGOSUB 7150:GOTO 5440 5430 : IF SB=2AND ZZ<1 THENGOSUB 7140 5440 NEXT Y 5450 IF FU=4OR E$="E" THENRETURN :REM ZU "AENDERUNGEN" 5460 IF A$="D" THENGOSUB 5960:GOTO 5500 5470 PRINTTAB( 20)"----------":PRINTTAB( 10)"{LIG.BLUE}SUMME{BLUE,SPACE}";:GOSUB 4370 5480 PRINTTAB( 26-(L-1))SU$;"{BROWN}" 5490 ZZ=0 5500 PRINT:PRINT"{RED}DATEIENDE ERREICHT." 5510 PRINT"SUCHBEGRIFF NICHT (NOCHMALS) GEFUNDEN !":PRINT 5520 PRINT"{BLUE}WEITERE BUCHUNGEN SUCHEN (J/N) ?" 5530 : GET X$: IF X$<>"J" AND X$<>"N" GOTO 5530 5540 ::IF X$="J"AND S%<>0GOTO 5180 5550 :IF X$="N" THENCLOSE 3:RETURN 5560 PRINTCHR$ (145)"{BLUE}GLEICHES KONTO{SPACE,BROWN}"KN$(KN),"{BLUE,SPACE}(J/N) ?"; 5570 :GET X$:IF X$<>"J"AND X$<>"N"GOTO 5570 5580 :IF X$="J"GOTO 5180 5590 KN=0 5600 PRINTCHR$ (147):GOSUB 3110:IF KN$="E"OR AK=0 THENRETURN 5610 IF KN=ZW THEN 5180: REM PRUEFEN, 5620 ZW=KN:REM OB GLEICHE KN WIE VORHER 5630 CLOSE 3:GOSUB 6330:IF AA$="D" THENA$=AA$:GOTO 5140 5640 GOTO 5180 5650 ::REM =*=* BUCHUNG AUF BILDSCHIRM 5660 ::REM ============================ 5670 : 5680 PRINTD$(Y,0);"{BLUE}"; 5690 D=VAL (D$(Y,1)):SU=SU+D 5700 PRINTTAB( 29-LEN (D$(Y,1)));D$(Y,1);"{BROWN}"; 5710 IF LEN (D$(Y,2))=5 GOTO 5730 5720 PRINTTAB( 31);MID$ (D$(Y,2),3,2)"."LEFT$ (D$(Y,2),2)"."RIGHT$ (D$(Y,2),2):GOTO 5740 5730 PRINTTAB( 31);MID$ (D$(Y,2),2,2)". "LEFT$ (D$(Y,2),1)"."RIGHT$ (D$(Y,2),2) 5740 ZZ=ZZ+1 5750 IF Y=Z-1AND ZZ>=11 THENZZ=0:GOSUB 5780:GOTO 5770 5760 IF ZZ>14AND Y<Z-1 THENZZ=0:GOSUB 5780:REM =*= AUSGEBEN BIS 15 STUECK 5770 RETURN 5780 PRINTTAB( 20)"----------":PRINTTAB( 10);"{LIG.BLUE}SUMME{BLUE,SPACE}";:GOSUB 4370 5790 PRINTTAB( 26-(L-1))SU$;"{BROWN}" 5800 PRINT:PRINT"{LIG.BLUE}WEITER MIT{SPACE,RED,RVSON,SPACE}TASTE{SPACE,RVOFF}"; 5810 : WAIT 198,1:POKE 198,0 5820 ::PRINTCHR$ (147);:GOSUB 4990:PRINT"{RED}"KN$(KN)" "J$"{BROWN}":PRINT 5830 RETURN 5840 : REM ** AUSGABE AUF DRUCKER ** 5850 : REM ============================ 5860 D=VAL (D$(Y,1)):SU=SU+D 5870 PRINT#4,CHR$ (27)"D"; 5880 PRINT#4,CHR$ (1)+CHR$ (34-LEN (D$(Y,1)))+CHR$ (39)+CHR$ (0); 5890 PRINT#4,CHR$ (9);D$(Y,0);CHR$ (9);D$(Y,1); 5900 IF LEN (D$(Y,2))=5GOTO 5930 5910 PRINT#4,CHR$ (9)MID$ (D$(Y,2),3,2)"."LEFT$ (D$(Y,2),2)"."RIGHT$ (D$(Y,2),2) 5920 GOTO 5940 5930 PRINT#4,CHR$ (9)MID$ (D$(Y,2),2,2)". "LEFT$ (D$(Y,2),1)"."RIGHT$ (D$(Y,2),2) 5940 RETURN 5950 : 5960 PRINT#4,SPC( 25)"----------":PRINT#4,SPC( 10);"{LIG.BLUE}SUMME{BLUE,SPACE}";:GOSUB 4370 5970 PRINT#4,SPC( 15-(L-1));SU$;"{BROWN}":CLOSE 4:A$="":RETURN 5980 : 5990 REM ============================ 6000 REM == DATEI SORTIEREN == 6010 REM ============================ 6020 : 6030 GOSUB 6300:IF KN$="E"OR AK=0 THENRETURN 6040 IF ST=-128OR R=21 THENRETURN 6050 N=Z:FU=5:PRINTCHR$ (147):GOSUB 4990 6060 IF Z=0 THENPRINT:PRINTTAB( 10)"{RED}"D$(Z,0):FOR I=0 TO2000:NEXT :RETURN 6070 FOR I=0 TO 2 6080 ::PRINTTAB( 8)"{RVSON,RED}"I+1"{RVOFF,BROWN,2SPACE}"FB$(I) 6090 NEXT I:PRINT:S%=0 6100 PRINTTAB( 4)"{BLUE}WONACH SOLL SORTIERT WERDEN ?" 6110 PRINTTAB( 4)"GEBEN SIE BITTE DIE NUMMER AN !":PRINT 6120 PRINTTAB( 4)"ZURUECK ZUM MENUE -->{SPACE,RED}RETURN{BLUE,SPACE}!" 6130 GET X$:IF X$=CHR$ (13) THENRETURN 6140 IF X$<"1"OR X$>"3"GOTO 6130 6150 X=VAL (X$)-1:PRINT 6160 PRINTTAB( 4)"ICH SORTIERE, BITTE WARTEN SIE !":S%=1:REM KENNZ. DATEI SORT. 6170 IF X=0 THENGOSUB 600:GOTO 6190 6180 GOSUB 420 6190 PRINTTAB( 4)"{BLUE}DATEI{SPACE,RED}"KN$(KN)"{BLUE,SPACE}WURDE",TAB( 4)"NACH{SPACE,RED}",FB$(X)"{BLUE,SPACE}SORTIERT !" 6200 PRINT:PRINTTAB( 4)"BUCHUNGSPOSTEN AUSGEBEN (J/N) ?" 6210 :GET X$:IF X$<>"J"AND X$<>"N"GOTO 6210 6220 :IF X$="J" THENGOSUB 5180 6230 :FU=5:GOSUB 4820 6240 RETURN 6250 : 6260 REM ============================ 6270 REM == DATEI LADEN == 6280 REM ============================ 6290 : 6300 GOSUB 2900:IF KN$="E"OR AK=0 THENRETURN 6310 IF KN=ZW THENRETURN :REM PRUEFEN, 6320 IF S%<>0OR AV<>0 THENGOSUB 4820:S%=0:REM OB GLEICHE KN WIE VORHER 6330 ZW=KN:N$=LEFT$ (KN$(KN),12) 6340 PRINTCHR$ (147):FU=1:GOSUB 4990 6350 PRINT:PRINT:PRINT"{BLUE}DATEI{SPACE,RED}"KN$(KN) "{BLUE}WIRD GELADEN !" 6360 GOSUB 330:IF ST=-128OR R=21 THENRETURN 6370 OPEN 2,8,15 6380 OPEN 3,8,3,J$+N$+",S,R" 6390 INPUT#2,R:IF R<>62GOTO 6410 6400 ::PRINT"DATEI NICHT GEFUNDEN !":CLOSE 2:CLOSE 3:FOR T=0 TO3000:NEXT :RETURN 6410 Z=0:INPUT#3,D$(Z,0),D$(Z,1):IF ST=64 THENCLOSE 3:CLOSE 2:RETURN 6420 CLOSE 3 6430 OPEN 3,8,3,J$+N$+",S,R" 6440 INPUT#3,D$(0,0) 6450 Z=1 6460 : 6470 ::INPUT#3,D$(Z,0),D$(Z,1),D$(Z,2) 6480 : 6490 IF ST<>64 THEN Z=Z+1:GOTO 6460 6500 CLOSE 3:CLOSE 2:RETURN 6510 : 6520 REM ============================ 6530 REM == DATEI SICHERN == 6540 REM ============================ 6550 : 6560 IF Z>0GOTO 6590 6570 POKE 214,23:POKE 211,8:SYS 58732:PRINT"KEINE DATEN IM RECHNER" 6580 :FOR X=0 TO2000:NEXT :RETURN 6590 PRINTCHR$ (147);:FU=2:GOSUB 4990 6600 PRINT:PRINT"{BLUE}DISKETTE EINGELEGT ?":PRINT 6610 PRINT"{BROWN}DRUECKEN SIE ANSCHLIESSEND{SPACE,RED,RVSON,SPACE}S{SPACE,RVOFF,BLUE}":PRINT:FOR I=0 TO800:NEXT 6620 PRINT:PRINT"WOLLEN SIE DIE GEAENDERTE DATEI ",KN$(ZW)" NICHT SICHERN{2SPACE}?" 6630 PRINT"DANN MENUE{3SPACE}--->{3SPACE,RED}RETURN{BLUE}" 6640 GET X$:IF X$<>"S"AND X$<>CHR$ (13)GOTO 6640 6650 : IF X$=CHR$ (13) THENRETURN 6660 GOSUB 330:IF ST=-128OR R=21 THENRETURN 6670 PRINT:PRINT"BUCHUNGSDATEI{SPACE,RED}"KN$(ZW)"{BLUE,SPACE}WIRD","GESICHERT !" 6680 N$=LEFT$ (KN$(ZW),12) 6690 CLOSE 3:OPEN 3,8,15,"S:"+J$+N$ 6700 CLOSE 3:OPEN 3,8,3,J$+N$+",S,W" 6710 : PRINT#3,D$(0,0) 6720 : FOR Y=1 TO Z 6730 : FOR I=0 TO 2 6740 : PRINT#3,D$(Y,I) 6750 : NEXT I 6760 : NEXT Y 6770 CLOSE 3 6780 PRINT:AV=0:S%=0 6790 PRINT"BUCHUNGSDATEI{SPACE,RED}"KN$(ZW)"{BLUE,SPACE}IST{2SPACE}GESICHERT !":PRINT 6800 PRINT:PRINT"WEITER MIT{SPACE,RED}TASTE{BLUE,SPACE}!" 6810 WAIT 198,1:POKE 198,0 6820 RETURN 6830 : 6840 REM ============================ 6850 REM == BUCHUNGEN AENDERN == 6860 REM ============================ 6870 : 6880 GOSUB 6300:IF KN$="E"OR AK=0 THENRETURN 6890 IF ST=-128OR R=21 THENRETURN 6900 PRINTCHR$ (147):FU=4:GOSUB 4990 6910 IF Z=0 THENPRINT:PRINTTAB( 9)"{RED}"D$(Z,0):FOR I=0 TO2000:NEXT :RETURN 6920 ZZ=0:ZS=10:AV=0:PRINT 6930 PRINT"{BLUE}WENN SIE GEZIELT BUCHUNGPOSITIONEN ODER MONATE AENDERN WOLLEN,"; 6940 PRINT" GEBEN SIE BITTE","{SPACE,RED,RVSON}E{BLUE,RVOFF,2SPACE}EIN." 6950 PRINT:PRINT"{RED}RETURN{LIG.BLUE,SPACE}LISTET DIE DATEI VOLLSTAENDIG{11SPACE}AUF !" 6960 GET E$:IF E$<>"E"AND E$<>CHR$ (13)GOTO 6960 6970 IF E$="E" THENGOSUB 5190:GOTO 7060 6980 : 6990 REM =*= ALLE POS. AUFLISTEN =*= 7000 REM =========================== 7010 PRINTCHR$ (147);:GOSUB 4990 7020 GOSUB 7780 7030 FOR Y=1 TO Z 7040 : GOSUB 7150 7050 NEXT Y 7060 PRINT:PRINT"{BLUE}DATEIENDE ERREICHT !" 7070 IF E$=CHR$ (13) THEN7280 7080 IF ZZ<>0AND E$="E" THENE$="":GOTO 7280 7090 :::FOR I=1 TO2000:NEXT 7100 RETURN 7110 : 7120 REM =*= AUSGABE AUF BILDSCHIRM == 7130 REM ===-----------------------=== 7140 GOSUB 7780:REM BEI EINZEL-SELEKT. 7150 IF Y<11AND E$<>"E" THENPRINTSPC( 3-LEN (STR$ (Y)))"{RED}"Y"{BROWN}"D$(Y,0)"{BLUE}";:GOTO 7170 7160 PRINTSPC( 4-LEN (STR$ (Y)))"{RED}"Y"{BROWN}"D$(Y,0)"{BLUE}"; 7170 PRINTTAB( 30-LEN (D$(Y,1)));D$(Y,1)"{ORANGE}"; 7180 IF LEN (D$(Y,2))=5GOTO 7210 7190 PRINTTAB( 31);MID$ (D$(Y,2),3,2)"."LEFT$ (D$(Y,2),2)"."RIGHT$ (D$(Y,2),2) 7200 GOTO 7220 7210 PRINTTAB( 31);MID$ (D$(Y,2),2,2)". "LEFT$ (D$(Y,2),1)"."RIGHT$ (D$(Y,2),2) 7220 ZZ=ZZ+1 7230 :IF ZZ=ZSAND ZZ<Z THENZS=ZS+10:GOSUB 7280 7240 RETURN 7250 : 7260 REM =*= AENDERUNGSABFRAGE =*= 7270 : 7280 PRINT:PRINT"{RED}AENDERUNGEN (J/N) ?" 7290 : GET X$:IF X$<>"J"AND X$<>"N" THEN 7290 7300 : IF X$="N"AND Y<Z THEN PRINTCHR$ (147):GOSUB 4990:GOSUB 7780:RETURN 7310 : IF X$="N"AND Y>=ZAND AV=1 THENGOSUB 6590:RETURN :REM AEND.SICHERN 7320 : IF X$="N"AND Y>=ZAND AV=0 THENRETURN :REM KEINE AENDERUNG-->MENUE 7330 :PRINTCHR$ (145)"{39SPACE}":REM 39 X LEERT. 7340 : 7350 REM =*= AENDERUNG =*= 7360 REM ========================= 7370 C=17:S=0:GOSUB 830 7380 PRINT"{LIG.BLUE}GEBEN SIE BITTE DIE ZU AENDERNDE POSI-{SPACE,SPACE}TION EIN (ZEILE, SPALTE) !" 7390 :INPUTA,B:B=B-1:IF B<>0AND B<>2GOTO 7370 7400 : IF A<1OR A>YGOTO 7370 7410 : IF Y-1=ZAND A>Y-1OR B>2OR B<0 THENC=17:S=0:GOSUB 830:GOTO 7380 7420 : IF B<>2GOTO 7470 7430 : IF LEN (D$(A,2))=5GOTO 7460 7440 : PRINTTAB( 2);MID$ (D$(A,2),3,2)"."LEFT$ (D$(A,2),2)"."RIGHT$ (D$(A,2),2) 7450 : GOTO 7480 7460 : PRINTTAB( 2);MID$ (D$(A,2),2,2)". "LEFT$ (D$(A,2),1)"."RIGHT$ (D$(A,2),2) 7470 IF B<>2 THENPRINT"{BROWN,2SPACE}";D$(A,B) 7480 PRINT:PRINT"BITTE AENDERN SIE !{20SPACE}":AV=1 7490 C=20:S=0:GOSUB 830 7500 : 7510 INPUTD$(A,B):PRINT"{2SPACE,RED}"D$(A,B):IF LEN (D$(A,B))>20 THEND$(A,B)=LEFT$ (D$(A,B),20) 7520 IF B<>2GOTO 7590:REM DATUM PRUEFEN 7530 IF MID$ (D$(A,2),3,1)="."AND MID$ (D$(A,2),6,1)="."GOTO 7570 7540 IF MID$ (D$(A,2),2,1)="."AND MID$ (D$(A,2),4,1)="." THENGOSUB 7710:GOTO 7590 7550 IF MID$ (D$(A,2),2,1)="."AND MID$ (D$(A,2),5,1)="." THENGOSUB 7720:GOTO 7590 7560 IF MID$ (D$(A,2),3,1)="."AND MID$ (D$(A,2),5,1)="." THENGOSUB 7730:GOTO 7590 7570 D$(A,2)=MID$ (D$(A,2),4,2)+LEFT$ (D$(A,2),2)+RIGHT$ (D$(A,2),2) 7580 : 7590 PRINT" WEITERE AENDERUNGEN (J/N) ?" 7600 : GET X$:IF X$<>"J"AND X$<>"N" THEN 7600 7610 ::IF X$="N"AND Y<Z THENPRINTCHR$ (147):GOSUB 4990:GOSUB 7780:RETURN 7620 :IF X$="N"AND Y>=ZAND AV=1 THENGOSUB 6590:RETURN :REM AEND.SICHERN 7630 C=19:S=1:GOSUB 830 7640 PRINT"{BLUE,8SPACE}" 7650 PRINT"{39SPACE}":REM 39 X LEERTASTE 7660 PRINT"{39SPACE}" 7670 C=17:S=0:GOSUB 830 7680 GOTO 7380 7690 : 7700 REM =*= DATUM AUFBEREITEN MMTTJJ * 7710 D$(A,2)=MID$ (D$(A,2),3,1)+"0"+LEFT$ (D$(A,2),1)+RIGHT$ (D$(A,2),2):RETURN 7720 D$(A,2)=MID$ (D$(A,2),3,2)+"0"+LEFT$ (D$(A,2),1)+RIGHT$ (D$(A,2),2):RETURN 7730 D$(A,2)=MID$ (D$(A,2),4,1)+LEFT$ (D$(A,2),2)+RIGHT$ (D$(A,2),2):RETURN 7740 : 7750 REM =*= SPALTEN-BESCHRIFTUNG =*= 7760 REM =========================== 7770 : 7780 PRINTTAB( 5)"{RED}1";TAB( 26)"2";TAB( 33)"3":PRINT:RETURN 7790 : 7800 REM ============================== 7810 REM ** DATAS FUER INPUT-MODIFIKAT. 7820 REM ============================== 7830 FOR I=828 TO922 7840 READ X:POKE I,X:S=S+X:NEXT I 7850 DATA 169,71,160,3,141,8,3,140,9,3,96,32 7860 DATA 115,0,201,133,240,6,32,121,0,76,231,167 7870 DATA 32,115,0,201,172,240,6,32,191,171,76,174 7880 DATA 167,32,155,183,32,30,225,32,253,174,32,158 7890 DATA 183,138,72,32,253,174,32,139,176,133,73,132 7900 DATA 74,32,163,182,104,32,117,180,160,2,185,97 7910 DATA 0,145,73,136,16,248,200,32,18,225,145,98 7920 DATA 200,196,97,208,246,32,204,255,76,174,167 7930 IF S<>11096 THENPRINT"FEHLER IN DATAS!!":END 7940 SYS 828:RETURN 7945 REM ============================== 7950 REM * SWAP - FUNKTION SIMULIEREN * 7960 REM ============================== 7970 REM SYNTAX:SYS715(STRING1,STRING2) 7980 REM ============================== 7990 DATA 32,250,174,32,158,173,32,143,173,165,100,133,247,165,101,133 8000 DATA 248,32,253,174,32,158,173,32,143,173,160,0,177,247,133,249 8010 DATA 177,100,145,247,165,249,145,100,200,192,3,208,239,32,247,174,96 8030 SA=715:SE=SA+48:FOR I=SA TOSE:READ X:POKE I,X:CS=CS+X:NEXT 8040 IF CS<>7314 THENPRINT"FEHLER IN DATA'S":END 8050 RETURN