图书管理系统升级版(V2)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_44213634/article/details/98972058

较于基础版的特点:

     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;
	 }
	
}

猜你喜欢

转载自blog.csdn.net/qq_44213634/article/details/98972058