当前位置:首页 » 《资源分享》 » 正文

JavaSE:图书管理系统

13 人参与  2024年04月17日 08:02  分类 : 《资源分享》  评论

点击全文阅读


目录

一、前言

二、内容需求

三、类的设计

(一)图书类

1.Book 类

 2.BookList 类

 (二)操作类

1.添加图书AddOperation类

2.借阅图书BorrowOperation类

3.删除图书DelOperation类

4.显示图书ShowOperation类

5.退出系统ExitOperation类

6.查找图书FindOperation类

7.归还图书ReturnOperation类

8.IOperation接口

(三)用户类

1.User 类

2.AdminUser类

3.NormalUser类

(四)Main函数入口

四、运行演示

(一)管理员

(二)普通用户

​编辑 五、总结


一、前言

Hello!大家晚上好呀~,我们前面分享了许多关于JavaSE的一些语法知识,今天我们就通过运用前面所学的知识来写一个图书管理系统,让我们对这些知识点掌握得更加熟练。

二、内容需求

1 、简单的登录
2 、管理端

查找图书新增图书删除图书显示图书退出系统

3 、用户端

查找图书借阅图书归还图书退出系统

三、类的设计

我们创建一个book包,然后在book包里面放一个Book类和一个BookList类;接着创建一个operation包,这里面放的是我们的各种操作方法;然后是我们的user包,里面分别放我们的管理员的类和普通成员的类;最后是我们的Main类,我们的程序从这里开始执行。

(一)图书类

1.Book 类

我们在book 包里面创建 Book 类。该类里面是我们的图书属性,包括书名,作者名,价格、种类、是否被借出,然后给出set和get方法,方便我们后面对数据进行修改,最后重写一下toString()方法,方便打印输出。

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;    }    @Override    public String toString() {        return "Book{" +                "name='" + name + '\'' +                ", author='" + author + '\'' +                ", price=" + price +                ", type='" + type + '\'' +                (isBorrowed == true ? " 已借出" : " 未借出") +                //", isBorrowed=" + isBorrowed +                '}';    }}

 2.BookList 类

创建好Book类后就要创建书架类,书架是存放我们的书籍的地方,我们可以在这里面给一个数组,用于存放不同的书。然后定义我们书的数量,这里我们用userSize用来记录我们图书的数量。set和get方法用于我们对userSize的调整,同时我们给出了调整书架里面书的方法。这里我们写一个构造方法,用于把我们的书架初始化为有三本书,指定了书的数量userSize的大小为3。

package book;public class BookList {    private Book[] books = new Book[10];    private int usedSize;    public BookList() {        books[0] = new Book("三国演义", "罗贯中", 10, "小说");        books[1] = new Book("西游记", "吴承恩", 11, "小说");        books[2] = new Book("红楼梦", "曹雪芹", 12, "小说");        this.usedSize = 3;    }    public Book getBook(int pos) {        return books[pos];    }    public void setBook(int pos, Book book) {        books[pos] = book;    }    public int getUsedSize() {        return usedSize;    }    public void setUsedSize(int usedSize) {        this.usedSize = usedSize;    }    public boolean isFull() {        if (this.usedSize == books.length) {            return true;        } else            return false;    }}

 (二)操作类

1.添加图书AddOperation类

在这个类实现对图书的增加,先输入书的信息,然后 new 一本书。

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("新增图书...");        if (bookList.isFull()) {            System.out.println("书架满了,不能新增!");            return;        }        System.out.println("请输入你要新增图书的名称:");        Scanner scanner = new Scanner(System.in);        String bookName = scanner.nextLine();        System.out.println("请输入你要新增图书的作者:");        String author = scanner.nextLine();        System.out.println("请输入你要新增图书的价格:");        int price = scanner.nextInt();        //scanner在输入输出时,要int在String后面,除非用户scanner.nextLine()来回收nextInt换行        scanner.nextLine();        System.out.println("请输入你要新增图书的类型:");        String type = scanner.nextLine();        Book book = new Book(bookName, author, price, type);        int currentSize = bookList.getUsedSize();//目前存放3本书        bookList.setBook(currentSize, book);        bookList.setUsedSize(currentSize + 1);        System.out.println("新增图书成功!");    }}

2.借阅图书BorrowOperation类

在这个类里实现图书借阅。

package operation;import book.Book;import book.BookList;import java.util.Scanner;public class BorrowedOperation implements IOperation {    @Override    public void work(BookList bookList) {        System.out.println("借阅图书...");        System.out.println("请输入你要借阅的书籍:");        Scanner scanner = new Scanner(System.in);        String bookName = scanner.nextLine();        int currentSize = bookList.getUsedSize();        for (int i = 0; i < currentSize; i++) {            Book book = bookList.getBook(i);            if (book.getName().equals(bookName)) {                book.setBorrowed(true);                System.out.println("借阅成功!");                return;            }        }        System.out.println("借阅失败!");    }}

3.删除图书DelOperation类

在这里实现对图书的删除。

package operation;import book.Book;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 bookName = scanner.nextLine();        int currentSize = bookList.getUsedSize();        int pos = -1;        int i = 0;        for (i = 0; i < currentSize; i++) {            Book book = bookList.getBook(i);            if (book.getName().equals(bookName)) {                //如果找到这本书就记录它的下标                pos = i;                break;            }        }        if (i >= currentSize) {            System.out.println("没有找到这本书!");            return;        }        //开始删除        for (int j = 0; j < currentSize - 1; j++) {            Book book = bookList.getBook(j + 1);            bookList.setBook(j, book);        }        System.out.println("删除图书成功!");        //修改setUsedSize        //把后一个位置的图书往前一个位置存放        bookList.setUsedSize(currentSize - 1);        //将最后一个位置置为空        bookList.setBook(currentSize - 1, null);    }}

4.显示图书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.getBook(i);            System.out.println(book);        }    }}

