这个Java实现的图书管理系统是一个典型的控制台应用程序,它完美展示了面向对象编程的核心思想。系统通过分层设计实现了图书的增删改查、借阅归还等基础功能,同时区分了管理员和普通用户两种角色权限。
我在实际开发中发现,这种规模的项目非常适合Java初学者练手,因为它涵盖了:
系统运行时首先会要求用户选择身份(管理员/普通用户),然后根据身份展示不同的功能菜单。所有图书数据存储在内存中(使用ArrayList),无需数据库支持,简化了开发流程。
java复制public class Book {
private String name;
private String author;
private int price;
private String type;
private boolean isBorrowed;
// 构造方法、getter/setter省略...
}
这个类有几个设计要点值得注意:
实际开发中发现:boolean类型的getter方法习惯上用isXxx()而非getXxx(),但这里保持统一风格更重要
java复制public class Booklist {
List<Book> bookList = new ArrayList<>();
public Booklist() {
// 初始化测试数据
bookList.add(new Book("三国演义","罗贯中",10,"小说"));
bookList.add(new Book("西游记","吴承恩",15,"小说"));
bookList.add(new Book("红楼梦","曹雪芹",20,"小说"));
}
}
选择ArrayList而非数组的考虑:
java复制public abstract class User {
protected String name;
protected Ioper[] ioper;
public User(String name) {
this.name = name;
}
public abstract int menu();
protected void doIop(int choice, Booklist booklist) {
ioper[choice].work(booklist);
}
}
这个抽象类的精妙之处在于:
java复制public class Normaluser extends User {
public Normaluser(String name) {
super(name);
this.ioper = new Ioper[]{
new Exitop(),
new Findop(),
new Borrowop(),
new Returnop()
};
}
// menu()实现省略...
}
java复制public class Adminuser extends User {
public Adminuser(String name) {
super(name);
this.ioper = new Ioper[]{
new Exitop(),
new Findop(),
new Addop(),
new Delop(),
new Showop()
};
}
// menu()实现省略...
}
关键区别:
java复制public interface Ioper {
void work(Booklist booklist);
}
这个接口极其简洁但强大:
以新增图书为例:
java复制public class Addop implements Ioper {
@Override
public void work(Booklist booklist) {
Scanner cin = new Scanner(System.in);
// 获取输入...
Book book = new Book(name, author, price, type);
// 检查重复
for(Book b : booklist.bookList) {
if(b.getName().equals(name)) {
System.out.println("存在这本书");
return;
}
}
booklist.bookList.add(book);
System.out.println("新增图书成功");
}
}
几个值得注意的实现细节:
java复制public class Main {
public static User login() {
// 获取用户输入...
if(choice == 1) {
return new Adminuser(name);
} else {
return new Normaluser(name);
}
}
public static void main(String[] args) {
Booklist booklist = new Booklist();
User user = login();
while(true) {
int choice = user.menu();
user.doIop(choice, booklist);
}
}
}
这个主程序展示了几个关键技巧:
通过这个项目,我们实践了以下Java核心概念:
可能的改进方向:
这个项目的完整代码约300行,非常适合作为Java面向对象编程的练手项目。我在实现过程中特别体会到良好的类设计对系统可扩展性的重要性,比如通过Ioper接口可以轻松添加新的操作功能而不影响现有代码。