一,题目要求:
图书信息管理系统
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("输错了!!!");
}
}
}
}
七,测试结果