IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 【Java】阶段性总结练习------图书管理系统实现 -> 正文阅读

[Java知识库]【Java】阶段性总结练习------图书管理系统实现

在学习了面向对象编程语法知识以及简单数据结构–顺序表等等知识点以后,现在我们就可以运用这些知识来综合实现一个 图书管理系统 ,来检验前面知识的掌握程度以及练习代码的实际编写能力,让自己对Java开发更进一步理解,话不多说,开始讲解~

1.book包的实现

首先我们实现一个book包,里面分别定义一个Book类,用来实现对书的定义,对书的操作;以及一个BookList类,相当于书架,用来存放书,实质上就是一个数据结构中的顺序表,实现对具体书的查找与修改。

//相关讲解在代码中以注释形式给出,大家注意查看

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

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

//重写toString方法 用于对书进行信息的打印
    @Override 
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' + " "+
                ((isBorrowed==true)?"已经被借出":"未被借出")+
                '}';
    }
}

1.2 BookList类

package book;

public class BookList {
    private Book[] books=new Book[10]; //定义一个Book类型的数组,初始化给10本书的空间
    private int usedSize;//当前存放的书的数目
    public BookList(){
        books[0]=new Book("三国演义","罗贯中",17,"小说");
        books[1]=new Book("西游记","吴承恩",47,"小说");
        books[2]=new Book("水浒传","施耐庵",37,"小说"); //给出三本书用于练习
        this.usedSize=3;
    }

    public int getUsedSize() {
        return usedSize;
    }

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

    /**
     * 获取到pos位置的一本书
     * @param pos
     * @return
     */
    public Book getPos(int pos){
        return this.books[pos];
    }

    /**
     * 设置pos位置下标为一本书 (添加一本书)
     * @param pos
     * @param book
     */
    public void setBook(int pos,Book book){
        this.books[pos]=book;
    }

}

2.operation包

因为需要进行面向对象编程练习,所以单独实现一个operation包,用于实现对书的各种操作,原本这部分的代码放在BookList 这个顺序表中即可,但是单独实现Operation包可以对面向对象编程有一个更加清晰的认识~

2.1 IOperation接口

package operation;

import book.BookList;

import java.util.Scanner;

public interface IOperation {
    void work(BookList bookList);
    //键盘输入数据代码直接在接口中实现 就可以不用在每个类中都写这个必须的代码
    Scanner scanner=new Scanner(System.in);

}

2.2 AddOperation类

这个类实现增加书籍的功能

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class AddOperation implements IOperation { //实现接口
    public void work(BookList bookList) { //重写接口的方法
        System.out.println("新增图书!");
        System.out.println("请输入要新增的图书名称:");
        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();

        Book book = new Book(name, author, price, type);//构造出一本需要新增的书
        int size = bookList.getUsedSize();
        bookList.setBook(size, book);
        bookList.setUsedSize(size + 1);
        System.out.println("新增图书成功!");

    }
}

2.2 BorrowOperation类

借阅图书功能

package operation;

import book.Book;
import book.BookList;

public class BorrowOperation implements IOperation{
    public void work(BookList bookList){
        System.out.println("借阅图书!");
        System.out.println("请输入你要借阅的图书的名字:");
        String name=scanner.nextLine();
        int size=bookList.getUsedSize();
        for (int i = 0; i < size; i++) {
            Book book=bookList.getPos(i);
            if (name.equals(book.getName())){
                book.setBorrowed(true);
                System.out.println("借阅成功!");
                System.out.println(book);
                return;
            }
        }
        System.out.println("没有找到你要借阅的这本书!");
    }
}

2.3 ReturnOperation类

归还图书功能

package operation;

import book.Book;
import book.BookList;

public class ReturnOperation implements IOperation{
    public void work(BookList bookList){
        System.out.println("归还图书!");
        System.out.println("请输入你要归还的图书的名字:");
        String name=scanner.nextLine();
        int size=bookList.getUsedSize();
        for (int i = 0; i < size; i++) {
            Book book=bookList.getPos(i);
            if (name.equals(book.getName())){
                book.setBorrowed(false);
                System.out.println("归还成功!");
                System.out.println(book);
                return;
            }
        }
        System.out.println("没有找到你要归还的这本书!");
    }
}

2.4 DelOperation类

删除指定图书功能

package operation;

import book.Book;
import book.BookList;

