Java图书管理系统

图书管理系统

Java的多态和接口 面向对象的思想很强烈

对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mXZEUehk-1689731655781)(./%E5%9B%BE%E4%B9%A6%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F.assets/image-20230719093701879-1689730624100-1.png)]

代码

package book;


/**
 * @author myy
 */
public class Book {
    private String _name;//书名
    private String _author;
    private String _type;
    private double _price;

    public Book(String name, String author, String type, double price) {
        this._name = name;
        this._author = author;
        this._type = type;
        this._price = price;

    }

    public String get_name() {
        return _name;
    }

    public void set_name(String _name) {
        this._name = _name;
    }

    public String get_author() {
        return _author;
    }

    public void set_author(String _author) {
        this._author = _author;
    }

    public String get_type() {
        return _type;
    }

    public void set_type(String _type) {
        this._type = _type;
    }

    public double get_price() {
        return _price;
    }

    public void set_price(double _price) {
        this._price = _price;
    }

    @Override
    public String toString() {
        return
                "{ 书名='" + _name + '\'' +
                        ", 作者='" + _author + '\'' +
                        ", 类型='" + _type + '\'' +
                        ", 价格=" + _price + ','
                ;
    }


}

书库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4PuDjYAr-1689731655790)(./%E5%9B%BE%E4%B9%A6%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F.assets/image-20230719093713067-1689730634274-3.png)]

代码

package book;
import operator.IOperation;
import java.util.*;
import  javafx.util.*;
import  javafx.*;

import javax.swing.text.html.HTMLDocument;

/**
 * @author myy
 */ //书架
public class BookList  {
    //ArrayList<Book> al = new ArrayList<Book>();
    //单纯的数组是不行的,这里使用K-V的map
    //int 用于记录存量
    //这里使用内部类,但是不好看,可以自己封装一个kv键值对
    protected  Map<String, AbstractMap.SimpleEntry<Book,Integer>> _map= new HashMap<String, AbstractMap.SimpleEntry<Book,Integer> >();
    private int sz;//记录有效数据个数
    public BookList()//默认构造函数
    {
        _map.put("三国演义", new AbstractMap.SimpleEntry<>(new Book("三国演义", "罗贯中", "历史演义小说", 52.5), 5));
        _map.put("水浒传", new AbstractMap.SimpleEntry<>(new Book("水浒传", "施耐庵", "章回体长篇小说", 45.5), 5));
        _map.put("西游记", new AbstractMap.SimpleEntry<>(new Book("西游记", "吴承恩", "浪漫主义章回体长篇神魔小说", 56.5),6 ));
        _map.put("红楼梦",new AbstractMap.SimpleEntry<>(new Book("红楼梦", "曹雪芹", "章回体类长篇小说", 78.5), 7));
        _map.put("无职转生", new AbstractMap.SimpleEntry<>(new Book("无职转生", "理不尽な孫の手", "轻小说", 90.5), 10));
        sz = _map.size();
    }
   public  void Print()
   {
       for (Map.Entry<String, AbstractMap.SimpleEntry<Book, Integer>> entry : _map.entrySet()) {
           System.out.printf("%s",entry.getValue().getKey());
           System.out.printf("存量= "+ entry.getValue().getValue()+'}'+'\n');
       }
   }
    public Map<String, AbstractMap.SimpleEntry<Book,Integer>> Get_map()
    {
        return  _map;
    }
}


用户

在这里插入图片描述

抽象类代码

package user;

import book.BookList;
import operator.IOperation;

/**
 * @author myy
 */
public abstract  class User {
    protected String _name;
    protected IOperation[] ioperations;//利用一个静态数组存放行为
    public User(String name)
    {
        _name=name;

    }
    public abstract int  menu();//菜单
    public  boolean DoOperation(int choice, BookList bookList)
    {

       return  ioperations[choice].work(bookList);
    }

}

管理者代码

package user;

import operator.*;

import java.util.Scanner;

/**
 * @author myy
 */

public class AdminUser extends User {
    public AdminUser(String name) {
        super(name);
        ioperations = new IOperation[]{
                new ExitOp(),//0
                new AddOp(),//1
                new DelOp(),//2
                new FindOp(),//3
                new DisplayOp(),//4
        };
    }


    //菜单
    @Override
    public int menu() {
        System.out.println("********图书管理系统**************");
        System.out.println("0.退出       ");
        System.out.println("1. 添加图书  2.删除图书");
        System.out.println("3. 查找图书  4.显示图书");
        System.out.println("*****************************");
        System.out.println("请输入你的操作:");

        Scanner sc = new Scanner(System.in);
        int choice = sc.nextInt();
        return choice;
    }
}

普通用户代码

package user;

import book.BookList;
import operator.*;

import java.sql.SQLClientInfoException;
import java.util.Scanner;

/**
 * @author myy
 */
public class NormalUser extends User {

    public NormalUser(String name) {
        super(name);
        super.ioperations = new IOperation[]{
                new ExitOp(),//0
                new BorrowOp(),//1
                new ReturnOp(),//2
                new DisplayOp()//3
        };
    }

    //
    public int menu() {
        System.out.println("********图书管理系统************");
        System.out.println("0退出      ");
        System.out.println("1.借阅图书   2.归还图书");
        System.out.println("3.显示图书           ");
        System.out.println("*****************************");
        System.out.println("请输入你的操作:");
        Scanner sc = new Scanner(System.in);
        int choice = sc.nextInt();
        return choice;
    }
}

