较于基础版的特点:
1、 使用抽象类来实现图书管理系统的方法
2、使用子类继承父类(抽象类)来重写父类的抽象方法
3、使用IO流对图书的基本数据进行管理
package LibraryManagementSystemV2; /** * 图书馆管理系统升级版 * @author 李*文 * @version 1.8 * @date 2019年8月9日 上午9:43:51 * @content JAVA代码 * @motto 代码千万条,可读第一条。代码不规范,error多两行。 */ public class Book { private String bookId;//图书的编号 private String bookName;//图书的名称 private String isbn;//图书的出版号 private String type;//图书的类型 private String author;//图书的作者 private String publisher;//图书的出版社 private int price;//图书的价格 private int bookCount;//图书的库存量 //生成构造方法 public Book(){ } public Book(String bookName,String bookId,int price,int bookCount ){ this.setBookCount(bookCount); this.setBookName(bookName); this.setPrice(price); this.setBookId(bookId); } //生成相关的方法 /** * 重写equals方法 判断图书编号是否相等 */ @Override public boolean equals(Object obj) { /** 传入的图书对象为空 或者传入的对象不再对象数组中*/ if(obj==null||!(obj instanceof Book) ) { return false; } Book book=(Book)obj; return (this.getBookId().equals(book.bookId)); } /** * 重写toString方法 输出对象的基本信息 */ @Override public String toString() { return "\t"+this.getBookName()+"\t"+ this.getBookId()+"\t"+ this.getPrice()+"\t"+ this.getBookCount(); } public String getBookId() { return bookId; } public void setBookId(String bookId) { this.bookId = bookId; } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getPublisher() { return publisher; } public void setPublisher(String publisher) { this.publisher = publisher; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public int getBookCount() { return bookCount; } public void setBookCount(int bookCount) { this.bookCount = bookCount; } }
package libraryManagementSystemV2; /** * 图书的仓库 升级之后使用IO流进行图书数据的管理 * @author 李*文 * @version 1.8 * @date 2019年8月9日 上午9:45:29 * @content JAVA代码 * @motto 代码千万条,可读第一条。代码不规范,error多两行。 */ public class BookDatabase { public static Book []bookStroe=new Book[99]; public static Book book[]=new Book[9]; static{ //在程序启动会就进行初始化 Book book1=new Book("《活着》","123",54,56); Book book2=new Book("《兄弟》","124",66,33); Book book3=new Book("《国画》","125",34,46); Book book4=new Book("《目送》","126",59,97); Book book5=new Book("《救赎》","127",76,88); book[0]=book1; book[1]=book2; book[2]=book3; book[3]=book4; book[4]=book5; FileUtil.fileSave(BookDatabase.book); bookStroe=FileUtil.loaderFile(); } }
package libraryManagementSystemV2; /** * 图书管理系统的基础功能 * @author 李志文 * @version 1.8 * @date 2019年8月9日 上午9:50:12 * @content JAVA代码 * @motto 代码千万条,可读第一条。代码不规范,error多两行。 */ public class BookBiz { //获得图书 入库 出库 删除图书 查询 排序 /** * 仓库图书数量的计算 * @return 图书的数量 */ public static int getbookCount() { int count=0; for (Book i:BookDatabase.bookStroe) { if(i!=null) count++; else break; } return count; } /** * 进行图书的 新增操作 * @param book 实例化的图书对象 * @return 是否添加成功 */ public static boolean addBook(Book book) { int count=getbookCount(); if(count==BookDatabase.bookStroe.length) { return false;//图书仓库已满 } else { //进行入库 BookDatabase.bookStroe[count]=book; } return true; } /** * 图书的删除 * @param book 传入的图书的实例化的对象 * @return 是否删除成功 */ public static boolean delBook(Book book) { //查询仓库中是否存在此图书 int bookCount=getbookCount(); int index=-1;//定位要删除图书在数组中的下标 int i=-1; for (i = 0; i <bookCount; i++) { if(book.equals(BookDatabase.bookStroe[i])) { index=i; break; } } if(i==bookCount) return false;//查找失败 else { //进行对象数组元素的删除 for(int j=index;j<bookCount-1;j++) { BookDatabase.bookStroe[i]=BookDatabase.bookStroe[i+1]; } BookDatabase.bookStroe[bookCount-1] =null; } return true; } /** * 图书编号的查询 * @param bookId 图书的编号 * @return 图书的实例化对象 */ public static Book searchBook(String bookId) { //需要知道数组的实际的数据的数量 避免空指针异常 int bookCount = getbookCount(); for(int i = 0; i < bookCount; i++){ if(bookId.equals(BookDatabase.bookStroe[i].getBookId())){ return BookDatabase.bookStroe[i]; } } return null; } /** * 将书籍进行入库操作 * @param bookId 图书的编号 * @param count图书的数量 * @return 书籍是否入库成功 */ public static boolean inStore(String bookId,int count) { Book book=searchBook(bookId); if(book==null) { return false; } else { book.setBookCount(book.getBookCount()+count); } return true; } /** * 书籍出库操作 * @param boookId 图书的编号 * @param count 预计出库图书的数量 * @return 是否出库成功 */ public static boolean outStore(String bookId,int count) { Book book=searchBook(bookId); if(book==null) { return false; } else if(book.getBookCount()<count) { return false; } else { //减少库存 book.setBookCount(book.getBookCount()-count); return true; } } /** * @param bookId 图书的编号 * @return 单一图书的数量 */ public static int getsingleBookCount(String bookId) { int count=BookBiz.getbookCount(); int index=-1; int i=0; for( i=0;i<count;i++) { if(bookId.equals(BookDatabase.bookStroe[i].getBookId())) { index=i; break; } } if(i==count) { return -1; } else { return BookDatabase.bookStroe[index].getBookCount(); } } /** * 计算管内图书的总数 * @return 图书总数 */ public static int bookTotalCount() { int count=0; int totalCount=0; count=BookBiz.getbookCount(); for (int i=0;i<count;i++) { totalCount+=BookDatabase.bookStroe[i].getBookCount(); } return totalCount; } /** * 显示图书的信息和仓库图书的信息 * @param arrayBook Book数组 */ public static void showBook(Book ...arrayBook) { if(arrayBook==null) { for (Book book : BookDatabase.bookStroe) { System.out.println("\t名称\t编号\t价格\t数量"); System.out.println("\t"+book.getBookName()+"\t"+ book.getBookId()+"\t"+ book.getPrice()+"\t"+ book.getBookCount()); } } else { for (int i = 0; i < arrayBook.length; i++) { System.out.println("\t名称\t编号\t价格\t数量"); System.out.println("\t"+arrayBook[i].getBookName()+"\t"+ arrayBook[i].getBookId()+"\t"+ arrayBook[i].getPrice()+"\t"+ arrayBook[i].getBookCount()); } } } }
package libraryManagementSystemV2; import java.util.Scanner; /** * 抽象类的创建 用继承父类的子类实现父类的相关操作 * @author 李*文 * @version 1.8 * @date 2019年8月9日 上午11:39:39 * @content JAVA代码 * @motto 代码千万条,可读第一条。代码不规范,error多两行。 */ public abstract class AbstractBookView { //创建构造方法 public AbstractBookView() { Scanner input=new Scanner(System.in); BookBiz bookBiz=new BookBiz(); } public void Menuview(){ showMainMenu(); while(true){ String choice=null; Scanner input=new Scanner(System.in); System.out.print("请您输入你的选择:"); choice=input.next(); switch (choice) { case "1": addBookView(); break; case "2": inStoreView(); break; case "3": outStoreView(); break; case "4": searchBookView(); break; case "5": delBookView(); break; case "6": getBookCountView(); break; case "7": showbookStore(); break; case "8": getbookTotalCount(); break; case "@": System.out.println("系统已经成功退出!"); System.exit(0); break; case "#":showMainMenu(); break; default: System.out.println("选择输入违法,请重新输入!-(y/n)"); choice=input.next(); if("y".equals(choice)) { showMainMenu(); } else { System.out.println("系统安全退出!"); System.exit(0); } break; } } } public abstract void showMainMenu(); /** * 显示图书仓库的所有图书的信息 */ public abstract void showbookStore(); /** * 新增书籍的方法 * 要先判断书籍是否已经存在 */ public abstract void addBookView(); /** * 图书的入库操作 */ public abstract void inStoreView(); /** * 图书的出库操作 */ public abstract void outStoreView(); /** * 图书的查询 */ public abstract void searchBookView(); /** *图书的删除 */ public abstract void delBookView(); /** *得到图书的数量 */ public abstract void getBookCountView(); /** *计算管内图书的总数 */ public abstract void getbookTotalCount(); }
package libraryManagementSystemV2; import java.util.Scanner; /** * 使用继承的方法-那你用其子类实现抽象类父类的方法 * @author 李*文 * @version 1.8 * @date 2019年8月9日 上午10:24:45 * @content JAVA代码 * @motto 代码千万条,可读第一条。代码不规范,error多两行。 */ public class BookView extends AbstractBookView { BookBiz bookBiz = null; Book book = null; Scanner input = null; String choice = null;// 用户的选择 String name = null;// 图书的名称 String bookId = null;// 图书的编号 int price = -1;// 图书的价格 int count = -1;// 图书的库存 public BookView() {// 无参构造 bookBiz = new BookBiz();// 实例化对象 book = new Book(); input = new Scanner(System.in); view(); } /** * 显示登陆页面 */ public void view() { System.out.println("\t*******************************************\t"); System.out.println(); System.out.println("\t\t*****1-登录到图书管系统*****\t\t"); System.out.println("\t\t*****2-退出图书管系统*******\t\t"); System.out.println(); System.out.println("\t*******************************************\t"); System.out.print("请输入你的选择:"); choice = input.next(); if ("1".equals(choice)) { System.out.println("欢迎进入解忧图书馆"); Menuview(); } else if ("2".equals(choice)) { System.out.println("成功从解忧图书馆退出"); System.exit(0); } else { System.out.println("选择输入违法,请输入y/n,重新进入系统"); choice = input.next(); if (choice.equals("y")) { view(); } else { System.exit(0); } } } /** * 显示主菜单 */ @Override public void showMainMenu() { System.out.println("\t\t*******1、新增书籍*******\t\t"); System.out.println("\t\t*******2、书籍入库*******\t\t"); System.out.println("\t\t*******3、书籍出库*******\t\t"); System.out.println("\t\t*******4、书籍查询*******\t\t"); System.out.println("\t\t*******5、删除书籍*******\t\t"); System.out.println("\t\t*******6、单个图书数量***\t\t"); System.out.println("\t\t*******7、图书仓库*******\t\t"); System.out.println("\t\t*******8、图书总数*******\t\t"); System.out.println("\t\t*******#、返回主菜单*****\t\t"); System.out.println("\t\t*******@、退出系统*******\t\t"); } /** * 进行图书信息的输出 */ @Override public void showbookStore() { System.out.println("图书仓库中的书籍:"); System.out.println("\t名称\t编号\t价格\t数量"); for (int i = 0; i < BookBiz.getbookCount(); i++) { System.out.println("\t" + BookDatabase.bookStroe[i].getBookName() + "\t" + BookDatabase.bookStroe[i].getBookId() + "\t" + BookDatabase.bookStroe[i].getPrice() + "\t" + BookDatabase.bookStroe[i].getBookCount()); } } /** * 新增图书 */ @Override public void addBookView() { System.out.print("请输入图的编号:"); bookId = input.next(); /** 进行书籍编号的查询 */ if (BookBiz.searchBook(bookId) != null) { // 该图书在图书仓库中已经存在 System.out.println("书籍在仓库中已经存在,新增图书失败!"); return; } book.setBookId(bookId); System.out.print("请输入图书的名称:"); name = input.next(); book.setBookName(name); System.out.print("请输入图书价格:"); price = input.nextInt(); book.setPrice(price); System.out.print("请输入图书的数量:"); book.setBookCount(input.nextInt()); // 进行书籍的入库操作 BookBiz.addBook(book); System.out.println("书籍新增成功!"); } /** * 图书入库 */ @Override public void inStoreView() { System.out.print("请输入要入库图书的编号:"); String bookId = input.next(); System.out.print("请输入要入库的数量:"); int count = input.nextInt(); boolean isInStore = BookBiz.inStore(bookId, count); if (isInStore == true) { System.out.println("入库成功!"); } else { System.out.println("入库失败!"); } } /** * 图书出库 */ @Override public void outStoreView() { System.out.print("请输入要出库图书的编号:"); String bookId = input.next(); System.out.print("请输入要出库图书的数量:"); int count = input.nextInt(); boolean isOutStore = BookBiz.outStore(bookId, count); if (isOutStore == true) { System.out.println("出库成功!"); } else { System.out.println("出库失败!"); } } /** * 图书的查询 */ @Override public void searchBookView() { System.out.print("请输入图书的编号:"); String bookId = input.next(); Book newBook = new Book(); newBook = BookBiz.searchBook(bookId); if (newBook == null) { System.out.println("要查询的图书没有找到!"); } else { System.out.println("查询成功!"); System.out.println("\t名称\t编号\t价格\t数量"); System.out.println("\t" + newBook.getBookName() + "\t" + newBook.getBookId() + "\t" + newBook.getPrice() + "\t" + newBook.getBookCount()); } } /** * 图书的删除 */ @Override public void delBookView() { System.out.print("请输入要删除图书的编号:"); String bookId = input.next(); Book book = new Book(); book.setBookId(bookId); boolean isdelBook = BookBiz.delBook(book); if (isdelBook == true) { System.out.println("成功删除!"); } else { System.out.println("删除失败!"); } } /** * 查询单个种类图书的数量 */ @Override public void getBookCountView() { System.out.print("请输入图书的编号:"); String bookId = input.next(); int result = BookBiz.getsingleBookCount(bookId); if (result == -1) { System.out.println("该图书不存在,无法查询其数量!"); } else { System.out.println("该书的数量为:" + result); } } /** * 查询管内图书数量 */ @Override public void getbookTotalCount() { System.out.println("管内图书的总数为:" + BookBiz.bookTotalCount()); } }
package libraryManagementSystemV2; import java.io.IOException; /** * 系统的测试- 程序的入口 * @author 李志文 * @version 1.8 * @date 2019年8月9日 上午11:37:39 * @content JAVA代码 * @motto 代码千万条,可读第一条。代码不规范,error多两行。 */ public class BookTest { public static void main(String[] args) throws IOException { AbstractBookView bookView =new BookView();//子类实现父类 } }
package libraryManagementSystemV2; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; /** * 创建一个IO类 来进行图书信息在文件之间的输入输出 * * @author 李志文 * @version 1.8 * @date 2019年8月9日 下午12:00:32 * @content JAVA代码 * @motto 代码千万条,可读第一条。代码不规范,error多两行。 */ public class FileUtil { /** 文件的路径 */ private static final String filePath = "c://test/bookDataBase.txt"; /** 图书属性追加字符串时使用的分隔符 */ private static final String sepAttr = ","; /** 一行信息信息结束的换行符 */ private static final String sepLine = System.getProperty("line.separator"); public BookBiz bookBiz = new BookBiz(); public static void fileSave(Book...bookArray) { File file=new File(filePath); BookBiz bookBiz=new BookBiz(); StringBuffer content=new StringBuffer(); FileOutputStream outputStream=null; BufferedOutputStream bOut=null; if(bookArray==null||bookArray.length==0) { System.out.println("传入的图书对象数组有误!"); return; } //对数组进行字符串的追加 int count=5; // System.out.println(count); //int count=BookBiz.getbookCount(); if(!file.exists()) { try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } for(int i=0;i<count;i++) { content.append(bookArray[i].getBookId()); content.append(sepAttr); content.append(bookArray[i].getBookName());content.append(sepAttr); content.append(bookArray[i].getPrice());content.append(sepAttr); content.append(bookArray[i].getBookCount());content.append(sepLine); } try { outputStream=new FileOutputStream(file,false); } catch (FileNotFoundException e) { e.printStackTrace(); } try { bOut=new BufferedOutputStream(outputStream); bOut.write(content.toString().getBytes()); } catch (IOException e) { e.printStackTrace(); } try { bOut.close(); } catch (IOException e) { e.printStackTrace(); } try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } //进行文件的读取操作 public static Book[] loaderFile () { File file=new File(filePath); FileReader reader=null; BufferedReader bReader=null; Book []bookArray=new Book[99];//最多存入99个对象 int count=0;//记录对象的个数 if(!file.exists()) { System.out.println("文件不存在,加载失败!"); return null; } String line=null; try { reader=new FileReader(file); bReader=new BufferedReader(reader); } catch (FileNotFoundException e) { e.printStackTrace(); } try { while((line=bReader.readLine())!=null) { Book book=new Book(); //将读取的一行以分隔符进行读取 String []str=line.split(sepAttr); book.setBookId(str[0].trim());//去除多余的空格 book.setBookName(str[1].trim()); book.setPrice(Integer.parseInt(str[2].trim())); book.setBookCount(Integer.parseInt(str[3].trim())); bookArray[count++]=book; } } catch (IOException e) { e.printStackTrace(); } return bookArray; } }