課本p481-484
p502-511
PROGRAM FIG9_16
INTEGER SENVAL,MAXSTK
PARAMETER (SENVAL=0,MAXSTK=1000)
INTEGER STOCK,QUANT,TOTAL
REAL PRICE
CHARACTER*20 AUTHOR,TITLE
CHARACTER*8 DATE
OPEN(UNIT=2,FILE='DIRINV',FORM='FORMATTED',
+ ACCESS='DIRECT',RECL=54,STATUS='NEW')
PRINT *,'ENTER THE DATA IN THE FORM ''MM/DD/YY'':'
READ *,DATE
PRINT *,'ENTER EACH BOOK RECORD AS OF',DATE
PRINT *,'STOCK NUMBER MUST BE BETWEEN 1 AND ',MAXSTK
TOTAL=0
CALL INTLIZ(2)
CALL GETREC(STOCK,AUTHOR,TITLE,PRICE,QUANT)
DO WHILE((STOCK.GT.SENVAL).AND.(STOCK.LE.MAXSTK))
WRITE(UNIT=2,FMT=21, REC=STOCK)
+ STOCK,AUTHOR,TITLE,PRICE,QUANT
21 FORMAT (I4,A20,A20,F6.2,I4)
TOTAL=TOTAL+QUANT
CALL GETREC(STOCK,AUTHOR,TITLE,PRICE,QUANT)
ENDDO
PRINT *,TOTAL
STOP
END
SUBROUTINE INTLIZ(UNUM)
INTEGER UNUM
INTEGER MAXSTK
PARAMETER (MAXSTK=1000)
INTEGER RECNUM
DO 10 RECNUM=1,MAXSTK
WRITE(UNIT=UNUM,FMT=11,REC=RECNUM)
11 FORMAT(A54)
10 CONTINUE
RETURN
END
SUBROUTINE GETREC(STOCK,AUTHOR,TITLE,PRICE,QUANT)
INTEGER STOCK,QUANT,TOTAL
REAL PRICE
CHARACTER*20 AUTHOR,TITLE
PRINT*,'INPUT STOCK'
READ*,STOCK
PRINT*,'INPUT AUTHOR'
READ '(A)',AUTHOR
PRINT*,'INPUT TITLE'
READ '(A)',TITLE
PRINT*,'INPUT PRICE'
READ*,PRICE
PRINT*,'INPUT QUANT'
READ*,QUANT
RETURN
END
PROGRAM FIG9_17
INTEGER SENVAL,MAXSTK
PARAMETER (SENVAL=0,MAXSTK=1000)
INTEGER STOCK,QUANT,TOTAL,ORDER,RECNUM
REAL PRICE
CHARACTER*20 AUTHOR,TITLE
OPEN(UNIT=2,FILE='DIRINV',FORM='FORMATTED',
+ ACCESS='DIRECT',RECL=54,STATUS='OLD')
PRINT *,'ENTER RECORD NUMBER OF BOOK SOLD (OR 0 TO STOP):'
READ*,RECNUM
DO WHILE((RECNUM.GT.SENVAL).AND.(RECNUM.LE.MAXSTK))
PRINT *,'ENTER QUANTITY SOLD:'
READ *,ORDER
READ(UNIT=2,FMT=21,REC=RECNUM)
+ STOCK,AUTHOR,TITLE,PRICE,QUANT
IF((STOCK.EQ.RECNUM).AND.(QUANT.GE.ORDER))THEN
QUANT=QUANT-ORDER
PRINT *,'NEW INVENTORY AMOUNT=',QUANT
WRITE(UNIT=2,FMT=21, REC=RECNUM)
+ STOCK,AUTHOR,TITLE,PRICE,QUANT
21 FORMAT (I4,A20,A20,F6.2,I4)
ELSE IF (STOCK.EQ.0)THEN
PRINT*,'ERROR-RECORD DOES NOT EXIST'
ELSE IF(STOCK.NE.RECNUM)THEN
PRINT*,'ERROR-RECORD AND STOCK NUMBER DON''T MATCH'
ELSE
PRINT*,'INVENTORY INSUFFICIENT TO FILL ORDER'
ENDIF
PRINT*,'ENTER RECORD NUMBER OF BOOK SOLD (OR 0 TO STOP):'
READ*,RECNUM
ENDDO
STOP
END
--
※ 發信站: 批踢踢實業坊(ptt.twbbs.org)
◆ From: 140.112.22.37