图书管理系统详解----Java实现

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);
        }
    }
}

 

--------------------------------------------------------------------------------------------------------------------------------图书管理系统讲解到这里,欢迎大家在评论区进行讨论,大家也可以点点关注,后续还会有新的项目进行发布。 

 

 

 

 

 

 

 

 

 

 

  • 31
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
系统介绍 图书馆管理系统主要的目的是实现图书馆的信息化管理。图书馆的主要业务就是新书的借阅和归还,因此系统最核心的功能便是实现图书的借阅和归还。此外,还需要提供图书的信息查询、读者图书借阅情况的查询等功能。项目实施后,能够提高图书馆的图书借阅、归还流程,提高工作效率。整个项目需要在两个月的时间内交付用户使用。 操作注意事项 (1)本系统的用户名为:tsoft,密码为:111 (2)读者类型不同,可借图书的本数也有所区别。 操作流程 (1)用户登录图书馆管理系统后,可看到图书借阅排行榜,通过排行榜可以看出借阅图书的名称、图书类型、借阅次数等相关信息。 (2)单击“系统设置”/“图书馆信息”命令,对图书馆信息进行设置操作。 (3)单击“系统设置”/“管理员设置”命令,对管理员信息进行添加、权限设置、查询及删除操作。 (4)单击“系统设置”/“参数设置”命令,对办证费用及有效期限信息进行添加操作。 (5)单击“系统设置”/“书架设置”命令,对书架信息进行添加、修改及删除操作。 (6)单击“读者管理”/“读者类型管理”命令,对读者类型信息进行添加、修改及删除操作。 (7)单击“读者管理”/“读者档案管理”命令,对读者信息进行添加、修改及删除操作。 (8)单击“图书管理”/“图书类型设置”命令,对图书类型信息进行添加、修改及删除操作。 (9)单击“图书管理”/“图书档案管理”命令,对图书信息进行添加、修改及删除操作。 (10)单击“图书借还”/“图书借阅”命令,对图书借阅信息添加操作。 (11)单击“图书借还”/“图书续借”命令,对图书续借信息进行添加操作。 (12)单击“图书借还”/“图书归还”命令,对图书归还信息进行添加操作。 (13)单击“系统查询”/“图书档案查询”命令,对图书档案信息进行查询操作。 (14)单击“系统查询”/“图书借阅查询”命令,对借阅的图书信息进行查询操作。 (15)单击“系统查询”/“借阅到期提醒”命令,对借阅到期提醒信息进行查询操作。 (16)单击“更改口令”按钮,对当前的用户密码进行修改操作。 (17)单击“退出系统”按钮,退出当前操作系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值