项目原码压缩包在我主页的资源中免费领取。(在IDEA中运行,启动类在src -> Main 中运行)
图书管理系统
设计一个简单的控制台输出的图书管理系统,我们首先需要明确其基本功能、设计内容以及设计要求。这个系统可以包括以下几个核心模块:书籍管理、用户管理、借阅与归还管理。以下是一个基础的设计方案:
设计内容
数据模型设计
- Book 类:包含书的属性,如 name(书名)、
author
(作者)、price(价格)、type(类型)、borrowed(借出情况)
等。 - User 类:包含用户属性,如
name
(姓名)、Books
(已借书籍列表,可以是Book对象的集合)。
功能模块设计
-
书籍管理
- 添加书籍
- 删除书籍
- 显示书籍信息
- 查询书籍(按书名查找)
-
用户管理
- 查找图书
- 借阅图书
- 归还图书
设计要求
用户交互友好性
- 系统应提供清晰的菜单选项,方便用户进行操作。
- 对于错误输入,系统应给出友好的提示信息,指导用户正确操作。
数据一致性与安全性
- 保证数据的一致性,例如在借书时检查书籍是否可借。
- 虽然是控制台应用,也应考虑简单安全措施,比如对用户密码进行基本的加密处理。
系统扩展性
- 设计时应考虑未来可能的功能扩展,如增加评论系统、推荐系统等,确保现有架构易于扩展。
在该项目中我们设计了两个菜单:
用来各执行不同的操作。
项目操作步骤
1、建立包:
在该项目中我们建立三个包:1、book 2、operation 3、user 分别用来存放与书籍相关的类、与操作相关的类、与用户相关的类。
编写与书籍相关的类:
Book类的代码:
package book;import java.util.Objects;/*** Created with IntelliJ IDEA.* Description:图书* User: lenovo* Date: 2024-06-04* Time: 20:13*/
public class Book {private String name;//书名private String auther;//作者private int price;//价格private String type;//书的类型private boolean isBorrowed;//书是否被借出public Book(String name, String auther, int price, String type) {this.name = name;this.auther = auther;this.price = price;this.type = type;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuther() {return auther;}public void setAuther(String auther) {this.auther = auther;}public int getPrice() {return price;}public void setPrice(int 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;}@Overridepublic String toString() {return "Book{" +"书名:'" + name + '\'' +", 作者:'" + auther + '\'' +", 价格:" + price +", 类型:'" + type + '\'' +((isBorrowed == true)?",借出情况:已借出":",借出情况:未借出") +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Book book = (Book) o;return price == book.price && isBorrowed == book.isBorrowed && Objects.equals(name, book.name) && Objects.equals(auther, book.auther) && Objects.equals(type, book.type);}@Overridepublic int hashCode() {return Objects.hash(name, auther, price, type, isBorrowed);}
}
BookList类的代码:
package book;/*** Created with IntelliJ IDEA.* Description:书架* User: lenovo* Date: 2024-06-04* Time: 20:29*/
public class BookList {private Book[] booklist = new Book[10];//用来存放书private int usedSize;//计数器,用来记录当前书架有多少书public BookList() {booklist[0] = new Book("三国演义","罗贯中",71,"小说");booklist[1] = new Book("西游记","吴承恩",82,"小说");booklist[2] = new Book("红楼梦","曹雪芹",79,"小说");this.usedSize = 3;}public void setBooks(int pos, Book book){booklist[pos] = book;}public Book getBook(int pos){return booklist[pos];}public int getUsedSize() {return usedSize;}public void setUsedSize(int usedSize) {this.usedSize = usedSize;}
}
编写与用户相关的类:
AdminUser 类的代码:
package user;import operation.*;import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User: lenovo* Date: 2024-06-04* Time: 22:19*/
public class AdminUser extends Users{public AdminUser(String name) {super(name);this.books = new IBooks[]{new ExitOperation(),new FindBooks(),new AddBooks(),new DelBooks(),new ShowBooks()};}@Overridepublic int menu() {System.out.println("=====================================");System.out.println("hallo! "+this.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;}
}
Normaluser 类的编写:
package user;import operation.*;import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User: lenovo* Date: 2024-06-04* Time: 22:19*/
public class NormalUser extends Users{public NormalUser(String name) {super(name);this.books = new IBooks[]{new ExitOperation(),new FindBooks(),new BorrowBooks(),new ReturnBooks()};}@Overridepublic int menu() {System.out.println("========================================");System.out.println("hallo! "+this.name+" 欢迎来到普通用户菜单菜单");System.out.println("1.查找图书");System.out.println("2.借阅图书");System.out.println("3.归还图书");System.out.println("0.退出系统");System.out.println("请选择你要操作的序号:>");System.out.println("=======================================");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;}
}
Users 类的代码:
package user;import book.BookList;
import operation.IBooks;/*** Created with IntelliJ IDEA.* Description:* User: lenovo* Date: 2024-06-04* Time: 22:13*/
public abstract class Users {protected String name;public IBooks[] books;public Users(String name) {this.name = name;}public abstract int menu();public void doOperation(int choice,BookList booklist){books[choice].work(booklist);}
}
编写与操作相关的类:
AddBooks 类代码的编写:
package operation;
import book.Book;
import book.BookList;import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User: lenovo* Date: 2024-06-04* Time: 21:54*/
public class AddBooks implements IBooks{@Overridepublic void work(BookList booklist){Scanner scanner = new Scanner(System.in);System.out.println("请输入书名");String name = scanner.nextLine();System.out.println("请输入作者");String auther = scanner.nextLine();System.out.println("请输入价格");int price = scanner.nextInt();scanner.nextLine();System.out.println("请输入书的类型");String type = scanner.nextLine();Book book = new Book(name,auther,price,type);int count = booklist.getUsedSize();for (int i = 0; i < count; i++) {Book book1 = booklist.getBook(i);if(book1.getName().equals(name)){System.out.println("已经存在这本书,不能在进行添加了");return;}}booklist.setBooks(count,book);booklist.setUsedSize(count+1);System.out.println("添加成功!");}
}
BorrowBooks 类的代码编写:
package operation;import book.Book;
import book.BookList;import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User: lenovo* Date: 2024-06-04* Time: 22:09*/
public class BorrowBooks implements IBooks{@Overridepublic void work(BookList booklist) {int count = booklist.getUsedSize();if(count == 0){System.out.println("图书馆没有图书!");return;}Scanner scanner = new Scanner(System.in);System.out.println("请输入你要借阅的书籍的名字:>");String name = scanner.nextLine();int tmp = -1;for (int i = 0; i < count; i++) {Book book = booklist.getBook(i);if(book.getName().equals(name)){tmp = i;break;}}if(tmp == -1){System.out.println("图书馆没有该图书!");return;}Book book1 = booklist.getBook(tmp);if(book1.isBorrowed() == true){System.out.println("该书籍已经被借出!");return;}book1.setBorrowed(true);System.out.println("借阅成功!");return;}
}
DelBooks 类的代码编写:
package operation;import book.Book;
import book.BookList;import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User: lenovo* Date: 2024-06-04* Time: 22:02*/
public class DelBooks implements IBooks{@Overridepublic void work(BookList booklist){int count = booklist.getUsedSize();if(count == 0){System.out.println("图书馆没有图书!");return;}Scanner scanner = new Scanner(System.in);System.out.println("请输入你要删除的图书的名字:>");String name = scanner.nextLine();int tmp = -1;for (int i = 0; i < count; i++) {Book book = booklist.getBook(i);if(book.getName().equals(name)){tmp = i;break;}}if(tmp == -1){System.out.println("没有找到该图书,请重新选择!");return;}else{for (int i = tmp; i < count - 1; i++) {Book book1 = booklist.getBook(i+1);booklist.setBooks(i,book1);}}booklist.setUsedSize(count - 1);System.out.println("删除图书成功!");return;}
}
ExitOperation 类的代码编写:
package operation;import book.BookList;/*** Created with IntelliJ IDEA.* Description:* User: lenovo* Date: 2024-06-04* Time: 22:06*/
public class ExitOperation implements IBooks{@Overridepublic void work(BookList booklist) {int count = booklist.getUsedSize();for (int i = 0; i < count; i++) {booklist.setBooks(i,null);}booklist.setUsedSize(0);System.out.println("成功退出图书管理系统");System.exit(0);}
}
FindBooks 类的代码:
package operation;
import book.Book;
import book.BookList;import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User: lenovo* Date: 2024-06-04* Time: 21:57*/
public class FindBooks implements IBooks{@Overridepublic void work(BookList booklist){Scanner scanner = new Scanner(System.in);System.out.println("请输入你要查找的书名");String name = scanner.nextLine();int count = booklist.getUsedSize();for (int i = 0; i < count; i++) {Book book = booklist.getBook(i);if(book.getName().equals(name)){System.out.println(book);return;}}System.out.println("没有这本图书");}
}
IBooks 类的代码:
package operation;import book.BookList;/*** Created with IntelliJ IDEA.* Description:* User: lenovo* Date: 2024-06-04* Time: 22:00*/
public interface IBooks {void work(BookList booklist);
}
ReturnBooks 类的代码:
import book.BookList;import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User: lenovo* Date: 2024-06-04* Time: 22:10*/
public class ReturnBooks implements IBooks{@Overridepublic void work(BookList booklist) {int count = booklist.getUsedSize();Scanner scanner = new Scanner(System.in);System.out.println("请输入要归还书籍的名字::");String name = scanner.nextLine();int tmp = -1;for (int i = 0; i < count; i++) {Book book = booklist.getBook(i);if(book.getName().equals(name)){tmp = i;break;}}if(tmp == -1){System.out.println("图书馆没有该图书");return;}Book book2 = booklist.getBook(tmp);book2.setBorrowed(false);System.out.println("图书归还成功!");}
}
ShowBooks 类的代码:
package operation;import book.Book;
import book.BookList;/*** Created with IntelliJ IDEA.* Description:* User: lenovo* Date: 2024-06-04* Time: 22:03*/
public class ShowBooks implements IBooks{@Overridepublic void work(BookList booklist) {int count = booklist.getUsedSize();if(count == 0){System.out.println("图书馆没有图书!");return;}for (int i = 0; i < count; i++) {Book book = booklist.getBook(i);System.out.println(book);}}
}
Main 类的代码:
import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.Users;import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User: lenovo* Date: 2024-06-04* Time: 20:08*/
public class Main {public static Users login(){System.out.println("请输入你的姓名:>");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();System.out.println("清选择你的身份:> 1-》管理员 0-》普通用户");int choice = scanner.nextInt();if(choice == 1){return new AdminUser(name);}else{return new NormalUser(name);}}public static void main(String[] args) {BookList booklist = new BookList();Users users = login();while(true){int choice = users.menu();users.doOperation(choice,booklist);}}
}
最后代码在Main类中启动。