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
/
SIMTEL
/
CPMUG
/
CPMUG028.ARK
/
DBENTRY.BAS
< prev
next >
Wrap
BASIC Source File
|
1984-04-29
|
5KB
|
148 lines
PRINT "DATA ENTRY PROGRAM OF 3-22-78"
FIELDS = 20
ZERO = 0: ONE = 1: TWO = 2
SEQUENTIAL = ZERO
RANDOM = 1
INDEXED = 3
LINKED = 7
ALPHA = ONE: NUMERIC = ZERO
DIM FIELD$(FIELDS),TYPE(FIELDS),WIDE(FIELDS),DATA$(FIELDS)
DIM FEED(FIELDS),MIN(FIELDS),MAX(FIELDS)
INPUT "DO YOU WANT INSTRUCTIONS";ANS$
IF ANS$="NO" THEN 2100
PRINT "THE PURPOSE OF THIS PROGRAM IS TO ALLOW THE OPERATOR"
PRINT "TO MAKE ENTRIES INTO A FILE PREVIOUSLY SET UP BY THE"
PRINT "SET-UP PROGRAM. EXAMPLES OF SUCH FILES WOULD BE"
PRINT "A LIST OF ALL THE INTEGRATED CIRCUITS ON HAND, OR"
PRINT "A LIST OF ALL THE SALES MADE ON A PARTICULAR DATE, OR"
PRINT "A LIST OF ALL THE ITEMS SHIPPED IN ONE WEEK."
PRINT "THE FILE IS MADE UP OF RECORDS, AND EACH RECORD"
PRINT "IS MADE UP OF FIELDS. THE RECORD MIGHT BE ONE"
PRINT "INVENTORY ITEM, OR ONE TRANSACTION. THE FIELD "
PRINT "MIGHT BE A QUANTITY, A PRICE, OR A PART NUMBER."
PRINT "THERE ARE PRESENTLY THREE TYPES OF FILES ALLOWED:"
PRINT " TYPE 0 SEQUENTIAL"
PRINT " TYPE 1 RANDOM"
PRINT " TYPE 3 INDEXED-RANDOM"
PRINT " TYPE 7 LINKED-INDEXED-RANDOM"
PRINT "A SEQUENTIAL FILE IS NORMALLY USED FOR ITEMS THAT"
PRINT "NEED NO CHANGES, SUCH AS A RECEIVING OR SHIPPING LOG."
PRINT "A RANDOM FILE IS NOT AS COMPACT AS A SEQUENTIAL FILE,"
PRINT "BUT IT HAS THE ADVANTAGE OF BEING EASY TO MAKE CHANGES."
PRINT "AN INDEXED FILE ALLOWS QUICK ACCESS TO ANY ENTRY BY"
PRINT "SPECIFYING A KEY FIELD, SUCH AS A PART NUMBER IN"
PRINT "AN INVENTORY OR A COMPANY NAME IN AN ORDER FILE."
PRINT "A LINKED FILE MAKES IT POSSIBLE TO DELETE AND INSERT"
PRINT "RECORDS, WITHOUT REWRITING THE WHOLE FILE."
PRINT
PRINT "AFTER EACH ENTRY:"
PRINT "ENTER AN AMPERSANS (&) FOR ANOTHER ENTRY."
PRINT "ENTER A NUMBER SIGN (#) TO CANCEL LAST ENTRY."
PRINT "ENTER A PERIOD (.) AFTER THE LAST ITEM."
PRINT
PRINT "ENTER AN EQUAL SIGN (=) INSTEAD OF A"
PRINT "DATA ENTRY IF YOU WANT THE SAME DATA"
PRINT "AS IN THE LAST RECORD."
PRINT
2100 REM FILE SELECTION
INPUT "WHAT IS THE NAME OF THE FILE";FILENAME$
2900 REM READ A PREVIOUSLY STORED FILE TO THE END.
FILE FILENAME$
RECNO = ONE REM INIT. RECORD NUMBER.
REM READ HEADER (FIRST) RECORD.
READ #ONE;RECLEN,NO.OF.FIELDS,NHEAD,NIND,FILETYPE,CODE,SPARE
REM RECLEN IS RECORD LENGTH.
REM NHEAD IS NUMBER OF HEADERS.
REM NIND IS NUMBER OF INDEXES.
REM FILETYPE IS EXPLAINED ABOVE.
RECNO = RECNO + ONE REM BUMP RECORD NUMBER.
IF FILETYPE <> SEQUENTIAL THEN \
CLOSE ONE :\ REM THEN CLOSE IT,
FILE FILENAME$(RECLEN) REM AND REOPEN CORRECTLY.
N = NO.OF.FIELDS
IF NHEAD = ZERO THEN 2910 REM NO HEADINGS?
REM READ HEADINGS.
FOR I = ONE TO NHEAD
IF FILETYPE = SEQUENTIAL THEN \
READ #ONE;HEADINGS$ \ REM READ THIS WAY.
ELSE \ REM OTHERWISE,
READ #ONE,RECNO;HEADINGS$
RECNO = RECNO + ONE
NEXT I
2910 FOR I = ONE TO NO.OF.FIELDS REM READ FIELDS INTO AN ARRAY.
IF FILETYPE = SEQUENTIAL THEN \
READ #ONE;FIELD$(I),TYPE(I),WIDE(I),FEED(I),MIN(I),MAX(I),SPARE \
ELSE \
READ #ONE,RECNO;FIELD$(I),TYPE(I),WIDE(I),FEED(I),MIN(I),MAX(I), \
SPARE
RECNO = RECNO + ONE
NEXT I
2920 IF END #ONE THEN 2600 REM READ REST OF FILE.
IF FILETYPE = SEQUENTIAL THEN \
READ #ONE;DUMMY$ \
ELSE \
READ #ONE,RECNO;DUMMY$
RECNO = RECNO + ONE
GOTO 2920
2600 REM IF THERE'S AN INDEX, READ IT TO THE END.
IF NIND = 0 THEN 2200 REM IF NO INDEXES, SKIP IT.
INDEX.FILE$ = FILENAME$ + ".IND"
FILE INDEX.FILE$ REM OPEN SEQUENTIAL INDEX FILE.
READ #TWO;INDEX.FIELD$ REM READ INDEX FILE HEADER.
2650 IF END #TWO THEN 2200 REM READ REST TILL END.
READ #TWO;DUMMY$
GOTO 2650
2200 REM DATA ENTRY
PRINT
PRINT "START ENTERING DATA NOW."
PRINT
2210 PRINT REM PUT A LINE BETWEEN EACH RECORD ENTRY.
RECORD$ = ""
FOR I = ONE TO N
PRINT FIELD$(I);
2215 INPUT ANS$
IF ANS$ = "=" THEN ANS$ = DATA$(I)
DATA$(I) = ANS$
IF WIDE(I) = ZERO THEN 2217 REM FREE FIELD?
X = LEN(ANS$) - WIDE(I)
IF X > ZERO THEN \
PRINT "ENTRY ";X;" CHARACTERS TOO WIDE." :\
GOTO 2215
2217 IF TYPE(I) = ALPHA THEN 2217.5
DIF = MIN(I) - VAL(ANS$)
IF DIF > ZERO THEN \
PRINT "ENTRY IS ";DIF;" TOO SMALL." :\
GOTO 2215
DIF = VAL(ANS$) - MAX(I)
IF DIF > ZERO THEN \
PRINT "ENTRY IS ";DIF;" TOO LARGE." :\
GOTO 2215
2217.5 RECORD$ = RECORD$ + ANS$ + "!"
IF NIND<>0 AND INDEX.FIELD$=FIELD$(I) THEN \
INDEX.ENTRY$ = ANS$
NEXT I
2218 INPUT "& OR # OR .";ANS$
IF ANS$ = "#" THEN 2210
IF ANS$ = "&" THEN 2219
IF ANS$ <> "." THEN 2218
2219 IF NIND<>0 THEN \ REM IF THERE'S AN INDEX,
PRINT #TWO;INDEX.ENTRY$,RECNO REM WRITE OUT TO IT.
IF FILETYPE = SEQUENTIAL THEN \
PRINT #ONE;RECORD$
IF FILETYPE = INDEXED THEN \
PRINT #ONE,RECNO;RECORD$
IF FILETYPE = LINKED THEN \
PRINT #ONE,RECNO;RECORD$,RECNO+1
IF ANS$ = "." THEN 2220 REM CHECK FOR LAST ENTRY.
RECNO = RECNO + ONE REM INCREMENT RECORD NUMBER.
GOTO 2210
2220 PRINT
RECNO = RECNO - NO.OF.FIELDS - NHEAD - ONE
PRINT "THERE ARE NOW ";RECNO;"RECORDS IN ";FILENAME$;"."
CLOSE ONE
IF NIND <> 0 THEN CLOSE TWO REM CLOSE INDEX FILE.
INPUT "DO YOU WANT TO ENTER DATA INTO ANOTHER FILE NOW";ANS$
IF ANS$ = "YES" THEN 2100
STOP
END