5 ! WORKER -COMBINED PROGRAM TO DROP,ADD,& PRINT SCHEDULES 10 ! WRITTEN BY R.BRANTON JULY 3,1974 100 !**************OPEN DISK FILES************************** 120 OPEN "**MASTER" AS FILE 1 : DIM# 1 ,M%(100) 140 OPEN "**STINF" AS FILE 3 : DIM# 3 ,S$( 1111 )=32 160 OPEN "**STUDF" AS FILE 5 : DIM# 5 ,L%( 1111 ,2),S%( 1111 ,10),N( 1111 ) 170 OPEN "**OVERF" AS FILE 6 : DIM# 6 ,S0%( 33 ,5) 180 OPEN "**SCLINF" AS FILE 2 : DIM# 2 ,C$( 2222 )=16 190 OPEN "**HASH" AS FILE 7 : DIM# 7 ,H( 2222 ,3),Z7%(100,2) 200 OPEN "**PRESTS" AS FILE 9 : DIM# 9 ,M3%( 2222 ,2) 210 OPEN "**STATUS" AS FILE 8 : DIM# 8 ,E9%( 2222 ,2) 260 DIM A3%(20) 270 DEF FNA(Q7)=Q7-INT(Q7/10)*10 299 !******************************************************* 305 Z6=0 !STUDENT# SWITCH 310 INPUT "WILL YOU BE ENTERING DP#'S";Z$ 320 IF Z$="YES" THEN Z6=1 400 & "ENTER COMMANDS IN ONE THE FOLLOWING FORMS:" 410 & " END -STOPS THE PROGRAM" 420 & " SCHED,ST# -PRINT STUDENT SCHEDULE" 430 & " COM,ST# -MAKE A COMPLETE WITHDRAWAL" 440 & " DROP,ST#,CLASS,SEC,P -DROP STUDENT FROM A COURSE" 450 & " ADD,ST#,CLASS,SEC,HRS,P -ADD STUDENT TO A COURSE" 500 INPUT LINE X$ : X$=LEFT(X$,LEN(X$)-2) 510 IF X$="END" THEN 989% ! FINISHED 520 ON ERROR GOTO 800% ! GO THERE FOR BAD DATA 530 X1%=INSTR(1,X$,",") : X2%=INSTR(X1%+1%,X$,",") 540 V1=VAL(MID(X$,X1%+1%,X2%-X1%-1%)) 545 IF X2%=0% THEN V1=VAL(RIGHT(X$,X1%+1%)) 550 GOSUB 6500% ! GO GET NAME 560 IF Z$<>"YES" THEN 500% ! NOT RIGHT ONE 570 IF LEFT(X$,5%)="SCHED" THEN GOSUB 8000% : GOTO 500% 580 IF LEFT(X$,3)="COM" THEN GOSUB 7500% : GOTO 500% 590 X3%=INSTR(X2%+1%,X$,",") : X4%=INSTR(X3%+1%,X$,",") 600 B$=MID(X$,X2%+1%,X3%-X2%-1%) : V3$=MID(X$,X3%+1%,X4%-X3%-1%) 610 IF LEFT(X$,4)<>"DROP" THEN 650 620 Z5=VAL(RIGHT(X$,X4%+1%)) : GOSUB 2000 630 GOTO 500% 650 IF LEFT(X$,3)<>"ADD" THEN & "INVALID COMMAND" : GOTO 500% 660 X5%=INSTR(X4%+1%,X$,",") : H1%=VAL(MID(X$,X4%+1%,X5%-X4%-1%)) 670 Z5=VAL(RIGHT(X$,X5%+1%)) 680 GOSUB 3000% 690 GOTO 500% 800 ! *COME HERE ON INVALID DATA* 810 & "INVALID DATA HAS BEEN ENTERED ERR#";ERR 820 RESUME 500% 989 PRINT DATE$(0),TIME$(0) 990 PRINT "CANCELATIONS DROPS ADDS" 991 PRINT "------------ ----- ------" 992 PRINT TAB(5);M%(44);TAB(15);M%(43);TAB(22);M%(42) 1000 CLOSE 1,2,3,4,5,6,7,8,9 1010 GOTO 9999 2000 !***** DROP SUBROUTINE ***** 2030 GOSUB 7000 !GO FIND CLASS 2035 IF V2%=0% THEN & "NOT IN CLASS FILE " : RETURN 2040 H%=S%(V1%,1)/100% :P%=S%(V1%,1)-H%*100% 2050 IF P%>8% THEN 2300 !HE IS AN OVERFLOW STUDENT 2060 FOR I%=3% TO P%+2% 2070 Z%=S%(V1%,I%)/10% 2080 IF Z%=V2% GOTO 2110 2090 NEXT I% 2100 PRINT "NOT IN STUDENT FILE " : GOSUB 8000 2102 RETURN 2110 Z1%=S%(V1%,I%)-Z%*10% !HOURS 2120 S%(V1%,1)=S%(V1%,1)-Z1%*100%-1% !RESET HOURS & COURSES 2130 S%(V1%,J%)=S%(V1%,J%+1%) FOR J%=I% TO 9% 2135 !*** 2195 M%(43)=M%(43)+1% 2197 IF Z5=1 THEN GOSUB 8000 !WANT ST FILE LIST 2200 GOSUB 7700% ! DECRE CLASS COUNT 2250 RETURN 2300 !****HANDLE OVERFLOW DROPS 2310 A3%(B3%)=S%(V1%,B3%) FOR B3%=1 TO 10 2320 C3%=S%(V1%,2) 2330 A3%(B3%-1)=S0%(C3%,B3%-10) FOR B3%=12 TO 15 2340 FOR D3%=3% TO P%+2% 2350 Z%=A3%(D3%)/10% !CLASS# 2360 IF Z%=V2% THEN 2400 2370 NEXT D3% 2380 GO TO 2100 2400 Z1%=A3%(D3%)-Z%*10% !HOURS 2410 A3%(F3%)=A3%(F3%+1) FOR F3%=D3% TO P%+1% 2420 A3%(P%+2)=0% 2430 A3%(1)=A3%(1)+Z1%*100%-1% 2440 S%(V1%,B3%)=A3%(B3%) FOR B3%=1 TO 10 2450 S0%(C3%,B3%-10)=A3%(B3%-1) FOR B3%=12 TO 15 2460 GO TO 2195 3000 !***** ADD SUBROUTINE ***** 3015 V3%=H1% ! V3% IS THE HOURS 3030 GOSUB 7000 !GO FIND CLASS 3040 IF V2%=0% THEN & "CLASS NOT IN CLASS FILE" : RETURN 3045 IF E9%(V2%,1%)>=5% THEN INPUT "CLOSED PERM";E9$ : IF E9$="NO" THEN 3000% 3050 H%=S%(V1%,1)/100% : P%=S%(V1%,1)-H%*100% 3060 IF P%<8% GOTO 3070 !WONT BE AN OVERFLOW 3065 GOSUB 6000 3070 !*** 3079 IF P%>=8 GOTO 3110 3080 !*****ADD TO STUDENT FILE 3090 S%(V1%,P%+3%)=V2%*10%+V3% 3100 S%(V1%,1)=(H%+V3%)*100%+P%+1% 3110 !*** 3135 M%(42)=M%(42)+1% 3137 IF Z5=1 THEN GOSUB 8000 !WANT ST FILE LIST 3140 M3%(V2%,2%)=M3%(V2%,2%)+1% ! INCREMENT COUNT 3150 IF M3%(V2%,2)>=M3%(V2%,1)+2% THEN IF E9%(V2%,1)<5% THEN E9%(V2%,1)=E9%(V2%,1)+5% !CLOSE 3200 RETURN 6000 !****OVERFLOW STUDENT 6020 Q%=M%(96) 6030 IF P%>8% AND S%(V1%,2)=0% THEN P%=8% 6040 P%=P%+1% 6050 IF P%>12% THEN PRINT "12 CLASSES ALREADY" :RETURN 6060 IF P%>9% GOTO 6100 6070 IF M%(96)>=M%(98) THEN PRINT "NO MORE" :RETURN 6080 S%(V1%,2)=Q% :M%(96)=M%(96)+1% :S0%(Q%,1)=V1% 6100 Q2%=S%(V1%,2) :Q3%=P%-8%+1% 6105 S%(V1%,1)=S%(V1%,1)+V3%*100%+1% ! ADD HOURS AND COURSE 6110 S0%(Q2%,Q3%)=V2%*10%+V3% 6120 RETURN 6500 !***SUBROUTINE TO FIND STUDENTS NAME 6510 IF Z6=1 THEN V1%=V1 : GOTO 6560 !HE IS GIVING DP# 6520 !**HANDLE STUDENT # 6525 FOR Z3%=1 TO M%(2) 6530 IF N(Z3%)=V1 THEN 6550 6535 NEXT Z3% 6540 Z3%=0 : S$(0)="INVALID STUDENT# 6550 V1%=Z3% !INDEX FOR STUDENT 6560 PRINT "WORKING ON-"; LEFT (S$(V1%),20);"OK"; 6565 INPUT Z$ 6570 RETURN 7000 !****FIND CLASS AND SECTION 7005 V2%=0% ! SET SWITCH TO NOT FOUND 7006 IF LEN(B$)<8 THEN B$=LEFT(B$,LEN(B$)-4)+SPACE$(8-LEN(B$))+RIGHT(B$,LEN(B$)-3) 7010 B$=B$+V3$ ! ADD SEC # 7020 C9=0 : C8=0 : CHANGE B$ TO A 7029 FOR I7=1 TO 4 7030 IF A(I7)<>0 AND A(I7)<>32 THEN C9=C9*10+FNA(A(I7)) 7031 NEXT I7 7059 FOR I7=5 TO 10 7060 IF A(I7)<>0 AND A(I7)<>32 THEN C8=C8*10+FNA(A(I7)) 7061 NEXT I7 7100 !****** C9 AND C8 ARE HASH VALUES ********* 7110 C6=INT(C9/100) ! INDEX VALUE FOR CLASS 7120 FOR C6%=Z7%(C6,1) TO Z7%(C6,2) 7130 IF H(C6%,1)C9 THEN RETURN ! CLASS NOT FOUND 7150 IF H(C6%,2)=C8 THEN 7400 ! HERE HE IS 7200 NEXT C6% 7210 RETURN ! NO SECOND MATCH 7400 V2%=H(C6%,3) ! CLASS INDEX 7410 RETURN 7500 !***** COMPLETE WITHDRAWAL SUBROUTINE ***** 7520 V2%=-1% 7530 V8%=S%(V1%,1%)-INT(S%(V1%,1%)/100)*100% 7535 M%(44)=M%(44)+1% 7540 IF V8%<=8% THEN 7600% 7550 V7%=S%(V1%,2%) ! OVERFLOW ADDRESS 7560 FOR U7%=2% TO V8%-7% 7570 V2%=S0%(V7%,U7%)/10% : GOSUB 7700% 7580 NEXT U7% 7590 V8%=8% 7600 FOR U7%=3% TO V8%+2% 7610 V2%=S%(V1%,U7%)/10% : GOSUB 7700% 7620 NEXT U7% 7630 S%(V1%,1%)=0% ! ZERO OUT THE CLASS COUNT 7650 RETURN 7700 !***** SUBROUTINE TO DECREMENT COUNT ***** 7710 M3%(V2%,2%)=M3%(V2%,2%)-1% 7720 IF E9%(V2%,1)>=5% THEN IF M3%(V2%,2)+2% <=M3%(V2%,1) THEN E9%(V2%,1)=E9%(V2%,1)-5% 7750 RETURN 8000 !***** SCHEDULE PRINT SUBROUTINE ***** 8002 & "*****" : & : & USING "#### ########",V1%,N(V1%); 8003 & " ";S$(V1%) : & : P7%=0% : H%=0% 8005 PRINT "COURSE";TAB(20);"HOURS" 8008 PRINT "------";TAB(20);"-----" 8010 P%=S%(V1%,1)-INT(S%(V1%,1)/100%)*100% 8015 IF P%>8% THEN P7%=P%-8% 8020 IF P%>8% THEN P%=8% 8030 FOR I7%=3% TO P%+2% 8040 Z%=S%(V1%,I7%)/10 :Z1%=S%(V1%,I7%)-Z%*10% 8050 PRINT C$(Z%);TAB(20);Z1% :H%=H%+Z1% 8060 NEXT I7% 8070 IF P7%=0 THEN 8130 8080 V7%=S%(V1%,2) !OVERFLOW 8090 FOR I7%=2% TO P7%+1% 8100 Z%=S0%(V7%,I7%)/10 :Z1%=S0%(V7%,I7%)-Z%*10% 8110 PRINT C$(Z%);TAB(20);Z1%:H%=H%+Z1% 8120 NEXT I7% 8130 PRINT TAB(20);"-----" 8140 PRINT "TOTAL HOURS"; TAB(20);H% 8200 RETURN 9999 END