简易图书管理系统

本篇文章讲介绍如何编写简易的图书管理系统,让我们来一起学习这个小程序

一.结果展示

这是我们最终实现的界面效果。不同的操作对象具有不同的操作界面,而每种界面的选项分别用不同的方法来实现,话不多说,下面开始教程

二.框架搭建

2.1创建图书和书架的包存放类

        存放书架和图书的类

        

        2.1.1创建图书类

        创建一个图书类,用于存放图书的属性,例如:书名,类型,作者,价格,是否被借出等。同时为类生成构造方法,获取或者设置书的各项数据,代码实现如下

public class book {


        private String name;
        private String author;
        private int price;
        private String type;
        private boolean isLend;

        public book(String name, String author, int price, String type) {
            this.name = name;
            this.author = author;
            this.price = price;
            this.type = type;

        }

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

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

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

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

    public void setIsLend(boolean isLend) {
        this.isLend = isLend;
    }

    public String getName() {
        return name;
    }

    public String getAuthor() {
        return author;
    }

    public int getPrice() {
        return price;
    }

    public String getType() {
        return type;
    }

    public boolean isIsLend() {
        return isLend;
    }



    @Override
    public String toString() {
        return "book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                (isLend?" 已借出":" 未借出")+
                '}';
    }
}

        2.1.2 创建书架类

        书架类用于存储图书,我们可以通过创建一个图书类型的数组用于存储图书,并在需要访问对应图书时通过访问书架 获取图书。实现代码如下

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("西游记","吴承恩",12,"小说");
        books[2] =new book("红楼梦","曹雪芹",9,"小说");
        this.usedSize = 3;
    }

    public book[] getBooks() {//获取书架
        return books;
    }

    public book getbook(int pos){//获取到书架某个位置的图书
        return books[pos];
    }

    public int getUsedSize() {//获取书架存放多少本书
        return usedSize;
    }
    public void setbooks(int pos,book boak){//为书架的一个位置设置书
        books[pos] = boak;
    }

    public void setUsedSize(int usedSize) {//获取书架里存放多少本书
        this.usedSize = usedSize;
    }

    public boolean isFull(){    //获取书架是否装满
        if(this.usedSize == books.length){
            return true;
        }
        return false;
    }
}

为了方便展示,在创建书架的时候为书架添加三本书,此处展示为存储10本书的书架,可以更改书架的数量

2.2创建用户

        在展示界面可以看到系统具有两种用户,分别为管理员和普通用户,作为用户存在共同的特征例如:名字,菜单方法等 ,我们可以通过继承来创建不同的用户类,可以增强代码的可读行,

创建一个用户的包存放用户v

2.2.1.创建用户类(User)

          在用户类中,存放用户的基本数据,代码如下

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 doIoperation(int choice,Booklist booklist){
        this.iOperations[choice].work(booklist);
    }
}

    2.2.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(){
        Scanner scan = new Scanner(System.in);
        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("请选择:");
        int choice = scan.nextInt();
        return choice;
    }
}

2.2.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 BorrowedOperation(),
                new ReturnOperation()
        };
    }
    public int menu(){
        Scanner scan = new Scanner(System.in);
        System.out.println("********普通用户菜单*******");
        System.out.println("   1.查找图书");
        System.out.println("   2.借出图书");
        System.out.println("   3.归还图书");
        System.out.println("   0.退出系统");
        System.out.println("*************************");
        System.out.println("请选择:");
        int choice = scan.nextInt();
        return choice;
    }
}

2.3创建功能类实现系统的功能

             2.3.1创建功能的包存放功能类,在类内实现功能的方法

        2.3.2功能类的搭建

        类的创建入上所示,每个类内存在一个work方法,为了方便在后面调用方法,通过实现接口的方式将功能串起来,所有的功能类都实现了IOperation接口,接口中只有一个抽线方法work,

代码如下

package operation;

import Book.Booklist;

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

2.3.3功能代码的实现

        1.查找图书(FindOperation)

        输入所需要查找的书名,同个遍历书架数组获取与输入名相同的图书,通过toString方法将图书的信息进行输出,

实现代码如下:

import Book.book;

import java.util.Scanner;

public class FindOperation implements IOperation{
    public void work(Booklist booklist){
        System.out.println("查找图书");
        System.out.println("请输入查找的书名:");
        Scanner scan = new Scanner(System.in);
        String name = scan.nextLine();
        int currentSize = booklist.getUsedSize();//获取书架的长度
        for(int i = 0;i<currentSize;i++){        //遍历书架
            book book = booklist.getbook(i);
            if(book.getName().equals(name)){     //判断书名
                System.out.println("找到了");
                System.out.println(book);
                return;
            }
        }
        System.out.println("没有你要找的书");
        return ;
    }
}
2.展示图书(ShowOperation)

        直接通过遍历书架的方式将所有的图书展示出来了,实现过程与查找类似。

代码如下:

package operation;

import Book.Booklist;

public class ShowOperation implements IOperation {
    public void work(Booklist booklist){
        System.out.println("查看图书...");
        int currentSize = booklist.getUsedSize();
        for(int i =0;i<currentSize;i++){
            System.out.println(booklist.getbook(i));
        }
        System.out.println("一共有"+booklist.getUsedSize()+"本书");
        return;
    }
}
3.添加图书(AddOperation)

        添加图书的实现,首先需要判断书架能否存放新的书,然后获取到书架没有书的位置,通过调用setbook方法将书的属性放进书架。

