⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 librarysystem.java

📁 ssd3的教程 是我们老师给我们的 纯英文 有兴趣的可以
💻 JAVA
字号:
import java.io.*;
import java.util.*;

/**
 * This class implements a library system.
 *
 * @author  author name
 * @version 1.1.0
 * @see CatalogItem
 * @see Book
 * @see Recording
 * @see Catalog
 * @see Borrower
 * @see BorrowerDatabase
 */
public class LibrarySystem  {

	private static BufferedReader  stdIn =
		new  BufferedReader(new  InputStreamReader(System.in));
	private static PrintWriter  stdOut = new  PrintWriter(System.out, true);
	private static PrintWriter  stdErr = new  PrintWriter(System.err, true);

	private Catalog  catalog;
	private BorrowerDatabase borrowerDB;

	/**
	 * Loads the information of the library catalog and
	 * borrowers database and starts the application.
	 *
	 * @param args  String arguments.  Not used.
	 * @throws IOException if there are errors in the input.
	 */
	public static void  main(String[]  args) throws IOException  {

		Catalog catalog  = load();

		LibrarySystem  app = new  LibrarySystem(catalog, load(catalog));

		app.run();

	}

	/*
	 * Loads the information of a Catalog object.
	 */
	private static Catalog load ()  {

		Catalog catalog = new Catalog();

		catalog.addItem(new Book("B001", "Effective Java Programming", 2001,
		                         "Joshua Bloch", 252));
		catalog.addItem(new Book("B002", "Design Patterns", 1995,
		                         "Erich Gamma et al", 395));
		catalog.addItem(new Book("B003", "Refactoring", 1999,
		                         "Martin Fowler", 431));
		catalog.addItem(new Book("B004", "The Mythical Man-Month", 1995,
		                         "Frederick P. Brooks", 322));
		catalog.addItem(new Book("B005", "Code Complete", 1993,
		                         "Steve C McConnell", 857));
		catalog.addItem(new Book("B006", "The Psychology of Comp. Progr.", 1998,
		                         "Gerald M. Weinberg", 360));
		catalog.addItem(new Book("B007", "Programming Pearls ", 1999,
		                         "Jon Bentley", 239));
		catalog.addItem(new Book("B008", "The Practice of Programming", 1999,
		                         "Brian W. Kernighan", 257));
		catalog.addItem(new Book("B009", "Peopleware", 1999,
		                         "Tom Demarco", 245));
		catalog.addItem(new Book("B010", "The Java Programming Language", 2000,
		                         "Ken Arnold", 595));
		catalog.addItem(new Book("B011", "Core J2EE Patterns", 2001,
		                         "Deepak Alur", 496));
		catalog.addItem(new Book("B012", "Rapid Development", 1996,
		                         "Steve C McConnell", 680));
		catalog.addItem(new Book("B013", "Applying UML and Patterns", 2001,
		                         "Craig Larman", 656));
		catalog.addItem(new Book("B014", "The Little Schemer", 1995,
		                         "Daniel P. Friedman", 216));
		catalog.addItem(new Book("B015", "Agile Software Development", 2001,
		                         "Alistair Cockburn", 256));

		catalog.addItem(new Recording("R001", "Getz/Gilberto", 1963,
		                              "Stan Getz and Joao Gilberto", "CD"));
		catalog.addItem(new Recording("R002", "Kind of Blue", 1997,
		                              "Miles Davis", "CD"));
		catalog.addItem(new Recording("R003", "Supernatural", 1999,
		                              "Santana", "Tape"));
		catalog.addItem(new Recording("R004", "Private Collection", 1983,
		                              "Jon & Vangelis", "Tape"));
		catalog.addItem(new Recording("R005", "Abbey Road", 1969,
		                              "Beatles", "CD"));
		catalog.addItem(new Recording("R006", "Joshua Tree", 1990,
		                              "U2", "CD"));

		return catalog;
	}

