图书管理系统 java实现 超详细的万字教程

目录

准备工作

book包

Book类

BookList类

operation包

AddOperation类

FindOperation类

ShowOperation类 

BorrowOperation类

ReturnOperation类

ExitOperation类

DelOperation类

user包

User类 

AdminUser类 

Normal类

Main类

完整代码:

book包的Book类:

book包的BookList类:

 operation包的IOPeration接口:

operation包的AddOperation类:

operation包的BorrowOperation类:

operation包的DelOperation类:

operation包的ExitOperation类:

operation包的FindOperation类:

operation包的ReturnOperation类:

operation包的ShowOperation类:

user包中的User类:

user包中的AdminUser类:

user包中的NormalUser类:

Main类:


准备工作

首先,我们要做图书管理系统,就应该定义三个,和Main的类(程序在这里运行)

 

这三个包分别是关于的包,关于对书的操作的包,和用户的包

因为使用图书管理系统的人分两类,第一类是图书管理员,第二类是普通用户(来借书的人)

定义完三个包后,就可以在新建类了。

book包

Book类

既然我们是要做图书管理系统,那么必然就会有书,

所以,我们在book这个包里新建一个Book类。

 

而书的成员变量有书名,作者,价格,类型,还有是否借出等等。

为了增强代码的安全性,我们可以用private修饰来成员变量,

因为成员变量被封装了,所以我们要提供对应的get和set方法

右键鼠标,点Generate,然后点getter和setter,然后全选成员变量,然后点OK

 我们就能快速写出对应成员变量的get和set方法。

 

有了get和set的方法,我们还要记得给Book类提供构造方法 ,

因为成员变量不初始化基本数据类型默认是对应的0值,引用类型是null。

所以就不用初始化isBorrowed变量的,让他默认是false(没被借出的状态)。

鼠标右键,点Generate,然后点第一个

除了isborrowed都选上(长按ctrl来点),然后点OK 

 

 就写好构造方法了。

 

BookList类

