home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib19a.dsk
/
MAY.1984
/
PAYCHECK.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
13KB
|
343 lines
10 REM **********************
20 REM * PAYCHECK *
30 REM * BY LELAND L. COX *
40 REM * COPYRIGHT (C) 1984 *
50 REM * BY MICROSPARC, INC *
60 REM * LINCOLN, MA. 01773 *
70 REM **********************
80 D$ = CHR$(4)
90 CALL -1184
100 REM
110 DIM A$(100,10)
120 DIM A(100,10)
130 REM READ DISK TO GET NUMBER OF RECORDS
140 ONERR GOTO 3290: REM INIT. FILE 'PAYCHECK.F'
150 PRINT D$;"OPEN PAYCHECK.F,L100"
160 PRINT D$;"READ PAYCHECK.F,R0"
170 INPUT NR
180 PRINT D$;"CLOSE PAYCHECK.F"
190 REM CLEAR SCREEN AND SET WINDOW
200 POKE 34,0: CALL -1184
210 RESTORE
220 PRINT : VTAB 3: HTAB 7: PRINT "******** PAYCHECK ********"
230 PRINT "** COPYRIGHT 1984 BY MICROSPARC, INC. **"
240 PRINT " 1. CHECK COMPUTATION"
250 PRINT
260 PRINT " 2. ENTER DATA"
270 PRINT
280 PRINT " 3. PRINT DATA ON SCREEN"
290 PRINT
300 PRINT " 4. PRINT TOTALS ON SCREEN"
310 PRINT
320 PRINT " 5. PRINT DATA ON PRINTER"
330 PRINT : PRINT " 6. CHANGE/DELETE RECORDS"
340 PRINT : PRINT " 7. EXIT PROGRAM"
350 PRINT : PRINT
360 PRINT " NUMBER RECORDS = ";NR
370 PRINT
380 PRINT " ENTER CHOICE (1-7).....? ";: GET Z$: PRINT Z$
390 Z = VAL(Z$): IF Z <1 OR Z >7 GOTO 200
400 ON Z GOTO 410,570,1120,1500,2030,2640,3250
410 REM CHECK FOR CORRECT GROSS
420 CALL -1184
430 PRINT : PRINT
440 VTAB 3: CALL -958: INPUT "WHAT IS THE PAY SCALE ? $";SC$:SC = VAL(SC$)
450 PRINT : PRINT
460 VTAB 6: CALL -958: INPUT "HOW MANY HOURS STRAIGHT TIME ? ";ST$:ST = VAL(ST$)
470 PRINT : PRINT
480 VTAB 8: CALL -958: INPUT "HOW MANY HOURS TIME AND A HALF ? ";TH$:TH = VAL(TH$)
490 PRINT : PRINT
500 VTAB 10: CALL -958: INPUT "HOW MANY HOURS DOUBLE TIME ? ";DT$:DT = VAL(DT$)
510 PRINT : PRINT
520 VTAB 12: CALL -958: INPUT "HOW MANY HOURS TRIPLE TIME ? ";TT$:TT = VAL(TT$)
530 PRINT : PRINT
540 PRINT "GROSS PAY = $";(SC *ST) +(SC *1.5 *TH) +(SC *2 *DT) +(SC *3 *TT)
550 PRINT : PRINT : PRINT
560 PRINT " HIT ANY KEY TO CONTINUE.....";: GET Z$: PRINT Z$: GOTO 190
570 REM ENTER DATA ROUTINE
580 NR = NR +1:I = NR
590 GOSUB 620
600 GOTO 580
610 REM ENTER DATA SUBROUTINE
620 B$ = " ": REM 7 SPACES
630 HOME
640 PRINT : PRINT
650 PRINT "ENTER AMOUNTS FROM PAYCHECK STUB...."
660 PRINT : PRINT "PRESS <RETURN> NOW TO ";: FLASH : PRINT "QUIT";: NORMAL : PRINT "!"
670 PRINT : PRINT "THIS IS RECORD # ";I
680 PRINT : INPUT "DATE (MO/DA)...........";A$(I,1)
690 IF LEN(A$(I,1)) = 0 THEN POP :NR = NR -1: GOTO 190
700 HOME
710 A$(I,1) = " " +A$(I,1)
720 PRINT "DATE (MO/DA)...........";A$(I,1)
730 PRINT : INPUT "GROSS INCOME ..........$";A$(I,2)
740 J = 2:V = 2: GOSUB 1000
750 PRINT : INPUT "FEDERAL TAX ...........$";A$(I,3)
760 J = 3:V = 4: GOSUB 1000
770 PRINT : INPUT "STATE TAX .............$";A$(I,4)
780 J = 4:V = 6: GOSUB 1000
790 PRINT : INPUT "FIC<CTRL-A>A ..................$";A$(I,5)
800 J = 5:V = 8: GOSUB 1000
810 PRINT : INPUT "SUI ...................$";A$(I,6)
820 J = 6:V = 10: GOSUB 1000
830 PRINT : INPUT "VACATION ..............$";A$(I,7)
840 J = 7:V = 12: GOSUB 1000
850 PRINT : INPUT "UNION ASSESSMENT ......$";A$(I,8)
860 J = 8:V = 14: GOSUB 1000
870 PRINT : INPUT "NET PAYCHECK ..........$";A$(I,9)
880 J = 9:V = 16: GOSUB 1000
890 PRINT : INPUT "TOTAL HOURS ...........#";A$(I,10)
900 J = 10:V = 18: GOSUB 1000
910 A$(I,1) = " " +A$(I,1)
920 PRINT : PRINT "IS THIS ENTRY CORRECT (Y/N) ?";: GET Q$: PRINT Q$: IF Q$ < >"Y" GOTO 620
930 PRINT D$;"OPEN PAYCHECK.F,L100"
940 PRINT D$;"WRITE PAYCHECK.F,R0"
950 PRINT NR
960 PRINT D$;"WRITE PAYCHECK.F,R";I
970 FOR J = 1 TO 10: PRINT A$(I,J): NEXT J
980 PRINT D$;"CLOSE PAYCHECK.F"
990 RETURN
1000 REM INPUT FORMAT ROUTINE
1010 A(I,J) = VAL(A$(I,J))
1020 IF A(I,J) <.01 THEN A(I,J) = 0
1030 IF A(I,J) = 0 THEN A$(I,J) = ".000": GOTO 1060
1040 A(I,J) = A(I,J) +.001
1050 A$(I,J) = STR$(A(I,J))
1060 A$(I,J) = B$ +A$(I,J)
1070 A$(I,J) = RIGHT$(A$(I,J),9)
1080 A$(I,J) = LEFT$(A$(I,J),8)
1090 VTAB V +1: HTAB 25: PRINT A$(I,J)
1100 VTAB (V +2)
1110 RETURN
1120 REM PRINT DATA ON SCREEN
1130 HOME
1140 PRINT "MO/DA GROSS FED ST FICA SUI "
1150 PRINT
1160 PRINT " VAC UA NET HOURS"
1170 VTAB 10: CALL -958: INPUT "START WITH RECORD # ";SN$:SN = VAL(SN$): IF SN <0 THEN 1170
1180 PRINT : IF SN = 0 THEN SN = 1
1190 IF SN >NR THEN PRINT "** OUT OF RANGE **": GOTO 1170
1200 POKE 34,4
1210 N = SN:NA = N +2: IF NA >NR THEN NA = NR
1220 PRINT D$;"OPEN PAYCHECK.F,L100"
1230 PRINT D$;"READ PAYCHECK.F,R0"
1240 INPUT NR
1250 FOR I = N TO NA
1260 PRINT D$;"READ PAYCHECK.F,R";I
1270 FOR J = 1 TO 10
1280 INPUT A$(I,J)
1290 GOSUB 3360
1300 NEXT J
1310 NEXT I
1320 PRINT D$;"CLOSE PAYCHECK.F"
1330 FOR I = N TO NA
1340 PRINT "# ";I
1350 PRINT A$(I,1); TAB( 7)A$(I,2); TAB( 15)A$(I,3); TAB( 22)A$(I,4); TAB( 29)A$(I,5); TAB( 36)A$(I,6)
1360 PRINT TAB( 12)A$(I,7); TAB( 20)A$(I,8); TAB( 26)A$(I,9); TAB( 35)A$(I,10)
1370 NEXT I
1380 PRINT
1390 PRINT "PRESS <ESC> TO QUIT...."
1400 PRINT "ANY OTHER KEY TO CONTINUE....";: GET Z$: PRINT Z$
1410 IF ASC(Z$) = 27 THEN GOTO 190
1420 N = N +3:NA = N +2: IF NA >NR THEN NA = NR
1430 IF NA <N THEN GOTO 1480
1440 HOME
1450 PRINT
1460 GOTO 1220
1470 PRINT
1480 PRINT : PRINT "THAT IS ALL OF THE DATA...."
1490 PRINT : PRINT "PRESS ANY KEY TO CONTINUE..";: GET Z$: GOTO 190
1500 REM PRINT TOTALS ON SCREEN
1510 HOME
1520 PRINT " ***** TOTAL EACH HEADING *****"
1530 PRINT : PRINT : PRINT : PRINT NR;" RECORDS ON FILE...."
1540 PRINT : PRINT
1550 VTAB 7: CALL -958: INPUT "START WITH RECORD # ";SN$:SN = VAL(SN$)
1560 IF SN <1 OR SN = >NR GOTO 1600
1570 PRINT : INPUT "END WITH RECORD # ";EN
1580 IF EN < = SN OR EN >NR GOTO 1600
1590 GOTO 1620
1600 PRINT "*** OUT OF RANGE ERROR ***": GOTO 1610
1610 PRINT CHR$(7); CHR$(7): FOR Q = 1 TO 1000: NEXT Q: GOTO 1500
1620 FOR J = 2 TO 10:T(J) = 0:T$(J) = "": NEXT J
1630 PRINT D$;"OPEN PAYCHECK.F,L100"
1640 PRINT D$;"READ PAYCHECK.F,R0"
1650 INPUT NR
1660 FOR I = SN TO EN
1670 PRINT D$;"READ PAYCHECK.F,R";I
1680 FOR J = 1 TO 10
1690 INPUT A$(I,J)
1700 T(J) = T(J) + VAL(A$(I,J))
1710 NEXT J
1720 NEXT I
1730 PRINT D$;"CLOSE PAYCHECK.F"
1740 FOR J = 2 TO 10
1750 T$(J) = STR$(T(J) +1.005 - SGN(T(J)) * INT( ABS(T(J))))
1760 T$(J) = STR$( SGN(T(J)) * INT( ABS(T(J)))) + MID$ (T$(J),2,3)
1770 T$(J) = RIGHT$(" " +T$(J),8)
1780 NEXT J
1790 HOME
1800 PRINT "******* PAY CHECK TOTALS *******"
1810 PRINT : PRINT
1820 PRINT "GROSS INCOME.......$";T$(2)
1830 PRINT
1840 PRINT "FEDERAL TAX........$";T$(3)
1850 PRINT
1860 PRINT "STATE TAX..........$";T$(4)
1870 PRINT
1880 PRINT "FICA...............$";T$(5)
1890 PRINT
1900 PRINT "SUI................$";T$(6)
1910 PRINT
1920 PRINT "VACATION...........$";T$(7)
1930 PRINT
1940 PRINT "UNION ASMT.........$";T$(8)
1950 PRINT
1960 PRINT "NET INCOME.........$";T$(9)
1970 PRINT
1980 PRINT "TOTAL HOURS........$";T$(10)
1990 PRINT : PRINT : PRINT
2000 PRINT "PRESS ANY KEY TO CONTINUE.....";: GET B$: PRINT B$
2010 GOTO 190
2020 REM
2030 REM PRINT DATA AND TOTALS ON PRINTER
2040 REM
2050 HOME
2060 FOR Q = 1 TO 39: PRINT "*";: NEXT
2070 PRINT : PRINT : PRINT "*************** **************"
2080 VTAB 3: HTAB 17: INVERSE : PRINT "PAYCHECK": NORMAL
2090 VTAB 5: CALL -958: FOR Q = 1 TO 39: PRINT "*";: NEXT
2100 VTAB 7: PRINT " PRINTER ROUTINE WILL PRINT SPECIFIED"
2110 PRINT
2120 PRINT "RECORDS AND THE PRINT THE TOTALS FOR "
2130 PRINT
2140 NEXT I
2150 PRINT : PRINT
2160 VTAB 16: CALL -958: PRINT : INPUT "START WITH RECORD # ";SN$:SN = VAL(SN$)
2170 IF SN <1 OR SN = >NR GOTO 2210
2180 PRINT : INPUT "STOP WITH RECORD # ";EN
2190 IF EN < = SN OR EN >NR GOTO 2210
2200 GOTO 2230
2210 PRINT " *** INPUT RANGE ERROR ***"
2220 FOR Q = 1 TO 1000: NEXT Q: GOTO 2030
2230 REM TURN ON PRINTER AND SET UP PRINTER INTERFACE
2240 PRINT D$"PR#1": PRINT CHR$(9)"80N"
2250 PRINT : PRINT : PRINT CHR$(14)" *** PAYCHECK ***"
2260 FOR P = 1 TO 80: PRINT "*";: NEXT P
2270 PRINT : PRINT
2280 PRINT "# MO/DA GROSS FED STATE FICA SUI VAC UNION NET HOURS"
2290 PRINT
2300 FOR J = 2 TO 10:T(J) = 0:T$(J) = "": NEXT
2310 PRINT D$;"OPEN PAYCHECK.F,L100"
2320 FOR I = SN TO EN
2330 PRINT D$;"READ PAYCHECK.F,R";I
2340 FOR J = 1 TO 10
2350 INPUT A$(I,J)
2360 T(J) = T(J) + VAL(A$(I,J))
2370 GOSUB 3360
2380 NEXT J
2390 PRINT I;: POKE 36,5: PRINT A$(I,1);: POKE 36,12: PRINT A$(I,2);: POKE 36,21: PRINT A$(I,3);: POKE 36,29: PRINT A$(I,4);: POKE 36,36: PRINT A$(I,5);: POKE 36,43: PRINT A$(I,6);: POKE 36,50: PRINT A$(I,7);: POKE 36,58: PRINT A$(I,8);
2400 POKE 36,65: PRINT A$(I,9);: POKE 36,74: PRINT A$(I,10)
2420 PRINT D$;"CLOSE PAYCHECK.F"
2430 FOR J = 2 TO 10
2440 T$(J) = STR$(T(J) +1.005 - SGN(T(J)) * INT( ABS(T(J))))
2450 T$(J) = STR$( SGN(T(J)) * INT( ABS(T(J)))) + MID$ (T(J),2,3)
2460 T$(J) = RIGHT$(" " +T$(J),8)
2470 NEXT J
2480 REM TOTAL DATA AND PRINT
2490 PRINT : PRINT "TOTAL GROSS INCOME.............$";T$(2)
2500 PRINT : PRINT "TOTAL FEDERAL TAX..............$";T$(3)
2510 PRINT : PRINT "TOTAL STATE TAX................$";T$(4)
2520 PRINT : PRINT "TOTAL FICA.....................$";T$(5)
2530 PRINT : PRINT "TOTAL SUI......................$";T$(6)
2540 PRINT : PRINT "TOTAL VACATION.................$";T$(7)
2550 PRINT : PRINT "TOTAL UNION ASSESSMENT.........$";T$(8)
2560 PRINT : PRINT "TOTAL NET PAY..................$";T$(9)
2570 PRINT : PRINT "TOTAL HOURS PAID................";T$(10)
2580 PRINT : FOR P = 1 TO 80: PRINT "*";: NEXT P
2590 PRINT : PRINT : PRINT
2600 PRINT CHR$(12): REM FORM FEED
2610 PRINT D$;"PR#0"
2620 POKE 33,40
2630 GOTO 190
2640 REM CHANGE / DELETE ROUTINE
2650 CALL -1184
2660 VTAB 8: HTAB 7: PRINT "CHANGE OR DELETE RECORDS"
2670 VTAB 12: HTAB 11: PRINT NR;" RECORDS ON FILE..."
2680 VTAB 20: HTAB 8: PRINT "WHICH RECORD DO YOU WISH"
2690 VTAB 22: HTAB 10: CALL -958: INPUT "TO CHANGE / DELETE ? ";RN$:RN = VAL(RN$): IF RN <1 THEN PRINT CHR$(7): GOTO 2690
2700 IF RN >NR THEN HOME : VTAB 10: PRINT "ONLY ";NR;" RECORDS ON FILE....": PRINT CHR$(7): FOR D = 1 TO 1000: NEXT : GOTO 2640
2710 GOSUB 2960
2720 REM CHANGE OR DELETE ?
2730 VTAB 21: CALL -958: REM CLEAR BOTTOM OF SCREEN
2740 VTAB 22: PRINT "DO YOU WISH TO"
2750 VTAB 24: PRINT "(C) CHANGE OR (D) DELETE THIS RECORD ? ";: GET Z$: PRINT Z$
2760 IF Z$ = "C" GOTO 2790
2770 IF Z$ < >"D" GOTO 2720
2780 GOTO 2830
2790 REM CHANGE ROUTINE
2800 I = RN
2810 GOSUB 620
2820 GOTO 190
2830 REM DELETE ROUTINE
2840 CALL -1184
2850 VTAB 10: HTAB 2: PRINT "RECORD NUMBER ";RN;" WILL NOT BE DELETED": PRINT : PRINT "BUT ALL ENTRIES WILL BE CHANGED TO '00'"
2860 PRINT CHR$(7)
2870 VTAB 20: HTAB 8: PRINT "PRESS ANY KEY TO DELETE...."
2880 VTAB 22: HTAB 8: PRINT "PRESS ";: FLASH : PRINT "<ESC>";: NORMAL : PRINT " TO QUIT....";: GET Z$: PRINT Z$
2890 IF ASC(Z$) = 27 THEN GOTO 190
2900 FOR J = 1 TO 10:A$(I,J) = " 00": GOSUB 3360: NEXT J
2910 PRINT D$;"OPEN PAYCHECK.F,L100"
2920 PRINT D$;"READ PAYCHECK.F,R";RN
2930 FOR J = 1 TO 10: PRINT A$(I,J): NEXT
2940 PRINT D$"CLOSE PAYCHECK.F"
2950 GOTO 190
2960 REM DISPLAY RECORD TO BE CHANGED/DELETED
2970 CALL -1184
2980 PRINT
2990 VTAB 6
3000 PRINT "MO/DA GROSS FED ST FICA SUI "
3010 PRINT
3020 PRINT " VAC UA NET HOURS"
3030 PRINT
3040 POKE 34,4
3050 PRINT D$;"OPEN PAYCHECK.F,L100"
3060 PRINT D$;"READ PAYCHECK.F,R0"
3070 PRINT D$;"READ PAYCHECK.F,R";RN
3080 FOR J = 1 TO 10
3090 INPUT A$(I,J)
3100 GOSUB 3360
3110 NEXT J
3120 PRINT D$;"CLOSE PAYCHECK.F"
3130 PRINT "# ";RN
3140 PRINT
3150 PRINT A$(I,1); TAB( 7)A$(I,2); TAB( 15)A$(I,3); TAB( 22)A$(I,4); TAB( 29)A$(I,5); TAB( 36)A$(I,6)
3160 PRINT TAB( 12)A$(I,7); TAB( 20)A$(I,8); TAB( 26)A$(I,9); TAB( 35)A$(I,10)
3170 PRINT : PRINT : PRINT
3180 PRINT "PRESS <ESC> TO QUIT...."
3190 PRINT
3200 PRINT "IS THIS THE CORRECT RECORD (Y/N) ";: GET Z$: PRINT Z$
3210 POKE 34,0
3220 IF ASC(Z$) = 27 THEN GOTO 190
3230 IF Z$ = "N" GOTO 2640
3240 RETURN
3250 REM EXIT ROUTINE
3260 CALL -1184
3270 VTAB 10: PRINT "HAVE A NICE DAY....": END
3280 REM INIT DATA FILE PAYCHECK.F
3290 ER = PEEK(222): IF ER = 5 THEN PRINT D$"CLOSE": PRINT D$"OPEN PAYCHECK.F,L100": PRINT D$"WRITE PAYCHECK.F,R0": PRINT 0: PRINT D$"CLOSE":NR = 0: GOTO 190
3300 IF ER = 8 THEN PRINT "DISK I/O ERROR": GOTO 3350
3310 IF ER = 4 THEN PRINT "DISK WRITE PROTECTED": GOTO 3350
3320 IF ER = 9 THEN PRINT "DISK FULL": GOTO 3350
3330 IF ER = 6 THEN PRINT "FILE NOT FOUND": GOTO 3350
3340 PRINT "ERROR #"ER" IN LINE " PEEK(218) + PEEK(219) *256
3350 PRINT "PRESS ANY KEY TO RETURN TO MENU": GET K$: PRINT : GOTO 190
3360 REM FORMAT ROUTINE
3370 IF J = 1 OR J = 6 OR J = 8 THEN F = 5
3380 IF J = 3 OR J = 4 OR J = 5 OR J = 7 OR J = 10 THEN F = 6
3390 IF J = 2 OR J = 9 THEN F = 7
3400 A$ = A$(I,J)
3410 B$ = " "
3420 A$ = B$ +A$
3430 A$(I,J) = RIGHT$(A$,F)
3440 RETURN