老师出的测试题
三个对象类
商品类
用户类
订单类
商品包含以下属性:
商品id
商品名称
商品单价
订单Order,订单包含以下属性:
订单id
订单所属的用户名username
商品数组items(数组中存放的是多个商品对象)
订单总金额amount(不能让调用者直接赋值,应该在内部自动计算!!! 订单总金额=商品数组中各商品价格的总和)
订单实际应支付额payment
(不能让调用者直接赋值,应该在内部自动计算!!!
实际应支付额的计算逻辑:
如果订单总金额 在[0-99] 之间,则应支付额=总金额
如果订单总金额 在[100-199] 之间,则应支付额=总金额*0.9
如果订单总金额 在[199-200] 之间,则应支付额=总金额*0.85
如果订单总金额 >200,则应支付额=总金额*0.8)
客户Customer,客户包含以下属性:
客户名称username
客户等级(等级的值可以是“至尊钻石VIP”“尊享白金VIP”“普通客户”)
然后将题4中的订单类的username属性改成用客户对象来表示,其他属性与题4一致,即:
订单id
订单所属用户,如Customer c;
商品数组items(数组中存放的是多个商品对象)
订单总金额amount(订单总金额=商品数组中各商品价格的总和)
订单实际应支付额payment(改变之前逻辑:在之前的总金额打折基础上,根据客户的等级再打折,比如:至尊钻石VIP叠加一个8折,尊享白金vip叠加一个9折,普通客户不叠加折扣)
然后写程序模拟创建几个商品,一个订单,然后打印订单信息(扩展需求:可以通过调用订单对象上的一个自定义方法直接获取该订单中最贵的商品)
实现代码
public class Test5{
public static void main(String[] args){
String username="Xiao_Ming";
String level="至尊钻石VIP";
Customer customer=new Customer(username,level);//用户对象
Item[] items=new Item[5];//商品数组
int id=0;
String[] name={"小米1","小米2","小米3","小米4","小米5"};
float price=10f;
for(String na:name){
Item it=new Item(id,na,price);
items[id]=it;//循环生成五个对象加入数组
id++;
price+=10f;
}
int id1=0;
System.out.println(new Order(id1,customer,items));//重写toString()
}
}
class Item{//商品类
private int id;
private String name;
private float price;
public Item(){
}
public Item(int id,String name,float price){
this.id=id;
this.name=name;
this.price=price;
}
public void setId(int id){
this.id=id;
}
public int getId(){
return id;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setPrice(float price){
if(price<0){
this.price=0;
System.out.println("价格有误");
}else
this.price=price;
}
public float getPrice(){
return price;
}
public String toString(){
return "这个商品ID为:"+getId()+",名称是:"+getName()+",单价是:"+getPrice();
}
}
class Order{//订单类
private int id;
private Customer customer;
private Item[] items;
private float amount;
private float payment;
public Order(){
}
public Order(int id,Customer customer,Item[] items){
this.id=id;
this.customer=customer;
this.items=items;
}
public void setId(int id){
this.id=id;
}
public int getId(){
return id;
}
public void setCustomer(Customer customer){
this.customer=customer;
}
public Customer getCustomer(){
return customer;
}
public void setItems(Item[] items){
this.items=items;
}
public Item[] getItems(){
return items;
}
public float getAmount(){
for(int i=0;i<items.length;i++)
amount+=items[i].getPrice();
return amount;
}
public float getPayment(){
if(amount<=99){//上面校验过保证价格不小于0
payment=amount;
}else if(amount<=199){
payment=amount*0.9f;
}else{
payment=amount*0.8f;
}
if(customer.getLevel().equals("至尊钻石VIP"))//客户类检验过
payment=payment*0.8f;
else if(customer.getLevel().equals("尊享白金VIP"))
payment=payment*0.9f;
else
payment=payment;
return payment;
}
public String toString(){
return "这个订单ID为:"+getId()+",用户名是:"+customer.getUsername()+",用户等级是:"+customer.getLevel()+",订单总额是:"+getAmount()+",应付金额:"+getPayment()+",最贵商品:"+gui();
}
public Item gui(){//最贵的商品
float price=items[0].getPrice();
Item it=new Item();
for(int i=0;i<items.length;i++)
if(price<items[i].getPrice()){
price=items[i].getPrice();
it=items[i];
}
return it;
}
}
class Customer{//客户类
private String username;
private String level;
public Customer(){
}
public Customer(String username,String level){
this.username=username;
if(level.equals("至尊钻石VIP")||level.equals("尊享白金VIP")||level.equals("普通用户"))
this.level=level;
else
System.out.println("等级信息有误");
}
public void setUsername(String username){
this.username=username;
}
public String getUsername(){
return username;
}
public void setLevel(String level){
if(level.equals("至尊钻石VIP")||level.equals("尊享白金VIP")||level.equals("普通用户"))
this.level=level;
else
System.out.println("等级信息有误");
}
public String getLevel(){
return level;
}
public String toString(){
return "用户名为:"+getUsername()+",用户等级是:"+getLevel();
}
}
今天学习了基础的java封装