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

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

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的借阅记录同步更新。

posted @ 2020-12-09 11:25  郑梦露  阅读(419)  评论(0编辑  收藏  举报