javase综合案例2 ----图书管理系统

一,题目要求:

图书信息管理系统
1, 定义一个Book学生类,拥有以下属性
编号id
名称name
作者author
价格price
2, 定义一个BookDao接口.有以下方法:
页面方法 ui()
添加图书信息 add()
删除图书信息 delete()
修改图书信息 update()
根据编号查询图书信息 selectById()
根据姓名模糊查询图书信息 selectByName()
根据价格范围查询图书信息 selectByPrice()
查询图书信息 selectAll()
判断图书编号是否唯一 boolean isOnly(int id)
3, 定义一个BookDaoImpl实现如上接口方法.
定义全局的图书信息集合:
Book books[]= new Book[10];

4, 效果 [ 无限循环进行 ]


学生信息管理系统


1- 添加图书信息
2- 修改图书信息
3- 删除图书信息
4- 根据编号查询图书信息
5- 根据名称模糊查询图书信息
6- 根据价格范围查询图书信息
7- 查询所有图书信息
8- 退出系统


请输入你的选择:
1 —> add()—>控制台收集图书信息,把信息组成对象,放入到数组中 (编号要唯一【当录入编号时,调用isOnly判断是否唯一,如果唯一,则继续录入信息;如果不唯一,则直接调用add()方法并终止整个方法体】)
2 —> update() --> 根据编号来来重新从控制台中输入新的书名,作者,价格,进行修改
3 —> delete() --> 从控制台输入你要删除的图书的编号,遍历集合把该编号的对应的图书信息从数组中删除
4 —> selectById() --> 从控制台输入你要查询的图书编号,根据编号查询,存在则打印,反之则查无此人
5 —> selectByName()() -->从控制台输入你要查询的书名的关键字,根据书名查询,存在则打印,反之则查无此书【contains()】
6 —> selectByAge() -->从控制台输入你要查询的价格的最小值和最大值,根据价格范围查询,存在则打印,反之则查无此书
7 —> select() -->遍历图书信息数组,打印信息
8 —> 提示是否退出系统

二,需求分析

从题目中可知,要对一个Book类对象长度为10的数组进行图书信息 id name author price的增删查改操作

三,创建实体类Book

包目录下创建Book.java文件
私有属性:id,name,author,price
成员方法:
get和set方法【访问被封装的私有属性】
无参,满参构造器【创建对象】
show()方法【输出显示图书信息】

package synthesisHomework.book;

public class Book {
    private int id;
    private String name;
    private String author;
    private double price;

    public void show(){
        System.out.println("ID: " + id);
        System.out.println("Name: " + name);
        System.out.println("Author: " + author);
        System.out.println("Price: " + price);
        System.out.println("=====================");
    }
    public Book(int id, String name, String author, double price) {
        this.id = id;
        this.name = name;
        this.author = author;
        this.price = price;
    }
    public Book() {
    }
    public double getPrice() {
        return price;
    }

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

    public String getAuthor() {
        return author;
    }

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

    public String getName() {
        return name;
    }

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }


}

四,创建接口BookDao

根据题目的要求,对需要实现的方法进行规范,所以定义接口
包括抽象方法:

package synthesisHomework.book;

public interface BookDao {
    void ui();
    void add();
    void delete();
    void update();
    void selectById();
    void selectByName();
    void selectByPrice();
    void selectAll();
    boolean isOnly(int id);
}

五,创建BookDaoImpl类,实现接口中的方法

5.1 声明全局变量books数组

根据题目要求定义长度为10的数组books

public class BookDaoImpl implements BookDao {
	Book books[]= new Book[10];
	Scanner sc = new Scanner(System.in);	//引入从键盘输入数据
}

5.2 重写ui菜单

菜单显示:

@Override
    public void ui() {
        System.out.println("*******************\n" +
                " 学生信息管理系统\n" +
                "*******************\n" +
                "  1- 添加图书信息\n" +
                "  2- 修改图书信息\n" +
                "  3- 删除图书信息\n" +
                "  4- 根据编号查询图书信息\n" +
                "  5- 根据名称模糊查询图书信息\n" +
                "  6- 根据价格范围查询图书信息\n" +
                "  7- 查询所有图书信息\n" +
                "  8- 退出系统\n" +
                "*******************");
    }

5.3 重写add方法 添加图书信息

add:

@Override
    public void add() {
        Book book = new Book();
        System.out.println("请输入id:");
        int id = sc.nextInt();
        boolean bo=isOnly(id) ;
        if(bo) {
            book.setId(id);
            System.out.println("请输入name:");
            book.setName(sc.next());
            System.out.println("请输入author:");
            book.setAuthor(sc.next());
            System.out.println("请输入price:");
            book.setPrice(sc.nextDouble());
            for(int i=0;i<books.length;i++) {
                if(books[i]==null) {
                    books[i]=book;
                    System.out.println("添加成功!!!");
                    break;
                }
            }
        }else System.out.println("该图书id已存在!!!");
    }

