购物车类如何添加新商品?

时间:2016-04-07 05:39:50

标签: java

在我的购物车类中,我很难在数组中添加新项目。我尝试SaleItem item = new SaleItem,但它给了我一个错误,因为我的SaleItem是一个抽象,我们应该保留抽象。购物车类中的一些部件是错误的,我希望我知道我在做什么。有什么建议?还是帮忙?

这是方向: ** Cart构造函数方法将整数参数作为输入,该参数确定可以放入购物车中的最大项目数。 addItem,它接受五个输入参数,其中前四个输入表示要添加的项目的代码,标题,价格和数量。第五个输入参数给出项目的类型(1 Book,2 Dictionary,3 AudioCD)。根据要添加的项目的类型,该方法向用户询问剩余实例变量的值。然后,该方法实例化相应的对象并将其添加到数组中。 cartTotalCost:一种返回购物车中所有商品总费用的方法。 getNumBooks:一种返回购物车中书籍数量的方法。 getNumCDS:一种返回购物车中音频CD数量的方法。 toString:一种方法,用于打印购物车的格式良好的输出,其中每个项目都打印在一行中。

SaleItem类:

public abstract class SaleItem {
private int code;
private String title;
private double price;
private int quantity;

public SaleItem(int code, String title, double price, int quantity){
this.code = code;
this.title = title;
this.price = price;
this.quantity = quantity;
}

//Getters
public int getCode(){
    return this.code;
}
public String getTitle(){
    return this.title;
}
public double getPrice(){
    return this.price;
}
public int getQuantity(){
    return this.quantity;
}
// Setters
public void setCode(int code){
    this.code = code;
}
public void setTitle(String title){
    this.title = title;
}
public void setPrice(double price){
    this.price = price;
}
public void setQuantity(int quantity){
    this.quantity = quantity;
}

//ItemTotalCost method
public double itemTotalCost(){
    double total = this.price * this.quantity;
    return total;
}

//ToString
public String toString(){
    String outputItemDes = "";
    outputItemDes += "Code: "+ this.code;
    outputItemDes += "Title: "+ this.title;
    outputItemDes += "Price: "+ this.price;
    outputItemDes += "Quantity: "+ this.quantity;
    outputItemDes += "Item Total Cost: " + this.itemTotalCost();
    return outputItemDes;
}

}

书籍课程:

public class Book{
private String author;
private int numPages;

public Book(int code, String title, double price, int quantity, String author, int numPages){
    this.author = author;
    this.numPages = numPages;
}

//Getters
public String getAuthor(){
    return this.author;
}
public int getNumPages(){
    return this.numPages;
}

//Setters
public void setAuthor(String author){
    this.author = author;
}
public void setNumPages(int numPages){
    this.numPages = numPages;
}

//toString
@Override
public String toString(){
    String outputBookDes = "";
    outputBookDes += "Author: "+ this.author;
    outputBookDes += "Number Pages: "+ this.numPages;
    return outputBookDes;
}

}

AudioCD Class:

public class AudioCD extends SaleItem {
private String artist;
private String label;
private int playingTime;

public AudioCD(int code, String title, double price, int quantity, String artist, String label, int playingTime){
    super(code,title,price,quantity);
    this.artist = artist;
    this.label = label;
    this.playingTime = playingTime;
}

//Getters
public String getArtist(){
    return this.artist;
}
public String getLabel(){
    return this.label;
}
public int getPlayingTime(){
    return this.playingTime;
}

//Setters
public void setArtist(String artist){
    this.artist = artist;
}
public void setLabel(String label){
    this.label = label;
}
public void setPlayingTime(int playingTime){
    this.playingTime = playingTime;
}

//toSting method as in the Book class
@Override
public String toString(){
    String outputAudioDes = "";
    outputAudioDes += "Artist: "+ this.artist;
    outputAudioDes += "Label: "+ this.label;
    outputAudioDes += "Playing Time: "+ this.playingTime;
    return outputAudioDes;
}

}

