The Personal Accountant

Developer(s): Al Laity
Date: 198x
Type: Program
Platform(s): TS 2068

Calculates loan payments and future value of an investment.

Appears on

Library tape from the Sinclair Computer Users Society (SINCUS).

Gallery

Source Code

    5 REM  by Al Laity
   10 DATA "JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC","end"
   99 GO TO 1000
  100 CLS 
  110 FOR X=1 TO 2: PRINT "********************************": NEXT X
  120 PRINT "**** THE PERSONAL ACCOUNTANT****"
  125 PRINT "****       by Al Laity      ****"
  130 FOR X=1 TO 2: PRINT "********************************": NEXT X
  140 RETURN 
  300 REM  FUTURE VALUE CALCULATION
  301 LET FL=0
  310 REM C1=ONGOING BAl
  311 LET c1=be
  320 FOR C=1 TO NY
  323 FOR j=1 TO nc
  325 LET IN=I*C1: LET A=IN: GO SUB 1200: LET IN=VAL A$: LET y$=a$
  328 LET c1=c1+in+.001: LET a=c1: GO SUB 1200: LET x$=a$: LET c1=VAL a$
  330 IF st=0 THEN GO TO 385
  331 RESTORE 10
  332 LET d=VAL d$: LET d=d+12/nc: IF d>12 THEN LET d=d-12: LET FL=1
  333 LET D$=STR$ D
  334 FOR f=1 TO VAL d$: READ f$: IF f$="end" THEN RESTORE 10: READ f$
  335 NEXT F
  340 IF st=2 THEN GO TO 375
  341 IF FL=1 THEN LET E=VAL E$+1: LET E$=STR$ E: PRINT INVERSE 1;"**  YEAR  ";E$;"  **": LET FL=0
  345 PRINT f$;TAB 17-LEN y$;y$;TAB 32-LEN x$;x$
  374 GO TO 385
  375 IF FL=1 THEN LET E=VAL E$+1: LET E$=STR$ E: LPRINT INVERSE 1;"**  YEAR  ";E$;"  **": LET FL=0
  380 LPRINT f$;TAB 17-LEN y$;y$;TAB 32-LEN x$;x$
  385 NEXT j
  393 NEXT C
  395 LET A$=STR$ C1
  397 LET C$(5)="FUTURE VALUE    $"+A$: RETURN 
  400 REM FU WI INC CALC
  401 LET FL=0
  410 LET C1=BE
  420 FOR c=1 TO ny
  430 FOR J=1 TO NC
  440 LET INT=R*C1: LET A=INT: GO SUB 1200: LET INT=VAL A$: LET X$=A$
  442 LET INC=0
  445 IF J=NC THEN LET INC=IN
  450 LET C1=C1+INT+INC: LET A=C1: GO SUB 1200: LET C1=VAL A$: LET Y$=A$
  455 LET a=inc: GO SUB 1200: LET z$=a$
  456 IF st=0 THEN GO TO 600
  460 RESTORE 10
  470 LET D=VAL D$+12/NC: IF D>12 THEN LET D=D-12: LET FL=1
  475 LET D$=STR$ D
  480 FOR F=1 TO VAL D$: READ F$
  485 IF F$="end" THEN RESTORE 10: READ f$
  490 NEXT f
  500 IF st=0 THEN GO TO 600
  510 IF st=2 THEN GO TO 550
  515 IF FL=1 THEN LET FL=0: LET E=VAL E$+1: LET E$=STR$ E: PRINT INVERSE 1;"**  YEAR  ";E$;"  **"
  520 PRINT f$;TAB (12-LEN z$);z$;TAB (22-LEN X$);X$;TAB (32-LEN Y$);Y$
  530 GO TO 600
  550 IF FL=1 THEN LET FL=0: LET E=VAL E$+1: LET E$=STR$ E: LPRINT INVERSE 1;"**  YEAR  ";E$;"  **"
  560 LPRINT f$;TAB (12-LEN z$);z$;TAB (22-LEN X$);X$;TAB (32-LEN Y$);Y$
  600 NEXT j
  610 NEXT c
  620 LET a=c1: GO SUB 1200: LET c$(6)="FUTURE VALUE    $"+A$
  650 RETURN 
 1000 BORDER 6: PAPER 4: BRIGHT 0: INK 0
 1010 GO SUB 100
 1040 PRINT : PRINT : PRINT : PRINT "1. LOAN PAYMENTS & AMORTIZATIONS"
 1050 PRINT : PRINT "2. FUTURE VALUES"
 1060 PRINT : PRINT "3. FUTURE VALUE WITH INCREMENT"
 1070 INPUT "choose by number - ";a
 1080 IF a<1 OR a>3 THEN GO TO 1070
 1090 GO TO (a+1)*1000
 1200 REM makes a TO a$ with ending zeros
 1201 LET b=a*100+.1
 1205 LET tem=INT (b)
 1210 LET a$=STR$ tem
 1220 LET b=LEN (a$)
 1221 IF b<3 THEN LET a$="0"+a$: GO TO 1220
 1230 LET a$=a$( TO (b-2))+"."+a$((b-1) TO b)
 1240 RETURN 
 1300 REM data to screen
 1301 CLS 
 1305 GO SUB 9900
 1310 FOR x=1 TO 2: PRINT "********************************": NEXT x
 1320 FOR y=1 TO 6
 1325 IF c$(y)="                                " THEN GO TO 1340
 1330 PRINT c$(y)
 1340 NEXT y
 1350 FOR x=1 TO 2: PRINT "********************************": NEXT x
 1360 RETURN 
 1400 REM datato printer
 1410 PRINT : PRINT : FOR X=1 TO 3: PRINT "         DATA  TO  PRINTER      ": NEXT X
 1450 FOR x=1 TO 2: LPRINT "********************************": NEXT x
 1460 FOR y=1 TO 6: IF C$(Y)="                                " THEN GO TO 1480
 1470 LPRINT C$(Y)
 1480 NEXT Y
 1490 FOR x=1 TO 2: LPRINT "********************************": NEXT x
 1495 RETURN 
 1900 CLS : FOR X=1 TO 2: PRINT "********************************": NEXT X
 1910 PRINT A$
 1920 FOR X=1 TO 2: PRINT "********************************": NEXT X
 1930 RETURN 
 1950 FOR X=1 TO 2: LPRINT "********************************": NEXT X
 1960 LPRINT A$
 1970 FOR X=1 TO 2: LPRINT "*********:*********************": NEXT X
 1980 RETURN 
 2000 REM loan
 2001 DIM c$(6,32)
 2010 BORDER 5: PAPER 5: CLS 
 2020 LET a$="********* LOAN PAYMENTS ********": GO SUB 1900
 2030 PRINT : PRINT : PRINT 
 2035 INPUT "AMOUNT OF LOAN ";A$: IF A$="Q" THEN RUN 
 2040 LET AM=VAL A$
 2041 IF AM>999999.99 THEN GO TO 2040
 2042 IF AM<0 THEN GO TO 2040
 2045 LET a=am: GO SUB 1200: LET c$(1)="amount of loan $"+a$: PRINT c$(1)
 2050 INPUT "number of monthly payments? ";n$: IF N$="Q" THEN RUN 
 2051 LET NU=VAL N$
 2052 LET c$(2)="number of payments "+STR$ (nu)
 2055 PRINT c$(2)
 2060 INPUT "interest rate? ";i$: IF I$="Q" THEN RUN 
 2061 LET I=VAL I$
 2062 LET c$(3)="interest rate   "+STR$ (i)+"%": PRINT c$(3)
 2064 LET I=I/1200
 2065 LET pay=am*(i/(1-(1+i)^(-nu))): LET a=pay: GO SUB 1200
 2066 LET pay=VAL a$
 2067 LET c$(4)="payment amount $"+STR$ pay
 2070 INPUT "data to printer (y OR n)? ";z$
 2075 GO SUB 1300
 2080 IF z$="y" OR Z$="Y" THEN GO SUB 1400
 2100 INPUT "shall I prepare a growth table";z$
 2110 IF z$<>"y" AND z$<>"Y" THEN GO TO 9800
 2130 LET N=0
 2140 LET FL=0
 2150 REM  growth table
 2160 GO SUB 9700
 2162 INPUT "data to printer (y OR n)? ";z$
 2165 IF Z$="Y" OR z$="y" THEN GO TO 2500
 2170 PRINT 
 2180 PRINT "DATE   INT.     PRIN.  NEW BAL."
 2185 PRINT INVERSE 1;"** year -  ";e$;" **": LET a=am: GO SUB 1200: PRINT "**opening balance**";TAB 32-LEN a$;a$
 2190 FOR y=1 TO 1000
 2200 GO SUB 2800
 2210 IF FL=1 THEN GO TO 2290
 2213 LET F$=""
 2214 RESTORE 10
 2215 FOR F=1 TO VAL D$: READ F$: NEXT F
 2220 PRINT F$;TAB (12-LEN x$);x$;TAB (22-LEN y$);y$;TAB (32-LEN z$);z$
 2275 LET M=VAL d$: LET M=M+1: IF M=13 THEN LET M=1
 2276 LET d$=STR$ M: IF M<10 THEN LET d$="0"+d$
 2279 IF m=1 THEN LET e=VAL e$: LET e=e+1: LET e$=STR$ e: PRINT INVERSE 1;"** year -  ";e$;" **"; INVERSE 0
 2280 NEXT y
 2290 GO TO 9800
 2500 LPRINT : REM  GROWTH TABLE TO PRINTER
 2510 LPRINT "DATE   INT.     PRIN.  NEW BAL."
 2585 LPRINT INVERSE 1;"** year -  ";e$;" **": LET a=am: GO SUB 1200: LPRINT "**opening balance**";TAB 32-LEN a$;a$
 2590 FOR y=1 TO 1000
 2600 GO SUB 2800
 2610 IF FL=1 THEN GO TO 2690
 2612 RESTORE 10
 2615 FOR F=1 TO VAL D$: READ F$: NEXT F
 2620 LPRINT F$;TAB (12-LEN x$);x$;TAB (22-LEN y$);y$;TAB (32-LEN z$);z$
 2675 LET M=VAL d$: LET M=M+1: IF M=13 THEN LET M=1
 2676 LET d$=STR$ M: IF M<10 THEN LET d$="0"+d$
 2679 IF m=1 THEN LET e=VAL e$+1: LET e$=STR$ e: LPRINT INVERSE 1;"** year -  ";e$;" **"
 2680 NEXT y
 2700 GO TO 9800
 2800 REM calculate
 2801 LET N=N+1: IF N>NU THEN LET FL=1: RETURN 
 2802 LET in=am*i: LET a=in: GO SUB 1200: LET in=VAL a$
 2810 LET p=pay-in+.001: LET am=am-p+.001
 2815 IF nu=n AND am<>0 THEN LET p=p+am: LET in=in-am: LET am=0:
 2825 LET A=AM: GO SUB 1200: LET z$=A$: LET am=VAL a$
 2830 LET A=IN: GO SUB 1200: LET x$=A$: LET in=VAL a$
 2840 LET A=P: GO SUB 1200: LET y$=A$: LET p=VAL a$
 2845 LET FL=0
 2850 RETURN 
 3000 BORDER 4: PAPER 6: INK 0: CLS 
 3001 DIM C$(6,32)
 3005 LET A$="******** FUTURE  VALUES ********"
 3006 GO SUB 1900
 3007 PRINT : PRINT : PRINT 
 3009 INPUT "OPENING BALANCE";B$: IF B$="Q" THEN RUN 
 3010 LET BE=VAL B$
 3015 LET A=BE: GO SUB 1200: LET C$(1)="OPENING BALANCE $"+A$: PRINT C$(1)
 3020 IF BE<=0 OR BE>999999.99 THEN GO TO 3000
 3021 INPUT "NUMBER OF YEARS ";N$: IF N$="Q" THEN RUN 
 3025 LET NY=VAL N$
 3028 LET C$(2)="NUMBER OF YEARS  "+N$: PRINT C$(2)
 3030 INPUT " # OF COMPOUNDINGS PER YEAR      CHOOSE ONE OF - (1,2,3,4,6,12)  ";N$: IF N$="Q" THEN RUN 
 3040 LET NC=VAL N$
 3041 IF NC<=0 OR (NC<>1 AND NC<>2 AND NC<>3 AND NC<>4 AND NC<>6 AND NC<>12) THEN GO TO 3030
 3045 LET C$(3)="COMPOUNDINGS/YR. "+N$: PRINT C$(3)
 3050 INPUT "ANNUAL INTEREST RATE ";I$: IF I$="Q" THEN RUN 
 3060 LET I=VAL I$: IF I<0 THEN GO TO 3050
 3065 LET C$(4)="ANNUAL INT. RATE "+I$+" %": PRINT C$(4)
 3066 LET i=i/100
 3067 LET st=0
 3068 LET i=i/nc
 3070 GO SUB 300
 3090 INPUT "DATA TO PRINTER ";Z$
 3100 GO SUB 1300: IF Z$="Y" OR Z$="y" THEN GO SUB 1400
 3110 INPUT "SHALL I PREPARE A GROWTH TABLE";Z$
 3120 IF Z$<>"Y" AND Z$<>"y" THEN GO TO 9800
 3125 GO SUB 9700
 3130 INPUT "DATA TO PRINTER (Y OR N)?";Z$
 3140 IF Z$="Y" OR Z$="y" THEN LET st=2: GO TO 3150
 3141 LET ST=1
 3145 PRINT "DATE      INTEREST   NEW BALANCE"
 3146 PRINT INVERSE 1;"**  YEAR  ";E$;"  **"
 3147 LET A=BE: GO SUB 1200: FOR F=1 TO VAL D$: READ F$: NEXT F
 3148 PRINT F$;" OPENNING BALANCE";TAB 32-LEN A$;A$
 3149 GO TO 3155
 3150 LPRINT "DATE      INTEREST   NEW BALANCE"
 3156 LPRINT INVERSE 1;"**  YEAR  ";E$;"  **"
 3157 LET A=BE: GO SUB 1200: RESTORE 10: FOR F=1 TO VAL D$: READ F$: NEXT F
 3158 LPRINT F$;" OPENING BALANCE";TAB 32-LEN A$;A$
 3160 GO SUB 300
 3200 GO TO 9800
 4000 REM future with inc
 4010 LET A$="* FUTURE VALUE WITH INCREMENT **": GO SUB 1900
 4020 DIM C$(6,32)
 4030 PRINT : PRINT : PRINT 
 4040 INPUT "OPENING BALANCE ";B$: IF B$="Q" THEN RUN 
 4045 LET BE=VAL B$: IF BE<0 OR BE>999999.99 THEN GO TO 4040
 4050 LET A=BE: GO SUB 1200: LET C$(1)="OPENING BALANCE $"+A$: PRINT C$(1)
 4060 INPUT "INCREMENT ?";I$: IF I$="Q" THEN RUN 
 4070 LET IN=VAL I$: IF IN<0 OR IN>999999.99 THEN GO TO 4060
 4075 LET A=IN: GO SUB 1200: LET C$(2)="ANNUAL INCREMENT $"+A$
 4076 PRINT C$(2)
 4080 INPUT "INTEREST RATE ?";R$: IF R$="Q" THEN RUN 
 4085 LET R=(VAL R$)/100: IF R<0 THEN GO TO 4080
 4090 LET C$(3)="INTEREST RATE     "+R$+"%": PRINT C$(3)
 4100 INPUT "NUMBER OF YEARS ?";N$: IF N$="Q" THEN RUN 
 4110 LET NY=VAL N$: LET C$(4)="NUMBER OF YEARS   "+N$
 4120 PRINT C$(4)
 4130 INPUT "NUMBER OF COMPOUNDINGS PER YEAR CHOOSE ONE OF (1,2,3,4,6, OR 12)";N$: IF N$="Q" THEN RUN 
 4135 IF N$<>"1" AND N$<>"2" AND N$<>"3" AND N$<>"4" AND N$<>"6" AND N$<>"12" THEN GO TO 4130
 4140 LET NC=VAL N$: IF INT (NC)<>NC THEN GO TO 4130
 4145 LET C$(5)="COMPOUNDINGS/YR.  "+N$: PRINT C$(5)
 4146 LET r=r/nc
 4150 LET ST=0: GO SUB 400
 4160 INPUT "DATA TO PRINTER ?(Y OR N)";Z$
 4170 GO SUB 1300: IF Z$="Y" OR Z$="y" THEN GO SUB 1400
 4175 INPUT "SHALL I PREPARE A GROWTH TABLE  ";Z$: IF Z$<>"Y" AND Z$<>"y" THEN GO TO 9800
 4176 GO SUB 9700
 4177 RESTORE 10: FOR F=1 TO VAL D$: READ F$: NEXT F
 4180 INPUT "data to printer (y OR n)?";z$
 4190 IF z$="y" OR z$="Y" THEN LET ST=2: GO TO 4250
 4200 PRINT INVERSE 1;"**  YEAR  ";E$;"  **"
 4204 LET A=BE: GO SUB 1200
 4205 PRINT F$;TAB 32-LEN A$;A$
 4210 LET ST=1: GO SUB 400: GO TO 9800
 4250 LPRINT : LPRINT : LPRINT INVERSE 1;"**  YEAR  ";E$;"  **"
 4254 LET A=BE: GO SUB 1200
 4255 LPRINT F$;TAB 32-LEN A$;A$
 4260 LET ST=2: GO SUB 400: GO TO 9800
 5000 STOP 
 9700 INPUT "beginning month and year?(mm/yy)";m$
 9710 IF VAL m$( TO 2)>12 OR VAL m$( TO 2)<0 THEN GO TO 9700
 9720 LET d$=m$( TO 2): LET e$="19"+m$(4 TO )
 9730 RETURN 
 9800 PRINT : PRINT "press any key for menu"
 9810 IF INKEY$="" THEN GO TO 9810
 9820 RUN 
 9900 REM  pad c$
 9910 FOR Y=1 TO 6
 9915 IF c$(y)="                                " THEN GO TO 9990
 9916 LET a$=c$(y): LET b=32
 9917 FOR j=32 TO 1 STEP -1: IF a$(j)<>" " THEN LET a$=a$( TO j): GO TO 9919
 9918 NEXT j
 9919 LET a$="*** "+a$+" "
 9920 LET b=32-LEN a$
 9930 FOR j=1 TO b: LET a$=a$+"*": NEXT j
 9940 LET c$(y)=a$
 9990 NEXT y
 9995 RETURN 
 9998 SAVE "amortize" LINE 1000
 9999 VERIFY ""
Scroll to Top