实现代码如下:

package operation;

import Book.Booklist;
import Book.book;

import java.awt.print.Book;
import java.util.Scanner;

public class AddOperation implements IOperation {
    public void work(Booklist booklist){
        if(booklist.isFull()){
            System.out.println("书架满了");
            return;
        }
        Scanner scan = new Scanner(System.in);
        System.out.println("新增图书...");
        System.out.println("请输入新增的书名:");
        String name = scan.nextLine();
        System.out.println("请输入书的作者:");
        String  author = scan.nextLine();
        System.out.println("请输入书的价格:");
        int price = scan.nextInt();
        System.out.println("请输入书的类型:");
        String type = scan.nextLine();
        book books = new book(name,author,price,type);//创建一本新书
        int currentSize = booklist.getUsedSize();
        booklist.setbooks(currentSize,books);//将新书放进书架
        booklist.setUsedSize(currentSize+1);//图书的数量+1
        System.out.println("添加图书成功");

    }
}
4删除图书(DelOperation)

        删除图书需要先找到你要删除读书的位置,通过将后一本书覆盖前一本书的方式将书删除,实现代码如下:

package operation;

import Book.Booklist;
import Book.book;

import java.util.Scanner;

public class DelOperation implements IOperation {
    public void work(Booklist booklist){
        System.out.println("删除图书...");
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入删除的书名:");
        String name = scan.nextLine();
        int pos = -1;
        int i = 0;
        int currentSize = booklist.getUsedSize();
        for(;i<currentSize;i++){
            book book = booklist.getbook(i);
            if(book.getName().equals(name)){
                //System.out.println("找到了");
                pos = i;
                for(int j = i;j<currentSize-1;j++){
                    book lbook = booklist.getbook(j+1);
                    booklist.setbooks(j,lbook);
                }
                booklist.setUsedSize(currentSize-1);
                booklist.setbooks(currentSize-1,null);
                break;
            }
        }
        if(i >= currentSize){
            System.out.println("没找到你要的书;");
        }

    }
}
5.借出图书(BorrowedOperation)

通过查找书名的方式访问到图书,将图书的属性设置成借出状态,同时需要判断这本书的状态是否已经被借出,

ps:默认为false为未借出

实现代码如下:

package operation;

import Book.Booklist;

import java.util.Scanner;

public class BorrowedOperation implements IOperation{
    public void work(Booklist booklist){
        Scanner scan = new Scanner(System.in);
        System.out.println("借出图书...");
        String name = scan.nextLine();
        int currentSize = booklist.getUsedSize();
        for(int i = 0;i<currentSize;i++){
            if(booklist.getbook(i).getName().equals(name)){
                System.out.println("找到了");
                if(booklist.getbook(i).isIsLend()){
                    System.out.println("这本书并未借出,成功借出");
                booklist.getbook(i).setIsLend(true);
                return;
                }else{
                    System.out.println("这本书已被借出,借出失败");
                    return;
                }
            }
        }
        System.out.println("未找到你要的书");
    }
}
   6.归还图书(ReturnOperation)

        实现代码与借出图书一致

        代码如下:

package operation;

import Book.Booklist;

import java.util.Scanner;

public class ReturnOperation implements IOperation{
    public void work(Booklist booklist){
        System.out.println("归还图书...");
        Scanner scan = new Scanner(System.in);
        String name = scan.nextLine();
        int currentSize = booklist.getUsedSize();
        for(int i = 0;i<currentSize;i++){
            if(booklist.getbook(i).getName().equals(name)){
                System.out.println("找到了");
                if(booklist.getbook(i).isIsLend()){
                    System.out.println("这本书已被借出,归还成功");
                    booklist.getbook(i).setIsLend(false);
                    return;
                }else{

                    System.out.println("这本书并未借出,归还失败");
                    return;
                }
            }
        }
        System.out.println("书架中并没有这本书需要归还");
    }
}
7.退出系统(ExitOperation)

退出系统可以用到System.exit方法直接结束程序实现,值得注意的是在结束是为了防止内存泄漏,可以通过遍历数组的方式将书架的内存先释放后退出系统,可以不做

实现代码如下:

package operation;

import Book.Booklist;

public class ExitOperation implements IOperation {
    public void work(Booklist booklist){
        System.out.println("退出系统...");
        System.exit(0);
    }
}

三.主函数

在主函数中进行系统的登陆操作,需要在登陆的过程中实例化用户对象,和实例化书架对象,

实现代码如下:

import Book.Booklist;
import user.AdminUser;
import user.NormalUser;
import user.User;

import java.util.Scanner;

public class main {

    public static User login(){
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入你的姓名:");
        String name = scan.nextLine();
        System.out.println("请输入你的身份:1.管理员 2.普通用户");
        int choice = scan.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 user =  login();
        while (true){
        int choice = user.menu();


        user.doIoperation(choice,booklist);

        }
    }
}

四.总结

程序的介绍就到此为止,新人博客写的还是差强人意,很多地方不会解释还请谅解,图书管理系统作为初学者学习java语言是一次不错的项目,可以通过练习这个项目掌握javaSE的大部分内容,最后感谢大家观看。

  • 60
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值