Java 实现简易图书馆管理项目
·
1.基本要求
(1)系统中能表示多本图书信息
(2)管理员、用户
(3)普通用户:查看书籍列表、查找图书(按照名字)、借书、还书
(4)管理员:查看书籍列表、查找图书(按照名字)、增加、删除
2.项目整体设计
(1)library包下分为核心实体类(Book、BookList)、操作接口及实现类(operation 包)、用户类(user 包)、主程序入口(Main)
(2)核心:
- 接口(IOperation)定义统一操作规范,所有图书操作类实现该接口,保证操作行为的一致性
- 抽象类(User)定义用户通用属性和行为,Admin/NormalUser 继承并实现差异化菜单和操作集
- 多态:不同用户调用
menu()和work()方法时,执行各自的实现逻辑
3.核心类
(1)Book类:
- 说明类的属性:书名、作者、价格、类型、借阅状态(私有属性 + get/set 方法)
- 构造方法:初始化图书基本信息,默认借阅状态为 “未借出”
- toString 方法:格式化输出图书信息(含借阅状态)
(2)BookList类:
- 功能:维护图书数组(固定长度 100)、记录当前图书数量(size)
- 核心方法:getBooks/setBooks(获取 / 设置指定位置图书)、getSize/setSize(获取 / 修改图书数量)
- 初始化:默认添加 8 本测试图书
4.接口与功能类的实现
(1)IOperation 接口:
- 定义统一操作方法:
void work(BookList bookList),所有图书操作类需实现该方法
(2)核心类:
- 通用操作:Exit(退出系统,调用 System.exit (0))、ListBook(遍历打印图书列表)、FindBook(按书名查找图书)
- 管理员专属操作:AddBook(录入图书信息)、DelBook(按序号删除图书)
- 普通用户专属操作:BorrowBook(按序号借阅,校验编号和借阅状态)、ReturnBook(按序号归还,校验编号和借阅状态)
5.用户模块设计
(1)抽象 User 类:
- 核心属性:用户名(name)、操作数组(IOperation [] operations)
- 抽象方法:menu ()(实现菜单)
- 核心方法:work ()(根据用户选择的序号,调用对应操作类的 work 方法)
(2)User的子类实现:
- Admin(管理员):menu 展示 “查看 / 查找 / 新增 / 删除 / 退出”,operations 数组对应 Exit、ListBook、FindBook、AddBook、DelBook
- NormalUser(普通用户):menu 展示 “查看 / 查找 / 借阅 / 归还 / 退出”,operations 数组对应 Exit、ListBook、FindBook、BorrowBook、ReturnBook
6.程序入口(Main类)
- login () 方法:获取用户名,选择用户身份(管理员 / 普通用户),返回对应 User 实例
- main 方法:初始化 BookList,登录获取 User 对象,循环展示菜单、执行用户选择的操作
7.测试运行
(1)管理员登录

(2)查看书籍(初始默认有几本)
(3)按照名字查找书籍

(4)新增图书


(5)删除图书

刚添加的javaweb已删除:

(6)普通用户登录界面

(7)借书功能


如果重复借一个序号的书:

(8)还书功能

若重复归还:

(9)退出程序

