简单的图书管理系统(java语法知识的汇总)

目录

1.(背景)java语法知识

2.涉及的包和类分类

3.每个类的具体实现细节

1.Books类

2.Booklist类

3.IOperation接口

4.User类

5.AdminUser用户

6.NormalUser类

7.Main类

8.AddOperation类

9.BorrowOperation类

10.DelOperation类

11.DisplayOperation类

12.ExitOperation

13.FindOperation类

14.ReturnOperation类

4.运行结果

1.(背景)java语法知识

这个小项目用到了数组,类和对象,继承,多态,接口,抽象类,封装等知识,是一个综合的小项目。

2.涉及的包和类分类

         

Booklist类:放书本的书架

Book类:书本,其中定义了书的一些属性,包括书名,作者,价格,类型,是否被借出等。

operation包内放的类都是一些对Booklist类的操作,比如添加书本,删除书本,借阅书本等。

user包内放的是用户,其中管理员用户和普通用户继承了用户,有公共属性名字,年龄等。

Main类是项目的总入口

3.每个类的具体实现细节

1.Books类

package book;

public class Books {
    private String name;
    private String author;
    private double price;
    private boolean isBorrowed;
    private String type;

    public Books(String name, String author, double 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 boolean isBorrowed() {
        return isBorrowed;
    }

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

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }




    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return "book.Books{" +
                "书名='" + name + '\'' +
                ", 作者='" + author + '\'' +
                ", 价格=" + price +
                ", " + ((isBorrowed)?("已借出"):("未借出")) +
                ", 书的类型='" + type + '\'' +
                '}';
    }

}

这个书类包括了基本的书的属性,构造方法,get和set方法,其中为了实现封装,将书的属性设为private,并提供get,set方法供外界调用,其中构造方法不包括是否被借出的构造,因为默认是不被借出,所以不用构造,这里还重写了toString方法,是为了之后打印书本可以直接打印出书本的所有属性。isBorrowed?“已借出”:“未借出”是三元运算符,当isBorrowed为假就是未借出,为真就是已借出。

2.Booklist类

package book;

public class Booklist {

   private Books books[] = new Books[10];
   private int countBook;//书的数量
    public Booklist() {
        books[0]=new Books("三国演义","罗贯中",20,"小说");
        books[1]=new Books("西游记","吴承恩",50,"小说");
        books[2]=new Books("红楼梦","曹雪芹",20,"小说");
        this.countBook=3;
    }

    public Books getBooks(int pos) {
        return this.books[pos];
    }

    public void setBooks(int pos,Books book) {
        this.books[pos]=book;
    }

    public int getCountBook() {
        return countBook;
    }

    public void setCountBook(int countBook) {
        this.countBook = countBook;
    }
}

此类需要说明的就是已经在书架上放了三本书了,构造方法中已经new了三本书。getBooks是获得指定下标的书,setBooks是为指定下标放一本书。

3.IOperation接口

package operation;

import book.Booklist;

public interface IOperation {
    void work(Booklist booklist);
}

这个接口是之后的操作的一个规范,每个操作都可以实现这个接口,重写work方法,在里面实现操作。这也为后面使用的接口数组作了一个铺垫。

4.User类

package user;

import book.Booklist;
import operation.IOperation;

public abstract class User {
    protected String name;

    public IOperation[] iOperations;
    public User(String name) {
        this.name = name;
    }
    public abstract int menu();
    public void doOperation(int choice, Booklist booklist){
       this.iOperations[choice].work(booklist);
    }
}

user类里面是使用者的公共属性,其中有名字,接口数组,数组里面放的是操作,还有menu菜单,因为无论是管理员还是普通用户都有操作和菜单,其中doOperation是选择具体操作。

5.AdminUser用户

package user;

import operation.*;

import java.util.Scanner;

public class AdminUser extends User{
    public AdminUser(String name) {
        super(name);
        iOperations=new IOperation[]{new ExitOperation(),new FindOperation(),new AddOperation(),new DelOperation(),new DisplayOperation()};

    }

    @Override
    public int menu() {
        System.out.println("*****************欢迎来到管理员菜单****************");
        System.out.println(name+"欢迎来到图书管理系统!");
        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);
        return scanner.nextInt();


    }
}

此类中重写了menu方法,为接口数组和名字进行了构造,子类构造之前需要先对父类进行构造,以至于选择使用什么功能就会调用指定的功能,数字与下标进行了对应。十分的巧妙。

6.NormalUser类

package user;

import operation.*;

import java.util.Scanner;

public class NormalUser extends User{
    public NormalUser(String name) {
        super(name);
        iOperations=new IOperation[]{new ExitOperation(),new FindOperation(),new BorrowOperation(),new ReturnOperation()};
    }
    @Override
    public int menu() {
        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);

        return scanner.nextInt();
    }
}

7.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();
          while(true) {

              int choice = user.menu();
              user.doOperation(choice, booklist);
          }
    }
}

此类先输入名字,然后选择身份,以选择的身份来实例化相应的对象,经过向上转型进行动态绑定,调用相应的menu方法,并且返回相应的选择操作的数字,用doOperation来实现具体某一身份的对应操作。十分的巧妙。因为当你实例化了某一身份,就会在接口数组里面存放对应身份的操作,然后就可以选择对应操作。

8.AddOperation类

package operation;

import book.Booklist;
import book.Books;

import java.util.Scanner;

public class AddOperation implements IOperation{

