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.