图书管理系统再升级版(V3)


 系统功能:

  • 用户密码和账号的的验证
  • 使用接口来实现图书业务功能(新增图书、删除图书、根据图书的编号查询图书、出库、入库)和用户的使用功能
  • 使用IO流实现图书基础信息和用户对象在文件中的输入输出(序列化)
  • 使用配置文件来验证登录者的在系统中的角色(超级管理员、操作员、用户)来分配相应的系统使用权限
  • 使用集合map来保存图书的基本信息,并作为IO流输入输出的对象,使用集合set储存用户对象
  • 视图的基本功能:根据登陆者的角色的不同,显示不同的功能页面(未全部实现)
  • 。。。
package  LibraryManagementSystemV3;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * 进行图书对象信息的封装--对每一类的图书进行存放
 * 与图书的对应关系是多对一的关系
 * 可以想图书信息库中添加书籍的条件是 isbn相同 && bookId不相同
 * @author 李志文
 * @version 1.8
 * @date 2019年8月14日 上午9:18:57
 * @content JAVA代码
 * @motto 代码千万条,可读第一条。代码不规范,error多两行。
 */
public class BookInfo implements Serializable{
	private static final long serialVersionUID = -146632597963102188L;
	//进行图对象的序列化
     private String isbn;//图书的编号(内部)
     private String name;//图书的名称
     private String author;//作者
     private String Publisher;//发布者
     private  int  inStoreCount;//管藏量
     private double price;//图书的价格
     private Date publishDate;
     //定义构造方法 重写toString 和equals方法
     //创建一个集合来保存同一编号的书籍的信息
     //私有属性只能通过get、set那你进行赋值 
     //或者构造方法进行赋值
      private List<Book> bookList;

