home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / MISC / FINANCE / INVEST.LBR / CBUDGET.BZS / CBUDGET.BAS
BASIC Source File  |  2000-06-30  |  11KB  |  255 lines

  1. 10 REM ************ RECURSIVE BUDGETING *****************
  2. 20 REM
  3. 30 REM                by O.E. Dial
  4. 40 REM
  5. 50 REM   Ref. 'PERSONAL COMPUTING' May/June 1977
  6. 60 REM                pgs. 54-59
  7. 70 REM
  8. 80 REM --------------------------------------------------
  9. 90 REM
  10. 100 Q=27: V$="###.#" : W$="$$#####," : U$="###"
  11. 120 DIM D(18),E$(Q),V(Q),F(Q)
  12. 130 PRINT CHR$(26):PRINT:PRINT:PRINT:PRINT
  13. 140 PRINT TAB(19)"RECURSIVE BUDGETING MODEL": PRINT: PRINT TAB(28)"* * *"
  14. 150 REM
  15. 160 DATA SALARY/WAGES,OTHER INCOME,FED INC TAX,STATE AND LOCAL TAX
  16. 170 DATA SOCIAL SECURITY,UNEMPLOYMENT INS,HEALTH INS
  17. 180 DATA LIFE INS,CONTRIBUTIONS,OTHER DEDUCTIONS
  18. 190 DATA RENT/MORTGAGE,LIFE INS, HEALTH INS, HOUSE INS
  19. 200 DATA AUTO INS,CAR PAYMENTS,LOAN PAYMENTS,TRASH REMOVAL
  20. 210 DATA OTHER FIXED EXP
  21. 220 DATA FOOD/BEVERAGES,CLOTHING,DRY CLEANING,BARBER/BEAUTY
  22. 230 DATA HOME MAINT,HOME HEAT'G FUEL,WATER,ELECTRICITY,TELEPHONE
  23. 240 DATA GAS/OIL,AUTO MAINT,FARES/TOLLS/PARKING,    DENTIST
  24. 250 DATA PHYSICIAN,DRUGS/SUNDRIES,SCHOOL EXPENSE,FAMILY ALLOWANCE
  25. 260 DATA CLUBS/LODGES,THEATER/SPORTS,RESTAURANTS
  26. 270 DATA OTHER ENT'MENT,MAG'S/BOOKS/PAPERS,SITTERS,CHILD CARE
  27. 280 DATA VACATION SAVINGS,OTHER SAVINGS,CONTRIBUTIONS,OTHER EXPENSES
  28. 290 REM
  29. 300 REM
  30. 310 PRINT: PRINT"Select your budgeting period by number.  Later on it will"
  31. 320 PRINT"be extended to one year.": PRINT
  32. 330 PRINT TAB(10)"1-WEEKLY"
  33. 340 PRINT TAB(10)"2-BIWEEKLY"
  34. 350 PRINT TAB(10)"3-SEMIMONTHLY"
  35. 360 PRINT TAB(10)"4-MONTHLY"
  36. 370 PRINT
  37. 380 INPUT": ",P
  38. 390 IF P>4 THEN PRINT"Try again!" ELSE 410
  39. 400 GOTO 310
  40. 410 IF P=1 THEN P=52
  41. 420 IF P=2 THEN P=26
  42. 430 IF P=3 THEN P=24
  43. 440 IF P=4 THEN P=12
  44. 450 PRINT CHR$(26):PRINT:PRINT:PRINT:PRINT
  45. 460 PRINT:PRINT"Alright, first let's look at income for the period."
  46. 470 PRINT
  47. 480 READ A$:PRINT A$;" $";: INPUT"",D(0):READ A$:PRINT A$;" $";:INPUT"",D(1)
  48. 490 TI=D(0)+D(1)
  49. 500 PRINT CHR$(26):PRINT:PRINT:PRINT:PRINT
  50. 510 PRINT:PRINT"Ok, now let's look at paycheck deductions.":PRINT
  51. 520 FOR J=2 TO 9: READ A$: PRINT A$;" $";:INPUT"",D(J):TD=TD+D(J): NEXT J
  52. 530 PRINT CHR$(26):PRINT:PRINT:PRINT:PRINT
  53. 540 PRINT"Ok, now let's look at fixed expenses.": PRINT
  54. 550 FOR J=10 TO 18:READ A$:PRINT A$;" $";:INPUT"",D(J):TF=TF+D(J): NEXT J
  55. 560 DF=TD+TF: SI=TI-DF: S=64
  56. 570 PRINT CHR$(26)
  57. 580 PRINT"Ok, at this point our table looks like this: ": PRINT
  58. 590 PRINT
  59. 600 GOSUB 2110: PRINT: PRINT TAB(19);
  60. 610 PRINT"RECURSIVE BUDGETING MODEL": PRINT: PRINT TAB(27)"* * *": PRINT
  61. 620 GOSUB 2110
  62. 630 PRINT:PRINT TAB(20)"SPENDABLE INCOME SUMMARY": PRINT
  63. 640 GOSUB 2100: PRINT TAB(3)"ACCOUNT"TAB(42)"PERIOD"TAB(57)"ANNUAL"
  64. 650 GOSUB 2100: PRINT"TOTAL INCOME"TAB(40);
  65. 660 PRINT USING W$;TI;:PRINT TAB(55);
  66. 670 PRINT USING W$;TI*P: PRINT:PRINT TAB(3)"PAYCHECK DEDUCTIONS"TAB(25);
  67. 680 PRINT USING W$;TD*(-1): PRINT
  68. 690 PRINT TAB(3)"FIXED EXPENSES"TAB(25);: PRINT USING W$;TF*(-1);
  69. 700 PRINT TAB(40);: PRINT USING W$;DF*(-1);: PRINT TAB(55);
  70. 710 PRINT USING W$;DF*(-1)*P
  71. 720 PRINT TAB(41)"-------"TAB(55)"--------":PRINT"SPENDABLE INCOME";
  72. 730 PRINT TAB(40);:PRINT USING W$;SI;:PRINT TAB(55);:PRINT USING W$;SI*P
  73. 740 PRINT TAB(41)"========"TAB(55)"========":PRINT:
  74. 750 GOSUB 2110: PRINT: PRINT
  75. 760 GOSUB 2120
  76. 770 RO=0
  77. 780 PRINT:PRINT"Ok, now for the first round of variable expense.  Don't"
  78. 790 PRINT"pinch yourself in your estimates (within reason).  Let the"
  79. 800 PRINT"computer help you to refine your budget later on.": PRINT
  80. 810 FOR J=0 TO Q:READ E$(J):PRINT E$(J);" $";: INPUT"",V(J):VT=VT+V(J):NEXT J
  81. 820 RESTORE
  82. 830 PRINT:PRINT
  83. 840 PRINT"Your budget for the first round totalled $"VT".  This"
  84. 850 PRINT"compares to spendable income of $"SI".  We have"
  85. 860 PRINT"prorated the difference, $"SI-VT", over all variable expense"
  86. 870 PRINT"accounts.": PRINT
  87. 880 GOSUB 2120: FOR J=0 TO Q:V(J)=INT(V(J)/VT*SI): NEXT J: VT=SI: PRINT
  88. 890 PRINT CHR$(26):PRINT:PRINT:PRINT:PRINT
  89. 900 PRINT"Now we begin the budget refinement phase.  Make as many"
  90. 910 PRINT"passes as you like.  As you review each account, decide"
  91. 920 PRINT"whether to FREEZE it or leave it for another pass.": PRINT
  92. 930 PRINT"HINT: Don't be in a hurry to freeze an account.": PRINT
  93. 940 PRINT"Your task is finished when all accounts are frozen!": PRINT
  94. 950 GOSUB 2120
  95. 960 FOR J=0 TO Q: IF V(J)=0 THEN 1180
  96. 970 PRINT
  97. 980 PRINT E$(J);" $";V(J): INPUT"Change ('Y' or 'N') ",A$
  98. 990 A$=LEFT$(A$,1)
  99. 1000 IF A$="N" THEN 1030 ELSE IF A$="Y" THEN 1010 ELSE 980
  100. 1010 INPUT"Revised amount $";A: IF A<V(J) THEN 1030
  101. 1020 GOSUB 2150
  102. 1030 INPUT"Freeze ('Y' or 'N') ",B$
  103. 1040 B$=LEFT$(B$,1)
  104. 1050 IF A$="Y" AND B$="Y" THEN 1100
  105. 1060 IF A$="Y" AND B$="N" THEN 1140
  106. 1070 IF A$="N" AND B$="N" THEN 1180
  107. 1080 VT=VT-V(J): FT=FT+V(J): SWAP F(J),V(J): V(J)=0: PRINT
  108. 1090 PRINT"Ok, the account has been frozen at $"F(J)".": GOTO 1180
  109. 1100 VT=VT-A: FT=FT+A: SWAP A,F(J): V(J)=0
  110. 1110 FOR K=0 TO Q: V(K)=INT(V(K)*(SI-FT)/VT): NEXT K: VT=SI-FT
  111. 1120 PRINT"Ok, the account has been frozen at $"F(J)", and the difference"
  112. 1130 PRINT"prorated over the remaining accounts.": PRINT: GOTO 1180
  113. 1140 VT=VT-V(J)+A: V(J)=A
  114. 1150 FOR K=0 TO Q:V(K)=INT(V(K)*(SI-FT)/VT): NEXT K: VT=SI-FT
  115. 1160 PRINT"Ok, the value has been changed to $"A", and the difference"
  116. 1170 PRINT"prorated over remaining accounts.": PRINT
  117. 1180 NEXT J:  R=0: FOR J=0 TO Q: IF V(J)=0 THEN R=R+1: NEXT J
  118. 1190 IF R<=Q THEN 1210
  119. 1200 FOR J=0 TO Q: F(J)=INT(F(J)/FT*SI): NEXT J: VT=0: FT=SI: GOTO 1580
  120. 1210 PRINT"Now, let's recap variable expenses before going on to the"
  121. 1220 PRINT"next round.": PRINT: RO=RO+1: V1=0: F1=0
  122. 1230 FOR J=0 TO Q: V(J)=INT(V(J)/VT*(SI-FT)): NEXT J: VT=SI-FT
  123. 1240 GOSUB 2120
  124. 1250 PRINT TAB(7)"INTERIM SUMMARY OF VARIABLE EXPENSES";
  125. 1260 PRINT":   NO."RO
  126. 1270 GOSUB 2100: PRINT TAB(3)"ACCOUNTS"TAB(28)"NUMBER"TAB(37)"PERCENT";
  127. 1280 PRINT TAB(48)"AMOUNT"TAB(56)"PERCENT"
  128. 1290 GOSUB 2100: FOR J=0 TO Q: IF V(J)+F(J)=0 THEN 1310
  129. 1300 IF V(J) THEN V1=V1+1 ELSE F1=F1+1
  130. 1310 NEXT J
  131. 1320 PRINT"VARIABLE EXPENSES"TAB(29);:PRINT USING U$;V1;:PRINT TAB(39);
  132. 1330 PRINT USING V$;V1/(V1+F1)*100;:PRINT TAB(46);:PRINT USING W$;VT;
  133. 1340 PRINT TAB(58);:PRINT USING V$;VT/TI*100: PRINT
  134. 1350 PRINT"FROZEN EXPENSES"TAB(29);:PRINT USING U$;F1;:PRINT TAB(39);
  135. 1360 PRINT USING V$;F1/(V1+F1)*100;: PRINT TAB(46);
  136. 1370 PRINT USING W$;FT;: PRINT TAB(58);:PRINT USING V$;FT/TI*100
  137. 1380 PRINT TAB(28)"-------"TAB(48)"--------"
  138. 1390 PRINT TAB(3)"TOTALS"TAB(29);:PRINT USING U$;F1+V1;: PRINT TAB(46);
  139. 1400 PRINT USING W$;VT+FT:PRINT TAB(28)"======="TAB(48)"========":PRINT
  140. 1410 GOSUB 2110: PRINT: PRINT
  141. 1420 GOSUB 1430: GOTO 1470
  142. 1430 PRINT TAB(8)"INTERIM STATUS OF VARIABLE EXPENSES  NO."RO
  143. 1440 GOSUB 2100:PRINT TAB(3)"ACCOUNT"TAB(30)"VARIABLE"TAB(43)"FROZEN";
  144. 1450 PRINT TAB(54)"PERCENT"
  145. 1460 GOSUB 2100: PRINT
  146. 1470 FOR J=0 TO Q: IF V(J)+F(J)=0 THEN 1530 ELSE PRINT E$(J);: R2=R2+1
  147. 1480 IF F(J) THEN 1500 ELSE PRINT TAB(29): PRINT USING W$;V(J);:PRINT TAB(55);
  148. 1490 PRINT USING V$;V(J)/TI*100: GOTO 1520
  149. 1500 PRINT TAB(40);: PRINT USING W$;F(J);: PRINT TAB(55);
  150. 1510 PRINT USING V$;F(J)/TI*100
  151. 1520 IF INT(R2/5)=R2/5 THEN PRINT
  152. 1530 NEXT J: PRINT: R2=0
  153. 1540 GOSUB 2110: PRINT
  154. 1550 PRINT: PRINT:
  155. 1560  PRINT"Now we make another pass through variable expenses.":PRINT
  156. 1570 GOTO 950
  157. 1580 PRINT:PRINT:PRINT"Please enter the requested information before we ";
  158. 1590 PRINT"provide a final detail of your budget.": PRINT
  159. 1600 PRINT TAB(18)"* DON'T use commas or colons *":PRINT
  160. 1610 INPUT"Name: ",A$: INPUT"Budget year: ",A
  161. 1620 B=LEN(A$): B=16-B/2
  162. 1630 PRINT: PRINT
  163. 1640 GOSUB 2130
  164. 1650 GOSUB 2110: PRINT
  165. 1660 PRINT
  166. 1670 PRINT TAB(B)"* THE "A$" FAMILY BUDGET FOR "A" *":PRINT
  167. 1680 GOSUB 2110: PRINT
  168. 1690 PRINT TAB(6)"ACCOUNT"TAB(20)"|"TAB(26)"INCOME"TAB(38)"|";
  169. 1700 PRINT TAB(44)"EXPENSE"TAB(56)"|PERCENT"
  170. 1710 PRINT TAB(20)"|-----------------|-----------------| TOTAL"
  171. 1720 PRINT TAB(20)"| PERIOD | ANNUAL | PERIOD | ANNUAL |INCOME"
  172. 1730 PRINT "-------------------|--------|--------|--------|--------|-------"
  173. 1740 X$="|$$#####,|$$#####,|        |        | ###.#"
  174. 1750 Y$="|        |        |$$#####,|$$#####,| ###.#"
  175. 1760 GOTO 1780
  176. 1770 PRINT"|        |        |        |        |": RETURN
  177. 1780 PRINT"INCOME"TAB(20);:PRINT USING X$;TI;TI*P;TI/TI*100
  178. 1790 PRINT"------"TAB(20);
  179. 1800 GOSUB 1770
  180. 1810 READ A$:PRINT A$TAB(20);:PRINT USING X$;D(0);D(0)*P;D(0)/TI*100
  181. 1820 READ A$:PRINT A$TAB(20);:PRINT USING X$;D(1);D(1)*P;D(1)/TI*100
  182. 1830 PRINT TAB(20);
  183. 1840 GOSUB 1770
  184. 1850 PRINT"PAYCHECK DEDUCT'S"TAB(20);
  185. 1860 PRINT USING Y$;TD;TD*P;TD/TI*100
  186. 1870 PRINT "-----------------"TAB(20);
  187. 1880 GOSUB 1770
  188. 1890 FOR J=2 TO 9: READ A$: IF D(J)=0 THEN 1910 ELSE PRINT A$TAB(20);
  189. 1900 PRINT USING Y$;D(J);D(J)*P;D(J)/TI*100
  190. 1910 NEXT J: PRINT TAB(20);
  191. 1920 GOSUB 1770
  192. 1930 PRINT"FIXED EXPENSES"TAB(20);
  193. 1940 PRINT USING Y$;TF;TF*P;TF/TI*100
  194. 1950 PRINT "--------------"TAB(20);
  195. 1960 GOSUB 1770
  196. 1970 FOR J=10 TO 18: READ A$: IF D(J)=0 THEN 1990 ELSE PRINT A$TAB(20);
  197. 1980 PRINT USING Y$;D(J);D(J)*P;D(J)/TI*100
  198. 1990 NEXT J: PRINT TAB(20);
  199. 2000 GOSUB 1770
  200. 2010 PRINT"VARIABLE EXPENSE"TAB(20);
  201. 2020 PRINT USING Y$;FT;FT*P;FT/TI*100
  202. 2030 PRINT "----------------"TAB(20);
  203. 2040 GOSUB 1770
  204. 2050 FOR J=0 TO Q: IF F(J)=0 THEN 2070 ELSE PRINT E$(J)TAB(20);
  205. 2060 PRINT USING Y$;F(J);F(J)*P;F(J)/TI*100
  206. 2070 NEXT J: PRINT
  207. 2080 GOSUB 2110: PRINT
  208. 2090 GOSUB 2110: PRINT: GOTO 2200
  209. 2100 FOR L=1 TO S:PRINT"-";:NEXT L: PRINT: RETURN
  210. 2110 FOR L=1 TO S:PRINT"=";:NEXT L: PRINT: RETURN
  211. 2120 PRINT"PRESS 'RETURN' TO CONTINUE":INPUT"",A$
  212. 2130 PRINT CHR$(26):PRINT:PRINT:PRINT:PRINT
  213. 2140 RETURN
  214. 2150 IF A<=V(J) THEN 2190
  215. 2160 IF A<=VT THEN 2190
  216. 2170 PRINT"* You have exceeded your balance of spendable income by $"A-SI;
  217. 2180 PRINT" *": INPUT"Revised amount $",A: PRINT
  218. 2190 RETURN
  219. 2200 RESTORE: READ A$:READ A$:PRINT: S=79
  220. 2210 PRINT TAB(21)"* EXPENSE BAR CHART *"
  221. 2220 PRINT TAB(20)"PERCENT OF TOTAL INCOME":PRINT
  222. 2230 GOSUB 2100: PRINT
  223. 2240 GOSUB 2380: PRINT
  224. 2250 FOR J=2 TO 18: READ A$:IF D(J)=0 THEN 2280
  225. 2260 A=INT((D(J)/TI*100)+.5): PRINT A$;
  226. 2270 GOSUB 2420
  227. 2280 NEXT J
  228. 2290 FOR J=0 TO Q
  229. 2300 IF F(J)=0 THEN 2330
  230. 2310 A=INT((F(J)/TI*100)+.5): PRINT E$(J);
  231. 2320 GOSUB 2420
  232. 2330 NEXT J: PRINT
  233. 2340 GOSUB 2380: PRINT: PRINT
  234. 2350 GOSUB 2110:PRINT:PRINT: GOTO 2490
  235. 2360 REM
  236. 2370 GOTO 2490
  237. 2380 REM
  238. 2390 PRINT TAB(20)" ....|....1....|....2....|....3....|....4....|....5";
  239. 2400 PRINT"....|....6"
  240. 2410 RETURN
  241. 2420 IF A<1 THEN PRINT TAB(21)"]": GOTO 2450
  242. 2430 IF A>60 THEN A=60
  243. 2440 PRINT TAB(21);:FOR K=1 TO A: PRINT"]";:NEXT K: PRINT
  244. 2450 RETURN
  245. 2460 REM
  246. 2470 GOTO 2490
  247. 2480 REM
  248. 2490 PRINT: PRINT:
  249. 2500 END
  250. TAB(21);:FOR K=1 TO A: PRINT"]";:NEXT K: PRINT
  251. 2450 RETURN
  252. 2460 REM
  253. 2470 GOTO 2490
  254. 2480 REM
  255. 2490 PRI