首页 > 编程语言 >Java【案例3-1】基于控制台的购书系统

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

时间:2024-08-09 21:23:26浏览次数:17  
标签:购书 Java int System 订单 println 控制台 public 图书

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

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

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

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

案例思路:

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

                (1)图书类(Book):

                        a.图书编号(id)

                        b.图书名称(name)

                        ​​​​​​​c.图书单价(price)

                        d.​​​​​​​库存数量(storage)

                  (2)​​​​​​​订单项类(OrderItem):

                       a.​​​​​​​图书(book)

                        b.购买数量(num)

                    (3)订单类(Order):

                        a.订单号(orderID)

                        b.订单总额(total)

                        c.订单项列表(items)

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

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

案例实现:

定义图书类(Book)
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 void setId(int 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 getStorage() {
        return storage;
    }

    public void setStorage(int storage) {
        this.storage = storage;
    }
}

         上述代码中,声明了图书标号id、书名name、价格price、库存storage,并提供了其getter和setter方法和有参构造方法。

定义订单项类(OrderItem)
class OrderItem {
    private Book book;
    private int num;

    // 有参构造方法
    public OrderItem(Book book, int num) {
        this.book = book;
        this.num = num;
    }

    public void setBook(Book book) {
        this.book = book;
    }

    // 获取图书对象
     public Book getBook() {
        return book;
     }
     // 获取订购图书数量

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }
}

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

定义订单类(Order)
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()。

定义测试类
public class Main {
     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("---------------------------------------");
    }
}

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

运行结果:

标签:购书,Java,int,System,订单,println,控制台,public,图书
From: https://blog.csdn.net/qq_74269244/article/details/140968895

相关文章

  • 搭建Java集成开发环境教程
            对于Java开发,‌IntelliJIDEA是一个广泛使用的集成开发环境。‌它提供了卓越的代码自动补全、‌动态语法检测、‌重构功能,‌以及对各种主流框架和前沿技术的深度支持。‌IntelliJIDEA有Ultimate版和CommunityEdition版,‌Ultimate版功能全面但收费,‌而Communi......
  • Java异常处理-2
    throw关键字throw用来对外主动抛出一个异常,通常下面两种情况我们主动对外抛出异常:当程序遇到一个满足语法,但是不满足业务要求时,可以抛出一个异常告知调用者。程序执行遇到一个异常,但是该异常不应当在当前代码片段被解决时可以抛出给调用者。例packageexception;/**......
  • [Java并发]ThreadLocal补充
    ThreadLocal缺点及解决方案每个Thread上都有一个threadLocals属性,它是一个ThreadLocalMap,里面存放着一个Entry数组,key是ThreadLocal类型的弱引用,value是对用的值。所有的操作都是基于这个ThreadLocalMap操作的。但是它有一个局限性,就是不能在父子线程之间传递。即在子线程中无......
  • 2024年华为OD机试真题-求幸存数之和-(C++/Java/python)-OD统一考试(C卷D卷)
    2024华为OD机试真题目录-(B卷C卷D卷)-【C++JavaPython】_华为od机试csdn-CSDN博客 题目描述给一个正整数数列nums,一个跳数jump,及幸存数量left。运算过程为:从索引0的位置开始向后跳,中间跳过J个数字,命中索引为J+1的数字,该数被敲出,并从该点起跳,以此类推,直到幸存le......
  • Java基础语法:变量与数据类型
    变量1.概念:变量是用来存储数据的命名容器并在程序的不同部分使用它。2.语法:数据类型变量名称=初始值;可以这样理解:**数据类型:**鱼缸**变量名称:**鱼的名字**变量的值:**鱼缸里装的鱼或数量数量数据类型基本数据类型-整型:1.byte:8位,有符号整数(-128到127)2.short:......
  • IDEA发生“Error:java: 错误: 不支持发行版本 5”错误的解决方案
    1、问题描述如上图所示,使用IDEA创建了一个maven项目,在运行时发生“Error:java:错误:不支持发行版本5”的报错。原因分析:该错误是由于IDEA的各个配置项存在JDK版本冲突导致的。2、解决方案一2.1、设置Maven的JDK插件如上图所示,在pom.xml文件中,设置一个编译插......
  • [Java异常]OOM
    小伙伴们,有没有遇到过程序突然崩溃,然后抛出一个OutOfMemoryError的异常?这就是我们俗称的OOM,也就是内存溢出。简单来说,就是你的Java应用想要的内存超过了JVM愿意给的极限,就会抛出这个错误。那么为什么会出现OOM呢?一般都是由这些问题引起:分配过少:JVM初始化内存小,业务使用了大......
  • Java 基于微信小程序的学校心理咨询聊天室系统 uniapp毕业设计
    文末获取资源,收藏关注不迷路文章目录项目介绍功能需求技术介绍项目界面关键代码目录项目介绍该课题旨在创建一个专门针对大学生心理健康的知识科普平台,其受众包含大学生与其父母,包含知识科普,自我筛查,在线咨询,与匿名倾诉(包含父母与大学生)四个大点。全方位的对大学生......
  • Java基于微信小程序的琴房管理系统 uniapp 毕业设计
    文末获取资源,收藏关注不迷路文章目录项目介绍用户需求分析学生用户管理员用户技术介绍项目界面关键代码目录项目介绍随着互联网技术的发发展,计算机技术广泛应用在人们的生活中,逐渐成为日常工作、生活不可或缺的工具,钢琴培训企业各种管理系统层出不穷,为钢琴培训企......
  • java基础学习笔记1
    Java编程规范命名风格1.【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。反例:_name/__name/$name/name_/name$/name__2.【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。说明:正确的英文拼写......