5.退出系统ExitOperation类

在这里实现对图书管理系统的退出功能。

package operation;import book.BookList;public class ExitOperation implements IOperation {    @Override    public void work(BookList bookList) {        System.out.println("退出系统");        int currentSize = bookList.getUsedSize();        for (int i = 0; i < currentSize - 1; i++) {            bookList.setBook(i, null);        }        System.exit(0);    }}

6.查找图书FindOperation类

在这里实现对图书的查找功能。

package operation;import book.Book;import book.BookList;import java.util.Scanner;public class FindOperation implements IOperation {    public void work(BookList bookList) {        System.out.println("查找图书...");        System.out.println("请输入你要查找的书籍:");        Scanner scanner = new Scanner(System.in);        String bookName = scanner.nextLine();        int currentSize = bookList.getUsedSize();        for (int i = 0; i < currentSize; i++) {            Book book = bookList.getBook(i);            if (book.getName().equals(bookName)) {                System.out.println("找到了这本书");                System.out.println(book);                return;            }        }        System.out.println("没有找到这本书");    }}

7.归还图书ReturnOperation类

在这里实现图书的归还功能。

package operation;import book.Book;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 bookName = scanner.nextLine();        int currentSize = bookList.getUsedSize();        for (int i = 0; i < currentSize; i++) {            Book book = bookList.getBook(i);            if (book.getName().equals(bookName)) {                book.setBorrowed(false);                System.out.println("归还成功!");                return;            }        }        System.out.println("归还失败!");    }}

8.IOperation接口

我们在这里写一个接口,后面我们调用这个接口,就可以重写这个抽象类。

package operation;import book.BookList;public interface IOperation {    public void work(BookList bookList);}

(三)用户类

1.User 类

我们在这里写抽象类,是为了方便对它进行继承。我们的抽象类有name成员,还有IOperation类型的数组,我们可以向接口里面放我们的操作方法,其它的类都实现了我们的接口并且重写了接口里面的work()方法。

package user;import book.BookList;import operation.IOperation;public abstract class User {    protected String name;    protected IOperation[] iOperations;    public User(String name) {        this.name = name;    }    public abstract int menu();    public void doIoperations(int choice, BookList bookList) {        this.iOperations[choice].work(bookList);    }}

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 ShowOperation()        };    }    public int menu() {        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("请输入你的操作:");        Scanner scanner = new Scanner(System.in);        int choice = scanner.nextInt();        return choice;    }}

3.NormalUser类

我们在这里先帮父类写构造方法,然后将IOperation进行初始化里面放着是我们普通用户所能进行的一系列操作,再下面就是我们的菜单方法,因为我们的普通用户和管理员所能进行的操作是不一样的,需要同时选择我们的操作。

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 BorrowedOperation(),                new ReturnOperation()        };    }    public int menu() {        System.out.println("*****普通用户菜单*****");        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;    }}

(四)Main函数入口

我们一开始先new一个BookList——书架,然后开始登录操作输入身份之后,返回一个用户的对象,此时我们拥有了两个对象,一个是书架bookList,还有就是我们的用户对象,然后我们的用户就可以对我们的书架进行一系列的操作。

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("请输入你的身份:1.管理员 2.普通用户");        int choice = scanner.nextInt();        if (choice == 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();        //user有可能引用管理员身份,有可能引用普通用户身份        while (true) {            User user = login();            int choice = user.menu();            user.doIoperations(choice, bookList);        }    }}

程序运行后先打印我们的菜单,顺便返回我们输入的操作,接着拿着我们的操作choice和我们的书架bookList去执行,user.doWork(),拿着我们的choice找到IOperation,运行对应的操作,最终实现我们指定的功能。

四、运行演示

(一)管理员

  

(二)普通用户

 

 五、总结

我们通过利用前面所学的知识点:类,抽象类,封装,继承,多态,接口等知识,将它们综合运用起来,就可以写出一个简单的图书管理系统,以上就是本期JavaSE的分享内容,感谢大家的支持,我们下次再见!!!


点击全文阅读


本文链接:http://zhangshiyu.com/post/96314.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1