Java tutorial
/* * Copyright (c) Ian F. Darwin, http://www.darwinsys.com/, 1996-2002. * All rights reserved. Software written by Ian F. Darwin and others. * $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $ * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * Java, the Duke mascot, and all variants of Sun's Java "steaming coffee * cup" logo are trademarks of Sun Microsystems. Sun's, and James Gosling's, * pioneering role in inventing and promulgating (and standardizing) the Java * language and environment is gratefully acknowledged. * * The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for * inventing predecessor languages C and C++ is also gratefully acknowledged. */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.InputStream; import java.io.PrintStream; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; /** * MediaInvoicer - Simple applicatin of Media, MediaFactory &c. * * @author ian * @version $Id: MediaInvoicer.java,v 1.2 2004/03/08 03:30:59 ian Exp $ */ public class MediaInvoicer { public static void main(String[] args) throws IOException { MediaInvoicer mi = new MediaInvoicer(System.in); Invoice i = mi.getInvoice(); i.print(System.out); } BufferedReader myFile; public MediaInvoicer(InputStream is) { myFile = new BufferedReader(new InputStreamReader(is)); } public Invoice getInvoice() throws IOException { String line; List<Item> items = new ArrayList<Item>(); while ((line = myFile.readLine()) != null) { if (line.startsWith("#")) { continue; } StringTokenizer st = new StringTokenizer(line); st.nextToken(); Media m = MediaFactory.getMedia(st.nextToken()); int stock = Integer.parseInt(st.nextToken()); int qty = Integer.parseInt(st.nextToken()); Item tmp = new Item(m, stock, qty); items.add(tmp); } return new Invoice(1, 3, (Item[]) items.toArray(new Item[items.size()])); } /** Inner class for line order item */ class Item { Media product; int stockNumber; int quantity; /** * @param product * @param stockNumber * @param quantity */ public Item(Media product, int stockNumber, int quantity) { super(); this.product = product; this.stockNumber = stockNumber; this.quantity = quantity; } public String toString() { return "Item[" + product + " " + stockNumber + "]"; } } /** Inner class for one invoice */ class Invoice { int orderNumber; int custNumber; Item[] items; public Invoice(int orderNumber, int custNumber, Item[] items) { super(); this.orderNumber = orderNumber; this.custNumber = custNumber; this.items = items; } public void print(PrintStream ps) { ps.println("*** Invoice ***"); ps.println("Customer: " + custNumber + ")"); ps.println("Our order number: " + orderNumber); for (int i = 0; i < items.length; i++) { Item it = items[i]; ps.println(it); } } } } enum Media { book, music_cd, music_vinyl, movie_vhs, movie_dvd; }