一,简介
下文所介绍的是一个控制台版本的图书馆管理系统,主要是练习下JavaSE阶段的面向对象等知识。不涉及IO,数据库等存储。
系统功能:
两种权限:管理员、普通用户
管理员可以进行增、删、查、显示等功能
普通用户可以进行查找以及借书、还书等功能
二、总体结构
1,树形结构
2,UML图
package user
package action
三、代码
package action
(0)IAction
package Java3_13.action;
import Java3_13.book.BookList;
public interface IAction {
void work(BookList bookList);
}
(1)addAction
package Java3_13.action;
import Java3_13.book.Book;
import Java3_13.book.BookList;
import java.util.Scanner;
public class AddAction implements IAction {
@Override
public void work(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("新增书籍");
System.out.print("请输入书名:");
String name = scanner.next();
System.out.print("请输入作者:");
String author = scanner.next();
System.out.print("请输入价钱:");
int price = scanner.nextInt();
System.out.print("请输入种类:");
String type = scanner.next();
// 将借出状态默认为false,即没有借出
Book book = new Book(name, author, price, type, false);
// 此处暂时不考虑扩容操作,直接进行尾插操作
int size = bookList.getSize();
bookList.setBook(book, size);
bookList.setSize(size + 1);
System.out.println("新增图书成功!");
}
}
(2)DelAction
package Java3_13.action;
import Java3_13.book.Book;
import Java3_13.book.BookList;
import java.util.Scanner;
public class DelAction implements IAction {
@Override
public void work(BookList bookList) {
/*
删除图书的思路:循环遍历,若找到则记下位置,否则删除失败
如果找到,这里简单处理,将最后一个书籍挪到要删除的位置,然后size--
*/
System.out.println("删除图书");
Scanner scanner = new Scanner(System.in);
System.out.print("请删除要删除书籍的书名:");
String name = scanner.next();
// 1,先找到图书,找到的图书即为下标为i的图书
int i = 0;
for (; i < bookList.getSize(); i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(name)) {
break;
}
}
if (i >= bookList.getSize()) {
System.out.println("没有找到能够匹配的书籍,删除失败!");
return;
}
// 将最后一本图书,移动到i的位置
int size = bookList.getSize();
Book book = bookList.getBook(size - 1);
bookList.setBook(book, i);
bookList.setSize(size - 1);
System.out.println("删除成功!");
}
}
(3)BorrowAction
package Java3_13.action;
import Java3_13.book.Book;
import Java3_13.book.BookList;
import java.util.Scanner;
public class BorrowAction implements IAction {
@Override
public void work(BookList bookList) {
System.out.println("执行结束操作");
System.out.println("请输入你要借的书籍的书名:");
Scanner sanner = new Scanner(System.in);
String name = sanner.next();
// 找到要接的书,然后将书的状态改成“借出”状态即可
for (int i = 0; i < bookList.getSize(); i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(name)) {
if (book.isBorrowed()) {
continue;
} else {
book.setBorrowed(true);
System.out.println("借书成功!");
return;
}
}
}
System.out.println("借书失败!没有匹配的书籍!");
}
}
(4)ReturnAction
package Java3_13.action;
import Java3_13.book.Book;
import Java3_13.book.BookList;
import java.util.Scanner;
public class ReturnAction implements IAction {
@Override
public void work(BookList bookList) {
System.out.println("执行还书操作!");
System.out.println("请输入你要还的书名:");
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
for (int i = 0; i < bookList.getSize(); i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(name)) {
if (book.isBorrowed()) {
book.setBorrowed(false);
System.out.println("还书成功");
return;
}
}
}
System.out.println("还书失败");
}
}
(5)FindAction
package Java3_13.action;
import Java3_13.book.Book;
import Java3_13.book.BookList;
import java.util.Scanner;
public class FIndAction implements IAction {
@Override
public void work(BookList bookList) {
System.out.println("执行查找图书操作");
System.out.println("请输入要查找的书籍名字:");
Scanner scanner = new Scanner(System.in);
String name = scanner.next();
for (int i = 0; i < bookList.getSize(); i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(name)) {
System.out.println(book);
System.out.println("查找完成");
}
}
}
}
(6)DisplayAction
package Java3_13.action;
import Java3_13.book.BookList;
public class DisplayAction implements IAction {
@Override
public void work(BookList bookList) {
for (int i = 0; i < bookList.getSize(); i++) {
System.out.println(bookList.getBook(i));
}
}
}
(7)ExitAction
package Java3_13.action;
import Java3_13.book.BookList;
public class ExitAction implements IAction {
@Override
public void work(BookList bookList) {
System.out.println("goodbye!!!");
System.exit(0);
}
}
package book
(1)book
package Java3_13.book;
public class Book {
private String name; // 书名
private String author; // 作者
private int price; // 价钱
private String type; // 种类
private boolean isBorrowed; // 是否借出
public Book(String name, String author, int price, String type, boolean isBorrowed) {
this.name = name;
this.author = author;
this.price = price;
this.type = type;
this.isBorrowed = isBorrowed;
}
public void setName(String name) {
this.name = name;
}
public void setAuthor(String author) {
this.author = author;
}
public void setPrice(int price) {
this.price = price;
}
public void setType(String type) {
this.type = type;
}
public void setBorrowed(boolean borrowed) {
isBorrowed = borrowed;
}
public String getName() {
return name;
}
public String getAuthor() {
return author;
}
public int getPrice() {
return price;
}
public String getType() {
return type;
}
public boolean isBorrowed() {
return isBorrowed;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
", isBorrowed=" + isBorrowed +
'}';
}
}
(2)BookList
package Java3_13.book;
// 用来表示多本书
public class BookList {
// 相当于一个顺序表
private Book[] books = new Book[100];
private int size = 0;
public BookList() {
// 先添加几个数据进去,方便后续测试
books[0] = new Book("三国演义", "罗贯中", 100, "古典名著",
false);
books[1] = new Book("西游记", "吴承恩", 120, "古典名著",
false);
books[2] = new Book("某名著", "兰陵笑笑生", 200, "古典名著",
false);
size = 3;
}
public Book getBook(int pos) {
return books[pos];
}
public void setBook(Book book, int pos) {
books[pos] = book;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
package user
(1)user
package Java3_13.user;
import Java3_13.action.IAction;
import Java3_13.book.BookList;
abstract public class User {
protected String name = null;
protected IAction[] actions = null;
abstract public int menu();
public void doAction(int choice, BookList bookList) {
this.actions[choice].work(bookList);
}
}
(2)Admin
package Java3_13.user;
import Java3_13.action.*;
import java.util.Scanner;
public class Admin extends User{
public Admin(String name) {
this.name = name;
actions = new IAction[]{
new ExitAction(),
new AddAction(),
new DelAction(),
new FIndAction(),
new DisplayAction()
};
}
@Override
public int menu() {
int choice;
System.out.println("=======================");
System.out.println("欢迎使用图书馆管理系统,"+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("=======================");
Scanner scanner = new Scanner(System.in);
do {
// 循环输入
choice = scanner.nextInt();
}while (choice < 0 || choice> 4);
return choice;
}
}
(3)NormalUser
package Java3_13.user;
import Java3_13.action.*;
import java.util.Scanner;
public class NormalUser extends User {
public NormalUser(String name) {
this.name = name;
actions = new IAction[]{
new ExitAction(),
new FIndAction(),
new BorrowAction(),
new ReturnAction()
};
}
@Override
public int menu() {
int choice;
System.out.println("====================");
System.out.println("欢迎" + 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);
do {
choice = scanner.nextInt();
} while (choice < 0 || choice > 3);
return choice;
}
}
四、总结
本程序主要是对前面所学知识的回顾和复习。面向对象的最重要之处就在于多态,通过程序练习,感受面向对象和结构化编程的差异。