import java.util.Scanner;
/*
修改Goods类,变成Java开发的规范
*/
public class MyGoods {
//第一,满足封装特性,所有变量全部私有private
private String name;
private String peison;
private int num;
private double price;
// private String big_pic;
private String small_pic;
//自动产生一个无参构造
public MyGoods() {
}
//自动产生全参构造函数,主类main函数调用这个类直接传入参数,不需要在主类main中产生init方法
public MyGoods(String name, double price,String peison, int num) {
this.name = name;
this.peison = peison;
this.num = num;
this.price = price;
}
//当前类显示的当前商品,没有办法显示全部商品
//正常逻辑中的方法
//显示所有的商品的方法show,有可能发生购物车的逻辑,主类把同一台的购物车取过来
public void show(MyCart mycart){
//首先显示商品
System.out.println(this.name);
System.out.println(this.num);
System.out.println(this.price);
System.out.println(this.peison);
//用户调整数量
System.out.println("请输入购买商品的数量");
Scanner scanner=new Scanner(System.in);
//这里的商品数量,如果出错,要继续输入
while(true){
try{
//输入的数量直接给this.num,this指示的当前对象
this.num=scanner.nextInt();
//成功后退出循环
break;
}catch(Exception e){
System.out.println("需要重新输入商品数量,你输入的有问题,请输入整数");
}
}
System.out.println("*********************");
System.out.println("1------立即购买");
System.out.println("2-------加入购物车");
System.out.println("*********************");
System.out.println("请选择你的购买意向,输入序号");
try{
//scanner是本类中本函数的全局变量,可以在这里使用
int no=scanner.nextInt();
switch(no){
case 1:
this.buy();
break;
case 2:
//调用时必须指明同一个购物车,这个购物车在主类中实例化,把购物车传入到这个类中
this.addcar(mycart);
break;
}
}catch(Exception e) {
//如果用户输入错误,默认选择立即购买的方法
this.buy();
}
}
//立即购买的方法
public void buy(){
System.out.println("你购买了这个商品");
//这里调用Order订单类的make_order()方法,在这里产生一个空方法,在Order类中重写
this.make_order(0.0);
}
//类只代表当前商品,addcar中只能把当前商品加入购物车,不进行购买,不做订单任务
//这里addcar作用就是把商品放在购物车中,但是只是当前商品的类,不能是不同的商品放在一个购物车里
//订单是进入购物车结算才开始的
//加入购物车的方法
public void addcar(MyCart mycart){
//把商品加入购物车类中,保证商品加到一个购物车中,购物车实例对象不能在这里实例化,在这里实例化不是一个购物车
//保证购物车是一个,实例在主类
//有购物车参数,直接执行加入购物车即可,this表示当前商品,直接把当前商品调用MyCart购物车类中的addCart购物车方法即可
mycart.addCart(this);
System.out.println("你已经把商品加入购物车");
}
//protected修饰,需要了类继承后进行重写
protected void make_order(double total){
//代码是由订单类做的,不是由Goods模块做的,它只能由Order的开发人员实现
}
//便于阅读,这些getter或者Setter方法放在代码的尾部
//第二,封装私有变量后,需要取值的变量用get方法,需要赋值的方法用set,即需要取值也需要赋值就是两个方法都有
//比如对name,get加上属性的首字母大写,get方法的目的是需要用户获取这个值,这里有返回值
public String getName(){
return this.name;
}
//set方法只起到一个赋值的作用,不需要返回值,因为需要赋值,必须有参数,参数name是局部变量
//一般set方法局部变量和类中属性名重名
public void setName(String name) {
this.name=name;
}
public String getPeison() {
return peison;
}
public void setPeison(String peison) {
this.peison = peison;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getSmall_pic() {
return small_pic;
}
public void setSmall_pic(String small_pic) {
this.small_pic = small_pic;
}
//toString放在代码最后
@Override
public String toString() {
return "MyGoods{" +
"name='" + name + '\'' +
", peison='" + peison + '\'' +
", num=" + num +
", price=" + price +
", small_pic='" + small_pic + '\'' +
'}';
}
}
Java优化购物车
最新推荐文章于 2024-10-01 09:29:45 发布