8.完整代码
(1)Book类
package Work.library;
public class Book {
private String name;
private String author;
private double price;
private String type;
private boolean isBorrowed;
public Book(String name, String author, double price, String type) {
this.name = name;
this.author = author;
this.price = price;
this.type = type;
isBorrowed=false;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public boolean isBorrowed() {
return isBorrowed;
}
public void setBorrowed(boolean borrowed) {
isBorrowed = borrowed;
}
@Override
public String toString() {
return name+","+author+","+price+","+type+","+((isBorrowed)?"已借走":"未借出");
}
}
(2)BookList类
package Work.library;
public class BookList {
private Book[] books=new Book[100];
private int size=0;
public BookList(){
books[0] = new Book("西游记", "吴承恩", 100, "古典小说");
books[1] = new Book("红楼梦", "曹雪芹", 120, "古典小说");
books[2] = new Book("三国演义", "罗贯中", 110, "古典小说");
books[3] = new Book("水浒传", "施耐庵", 130, "古典小说");
books[4] = new Book("Java编程思想", "Bruce Eckel", 89, "技术书籍");
books[5] = new Book("算法导论", "Thomas H.Cormen", 128, "技术书籍");
books[6] = new Book("人类简史", "尤瓦尔·赫拉利", 68, "历史");
books[7] = new Book("三体", "刘慈欣", 88, "科幻小说");
size=8;
}
public Book getBooks(int index) {
return books[index];
}
public void setBooks(Book book,int index) {
books[index]=book;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
(3)User类
package Work.library.user;
import Work.library.BookList;
import Work.library.operation.IOperation;
public abstract class User {
protected String name;
public User(String name) {
this.name=name;
}
public abstract int menu();
IOperation[]operations;
public void work(BookList bookList,int choice){
if(choice<0||choice>=bookList.getSize()){
System.out.println("选项不合理");
return;
}
operations[choice].work(bookList);
}
}
(4)NormalUser类
package Work.library.user;
import Work.library.operation.*;
import java.util.Scanner;
public class NormalUser extends User{
public NormalUser(String name){
super(name);
operations=new IOperation[] {
new Exit(),
new ListBook(),
new FindBook(),
new BorrowBook(),
new ReturnBook()
};
}
@Override
public int menu() {
//打印用户菜单
System.out.println("======================================");
System.out.println("欢迎您,"+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);
return scanner.nextInt();
}
}
(5)Admin类
package Work.library.user;
import Work.library.operation.*;
import java.util.Scanner;
public class Admin extends User{
public Admin(String name) {
super(name);
operations=new IOperation[]{
new Exit(),
new ListBook(),
new FindBook(),
new AddBook(),
new DelBook()
};
}
@Override
public int menu() {
System.out.println("======================================");
System.out.println("欢迎您,"+name+"!");
System.out.println("1.查看书籍列表");
System.out.println("2.按照名字查找图书");
System.out.println("3.新增图书");
System.out.println("4.删除图书");
System.out.println("0.退出");
System.out.println("======================================");
Scanner scanner=new Scanner(System.in);
return scanner.nextInt();
}
}
(6)IOperation接口
package Work.library.operation;
import Work.library.BookList;
public interface IOperation {
void work(BookList bookList);
}
(7)AddBook类
package Work.library.operation;
import Work.library.Book;
import Work.library.BookList;
import java.util.Scanner;
public class AddBook 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 author=scanner.next();
System.out.println("请输入价格:");
double price=scanner.nextDouble();
System.out.println("请输入类别:");
String type=scanner.next();
Book book=new Book(name,author,price,type);
int index=bookList.getSize();
bookList.setBooks(book,index);
bookList.setSize(bookList.getSize()+1);
}
}
(8)DelBook类
package Work.library.operation;
import Work.library.Book;
import Work.library.BookList;
import java.util.Scanner;
public class DelBook implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("选择要删除的书籍的序号:");
Scanner scanner=new Scanner(System.in);
int index=scanner.nextInt();
if(index<0||index>=bookList.getSize()){
System.out.println("输入不规范");
return;
}
if(index==bookList.getSize()-1){
int size=bookList.getSize();
bookList.setSize(size-1);
}
for(int i=0;i<bookList.getSize();i++){
if(index==i){
int size=bookList.getSize();
Book book=bookList.getBooks(bookList.getSize()-1);
bookList.setBooks(book,i);
bookList.setSize(size-1);
}
}
System.out.println("删除完毕!");
}
}
(9)BorrowBook类
package Work.library.operation;
import Work.library.Book;
import Work.library.BookList;
import java.util.Scanner;
public class BorrowBook implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("请输入要借的书的编号:");
Scanner scanner=new Scanner(System.in);
int index=scanner.nextInt();
if(index<0||index>= bookList.getSize()){
System.out.println("编号不存在!");
}
Book book=bookList.getBooks(index);
if(book.isBorrowed()==true){
System.out.println("该书已经被别人借走了~");
return;
}
if(book.isBorrowed()==false){
book.setBorrowed(true);
System.out.println("已成功借阅!");
return;
}
}
}
(10)ReturnBook类
package Work.library.operation;
import Work.library.Book;
import Work.library.BookList;
import java.util.Scanner;
public class ReturnBook implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("请输入要还的书的编号:");
Scanner scanner=new Scanner(System.in);
int index=scanner.nextInt();
if(index<0||index>= bookList.getSize()){
System.out.println("编号不存在!");
}
Book book=bookList.getBooks(index);
if(book.isBorrowed()==false){
System.out.println("该书已经在书库了~");
return;
}
if(book.isBorrowed()==true){
book.setBorrowed(false);
System.out.println("已成功归还!");
return;
}
}
}
(11)ListBook类
package Work.library.operation;
import Work.library.BookList;
public class ListBook implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("书籍列表展示:");
for(int i=0;i<bookList.getSize();i++){
System.out.println("["+i+"]"+bookList.getBooks(i).toString());
}
}
}
(12)FindBook类
package Work.library.operation;
import Work.library.Book;
import Work.library.BookList;
import java.util.Scanner;
public class FindBook implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("输入要查找的书的书名:");
Scanner scanner=new Scanner(System.in);
String name=scanner.next();
for(int i=0;i<bookList.getSize();i++){
Book book=bookList.getBooks(i);
if(name.equals(book.getName())){
System.out.println(book.toString());
}
}
System.out.println("查找完毕!");
}
}
(13)主程序Main
package Work.library;
import Work.library.user.Admin;
import Work.library.user.NormalUser;
import Work.library.user.User;
import java.util.Scanner;
public class Main {
public static User login(){
//输入姓名
System.out.println("请输入你的姓名:");
Scanner scanner=new Scanner(System.in);
String name= scanner.next();
System.out.println("欢迎"+name+"同学!");
//选择身份
System.out.println("请选择身份(输入1是管理员,输入2是普通用户):");
Scanner scanner1=new Scanner(System.in);
int body=scanner1.nextInt();
if(body==1){
return new Admin(name);
} else if (body==2) {
return new NormalUser(name);
}else {
System.out.println("输入错误!");
return null;
}
}
public static void main(String[] args) {
BookList bookList=new BookList();
User user=login();
//进入程序
while (true){
int choice=user.menu();
user.work(bookList,choice);
}
}
}
更多推荐





所有评论(0)