图书馆管理系统(简易版)

32 篇文章 0 订阅

       在图书馆管理系统中首要有两个角色,普通用户(1.查找书籍、2.借阅书籍、3.归还书籍)与管理员(1.查找书籍、2.增加书籍、3.删除书籍、4.打印所有的书籍信息)。在我们设计类的过程中 ,可从需求中找出关键字,其中包括有:单本书籍Book,所有书BookList,普通用户NormalUser,管理员Admin等,对于具体操作将之理解成名词,每个操作对应到一个类,User类只要持有这些类的实例就可以了,其中我的图书管理系统文件下包含三个包(Book、User、IOperation)以及一个测试类(main)。

1、Book包下包含两个类,Book和BookList

(1)Book类

package Book;

public class Book {
	private String name;
	private String id;
	private String author;
	private int price;
	private String type;
	private boolean isBorrowed;
	
	public Book(String name, String id, String author, 
			int price, String type, boolean isBorrowed) {
		super();
		this.name = name;
		this.id = id;
		this.author = author;
		this.price = price;
		this.type = type;
		this.isBorrowed = isBorrowed;
	}

	public String getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	@Override
	public String toString() {
		return "Book [name=" + name + ", id=" + id + ", author=" + author + ", price=" + price + ", type=" + type
				+ ", isBorrowed=" + isBorrowed + "]";
	}

	public boolean isBorrowed() {
		return isBorrowed;
	}

	public void setBorrowed(boolean isBorrowed) {
		this.isBorrowed = isBorrowed;
	}
	
}

(2)BookList类

package Book;

public class BookList {
	private Book[] books = new Book[100];
	private int size;
	
	public BookList() {
		books[0] = new Book("红楼梦","001","曹雪芹",100,"古典名著",false);
		books[1] = new Book("水浒装","002","施耐庵",100,"古典名著",false);
		books[2] = new Book("西游记","003","吴承恩",100,"古典名著",false);
		size=3;
	}
	public int getSize() {
		return size;
	}
	public void setSize(int size) {
		this.size = size;
	}
	public Book getBook(int index) {
		return books[index];
	}
	public void setBook(int index,Book book) {
		books[index]=book;
	}
	
}

2、User包下包含三个类:User、NormalUser、Admin

(1)User类

package User;

import Book.BookList;
import Operation.IOperation;

abstract public class User {
	protected String name;
	//持有当前用户支持的操作对象
	protected IOperation[] operations;
	
	public User(String name) {
		this.name = name;
	}
	//打印一个操作菜单
	//不同用户支持的操作不同
	//对应的菜单也就不同
	abstract public int  menu();
	//根据用户输入的选项(menu返回结果)
	//调用对应的操作对象
	public void doOperation(int choice, BookList BookList) {
		operations[choice].work(BookList);	
	}
}

(2)NormalUser类

package User;

import Book.BookList;
import Operation.IOperation;

abstract public class User {
	protected String name;
	//持有当前用户支持的操作对象
	protected IOperation[] operations;
	
	public User(String name) {
		this.name = name;
	}
	//打印一个操作菜单
	//不同用户支持的操作不同
	//对应的菜单也就不同
	abstract public int  menu();
	//根据用户输入的选项(menu返回结果)
	//调用对应的操作对象
	public void doOperation(int choice, BookList BookList) {
		operations[choice].work(BookList);	
	}
}

(3)Admin类

package User;

import java.util.Scanner;

import Operation.AddOperation;
import Operation.DelOperation;
import Operation.ExitOperation;
import Operation.FindOperation;
import Operation.IOperation;
import Operation.PrintAllOperation;

public class Admin extends User {
	
	public Admin(String name) {
		super(name);
		operations = new IOperation[] {
			new ExitOperation(),
			new FindOperation(),
			new AddOperation(),
			new DelOperation(),
			new PrintAllOperation()
		};
	}

