• 面向对象设计大作业— 图书馆系统


    面向对象设计大作业—图书馆

    1.功能调查与系统功能框图

    • 用户能使用图书馆进行借书还书操作。

    • 而图书馆中能查找书籍,也能对书库进行添加书籍和删除书籍的操作。

    • 能够查阅借阅记录,用户能查自身借阅记录,图书馆管理员能查到所有图书的借阅记录。

    2.类的设计

    • User类 和 Administrator类 都继承于 Operator类:
      都需要进行登入,继承Operator的修改密码的方法

    • User类 和 Administrator类 分别都依赖 Library类 而操作:
      User 从 Library中进行借书、还书等操作。
      Administrator 对 Library 进行操作,可以直接调用Library的方法

    • Book类 和 BorrowRecord类 相互依赖:
      BorrowRecord类有Book类的属性,Book中也有BorrowRecord类的属性。

    • Library类 依赖于 Book类:
      Library 中有 Book类的 书目列表

    3.类说明

    3.1 Book类

    • 主要属性:

      • private List records;//用来保存该书被借阅的记录
        书籍借阅呈线性表方式存储记录。

      • private int id;//区别每本书的书本编号

      • private String name;//书名

      • private String author;//作者

      • private String type;//类别

      • private String briefIntroduction;//书籍简介

    • 主要方法:
      public String toString() ;//覆盖toString方法,输出书籍相关信息

    public class Book {
    	private int id;
    	private String name;
    	private String author;
    	private String type;
    	private String briefIntroduction;
    	
    	private List<BorrowRecord> records;
    
    	public Book(int id, String name, String author, String type, String briefIntroduction) {
    		this.id = id;
    		this.name = name;
    		this.author = author;
    		this.type = type;
    		this.briefIntroduction = briefIntroduction;
    		this.records=new ArrayList<BorrowRecord>();
    	}
    
    	@Override
    	public String toString() {
    		return "[书籍编号:"+id+"书名:《" + name +"》,"+  "作者: "+ author + ", 类别:" + type + ", 简介:"
    				+ briefIntroduction + "]";
    	}
    
          ....//Getters and Setters
    }
    
    

    3.2 Library类

    • 主要属性:

    • Map<Book,String> bookList;
      ** bookList 作为 library 的图书列表即(书库)**
      用Map容器映射 book(书籍) -> state(状态) 是为了 能够反映图书的状态,以此来判断是否能被借出。

    • 主要方法:

      • public boolean searchBooks (Book book);//在图书馆书库中查找图书功能
      • public void addBooks(Book book);//往图书馆书库中添加新书
      • public boolean deleteBooks(Book book);//删除图书馆书库中的指定书籍
      • public void showBookList();//展示书库中的所有书籍
    public class Library {
    	Map<Book,String> bookList;
    	
    	public Library() {
    		bookList = new HashMap<Book, String>();
    	}
    
    	public boolean searchBooks(Book book) {//在图书馆书库中查找图书功能
        	if(bookList.containsKey(book))
        		return true;
        	else 
        		return false;
            }
    
    	public void addBooks(Book book) {//往图书馆书库中添加新书
              bookList.put(book, "free");
    	}
    
    	public boolean deleteBooks(Book book) {//删除图书馆书库中的指定书籍
            if(this.searchBooks(book)) {
            	bookList.remove(book);
            	return true;
            }
            else
            	return false;   
    	}
    
    	public void showBookList() {//展示书库中的所有书籍
    		Set<Book> keySet = bookList.keySet();
            Iterator<Book> it =keySet.iterator();           
            while(it.hasNext()){ 
            	Book book=it.next();  
                String state = bookList.get(book);
                System.out.println(book+"="+state);
                }
    	}
    
    	....//Getters and Setters
    }
    

    3.2 Operator类

    • 主要属性:

    • private static Map<String, String> matchItems = new HashMap<String, String>();//账号密码匹配信息
      这是一个属于类的属性。 使用Map方便进行账号密码的匹配操作

    • private String id;//账号

    • private String password;//密码

    • private String name;//姓名

    • 主要方法:

    • public static boolean login(String id, String password);//登入方法
      ** 定义为static,作为该类的方法。**

    • public void changePassword(String password);//修改密码

    public class Operator {
    	private String id;
    	private String password;
    	private String name;
    	private static Map<String, String> matchItems = new HashMap<String, String>();
    
    	public Operator(String id, String password, String name) {
    		this.id = id;
    		this.password = password;
    		this.name = name;
    
    		matchItems.put(id, password);
    	}
    
    	public static boolean login(String id, String password) {//登入方法
    		if (matchItems.containsKey(id)) {
    			if (matchItems.get(id).equals(password))
    				return true;
    			else
    				return false;
    		} else
    			return false;
    	}
    
    	public void changePassword(String password) {//修改密码 
    		matchItems.replace(this.id, password);
    	}
    
          ....//Getters and Setters
    }
    
    

    3.3 User类

    • 主要属性:

      • private Set borrowingBooks;//正在借阅的书籍
        该属性方便查阅用户正在借阅的书籍,Set集合的contains方法确保没有重复元素出现,符合该书被该用户借阅的唯一性。

      • private List records; //该用户自身借阅记录
        该用户自己的借阅记录呈线性表方式记录下来。

    • 主要方法:

      • public boolean borrowBook(Library library, Book book);//借阅图书
        • public boolean returnBooks(Library library, Book book);//归还图书
      • public void showBorrowingBooks() ;//查看自身正在借阅的书籍
      • public void showRecords() ;//查看自身所有的借阅记录
    public class User extends Operator {
    	private Set<Book> borrowingBooks;// 正在借阅、即待还书籍
    	private List<BorrowRecord> records;//自身借阅记录
    
    	public User(String id, String password, String name) {
    		super(id, password, name);
    		this.borrowingBooks = new HashSet<Book>();
    		this.records = new ArrayList<BorrowRecord>();
    	}
    
    	public boolean borrowBook(Library library, Book book) {//借阅图书
    		if (library.getBookList().containsKey(book)) {
    			if (library.getBookList().get(book).equals("free")) {// 书籍状态为可借
    				// 借书
    				borrowingBooks.add(book);
    				library.bookList.replace(book, "borrowed");
    
    				BorrowRecord record = new BorrowRecord(book, this, "borrowed");// 更新用户和书籍的借阅记录
    				records.add(record);
    				book.getRecords().add(record);
    				return true;
    			} else// 该书已被借,借阅失败
    				return false;
    		} else
    			return false;// 图书馆无该书
    	}
    
    	public boolean returnBooks(Library library, Book book) {//归还图书
    		if (borrowingBooks.contains(book)) {
    			library.getBookList().replace(book, "free");
    
    			BorrowRecord record = new BorrowRecord(book, this, "free");// 更新用户和书籍的借阅记录
    			records.add(record);
    			book.getRecords().add(record);
    			borrowingBooks.remove(book);
    
    			return true;
    		} else
    			return false;
    
    	}
    
    	public void showBorrowingBooks() {//查看自身正在借阅的书籍
    		Iterator<Book> it = borrowingBooks.iterator();
    
    		while (it.hasNext()) {
    			Book book = it.next();
    			System.out.println(book);
    		}
    	}
    
    	public void showRecords() {//查看自身所有的借阅记录
    		BorrowRecord b;
    		for (int i = 0; i < records.size(); i++) {
    			b = records.get(i);
    			System.out.println(b);
    
    		}
    	}
    
          ....//Getters and Setters
    
    }
    

    3.5 Administrator类

    • 主要属性:
      private Library library;// 所管理的图书馆
      得到所管理的图书馆,方便后续直接调用图书馆的方法,即能操作图书馆

    • 主要方法:
      public void showBorrowRecord();//查阅图书馆中所有的借阅记录

    public class Administrator extends Operator {
    	private Library library;// 所管理的图书馆
    
    	public Administrator(String id, String password, String name,  Library library) {
    		super(id, password, name);
    		this.library = library;
    	}
    
    	public void showBorrowRecord() {//查阅图书馆中所有的借阅记录
    		Set<Book> books = library.getBookList().keySet();
    		Iterator<Book> it = books.iterator();
    
    		while (it.hasNext()) {
    			Book book = it.next();
    			System.out.println(book.getRecords());
    		}
    	}
    
    
          ....//Getters and Setters
    
    }
    
    

    4.系统的包的规划

    • package model//存放实体类
      public class Library;
      public class Book ;
      public class BorrowRecord
      public class Operator;
      public class User extends Operator ;
      public class Administrator extends Operator

    • package ui
      public class Main;//控制台界面
      public class ShowMenu;//展示界面

    5.查看借阅记录功能

    public class BorrowRecord {
    	private Book book;
    	private User user;
    	private String state;
            
            ...
    }
    
    • BorrowRecord类 是一条借阅记录条目。
      其中包括借阅信息有:借阅的书籍,借书的人,以及借阅状态

    • User类中含有 BorrowRecord类的records属性,存储了用户个人的借阅记录

    • Book类中同样含有 BorrowRecord类的records属性,是该书的借阅记录

    • 在用户借阅和归还书籍的时候,User和Book的借阅记录同步更新。

  • 相关阅读:
    漫步ASP.NET MVC的处理管线
    HTTP压力测试工具
    javaweb学习总结(四十)——编写自己的JDBC框架
    javaweb学习总结(三十九)——数据库连接池
    javaweb学习总结(三十八)——事务
    javaweb学习总结(三十七)——获得MySQL数据库自动生成的主键
    javaweb学习总结(三十六)——使用JDBC进行批处理
    JavaWeb学习总结(三十五)——使用JDBC处理Oracle大数据
    javaweb学习总结(三十四)——使用JDBC处理MySQL大数据
    javaweb学习总结(三十三)——使用JDBC对数据库进行CRUD
  • 原文地址:https://www.cnblogs.com/zml7/p/14106590.html
Copyright © 2020-2023  润新知