The Personal Accountant

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

Calculates loan payments and future value of an investment.

Content

Appears On

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

Related Products

Related Articles

Related Content

Image 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