Cart CLass:

public class Cart {
// Variables
private SaleItem[] itemList;
private int numItems;
private Book book;
private Dictionary dictionary;
private AudioCD audioCD;

//Constructors
public Cart(int maxItems){
    this.numItems = 0;
    this.itemList = new SaleItem[maxItems];
}
//Setters
public void setBook(Book book){
    this.book = book;
}
public void setDictionary(Dictionary dictionary){
    this.dictionary = dictionary;
}
public void setAudioCD(AudioCD audioCD){
    this.audioCD = audioCD;
}
//Add Item method goes into the cart
public void addItem(int code, String title, double price, int quantity, int itemNum){
    int maxItems = this.itemList.length;

    if (itemNum == 1){
        System.out.println(book);
        }
    else if (itemNum == 2){
        System.out.println(dictionary);
    }
    else if (itemNum == 3){
        System.out.println(audioCD);
    }

    if (this.numItems < maxItems){
        SaleItem item = new SaleItem(code,title,price,quantity,itemNum);
        itemList[this.numItems] = item;
        this.numItems++;
    }
}
// Sums up all of the item in the cart
public double cartTotalCost(){
    double cartTotal = 0;
    for (int i = 0; i < itemList.length; i++){
        SaleItem item = itemList[i];
        double subTotal = (item.getPrice() * item.getQuantity());
        cartTotal += subTotal;
    }
    return cartTotal;
}
//Getters
public Book getNumBooks(){
    return book;
}
public AudioCD getNumCDS(){
    return audioCD;
}
public String toString(){
    String cartDes = "";
    for (int i = 0; i < itemList.length; i++){
        cartDes += itemList[i];
    }
    return cartDes;
}

}

4 个答案:

答案 0 :(得分:2)

您正在进行的任务是尝试向您介绍或加强您的继承技能。 elif bmi >= 32: 将保持抽象,因为要销售的商品应该继承SaleItem的属性。 SaleItem不会被实例化,就像它是SaleItem一样。

您可以将AudioCD作为AudioCD来解决,因为SaleItemAudioCD的子类。这将是这样做的:

SaleItem

查看Oracle's文档或BeginnersBook's文档以获取继承。

答案 1 :(得分:0)

CD或书籍都是销售商品的类型。你不能调用SaleItem()构造函数 - 你必须调用销售项目实现的构造函数(如CD或书)。因此,如果您想制作一个新的销售商品,首先要确定您想要制作的类型,然后执行以下操作:

<?php
if(isset($_GET["id"]))
{
    if($_GET["id"]==1)
    {
        echo "This is an apple";
    }
    else if($_GET["id"]==2)
    {
        echo "This is an orange";
    }
}
?>

显然,本案中的论据取决于您要创建的具体书籍。

至于分配,听起来你需要询问用户在addItem方法中创建正确对象所需的所有信息。因此,对于一本书,你会要求作者,页数等。

答案 2 :(得分:0)

首先,Book必须扩展SaleItem。

实例化适当的SaleItem最简单的方法是在上面的ifs语句中: 如果itemNum == 1     item = new Book()与params。 其他人一样。

为什么要在Cart中保留对特定书籍,词典和cd的引用?我看到的唯一用途是你试图计算购物车中的书籍数量。如果这就是你的意思,那不是那样的。您应该迭代items数组并计算书籍实例

答案 3 :(得分:-1)

“第五个输入参数给出了项目的类型(1本书,2个词典,3个AudioCD)。根据要添加的项目的类型,该方法向用户询问剩余实例变量的值。” / p>

你不应该创建一个新的SaleItem,你应该采取第五个输入来确定你应该实例化哪种SaleItem并添加到购物车。

您的代码SaleItem item = new SaleItem(code,title,price,quantity,itemNum);无论如何都是错误的。

您的SaleItem构造函数为public SaleItem(int code, String title, double price, int quantity),因此您甚至无法传递正确数量的参数。

相关问题