目录
0. 图书管理系统的设计
0.0 图书管理系统的文件结构
0.1 设计一本书
书有书名、作者、价格、类型、是否借出等属性
0.2 设计一个书籍列表
书籍列表用于存放书
0.3 设计一个用户组
用户组里面包含两类用户:管理员和普通用户
0.4 设计一个操作组
操作组里包含以下操作:
- 退出系统
- 查看书籍列表
- 按名字查找书籍
- 增加书籍
- 删除书籍
- 借阅书籍
- 归还书籍
0.5 设计main()
图书管理系统正式开始运行的地方
1. 设计一本书
package object.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;
this.isBorrowed = false;
}
//提供 getter/setter 方法
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. 设计一个书籍列表
package object.library;
public class BookList {
private Book[] books= new Book[1024];
//当前数组中有效元素的个数
private int size=0;
public BookList() {
//默认填写几本书进去,方便后续的测试
//就可以直接按照任意顺序实现Operation,而无需先实现AddOperation
books[0]=new Book("西游记","吴承恩",100,"古典小说");
books[1]=new Book("红楼梦","曹雪芹",80,"古典小说");
books[2]=new Book("高等数学","高斯",90,"数学");
books[3]=new Book("Java 入门到精通","詹姆斯高斯林",120,"计算机");
books[4]=new Book("西游记","吴承恩",100,"古典小说");
size=5;
}
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;
}
}
3. 设计一个用户组
3.1 设计一个用户组(抽象类)
package object.library.user;
import object.library.BookList;
import object.library.operation.IOperation;
public abstract class User {
protected String name;
protected IOperation[] operations;
public User(String name){
this.name = name;
}
//显示用户菜单,返回值表示用户输入的序号
public abstract int menu();
public void work(int choice, BookList bookList){
if(choice < 0 || choice >= operations.length){
System.out.println("输入的选项非法!");
return;
}
operations[choice].work(bookList);
}
}
3.2 管理员
package object.library.user;
import object.library.operation.*;
import java.util.Scanner;
public class Admin extends User {
public Admin(String name){
super(name);
operations = new IOperation[]{
new ExitOperation(),
new ListOperation(),
new FindOperation(),
new AddOperation(),
new DelOperation(),
};
}
@Override
public int menu(){
System.out.println("----------------------------------");
System.out.println("Welcome Admin " + 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.print("请输入您的选择:");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
3.3 普通用户
package object.library.user;
import object.library.operation.*;
import java.util.Scanner;
public class NormalUser extends User {
public NormalUser(String name) {
super(name);
operations = new IOperation[]{
new ExitOperation(),
new ListOperation(),
new FindOperation(),
new BorrowOperation(),
new ReturnOperation(),
};
}
@Override
public int menu(){
System.out.println("----------------------------------");
System.out.println("Welcome Admin " + 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.print("请输入您的选择:");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
4. 设计一个操作组
4.1 设计一个操作组(接口)
package object.library.operation;
import object.library.BookList;
public interface IOperation {
void work(BookList bookList);
}
4.2 退出系统
package object.library.operation;
import object.library.BookList;
public class ExitOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("Exiting the program...");
System.exit(0);
}
}
4.3 查看书籍列表
package object.library.operation;
import object.library.Book;
import object.library.BookList;
public class ListOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("查看书籍列表");
for(int i=0;i<bookList.getSize();i++){
Book book = bookList.getBook(i);
System.out.println("book["+i+"]:"+book);
}
}
}
4.4 按名字查找书籍
package object.library.operation;
import object.library.Book;
import object.library.BookList;
import java.util.Scanner;
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 flag = 0;
for(int i = 0; i < bookList.getSize(); i++){
Book book = bookList.getBook(i);
if(book.getName().equals(name)){
System.out.println("book["+i+"]:"+book);
flag = 1;
}
}
if(flag == 0){
System.out.println("没有这本书,重新输入");
return;
}
System.out.println("查找结束");
}
}
4.5 增加书籍
package object.library.operation;
import object.library.Book;
import object.library.BookList;
import java.util.Scanner;
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 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 size = bookList.getSize();
bookList.setBook(size, book);
bookList.setSize(size+1);
System.out.println("图书添加成功!");
}
}
4.6 删除书籍
package object.library.operation;
import object.library.Book;
import object.library.BookList;
import java.util.Scanner;
public class DelOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("删除书籍");
Scanner scanner = new Scanner(System.in);
System.out.print("请输入要删除的书籍序号:");
int index = scanner.nextInt();
if(index < 1 || index >= bookList.getSize()){
System.out.println("输入的序号超出范围!");
return;
}
if(index == bookList.getSize() - 1){
bookList.setSize(bookList.getSize() - 1);
}else{
Book lastBook = bookList.getBook(bookList.getSize() - 1);
bookList.setBook(index, lastBook);
bookList.setSize(bookList.getSize() - 1);
}
System.out.println("删除成功!");
}
}
4.7 借阅书籍
package object.library.operation;
import object.library.Book;
import object.library.BookList;
import java.util.Scanner;
public class BorrowOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("借书");
Scanner scanner = new Scanner(System.in);
System.out.print("请输入要借阅的图书编号:");
int id = scanner.nextInt();
if(id < 0 || id >= bookList.getSize()){
System.out.println("图书编号不存在");
return;
}
Book book = bookList.getBook(id);
if(book.isBorrowed()){
System.out.println("图书已被借出");
return;
}
book.setBorrowed(true);
System.out.println("图书借阅成功");
}
}
4.8 归还书籍
package object.library.operation;
import object.library.Book;
import object.library.BookList;
import java.util.Scanner;
public class ReturnOperation implements IOperation {
@Override
public void work(BookList bookList) {
System.out.println("还书");
Scanner scanner = new Scanner(System.in);
System.out.print("请输入要还的书的编号:");
int id = scanner.nextInt();
if(id < 0 || id >= bookList.getSize()){
System.out.println("编号不存在");
return;
}
Book book = bookList.getBook(id);
if(!book.isBorrowed()){
System.out.println("该书未被借出, 无法还书");
return;
}
book.setBorrowed(false);
System.out.println("还书成功");
}
}
5. 设计main()
package object.library;
import object.library.user.Admin;
import object.library.user.NormalUser;
import object.library.user.User;
import java.util.Scanner;
public class Main {
private static User login() {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入你的姓名:");
String name = scanner.next();
System.out.print("请输入你的角色:(1.普通用户 2.管理员)");
int role = scanner.nextInt();
if(role == 1){
return new NormalUser(name);
}else if(role == 2){
return new Admin(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(choice, bookList);
}
}
}
最后,如果有什么问题,欢迎大家评论哦,作者将会积极回复,嘿嘿~