既然是图书管理系统,那肯定得有很多本书(只有一本书的话还要图书管理系统干啥?

所以我们要有书架,因此我们定义一个BookList类(书架),用来存放书。

既然书架是一组相同类型(书)的集合,所以我们定义一个Book类的数组books,还是用private修饰。

book的话随便你定义几个元素,我就直接定义成10个元素的book了。

 

我们一开始可能并不会把书架放满,

 所以我们定义一个usedSize来记录书架放了多少本书。

 

 既然usedSize 和 books都是被private修饰的,那同理,我们也可以给他提供get和set方法

 跟上面同理,我就不重复了,但是我们需要改一下getBook和setBook方法,不然不好操作

改成这样

 毕竟我们只需要一本书而不是一整个书架。

get和set方法就写完了。

同时,我们不要忘记给BookList提供构造方法

你想设置几本书就设置几本书,usedSize也改为对应的数量即可。

至此,关于book包的操作大致上就完成了

operation包

我们可以新建一个接口IOPeration,毕竟该包放的都是对书架的操作。

 

定义几个类,增加,删除,查找,显示,退出(管理员的权限),借阅,归还(普通用户的权限)。

 这几个类都要实现IOPeration这个接口,并重写其work方法。

AddOperation类

直接重写接口的work方法先把要增加的信息存起来,然后再对BookList进行修改。

FindOperation类

 你要找书,一般得依照书名来找书,所以要先把输入的书名存起来,再遍历书架来找书

ShowOperation类 

先在Book类重写toString方法,然后遍历书架,直接打印。

重写toString方法:

鼠标右键,点Generate,再点toString

 再利用三目操作符来打印是否被借出

 

 

BorrowOperation类

复制FindOperation类的方法,然后再修改一下。

将打印书改成将书的isBorrowed改为true

然后返回。

 

ReturnOperation类

复制BorrowOperation类的方法,修改一下,将true修改成false。

 

ExitOperation类

 

DelOperation类

复制FindOperation类的方法,再修改一下,写个循坏从找到的书开始被后一本书覆盖,最后usedSize再减1即可

 

user包

使用图书管理系统的有两类人,一类是管理员,一类是普通用户,

而大家都是用户,所以我们可以定义一个父类User,

让AdminUser(管理员)和NormalUser(普通用户)继承User。

所以定义三个类

 

User类 

用户有名字,所以我们定义一个name的成员变量

 

同时,我们也要给User提供构造方法和get和set方法

 

AdminUser类 

因为它继承了User,所以我们在构造方法中也要帮助父类构造。

Normal类

 也要帮助父类构造。

 

Main类

我们可以可以写一个登录的方法,利用User和AdminUser,NormalUser的父子类关系来返回创建的对象,成功向上转型就能发生动态绑定。

 

因为身份的不同,所以对应的权限也不相同,

因此我们可以在User这个类中写一个menu方法,

再让子类重写menu方法,这样User创建的对象也就能够调用子类的menu方法了。

而父类User的menu方法不需要有具体的实现,所以我们可以用abstract修饰,

 

从而父类User就变成了抽象类,也得用abstract修饰。

 

 然后在子类中进行方法重写(Ctrl + i)

 返回值设置成int而不是void的原因是:要在menu方法内选择操作,因此需要返回int

直接复制粘贴AdminUser的menu方法代码,再稍微修改一下即可

 

然后回到Main类写main方法(程序主入口)

首先调用之前写过的login方法,用User接收(向上转型)

要新建一个书架,不然放不了书

写一个while循环条件恒为真

在while循环里调用menu方法

因为我们是用User对象接受的返回值,要与AddOperation建立联系

那我们可以这样做:

1.首先把 对象 存起来

那就可以利用IOPeration和AddOperation的实现关系,在User里建立一个IOPeration的数组

 

不能在子类里面定义,因为在子类里定义的话父类就访问不到了。

而子类又继承了父类的成员变量,

所以我们就可以通过子类的构造方法初始化这个ioPeration数组。

 

 2.然后我们得在父类User定义一个doOperation的方法

因为操作是和书架有关的,也和选项有关,所以参数就是BookList 和 int

调用ioPeration数组pos下标的work方法

 

然后我们回到main方法,用choice接收menu的返回值之后,就可以通过user的doOperation来调用choice下标的方法。

完整代码:

book包的Book类:

package 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) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ((isBorrowed == true) ? "  已经被借出" : "  未被借出") +
                /*", isBorrowed=" + isBorrowed +*/
                '}';
    }

    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 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 isBorrowed() {
        return isBorrowed;
    }

    public void setBorrowed(boolean borrowed) {
        isBorrowed = borrowed;
    }
}

book包的BookList类:

package book;

//书架
public class BookList {
    private Book[] books = new Book[10];
    private int usedSize;//记录当前存放多少本书

    public BookList() {
        this.books[0] = new Book("三国演义", "罗贯中", 78, "小说");
        this.books[1] = new Book("西游记", "吴承恩", 83, "小说");
        this.books[2] = new Book("红楼梦", "曹雪芹", 87, "小说");
        this.usedSize = 3;
    }

    public Book getBooks(int pos) {
        return this.books[pos];
    }//返回pos位置的书

    public void setBooks(int pos, Book book) {
        this.books[pos] = book;
    }//将pos位置的书设置成新的书

    public int getUsedSize() {
        return usedSize;
    }

    public void setUsedSize(int usedSize) {
        this.usedSize = usedSize;
    }
}

 operation包的IOPeration接口:

package operation;

import book.BookList;

public interface IOPeration {
    void work(BookList bookList);
}