	@Override
	public int menu() {
		System.out.println("============");
		System.out.println("hello "+name);
		System.out.println("1. 查找书籍");
		System.out.println("2. 增加书籍");
		System.out.println("3. 删除书籍");
		System.out.println("4. 打印所有信息");
		System.out.println("0. 退出");
		System.out.println("============");
		System.out.println("请输入您的选择:");
		Scanner scanner = new Scanner(System.in);
		int choice = scanner.nextInt();
		return choice;
	}

}

3、IOperation包下包含八个主要操作类

package Operation;

import Book.BookList;

//共同接口IOperation,重写work方法,针对bookList来操作
public interface IOperation {
	void work (BookList bookList);
}

增加书籍 

package Operation;

import java.util.Scanner;

import Book.Book;
import Book.BookList;

public class AddOperation implements IOperation {

	@Override
	public void work(BookList bookList) {
		System.out.println("新增一本书籍");
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入书名:");
		String name = scanner.next();
		System.out.println("请输入编号:");
		String id = scanner.next();
		System.out.println("请输入作者");
		String author = scanner.next();
		System.out.println("请输入价格");
		int price = scanner.nextInt();
		System.out.println("请输入类别");
		String  type= scanner.next();
		Book book = new Book(name,id,author,price,type,false);
		//链表的尾插
		bookList.setBook(bookList.getSize(), book);
		bookList.setSize(bookList.getSize()+1);
	}

}

 借阅书籍

package Operation;

import java.util.Scanner;

import Book.Book;
import Book.BookList;

public class BorrowOperation implements IOperation {

	@Override
	public void work(BookList bookList) {
		System.out.println("借阅书籍");
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入要借阅的书籍的编号:");
		String id = scanner.next();
		for(int i=0;i<bookList.getSize();i++) {
			Book book = bookList.getBook(i);
			if(!book.getId().equals(id)) {
				continue;
			}
			if(book.isBorrowed()) {
				System.out.println("该书已被借走");
				break;
			}
			book.setBorrowed(true);
		}
	}
	
}

删除书籍

package Operation;

import java.util.Scanner;

import Book.Book;
import Book.BookList;

public class DelOperation implements IOperation {

	@Override
	public void work(BookList bookList) {
		System.out.println("删除书籍");
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入要删除的编号:");
		String id = scanner.next();
		//先查找
		int i=0;
		for(;i<bookList.getSize();i++) {
			Book book = bookList.getBook(i);
			if(book.getId().equals(id)) {
				//找到了
				break;
			}
		}
		if(i>= bookList.getSize()) {
			//没找到
			System.out.println("未找到要删除的书籍");
			return;
		}
		//处理找到了的情况
		//直接用最后一个元素覆盖当前要删除的元素
		Book lastBook = bookList.getBook(bookList.getSize()-1);
		bookList.setBook(i, lastBook);
		bookList.setSize(bookList.getSize()-1);
		System.out.println("删除成功");
	}

}

退出系统

package Operation;

import Book.BookList;

public class ExitOperation implements IOperation {
	//把操作提取成类,实际是进一步把操作和用户之间进行了“解耦合”
	//耦合是两个代码之间的关联关系,越低越好
	@Override
	public void work(BookList bookList) {
		System.out.println("goodbye!");
		//0为“进程退出码”
		System.exit(0);
	}
	
}

查找书籍

package Operation;

import java.util.Scanner;

import Book.Book;
import Book.BookList;

public class FindOperation implements IOperation {

	@Override
	public void work(BookList bookList) {
		System.out.println("查找书籍");
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入要查找的书名");
		String name = scanner.next();
		int count = 0;
		for(int i=0;i<bookList.getSize();i++) {
			Book book = bookList.getBook(i);
			if(book.getName().equals(name)) {
				//打印书籍的信息
				System.out.println(book);
				count++;
			}
		}
		if(count == 0) {
			System.out.println("未找到书籍");
		}else {
			System.out.println("找到了"+count+"本书");
		}
	}
}

