代码可以仔细看理解看,不要强制记忆,找方法,基础增删改查也就这几个,要会调用,保持清洗头脑,不要乱了,理一理思路,养成加注释习惯,对自己学习有很大帮助,
题目:
定义图书类(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)
- 图书管理类中定义Book数组(长度10)用于存储图书
- 定义增加图书的方法addBook(Book b)用于将图书存储到数组中去,返回true 或false表示图书是否增加成功(数组满了会增加失败)。
- 定义showAll()方法用于遍历输出数组中所有图书的详细信息。
- 进货功能:stock(String name,int num):进货(入库)方法 参数分别为图书名称 和 进货数量,无返回值。如果图书名称已经存在,修改对应图书的数量,如果图书名称不存在,则提示无法增加库存
- 售货功能: sell(String name,int num):出售(出库)方法,参数分别为图书名称 和 售出数量,无返回值。判断图书名称是否存在,不存在给出提示,正确判断图书数量,不足时给出提示 。如果相等,正常出库并删除该商品,库存数量多于售出数量,正确售出图书,数据修改正确,效果正确
- 创建区间查询方法,查询库存量符合最小最大之间符合条件的图书
- 创建精确查找方法,根据图书名称,查找是否存在,存在返回对象,不存在返回null
- 创建模糊查询方法,根据图书名称模糊查询,存在打印对象信息,不存在提示
- 创建删除方法,根据图书姓名删除
- 按库存量的降序排序
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;
}
}
}
}
后边几个测试不影响,大家仔细看了就应该会知道怎么做了(嘿嘿,太晚了,有点累了,不懂得可以在评论区问我哦)