	public  void add(Book book)
       {  
		  if(bookList==null)
            {
    	       bookList=new ArrayList<>();
            }
    	   if(book==null)
    		   return;
    	   //判断图书的类型是否存在
    	   if(!(book instanceof Book))
    	   {
    		   return;
    	   }
    	   //判断书籍的信息库中的isbn和传入的对象对应的isbn是否一致
    	   //判断是否是同类书籍
    	   if(!(this.isbn.equals(book.getIsbn())))
    	   {  
    		  
    		   return;
    	   }
    	   if(bookList.contains(book))
    		   return;
    	   //将传入的图书对象的信息输入到Book实体对应的bookinfo的属性中
    	      book.setBookinfo(this);
    	      //将对象添加到集合中去
    	       bookList.add(book);
    	   }
     public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getIsbn() {
		return isbn;
	}
	public void setIsbn(String isbn) {
		this.isbn = isbn;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getPublisher() {
		return Publisher;
	}
	public void setPublisher(String publisher) {
		Publisher = publisher;
	}
	public int getInStoreCount() {
		return inStoreCount;
	}
	public void setInStoreCount(int inStoreCount) {
		this.inStoreCount = inStoreCount;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public Date getPublishDate() {
		return publishDate;
	}
	public void setPublishDate(Date publishDate) {
		this.publishDate = publishDate;
	}
	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	
}
package  LibraryManagementSystemV3;

import java.io.Serializable;
/**
 * 实体的book类  用域图书信息的可视化和公开化
 * @author 李志文
 * @version 1.8
 * @date 2019年8月14日 上午9:55:19
 * @content JAVA代码
 * @motto 代码千万条,可读第一条。代码不规范,error多两行。
 */
public class Book implements Serializable{
	
	private static final long serialVersionUID = -7983098816579079561L;
	private  String isbn;
	private String bookId;//图书的编号(一一对应)
	private BookInfo bookinfo;
	//使用枚举类型来判断图书的可借状态
	  private  bookState state;
	  /**
	   * 重写equals方法来判断传入的图书对象是否适合添加到list数组中去
	   */
	  @Override
	public boolean equals(Object obj) {
		 if(obj==null)
			 return false;
		 if(obj instanceof Book)
			 return false;
		  Book book=(Book)obj;
		return this.getBookId().equals(book.getBookId());
	}
	public String getIsbn() {
		return isbn;
	}
	public void setIsbn(String isbn) {
		this.isbn = isbn;
	}
	public String getBookId() {
		return bookId;
	}
	public void setBookId(String bookId) {
		this.bookId = bookId;
	}
	public BookInfo getBookinfo() {
		return bookinfo;
	}
	public void setBookinfo(BookInfo bookinfo) {
		this.bookinfo = bookinfo;
	}
	public bookState getState() {
		return state;
	}
	public void setState(bookState state) {
		this.state = state;
	}
	
}
/**
 * 借书的状态
 * @author 李志文
 * @version 1.8
 * @date 2019年8月14日 上午10:02:21
 * @content JAVA代码
 * @motto 代码千万条,可读第一条。代码不规范,error多两行。
 */
enum bookState{
	  可借,
	 不可借,
	 缺货,
     损坏
}
package  LibraryManagementSystemV3;
import java.io.Serializable;
/**
 * 创建一个通用的接口-实相增删改查的相关操作(通用方法)
 * 使用泛型
 * @author 李志文
 * @version 1.8
 * @date 2019年8月14日 下午2:21:31
 * @content JAVA代码
 * @motto 代码千万条,可读第一条。代码不规范,error多两行。
 */
import java.util.Map;

public interface Biz<T> extends Serializable{
	/** 添加对应的元素*/
    public boolean add(T t);
    /** 删除对应的元素*/
    public boolean del(T t);
    /** 修改传入的元素  并返回修改好的元素*/
    public T update(T t);
    /** 根据传入的id进行查询 并返回对应的结果*/
    public T findByid(String id);
    /** 查询所有的信息 并发挥键值对*/
    public Map<String,T> findAll();
    
}
package  LibraryManagementSystemV3;

import  LibraryManagementSystemV3.BookInfo;

public interface BookInfoBiz extends Biz<BookInfo>{
	public BookInfo findByIsbn(String isbn);
	/**
	 * 出库
	 * @param isbn 图书的编号
	 * @param outCount 出库的数量
	 * @return 是否出库成功
	 */
   public boolean outStore(String isbn,int outCount);
   /**
    * 入库
    * @param isbn 图书的编号
    * @param inCount 入库的数量
    * @return 是否入库成功
    */
   public boolean inStore(String isbn,int inCount);






   
   
}
package  LibraryManagementSystemV3;

import java.util.Map;
import  LibraryManagementSystemV3.BookInfo;

public class BookInfoBizImpl implements BookInfoBiz{
//序列化的随机编号
private static final long serialVersionUID = -1074143200333136341L;
     /**
      * 向图书信息库中添加图书
      */
	@Override
	public boolean add(BookInfo bookInfo) {
		//1、从文件中获取所有的bookinfomap
		//2、将传入的bookinfo put进去
		//3、写回到文件中去
		
		if(bookInfo==null)
		{
			return false;
		}
		Map<String,BookInfo> bookInfoMap=findAll();
		
		if(bookInfoMap==null)
		{
			return false;
		}
		if(bookInfoMap.containsKey(bookInfo))
		{
			return false;
		}
		bookInfoMap.put(bookInfo.getIsbn(),bookInfo);
		//将其再写入到文件中去
		FileUtil.bookSaveMap(bookInfoMap);
		
		return true;
	}
      /**
       * 删除图书信息库中该类图书的所有信息
       */
	@Override
	public boolean del(BookInfo bookInfo) {
		if(null==bookInfo)
		{
			return false;
		}
		
		Map<String,BookInfo> bookInfoMap=findAll();
		if(bookInfoMap==null)
	      {
			return false;
	      }
		if(!(bookInfoMap.containsKey(bookInfo.getIsbn())))
		{
			return false;
		}
		 //将其进行删除操作
		 bookInfoMap.remove(bookInfo.getIsbn());
		 //再将其写入到文件中去
		  FileUtil.bookSaveMap(bookInfoMap);
		  
		  return true;
	}
       /***
        * 在图书信息库中修改该类图书的对应信息
        */
	@Override
	public BookInfo update(BookInfo bookInfo) {
		if(bookInfo==null)
		{
			return null;
		}
		Map<String,BookInfo> bookInfoMap=findAll();
		if(null==bookInfoMap)
		{
			return null;
		}
		if(!(bookInfoMap.containsKey(bookInfo.getIsbn())))
		{
			return null;
		}
		//重新进行put 到map中去
		bookInfoMap.put(bookInfo.getIsbn(),bookInfo);
		FileUtil.bookSaveMap(bookInfoMap);
		return bookInfo;
	}
       /**
        * 使用Id来实现图书信息的查询
        */
	@Override
	public BookInfo findByid(String id) {

		throw new UnsupportedOperationException("BookInfoBiz中不支持根据id来进行查询!");
	}

	   /**
	    * 从文件这种读取所有的类别的图书信息
	    */
	@Override
	public Map<String, BookInfo> findAll() {
		
		return FileUtil.bookReaderMap();
	}
      /**
       * 出库
       */
	@Override
	public boolean outStore(String isbn, int outCount) {
		BookInfo bookInfo=findByIsbn(isbn);
		if(bookInfo==null)
		 {
			return false;
		 }
	     //取出Map数组
		Map<String,BookInfo> bookInfoMap=findAll();
		  //出库数量违法
		if(bookInfo.getInStoreCount()<outCount)
		{
			  return false;
		}
		//进行出库
	 bookInfo.setInStoreCount(bookInfo.getInStoreCount()-outCount);
	      bookInfoMap.put(isbn, bookInfo);
	     //将其再写入到文件中去
	     FileUtil.bookSaveMap(bookInfoMap);
		  return true;
	}
      /**
       * 入库
       */
	@Override
	public boolean inStore(String isbn, int inCount) {
	      BookInfo bookInfo=findByIsbn(isbn);
	       if(bookInfo==null)
	       {
	    	   return false;
	       }
	    Map<String,BookInfo> bookInfoMap=findAll();
	    if(bookInfoMap==null)
	    {
	    	return false;
	    }	         
	    //进行入库操作
	       bookInfo.setInStoreCount(bookInfo.getInStoreCount()+inCount);
	       //放回到Map数组中去
	         bookInfoMap.put(isbn, bookInfo);
	        //写入到文件中去
	           FileUtil.bookSaveMap(bookInfoMap);
		  return true;
	}
      /**
       * 通过书籍编号进行查图书的相关的信息
       */
	@Override
	public BookInfo findByIsbn(String isbn) {
		if(isbn==null||"".equals(isbn)==true)
		{
			return null;
		}
		Map<String,BookInfo>bookInfoMap=findAll();
		if(bookInfoMap==null)
		{
			return null;
		}
		if(!(bookInfoMap.containsKey(isbn)))
		{
			return null;
		}
		     return bookInfoMap.get(isbn);
	}

}
package  LibraryManagementSystemV3;
import  LibraryManagementSystemV3.BookInfoBiz;
/**
 * 图书的角色类
 * @author 李志文
 * @version 1.8
 * @date 2019年8月15日 上午10:39:55
 * @content JAVA代码
 * @motto 代码千万条,可读第一条。代码不规范,error多两行。
 */

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class Role implements Serializable{
	
	private static final long serialVersionUID = 3348329615583361522L;
	private  String name;               //显示给用户的名称
	  private String key;                //对应配置文件中的权限key
	  private List<String> permissions; //权限集合-保存在配置文件中
	  private BookInfoBiz bookInfoBiz;
	  private UserBiz userBiz;
	    public Role()
	    {
	    	setName("默认角色");
	    	setKey("default");
	    bookInfoBiz=new BookInfoBizImpl();
	    userBiz=new UserBizImpl();
	    	CreatePermissions(key);
	    }
	    public Role(String name,String key)
	    {
	    	this.setName(name);
	    	this.setKey(key);
	    	bookInfoBiz=new BookInfoBizImpl();
	    	 userBiz=new UserBizImpl();
	    	CreatePermissions(key);
	    	System.out.println("角色"+name+"拥有以下权限:");
	    	for (String permission : permissions) {
				System.out.println(permission+",");
			}
	    	System.out.println();
	    }
	     
		private void CreatePermissions(String key) {
			Properties props=new Properties();
	    	try {
				props.load(Role.class.getResourceAsStream("FIle_permission.properties"));
			} catch (IOException e) {
				
				e.printStackTrace();
			}
	    	//通过权限key拿到对应的权限字符串
	    	String strPermission=props.getProperty(key);
	    	if(null==permissions)
	    	{
	    		permissions=new ArrayList<>();
	    	}
	    	permissions.clear();
	    	String []permissionArray=strPermission.split(",");
	    	for (String permission : permissionArray) {
				if("".equals(permission))
					continue;
				permissions.add(permission.trim());
			}
		}
		/**
		 * 判断是否有权限执行传入点的 该操作方法点的名称
		 * @param optName 操作方法的名称
		 * @return 是否可以使用该名称
		 */
		private boolean checkPermission(String optName)
		{  
			if(permissions==null||permissions.size()==0)
			{
				return false;
			}
			for(String permission:permissions)
			{
				if(optName.equals(permission))
				{
					return true;
				}
				if(permission.equals("bookinfobiz.*")&&optName.startsWith("bookinfobiz"))
				{
					return true;
				}
				if(permission.equals("userbiz.*")&&optName.startsWith("userbiz"))
				{
					return true;
				}
		    }
			return false;
		}
		/**
		 * 确认权限后再入库
		 * @param isbn 书籍的编号
		 * @param InCount 书籍入库的数量
		 * @return 是否入库成功
		 */
		public  boolean inStore(String isbn,int InCount)
		{
			if(checkPermission("bookinfobiz.instore")==true)
			{
			   bookInfoBiz.inStore(isbn, InCount);
			  
			        return true;
			}
			else
			{
				throw new NosuchpermissionException(name+"没有操作<bookinfobiz.instore>的权限");
			}
			
		}
		 /**
		  * 判断用户登录是否合法
		  * @param user 传入的用户对象
		  * @return 是否可以登录
		  */
		public User login(User user)
		{
			if(checkPermission("userbiz.login")==true)
			{
			  return userBiz.login(user);
			}
			else
			{
				throw new NosuchpermissionException(name+"没有操作<userbiz.login>的权限");
			}
		}
		/**
		 * 确认身份后进行出库操作
		 * @param isbn 书籍的编号
		 * @param InCount 书籍出库的数量
		 * @return 是否出库成功
		 */
		public  boolean outStore(String isbn,int InCount)
		{
			if(checkPermission("bookinfobiz.instore")==true)
			{
			  return  bookInfoBiz.outStore(isbn, InCount);
			}
			else
			{
				throw new NosuchpermissionException(name+"没有操作<bookinfobiz.instore>的权限");
			}
			
		}
    public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getKey() {
		return key;
	}
	public void setKey(String key) {
		this.key = key;
	}
	public List<String> getPermissions() {
		return permissions;
	}
	public void setPermissions(List<String> permissions) {
		this.permissions = permissions;
	}
	public BookInfoBiz getBookInfoBiz() {
		return bookInfoBiz;
	}
	public void setBookInfoBiz(BookInfoBiz bookInfoBiz) {
		this.bookInfoBiz = bookInfoBiz;
	}
	public static long getSerialversionuid() {
		return serialVersionUID;
	}
	   
	
}

记录的登陆者的键值所对应的系统使用权限的配置文件

 

#key= value
administrator=bookinfobiz.*,userbiz.*
oparator=userbiz.*
default=userbiz.login
package  LibraryManagementSystemV3;

public class NosuchpermissionException extends RuntimeException {

private static final long serialVersionUID = -8380085720015067812L;
   public NosuchpermissionException()
   {
	   super();
	   System.out.println("此操作没有权限异常");
   }
   
   
    public NosuchpermissionException(String message)
    {
    	super(message);
    }
	

}
package  LibraryManagementSystemV3;

import java.util.Scanner;

/**
 * 显示菜单
 * @author 李志文
 * @version 1.8
 * @date 2019年8月15日 下午2:25:46
 * @content JAVA代码
 * @motto 代码千万条,可读第一条。代码不规范,error多两行。
 */
public class ShowView {
	 private Scanner input=null;
	 private User loginUser=null;  //当前登录的用户
	 private Role role=null;       //当前的角色 来使用对应的方法
	 public ShowView()
	 {
		 input=new Scanner(System.in);
	 }
	 public void showWelcom()
	 {
		 
	System.out.println("\t\t==========  欢迎使用图书管理系统   ==========\t\t");
	System.out.println("\t\t==========  1、登录图书管理系统     ==========\t\t");
	System.out.println("\t\t==========  2、退出图书管理系统     ==========\t\t");
	System.out.print("请您输入选择:");
	  String choice=input.next();
	  if("1".equals(choice))
	  {
		  showLoginView();
		  switch (this.role.getKey()) {
		case "administrator":
			showMainView_administrator();
			break;
		case "oparator":
			showMainView_operator();
		default:
			break;
		}
		  
	  }
	  else
	  {
		  System.out.println("已成功退出系统!");
	  }
   }
    public User showLoginView()
    {
    	User loginUser=new User();
    	System.out.print("请输入用户名:");
    	loginUser.setUserName(input.next());
    	System.out.print("请输入密码:");
    	loginUser.setPassord(input.next());
    	//需要通过业务方法来判断输入的用户对象是否合法
    	//如果合法,将当前登录的用户保存到this.loginUser备用,再设置当前登录点的角色
    	//以便显示相应的菜单及调用相应的方法
    	this.loginUser=loginUser.getRole().login(loginUser);
    	if(this.loginUser==null)
    	{
    		return null;
    	}
    	else
    	{
   
    		this.role=this.loginUser.getRole();
    		return this.loginUser;
    		
    	}
    	
    }
    public void showMainView_administrator()
    {
    	System.out.println("管理员界面");
    }
	public void showMainView_operator()
	{
		System.out.println("操作员界面");
	}

}
package  LibraryManagementSystemV3;
import  LibraryManagementSystemV3.User;


/**
 * 用户业务类
 * @author 李志文
 * @version 1.8
 * @date 2019年8月16日 上午7:30:56
 * @content JAVA代码
 * @motto 代码千万条,可读第一条。代码不规范,error多两行。
 */
public interface UserBiz extends Biz<User>{

  public User login(User user);
		
}
package  LibraryManagementSystemV3;

import java.util.Map;
import java.util.Set;

import  LibraryManagementSystemV3.User;


public class UserBizImpl  implements UserBiz{

	
	private static final long serialVersionUID = -830680802568438275L;

	@Override
	public boolean add(User t) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean del(User t) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public User update(User t) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public User findByid(String id) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Map<String, User> findAll() {
		
		return null;
	}

	@Override
	public User login(User user) {
		Set<User> userSet=FileUtil.userRead();
		if(userSet==null||userSet.size()==0)
		{
			return null;
		}
		for (User temp : userSet) {
			if(user.equals(temp))
			{
				return temp;
			}
		}
		
		return null;
	}

}
package  LibraryManagementSystemV3;

public class NosuchpermissionException extends RuntimeException {

private static final long serialVersionUID = -8380085720015067812L;
   public NosuchpermissionException()
   {
	   super();
	   System.out.println("此操作没有权限异常");
   }
   
   
    public NosuchpermissionException(String message)
    {
    	super(message);
    }
	

}
package  LibraryManagementSystemV3;
import  LibraryManagementSystemV3.Role;

import java.io.Serializable;
import java.util.Date;
/**
 * 用户类 ---实现用户的登陆环节
 * @author 李志文
 * @version 1.8
 * @date 2019年8月15日 下午2:46:21
 * @content JAVA代码
 * @motto 代码千万条,可读第一条。代码不规范,error多两行。
 */
public class User implements Serializable{
     
	private static final long serialVersionUID = -7688869767859624525L;
	private String userName;            //用户的名称
     private String passord;           //用户的密码
      private Role role;               //当前用户的角色
      private Date  lastedLoginTime;   //上次登陆时间
      public User()
      {
    	  role=new Role();
      }
      public User(Role role)
      {
    	  if(role==null)
    	  {
    		  role=new Role();
    	  }
    	  setRole(role);
      }
      @Override
    public boolean equals(Object obj) {
          if(null==obj||!(obj instanceof User) )
          {
        	  return false;
          }
          User user=(User) obj;
          
   return this.userName.equals(user.getUserName())&&this.passord.equals(user.getPassord());
    			
    }
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassord() {
		return passord;
	}
	public void setPassord(String passord) {
		this.passord = passord;
	}
	public Role getRole() {
		return role;
	}
	public void setRole(Role role) {
		this.role = role;
	}
	public Date getLastedLoginTime() {
		return lastedLoginTime;
	}
	public void setLastedLoginTime(Date lastedLoginTime) {
		this.lastedLoginTime = lastedLoginTime;
	}
	
	
}

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值