	/*
	 * Loads a BorrowerDatabase object.
	 */
	private static BorrowerDatabase load(Catalog catalog) {

		BorrowerDatabase borrowerDB = new BorrowerDatabase();

		Borrower borrower = new Borrower("ID001", "James Addy");

		borrower.getBorrowedItems().addItem(catalog.getItem("B003"));
		borrower.getBorrowedItems().addItem(catalog.getItem("R001"));
		borrower.getBorrowedItems().addItem(catalog.getItem("B012"));
		borrowerDB.addBorrower(borrower);

		borrower = new Borrower("ID002", "John Doust");
		borrowerDB.addBorrower(borrower);

		borrower = new Borrower("ID003", "Constance Foster");
		borrower.getBorrowedItems().addItem(catalog.getItem("B006"));
		borrowerDB.addBorrower(borrower);

		borrower = new Borrower("ID004", "Harold Gurske");
		borrower.getBorrowedItems().addItem(catalog.getItem("B002"));
		borrowerDB.addBorrower(borrower);

		borrower = new Borrower("ID005", "Mary A. Rogers");
		borrowerDB.addBorrower(borrower);

		borrower = new Borrower("ID006", "Laura Novelle");
		borrower.getBorrowedItems().addItem(catalog.getItem("B007"));
		borrower.getBorrowedItems().addItem(catalog.getItem("B009"));
		borrowerDB.addBorrower(borrower);

		borrower = new Borrower("ID007", "David M. Prescott");
		borrower.getBorrowedItems().addItem(catalog.getItem("B011"));
		borrowerDB.addBorrower(borrower);

		borrower = new Borrower("ID008", "Francis Matthews");
		borrower.getBorrowedItems().addItem(catalog.getItem("R003"));
		borrower.getBorrowedItems().addItem(catalog.getItem("B005"));
		borrowerDB.addBorrower(borrower);

		borrower = new Borrower("ID009", "Thomas Ferris");
		borrowerDB.addBorrower(borrower);

		borrower = new Borrower("ID010", "John Johnson");
		borrower.getBorrowedItems().addItem(catalog.getItem("B004"));
		borrowerDB.addBorrower(borrower);

		return borrowerDB;
	}

	/*
	 * Constructs a <code>LibrarySystem</code> object.
	 * Initialize the catalog and the borrower database with
	 * the values specified in the parameters.
	 */
	private LibrarySystem(Catalog initialCatalog,
	                      BorrowerDatabase initialBorrowerDB) {

		this.catalog = initialCatalog;
		this.borrowerDB = initialBorrowerDB;
	}

	/*
	 * Presents the user with a menu of options and processes the selection.
	 */
	private void run() throws IOException  {

		int  choice = getChoice();

		while (choice != 0)  {

			if (choice == 1)  {
				displayCatalog();
			} else if (choice == 2)  {
				displayCatalogItem();
			} else if (choice == 3)  {
				displayBorrowerDatabase();
			} else if (choice == 4)  {
				displayBorrower();
			} else if (choice == 5)  {
				checkOut();
			} else if (choice == 6)  {
				checkIn();
			}

			choice = getChoice();
		}
	}

	/* Validates the user's choice. */
	private int  getChoice() throws IOException  {

		int  input;

		do  {
			try  {
				stdErr.println();
				stdErr.print("[0]  Quit\n"
				             + "[1]  Display catalog\n"
				             + "[2]  Display catalog item\n"
				             + "[3]  Display borrowers\n"
				             + "[4]  Display borrowed items\n"
				             + "[5]  Check out\n"
				             + "[6]  Check in\n"
				             + "choice> ");
				stdErr.flush();

				input = Integer.parseInt(stdIn.readLine());

				stdErr.println();

				if (0 <= input && 6 >= input)  {
					break;
				} else {
					stdErr.println("Invalid choice:  " + input);
				}
			} catch (NumberFormatException  nfe)  {
				stdErr.println(nfe);
			}
		}  while (true);

		return  input;
	}

	/*
	 * Displays the catalog.
	 */
	private void displayCatalog() {

		int numberOfItems = this.catalog.getNumberOfItems();

		if (numberOfItems == 0) {
			stdErr.println("The catalog is empty");
		} else {
			for (Iterator i = catalog.getItemsIterator();
				i.hasNext();) {

				CatalogItem item = (CatalogItem) i.next();

				stdOut.println(item.getCode() + " " + item.getTitle() + " "
				               + (item.isAvailable()? "(A)" : "(NA)"));
			}
		}
	}

