'mcphee.bas (calculates McPhee freight charges) Trish Sarkis 24th Feb 2002 DECLARE SUB aBorderHeader () DECLARE SUB bUserMenu (d$, number) DECLARE SUB cUserDataInput (d$, number, cmLength!, cmWidth!, cmHeight!, kgWeight!) DECLARE SUB dCalcs (d$, number, ChargeFactor!, Bas!, Min!, mLength!, mWidth!, mHeight!, cmLength!, cmWidth!, cmHeight!, Volume!, kgWeight!, kgEquiv!, WeightCharge!, FreightCharge!, Rate!) DECLARE SUB eOutput (d$, R$, cmLength!, cmWidth!, cmHeight!, ChargeFactor!, kgEquiv!, FreightCharge!, WeightCharge!, Min!) DECLARE SUB zTerminate () 'START 'Main Program DO CALL aBorderHeader CALL bUserMenu(d$, number) CALL cUserDataInput(d$, number, cmLength, cmWidth, cmHeight, kgWeight) CALL dCalcs(d$, number, ChargeFactor, Bas, Min, mLength, mWidth, mHeight, cmLength, cmWidth, cmHeight, Volume, kgWeight, kgEquiv, WeightCharge, FreightCharge, Rate) CALL eOutput(d$, R$, cmLength, cmWidth, cmHeight, ChargeFactor, kgEquiv, FreightCharge, WeightCharge, Min) LOOP UNTIL UCASE$(R$) = "Q" CALL zTerminate END 'Main Program SUB aBorderHeader 'Sets the screen parameters and places a border and title block. 'set the screen parameters CLS SCREEN 12 'graphics and text with fg color (no bg color) WINDOW (0, 0)-(640, 480) 'make co-ords logical 'place the screen border LINE (0, 20)-(640, 480), 2, B 'outer borderline LINE (5, 25)-(635, 475), 9, B, &HFF11 'middle dot dash borderline LINE (10, 30)-(630, 470), 2, B 'inner border line 'place the title block length = 380: height = 50 'can change length of box xLeft = (640 / 2) - (length / 2) vsf = .85 yLeft = 480 * vsf xRight = (640 / 2) + (length / 2) yRight = yLeft + height LINE (xLeft, yLeft)-(xRight, yRight), 7, B COLOR 11 LOCATE 3, 20: PRINT "M c P H E E F R E I G H T C H A R G E S" COLOR 7 LOCATE 4, 29: PRINT "Written by Trish Sarkis" END SUB SUB bUserMenu (d$, number) 'Setting a row/column reference point R = 11: c = 7 'heading for NSW COLOR 7: LOCATE R - 1, c - 3: PRINT "Inside NSW:" 'user selection numbers 1-6 FOR t = 1 TO 6 COLOR 14: LOCATE R + t, c - 3: PRINT t NEXT 'menu items corresponding to numbers 1-6 COLOR 2 LOCATE R + 1, c: PRINT "SYD AREA 1" LOCATE R + 2, c: PRINT "SYD AREA 2" LOCATE R + 3, c: PRINT "SYD AREA 3" LOCATE R + 4, c: PRINT "GOSFORD" LOCATE R + 5, c: PRINT "NEWCASTLE" LOCATE R + 6, c: PRINT "WOLLONGONG" 'user selection numbers 7-9 FOR t = 7 TO 9 COLOR 14: LOCATE R + 1 + t, c - 3: PRINT t NEXT 'menu items corresponding to numbers 7-9 COLOR 2 LOCATE R + 8, c: PRINT "NSW ZONE 1" LOCATE R + 9, c: PRINT "NSW ZONE 2" 'user selection numbers 10-13 FOR t = 10 TO 13 COLOR 14: LOCATE R + 1 + t, c - 4: PRINT t NEXT 'menu items corresponding to numbers 10-13 COLOR 2 LOCATE R + 10, c: PRINT "NSW ZONE 3" LOCATE R + 11, c: PRINT "NSW ZONE 4" LOCATE R + 12, c: PRINT "NSW ZONE 5" LOCATE R + 13, c: PRINT "NSW ZONE 6" LOCATE R + 14, c: PRINT "NSW ZONE 7" 'heading for other states COLOR 7: LOCATE R - 1, c + 15: PRINT "Outside NSW:" 'user selection numbers 14-21 FOR t = 14 TO 21 COLOR 14: LOCATE R + (t - 13), c + 14: PRINT t NEXT 'menu items corresponding to numbers 14-21 COLOR 2 LOCATE R + 1, c + 18: PRINT "ACT FDA" LOCATE R + 2, c + 18: PRINT "MELBOURNE" LOCATE R + 3, c + 18: PRINT "BRISBANE" LOCATE R + 4, c + 18: PRINT "GOLD COAST" LOCATE R + 5, c + 18: PRINT "ADELAIDE" LOCATE R + 6, c + 18: PRINT "PERTH" LOCATE R + 7, c + 18: PRINT "DARWIN" LOCATE R + 8, c + 18: PRINT "HOBART/LAUN" 'user selection numbers 22-28 FOR t = 22 TO 28 COLOR 14: LOCATE R + (t - 12), c + 14: PRINT t NEXT 'menu items corresponding to numbers 22-28 COLOR 2 LOCATE R + 10, c + 18: PRINT "ZONE 1" LOCATE R + 11, c + 18: PRINT "ZONE 2" LOCATE R + 12, c + 18: PRINT "ZONE 3" LOCATE R + 13, c + 18: PRINT "ZONE 4" LOCATE R + 14, c + 18: PRINT "ZONE 5" LOCATE R + 15, c + 18: PRINT "ZONE 6" LOCATE R + 16, c + 18: PRINT "ZONE 7" 'vertical line separating menu from output FOR t = 1 TO 20 COLOR 7 LOCATE R + (t - 4), c + 32: PRINT "|" NEXT 'request for input of destination DO COLOR 12 LOCATE 6, 42: PRINT "Press 0 to exit the program NOW, or" LOCATE 7, 50 COLOR 14 INPUT "Type a number (1-28) ", number COLOR 9 LET number = INT(number) LOOP UNTIL number >= 0 AND number <= 28 END SUB SUB cUserDataInput (d$, number, cmLength, cmWidth, cmHeight, kgWeight) 'examines input number selected from user menu SELECT CASE number CASE 0: CALL zTerminate CASE 1: LET d$ = "SYD AREA 1" CASE 2: LET d$ = "SYD AREA 2" CASE 3: LET d$ = "SYD AREA 3" CASE 4: LET d$ = "GOSFORD" CASE 5: LET d$ = "NEWCASTLE" CASE 6: LET d$ = "WOLLONGONG" CASE 7: LET d$ = "NSW ZONE 1" CASE 8: LET d$ = "NSW ZONE 2" CASE 9: LET d$ = "NSW ZONE 3" CASE 10: LET d$ = "NSW ZONE 4" CASE 11: LET d$ = "NSW ZONE 5" CASE 12: LET d$ = "NSW ZONE 6" CASE 13: LET d$ = "NSW ZONE 7" CASE 14: LET d$ = "ACT FDA" CASE 15: LET d$ = "MELBOURNE" CASE 16: LET d$ = "BRISBANE" CASE 17: LET d$ = "GOLD COAST" CASE 18: LET d$ = "ADELAIDE" CASE 19: LET d$ = "PERTH" CASE 20: LET d$ = "DARWIN" CASE 21: LET d$ = "HOBART/LAUN" CASE 22: LET d$ = "ZONE 1" CASE 23: LET d$ = "ZONE 2" CASE 24: LET d$ = "ZONE 3" CASE 25: LET d$ = "ZONE 4" CASE 26: LET d$ = "ZONE 5" CASE 27: LET d$ = "ZONE 6" CASE 28: LET d$ = "ZONE 7" END SELECT 'erases header options COLOR 0 LOCATE 6, 40: PRINT STRING$(37, " ") LOCATE 7, 40: PRINT STRING$(37, " ") 'places destination d$ at top RHS of screen tl = LEN(d$) tl = INT(37 + ((47 - tl) / 2)) 'starting column of range = 35 COLOR 14: LOCATE 8, tl 'range for centring under = 51 PRINT d$ 'prints centred input string 'request more data input COLOR 7 LOCATE 10, 44: INPUT "Length of package in cm is.. ", cmLength LOCATE 11, 44: INPUT "Width of package in cm is.. ", cmWidth LOCATE 12, 44: INPUT "Height of package in cm is.. ", cmHeight LOCATE 13, 44: INPUT "Weight of package in kg is.. ", kgWeight END SUB SUB dCalcs (d$, number, ChargeFactor, Bas, Min, mLength, mWidth, mHeight, cmLength, cmWidth, cmHeight, Volume, kgWeight, kgEquiv, WeightCharge, FreightCharge, Rate) 'examines destination input SELECT CASE number CASE 0: CALL zTerminate CASE 1: LET Bas = 9.06: LET Rate = .15: LET Min = 13.59 CASE 2: LET Bas = 11.32: LET Rate = .15: LET Min = 0 CASE 3: LET Bas = 11.32: LET Rate = .15: LET Min = 16.99 CASE 4: LET Bas = 12.46: LET Rate = .4529: LET Min = 16.99 CASE 5: LET Bas = 12.46: LET Rate = .5096: LET Min = 17.54 CASE 6: LET Bas = 12.46: LET Rate = .4529: LET Min = 16.99 CASE 7: LET Bas = 13.59: LET Rate = .5661: LET Min = 19.24 CASE 8: LET Bas = 13.59: LET Rate = .6794: LET Min = 20.38 CASE 9: LET Bas = 13.59: LET Rate = .7925: LET Min = 21.51 CASE 10: LET Bas = 13.59: LET Rate = .10757: LET Min = 24.34 CASE 11: LET Bas = 13.59: LET Rate = .13021: LET Min = 26.61 CASE 12: LET Bas = 13.59: LET Rate = .14719: LET Min = 28.31 CASE 13: LET Bas = 13.59: LET Rate = .16984: LET Min = 30.57 CASE 14: LET Bas = 12.46: LET Rate = .5096: LET Min = 17.54 CASE 15: LET Bas = 12.46: LET Rate = .5661: LET Min = 18.11 CASE 16: LET Bas = 12.46: LET Rate = .6228: LET Min = 18.67 CASE 17: LET Bas = 13.59: LET Rate = .736: LET Min = 20.95 CASE 18: LET Bas = 12.46: LET Rate = .7925: LET Min = 20.38 CASE 19: LET Bas = 14.72: LET Rate = .13586: LET Min = 28.31 CASE 20: LET Bas = 15.85: LET Rate = .21513: LET Min = 37.37 CASE 21: LET Bas = 15.85: LET Rate = .21513: LET Min = 37.37 CASE 22: LET Bas = 9.05: LET Rate = .5661: LET Min = 0 CASE 23: LET Bas = 9.05: LET Rate = .6794: LET Min = 0 CASE 24: LET Bas = 9.05: LET Rate = .7925: LET Min = 0 CASE 25: LET Bas = 10.19: LET Rate = .10757: LET Min = 0 CASE 26: LET Bas = 10.19: LET Rate = .13021: LET Min = 0 CASE 27: LET Bas = 10.19: LET Rate = .14719: LET Min = 0 CASE 28: LET Bas = 11.32: LET Rate = .16984: LET Min = 0 END SELECT 'commence calculations ChargeFactor = 250 'basic charge = Bas 'minimum charge = Min LET mLength = cmLength / 100 LET mWidth = cmWidth / 100 LET mHeight = cmHeight / 100 Volume = mLength * mWidth * mHeight kgEquiv = Volume * ChargeFactor FreightCharge = Bas + (kgEquiv + .5) * Rate WeightCharge = Bas + (kgWeight + .5) * Rate END SUB SUB eOutput (d$, R$, cmLength, cmWidth, cmHeight, ChargeFactor, kgEquiv, FreightCharge, WeightCharge, Min) COLOR 2: LOCATE 14, 43: PRINT "Volumetric kg Equivalent ="; PRINT USING "###.####"; kgEquiv 'output charges LINE (335, 110)-(615, 240), 7, B COLOR 2: LOCATE 17, 44: PRINT "Charge using Minimum = " COLOR 14: LOCATE 17, 68: PRINT "$"; PRINT USING "###.##"; Min COLOR 2: LOCATE 18, 44: PRINT "Charge using Weight = " COLOR 14: LOCATE 18, 68: PRINT "$"; PRINT USING "###.##"; WeightCharge; COLOR 2: LOCATE 19, 44: PRINT "Charge using Volume = " COLOR 14: LOCATE 19, 68: PRINT "$"; PRINT USING "###.##"; FreightCharge; COLOR 12 LOCATE 21, 44 PRINT "Use highest charge on the invoice" LOCATE 22, 44 PRINT "and record dimensions on connote." 'repeat calcs LOCATE 25, 44: COLOR 11: PRINT "Press r to repeat calculation" LOCATE 26, 44: COLOR 11: INPUT "Press q to quit program ... "; R$ END SUB SUB zTerminate 'user elects to terminate program screen acknowledgement. CALL aBorderHeader 'erases press key options COLOR 0 LOCATE 6, 40: PRINT STRING$(38, " ") LOCATE 7, 40: PRINT STRING$(38, " ") COLOR 11: LOCATE 14, 26 PRINT "Leaving Program as Requested" COLOR 12: LOCATE 16, 33: PRINT "by Trish Sarkis" COLOR 13: LOCATE 20, 23 PRINT "And Remember ..... Have A Nice Day" SLEEP 2 CLS SCREEN 0 COLOR 7 'SYSTEM 'needs to be activated if the program is made into .exe file END END SUB