/** *
 *  AircraftCarrier.java
 *
 *  Revisions: 1.0 Oct. 18, 2002
 *               Created the AircraftCarrier class
 *			   1.1 Oct. 27, 2002
 *				 Compiled, Finished, Commented
 *			   1.2 Oct. 28,2002
 *				 Whoever writes these stupid .nfo's needs to be more specific
 *					added recode to fix the way launchLog.txt is written
 *
 *
 *  
* * Collaboration Statement: * I worked on the homework assignment alone, using only * course materials. * * Created with JCreatorLE, some indents are off when viewed through notepad * or EMACS * * @author Jose Manuel Caban * @version Version 1.1, Oct. 27, 2002 */ import java.io.*; import java.util.*; public class AircraftCarrier { private final String FILE_NAME = "aircraftFile.txt"; private BST aircraftBST; private boolean StrikePackageReady; private static final String MENU = ( "1) Create New Strike Package\n"+ "2) Find Aircraft\n"+ "3) Throw Aircraft Overboard\n"+ "4) Print Strike Package to file\n"+ "5) Launch Aircraft\n"+ "6) Quit\n"); private BufferedReader KB_IN= new BufferedReader(new InputStreamReader(System.in)); private Heap launchQueue; //holds the aircraft ordered by LaunchPriority //change to false to remove prettiness of console private static final boolean bPretty = true; //////////////// //Constructors// //////////////// /** *Default Constructor *starts menu */ public AircraftCarrier(){ aircraftBST = new BST(); StrikePackageReady = false; doMenu(); } /////////// //Methods// /////////// /** *Read Input */ private String readLine(){ String KB_INPUT =""; try{ KB_INPUT = KB_IN.readLine(); } catch(IOException ioe){ System.err.println("IOException in readLine()"); } return KB_INPUT; }//end readText(String,int) /** *Prompt user for Aircraft and then output its specifics */ public void findAircraft(){ if(!StrikePackageReady){ System.out.println("Strike Package not Ready"); return; } String KB_INPUT; System.out.println("Please enter the a plane to search for: "); KB_INPUT = readLine(); Aircraft craft = new Aircraft(KB_INPUT); if(aircraftBST.find(craft) == null){ System.out.println("No Aircraft Found"); } else{ System.out.println(aircraftBST.find(craft)); } }//end findAircraft() /** *Throws a given aircraft overboard */ private void throwAircraftOverboard(){ //On a side note, did you guys consult the Navy about this program? //I really don't think it behooves the Navy to throw their aircraft //overboard //but I could be going out on a limb here too String KB_INPUT; if(!StrikePackageReady){ System.out.println("Strike Package not Ready"); return; } System.out.println("Please enter the a plane to throw overboard: "); KB_INPUT = readLine(); Comparable temp = aircraftBST.remove(new Aircraft(KB_INPUT)); if(temp == null){ System.out.println("No removal made"); } else{ System.out.println((Aircraft)temp); } } /** *Reads the aircraft from file and adds them to the program */ private void createNewStrikePackage(){ BufferedReader br; try{ br = new BufferedReader(new FileReader(FILE_NAME)); } catch(FileNotFoundException fnfe){ System.err.println(FILE_NAME + " not found"); return; } catch(Exception e){ System.err.println(e); return; } String aircraft = ""; try{ boolean bDone = false; while(!bDone){ String temp = br.readLine(); if(temp == null){ bDone = true; } else{ aircraft+=" "+temp; } } /*aircraft += br.readLine() while <- br.readLine() != null*/ } catch(IOException ioe){ System.err.println(ioe); return; } StringTokenizer st = new StringTokenizer(aircraft); while(st.hasMoreTokens()){ aircraftBST.add(new Aircraft( st.nextToken(), st.nextToken(), st.nextToken(), Integer.parseInt(st.nextToken()) )); } try{ br.close(); } catch(IOException ioe){ System.err.println(ioe); return; } StrikePackageReady = true; }//end createNewStrikePackage() /** *Writes the current aircraft to file */ private void printStrikePackage(){ FileWriter fw; PrintWriter pw; //init fw try{ fw = new FileWriter("strikePackage.txt"); } catch(FileNotFoundException fnfe){ System.err.println(fnfe); return; } catch(IOException ioe){ System.err.println(ioe); return; } //init pw pw = new PrintWriter(fw); aircraftBST.writeAircraft(aircraftBST,pw); try{ pw.flush(); fw.close(); } catch(IOException ioe){ System.err.println(ioe); } }//end printStrikePackage() /*************************************************************/ /***************/ //Phase 5 stuff// /***************/ //private Heap launchQueue //restated for coherency /** *writes the aircraft to launchLog.txt and sends them off to battle */ private void launchAircraft(){ launchQueue = new Heap(); aircraftBST.createLaunchQueue(aircraftBST,launchQueue); aircraftBST = null; FileWriter fw; PrintWriter pw; //init fw try{ fw = new FileWriter("launchLog.txt"); } catch(FileNotFoundException fnfe){ System.err.println(fnfe); return; } catch(IOException ioe){ System.err.println(ioe); return; } //init pw pw = new PrintWriter(fw); while(!launchQueue.isEmpty()){ Aircraft temp = (Aircraft)(((BSTNode)launchQueue.remove()).getData()); //old code for the printing of file /*String strTemp = temp.getModel() + " " + temp.getNickname() + " " + temp.getRole() + " " + temp.getLaunchPriority(); pw.println(strTemp);*/ //new code pw.println(temp); /* to be honest, I feel the way I did this, the old code, makes more sense than writing "An Aircraft of type blah balh blah" to a file you can reload the file just as easily as aircraftFile.txt. For future TA meetings, please bring up the fact that its annoying to rely on the newgroups (not .announce, the other ones) to find things that should be clear in the instructions to begin with.*/ } try{ pw.flush(); fw.close(); } catch(IOException ioe){ System.err.println(ioe); } StrikePackageReady = false; }//end launchAircraft() /** *Writes a menu to screen that runs until the user chooses to quit */ private void doMenu(){ boolean quit = false; do{ System.out.println(MENU); try{ int temp = Integer.parseInt(readLine()); switch(temp){ case 1: if(bPretty){ System.out.println("\n\n\n\n/************************"); System.out.println(" * Creating new StikePackage..."); } createNewStrikePackage(); if(bPretty){ System.out.println(" * Done.\n\n"); } break; case 2: if(bPretty){ System.out.println("\n\n\n\n/************************"); System.out.println(" * Find Aircraft v1.1:"); } findAircraft(); if(bPretty){ System.out.println(" * Done.\n\n"); } break; case 3: if(bPretty){ System.out.println("\n\n\n\n/************************"); System.out.println(" * Throw Aircraft Overboard v1.1:"); } throwAircraftOverboard(); if(bPretty){ System.out.println(" * Done.\n\n"); } break; case 4: if(bPretty){ System.out.println("\n\n\n\n/************************"); System.out.println(" * Writing StikePackage to File..."); } printStrikePackage(); if(bPretty){ System.out.println(" * Done.\n\n"); } break; case 5: if(bPretty){ System.out.println("\n\n\n\n/************************"); System.out.println(" * Launching Aircraft..."); } launchAircraft(); if(bPretty){ System.out.println(" * Done.\n\n"); } break; case 6: if(bPretty){ System.out.println("\n\n\n\n/************************"); } System.out.println("Thank you for using pseudo-Aircraft"+ "Carrier Version 1.1, send $20 to gtg184g for the"+ " full version.\n"); if(bPretty){ System.out.println(" * Done."); } quit = true; break; default: System.out.println("Try Again, 1-6"); break; } } catch(NumberFormatException nfe){ System.out.println("Please try again"); } }while(!quit); }//end doMenu() /** * Debugging main for class AircraftCarrier. * This method will rigorously test my code. * *

* @param args a String array of command line arguments. */ public static void main(String[] args) { AircraftCarrier bob = new AircraftCarrier(); /*bob.aircraftBST = new BST(); bob.aircraftBST.add(new Aircraft("F-14","Tomcat","Interceptor",8)); bob.StrikePackageReady = false; bob.findAircraft(); bob.StrikePackageReady = true; bob.findAircraft(); bob.throwAircraftOverboard(); bob.aircraftBST.outputTree(); System.out.println("\nTesting createNewStrikePackage()\n"); bob.createNewStrikePackage(); bob.aircraftBST.outputTree(); bob.findAircraft(); bob.printStrikePackage(); bob.launchAircraft(); System.out.println(bob.aircraftBST); System.out.println(bob.launchQueue);*/ }// end of main(String[] args) }// end of class AircraftCarrier