设计一个媒体类,其中包含书、CD及磁带三个子类。按照类的设计模式,完成他们的插入、删除、及查找功能。java
时间: 2023-10-23 18:12:42 浏览: 141
Java课程设计,图书管理系统
5星 · 资源好评率100%
好的,以下是基于面向对象的设计模式,实现媒体类及其三个子类的功能:
1. 媒体类 Media:
```java
public class Media {
private String name;
private double price;
private int stockNum;
private String type; // book, CD, tape
// 书类特有属性
private String author;
private String publisher;
private String ISBN;
// CD类特有属性
private String artist;
private String publisher;
private String[] trackList;
// 磁带类特有属性
private String publisher;
private int length; // in minutes
// 构造函数
public Media(String name, double price, int stockNum, String type) {
this.name = name;
this.price = price;
this.stockNum = stockNum;
this.type = type;
}
// 插入媒体
public void addMedia(Media media) {
// TODO: 实现添加媒体的逻辑
}
// 删除媒体
public void removeMedia(Media media) {
// TODO: 实现删除媒体的逻辑
}
// 根据名称查找媒体
public List<Media> searchByName(String name) {
// TODO: 实现根据名称查找媒体的逻辑
return null;
}
// 根据作者查找媒体
public List<Media> searchByAuthor(String author) {
// TODO: 实现根据作者查找媒体的逻辑
return null;
}
// 根据其他属性查找媒体
public List<Media> searchByAttribute(String attribute, String value) {
// TODO: 实现根据其他属性查找媒体的逻辑
return null;
}
// 修改媒体信息
public void modifyMedia(Media media, String attribute, String value) {
// TODO: 实现修改媒体信息的逻辑
}
}
```
2. 书类 Book:
```java
public class Book extends Media {
private String author;
private String publisher;
private String ISBN;
// 构造函数
public Book(String name, double price, int stockNum, String author, String publisher, String ISBN) {
super(name, price, stockNum, "book");
this.author = author;
this.publisher = publisher;
this.ISBN = ISBN;
}
// 可以重写父类方法
}
```
3. CD类 CD:
```java
public class CD extends Media {
private String artist;
private String publisher;
private String[] trackList;
// 构造函数
public CD(String name, double price, int stockNum, String artist, String publisher, String[] trackList) {
super(name, price, stockNum, "CD");
this.artist = artist;
this.publisher = publisher;
this.trackList = trackList;
}
// 可以重写父类方法
}
```
4. 磁带类 Tape:
```java
public class Tape extends Media {
private String publisher;
private int length; // in minutes
// 构造函数
public Tape(String name, double price, int stockNum, String publisher, int length) {
super(name, price, stockNum, "tape");
this.publisher = publisher;
this.length = length;
}
// 可以重写父类方法
}
```
以上是媒体类及其三个子类的设计,下面是一些主要的方法实现:
1. 插入媒体
```java
public void addMedia(Media media) {
this.medias.add(media);
this.stockNum++;
}
```
2. 删除媒体
```java
public void removeMedia(Media media) {
if (this.medias.contains(media)) {
this.medias.remove(media);
this.stockNum--;
} else {
System.out.println("媒体库中没有该媒体");
}
}
```
3. 根据名称查找媒体
```java
public List<Media> searchByName(String name) {
List<Media> result = new ArrayList<>();
for (Media media : this.medias) {
if (media.getName().equals(name)) {
result.add(media);
}
}
return result;
}
```
4. 根据作者查找媒体
```java
public List<Media> searchByAuthor(String author) {
List<Media> result = new ArrayList<>();
for (Media media : this.medias) {
if (media.getType().equals("book")) {
Book book = (Book) media;
if (book.getAuthor().equals(author)) {
result.add(media);
}
}
}
return result;
}
```
5. 根据其他属性查找媒体
```java
public List<Media> searchByAttribute(String attribute, String value) {
List<Media> result = new ArrayList<>();
for (Media media : this.medias) {
try {
Field field = media.getClass().getDeclaredField(attribute);
field.setAccessible(true);
Object fieldValue = field.get(media);
if (fieldValue.equals(value)) {
result.add(media);
}
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
}
return result;
}
```
6. 修改媒体信息
```java
public void modifyMedia(Media media, String attribute, String value) {
try {
Field field = media.getClass().getDeclaredField(attribute);
field.setAccessible(true);
field.set(media, value);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
}
```
以上是媒体类及其三个子类的设计和主要方法实现。在实际应用中,我们可以根据需要进一步完善这些方法,以满足具体的业务需求。
阅读全文