商城购物车设计要求

10.21
购物车设计:
某电商平台,为方便商品展示,需要将商品分类。
在购物时,可将不同类别的商品加入购物车,并自动计价。
假设购买如下商品:U盘2个(每只100元);显示器1个(2000元);音箱一对(300元)。
请设计购物车,能添加、移除商品,并自动计算出总价格。
发票类:
发票打印:假设需要打印发票
发票中包含如下内容:抬头、订单号、货物名称、规格型号、数量、单价、金额、总金额等。
其中,货物名称由商家自定义,如音箱,货物名称:创新小音箱,规格型号:Inspire T12。
请模拟打印上述发票信息。
提示:基于商品中约定发票格式;具体商品的toString()中填入个性化信息。

购物车类设计思路

首先分析设计要求,设计商品类,设置不同种类的商品类继承商品类,购物车类,和打印机类
商品类:
1.这是一个商品类,放置所有商品的共同属性,如名称、数量、单价,以及get、set方法,在后面设置和读取会用到。
2.定义show方法,在不同种类的商品类中重写。

class goods{
    private String name;
    private int nums;
    private double price;

    public String getName() {
        return name;
    }

    public int getNums() {
        return nums;
    }

    public void setNums(int nums) {
        this.nums = nums;
    }

    public double getPrice() {
        return price;
    }

    public goods(String name, int nums, double price){
        this.name=name;
        this.nums=nums;
        this.price=price;
    }
    public void show(){ }
}

数码产品类:
1.数码产品类,放置数码产品,及不一些特有属性,如型号、尺寸等。
2.定义构造方法,共有属性调用super。
3.重写show方法(不同类别的商品show方法不一样)

class shuma extends goods{
    private String species="数码产品";
    private String pname;
    private String model;
    public shuma(String na, int nu, double pri,String p,String mo){
        super(na,nu,pri);
        this.pname=p;
        this.model=mo;
    }

    public String getSpecies() {
        return species;
    }

    public String getPname() {
        return pname;
    }

    public String getModel() {
        return model;
    }

    @Override
    public void show(){
        System.out.println("类型: \t"+getSpecies()+" 名称: \t"+getPname()+getName()+" 单价: \t"+getPrice()+" 数量: \t"+getNums()+" 型号: \t"+getModel());
    }
}

食品类:
1.食品类,具体同数码类一样(一些不同属性,及重写show方法)
2.之后可以写更多的类,如图书,衣服等。

class food extends goods{
    private String species="食物";
    private String production;
    private String overdue;
    public food(String na, int nu, double pri, String pro,String over){
        super(na,nu,pri);
        this.production=pro;
        this.overdue=over;
    }

    public String getSpecies() {
        return species;
    }

    public String getProduction() {
        return production;
    }

    public String getOverdue() {
        return overdue;
    }

    @Override
    public void show(){
        System.out.println("类型: \t"+getSpecies()+" 名称: \t"+getName()+"  单价: \t"+getPrice()+" 数量: \t"+getNums()+" 生产日期: \t"+getProduction()+" 保质期:\t"+getOverdue());
    }
}

购物车类:
1.购物车类,主要有商品数组,商品数量,故定义前两个私有属性。
2.包含add、delete、show、sum方法。(后面具体描述)

class shopcar{
    private goods[] good;
    private int sums=0;
    public void Shopcar(goods[] good1) {
        this.good = good1;
    }

    public goods getGood(int i) {
        return good[i];
    }

    public void setGood(goods[] good) {
        this.good = good;
    }

    public int getSums() {
        return sums;
    }

    public void add(goods good1)
    {
        for(int i=0;i<this.good.length;i++)
        {
            if(this.good[i]==null)
            {
                this.good[i] = good1;
                sums++;
                break;
            }
        }
    }
//这里传入的是要删除商品的名称和数量,先找到位置,如果数量没删除完,就减少数量,如果删除完了就删除商品类
    public void delete(String name,int j){
        for(int i=0;i<sums;i++){
            if(this.good[i].getName()==name){
                if(this.good[i].getNums()-j>0)
                    this.good[i].setNums(this.good[i].getNums()-j);
                else{
                    for(int k=i;k<sums;k++)
                        this.good[k]=this.good[k+1];
                    sums--;}
            }
        }
    }
//sum求和:商品数量*商品单价的累加
    public void sum(){
        int sum=0;
        for (int i=0;i<sums;i++){
            sum+=this.good[i].getPrice()*this.good[i].getNums();
        }
        System.out.println("商品总价是:"+sum);
    }
//show方法:展示购物车
    public void show(){
        System.out.println("xx用户的购物车信息:");
        for(int i=0;i<sums;i++){
            good[i].show();
        }
    }
}

打印机类:
1.打印机类:主要有抬头,公司,及传入的购物车类(重点)

class invoiceprinter{
    private String username;
    private shopcar shopcar;
    private String company;

