图书馆增删改查,循环,接口,继承

代码可以仔细看理解看,不要强制记忆,找方法,基础增删改查也就这几个,要会调用,保持清洗头脑,不要乱了,理一理思路,养成加注释习惯,对自己学习有很大帮助,

题目:

定义图书类(Book抽象类)

图书类有书名,作者,库存数量3个属性,重写toString方法用于返回图书所有属

性的信息,定义带上述3个属性的构造方法。

package book;

/**
 * 图书类
 * @author 86166
 */
public abstract class Book {
    protected String bookname;
    protected String name;
    protected int kc;

    @Override
    public String toString() {
        return "Book{" +
                "bookname='" + bookname + '\'' +
                ", name='" + name + '\'' +
                ", kc=" + kc +
                '}';
    }

    public String getBookname() {
        return bookname;
    }

    public void setBookname(String bookname) {
        this.bookname = bookname;
    }

    public String getName() {
        return name;
    }

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

    public int getKc() {
        return kc;
    }

    public void setKc(int kc) {
        this.kc = kc;
    }

    public Book(String bookname, String name, int kc) {
        this.bookname = bookname;
        this.name = name;
        this.kc = kc;
    }
}

定义儿童图书类、小说类

儿童图书类和小说类是图书类的子类,儿童图书类有适合阶段”属性,值可以为:“幼儿”,“儿童”和“少年”。小说类有“类型“属性

两个类都重写toString方法用于返回所有属性的信息(要用到super关键字)。

package book;

/**
 * 儿童类子类
 * @author 86166
 */
public class Children extends Book{
    //适合阶段属性
    private String stage;

    public String getStage() {
        return stage;
    }

    public void setStage(String stage) {
        this.stage = stage;
    }

    @Override
    public String toString() {
        return "儿童书名 - 书名:"+bookname+"\t作者:"+name+"\t库存量:"+kc+"\t适合阶段:"+stage;
    }

    public Children(String bookname, String name, int kc, String stage) {
        super(bookname, name, kc);
        this.stage = stage;
    }
}
package book;

/**
 * 小说类子类
 * @author 86166
 */
public class Novel extends Book{
    //小说类型属性
    String type;

    public Novel(String bookname, String name, int kc, String type) {
        super(bookname, name, kc);
        this.type = type;
    }

    @Override
    public String toString() {
        return "小说书名 - 书名:"+bookname+"\t作者:"+name+"\t库存量:"+kc+"\t类型:"+type;
    }

    public String getType() {
        return type;
    }

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

定义图书管理类(BookManager)

  1. 图书管理类中定义Book数组(长度10)用于存储图书
  2. 定义增加图书的方法addBook(Book b)用于将图书存储到数组中去,返回true 或false表示图书是否增加成功(数组满了会增加失败)。
  3. 定义showAll()方法用于遍历输出数组中所有图书的详细信息。
  4. 进货功能:stock(String name,int num):进货(入库)方法 参数分别为图书名称 和 进货数量,无返回值。如果图书名称已经存在,修改对应图书的数量,如果图书名称不存在,则提示无法增加库存
  5. 售货功能: sell(String name,int num):出售(出库)方法,参数分别为图书名称 和 售出数量,无返回值。判断图书名称是否存在,不存在给出提示,正确判断图书数量,不足时给出提示 。如果相等,正常出库并删除该商品,库存数量多于售出数量,正确售出图书,数据修改正确,效果正确
  6. 创建区间查询方法,查询库存量符合最小最大之间符合条件的图书
  7. 创建精确查找方法,根据图书名称,查找是否存在,存在返回对象,不存在返回null
  8. 创建模糊查询方法,根据图书名称模糊查询,存在打印对象信息,不存在提示
  9. 创建删除方法,根据图书姓名删除
  10. 按库存量的降序排序
    package book;
    
    import com.sun.media.jfxmediaimpl.HostUtils;
    
    /**
     * 管理图书类
     * @author 86166
     */
    public class BookManager implements StockAndSell{
        //储存图书的数组
        Book[] books = new Book[10];
        //当前的储存数量
        //相当于索引
        int count = 0;
    
        //图书添加
        public boolean addBook(Book b){
            for (int i = 0; i < count; i++) {
                if (books[i].getBookname().equals(b.getBookname())){
                    System.out.println("不能同名请重新输入");
                    return false;
                }
            }
            if (count < books.length){
                books[count++] = b;
                System.out.println("添加成功");
                return true;
            }else {
                System.out.println("添加失败");
                return false;
            }
        }
        //遍历数组展示信息
        public void showAll(){
            for (int i = 0; i < count; i++) {
                System.out.println(books[i].toString());
            }
        }
        //进货功能
        @Override
        public void stock(String bookname, int num) {
            boolean found = false;
            for (int i = 0; i < count; i++) {
                if (books[i].bookname.equals(bookname)){
                    books[i].kc+=num;
                    System.out.println("成功进货"+num+"本《"+bookname+"》");
                    found = true;
                }
            }
            if (!found){
                System.out.println("无法增加,不存在此书");
            }
        }
        //售货功能
        @Override
        public void sell(String bookname, int num) {
            boolean found = false;
            for (int i = 0; i < count; i++) {
                if (books[i].bookname.equals(bookname)){
                    if (books[i].kc<num){
                        System.out.println("库存不足");
                    }else {
                        books[i].kc-=num;
                        System.out.println("成功售出:");
                    }
                    found = true;
                    break;
                }
            }
            if (!found){
                System.out.println("售出失败不存在此书");
            }
        }
        //区间查询  区间最小值  区间最大值
        public void interval(int max,int min){
            //循环遍历
            for (int i = 0; i < count; i++) {
                //给判断
                if (books[i].kc>=min && books[i].kc<=max){
                    //输出
                    System.out.println(books[i].toString());
                }
            }
        }
        //精确查找
        public Book precision(String bookname){
            for (int i = 0; i < count; i++) {
                if (books[i].getBookname().equals(bookname)){
                    //books[i]在程序中充当的是对象
                    return books[i];
                }
            }
            //不存在返回空
            return null;
        }
    
