栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

简单的图书管理系统(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  

删除书本的操作,不要忘记覆盖后把最后一个元素置为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  

退出的操作,退出之前要先将所有的书本置为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  

查找书本的操作

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.运行结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/863561.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号