operation包的AddOperation类:

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class AddOperation implements IOPeration {
    @Override
    public void work(BookList bookList) {
        System.out.println("新增图书!");
        System.out.println("请输入你要新增的书名:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        System.out.println("请输入你要新增的书的作者:");
        String author = scanner.nextLine();
        System.out.println("请输入你要新增的书的类型:");
        String type = scanner.nextLine();
        System.out.println("请输入你要新增的书的价格:");
        int price = scanner.nextInt();
        int currentSize = bookList.getUsedSize();//得到当前书架中书的数量
        //将书放在书架的currentSize的下标处
        bookList.setBooks(currentSize, new Book(name, author, price, type));
        bookList.setUsedSize(currentSize + 1);//书架的现有书的数量加1
        System.out.println("新增成功!");
    }
}

operation包的BorrowOperation类:

package operation;

import book.BookList;

import java.util.Scanner;

public class BorrowOperation implements IOPeration {
    @Override
    public void work(BookList bookList) {
        System.out.println("借阅图书!");
        System.out.println("请输入你要借阅的书的名字:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            if (bookList.getBooks(i).getName().equals(name)) {
                System.out.println("找到了!");
                bookList.getBooks(i).setBorrowed(true);
                System.out.println("借阅成功!");
                return;
            }
        }
        System.out.println("不好意思,你好像没有这本书呢");
    }
}

operation包的DelOperation类:

package operation;

import book.BookList;

import java.util.Scanner;

public class DelOperation implements IOPeration {
    @Override
    public void work(BookList bookList) {
        System.out.println("删除图书!");
        System.out.println("请输入你要删除的书的名字:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            if (bookList.getBooks(i).getName().equals(name)) {
                System.out.println("找到了!");
                //将后面的书往前覆盖
                for (int j = i; j < currentSize - 1; j++) {
                    bookList.setBooks(j, bookList.getBooks(j + 1));
                }
                bookList.setUsedSize(currentSize - 1);
                System.out.println("删除成功!");
                return;
            }
        }
        System.out.println("不好意思,你好像没有这本书呢");
    }
}

operation包的ExitOperation类:

package operation;

import book.BookList;

public class ExitOperation implements IOPeration {
    @Override
    public void work(BookList bookList) {
        bookList.setUsedSize(0);
        System.exit(0);//调用命令直接退出
        System.out.println("退出系统!");
    }
}

operation包的FindOperation类:

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class FindOperation implements IOPeration {
    @Override
    public void work(BookList bookList) {
        System.out.println("查找图书!");
        System.out.println("请输入你要查找的书的名字:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBooks(i);//找到i下标的书
            //进行比较
            if (book.getName().equals(name)) {
                System.out.println("找到了!");
                System.out.println(bookList.getBooks(i));
                return;
            }
        }
        System.out.println("不好意思,你好像没有这本书呢");
    }
}

operation包的ReturnOperation类:

package operation;

import book.BookList;

import java.util.Scanner;

public class ReturnOperation implements IOPeration {
    @Override
    public void work(BookList bookList) {
        System.out.println("归还图书!");
        System.out.println("请输入你要归还的书的名字:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            if (bookList.getBooks(i).getName().equals(name)) {
                System.out.println("找到了!");
                bookList.getBooks(i).setBorrowed(false);
                System.out.println("归还成功!");
                return;
            }
        }
        System.out.println("不好意思,你好像没有这本书呢");
    }
}

operation包的ShowOperation类:

package operation;

import book.Book;
import book.BookList;

public class ShowOperation implements IOPeration {
    @Override
    public void work(BookList bookList) {
        System.out.println("显示图书!");
        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBooks(i);//得到i下标的书
            System.out.println(book);//打印
        }
    }
}

user包中的User类:

package user;

import book.BookList;
import operation.IOPeration;

public abstract class User {
    private String name;

    public IOPeration[] ioPerations;


    public User(String name) {
        this.name = name;
    }

    public void doOperation(int choice, BookList bookList) {
        ioPerations[choice].work(bookList);
    }

    public abstract int menu();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

user包中的AdminUser类:

package user;

import operation.*;

import java.util.Scanner;

public class AdminUser extends User {
    public AdminUser(String name) {
        super(name);
        this.ioPerations = new IOPeration[]{
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new ShowOperation()
        };
    }

