小工具知识网

当前位置: 首页 > 行业知识 > 基于控制台的购书系统(Java 语言实现)

行业知识

基于控制台的购书系统(Java 语言实现)

2026-10-20 02:00:57 来源:互联网转载

博客主页:���敲代码的小杨.

✨专栏:《Java SE语法》|《数据结构与算法》

❤️感谢大家点赞收藏⭐评论✍,您的三连就是我持续更新的动力❤️

小杨水平有限,欢迎各位大佬指点,相互学习进步!

文章目录

  • 1. 设计背景
  • 2.要求
  • 3. 设计思路
  • 4. 代码演示
    • 4.1 Book类的实现
    • 4.2 OrderItem类实现
    • 4.3 Order类实现
    • 4.4 Main类
    • 5. 整体效果测试

      1. 设计背景

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

      2.要求

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

      顾客购书时,根据提示输人图书编号选购需要的书,并根据提示输人需要购买的书的数量。购买完毕输出顾客的订单信息,包括订单号、订单明细、订单总额。

      3. 设计思路

      由题可知,我们需要先创建3个类:分别是书类、订单类,以及订单中的订单信息(购买的书名、购买的数量、书的单价)——订单项类。

      1. 书类(Book)

        属性:书的编号、书名、书的价格、书的库存

      2. 订单类(Order)

        属性:订单号、订单总额、订单项数组

      3. 订单项类(OrderItem)

        属性:购买的数量、购买的书名、所购图书的价格

      另外,我们在系统中还需要将订单项里的内容添加到订单中,还需要在订单中获取所购买的书的各项信息,因此我们需要在订单类里构造以上这些方法。

      4. 代码演示

      4.1 Book类的实现

      书籍类的属性有:图书的编号,书名、图书价格、图书库存, 我们结合封装性,将属性设置为private权限,并提供相应的get方法和set方法,空参构造器,以及带有全部参数的构造器。代码实现如下:

      package book;// 图书类public class Book {    private String id;// 图书编号    private String name;// 书名    private double price;// 价格    private int nums;// 库存    public Book() {    }    public Book(String id, String name, double price, int nums) {        this.id = id;        this.name = name;        this.price = price;        this.nums = nums;    }    // get方法和set方法    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }    public int getNums() {        return nums;    }    public void setNums(int nums) {        this.nums = nums;    }}

      4.2 OrderItem类实现

      订单项类的属性有:购买的书名,购买书籍的数量,书籍的价格,我们结合封装性,将属性设置为private权限,并提供相应的get方法和set方法,空参构造器,以及带有全部参数的构造器。代码实现如下:

      package order;// 订单项类public class OrderItem {    private String name;// 购买的书名    private int nums;// 购买的数量    private double price;// 价格    public OrderItem() {    }    public OrderItem(String name, int nums, double price) {        this.name = name;        this.nums = nums;        this.price = price;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getNums() {        return nums;    }    public void setNums(int nums) {        this.nums = nums;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }}

      4.3 Order类实现

      订单类的属性有:订单号,订单总价,订单项数组(对添加的订单进行存储)

      订单类主要提供:添加订单项的方法以及打印订单信息的方法,具体代码实现如下:

      package order;// 订单类public class Order {    private String OrderId; // 订单号    private double total; // 订单总价    OrderItem[] items = new OrderItem[100];    public Order() {    }    public Order(String OrderId) {        this.OrderId = OrderId;    }        // 添加订单项的方法    public void AddOrderItem(OrderItem item){        // 在数组空的位置插入        for (int i = 0; i  

      4.4 Main类

      此时,我们所有的框架都已经搭建好了,只需要在Main类中添加main方法进行测试即可,代码如下:

      import book.Book;import order.Order;import order.OrderItem;import java.util.Scanner;public class Main {    public static void main(String[] args) {        Book[] books = new Book[3];        books[0] = new Book("001","数据结构",59.80,20);        books[1] = new Book("002","程序设计",48.80,2);        books[2] = new Book("003","信息技术",25.4,12);        Order order = new Order("2023001");// 生成订单号        Scanner input = new Scanner(System.in);        while (true) {            // 打印订单信息            System.out.println("编号\t\t书名\t\t\t单价\t\t库存\t");            for (int i = 0; i  books[0].getNums()){ // 购买的的数量大于库存                        System.out.println("库存不足,请重新输入!");                        System.out.println("当前库存为:" + books[0].getNums());                        break;                    }else {                        books[0].setNums(books[0].getNums() - inputNum);// 剩余库存                        //                        order.AddOrderItem(new OrderItem(books[0].getName(),                                inputNum,books[0].getPrice()));                        break;                    }                case "002":                    if (inputNum > books[1].getNums()){ // 购买的的数量大于库存                        System.out.println("库存不足,请重新输入!");                        System.out.println("当前库存为:" + books[1].getNums());                        break;                    }else {                        books[1].setNums(books[1].getNums() - inputNum);                        order.AddOrderItem(new OrderItem(books[1].getName(),                                inputNum,books[1].getPrice()));                        break;                    }                case "003":                    if (inputNum > books[2].getNums()){ // 购买的的数量大于库存                        System.out.println("库存不足,请重新输入!");                        System.out.println("当前库存为:" + books[2].getNums());                        break;                    }else {                        books[2].setNums(books[2].getNums() - inputNum);// 剩余库存                        order.AddOrderItem(new OrderItem(books[2].getName(),                                inputNum,books[2].getPrice()));                        break;                    }            }            System.out.println("是否继续购书?请选择Yes/No");            String  next = input.next();            if (next.equals("No")){                break;            }        }        order.printOrder();    }}

      5. 整体效果测试

上一篇:易企秀验证码添加教程,轻松学会验证码设置方法!

下一篇:迅游怎么代理服务器?