PROGRAM 22
' FILENAME: PROG22.BAS ' THIS PROGRAM IS MENU DRIVEN AND ALLOWS THE USER TO CHOOSE FROM 6 ' OPTIONS: PRINT THE BOOK FILE, DISPLAY BOOK FILE ON THE SCREEN, ' ADD A NEW BOOK TO THE FILE, CREATE NEW BOOK FILE, SEARCH THE BOOK FILE ' ACCORDING TO GRADE LEVEL, OR QUIT. CLS DO GOSUB PRINT.MENU LOCATE 10, 1 INPUT "ENTER ONE OF THE ABOVE CHOICES FROM THE MENU. ", OPTIONS$ SELECT CASE OPTIONS$ CASE "1" CLS GOSUB GOTO1 CASE "2" CLS GOSUB GOTO2 CASE "3" CLS GOSUB GOTO3 CASE "4" CLS GOSUB GOTO4 CASE "5" CLS GOSUB GOTO5 CASE "6" CLS END CASE ELSE GOSUB PRINT.ERRORMESSAGE END SELECT CLS LOOP PRINT.MENU: PRINT "MENU" PRINT PRINT "1. DISPLAY BOOK FILE ON PRINTER." PRINT "2. DISPLAY BOOK FILE ON SCREEN BY A SELECTED FIELD." PRINT "3. ADD A RECORD TO THE FILE." PRINT "4. CREATE A FILE. CAUTION, THIS WILL ERASE THE EXISTING FILE." PRINT "5. SEARCH FOR BOOKS BY IT'S GRADE LEVEL." PRINT "6. QUIT." RETURN GOTO1: SHELL "BOOK2" RETURN GOTO2: SHELL "BOOK4" RETURN GOTO3: OPEN "BOOKS.DAT" FOR APPEND AS #1 INPUT "ENTER BOOK'S TITLE. TYPE 'END' TO QUIT. ", BOOK$ DO UNTIL UCASE$(BOOK$) = "END" INPUT "ENTER BOOK'S AUTHOR. ", AUTHOR$ INPUT "ENTER BOOK'S GRADE LEVEL. ", GRADE$ INPUT "ENTER BOOK'S ROOM LOCATION. ", ROOM$ WRITE #1, BOOK$, AUTHOR$, GRADE$, ROOM$ CLS INPUT "ENTER BOOK'S TITLE. TYPE 'END' TO QUIT. ", BOOK$ LOOP CLOSE #1 RETURN GOTO4: SHELL "BOOK1" RETURN GOTO5: SHELL "BOOK3" RETURN PRINT.ERRORMESSAGE: LOCATE 10, 1 PRINT "ERROR, TYPE OPTIONS 1, 2, 3, 4, 5, OR 6. " SLEEP 3 RETURN ' FILENAME: BOOK1.BAS ' THIS PROGRAM IS USED BY PROG22 AND CREATES A NEW BOOK FILE. CLS GOSUB CREATEFILE GOSUB LOADFILE GOSUB CLOSEFILE END CREATEFILE: OPEN "BOOKS.DAT" FOR OUTPUT AS #1 RETURN LOADFILE: INPUT "ENTER THE BOOK'S TITLE. TYPE 'END' TO QUIT. ", BOOK$ DO UNTIL UCASE$(BOOK$) = "END" INPUT "ENTER THE BOOK'S AUTHOR. ", AUTHOR$ INPUT "ENTER THE BOOK'S GRADE LEVEL. ", GRADE$ INPUT "ENTER THE BOOK'S ROOM LOCATION. ", LOCATION$ CLS WRITE #1, BOOK$, AUTHOR$, GRADE$, LOCATION$ INPUT "ENTER THE BOOK'S TITLE. TYPE 'END' TO QUIT. ", BOOK$ LOOP RETURN CLOSEFILE: CLOSE #1 RETURN ' FILENAME: BOOK2.BAS ' THIS PROGRAM IS USED BY PROG22 AND PRINTS THE ENTIRE BOOK FILE. CLS GOSUB OPENFILE GOSUB PRINTLABELS GOSUB CLOSEFILE END OPENFILE: OPEN "BOOKS.DAT" FOR INPUT AS #1 RETURN PRINTLABELS: LPRINT "TITLE", " AUTHOR"; " GRADE"; " ROOM" LPRINT , , " LEVEL"; " LOCATION" LPRINT DO UNTIL EOF(1) INPUT #1, BOOK$, AUTHOR$, GRADE$, ROOM$ LPRINT USING "\ \ \ \ \ \ \ \"; BOOK$; AUTHOR$; GRADE$; ROOM$ LET COUNT = COUNT + 1 LOOP LPRINT LPRINT "THERE ARE"; COUNT; "BOOKS IN THIS FILE." RETURN CLOSEFILE: CLOSE #1 RETURN ' FILENAME: BOOK3.BAS ' THIS PROGRAM IS USED BY PROG22 AND SEARCHES BOOK FILE ACCORDING TO ' GRADE LEVEL. CLS DO COUNT = 0 GOSUB OPENFILE GOSUB SEARCHFILE GOSUB CLOSEFILE PRINT INPUT "WOULD YOU LIKE TO DO ANOTHER SEARCH? TYPE 'YES' TO CONTINUE. ", ANS$ CLS LOOP WHILE UCASE$(ANS$) = "YES" END OPENFILE: OPEN "BOOKS.DAT" FOR INPUT AS #1 RETURN SEARCHFILE: INPUT "ENTER A GRADE LEVEL TO FIND ALL BOOKS THAT MATCH THIS READING LEVEL. ", GRADE2$ CLS DO UNTIL EOF(1) INPUT #1, BOOK$, AUTHOR$, GRADE$, ROOM$ IF GRADE2$ = GRADE$ AND COUNT = 0 THEN PRINT "TITLE", " AUTHOR"; " GRADE"; " ROOM" PRINT , , " LEVEL"; " LOCATION" PRINT END IF IF GRADE2$ = GRADE$ THEN PRINT USING "\ \ \ \ \ \ \ \"; BOOK$; AUTHOR$; GRADE$; ROOM$ COUNT = COUNT + 1 END IF LOOP IF COUNT = 0 THEN PRINT "NO BOOKS WERE FOUND IN YOUR SEARCH." END IF RETURN CLOSEFILE: CLOSE #1 RETURN ' FILENAME: BOOK4.BAS ' THIS PROGRAM IS USED BY PROG22 AND DISPLAYS THE BOOK FILE ON THE SCREEN. CLS DIM BOOK$(1 TO 100) DIM AUTHOR$(1 TO 100) DIM GRADE$(1 TO 100) DIM ROOM$(1 TO 100) DO COUNT = 1 COUNT2 = 0 GOSUB OPENFILE GOSUB PRINTLABELS GOSUB PRINT.MENU LOCATE 9, 1 INPUT "ENTER ONE OF THE ABOVE CHOICES. ", CHOICES$ SELECT CASE CHOICES$ CASE "1" CLS GOSUB GOTO1 CASE "2" CLS GOSUB GOTO2 CASE "3" CLS GOSUB GOTO3 CASE "4" CLS GOSUB GOTO4 CASE "5" CLS END CASE ELSE GOSUB PRINT.ERRORMESSAGE END SELECT GOSUB CLOSEFILE PRINT PRINT "PLEASE, WAIT A FEW SECONDS." SLEEP 5 CLS LOOP END OPENFILE: OPEN "BOOKS.DAT" FOR INPUT AS #1 RETURN PRINTLABELS: LET COUNT = 1 DO UNTIL EOF(1) LET BOOK$ = BOOK$(COUNT) LET AUTHOR$ = AUTHOR$(COUNT) LET GRADE$ = GRADE$(COUNT) LET ROOM$ = ROOM$(COUNT) INPUT #1, BOOK$(COUNT), AUTHOR$(COUNT), GRADE$(COUNT), ROOM$(COUNT) LET COUNT = COUNT + 1 LET COUNT2 = COUNT2 + 1 LOOP RETURN PRINT.MENU: PRINT "MENU" PRINT PRINT "1. DISPLAY BOOK LIST BY TITLE." PRINT "2. DISPLAY BOOK LIST BY AUTHOR." PRINT "3. DISPLAY BOOK LIST BY LOCATION." PRINT "4. DISPLAY BOOK LIST BY GRADE LEVEL." PRINT "5. QUIT" RETURN GOTO1: DO SORTED$ = "Y" FOR COUNT = 1 TO COUNT2 - 1 IF BOOK$(COUNT + 1) < BOOK$(COUNT) THEN SWAP BOOK$(COUNT + 1), BOOK$(COUNT) SWAP AUTHOR$(COUNT + 1), AUTHOR$(COUNT) SWAP GRADE$(COUNT + 1), GRADE$(COUNT) SWAP ROOM$(COUNT + 1), ROOM$(COUNT) SORTED$ = "N" END IF NEXT LOOP WHILE SORTED$ = "N" PRINT "TITLE", " AUTHOR"; " GRADE"; " ROOM" PRINT FOR COUNT = 1 TO COUNT2 PRINT USING "\ \ \ \ \ \ \ \"; BOOK$(COUNT); AUTHOR$(COUNT); GRADE$(COUNT); ROOM$(COUNT) NEXT RETURN GOTO2: DO SORTED$ = "Y" FOR COUNT = 1 TO COUNT2 - 1 IF AUTHOR$(COUNT + 1) < AUTHOR$(COUNT) THEN SWAP AUTHOR$(COUNT + 1), AUTHOR$(COUNT) SWAP BOOK$(COUNT + 1), BOOK$(COUNT) SWAP GRADE$(COUNT + 1), GRADE$(COUNT) SWAP ROOM$(COUNT + 1), ROOM$(COUNT) SORTED$ = "N" END IF NEXT LOOP WHILE SORTED$ = "N" PRINT "AUTHOR", " TITLE"; " GRADE"; " ROOM" PRINT FOR COUNT = 1 TO COUNT2 PRINT USING "\ \ \ \ \ \ \ \"; AUTHOR$(COUNT); BOOK$(COUNT); GRADE$(COUNT); ROOM$(COUNT) NEXT RETURN GOTO3: DO SORTED$ = "Y" FOR COUNT = 1 TO COUNT2 - 1 IF ROOM$(COUNT + 1) < ROOM$(COUNT) THEN SWAP ROOM$(COUNT + 1), ROOM$(COUNT) SWAP BOOK$(COUNT + 1), BOOK$(COUNT) SWAP AUTHOR$(COUNT + 1), AUTHOR$(COUNT) SWAP GRADE$(COUNT + 1), GRADE$(COUNT) SORTED$ = "N" END IF NEXT LOOP WHILE SORTED$ = "N" PRINT "ROOM"; " TITLE"; " AUTHOR"; " GRADE" PRINT FOR COUNT = 1 TO COUNT2 PRINT USING "\ \ \ \ \ \ \ \"; ROOM$(COUNT); BOOK$(COUNT); AUTHOR$(COUNT); GRADE$(COUNT) NEXT RETURN GOTO4: DO SORTED$ = "Y" FOR COUNT = 1 TO COUNT2 - 1 IF GRADE$(COUNT + 1) < GRADE$(COUNT) THEN SWAP GRADE$(COUNT + 1), GRADE$(COUNT) SWAP BOOK$(COUNT + 1), BOOK$(COUNT) SWAP AUTHOR$(COUNT + 1), AUTHOR$(COUNT) SWAP ROOM$(COUNT + 1), ROOM$(COUNT) SORTED$ = "N" END IF NEXT LOOP WHILE SORTED$ = "N" PRINT "GRADE"; " TITLE"; " AUTHOR"; " ROOM" PRINT FOR COUNT = 1 TO COUNT2 PRINT USING "\ \ \ \ \ \ \ \"; GRADE$(COUNT); BOOK$(COUNT); AUTHOR$(COUNT); ROOM$(COUNT) NEXT RETURN PRINT.ERRORMESSAGE: LOCATE 9, 1 PRINT "ERROR, TYPE OPTIONS 1 TO 5. " RETURN CLOSEFILE: CLOSE #1 RETURN ' DATA FILE: BOOKS.DAT "COMPUTER NETWORKS","ANDREW TANNEBAUM","16","1" ' OUTFILE: PROG22.OUT MENU 1. DISPLAY BOOK FILE ON PRINTER. 2. DISPLAY BOOK FILE ON SCREEN BY A SELECTED FIELD. 3. ADD A RECORD TO THE FILE. 4. CREATE A FILE. CAUTION, THIS WILL ERASE THE EXISTING FILE. 5. SEARCH FOR BOOKS BY IT'S GRADE LEVEL. 6. QUIT. ENTER ONE OF THE ABOVE CHOICES FROM THE MENU. 6
BACK TO CIS133 PAGE.