图书管理
(1)图书父类Books设计,它具有以下属性:书名、作者、ISBN号、价格、页数(10分)
1)构造方法、get方法、set方法
2)重写toString方法:打印图书的所有属性信息
3)重写equals函数:实现比较两本书的书名、作者是否相同,如果相同则返回true,否则返回false
(2)纸质图书(继承于Books)(10分)
1)新增属性:重量、库存(值为1)
2)构造方法(使用super)、get方法、set方法
3)重写toString方法:打印图书的所有属性信息
(3)电子书(继承于Books)(10分)
1) 新增属性:文件大小(以MB为单位)、文件格式(例如PDF, EPUB, MOBI)、下载次数count(2分)
2)构造方法(不使用super)、get方法、set方法
3)重写getClass方法:返回书名
(4)接口设计(10分)
1)图书管理接口,接口中有借书方法
2)纸质书与电子书分别实现借书接口(具有现实意义上的区别,考虑纸质书数量的限制)
(5)参照(2)(3)与(4)的形式,再设计至少两个Books的子类与两个接口并实现。(如果难以设计Books的子类可以设计(2)或(3)的一些子类,并设计相应接口和实现接口功能)。(35分)
(6)主控类设计(执行main方法的类)(25分)
1)创建一个Test类,在该类中创建每个Books子类的数组(包括(5)中的类),每个数组的长度为你学号后2位的值(小于5就取5),并用随机的书填满相应的数组。
2)利用equals函数查找书。
3)将查找到的书的信息进行修改,并打印修改前后信息对比。
4)调用(4)的接口和你在(5)中自定义的接口。
5)删除查找到的书。并在删除之后插入新的书。
package com.test.tsgl;
public class RunApp {
public static void main(String[] args) {
BookTest1 bookTest1 = new BookTest1();
bookTest1.AppP();
}
}
package com.test.tsgl;
import java.time.LocalDate;
import java.util.Date;
//(1)图书父类Books设计(30分)
//1)属性:书名、作者、ISBN号、出版日期、价格、页数(6分)
//2)构造器:Books(String title, String author, String ISBN,
// Date publicationDate, double price, int pages)(6分)
//3)get方法、set方法(6分)
//4)重写toString方法:打印图书的所有属性信息(6分)
//5)重写equals函数:实现比较两本书的书名、作者是否相同,
// 如果相同则返回true,否则返回false(6分)
public class Books {
String title;
String author;
String ISBN;
LocalDate publicationDate;
double price;
int pages;
public Books(String title, String author, String ISBN, LocalDate publicationDate, double price, int pages) {
this.title = title;
this.author = author;
this.ISBN = ISBN;
this.publicationDate = publicationDate;
this.price = price;
this.pages = pages;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getISBN() {
return ISBN;
}
public void setISBN(String ISBN) {
this.ISBN = ISBN;
}
public LocalDate getPublicationDate() {
return publicationDate;
}
public void setPublicationDate(LocalDate publicationDate) {
this.publicationDate = publicationDate;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getPages() {
return pages;
}
public void setPages(int pages) {
this.pages = pages;
}
@Override
public String toString() {
return "Books{" +
"title='" + title + '\'' +
", author='" + author + '\'' +
", ISBN='" + ISBN + '\'' +
", publicationDate=" + publicationDate +
", price=" + price +
", pages=" + pages +
'}';
}
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
}
package com.test.tsgl;
import java.sql.Date;
import java.time.LocalDate;
import java.util.Scanner;
创建一个BookTest类,在该类中创建一个纸质书数组、一个电子书数组,每个数组的长度为5。
分别对每个数组实现添加图书、删除图书、通过书名查询图书、借阅图书(10分
public class BookTest1 {
// 创建纸质书数组
PrintBook[] printBooks = new PrintBook[5];
// 创建电子书数组
EBook[] eBooks = new EBook[5];
Boolean loop=true;
String key;
private int quantity=0;
private int frequency;
//纸质书功能应用
public void AppP(){
// 第1步菜单打印
meau1();
// 第2步进行对两种书的选择
do {
Scanner scanner2 = new Scanner(System.in);
System.out.print("请选择功能:");
key = scanner2.next();
switch (key){
case "1":
// 第2.1步对纸质书菜单选择(1.添加图书,2.删除图书,3.查询图书,4.借阅图书,5.退 出)
do {
meau2();
Scanner scanner3 = new Scanner(System.in);
System.out.print("选择功能:");
key = scanner2.next();
switch (key) {
case "1":
AddP(PrintP());
break;
case "2":
Scanner scanner = new Scanner(System.in);
System.out.print("请输入书名:");
String titleP = scanner.next();
DeletePbook(titleP);
break;
case "3":
Scanner scanner1 = new Scanner(System.in);
System.out.print("请输入书名:");
String titleP1 = scanner1.next();
QueryP(titleP1);
break;
case "4":
Scanner scanner5 = new Scanner(System.in);
System.out.print("请输入书名:");
String titlePR = scanner5.next();
BorrowingP(titlePR );
break;
case "5":
Quit();
break;
default:
System.out.print("输入有误,重新");
break;
}
}while (loop);
break;
case "2":
// 第2.2步对电子书菜单选择(1.添加图书,2.删除图书,3.查询图书,4.借阅图书,5.退 出)
do {
meau3();
Scanner scanner4 = new Scanner(System.in);
System.out.print("选择:");
key = scanner2.next();
switch (key){
case "1":
AddE(PrintE());
break;
case "2":
Scanner scanner = new Scanner(System.in);
System.out.print("请输入书名:");
String titleE = scanner.next();
DeletePbook(titleE);
break;
case "3":
Scanner scanner1 = new Scanner(System.in);
System.out.print("请输入书名:");
String titleE1 = scanner1.next();
QueryE(titleE1);
break;
case "4":
BorrowingE();
break;
case "5":
Quit();
break;
default:
System.out.print("输入有误,重新");
break;
}
}while (loop);
break;
case "3":
Quit();
System.out.println("=======退出图书管理系统=======");
break;
default:
System.out.print("输入有误,");
break;
}
}while (loop);
}
// 电子书功能应用
public void AppE(){
}
// 菜单打印
public void meau1(){
System.out.println("=========图书管理系统=========");
System.out.println("\t\t1.纸质书管理");
System.out.println("\t\t2.电子书管理");
System.out.println("\t\t3.退 出");
}
// 纸质书菜单打印
public void meau2(){
System.out.println("=========纸质书管理=========");
System.out.println("\t\t1.添加图书");
System.out.println("\t\t2.删除图书");
System.out.println("\t\t3.查询图书");
System.out.println("\t\t4.借阅图书");
System.out.println("\t\t5.退 出");
}
//电子书打印
public void meau3(){
System.out.println("=========电子书管理=========");
System.out.println("\t\t1.添加图书");
System.out.println("\t\t2.删除图书");
System.out.println("\t\t3.查询图书");
System.out.println("\t\t4.借阅图书");
System.out.println("\t\t5.退 出");
}
// 退出功能
public void Quit(){
loop=false;
}
// 纸质书添加图书
public void AddP(PrintBook book){
for (int i = 0; i < printBooks.length ; i++) {
if (printBooks[i]==null) {
printBooks[i] = book;
quantity++;
System.out.println("纸质书添加成功!");
break;
}
}
}
// 纸质书输入提示词
public PrintBook PrintP(){
Scanner scanner = new Scanner(System.in);
System.out.print("请输入书名:");
String title=scanner.next();
System.out.print("请输入作者:");
String author=scanner.next();
System.out.print("请输入ISBN:");
String ISBN=scanner.next();
System.out.print("请输入发表时间年 月 日(用空格隔开):");
int year=scanner.nextInt();
System.out.print(" ");
int month=scanner.nextInt();
System.out.print(" ");
int day=scanner.nextInt();
LocalDate paperBookPublicationDate = LocalDate.of(year, month, day);
System.out.print("请输入价格:");
double price=scanner.nextDouble();
System.out.print("请输入页数:");
int pages=scanner.nextInt();
System.out.print("请输入重量:");
double weight=scanner.nextDouble();
PrintBook printBook = new PrintBook(title, author, ISBN, paperBookPublicationDate , price, pages, weight);
return printBook;
}
// 电子书输入提示词
public EBook PrintE(){
Scanner scanner = new Scanner(System.in);
System.out.print("请输入书名:");
String title=scanner.next();
System.out.print("请输入作者:");
String author=scanner.next();
System.out.print("请输入ISBN:");
String ISBN=scanner.next();
System.out.print("请输入年 月 日(用空格隔开):");
int year=scanner.nextInt();
System.out.print(" ");
int month=scanner.nextInt();
System.out.print(" ");
int day=scanner.nextInt();
LocalDate paperBookPublicationDate = LocalDate.of(year, month, day);
System.out.print("请输入价格:");
double price=scanner.nextDouble();
System.out.print("请输入页数:");
int pages=scanner.nextInt();
System.out.print("请输入文件大小(以MB为单位):");
double fileSize=scanner.nextDouble();
System.out.print("请输入文件格式(例如PDF, EPUB, MOBI):");
String format=scanner.next();
EBook eBook = new EBook(title, author, ISBN, paperBookPublicationDate, price, pages,fileSize,format );
return eBook;
}
// 电子书添加
public void AddE(EBook book) {
for (int i = 0; i < eBooks.length; i++) {
eBooks[i] = book;
System.out.println("电子书添加成功!");
break;
}
}
//删除纸质书
public void DeletePbook(String title) {
for (int i = 0; i < printBooks.length; i++) {
if (printBooks[i] != null && printBooks[i].getTitle().equals(title)) {
printBooks[i] = null;
System.out.println("纸质书删除成功");
break;
} else {
System.out.println("没有找到");
break;
}
}
}
// 电子书删除
public void DeleteEbook(String title) {
for (int i = 0; i < eBooks.length; i++) {
if (eBooks[i] != null && eBooks[i].getTitle().equals(title)) {
eBooks[i] = null;
System.out.println("电子书删除成功");
break;
} else {
System.out.println("没有找到");
break;
}
}
}
// 纸质书查询
public void QueryP(String title){
for (int i = 0; i < printBooks.length; i++) {
if (printBooks[i] != null && printBooks[i].getTitle().equals(title)) {
printBooks[i].ToString();
return;
}
}
System.out.println("没有找到");
}
// 电子书查询
public void QueryE(String title){
for (int i = 0; i < eBooks.length; i++) {
if (eBooks[i] != null && eBooks[i].getTitle().equals(title)) {
eBooks[i].ToString();
return;
}
}
System.out.println("没有找到");
}
// 纸质书借阅
public void BorrowingP(String title){
for (int i = 0; i < printBooks.length ; i++) {
if (printBooks[i] != null && printBooks[i].getTitle().equals(title)){
PaperBook paperBook = new PaperBook(quantity);
paperBook.borrowBooks();
return;
}
}
System.out.println("没有"+title+"无法借阅");
}
// 电子书借阅
public void BorrowingE(){
Enbook enbook = new Enbook(frequency);
enbook.borrowBooks();
}
}
package com.test.tsgl;
import java.time.LocalDate;
import java.util.Date;
//1)继承Books(2分)
//2)新增属性:文件大小(以MB为单位)、文件格式(例如PDF, EPUB, MOBI)、
// 下载次数count(访问权限均为private)(5分)
//3)构造器:PrintBook(String title, String author, String ISBN,
// Date publicationDate, double price, int pages, double weight, double fileSize, String format)(5分)
//4)get方法、set方法(4分)
//5)重写toString方法:打印图书的所有属性信息
public class EBook extends Books{
public double fileSize;
public String format;
private int count;
public EBook(String title, String author, String ISBN, LocalDate publicationDate, double price, int pages, double fileSize, String format) {
super(title, author, ISBN, publicationDate, price, pages);
this.fileSize = fileSize;
this.format = format;
}
public double getFileSize() {
return fileSize;
}
public void setFileSize(double fileSize) {
this.fileSize = fileSize;
}
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
}
// public String toString(){
// return "书名:\t"+super.title+"作者:\t"+super.author+"ISBN号:\t"+super.ISBN
// +"出版日期:\t"+super.publicationDate+"价格:\t"+super.price+"页数:\t"+
// super.pages+"重量:\t"++"库存:\t"+super.inventory;
// }
@Override
public String toString() {
return "EBook{" +
"fileSize=" + fileSize +
", format='" + format + '\'' +
", count=" + count +
", title='" + title + '\'' +
", author='" + author + '\'' +
", ISBN='" + ISBN + '\'' +
", publicationDate=" + publicationDate +
", price=" + price +
", pages=" + pages +
'}';
}
public void ToString() {
System.out.println("纸质书{题目='" + title + '\t' +
", 作者='" + author + '\t' +
", ISBN号='" + ISBN + '\t' +
", 发表时间=" + publicationDate +
", 价格=" + price +"元\t"+
", 页数=" + pages +"\t"+"文件大小(以MB为单位)=" + fileSize+"\t" +
", 文件格式=" + format +
'}');
}
}
package com.test.tsgl;
//(4)接口设计(10分)
//图书管理接口,接口中有借书方法(10分)
public interface BorrowBooks {
void borrowBooks();
}
package com.test.tsgl;
//电子书实现借书接口:每次借书需将电子书借书次数加1,并输出“当前已下载多少次”。(5分)
public class Enbook implements BorrowBooks{
private int frequency;
public Enbook(int frequency) {
this.frequency = frequency;
}
@Override
public void borrowBooks() {
frequency++;
System.out.println("当前已下载次数:" + frequency);
}
}
package com.test.tsgl;
//纸质书实现借书接口:判断当纸质书剩余数量为0时,输出“无库存,无法借阅!”(5分)
public class PaperBook implements BorrowBooks{
private int quantity;
public PaperBook(int quantity) {
this.quantity = quantity;
}
@Override
public void borrowBooks() {
if (quantity>0){
quantity--;
System.out.println("借阅成功!");
}else {
System.out.println("无库存,无法借阅!");
}
}
}
package com.test.tsgl;
import java.time.LocalDate;
import java.util.Date;
//1)继承Books(2分)
//2)新增属性:重量(权限为private)、库存(值为1)(5分)
//3)构造器:PrintBook(String title, String author,
// String ISBN, Date publicationDate, double price, int pages, double weight)(5分)
//4)get方法、set方法(4分)
//5)重写toString方法:打印图书的所有属性信息(4分)
public class PrintBook extends Books {
private double Weight;
public int inventory=1;
public PrintBook(String title, String author, String ISBN, LocalDate publicationDate, double price, int pages, double weight) {
super(title, author, ISBN, publicationDate, price, pages);
Weight = weight;
}
public double getWeight() {
return Weight;
}
public void setWeight(double weight) {
Weight = weight;
}
public int getInventory() {
return inventory;
}
public void setInventory(int inventory) {
this.inventory = inventory;
}
@Override
public String toString() {
return "PrintBook{" +
"Weight=" + Weight +
", inventory=" + inventory +
", title='" + title + '\'' +
", author='" + author + '\'' +
", ISBN='" + ISBN + '\'' +
", publicationDate=" + publicationDate +
", price=" + price +
", pages=" + pages +
'}';
}
public void ToString() {
System.out.println("纸质书{题目='" + title + '\t' +
", 作者='" + author + '\t' +
", ISBN号='" + ISBN + '\t' +
", 发表时间=" + publicationDate +
", 价格=" + price +"元\t"+
", 页数=" + pages +"\t"+"重量=" + Weight+"\t" +
", 库存=" + inventory +
'}');
}
}