// [This version prodcues graphical output.] // Displays IMDB's Top 250 movies that match a search string. import java.awt.*; // for Graphics import java.io.*; // for File import java.util.*; // for Scanner public class MoviesGraphical { public static String MOVIE_FILE = "imdb.txt"; public static void main(String[] args) throws FileNotFoundException { String searchWord = getWord(); Scanner input = new Scanner(new File(MOVIE_FILE)); String line = search(input, searchWord); int matches = 0; if (line.length() > 0) { Graphics g = createWindow(); while (line.length() > 0) { matches++; display(g, line, matches); line = search(input, searchWord); } } System.out.println(matches + " matches."); } // Asks the user for their search word and returns it. public static String getWord() { System.out.print("Search word: "); Scanner console = new Scanner(System.in); String searchWord = console.next(); searchWord = searchWord.toLowerCase(); System.out.println(); return searchWord; } // Breaks apart each line, looking for lines that match the search word. public static String search(Scanner input, String searchWord) { while (input.hasNextLine()) { String line = input.nextLine(); String lineLC = line.toLowerCase(); // case-insensitive match if (lineLC.indexOf(searchWord) >= 0) { return line; } } return ""; // not found } // Displays the line in the proper format on the screen. public static void display(Graphics g, String line, int matches) { Scanner lineScan = new Scanner(line); int rank = lineScan.nextInt(); int votes = lineScan.nextInt(); double rating = lineScan.nextDouble(); String title = ""; while (lineScan.hasNext()) { title += lineScan.next() + " "; // the rest of the line } drawBar(g, matches, title, rank, rating); } // Creates a drawing panel and draws all fixed graphics. public static Graphics createWindow() { DrawingPanel panel = new DrawingPanel(600, 500); Graphics g = panel.getGraphics(); for (int i = 0; i <= 10; i++) { // draw tick marks int x = i * 50; g.drawLine(x, 20, x, 30); g.drawString(i + ".0", x, 20); } return g; } // Draws one red bar representing a movie's votes and ranking. public static void drawBar(Graphics g, int matches, String title, int rank, double rating) { int y = 70 + 100 * (matches - 1); int w = (int) (rating * 50); int h = 50; g.setColor(Color.BLUE); // draw the blue bar for that movie g.fillRect(0, y, w, h); g.setColor(Color.BLACK); g.drawString("#" + rank + ": " + title, 0, y); } }