Java案例分析

【案例3-1】基于控制台的购书系统

2024-10-25 13 0

简介 1. 案例描述 伴随互联网的蓬勃发展,网络购书系统作为电子商务的一种形式,正以其高效、低成本的优势逐步成为新兴的经营模式,人们已经不再满足互联网的用途仅仅局限于信息的浏览和发布,更渴望着能够充分享受互联网所带来的更多便利。网络购书系统正适应了当今社会快节奏地生活,使顾客足不出户便可以方便快捷轻松地选购自己喜欢的图书。 本任务要求,使用所学知识编写一个基于控制台的购书系统,实现购书功能。输出所有图书的信息:包括每本书的编号、书名、单价、库存。 顾客购买书时,根据提示输...

【案例3-1】基于控制台的购书系统

【案例介绍】

1.       案例描述

伴随互联网的蓬勃发展,网络购书系统作为电子商务的一种形式,正以其高效、低成本的优势逐步成为新兴的经营模式,人们已经不再满足互联网的用途仅仅局限于信息的浏览和发布,更渴望着能够充分享受互联网所带来的更多便利。网络购书系统正适应了当今社会快节奏地生活,使顾客足不出户便可以方便快捷轻松地选购自己喜欢的图书。

本任务要求,使用所学知识编写一个基于控制台的购书系统,实现购书功能。输出所有图书的信息:包括每本书的编号、书名、单价、库存。

顾客购买书时,根据提示输入图书编号来选购需要的书,并根据提示输入购买书的的数量。

购买完毕后输出顾客的订单信息,包括:订单号、订单明细、订单总额。

2.       运行结果

upfile

【案例目标】

l  学会分析“基于控制台的购书系统”程序任务实现的逻辑思路。

l  能独立完成“基于控制台的购书系统”程序的源代码编写、编译及运行。

l  理解和掌握面向对象的设计程序。

l  会用类图进行面向对象设计。

l  掌握封装的实现及好处。

l  包和访问控制修饰符的使用。

【案例分析】

1)通过任务描述可知,该系统中必须包括3个实体类,类名及属性设置如下:

l  图书类(Book):

Ø  图书编号(id)

Ø  图书名称(name)

Ø  图书单价(price)

Ø  库存数量(storage)

l  订单项类(OrderItem):

Ø  图书(book)

Ø  购买数量(num)

l  订单类(Order):

Ø  订单号(orderID)

Ø  订单总额(total)

Ø  订单项列表(items)

2)由于购买图书时,需要选择图书的数量,所以需要在订单项类里定义获取图书对象以及图书数量的方法。

3)由于需要指定订单项以及获取订单的订单列表、订单号、订单总额等信息,所以需要有订单列表、订单号、订单总额指定订单项等方法。

【案例实现】

定义图书类Book,其代码如下所示。

Book.java

public class Book {

    private int id;    // 编号

    private String name;  // 书名

    private double price;  // 价格

    private int storage;   // 库存

    // 有参构造

    public Book(int id, String name, double price, int storage) {

        this.id = id;

        this.name = name;

        this.price = price;

        this.storage = storage;

    }

    // 获取书号

    public int getId() {

        return id;

    }

    // 获取书名

    public String getName() {

        return name;

    }

    // 获取价格

    public double getPrice() {

        return price;

    }

    // 获取库存

    public int getStorage() {

        return storage;

    }

}

上述代码中,声明了图书标号id、书名name、价格price、库存storage,并提供了其gettersetter方法。

定义订单项类OrderItem,其代码如下所示。

OrderItem.java

public class OrderItem {

    private Book book;

    private int num;

    // 有参构造方法

    public OrderItem(Book book, int num) {

        this.book = book;

        this.num = num;

    }

    // 获取图书对象

public Book getBook() {

      return book;

}

    // 获取订购图书数量

public int getNum() {

      return num;

    }

}

上述代码中,声明了图书对象Book,购买数量num,并提供了其gettersetter方法。

定义订单类Order,其代码如下所示。

Order.java

public class Order {

    private String orderId;

    private OrderItem items[];

    private double total;

    // 有参构造

    public Order(String orderId) {

        this.orderId = orderId;

        this.items = new OrderItem[3];

    }

// 获取订单号

public String getOrderId() {

        return orderId;

}

// 获取订单列表

public OrderItem[] getItems() {

        return items;

}

// 获取订单总额

public double getTotal() {

        calTotal();

        return total;

}

// 指定一个订单项

public void setItem(OrderItem item, int i) {

        this.items[i] = item;

}

// 计算订单总额

public void calTotal() {

double total = 0;

for (int i = 0; i < items.length; i ++) {

      total += items[i].getNum() * items[i].getBook().getPrice();

}

      this.total = total;

}

}

上述代码中,声明了订单id、订单项数组,并声明了获取订单号方法getOrderId()、获取订单列表方法getItems()、获取订单总额方法getTotal()、指定一个订单项setItem()、计算订单总额的方法calTotal()

PayBooks.java

import java.util.Scanner;

public class PayBooks {

    public static void main(String[] args) {

        Book books[] = new Book[3];

        //模拟从数据库中读取图书信息并输出

        outBooks(books);

        // 顾客购买图书

        Order order = purchase(books);

        // 输出订单信息

        outOrder(order);

    }

    // 顾客购买图书

    public static Order purchase(Book books[]) {

        Order order = new Order("00001");

        OrderItem item = null;

        Scanner in = new Scanner(System.in);

        for (int i = 0; i < 3; i ++) {

            System.out.println("请输入图书编号选择图书:");

            int cno = in.nextInt();

            System.out.println("请输入购买图书数量:");

            int pnum = in.nextInt();

            item = new OrderItem(books[cno-1],pnum);

            order.setItem(item, i);

            System.out.println("请继续购买图书。");

        }

        in.close();

        return order;

    }

    // 输出订单信息

    public static void outOrder(Order order) {

        System.out.println("\n\t图书订单");

        System.out.println("图书订单号:"+order.getOrderId());

        System.out.println("图书名称\t购买数量\t图书单价");

        System.out.println("--------------------------------------");

        OrderItem items[] = order.getItems();

        for(int i = 0; i < items.length; i ++) {

System.out.println(items[i].getBook().getName()+"\t"+items[i].getNum(

)+"\t"+items[i].getBook().getPrice());

            //System.out.println("\n");

        }

System.out.println("---------------------------------------");

 System.out.println("订单总额:\t\t"+order.getTotal());

}

    // 模拟从数据库中读取图书信息并输出

    public static void outBooks(Book books[]) {

        books[0] = new Book(1,"Java教程",30.6,30);

        books[1] = new Book(2,"JSP教程",42.1,40);

        books[2] = new Book(3,"SSH架构",47.3,15);

        System.out.println("\t图书列表");

        System.out.println("图书编号\t图书名称\t\t图书单价\t库存数量");

        System.out.println("---------------------------------------");

        for (int i = 0; i < books.length; i ++) {

            System.out.println(i+1+"\t"+books[i].getName()+"\t"+

                        books[i].getPrice()+"\t"+books[i].getStorage());

        }

        System.out.println("---------------------------------------");

    }

}

上述代码中,输出了图书列表信息包括:图书编号、图书名称、图书单价、库存数量,用户根据图书列表信息,输入图书编号、购买数量等,系统根据用户输入的图书编号及购买数量计算总金额。

 


点赞 0

文章评论

欢迎您:

阿文博客

人生的价值,并不是用时间,而是用深度量去衡量的。——列夫·托尔斯泰

69 文章 1879 浏览 0 评论