Accounts

Developer(s): James Shoaf
Date: 1983
Type: Program
Platform(s): ZX81, TS 1000
Tags: Business

A small-business accounting program. Choose options from the menu by their first letter. BEGIN clears everything and takes new records: the date as six digits (year first), who the money went to or came from, the reason, a two-digit account code and the amount. Codes up to 32 are stored as debits. Check each record, then answer YES, NO to enter it again, or QUIT after the last one. CONTINUE adds records to the existing data. VIEW lists the records for a year or a month and then gives totals by code, income, expense and net; it is slow. PRINT sends the same report to an 80-column printer through a Memotech interface. EDIT alters or deletes a record, FILE shows how much space is used, and SAVE saves the program with its data.

Once there is data, never RUN the program, which would clear it; use GOTO 10 to get back to the menu. Lines 3110 and others jump to line numbers that are not in the listing; the program carries on at the next line, which works.

Published in Syntax November 1983 (Accounts).

Related Articles

ACCOUNTS, an accounting program for small businesses, computerizes your DOME monthly accounting book.

Image Gallery

Source Code

1 REM   A C C O U N T S .
2 REM BY JAMES R SHOAF III,  BOX 2147, SANTA CLARA, CA 95055-2147.
3 REM  ALL RIGHTS RESERVED.
10 CLS
20 PRINT AT 3,12;"ACCOUNTS"
30 PRINT AT 5,5;"BEGIN  NEW  ACCOUNTS."
40 PRINT AT 7,5;"CONTINUE ADDING DATA."
50 PRINT AT 9,5;"VIEW ACCOUNTS DATA."
60 PRINT AT 11,5;"PRINT ACCOUNTS DATA."
70 PRINT AT 13,5;"EDIT A RECORD"
80 PRINT AT 15,5;"SAVE PROGRAM AND DATA."
90 PRINT AT 17,5;"FILE INFORMATION."
100 IF INKEY$="B" THEN GOTO 1000
110 IF INKEY$="C" THEN GOTO 2000
120 IF INKEY$="V" THEN GOTO 3000
130 IF INKEY$="P" THEN GOTO 4000
140 IF INKEY$="S" THEN GOTO 9000
150 IF INKEY$="F" THEN GOTO 5000
160 IF INKEY$="E" THEN GOTO 6000
170 GOTO 100
1000 DIM D(240)
1010 DIM A(240)
1020 DIM T(40)
1030 DIM Q(3)
1040 DIM C$(240,2)
1045 DIM Z$(15)
1050 DIM Y$(240,10)
1060 DIM W$(240,15)
1070 LET N=1
1100 CLS
1110 FOR I=N TO 240
1120 LET X=I
1200 PRINT AT 0,8;"DATE = ?YYMMDD"
1210 INPUT D(I)
1220 PRINT AT 0,15;D(I);"  "
1300 PRINT AT 1,5;"TO/FROM = ?"
1310 INPUT W$(I)
1320 PRINT AT 1,15;W$(I)
1400 PRINT AT 2,5;"PURPOSE = ?"
1410 INPUT Y$(I)
1420 PRINT AT 2,15;Y$(I)
1500 PRINT "ACCOUNT CODE = ??"
1510 INPUT C$(I)
1520 PRINT AT 3,15;C$(I)
1600 PRINT AT 4,6;"AMOUNT = ?"
1610 INPUT A(I)
1615 IF VAL C$(I)<=32 THEN LET A(I)=-A(I)
1620 PRINT AT 4,15;A(I);"     "
1700 PRINT AT 7,5;"ALL ENTRIES OK? (YES/NO/QUIT)"
1710 IF INKEY$="Y" THEN GOTO 1810
1720 IF INKEY$="N" THEN GOTO 1800
1730 IF INKEY$="Q" THEN GOTO 10
1740 GOTO 1710
1800 LET I=I-1
1810 FOR F=1 TO 10
1820 IF I>235 THEN PRINT AT 20,8;"FILE ALMOST FULL"
1830 IF I>235 THEN PRINT AT 20,8;"FILE ALMOST FULL"
1840 NEXT F
1850 CLS
1860 NEXT I
1900 GOTO 10
2000 LET N=X+1
2010 GOTO 1100
3000 GOSUB 7000
3005 LET R=0
3010 PRINT "REC.NO.";TAB 10;"DATE";TAB 16;"CODE";TAB 22;"AMOUNT"
3020 PRINT "TO/FROM";TAB 20;"REASON"
3030 PRINT "==============================="
3100 FOR M=1 TO X
3110 IF G<D(M) AND D(M)<S THEN GOTO 3130
3120 GOTO 3150
3135 PRINT M;TAB 9;D(M);TAB 17;C$(M);TAB 22;A(M)
3140 PRINT W$(M);TAB 20;Y$(M)
3142 PRINT "-------------------------------"
3143 GOTO 7500
3145 GOSUB 8000
3147 LET P=INT (100*M/X)
3150 NEXT M
3200 INPUT Z$
3210 CLS
3220 PRINT "CODE    AMOUNT"
3230 PRINT "--------------"
3300 FOR M=1 TO 40
3310 IF T(M)=0 THEN GOTO 3350
3315 IF M<10 THEN GOTO 3328
3320 PRINT " ";M;"    ";T(M)
3323 GOTO 3330
3328 PRINT " 0";M;"    ";T(M)
3330 IF T(M)<0 THEN LET Q(1)=Q(1)+T(M)
3340 IF T(M)>0 THEN LET Q(2)=Q(2)+T(M)
3350 NEXT M
3400 LET Q(3)=Q(2)+Q(1)
3410 PRINT
3420 PRINT "INCOME = ";Q(2)
3430 PRINT TAB 7;"EXPENSE = ";Q(1)
3440 PRINT TAB 15;"NET = ";Q(3)
3450 INPUT Z$
3460 GOTO 10
4000 GOSUB 7000
4002 IF L=0 THEN GOTO 4006
4004 GOTO 4010
4006 LPRINT "     YEAR = 19";Z;CHR$ 155;"A";CHR$ 155;"A"
4008 GOTO 4020
4010 LPRINT "     YEAR = 19";Z;"   MONTH = ";L;CHR$ 155;"A";CHR$ 155;"A"
4025 LPRINT " DATE    TO/FROM         REASON     CODE  AMOUNT";CHR$ 155;"A"
4030 FOR M=1 TO X
4040 IF G<D(M) AND D(M)<S THEN GOTO 4100
4050 GOTO 4200
4100 LPRINT D(M);"  ";W$(M);"  ";
4110 LPRINT Y$(M);"  ";C$(M);"   ";A(M)
4150 GOSUB 8000
4200 NEXT M
4210 LPRINT CHR$ 155;"A";CHR$ 155;"A"
4220 LPRINT "CODE    AMOUNT";CHR$ 155;"A"
4300 FOR M=1 TO 40
4310 IF T(M)=0 THEN GOTO 4350
4315 IF M<10 THEN GOTO 4328
4320 LPRINT " ";M;"    ";T(M)
4323 GOTO 4330
4328 LPRINT "  ";M;"    ";T(M)
4330 IF T(M)<0 THEN LET Q(1)=Q(1)+T(M)
4340 IF T(M)>0 THEN LET Q(2)=Q(2)+T(M)
4350 NEXT M
4400 LET Q(3)=Q(2)+Q(1)
4410 LPRINT CHR$ 155;"A";CHR$ 155;"A";
4420 LPRINT "INCOME = ";Q(2);"     EXPENSE = ";Q(1);"     NET = ";Q(3)
4430 GOTO 10
5000 CLS
5005 LET P=INT (100*X/240)
5010 PRINT AT 10,5;"FILE USAGE INFORMATION"
5020 PRINT AT 12,6;"FILE HAS ";X;" RECORDS."
5025 PRINT AT 13,6;"FILE IS ";P;" P/C FULL."
5030 PRINT AT 15,6;"LAST RECORD READS:"
5040 PRINT X;TAB 9;D(X);TAB 17;C$(X);TAB 22;A(X)
5050 PRINT W$(X);TAB 20;Y$(X)
5060 PRINT
5100 PRINT "PROGRAM = ";
5103 PRINT PEEK 16396+256*PEEK 16397-16509;" BYTES."
5110 PRINT "DATA AREA = ";
5120 PRINT (PEEK 16404+256*PEEK 16405)-(PEEK 16400+256*PEEK 16401);
5130 PRINT " BYTES."
5200 INPUT Z$
5210 GOTO 10
6000 CLS
6005 PRINT "WHICH RECORD?"
6010 INPUT M
6020 IF M>239 THEN GOTO 6000
6023 PRINT M;TAB 9;D(M);TAB 17;C$(M);TAB 22;A(M)
6027 PRINT W$(M);TAB 20;Y$(M)
6030 PRINT "ALTER? OR DELETE?"
6040 IF INKEY$="D" THEN GOTO 6500
6050 IF INKEY$="A" THEN GOTO 6100
6060 GOTO 6040
6100 DIM Z$(15)
6105 PRINT "IF NO CHANGE, ENTER"
6110 PRINT AT 5,0;"DATE = ?"
6120 INPUT Z$(1 TO 6)
6130 IF Z$(1 TO 6)<>"      " THEN LET D(M)=VAL Z$(1 TO 6)
6135 PRINT AT 1,9;D(M)
6140 PRINT AT 6,0;"TO/FROM = ?"
6150 INPUT Z$
6160 IF Z$<>"               " THEN LET W$(M)=Z$
6165 PRINT AT 2,0;W$(M)
6170 PRINT AT 7,0;"REASON = ?"
6180 INPUT Z$(1 TO 10)
6190 IF Z$(1 TO 10)<>"          " THEN LET Y$(M)=Z$(1 TO 10)
6195 PRINT AT 2,20;Y$(M)
6200 PRINT AT 8,0;"CODE = ?"
6210 INPUT Z$(1 TO 2)
6220 IF Z$(1 TO 2)<>"  " THEN LET C$(M)=Z$(1 TO 2)
6225 PRINT AT 1,17;C$(M)
6230 PRINT AT 9,0;"AMOUNT = ?"
6240 INPUT Z$
6250 IF Z$<>"               " THEN LET A(M)=VAL Z$
6255 PRINT AT 1,22;A(M)
6260 PRINT AT 11,0;"ALL ENTRIES OK? (YES/NO)"
6270 IF INKEY$="Y" THEN GOTO 10
6280 IF INKEY$="N" THEN GOTO 6000
6290 GOTO 6270
6500 LET A(M)=0
6510 LET D(M)=0
6520 LET C$(M)="  "
6530 LET Y$(M)="          "
6540 LET W$(M)="               "
6550 GOTO 10
7000 CLS
7005 LET L=0
7010 DIM Q(3)
7020 DIM T(40)
7100 PRINT AT 3,0;"YEAR = 19??"
7110 INPUT Z
7120 PRINT AT 3,9;Z
7200 PRINT AT 5,0;"YEARLY OR MONTHLY ACCOUNTS?"
7210 IF INKEY$="Y" THEN GOTO 7300
7220 IF INKEY$="M" THEN GOTO 7400
7230 GOTO 7210
7300 LET G=Z*10000
7310 LET S=G+9999
7320 GOTO 7450
7400 PRINT AT 5,0;"MONTH = ?                      "
7410 INPUT L
7420 PRINT AT 5,8;L
7430 LET G=Z*10000+L*100
7440 LET S=G+99
7450 CLS
7460 RETURN
7500 LET R=R+1
7510 IF R<6 THEN GOTO 3145
7520 LET R=0
7530 PRINT "ENTER TO CONTINUE"
7540 INPUT Z$
7550 CLS
7560 GOTO 3145
8000 FOR K=1 TO 40
8010 IF VAL C$(M)=K THEN LET T(K)=T(K)+A(M)
8020 NEXT K
8030 RETURN
9000 CLS
9010 PRINT "READY CASSETTE, TYPE NAME, ENTER"
9020 INPUT Z$
9030 SAVE Z$
9040 GOTO 10

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.