7 REM ADAPTED FOR BASIC-PLUS BY GARY LUCKEENBAUGH, 6/73 10 REM**IATA.R(REVISION OF IATA.1)**10MAR2**CALCULATE AIRFREIGHT RATES. 20 REM**THIS PROGRAM CAN BE USED FOR METRIC WEIGHT AND ANY CURRENCY 30 REM**SIMPLY BY CHANGING THE LBS TO KGS LABELS,$ TO SOME SYMBOL TO 40 REM**PERRESENT LOCAL CURRENCY, AND CHANGING THE APPROPRIATE PRINT-USING 50 REM**STATEMENTS TO HANDLE THE LARGER VALUES OF EACH CURRENCY. THE 60 REM**FORMULAE ARE UNIVERSAL AND DO NOT REQUIRE MODIFICATION. THE 70 REM**DATA FOR USING THE PROGRAM IS AVAILABLE FROM ANY AIR CARGO 80 REM**TARIFF SUCH AS PUBLISHED BY SWISSAIR AND SAS ENTITLED "ACT". 90 F9$=FNP$ 100 DIM R(7),W(7) 120 INPUT "INSTRUCTIONS";Y$: IF Y$="NO" THEN 250 150 PRINT "IATA.R CALCULATES BREAKPOINT WEIGHTS BASED ON DATA" 160 PRINT "SUPPLIED BY THE USER(EITHER FROM THE KEYBOARD OR FILE" 170 PRINT "AIRRAT) AND THEN PRINTS A TABLE SUITABLE FOR USE IN RATING," 180 PRINT "PREPARING AND CHECKING AIR WAYBILLS. LIMIT YOUR INPUTS AS" 190 PRINT "FOLLOWS:AIRPORT CODES=3 LETTERS,SPECIFIC COMMODITY=5" 200 PRINT "CHARACTERS,COMMODITY DESCRIPTION=34 CHARACTERS,DATE=6" 210 PRINT "CHARACTERS(USE FORMAT DDMMMY). THIS PROGRAM CONSISTS OF 3" 220 PRINT "SECTIONS:1=DATA ENTRY FROM KEYBOARD,2=DATA ENTRY FROM FILE" 230 PRINT "AIRRAT,3=ADDITIONS AND/OR DELETIONS TO FILE AIRRAT,AND 4=" 240 PRINT "TERMINATE PROGRAM. ENTER THE APPROPRIATE RESPONSE BELOW." 250 INPUT "SECTION (1,2,3,OR 4)";A: IF A<1 OR A>4 THEN 250 260 ON A GOTO 320,700,1280,2240 320 INPUT "# OF RATE CLASSES IN THIS COMMODITY =";N 340 INPUT "ORIGIN AIRPORT";A$ 360 INPUT "DESTINATION AIRPORT";D$ 380 INPUT "SPECIFIC COMMODITY";S$ 400 INPUT "COMMODITY DESCRIPTION";C$ 420 REM**DATE IS USED FOR CONTROL PURPOSES TO INSURE OLD RATES ARE 430 REM**DISCARDED WHEN NEW RATES BECOME EFFECTIVE. 440 INPUT "EFFECTIVE DATE OF RATES";R$ 460 INPUT "MINIMUM AIR WAYBIL CHARGE IN $";M 480 INPUT "NORMAL RATE IN $";R(1) 500 PRINT "ENTER DATA AS REQUIRED" 510 FOR I=1 TO N: PRINT USING "RATE #= $",I;: INPUT R(I+1) 550 PRINT USING "WEIGHT #=",I; 570 INPUT W(I+1): NEXT I 590 REM**CALCULATES FIRST BREAKPOINT. 600 W(1)=INT(M/R(1)) 610 INPUT "HOW MANY COPIES";C 630 GOSUB 970 640 INPUT "MORE";X$: IF X$="YES" THEN 320 670 GOTO 250 680 REM**SECTION 2. USES FILE AIRRAT TO GENERATE TABLES. 690 REM**RESET POINTERS AFTER A FILE UPDATE. 700 F9$=FNP$ 720 INPUT "HOW MANY COPIES";C 740 INPUT "DO YOU WANT A COMPLETE LISTING";L$: IF L$="YES" THEN 840 770 PRINT "ENTER SEARCH PARAMETERS" 780 INPUT "ORIGIN AIRPORT";B$ 800 INPUT "DESTINATION AIRPORT";E$ 820 INPUT "SPECIFIC COMMODITY";T$ 840 ON ERROR GOTO 845: GOTO 850 845 IF ERR<>11% THEN ON ERROR GOTO 0 ELSE RESUME 2230 850 INPUT #1%, N,A$,D$,S$,C$,R$,M,R(1),W(1),R(2),W(2),R(3),W(3),R(4) 860 INPUT #1%, W(4),R(5),W(5),R(6),W(6),R(7),W(7) 870 IF L$="YES" THEN 950 880 REM**SEARCHES FILE FOR PARAMETERS INPUTTED 890 IF B$<>A$ THEN 850 910 IF E$<>D$ THEN 850 930 IF T$<>S$ THEN 850 950 GOSUB 970: GOTO 1220 970 PRINT: PRINT: PRINT 980 FOR K=1 TO C 990 PRINT "ORIGINATING AIRPORT......";A$ 1000 PRINT "DESTINATION AIRPORT......";D$ 1010 PRINT "SPECIFIC COMMODITY.......";S$ 1020 PRINT "COMMODITY DESCRIPTION....";C$: PRINT: PRINT: PRINT 1030 PRINT "ACT GROSS WT"SPACE$(8%)"CHARGEABLE WT"SPACE$(5%)"RATE/LB" SPACE$(5%)"CHARGES" 1050 PRINT "--- ----- --"SPACE$(8%)"---------- --"SPACE$(5%)"-------" SPACE$(5%)"-------" 1070 PRINT USING " 1 TO##### DECLARE AS MINIMUM $ " +"##.##",W(1),M 1080 PRINT 1090 FOR I=1 TO N 1100 REM**CALCULATES BREAKPOINT WEIGHTS 1110 F=R(I+1)*W(I+1)/R(I) 1120 PRINT USING "##### TO##### ACTUAL $#.#### "+ "AS EXTENDED",W(I)+1,INT(F),R(I) 1140 PRINT USING "##### TO##### ##### $#.#### "+ "$####.##",INT(F)+1,W(I+1),W(I+1),R(I+1),R(I+1)*W(I+1) 1155 PRINT 1160 NEXT I 1170 PRINT USING "##### TO ACTUAL $#.#### "+ "AS EXTENDED",W(N+1)+1,R(N+1): PRINT: PRINT: PRINT 1190 PRINT "EFFECTIVE DATE OF RATES..";R$: PRINT FOR C%=1% TO 6% 1200 NEXT K: RETURN 1220 IF L$="YES" THEN 850 1230 INPUT "MORE";M$: IF M$="YES" THEN 700 ELSE 250 1270 REM**SECTION 3. FILE MAINTAINANCE. 1280 INPUT "ADD OR DELETE";X$: IF X$="ADD" THEN 1780 ELSE IF X$="DEL" THEN 1350 ELSE 1280 1330 REM**DELETION OPTION 1340 REM**RESET POINTERS FOR DELETE AFTER AND ADD. 1350 F9$=FNP$ 1370 PRINT "ENTER SEARCH PARAMETERS" 1380 INPUT "A$=";B$ 1400 INPUT "D$=";E$ 1420 INPUT "S$=";T$ 1440 REM**K=0 STES FLAG TO SEARCH FILE FOR RECORD TO BE DELETED. 1450 K=0 1460 ON ERROR GOTO 1465: GOTO 1470 1465 IF ERR<>11% THEN ON ERROR GOTO 0 ELSE RESUME 1620 1470 INPUT #1%, N,A$,D$,S$,C$,R$,M,R(1),W(1),R(2),W(2),R(3),W(3),R(4) 1480 INPUT #1%, W(4),R(5),W(5),R(6),W(6),R(7),W(7) 1490 IF K<>0 THEN 1590 1500 IF B$<>A$ THEN 1590 1520 IF E$<>D$ THEN 1590 1540 IF T$<>S$ THEN 1590 1550 REM**K=1 SETS FLAG TO INDICATE RECORD TO BE DELETED HAS BEEN 1560 REM**FOUND AND NO FURTHER SEARCHING OF THE FILE IS NECESSARY. 1570 K=1: GOTO 1470 1590 PRINT #2%, N","A$","D$","S$","C$","R$","M","R(1)","W(1)","R(2)"," W(2)","R(3)","W(3)","R(4) 1600 PRINT #2%, W(4)","R(5)","W(5)","R(6)","W(6)","R(7)","W(7) 1605 GOTO 1470 1620 IF K<>0 THEN 1640 1630 PRINT "RECORD NOT ON FILE." 1640 F9$=FNP$ 1660 IF K=0 THEN 1730 1670 ON ERROR GOTO 1675: GOTO 1680 1675 IF ERR<>11% THEN ON ERROR GOTO 0 ELSE RESUME 1730 1680 INPUT #2%, N,A$,D$,S$,C$,R$,M,R(1),W(1),R(2),W(2),R(3),W(3),R(4) 1690 INPUT #2%, W(4),R(5),W(5),R(6),W(6),R(7),W(7) 1700 PRINT #1%, N","A$","D$","S$","C$","R$","M","R(1)","W(1)","R(2)"," W(2)","R(3)","W(3)","R(4) 1710 PRINT #1%, W(4)","R(5)","W(5)","R(6)","W(6)","R(7)","W(7) 1720 PRINT #1%, CHR$(26%): GOTO 1680 1730 INPUT "DONE";Z$: IF Z$="NO" THEN 1280 ELSE 250 1770 REM**ADDITION OPTION 1780 ON ERROR GOTO 1785: GOTO 1790 1785 IF ERR<>11% THEN ON ERROR GOTO 0 ELSE RESUME 1820 1790 INPUT #1%, N,A$,D$,S$,C$,R$,M,R(1),W(1),R(2),W(2),R(3),W(3),R(4) 1800 INPUT #1%, W(4),R(5),W(5),R(6),W(6),R(7),W(7) 1810 GOTO 1790 1820 ON ERROR GOTO 1825: GOTO 1830 1825 IF ERR<>11% THEN ON ERROR GOTO 0 ELSE RESUME 2230 1830 PRINT "ENTER NEW DATA" 1840 INPUT "N=";N: IF N>=0 AND N<=6 THEN 1880 ELSE 1840 1880 IF N=INT(N) THEN 1910 ELSE 1840 1900 REM**FILLS UNUSED MATRIX ELEMENTS WITH ZEROS. 1910 MAT R=ZER: MAT W=ZER 1930 INPUT "A$=";A$ 1950 INPUT "D$=";D$ 1970 INPUT "S$=";S$ 1990 INPUT "C$=";C$ 2010 INPUT "R$=";R$ 2030 INPUT "M=";M 2050 INPUT "O=";R(1) 2070 REM**CALCULATES FIRST BREAKPOINT WEIGHT. 2080 W(1)=M/R(1) 2090 FOR I=1 TO N 2100 PRINT USING "R#=$",I; 2120 INPUT R(I+1) 2130 PRINT USING "W #= ",I; 2150 INPUT W(I+1) 2160 NEXT I 2170 PRINT #1%, N","A$","D$","S$","C$","R$","M","R(1)","W(1)","R(2)"," W(2)","R(3)","W(3)","R(4) 2180 PRINT #1%, W(4)","R(5)","W(5)","R(6)","W(6)","R(7)","W(7) 2190 INPUT "DONE";M$: IF M$="NO" THEN 1280 ELSE 250 2230 PRINT "END OF FILE OR DATA NOT ON FILE." 2240 DEF FNP$: RESTORE: FOR F9%=1% TO 2% 2250 READ F9$: OPEN F9$ AS FILE F9% 2260 NEXT F9%: FNEND 2270 DATA AIRRAT.DAT,RATAIR.DAT 2280 CLOSE 1%,2%: END