    @Override
    public void work(Booklist booklist) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入新增图书的名字");
        String name = scanner.nextLine();
        System.out.println("请输入新增图书的作者名字");
        String author = scanner.nextLine();
        System.out.println("请输入新增图书的类型");
        String type = scanner.nextLine();
        System.out.println("请输入新增图书的价格");
        double price = scanner.nextDouble();

        booklist.setBooks(booklist.getCountBook(),new Books(name,author,price,type));
        booklist.setCountBook(booklist.getCountBook()+1);
        System.out.println("新增成功");
    }
}

新增图书的操作

9.BorrowOperation类

package operation;

import book.Booklist;

import java.util.Scanner;

public class BorrowOperation implements IOperation {
    @Override
    public void work(Booklist booklist) {
        System.out.println("请输入你要借阅的图书的名字");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        for (int i = 0; i < booklist.getCountBook(); i++) {
            if (name.equals(booklist.getBooks(i).getName())&&(booklist.getBooks(i).isBorrowed()==false)) {
                booklist.getBooks(i).setBorrowed(true);
                System.out.println("借阅成功");
                return;
            }
        }
        System.out.println("没有你要借阅的图书");
    }
}

借阅图书的操作

10.DelOperation类

package operation;

import book.Booklist;

import java.util.Scanner;

public class DelOperation implements IOperation{
    @Override
    public void work(Booklist booklist) {
        System.out.println("请输入你要删除的图书的名字");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        for (int i = 0; i <booklist.getCountBook() ; i++) {
            if(name.equals(booklist.getBooks(i).getName())){
                for (int j = i; j <booklist.getCountBook()-1 ; j++) {
                    booklist.setBooks(j,booklist.getBooks(j+1));
                }
                booklist.setCountBook(booklist.getCountBook()-1);
                booklist.setBooks(booklist.getCountBook(),null);

                System.out.println("删除成功");

                return;
            }
        }
        System.out.println("找不到这本书");
    }
}

删除书本的操作,不要忘记覆盖后把最后一个元素置为null,防止内存泄漏

11.DisplayOperation类

package operation;

import book.Booklist;

public class DisplayOperation implements IOperation{
    @Override
    public void work(Booklist booklist) {
        for (int i = 0; i < booklist.getCountBook() ; i++) {
            System.out.println(booklist.getBooks(i));
        }
    }
}

显示图书的操作

12.ExitOperation

package operation;

import book.Booklist;

public class ExitOperation implements IOperation{
    @Override
    public void work(Booklist booklist) {
        for (int i = 0; i <booklist.getCountBook() ; i++) {
                 booklist.setBooks(i,null);
        }
        System.exit(0);//0表示正常退出

    }
}

退出的操作,退出之前要先将所有的书本置为null,防止内存泄漏

13.FindOperation类

package operation;

import book.Booklist;

import java.util.Scanner;

public class FindOperation implements IOperation{
    @Override
    public void work(Booklist booklist) {
        System.out.println("请输入你想要查找的书的名字");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        for (int i = 0; i <booklist.getCountBook() ; i++) {
            if(name.equals(booklist.getBooks(i).getName())){
                System.out.println("找到了这本书");
                System.out.println(booklist.getBooks(i));
                return;
            }
        }
        System.out.println("找不到这本书");

    }
}

查找书本的操作

14.ReturnOperation类

package operation;

import book.Booklist;

import java.util.Scanner;

public class ReturnOperation implements IOperation{
    @Override
    public void work(Booklist booklist) {

                System.out.println("请输入你要归还的图书的名字");
                Scanner scanner = new Scanner(System.in);
                String name = scanner.nextLine();
                for (int i = 0; i < booklist.getCountBook(); i++) {
                    if (name.equals(booklist.getBooks(i).getName())&&booklist.getBooks(i).isBorrowed()) {
                        booklist.getBooks(i).setBorrowed(false);
                        System.out.println("归还成功");
                        return;
                    }
                }
                System.out.println("没有你要归还的图书");
            }
        }

归还书本的操作

4.运行结果

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
作为一名新手Java程序员,我会先设计一个简单图书管理系统,主要包括图书的录入、查询、借阅和归还功能。首先,我会创建一个Book类来存储图书的信息,包括书名、作者、出版社、ISBN号等。然后,我会设计一个图书管理系统的界面,包括菜单和输入框,方便用户操作系统。 在录入图书的功能中,我会设置一个输入框让用户输入图书的信息,并将信息存储到一个ArrayList中。在查询图书的功能中,我会设置一个输入框让用户输入关键词进行搜索,并显示相关的图书信息。在借阅和归还图书的功能中,我会设置一个借阅和归还的按钮,让用户点击进行操作,并更新图书的借阅状态。 在编写代码的过程中,我会遵循面向对象的设计原则,将功能模块化,提高代码的重用性和可扩展性。我会注重异常处理,保证系统的稳定性和安全性。同时,我也会加入一些简单的算法,比如对图书信息进行排序和统计功能,提升系统的实用性。 在学习的过程中,我会多查阅相关的文档和教程,多尝试写一些小例子来熟悉Java语法和API。我还会多和有经验的程序员交流,向他们请教一些问题,争取快速提升自己的编程能力。 总的来说,作为新手Java程序员,我会从简单的功能入手,逐步完善图书管理系统,不断提高自己的编程水平。希望能够在实践中不断进步,一个高质量的图书管理系统

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值