其中,在添加时可能会存在图书编号已经存在的情况,所以,需要一个判断是否已经存在图书id的方法isOnly

@Override
    public boolean isOnly(int id) {
        for(Book book : books) {
            if(book!=null&&book.getId() == id)
                return false;
        }
        return true;
    }

5.4 重写delete方法 删除图书信息

根据id进行删除:
为了避免空指针异常,在遍历数组比对id时要加上一个条件books[i]!=null
删除成功后用return直接返回

@Override
    public void delete() {
        System.out.println("输入要删除的图书id:");
        int id = sc.nextInt();
        for(int i=0;i<books.length;i++) {
            if(books[i]!=null&&books[i].getId()==id) {
                books[i]=null;
                System.out.println("删除成功!!!");
                return;
            }
        }
        System.out.println("该图书不存在!!!");
    }

5.5 重写update方法 修改图书信息

根据id进行修改:
为了避免空指针异常,在遍历数组比对id时要加上一个条件books[i]!=null
修改成功后用return直接返回

@Override
    public void update() {
        System.out.println("输入要修改的图书id:");
        int id = sc.nextInt();
        for(int i=0;i<books.length;i++) {
            if(books[i]!=null&&books[i].getId()==id) {
                System.out.println("输入新书名name:");
                books[i].setName(sc.next());
                System.out.println("输入新作者author:");
                books[i].setAuthor(sc.next());
                System.out.println("输入新价格price:");
                books[i].setPrice(sc.nextDouble());
                System.out.println("修改成功!!!");
                return;
            }
        }
        System.out.println("该图书不存在!!!");
    }

5.6 重写selectById方法 根据id查询图书信息

根据id查询单个图书信息
调用show方法输出其信息

@Override
    public void selectById() {
        System.out.println("输入查询id:");
        int id = sc.nextInt();
        for(int i=0;i<books.length;i++) {
            if(books[i]!=null&&books[i].getId()==id) {
                books[i].show();
                return;
            }
        }
        System.out.println("没找到该图书!!!");
    }

5.7 重写selectByName方法 根据name模糊查询图书信息

这里使用了String类里面的方法[contains]
旨在比对字符串中是否含有某子串
从而实现对图书信息的模糊查询
由于模糊信息查询的结果可能不唯一,定义了一个计数器 findCount,计数器为0时则输出“找不到该图书”

@Override
    public void selectByName() {
        System.out.println("输入查询name:(输入关键字即可)");
        String name = sc.next();
        int findCount=0;
        for(int i=0;i<books.length;i++) {
            if(books[i]!=null&&books[i].getName().contains(name)) {
                books[i].show();findCount++;
            }
        }
        if(findCount==0){
            System.out.println("没找到该图书!!!");
        }
    }

5.8 重写selectByPrice方法 根据price范围查询图书信息

根据price范围查询图书信息
所以需要输入一个price最小值和price最大值再遍历数组进行判断
由于范围信息查询的结果可能不唯一,定义了一个计数器 findCount,计数器为0时则输出“找不到该图书”

@Override
    public void selectByPrice() {
        System.out.println("输入查询price最小值:");
        double litPrice = sc.nextDouble();
        System.out.println("输入查询price最大值:");
        double larPrice = sc.nextDouble();
        int findCount=0;
        for(int i=0;i<books.length;i++) {
            if(books[i]!=null&&books[i].getPrice()>=litPrice&&
                    books[i].getPrice()<=larPrice) {
                books[i].show();findCount++;
            }
        }
        if(findCount==0){
            System.out.println("没找到该图书!!!");
        }
    }

5.9 重写selectAll方法 遍历数组查询所有图书信息

判断数组内容不为空调用show方法输出显示图书信息

@Override
    public void selectAll() {
        for(int i=0;i<books.length;i++) {
            if(books[i]!=null) {
                books[i].show();
            }
        }
    }

六,创建测试类TestBook

标记while循环为a
并使用无限循环对创建的BookDaoImpl对象opt进行操作

public class TestBook {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        BookDaoImpl opt = new BookDaoImpl();
        a:
        while(true) {
            opt.ui();
            int n = sc.nextInt();
            switch(n) {
                case 1:opt.add();break;
                case 2:opt.update();break;
                case 3:opt.delete();break;
                case 4:opt.selectById();break;
                case 5:opt.selectByName();break;
                case 6:opt.selectByPrice();break;
                case 7:opt.selectAll();break;
                case 8:
                    System.out.println("已终止!!!");break a;
                default:
                    System.out.println("输错了!!!");
            }
        }
    }
}

七,测试结果

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小孤鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值