    public void setShopcar(shopcar shopcar) {
        this.shopcar = shopcar;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setCompany(String company) {
        this.company = company;
    }
    //这是获取uuid(唯一订单号)方法
    public static String getUUID() {
        String replaceUUID = UUID.randomUUID().toString().replace("-", "");
        String currentTimeMillis = String.valueOf(System.currentTimeMillis());
        return replaceUUID + currentTimeMillis;
    }
    //获取当前时间方法
    public static String newDateTime(){
        SimpleDateFormat tempDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String datetime = tempDate.format(new java.util.Date());
        return datetime;
    }
    //打印方法:先打印固定格式,然后调用shopcar中商品类的show方法展示内容。
    public void ToString(){
        System.out.println("* * * * * * * * * * * * * * * * * * * *发票 * * * * * * * * * * * * * * * * * * * * * *");
        System.out.println("抬头 :"+username+"                 \t"+"订单号: "+getUUID());
        for(int i=0;i<shopcar.getSums();i++){
            shopcar.getGood(i).show();
        }
        shopcar.sum();
        System.out.println("打印时间:"+newDateTime());
        System.out.println(company);
    }
}

mian方法:

public class shop {
    public static void main(String[] args) {
        //先new一个商品数组放到购物车类中
        goods[] good = new goods[100];
        shopcar sc = new shopcar();
        sc.setGood(good);

        //这里是add方法(即你想要买的东西)、这里没有设置商品的储存(即你想买什么商店里就有什么,要多少有多少)
        goods good1 = new shuma("u盘", 2, 100, "闪迪", "8G");
        goods good2 = new shuma("显示器", 1, 2000, "夏普", "56寸");
        goods good3 = new shuma("音响", 2, 300, "小米", "hifi音质");
        goods good4 = new food("面包", 2, 6, "2021.10.21", "2021.10.29");
        goods good5 = new food("薯片", 1, 7, "2021.10.21", "2021.12.1");
        sc.add(good1);
        sc.add(good2);
        sc.add(good3);
        sc.add(good4);
        sc.add(good5);
        //删除方法:上面买了两个面包,这里数量删除一个;如果删除两个,这个面包类就被删除了。
        sc.delete("面包", 1);
        sc.show();
        sc.sum();
        //打印机区,先new,然后传入shopcar,抬头姓名,公司名称等,可定制
        System.out.println();
        invoiceprinter invoiceprinter = new invoiceprinter();
        invoiceprinter.setShopcar(sc);
        invoiceprinter.setUsername("my");
        invoiceprinter.setCompany("xx商店");
        invoiceprinter.ToString();
    }
}

测试截图

测试

整体代码

import java.text.SimpleDateFormat;
import java.util.UUID;
/**
 * 10.21
 * 购物车设计:某电商平台,为方便商品展示,需要将商品分类。
 * 在购物时,可将不同类别的商品加入购物车,并自动计价。
 * 假设购买如下商品:U盘2个(每只100元);显示器1个(2000元);音箱一对(300元)。
 * 请设计购物车,能添加、移除商品,并自动计算出总价格。
 * 集成发票打印。
 */

/*
1.这是一个商品类,放置所有商品的共同属性,如名称、数量、单价,以及get、set方法,在后面设置和读取会用到。
2.定义show方法,在不同种类的商品类中重写。
 */
class goods{
    private String name;
    private int nums;
    private double price;

    public String getName() {
        return name;
    }

    public int getNums() {
        return nums;
    }

    public void setNums(int nums) {
        this.nums = nums;
    }

    public double getPrice() {
        return price;
    }

    public goods(String name, int nums, double price){
        this.name=name;
        this.nums=nums;
        this.price=price;
    }
    public void show(){ }
}

/*
1.数码产品类,放置数码产品,及不一些特有属性,如型号、尺寸等。
2.定义构造方法,共有属性调用super。
3.重写show方法(不同类别的商品show方法不一样)
 */
class shuma extends goods{
    private String species="数码产品";
    private String pname;
    private String model;
    public shuma(String na, int nu, double pri,String p,String mo){
        super(na,nu,pri);
        this.pname=p;
        this.model=mo;
    }

    public String getSpecies() {
        return species;
    }

    public String getPname() {
        return pname;
    }

    public String getModel() {
        return model;
    }

    @Override
    public void show(){
        System.out.println("类型: \t"+getSpecies()+" 名称: \t"+getPname()+getName()+" 单价: \t"+getPrice()+" 数量: \t"+getNums()+" 型号: \t"+getModel());
    }
}

/*
1.食品类,具体同数码类一样(一些不同属性,及重写show方法)
2.之后可以写更多的类,如图书,衣服等。
 */
class food extends goods{
    private String species="食物";
    private String production;
    private String overdue;
    public food(String na, int nu, double pri, String pro,String over){
        super(na,nu,pri);
        this.production=pro;
        this.overdue=over;
    }

    public String getSpecies() {
        return species;
    }

    public String getProduction() {
        return production;
    }

    public String getOverdue() {
        return overdue;
    }

    @Override
    public void show(){
        System.out.println("类型: \t"+getSpecies()+" 名称: \t"+getName()+"  单价: \t"+getPrice()+" 数量: \t"+getNums()+" 生产日期: \t"+getProduction()+" 保质期:\t"+getOverdue());
    }
}
/*
1.购物车类,主要有商品数组,商品数量,故定义前两个私有属性。
2.包含add、delete、show、sum方法。(后面具体描述)
 */
class shopcar{
    private goods[] good;
    private int sums=0;
    public void Shopcar(goods[] good1) {
        this.good = good1;
    }

    public goods getGood(int i) {
        return good[i];
    }

    public void setGood(goods[] good) {
        this.good = good;
    }

    public int getSums() {
        return sums;
    }

    public void add(goods good1)
    {
        for(int i=0;i<this.good.length;i++)
        {
            if(this.good[i]==null)
            {
                this.good[i] = good1;
                sums++;
                break;
            }
        }
    }
//这里传入的是要删除商品的名称和数量,先找到位置,如果数量没删除完,就减少数量,如果删除完了就删除商品类
    public void delete(String name,int j){
        for(int i=0;i<sums;i++){
            if(this.good[i].getName()==name){
                if(this.good[i].getNums()-j>0)
                    this.good[i].setNums(this.good[i].getNums()-j);
                else{
                    for(int k=i;k<sums;k++)
                        this.good[k]=this.good[k+1];
                    sums--;}
            }
        }
    }
//sum求和:商品数量*商品单价的累加
    public void sum(){
        int sum=0;
        for (int i=0;i<sums;i++){
            sum+=this.good[i].getPrice()*this.good[i].getNums();
        }
        System.out.println("商品总价是:"+sum);
    }
//show方法:展示购物车
    public void show(){
        System.out.println("xx用户的购物车信息:");
        for(int i=0;i<sums;i++){
            good[i].show();
        }
    }
}

/*
1.打印机类:主要有抬头,公司,及传入的购物车类(重点)
 */
class invoiceprinter{
    private String username;
    private shopcar shopcar;
    private String company;

    public void setShopcar(shopcar shopcar) {
        this.shopcar = shopcar;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setCompany(String company) {
        this.company = company;
    }
    //这是获取uuid(唯一订单号)方法
    public static String getUUID() {
        String replaceUUID = UUID.randomUUID().toString().replace("-", "");
        String currentTimeMillis = String.valueOf(System.currentTimeMillis());
        return replaceUUID + currentTimeMillis;
    }
    //获取当前时间方法
    public static String newDateTime(){
        SimpleDateFormat tempDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String datetime = tempDate.format(new java.util.Date());
        return datetime;
    }
    //打印方法:先打印固定格式,然后调用shopcar中商品类的show方法展示内容。
    public void ToString(){
        System.out.println("* * * * * * * * * * * * * * * * * * * *发票 * * * * * * * * * * * * * * * * * * * * * *");
        System.out.println("抬头 :"+username+"                 \t"+"订单号: "+getUUID());
        for(int i=0;i<shopcar.getSums();i++){
            shopcar.getGood(i).show();
        }
        shopcar.sum();
        System.out.println("打印时间:"+newDateTime());
        System.out.println(company);
    }
}

public class shop {
    public static void main(String[] args) {
        //先new一个商品数组放到购物车类中
        goods[] good = new goods[100];
        shopcar sc = new shopcar();
        sc.setGood(good);

        //这里是add方法(即你想要买的东西)、这里没有设置商品的储存(即你想买什么商店里就有什么,要多少有多少)
        goods good1 = new shuma("u盘", 2, 100, "闪迪", "8G");
        goods good2 = new shuma("显示器", 1, 2000, "夏普", "56寸");
        goods good3 = new shuma("音响", 2, 300, "小米", "hifi音质");
        goods good4 = new food("面包", 2, 6, "2021.10.21", "2021.10.29");
        goods good5 = new food("薯片", 1, 7, "2021.10.21", "2021.12.1");
        sc.add(good1);
        sc.add(good2);
        sc.add(good3);
        sc.add(good4);
        sc.add(good5);
        //删除方法:上面买了两个面包,这里数量删除一个;如果删除两个,这个面包类就被删除了。
        sc.delete("面包", 1);
        sc.show();
        sc.sum();
        //打印机区,先new,然后传入shopcar,抬头姓名,公司名称等,可定制
        System.out.println();
        invoiceprinter invoiceprinter = new invoiceprinter();
        invoiceprinter.setShopcar(sc);
        invoiceprinter.setUsername("my");
        invoiceprinter.setCompany("xx商店");
        invoiceprinter.ToString();
    }
}

转载请附本文博客地址

Last modification:October 22nd, 2021 at 08:51 pm
如果觉得我的文章对你有用,请随意赞赏