1.找到图书管理系统面向的对象
Java作为一门面向对象的语言,在编写项目的时候就需要找到该项目所包含的对象。对于图书管理系统我们应该2抽象出以下对象:图书,书架,用户(用户又分为管理者和普通用户)。找到了这些对象之后,我们可以通过建立不同的包和类,将他们放在不同的地方进行管理。
这里我创建了三个包和一个main类,将图书和书架放到了同一个包(Book)中,管理员和普通用户放在了同一个包(User)中,另外我还建了一个BookOption包里面放了用户相应的一些操作功能,还有一个main类作为程序的入口。
2.将各个对象创建一个类并将对象的属性和方法补全
(1)对于图书这个对象,里面应该包含一下内容:
package Book;
public class Book {
private String name;
private String autor;
private int price;
private String type;
private boolean isLend;//属性
public Book() {}
public Book(String name, String autor, int price, String type) {
this.name = name;
this.autor = autor;
this.price = price;
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAutor() {
return autor;
}
public void setAutor(String autor) {
this.autor = autor;
}
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 isLend() {
return isLend;
}
public void setLend(boolean lend) {
isLend = lend;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", autor='" + autor + '\'' +
", price=" + price +
", type='" + type + '\'' +
(isLend == true? "已借出":"未借出") +
'}';
}
}
我们在里面用private将属性进行封装,另外写了一些方法方便其他对象来获取和修改这些属性,并重写了toString方法。
(2)对于书架对象:
package Book;
public class BookList {
public Book[] book = new Book[10];
private int bookSize;
public BookList() {
book[0] =new Book("三国演义","罗贯中",10,"小说");
book[1] =new Book("西游记","吴承恩",16,"小说");
book[2] =new Book("红楼梦","曹雪芹",18,"小说");
bookSize = 3;
}
public void setBookSize(int bookSize) {
this.bookSize = bookSize;
}
public int getBookSize() {
return bookSize;
}
}
我们用Book类型来创建了一个数组,用来存放书籍,并对数组前三个元素进行了初始化,表示书架上原来就有三本书可供我们进行操作,另外再写了一个方法来获取和修改数组的长度,也就是书架上图书的本数。
(3) 对于用户因为不管是普通用户还是管理员,都应该有相同的一些操作,因此我们采用继承关系来进行编写:
对于父类:
package User;
import Book.BookList;
import BookOption.Ioption;
abstract public class User {
String name;
Ioption[] ioptions;
public User(String name) {
this.name = name;
}
public abstract void munl();
public abstract void doIoptons(int choice,BookList bookList);
}
对于两个子类:
package User;
import Book.BookList;
import BookOption.*;
import java.util.Scanner;
public class AdminUser extends User{
public AdminUser(String name) {
super(name);
this.ioptions = new Ioption[]{new EextSystem(),
new LookBook(),
new AddBook(),
new DelectBook(),
new FindBook()
};
}
@Override
public void munl() {
System.out.println("***管理员选项***");
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();
}
@Override
public void doIoptons(int choice,BookList bookList) {
ioptions[choice].work(bookList);
}
}
package User;
import Book.BookList;
import BookOption.*;
import java.util.Scanner;
public class NormalUser extends User{
public NormalUser(String name) {
super(name);
this.ioptions = new Ioption[]{new EextSystem(),
new FindBook(),
new BrrowedBook(),
new ReruenBook()
};
}
@Override
public void munl() {
System.out.println("***普通用户选项***");
System.out.println("**1.查找图书***");
System.out.println("**2.借阅图书***");
System.out.println("**3.归还图书***");
System.out.println("**0.退出系统***");
System.out.println("***************");
System.out.println();
}
@Override
public void doIoptons(int choice,BookList bookList) {
ioptions[choice].work(bookList);
}
}
我们可以看到子类间会有相同的方法也会有不同的方法,我们使用继承关系来写代码就会大大缩减代码量,使逻辑更清晰。
3.采用接口的方式将不同用户要使用的方法集合到一起
这就是我上面创建的BookOption包的意义所在,下面来看看这个包里面的各个类及对应的实现:
(1)AddBook
package BookOption;
import Book.Book;
import Book.BookList;
import java.util.Scanner;
public class AddBook implements Ioption{
public void work(BookList bookList) {
int i = bookList.getBookSize();
if(i == bookList.book.length) {
System.out.println("该书架已满,无法添加图书!");
return;
}
Scanner scanner = new Scanner(System.in);
bookList.book[i] = new Book();
System.out.println("请输入你要添加的图书的名字:");
String name = scanner.nextLine();
bookList.book[i].setName(name);
System.out.println("请输入你要添加的图书的作者:");
String author = scanner.nextLine();
bookList.book[i].setAutor(author);
System.out.println("请输入你要添加的图书的价格:");
int price = scanner.nextInt();
bookList.book[i].setPrice(price);
scanner.nextLine();
System.out.println("请输入你要添加的图书的类型:");
String type = scanner.nextLine();
bookList.book[i].setType(type);
bookList.setBookSize(i+1);
System.out.println("添加完成!");
}
}
(2)BrrowedBook
package BookOption;
import Book.BookList;
import java.util.Scanner;
public class BrrowedBook implements Ioption{
public void work(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你要借阅的书名:");
String name = scanner.nextLine();
int pos = -1;
for (int i = 0; i < bookList.getBookSize(); i++) {
if(bookList.book[i].getName().equals(name)) {
pos = i;
break;
}
}
bookList.book[pos].setLend(true);
System.out.println("借阅成功!");
}
}
(3)DelectBook
package BookOption;
import Book.Book;
import Book.BookList;
import java.util.Scanner;
public class DelectBook implements Ioption{
public void work(BookList bookList) {
System.out.println("请输入你要删除图书的名字:");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int pos = -1;
for (int i = 0; i < bookList.getBookSize(); i++) {
if(bookList.book[i].getName().equals(name)) {
pos = i;
break;
}
}
int n = bookList.getBookSize();
for ( int i = pos; i < n-1; i++) {
bookList.book[i] = bookList.book[i+1];
}
bookList.book[n] = null;
bookList.setBookSize(n-1);
System.out.println("删除完毕!");
}
}
(4)EextSystem
package BookOption;
import Book.BookList;
public class EextSystem implements Ioption{
public void work(BookList bookList) {
System.exit(0);
}
}
(5)FindBook
package BookOption;
import Book.BookList;
import java.util.Scanner;
public class FindBook implements Ioption{
public void work(BookList bookList) {
System.out.println("查找图书......");
System.out.println("请输入你要查找图书的名字:");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int pos = -1;
for (int i = 0; i < bookList.getBookSize(); i++) {
if(bookList.book[i].getName().equals(name)) {
pos = i;
break;
}
}
if(pos >= bookList.getBookSize()) {
System.out.println("没有找到这本书");
}else {
System.out.println("找到了,这本书的信息为:");
System.out.println(bookList.book[pos]);
}
}
}
(6)LookBook
package BookOption;
import Book.BookList;
public class LookBook implements Ioption{
public void work(BookList bookList) {
System.out.println("显示图书......");
for (int i = 0; i < bookList.getBookSize(); i++) {
System.out.println(bookList.book[i]);
}
}
}
(7)RenruenBook
package BookOption;
import Book.BookList;
import java.util.Scanner;
public class ReruenBook implements Ioption{
public void work(BookList bookList) {
System.out.println("请输入你要归还图书的名字:");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int pos = -1;
for (int i = 0; i < bookList.getBookSize(); i++) {
if(bookList.book[i].getName().equals(name)) {
pos = i;
break;
}
}
bookList.book[pos].setLend(false);
System.out.println("图书已归还!");
}
}
(8)Ioption接口
package BookOption;
import Book.BookList;
public interface Ioption {
void work(BookList bookList);
}
我们通过所有的功能类都实现Ioptiong接口,然后采用Ioption数组将方法都放入数组中便将这些方法集合到了一起。
4.Main类的编写
这里我们将main类设计为整个程序的入口,将所有的内容整合到一起构成一个项目,具体内容如下:
import Book.BookList;
import User.AdminUser;
import User.NormalUser;
import User.User;
import java.util.Scanner;
public class Main {
public static User logIn() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = scanner.nextLine();
System.out.println("请选择模式:");
System.out.println("1->管理员模式 2->普通用户模式");
int chioce = scanner.nextInt();
if (chioce == 1) {
AdminUser adminUser = new AdminUser(name);
return adminUser;
}else {
NormalUser normalUser = new NormalUser(name);
return normalUser;
}
}
public static void main(String[] args) {
BookList bookList = new BookList();
Scanner scanner = new Scanner(System.in);
User user = logIn();
user.munl();
while(true) {
System.out.println("请选择功能:");
int choice = scanner.nextInt();
user.doIoptons(choice,bookList);
}
}
}
--------------------------------------------------------------------------------------------------------------------------------图书管理系统讲解到这里,欢迎大家在评论区进行讨论,大家也可以点点关注,后续还会有新的项目进行发布。