打印书籍

package Operation;

import Book.BookList;

public class PrintAllOperation implements IOperation {

	@Override
	public void work(BookList bookList) {
		System.out.println("打印所有书籍信息");
		for(int i=0;i<bookList.getSize();i++) {
			System.out.println(bookList.getBook(i));
		}
		System.out.println("共计"+bookList.getSize()+"本书。");
	}

}

归还书籍

package Operation;

import java.util.Scanner;

import Book.Book;
import Book.BookList;

public class ReturnOperation implements IOperation {

	@Override
	public void work(BookList bookList) {
		System.out.println("归还书籍");
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入要归还的书籍的编号:");
		String id = scanner.next();
		for(int i=0;i<bookList.getSize();i++) {
			Book book = bookList.getBook(i);
			if(!book.getId().equals(id)) {
				continue;
			}
			if(!book.isBorrowed()) {
				System.out.println("该书已被归还");
				break;
			}
			book.setBorrowed(false);
		}
	}

}

4、测试类:

import java.util.Scanner;

import Book.BookList;
import User.Admin;
import User.NormalUser;
import User.User;

public class main {

	public static void main(String[] args) {
		//程序的入口
		//1、准备好书籍信息数据
		BookList bookList = new BookList();
		//2、创建用户
		User user = login();
		//3、进入主循环
		while(true) {
			int choice = user.menu();
			user.doOperation(choice, bookList);
		}
	}
	
	public static User login() {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入您的姓名:");
		String name = scanner.next();
		System.out.println("请输入您的角色:(1.普通用户  2.管理员)");
		int role = scanner.nextInt();
		if(role == 1) {
			return new NormalUser(name);
		}
		return new Admin(name);
	}

}

 

  • 3
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
以下一个简易版的C++图书馆管理系统的代码讲解: 首先,我们需要创建一个Book来记录每本书的基本息,例如书名、作者、出版社等。代码如下: ```cpp class Book { public: string title; string author; string publisher; // 其他书籍息的成员变量 // 构造函数 Book(string t, string a, string p) { title = t; author = a; publisher = p; } }; ``` 接下来,我们创建一个BookList表示图书馆的书架,其中包含一个Book型的数组来存放每本书。代码如下: ```cpp class BookList { private: static const int MAX_SIZE = 100; // 最大书籍数量 Book books[MAX_SIZE]; // 存放书籍的数组 int usedSize; // 记录存放书籍的数组里面一共有几本书 public: // 构造函数 BookList() { usedSize = 0; } // 添加书籍 void addBook(Book book) { if (usedSize < MAX_SIZE) { books[usedSize] = book; usedSize++; cout << "成功添加书籍:" << book.title << endl; } else { cout << "书架已满,无法添加书籍!" << endl; } } // 显示所有书籍 void displayBooks() { cout << "图书馆书籍列表:" << endl; for (int i = 0; i < usedSize; i++) { cout << "书名:" << books[i].title << endl; cout << "作者:" << books[i].author << endl; cout << "出版社:" << books[i].publisher << endl; cout << endl; } } // 其他功能方法,例如借书、还书等 }; ``` 最后,我们可以根据需要创建一个图书馆管理系统,该提供了各种功能,例如借书、还书、查询书籍等。代码如下: ```cpp class LibraryManagementSystem { private: BookList bookList; public: // 构造函数 LibraryManagementSystem() { // 初始化图书馆书架 // 可以在这里添加一些初始书籍 } // 添加书籍 void addBook(string title, string author, string publisher) { Book book(title, author, publisher); bookList.addBook(book); } // 显示所有书籍 void displayBooks() { bookList.displayBooks(); } // 其他功能方法,例如借书、还书、查询书籍等 }; ``` 通过以上代码,我们可以创建一个图书馆管理系统的实例,并调用相应的方法来实现各种功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值