        //模糊查找
        public String blur(String bookname){
            for (int i = 0; i < count; i++) {
                if (books[i].getBookname().equals(bookname)){
                    return books[i].toString();
                }
            }
            return "模糊查询并未查到此书";
        }
        //删除方法,根据图书姓名删除
        public void delete(String bookname){
            //给定条件
            boolean found = false;
            //循环遍历数组
            for (int i = 0; i < count; i++) {
                //给条件进行判断
                if (books[i] != null && books[i].getBookname().equals(bookname)){
                    //判断成立后进行循环数组
                    for (int j = 0; j < books.length; j++) {
                        //将最后一位元素设为空
                        //将后一位元素往前一位覆盖
                        if (j == books.length-1){
                            books[j] = null;
                        }else {
                            books[j] = books[j+1];
                        }
                    }
                    System.out.println("删除成功");
                    //删除成功数组减一
                    count--;
                    found = true;
                }
            }
            if (!found){
                System.out.println("删除失败,未找到此书");
            }
        }
        //按库存降序排序
        public void show(){
            //采用冒泡排序
            for (int i = 0; i < count; i++) {
                for (int j = 0; j < count-i-1; j++) {
                    //交换
                    if (books[j].kc<books[j+1].kc){
                        //注意此处采用降序,升序将 < 换成 > 号
                        Book t = books[j];
                        books[j] = books[j+1];
                        books[j+1] = t;
                    }
                }
            }
            //遍历循环输出
            for (int i = 0; i < count; i++) {
                //此处加个判断不为空则输出
                if (books[i]!=null){
                    System.out.println(books[i]);
                }
            }
        }
    }
    

创建测试类中定义主方法,提供循环菜单选项

1.添加图书 2.展示所有图书 3.进货 4.售货 5.区间查询 6.精确查找 7.模糊查询 8.删除  9.排序 10.退出

输入其他数字有提示 直到输入10退出

package book;

import java.util.Scanner;

/**
 * @author 86166
 */
public class Test {
    public static void main(String[] args) {
        //创建BookManger对象
        BookManager bookManager = new BookManager();
        //创建键盘录入对象
        Scanner scanner = new Scanner(System.in);
        //while循环(注意这里是死循环)
        while (true){
            //输出菜单栏
            System.out.println("----------------------------");
            System.out.println("1.添加图书  2.显示所有图书  3.进货  4.售货  5.区间查询  6.精确查找  7.模糊查找  8.删除图书  9.按库存降序  10.循环输出  11.退出");
            System.out.println("----------------------------");
            System.out.print("请选择:");
            int n = scanner.nextInt();
            //选择结构
            switch (n){
                case 1:{
                    System.out.println("请输入需要添加的图书类型:1.儿童  2.小说");
                    int a = scanner.nextInt();
                    System.out.print("请输入图书名称");
                    String bookname = scanner.next();
                    System.out.print("请输入图书作者:");
                    String name = scanner.next();
                    System.out.print("请输入库存量");
                    int kc = scanner.nextInt();
                    if (a == 1){
                        System.out.print("请输入儿童书籍阶段:");
                        String stage = scanner.next();
                        Children children = new Children(bookname,name,kc,stage);
                        bookManager.addBook(children);
                    } else if (a == 2) {
                        System.out.print("请输入小说类型:");
                        String type = scanner.next();
                        Novel novel = new Novel(bookname,name,kc,type);
                        bookManager.addBook(novel);
                    }
                }break;
                case 2:{
                    bookManager.showAll();
                }break;
                case 3:{
                    System.out.print("请输入需要进货图书名称:");
                    String bookname = scanner.next();
                    System.out.print("需要进货数量:");
                    int num = scanner.nextInt();
                    bookManager.stock(bookname,num);
                }break;
                case 4:{
                    System.out.print("请输入需要售出图书名称:");
                    String bookname = scanner.next();
                    System.out.println("需要售货:");
                    int num = scanner.nextInt();
                    bookManager.sell(bookname,num);
                }break;
                case 5:{
                    System.out.println("请输入您要查询最小最大区间值");
                    String area = scanner.next();
                    String [] split = area.split(",");
                    bookManager.interval(Integer.parseInt(split[0]),Integer.parseInt(split[1]));
                }break;
                case 6:{}break;
                case 7:{}break;
                case 8:{}break;
                case 9:{}break;
                case 10:{}break;
                case 11:{
                    System.exit(0);
                }break;
                default:
                    System.out.println("输入错误请重新输入");break;
            }
        }

    }
}

后边几个测试不影响,大家仔细看了就应该会知道怎么做了(嘿嘿,太晚了,有点累了,不懂得可以在评论区问我哦)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值