    @Override
    public int menu() {
        System.out.println("************************");
        System.out.println("hello " + super.getName() + " 欢迎来到管理员菜单!");
        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("请选择你要的操作:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}

user包中的NormalUser类:

package user;

import operation.*;

import java.util.Scanner;

public class NormalUser extends User {
    public NormalUser(String name) {
        super(name);
        this.ioPerations = new IOPeration[]{
                new ExitOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation(),
                new ShowOperation()
        };
    }

    @Override
    public int menu() {
        System.out.println("************************");
        System.out.println("hello " + super.getName() + " 欢迎来到普通用户员菜单!");
        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("请选择你要的操作:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}

Main类:

import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;

import java.io.StringReader;
import java.util.Scanner;

public class Main {

    public static User login() {
        System.out.println("请输入你的姓名:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        System.out.println("请输入你的身份:  1 ->管理员   0 ->普通用户");
        int input = scanner.nextInt();
        if (input == 1) {
            return new AdminUser(name);
        } else {
            return new NormalUser(name);
        }
    }

    public static void main(String[] args) {
        User user = login();
        BookList bookList = new BookList();
        while (true) {
            int choice = user.menu();
            user.doOperation(choice, bookList);
        }
    }
}

  • 25
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
《SSM图书馆预约占座系统》该项目采用技术jsp、SpringMVC、Spring、Mybatis、tomcat服务器、mysql数据库 开发工具eclipse,项目含有源码、论文、配套开发软件、软件安装教程、项目发布教程    本次介绍的系统采用的是Jsp+MySQL+SSM框架进行开发,Windows 操作系统,前端采用EasyUI框架,采用MyBatis与后台数据库进行连接,MyBatis是SSM中的M,是对Jdbc的封装,完成数据的添加、修改、删除、查询等功能。SSM框架是一个常用的Web项目框架,功能强大而且稳定,而MySQL灵活易维护在开发方面具有方便快捷、使用灵活的特点,以及目前的广泛实际应用,因此使用Jsp、SSM、MySQL来完成该系统整体开发,从而说明本系统在技术方面可行。 课程收获:1、学会各开发软件安装、项目导入以及项目发布,含项目源码,需求文档,配套软件等2、该项目主要功能完善,主要用于简历项目经验丰富,以及毕业设计或者二次开发3、提供项目源码,设计文档、数据库sql文件以及所有配套软件,按照教程即可轻松实现项目安装部署本课程为素材版,需要实战版的同学可以点击如下链接:java项目实战之电商系统全套(前台和后台)(java毕业设计ssm框架项目)https://edu.csdn.net/course/detail/25771java项目之oa办公管理系统(java毕业设计)https://edu.csdn.net/course/detail/23008java项目之hrm人事管理项目(java毕业设计)https://edu.csdn.net/course/detail/23007JavaWeb项目实战之点餐系统前台https://edu.csdn.net/course/detail/20543JavaWeb项目实战之点餐系统后台https://edu.csdn.net/course/detail/19572JavaWeb项目实战之宿舍管理系统(Java毕业设计含源码)https://edu.csdn.net/course/detail/26721JavaWeb项目实战之点餐系统全套(前台和后台)https://edu.csdn.net/course/detail/20610java项目实战之电子商城后台(java毕业设计SSM框架项目)https://edu.csdn.net/course/detail/25770java美妆商城项目|在线购书系统(java毕业设计项目ssm版)https://edu.csdn.net/course/detail/23989系统学习课程:JavaSE基础全套视频(环境搭建 面向对象 正则表达式 IO流 多线程 网络编程 java10https://edu.csdn.net/course/detail/26941Java Web从入门到电商项目实战挑战万元高薪(javaweb教程)https://edu.csdn.net/course/detail/25976其他素材版(毕业设计或课程设计)项目:点击老师头像进行相关课程学习

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值