public class DelOperation implements IOperation{
    public void work(BookList bookList){
        System.out.println("删除图书!");
        //1.根据书名找到书的位置index
        System.out.println("请输入你要删除的书的书名:");
        String name=scanner.nextLine();
        int currentSize=bookList.getUsedSize();
        int index=0; //存储需要删除的书的下标
        int i = 0;
        for (; i < currentSize; i++) {
            Book book=bookList.getPos(i);
            if (book.getName().equals(name)){
                index=i;
                break;
            }
        }
        if (i>=currentSize){
            System.out.println("没有你要删除的这本书!");
            return;
        }
        //2.进行删除!
        for (int j = index; j < currentSize-1; j++) { //小于currentSize-1的原因是:避免数组越界报错,删除操作只需要找到currentSize-1下标即可完成
            Book book=bookList.getPos(j+1);
            bookList.setBook(j,book); //这个操作思想就是把j+1下标内容给j,实现删除效果
        }
        bookList.setBook(currentSize,null); //不要忘记把最后一个下标内容制空
        bookList.setUsedSize(currentSize-1);//书籍数目减一
        System.out.println("删除成功!");
    }
}

2.5 DisplayOperation类

实现对当前书架信息的打印

package operation;

import book.Book;
import book.BookList;

public class DisplayOperation implements IOperation{
    public void work(BookList bookList){
        System.out.println("打印图书!");
        int size=bookList.getUsedSize();
        for (int i = 0; i < size; i++) {
            Book book=bookList.getPos(i);
            System.out.println(book);
        }
    }
}

2.6 FindOperation类

实现查找指定图书并打印图书信息功能

package operation;

import book.Book;
import book.BookList;

public class FindOperation implements IOperation{
    public void work(BookList bookList){
        System.out.println("查找图书!");
        String name=scanner.nextLine();
        int size=bookList.getUsedSize();
        for (int i = 0; i < size; i++) {
            Book book=bookList.getPos(i);
            if (name.equals(book.getName())){
                System.out.println("找到了这本书,信息如下:");
                System.out.println(book);
                return;
            }
        }
        System.out.println("没有找到这本书!");
    }
}

2.7 ExitOperation类

实现退出图书管理系统功能

package operation;

import book.BookList;

public class ExitOperation implements IOperation{
    public void work(BookList bookList){
        System.out.println("退出系统!");
        System.exit(0); //0表示正常退出
    }
}

3.user包

因为针对不同用户需要实现不同功能,这里user包就分别实现管理员需要的功能以及普通用户需要的功能

3.1 User类 (父类)

package user;

import book.BookList;
import operation.IOperation;

public abstract class User { //抽象类实现
    protected String name; //用户姓名
    protected IOperation[] iOperations;//接口数组实现
    public User(String name){ //重写User构造方法
        this.name=name;
    }
    public abstract  int menu(); //针对不同用户输入选择实现不一样的用户菜单

//根据用户输入来选择实现不同的operation操作
    public void doWork(int choice, BookList bookList){
        iOperations[choice].work(bookList);
    }
}

3.2 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 DisplayOperation(),
        };
    }
    public int menu(){
        System.out.println("==========管理员菜单==========");
        System.out.println("hello"+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);
        int choice=scanner.nextInt();
        return choice;
    }

}

3.3 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(),
        };
    }
    public int menu(){
        System.out.println("==========普通用户菜单==========");
        System.out.println("hello"+this.name+"欢迎来到此系统!");
        System.out.println("1.查找图书");
        System.out.println("2.借阅图书");
        System.out.println("3.归还图书");
        System.out.println("0.退出系统");
        System.out.println("============================");
        Scanner scanner=new Scanner(System.in);
        int choice=scanner.nextInt();
        return choice;
    }
}

4. 程序入口 Main 类实现

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

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 choice=scanner.nextInt();
     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(); //向上转型:父类引用(user)引用子类对象(AdminUser(name)/NormalUser(name))
     while(true) { //如果不手动输入退出系统就一直循环操作
         int choice = user.menu();//发生了动态绑定(运行时绑定)
         //根据choice调用合适的操作
         user.doWork(choice, bookList);
     }
    }
}

5.整体代码实现展示

在实现了上面四大块的代码编写后,以及Main类将各个模块功能通过向上转型等方式串连起来,我们的简易图书管理系统就已经完成了!这是一个对Java学习以来的所有知识进行实践的很好的练习项目,值得大家反复学习以及反复进行代码练习 ~

整体代码实现展示如下:

5.1 管理员功能实现展示(部分)

在这里插入图片描述

5.2 普通用户功能实现展示(部分)

在这里插入图片描述

6 结尾

写到这里,一个简易的图书管理系统就已经完成了~
如果觉得博主的文章对你有所帮助,欢迎大家多多点赞收藏~

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-11 23:51:22  更:2022-01-11 23:52:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:56:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码