10 REM ************************ 15 REM 20 REM ADDRESS BOOK 30 REM 40 REM - BY MICHAEL O'MALLEY 50 REM A GRADE 12 "FUN" PROJECT 60 REM ************************ 100 REM 110 D$ = CHR$ (4) : REM CTRL-D 115 W = 300 : REM 300 NAMES / ADDRESSES ! 120 DIM A$(300,4) : REM 300 NAMES / ADDRESSES ! 125 L = 0 : REM NUMBER OF NAMES / ADDRESSES CURRENTLY IN THE ARRAY 130 SL = 0 : REM THE PRINTER IS CURRENTLY OFF 135 P$ = "OFF" 190 GOSUB 8000 : REM LOAD NAME / ADDRESS DATA 200 REM 201 REM ************************ 202 REM MAIN MENU 203 REM ************************ 205 TEXT : HOME 210 PRINT "=======================================" 215 PRINT " ADDRESS BOOK" 220 PRINT " BY MICHAEL O'MALLEY" 225 PRINT "=======================================" 230 PRINT " "; L; " NAMES/ADDRESSES (MAX = "; W; ")" 235 PRINT " PRINTER IS "; : INVERSE : PRINT P$ : NORMAL 240 PRINT : PRINT " WHAT DO YOU REQUIRE ?? -> " 245 PRINT : PRINT " 1. ENTER A NEW NAME/ADDRESS" 250 PRINT : PRINT " 2. LOOK UP SOMEBODY" 255 PRINT : PRINT " 3. LOOK AT ENTIRE LIST OF NAMES" 260 PRINT : PRINT " 4. TURN PRINTER ON / OFF" 265 PRINT : PRINT " 5. DELETE A NAME / ADDRESS" 270 PRINT : PRINT " 6. DELETE ALL NAMES / ADDRESSES" 275 PRINT : PRINT " 7. EXIT PROGRAM" 280 PRINT : PRINT " WHICH ?? -> "; : GET B 285 IF B < 1 OR B > 7 THEN GOTO 200 : REM DISPLAY THE MENU AGAIN 290 ON B GOSUB 300,400,500,600,700,900,9000 295 GOTO 200 : REM DISPLAY THE MENU AGAIN 300 REM 301 REM *********************** 302 REM ENTER NEW NAME /ADDRESS 303 REM *********************** 310 TEXT : HOME 315 PRINT : PRINT : PRINT 320 L = L + 1 325 PRINT " (USE NO COMMAS,COLONS OR FULL STOPS)" 330 PRINT : PRINT : PRINT "ENTRY No. = "; L; " / "; W 335 PRINT : PRINT 340 REM NAME CANNOT BE BLANK - BUT OTHER FIELDS CAN BE BLANK 345 PRINT : INPUT " ENTER NAME -> "; A$(L,1) 350 IF A$(L,1) = "" THEN PRINT : PRINT " **ERROR : NAME CANNOT BE BLANK !" : GOTO 340 355 PRINT : INPUT " ENTER ADDRESS -> "; A$(L,2) 360 PRINT : INPUT " ENTER PHONE NO. -> "; A$(L,3) 365 PRINT : INPUT " ENTER BIRTHDAY -> "; A$(L,4) 370 PRINT : PRINT : PRINT 375 PRINT : PRINT "ADD MORE NAMES / ADDRESSES (Y/N)"; : GET F$ 380 IF F$ = "Y" THEN 300 399 RETURN 400 REM 401 REM *********************** 402 REM LOOK UP SOMEBODY 403 REM *********************** 404 PR# SL : REM PRINTER ON/OFF 405 TEXT : HOME : PRINT : PRINT 410 PRINT "WHAT NAME SHALL I LOOK UP FOR YOU..." : INPUT V$ 415 PRINT : PRINT 420 M = 0 : REM NUMBER OF MATCHES 422 PRINT "=======================================" 425 REM SEARCH ENTIRE ARRAY FOR A MATCHING NAME 430 FOR I = 1 TO L 440 IF A$(I,1) = V$ THEN M = M + 1 : GOSUB 7000 : REM DISPLAY CURRENT NAME / ADDRESS 450 NEXT I 460 IF M = 0 THEN PRINT " NO MATCHES FOUND ... SORRY !" 485 PR# 0 : REM PRINTER OFF 490 PRINT : PRINT 495 PRINT : PRINT " HIT ANY KEY..."; : GET Z$ 499 RETURN 500 REM 501 REM *********************** 502 REM LOOK AT ENTIRE LIST 503 REM *********************** 505 TEXT : HOME 510 PR# SL : REM PRINTER ON/OFF 515 PRINT : PRINT 520 REM DISPLAY ENTIRE ARRAY 522 PRINT "=======================================" 525 LC = 0 : REM LINE COUNT 530 FOR I = 1 TO L 540 GOSUB 7000 : REM DISPLAY CURRENT NAME / ADDRESS 550 LC = LC + 1 560 IF LC = 3 THEN LC = 0 : PRINT : PRINT " HIT ANY KEY..."; : GET Z$ : TEXT : HOME : PRINT : PRINT "=======================================" 570 NEXT I 585 PR# 0 : REM PRINTER OFF 590 PRINT : PRINT 595 PRINT : PRINT " HIT ANY KEY..."; : GET Z$ 599 RETURN 600 REM 601 REM ************************* 602 REM TURN PRINTER ON / OFF 603 REM ************************* 610 REM THE VALUE OF SL IS USED TO CONTROL THE PRINTER VIA 620 IF P$ = "OFF" THEN P$ = "ON" : SL = 1 630 IF P$ = "ON" THEN P$ = "OFF" : SL = 0 699 RETURN 700 REM 701 REM *********************** 702 REM DELETE A NAME / ADDRESS 703 REM *********************** 705 TEXT : HOME : PRINT : PRINT 710 PRINT " DELETE DATA FOR WHAT NAME " : INPUT V$ 712 IF V$ = "" THEN GOTO 799 : REM EXIT BACK TO MENU 715 PRINT : PRINT 720 PRINT " ARE YOU SURE (Y/N) "; : GET L$ 725 IF L$ < > "Y" THEN GOTO 799 : REM EXIT BACK TO MENU 730 M = 0 : REM NUMBER OF MATCHES 735 REM SEARCH ENTIRE ARRAY FOR A MATCHING NAME 740 FOR I = 1 TO L 745 IF A$(I,1) = V$ THEN M = M + 1 : GOSUB 800 : REM SHUFFLE DOWN DATA 750 NEXT I 753 PRINT : PRINT 755 IF M = 0 THEN PRINT " NO MATCHES FOUND ... SORRY !" 760 IF M > 0 THEN PRINT " "; M; " MATCHING RECORDS DELETED !" 790 PRINT : PRINT 795 PRINT : PRINT " HIT ANY KEY..."; : GET Z$ 799 RETURN 800 REM 801 REM ********************** 802 REM SHUFFLE DOWN DATA IN 803 REM ARRAY TO REMOVE THE 804 REM MATCHING RECORD 805 REM ********************** 810 L = L - 1 : REM REDUCE THE NUMBER OF PEOPLE IN THE ARRAY 815 FOR R = I TO L 820 A$(I,1) = A$(I + 1,1) 825 A$(I,2) = A$(I + 1,2) 830 A$(I,3) = A$(I + 1,3) 835 A$(I,4) = A$(I + 1,4) 840 NEXT R 899 RETURN 900 REM 901 REM ************************* 902 REM DELETE ALL NAMES / ADDRESSES 903 REM ************************* 904 TEXT : HOME : PRINT : PRINT : PRINT 905 PRINT " WARNING !! THIS WILL DESTROY ALL" 910 PRINT : PRINT " "; L; " NAMES AND ADDRESSES STORED IN THE FILE." 915 PRINT : PRINT 920 PRINT " ARE YOU SURE (Y/N) "; : GET L$ 925 IF L$ < > "Y" THEN GOTO 999 : REM EXIT BACK TO MENU 930 PRINT : PRINT : PRINT 932 ONERR GOTO 999 : REM EXIT BACK TO MENU 935 PRINT " DELETING ADDRESS.DATA ... " 940 PRINT D$; "DELETE ADDRESS.DATA" 942 REM NOW WRITE A ZERO TO THE FILE 944 REM ERASE DATA FILE 945 PRINT D$; "OPEN ADDRESS.DATA" 950 PRINT D$; "WRITE ADDRESS.DATA" 955 PRINT 0 960 PRINT D$; "CLOSE ADDRESS.DATA" 970 REM ERASE ALL DATA IN THE ARRAY 975 FOR I = 1 TO L 980 FOR J = 1 TO 4 985 A$(I,J) = "" 990 NEXT J 995 NEXT I 1000 PRINT : PRINT 1010 PRINT " "; L; " NAMES AND ADDRESSES ERASED !" 1020 REM SET THE NUMBER OF RECORDS IN THE ARRAY TO 0 1030 L = 0 1099 RETURN 7000 REM 7001 REM ************************* 7002 REM DISPLAY CURRENT NAME 7003 REM AND ADDRESS DETAILS 7004 REM ************************* 7020 PRINT " RECORD : "; I 7030 PRINT " NAME : "; A$(I,1) 7040 PRINT " ADDRESS : "; A$(I,2) 7050 PRINT " PHONE NO : "; A$(I,3) 7060 PRINT " BIRTHDAY : "; A$(I,4) 7070 PRINT "=======================================" 7099 RETURN 8000 REM 8001 REM ************************* 8002 REM LOAD NAME / ADDRESS DATA 8003 REM ************************* 8005 PRINT : PRINT 8010 PRINT " READING NAME AND ADDRESS DATA ..." 8012 ONERR GOTO 8065 : REM CLOSE FILE 8015 PRINT D$; "OPEN ADDRESS.DATA" 8020 PRINT D$; "READ ADDRESS.DATA" 8024 REM READ THE NUMBER OF PEOPLE IN THE ARRAY 8025 INPUT L 8026 PRINT L 8027 IF L = 0 THEN GOTO 8060 8030 REM NOW READ THE ARRAY DATA 8035 FOR K = 1 TO L 8040 FOR J = 1 TO 4 8045 INPUT A$(K,J) 8050 NEXT J 8055 NEXT K 8060 PRINT D$; "CLOSE ADDRESS.DATA" 8065 PRINT : PRINT " "; L; " NAMES / ADDRESS LOADED." 8099 RETURN 9000 REM 9001 REM ************************* 9002 REM SAVE NAME / ADDRESS DATA 9003 REM AND EXIT PROGRAM 9004 REM ************************* 9005 PRINT : PRINT 9010 PRINT " SAVING NAME AND ADDRESS DATA ..." 9012 ONERR GOTO 9060 : REM CLOSE FILE 9015 PRINT D$; "OPEN ADDRESS.DATA" 9020 PRINT D$; "WRITE ADDRESS.DATA" 9022 REM SAVE THE NUMBER OF PEOPLE IN THE ARRAY 9025 PRINT L 9030 REM NOW SAVE THE ARRAY DATA 9035 FOR K = 1 TO L 9040 FOR J = 1 TO 4 9045 PRINT A$(K,J) 9050 NEXT J 9055 NEXT K 9060 PRINT D$; "CLOSE ADDRESS.DATA" 9065 PRINT : PRINT " "; L; " NAMES / ADDRESS WRITTEN." 9070 PRINT : PRINT : PRINT " GOODBYE !! " 9999 END