操作接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-silf3kYH-1689731655792)(./%E5%9B%BE%E4%B9%A6%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F.assets/image-20230719093834556-1689730715740-7.png)]

接口

package operator;

import book.Book;
import book.BookList;

/**
 * @author myy
 */
public interface IOperation {

    boolean work(BookList bookList);
}

AddOp

package operator;

import book.Book;
import book.BookList;

import java.util.AbstractMap;
import java.util.Scanner;

/**
 * @author myy
 */
public class AddOp implements IOperation {

    //   private String _name;//书名
//   private String _author;
//   private  String _type;
//   private  double _price;
//   private boolean _isBorrow;//是否借出,默认是false
    public boolean  work(BookList bookList) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入图书名:");
        String name = sc.nextLine();
        System.out.println("请输入作者:");
        String author = sc.nextLine();
        System.out.println("请输入作品类型:");
        String type = sc.nextLine();
        System.out.println("请输入作品价格:");
        double price = sc.nextDouble();
        System.out.println("请输入书本数量:");
        int cnt=sc.nextInt();
        if (bookList.Get_map().containsKey(name)) {
            bookList.Get_map().get(name).setValue(bookList.Get_map().get(name).getValue() + cnt);

        } else {
            bookList.Get_map().put(name,new AbstractMap.SimpleEntry<>(new Book(name,author,type,price),cnt));
        }
        return  true;

    }
}

BorrowOp

package operator;

import book.BookList;

import java.util.Scanner;

/**
 * @author myy
 */
public class BorrowOp implements IOperation {
    public boolean  work(BookList bookList) {
        DisplayOp  displayOp =new DisplayOp();
        displayOp.work(bookList);
        System.out.println("请输入你要借的书名:");
        Scanner sc=new Scanner(System.in);
        String name=sc.nextLine();
        if(bookList.Get_map().containsKey(name)){
            Integer cnt= bookList.Get_map().get(name).getValue();
            if(cnt>0){
                bookList.Get_map().get(name).setValue(bookList.Get_map().get(name).getValue()-1);
            }else
            {
                System.out.println("很抱歉,该书没有存量了");

            }

        }else
        {
            System.out.println("很抱歉,书库中没有"+name+"的书");
        }
        return  true;

    }
}

DelOp

package operator;

import book.BookList;
import sun.awt.geom.AreaOp;

import java.util.Scanner;

/**
 * @author myy
 */
public class DelOp implements IOperation{

    public boolean  work(BookList bookList)
    {

        System.out.println("请输入书名:");
        Scanner sc=new Scanner(System.in);
        String name=sc.nextLine();
        if ( bookList.Get_map().containsKey(name))
        {
            Integer cnt= bookList.Get_map().get(name).getValue();
            if(cnt>0){
                bookList.Get_map().get(name).setValue(bookList.Get_map().get(name).getValue()-1);
            }else
            {
                //这里不删除该书的数据结构了,提醒书库缺书了
                System.out.println("该书,书本缺书了");
            }
        }else
        {
            System.out.println("书本不存在");
        }
        return  true;

    }

}

DisplayOp

package operator;

import book.BookList;

/**
 * @author myy
 */
public class DisplayOp implements IOperation {
    
    public boolean  work(BookList bookList) {
        System.out.println("***********书单****************");
        bookList.Print();
        System.out.println("******************************\n");
        return  true;

    }
}

ExitOp

package operator;

import book.BookList;

/**
 * @author myy
 */
public class ExitOp implements IOperation {
    public boolean  work(BookList bookList) {
        System.out.println("****************New_Young*******");
        return  false;


    }
}

FindOp

package operator;

import book.BookList;

import java.util.Scanner;

/**
 * @author myy
 */
public class FindOp  implements IOperation{
    public boolean  work(BookList bookList)
    {
        System.out.println("请输入你要找的书名:");
        Scanner sc=new Scanner(System.in);
        String name=sc.nextLine();

        if(bookList.Get_map().containsKey(name)){
            System.out.println("书本存在");
        }else
        {
            System.out.println("书本不存在");
        }
        return  true;
    }
}

ReturnOp

package operator;

import book.BookList;

import java.util.Scanner;

/**
 * @author myy
 */
public class ReturnOp implements IOperation {
    public boolean  work(BookList bookList) {

        System.out.println("请输入你要退还的书名:");
        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();
        bookList.Get_map().get(name).setValue(bookList.Get_map().get(name).getValue() + 1);
        System.out.println("退还书本成功");
        return  true;
    }
}

Main

在这里插入图片描述

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

import java.util.Scanner;

import user.*;

/**
 * @author myy
 */
public class Main {
    //向上转型
    public static User login() {
        System.out.println("请输入你的姓名");
        Scanner sc = new Scanner(System.in);
        String username = sc.nextLine();

        System.out.println("请输入你的身份 -> 0管理者  1普通用户 3.退出登录");
        int choice = sc.nextInt();
        if (choice == 0) {
            return new AdminUser(username);
        } else if (choice == 1) {
            return new NormalUser(username);
        } else {
            return null;
        }
    }

    public static void main(String[] args) {
        //0. 准备数据
        BookList bookList = new BookList();
        //1.登陆
        //*********精华内容:接口数组,多态*********
        while (true) {
            User user = login();
            if (user == null) {
                System.out.println("退出登录成功");
                System.exit(0);
            } else {
                while (true) {
                    int choice = user.menu();
                    if (user.DoOperation(choice, bookList)) {
                        continue;
                    } else {
                        break;
                    }
                }
            }
        }
    }
}

结果

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值