	/*
	 * Displays a catalog item.
	 */
	private void displayCatalogItem()  throws IOException  {

		CatalogItem item = readCatalogItem();

		if (item != null) {
			stdOut.println("  Title: " + item.getTitle());
			stdOut.println("  Year: " + item.getYear());
			if (item instanceof Book) {

				Book book = (Book) item;

				stdOut.println("  Author: " + book.getAuthor());
				stdOut.println("  Number of pages: " + book.getNumberOfPages());
			} else if (item instanceof Recording) {

				Recording recording = (Recording) item;

				stdOut.println("  Performer: " + recording.getPerformer());
				stdOut.println("  Format: " + recording.getFormat());
			}
			stdOut.println("  Status: "
			               + (item.isAvailable() ? "Available" : "Not available"));
		} else {
			stdErr.println("There is no catalog item with that code");
		}
	}

	/*
	 * Displays the borrower database.
	 */
	private void displayBorrowerDatabase() {

		if (borrowerDB.getNumberOfBorrowers() == 0) {
			stdErr.println("The database of borrowers is empty");
		} else {
			for (Iterator i = borrowerDB.getBorrowersIterator();
				i.hasNext();) {

				Borrower borrower = (Borrower) i.next();

				stdOut.println(borrower.getId() + " " +	borrower.getName());
			}
		}
	}

	/*
	 * Displays a borrower.
	 */
	private void displayBorrower()  throws IOException  {

		Borrower borrower = readBorrower();

		if (borrower != null) {

			stdOut.println("  Name: " + borrower.getName());

			BorrowedItems borrowedItems = borrower.getBorrowedItems();

			if (borrowedItems.getNumberOfItems() == 0) {
				stdOut.println("  No items borrowed");
			} else {
				stdOut.println("  Items Borrowed:");
				for (Iterator i = borrowedItems.getItemsIterator();
				     i.hasNext();) {

					CatalogItem item = (CatalogItem) i.next();

					stdOut.println("    " + item.getCode() + " " + item.getTitle());
				}
			}
		} else {
			stdErr.println("There is no borrower with that id");
		}
	}

	/*
	 * Registers the loan of a item to a borrower.
	 */
	private void checkOut()  throws IOException  {

		CatalogItem item = readCatalogItem();

		if (item == null) {
			stdErr.println("There is no catalog item with that code");
		} else if (item.isAvailable()) {

			Borrower borrower = readBorrower();

			if (borrower == null) {
				stdErr.println("There is no borrower with that id");
			} else {
				borrower.getBorrowedItems().addItem(item);
				stdOut.println("The item " + item.getCode()
				               + " has been check out by " + borrower.getId());
			}
		} else {
			stdErr.println("The item " +  item.getCode() +
				" is not available");
		}
	}

	/*
	 * Registers the return of a item.
	 */
	private void checkIn()  throws IOException  {

		CatalogItem item = readCatalogItem();

		if (item == null) {
			stdErr.println(
				"There is no catalog item with that code");
		} else if (item.isAvailable()) {
			stdErr.println("The item " +  item.getCode() + " is not borrowed");
		} else {

			Borrower borrower = readBorrower();

			if (borrower == null) {
				stdErr.println("There is no borrower with that id");
			} else {
				borrower.getBorrowedItems().removeItem(item);
				stdOut.println("The item " +  item.getCode()
				               + " has been returned");
			}
		}
	}

	/*
	 * Obtains a CatalogItem object  .
	 */
	private  CatalogItem readCatalogItem() throws IOException  {

		stdErr.print("Catalog item code> ");
		stdErr.flush();

		return this.catalog.getItem(stdIn.readLine());
	}

	/*
	 * Obtains a Borrower object  .
	 */
	private  Borrower readBorrower()  throws IOException  {

		stdErr.print("Borrower id> ");
		stdErr.flush();

		return this.borrowerDB.getBorrower(stdIn.readLine());
	}
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -