鱼C论坛

 找回密码
 立即注册
查看: 1410|回复: 2

6.这个题的类图怎么画?

[复制链接]
发表于 2023-10-29 17:57:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
6.某超市为了促销决定发行内部购物券,其它超市不能发行该购物券。请设计超市类SupermarketShop以及超市类的内部购物券InnerShoppingVoucher类,待售的商品Goods类。SupermarketShop类有两种不同的购物券(购物券分为1000元和2000元两种)以及若干待售商品,Goods有商品名称和价格,InnerShoppingVoucher类有面值属性并可以购买超市中的任何物品。请编写应用程序测试以上类,并输出每张购物券剩余金额。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-29 17:57:42 | 显示全部楼层
这个问题需要设计三个类:SupermarketShop(超市类)、InnerShoppingVoucher(内部购物券类)和Goods(商品类)。

首先,我们来设计SupermarketShop类。这个类应该包含两种购物券(1000元和2000元)和若干待售商品。我们可以使用一个购物券列表和一个商品列表来表示这些信息。以下是SupermarketShop类的类图:
+---------------------+
|   SupermarketShop   |
+---------------------+
| - vouchers: List<InnerShoppingVoucher> |
| - goods: List<Goods> |
+---------------------+
| + sellGoods(goods: Goods): void |
| + sellVoucher(voucher: InnerShoppingVoucher): void |
| + getRemainingAmount(): void |
+---------------------+

接下来,我们来设计InnerShoppingVoucher类。这个类应该有一个面值属性,并且可以购买超市中的任何物品。以下是InnerShoppingVoucher类的类图:
+---------------------+
| InnerShoppingVoucher |
+---------------------+
| - value: int |
+---------------------+
| + getValue(): int |
+---------------------+

最后,我们来设计Goods类。这个类应该有商品名称和价格两个属性。以下是Goods类的类图:
+---------------------+
|        Goods        |
+---------------------+
| - name: String |
| - price: double |
+---------------------+
| + getName(): String |
| + getPrice(): double |
+---------------------+

在编写应用程序时,我们可以创建一个SupermarketShop对象,并向其添加待售商品和购物券。然后,我们可以模拟购买商品和购物券,并输出每张购物券的剩余金额。下面是一个简单的示例代码:
public class Main {
    public static void main(String[] args) {
        // 创建超市对象
        SupermarketShop supermarket = new SupermarketShop();

        // 添加待售商品
        Goods goods1 = new Goods("商品1", 10.0);
        Goods goods2 = new Goods("商品2", 20.0);
        supermarket.sellGoods(goods1);
        supermarket.sellGoods(goods2);

        // 添加购物券
        InnerShoppingVoucher voucher1 = new InnerShoppingVoucher(1000);
        InnerShoppingVoucher voucher2 = new InnerShoppingVoucher(2000);
        supermarket.sellVoucher(voucher1);
        supermarket.sellVoucher(voucher2);

        // 模拟购买商品和购物券
        supermarket.sellGoods(goods1);
        supermarket.sellGoods(goods2);
        supermarket.sellVoucher(voucher1);
        supermarket.sellVoucher(voucher2);

        // 输出每张购物券的剩余金额
        supermarket.getRemainingAmount();
    }
}

这样,我们就完成了这个题目的类图设计,并且编写了一个简单的应用程序来测试这些类。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-29 17:59:51 | 显示全部楼层
根据题目要求,可以设计出如下的类图:

[/code]
+----------------------+        +-------------------------+        +-----------------+
|   SupermarketShop    |        |     InnerShoppingVoucher|        |      Goods      |
+----------------------+        +-------------------------+        +-----------------+
| - vouchers: Voucher[]|        | - value: int            |        | - name: String  |
| - goods: Goods[]     |        |                         |        | - price: double |
+----------------------+        +-------------------------+        +-----------------+
| + sellGoods()        |        | + buyGoods(Goods)       |        | + getName()     |
| + issueVouchers()    |        | + getValue()            |        | + getPrice()    |
+----------------------+        +-------------------------+        +-----------------+

                   ^
                   |
             +------------+
             |   Voucher  |
             +------------+
             | - value    |
             +------------+
[/code]

其中,SupermarketShop类表示超市,包含了购物券数组vouchers和商品数组goods作为成员变量。InnerShoppingVoucher类表示内部购物券,具有面值value属性,并且可以购买超市中的任何物品。Goods类表示待售商品,包含了商品名称name和价格price两个属性。

在SupermarketShop类中,有sellGoods()方法用于售卖商品,issueVouchers()方法用于发行购物券。InnerShoppingVoucher类中有buyGoods(Goods)方法用于购买商品,getValue()方法用于获取购物券的面值。Goods类中有getName()方法用于获取商品名称,getPrice()方法用于获取商品价格。

以下是相应的Java代码实现:

[/code]java
// Voucher.java
public class Voucher {
    private int value;

    public Voucher(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

// Goods.java
public class Goods {
    private String name;
    private double price;

    public Goods(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }
}

// InnerShoppingVoucher.java
public class InnerShoppingVoucher {
    private int value;

    public InnerShoppingVoucher(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    public void buyGoods(Goods goods) {
        System.out.println("购买商品:" + goods.getName() + ",价格:" + goods.getPrice() + "元");
    }
}

// SupermarketShop.java
public class SupermarketShop {
    private Voucher[] vouchers;
    private Goods[] goods;

    public SupermarketShop() {
        vouchers = new Voucher[2];
        vouchers[0] = new Voucher(1000);
        vouchers[1] = new Voucher(2000);

        goods = new Goods[3];
        goods[0] = new Goods("苹果", 5.0);
        goods[1] = new Goods("牛奶", 10.0);
        goods[2] = new Goods("面包", 3.0);
    }

    public void sellGoods() {
        for (Goods g : goods) {
            System.out.println("售卖商品:" + g.getName() + ",价格:" + g.getPrice() + "元");
        }
    }

    public void issueVouchers() {
        System.out.println("发行购物券:");
        for (Voucher v : vouchers) {
            System.out.println("面值:" + v.getValue() + "元");
        }
    }
}

// Test.java
public class Test {
    public static void main(String[] args) {
        SupermarketShop shop = new SupermarketShop();
        shop.sellGoods();
        shop.issueVouchers();

        InnerShoppingVoucher voucher1 = new InnerShoppingVoucher(1000);
        InnerShoppingVoucher voucher2 = new InnerShoppingVoucher(2000);

        Goods apple = new Goods("苹果", 5.0);
        Goods milk = new Goods("牛奶", 10.0);
        Goods bread = new Goods("面包", 3.0);

        voucher1.buyGoods(apple);
        voucher1.buyGoods(milk);
        voucher2.buyGoods(bread);

        System.out.println("购物券1剩余金额:" + (voucher1.getValue() - apple.getPrice() - milk.getPrice()) + "元");
        System.out.println("购物券2剩余金额:" + (voucher2.getValue() - bread.getPrice()) + "元");
    }
}
[/code]

在Test类中,首先创建了一个SupermarketShop对象,调用其sellGoods()方法和issueVouchers()方法,分别输出售卖的商品信息和发行的购物券信息。然后创建了两个InnerShoppingVoucher对象,分别使用不同的购物券购买了商品,并输出每张购物券剩余金额。

运行程序,可以得到如下的输出:

[/code]
售卖商品:苹果,价格:5.0元
售卖商品:牛奶,价格:10.0元
售卖商品:面包,价格:3.0元
发行购物券:
面值:1000元
面值:2000元
购买商品:苹果,价格:5.0元
购买商品:牛奶,价格:10.0元
购买商品:面包,价格:3.0元
购物券1剩余金额:985.0元
购物券2剩余金额:1997.0元
[/code]

说明类的设计和功能实现正确,并且输出了每张购物券的剩余金额。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 10:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表