这是作业: 对未征税的项目进行会计处理。您绘制下面的 UML 图,将 Tax 类分成两个子类,PercentageTax 和 NoTax。您已经制定了计划,并且您的主管批准了,所以是时候实施它了。使用项目 SaleEvenBetter 作为起点,实现新设计,如上面的 UML 图中所述。验证 PercentageTax 中的 tax 方法返回的值是否与当前版本的 SaleEvenBetter 中的 getPriceWithTax 方法返回的值相同,而 NoTax 中的 tax 方法返回的值为零。
我正在使用 bluej 进行编译。类的连接不是问题。我只是想知道子类中的代码是否正确。
这是我到目前为止所拥有的,下面是原始课程。
public class PercentageTax extends Tax
{
// instance variables - replace the example below with your own
private String name;
private double price;
private Tax tax;
/**
* Constructor for objects of class PercentageTax
*/
public PercentageTax()
{
this.name = name;
this.price = price;
tax = new Tax();
}
public double getPrice()
{
return price;
}
/**
* return the price including salesTax
*/
public double priceWithTax(double price, String state) {
return price*tax.tax(price, state);
}
public class NoTax extends Tax
// instance variables - replace the example below with your own
private double price;
private Tax tax;
/**
* Constructor for objects of class NoTax
*/
public NoTax()
{
// initialise instance variables
this.price = price;
tax = new Tax();
}
public double Notax()
{
return 0;
}
/**
* return the price including salesTax
*/
public double priceWithNoTax(double price) {
return price;
}
}
原始代码:
public class SalesLine
{
private int number;
private Item item;
/**
* Constructor for objects of class SalesLine
*/
public SalesLine(int number, Item item)
{
this.item = item;
this.number = number;
}
/**
* returns the total sum of the saleline
*/
public double price(String state)
{
return number*item.priceWithTax(state);
}
public class Sale
{
private ArrayList<SalesLine> saleLines;
private String state;
private double price;
/**
* Constructor for objects of class SaleBad
*/
public Sale(String state)
{
saleLines = new ArrayList<SalesLine>();
}
public Sale()
{
saleLines = new ArrayList<SalesLine>();
}
/**
* add an item to the sale
*/
public void addItem(int number, Item i)
{
saleLines.add(new SalesLine(number,i));
}
/**
* return the total of the sale including sales tax for the state
*/
public double total()
{
double sum = 0;
for (SalesLine s: saleLines) {
sum = sum + s.price(state);
}
return sum;
}
}
public class Item
{
private String name;
private double price;
private Tax tax;
/**
* Constructor for objects of class Item
*/
public Item(String name, double price)
{
this.name = name;
this.price = price;
tax = new Tax();
}
public double getPrice()
{
return price;
}
public void setPrice(double newPrice)
{
price = newPrice;
}
public String getName()
{
return name;
}
public void setPrice(String newName)
{
name = newName;
}
/**
* return the price including salesTax
*/
public double priceWithTax(String state) {
return price*tax.tax(price, state);
}
}
public class Tax
{
/**
* Constructor for objects of class Tax
*/
public Tax()
{
}
/**
* returns the tax for the given amount of money. If the state is unknown, zero is returned
*/
public double tax(double price, String state) {
if (state.equals( "NY")) return price * 0.05; else
if (state.equals( "AL")) return price * 0.07; else
if (state.equals( "AK")) return price * 0.04; else
if (state.equals( "AS")) return price * 0.12; else
if (state.equals( "AZ")) return price * 0.13; else
if (state.equals( "AR")) return price * 0.08; else
if (state.equals( "CA")) return price * 0.04; else
if (state.equals( "CO")) return price * 0.05; else
if (state.equals( "CT")) return price * 0.07; else
if (state.equals( "DE")) return price * 0.08; else
if (state.equals( "DC")) return price * 0.09; else
if (state.equals( "FM")) return price * 0.17; else
if (state.equals( "FL")) return price * 0.05; else
if (state.equals( "GA")) return price * 0.05; else
if (state.equals( "GU")) return price * 0.05; else
if (state.equals( "HI")) return price * 0.05; else
if (state.equals( "ID")) return price * 0.065; else
if (state.equals( "IL")) return price * 0.05; else
if (state.equals( "IN")) return price * 0.05; else
if (state.equals( "IA")) return price * 0.07; else
if (state.equals( "KS")) return price * 0.07; else
if (state.equals( "KY")) return price * 0.05; else
if (state.equals( "LA")) return price * 0.05; else
if (state.equals( "ME")) return price * 0.098; else
if (state.equals( "MH")) return price * 0.06; else
if (state.equals( "MD")) return price * 0.05; else
if (state.equals( "MA")) return price * 0.04; else
if (state.equals( "MI")) return price * 0.05; else
if (state.equals( "MN")) return price * 0.08; else
if (state.equals( "MS")) return price * 0.05; else
if (state.equals( "MO")) return price * 0.18; else
if (state.equals( "MT")) return price * 0.25; else
if (state.equals( "NE")) return price * 0.05; else
if (state.equals( "NV")) return price * 0.05; else
if (state.equals( "NH")) return price * 0.05; else
if (state.equals( "NJ")) return price * 0.08; else
if (state.equals( "NM")) return price * 0.07; else
if (state.equals( "NY")) return price * 0.03; else
if (state.equals( "NC")) return price * 0.05; else
if (state.equals( "ND")) return price * 0.06; else
if (state.equals( "MP")) return price * 0.05; else
if (state.equals( "OH")) return price * 0.05; else
if (state.equals( "OK")) return price * 0.09; else
if (state.equals( "OR")) return price * 0.05; else
if (state.equals( "PW")) return price * 0.15; else
if (state.equals( "PA")) return price * 0.05; else
if (state.equals( "PR")) return price * 0.05; else
if (state.equals( "RI")) return price * 0.04; else
if (state.equals( "SC")) return price * 0.05; else
if (state.equals( "SD")) return price * 0.06; else
if (state.equals( "TN")) return price * 0.05; else
if (state.equals( "TX")) return price * 0.07; else
if (state.equals( "UT")) return price * 0.05; else
if (state.equals( "VT")) return price * 0.08; else
if (state.equals( "VI")) return price * 0.05; else
if (state.equals( "VA")) return price * 0.05; else
if (state.equals( "WA")) return price * 0.04; else
if (state.equals( "WV")) return price * 0.06; else
if (state.equals( "WI")) return price * 0.05; else
if (state.equals( "WY")) return price * 0.08;
// if the state was not found then the prices is returned
return 0;
}
}