资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
基于基于 java 的图书馆管理系统设计报告源代码的图书馆管理系统设计报告源代码用 Java 模拟一个图书馆。包括创建图书、创建读者、借书、还书、列出所有图书、列出所有读者、列出已借出的图书、列出过期未还的图书等功能。每个读者最多只能借 3 本书,每个书最多只能借 3 个星期,超过就算过期。 下面是一个命令行下的实现。这个例子的主要目的是向初学者展示内部类的好处。Command 及其子类都是 LibrarySimulator 的内部类。它们可以无阻碍的访问 LibrarySimulator 的成员。使用内部类,而不是大量的 if-else,让程序更容易扩展。view plaincopy to clipboardprint?import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.text.SimpleDateFormat; import java.util.*; /* 一个图书馆的课程设计。主要功能:* 1. 创建图书* 2. 创建读者* 3. 借书* 4. 还书* 5. 列出所有书* 6. 列出已借书* 7. 列出超过日期未还的书*/public class LibrarySimulator / 主菜单 private static final String MAIN_MENU = “1. 列出所有的书n“ + “2. 列出已借出的书n“ + “3. 列出过期未还的书n“ + “4. 列出所有读者n“ + “5. 创建图书n“ + “6. 创建读者n“ + “7. 借书n“ + “8. 还书n“ + “9. 退出n“ + “请输入序号:“; / 选择图书类型的菜单。在借书和添加图书的时候都会用到 private static final String TYPE_MENU; / 表示一个数字的正则表达式 private static final String DIGIT_CHOICE_PATTERN = “d$“; / 表示非空字符串 private static final String NOT_EMPTY_PATTERN = “S.*“; / 日期格式 static final String DATE_PATTERN = “yyyy/MM/dd“; / 验证用户输入日期的正则表达式 static final String DATE_FORMAT_PATTERN = “d4/d2/d2$“; / 预定义的图书类型 static HashMap TYPES = new LinkedHashMap(); static TYPES.put(“1“, “科学类“); TYPES.put(“2“, “文学类“); / 新的类别可以继续在后面添加 TYPE_MENU = createTypeMenu(); / 生成选择类别的菜单 private static String createTypeMenu() String str = “; for (String index : TYPES.keySet() str += index + “. “ + TYPES.get(index) + “n“; return str + “请选择书的类型:“; private HashMap commands = new HashMap(); private ArrayList books = new ArrayList(); private ArrayList readers = new ArrayList(); / 程序入口。这里创建一个 LibrarySimulator 用于模拟界面。 public static void main(String args) new LibrarySimulator().start(); /* 构造函数*/public LibrarySimulator() commands.put(1, new Command1(); commands.put(2, new Command2(); commands.put(3, new Command3(); commands.put(4, new Command4(); commands.put(5, new Command5(); commands.put(6, new Command6(); commands.put(7, new Command7(); commands.put(8, new Command8(); /* 这里接受用户输入,执行操作,然后再等待用户输入,这样不停的循环。*/private void start() String index = prompt(MAIN_MENU, DIGIT_CHOICE_PATTERN); while (!index.equals(“9“) executeCommand(index); index = prompt(MAIN_MENU, DIGIT_CHOICE_PATTERN); / 根据序号执行命令 private void executeCommand(String index) Command command = commands.get(Integer.parseInt(index); if (command != null) String result = command.execute(); System.out.println(result + “n“); / 打印一条提示信息,然后读取并返回用户输入 private String prompt(String message, String pattern) System.out.print(message); if (pattern = null) return readInput(); else String result = “; while (!result.matches(pattern) result = readInput(); return result; / 读取用户输入 private String readInput() try BufferedReader reader = new BufferedReader(new InputStreamReader(System.in); return reader.readLine(); catch (IOException e) e.printStackTrace(); return “; / 根据名字查找读者。找不到则返回 null。 private Reader getReaderByName(String readerName) for (Reader reader : readers) if (reader.getName().equals(readerName) return reader; return null; / 根据名字查找图书。找不到则返回 null。 private Book getBookByName(String bookName) for (Book book : books) if (book.getName().equals(bookName) return book; return null; /*=*/* 代表命令的抽象类*/private abstract class Command protected abstract String execute(); / 列出所有图书 private class Command1 extends Command protected String execute() for (Book book : getBooks() System.out.println(book); / 这里会自动调用 book.toString() return “命令完成。“; private ArrayList getBooks() ArrayList result = new ArrayList(); for (Book book : books) if (isValid(book) result.add(book); return result; / 考虑到第 1、2、3 条命令大体相同,这里提供了一个给子类覆写的方法 protected boolean isValid(Book book) return true; / 列出已借出的书。 / 注意它的父类不是 Command,而是 Command1。这样节省了很多重复代码 private class Command2 extends Command1 Overrideprotected boolean isValid(Book book) return book.isBorrowed(); / 列出过期未还的书 private class Command3 extends Command1 Overrideprotected boolean isValid(Book book) / 判断一本书接触过期与否的方法最好在 Book 类中去实现。 return book.isExpired(); / 创建图书
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号