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

微信图片_20231214093055

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

✨专栏:《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 < items.length; i++) {// 找数组中空的位置插入if (items[i] == null){// 当前位置为空items[i] = item;return;}}}// 打印订单信息public void printOrder() {System.out.println("=====================");System.out.println("订单号:" + OrderId);System.out.println("书名\t\t单价\t\t数量");for (OrderItem item: items) {if (item != null) {System.out.println(item.getName()+"\t\t" +item.getPrice() + "\t\t" + item.getNums());// 计算总价total = total + item.getPrice() * item.getNums();}}System.out.println("总价:" + total);}
}

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.length; i++) {System.out.println(books[i].getId() + "\t\t" + books[i].getName() + "\t\t"+books[i].getPrice() + "\t"+ books[i].getNums());}System.out.println("请输入您要购买书的编号");String inputId = input.next();System.out.println("请输入购买数量");int inputNum = input.nextInt();switch (inputId) {case "001":if (inputNum > 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. 整体效果测试

image-20231118112007428 image-20231118111832188 image-20231118111649978

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/665805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++棋类小游戏2

今天给大家带来我花了1周时间自创的小游戏的升级版&#xff0c;博主还是一名小学生&#xff0c;希望大家提提意见。这是我写的最长的C代码&#xff0c;希望大家喜欢&#xff0c;不要抄袭&#xff0c;任何编译器都可以。 以前版本——C自创棋类小游戏-CSDN博客 C内容提示&…

苹果CMS挖片网升级版视频主题模版源码

自适应视频站正版高级挖片网收录模板&#xff0c;模板不错&#xff0c;是挖片网的升级版。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88799583 更多资源下载&#xff1a;关注我。

解决maven 在IDEA 下载依赖包速度慢的问题

1.idea界面双击shift键 2.打开setting.xml文件 复制粘贴 <?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sc…

深度学习实战 | 卷积神经网络LeNet手写数字识别(带手写板GUI界面)

引言 在深度学习领域&#xff0c;卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;是一种广泛应用于图像识别任务的神经网络结构。LeNet是一种经典的CNN结构&#xff0c;被广泛应用于基础的图像分类任务。本文将介绍如何使用LeNet卷积神经网络实现手写…

Transformer实战-系列教程4:Vision Transformer 源码解读2

&#x1f6a9;&#x1f6a9;&#x1f6a9;Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 4、Embbeding类 self.embeddings Embeddings(config, img_sizeimg_size) class Embeddings(nn.…

(已解决)spingboot 后端发送QQ邮箱验证码

打开QQ邮箱pop3请求服务&#xff1a;&#xff08;按照QQ邮箱引导操作&#xff09; 导入依赖&#xff08;不是maven项目就自己添加jar包&#xff09;&#xff1a; <!-- 邮件发送--><dependency><groupId>org.springframework.boot</groupId><…

vite打包原理

vite 工程化开发&#xff1a;打包工具 启动速度很快 核心原理还是webpack 把webpack封装了&#xff0c;把webpack对象封装了 和vue2整体结构几乎一致 webpack两种模式&#xff1a;开发&生产 代码打包编译&#xff0c;本地起一个web服务器实时预览编译后的结果 build 命令模…

2024.2.3

单向循环链表的头插 头删 尾插和尾删 //头结点插入 Linklist insere_element(Linklist head,datatype element) {Linklist screat();s->dataelement;if(NULLhead){heads;}else{Linklist phead;while(p->next!head){pp->next;}s->nexthead;heads;p->nexthead;}r…

太强了,AI数字人从制作到变现一次搞定

AI数字人从制作到变现 如果说GPT类大模型是我们人类的第二大脑&#xff0c;数字人就是我们人类在互联网上的第二个身体。随着 AI 的迅速发展&#xff0c;2024 年 AI 模型开始从大型语言模型向大型视觉模型转变。数字人技术作为其分支之一&#xff0c;正日益成为科技、娱乐、教…

Unity项目从built-in升级到URP(包含早期版本和2023版本)

unity不同版本的升级URP的方式不一样&#xff0c;但是大体流程是相似的 首先是加载URP包 Windows -> package manager,在unity registry中找到Universal RP 2023版本&#xff1a; 更早的版本&#xff1a; 创建URP资源和渲染器​​ 有些版本在加载时会自动创建&#…

ProcessSlot构建流程分析

ProcessorSlot ProcessorSlot构建流程 // com.alibaba.csp.sentinel.CtSph#lookProcessChain private Entry entryWithPriority(ResourceWrapper resourceWrapper, int count, boolean prioritized, Object... args)throws BlockException {// 省略创建 Context 的代码// 黑盒…

Optimizer:基于.Net开发的、提升Windows系统性能的终极开源工具

我们电脑使用久了后&#xff0c;就会产生大量的垃圾文件、无用的配置等&#xff0c;手动删除非常麻烦&#xff0c;今天推荐一个开源工具&#xff0c;可以快速帮助我们更好的优化Windos电脑。 01 项目简介 Optimizer是一个面向Windows系统的优化工具&#xff0c;旨在提升计算机…

Qt应用软件【数据篇】大小端数据转换

文章目录 大小端数据介绍大小端数据在内存中的样子C大小端数据转换QtAPI大小端转换 大小端数据介绍 大端&#xff08;Big Endian&#xff09;和小端&#xff08;Little Endian&#xff09;是一种描述计算机存储多字节数据的方式。 想象一下&#xff0c;你有一串数字&#xff0c…

vulhub中spring的CVE-2022-22947漏洞复现

Spring Cloud Gateway是Spring中的一个API网关。其3.1.0及3.0.6版本&#xff08;包含&#xff09;以前存在一处SpEL表达式注入漏洞&#xff0c;当攻击者可以访问Actuator API的情况下&#xff0c;将可以利用该漏洞执行任意命令。 参考链接&#xff1a; https://tanzu.vmware.c…

【用Unity开发一款横板跳跃游戏部分需要学习的技术点指南】

*** 用Unity开发一款横板跳跃游戏部分需要学习的技术点指南 空洞骑士是一款基于横板平台跳跃的传统风格2D动作冒险游戏&#xff0c;庞大的游戏世界交错相通&#xff0c;玩家控制小虫子去探索幽深黑暗的洞穴&#xff0c;成为了一代人茶余饭后的惦念&#xff0c;深受玩家喜爱。 …

类银河恶魔城学习记录1-6 Flip基本设置源代码 P33

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Player.cs using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; us…

JAVA 反射和动态管理(二十-完)

反射和动态管理&#xff08;二十-完&#xff09; 反射 反射允许对字段&#xff08;成员变量&#xff09;&#xff0c;成员方法&#xff0c;构造方法的信息进行编程访问。 反射操作可分为获取和解刨。 获取不是从java文件获取&#xff0c;而是从class字节码文件获取。 作用…

MySQL全表扫描:性能杀手的隐患与优化策略

MySQL全表扫描&#xff1a;性能杀手的隐患与优化策略 MySQL数据库作为常用的关系型数据库管理系统之一&#xff0c;全表扫描问题一直困扰着开发者。本文将深入剖析MySQL全表扫描的原理、其对性能的严重影响&#xff0c;同时提供一系列优化策略&#xff0c;助您高效应对MySQL性能…

【NodeJS】fs 模块 (2)

流式文件写入 & 读取 流式文件写入 / 读取适合操作大文件 流式写入 ① 创建可写流&#xff1a;fs.createWriteStream(path[, options]) path&#xff1a;文件路径options&#xff1a;配置对象 flags&#xff1a;文件系统标志&#xff0c;默认值为 wencoding&#xff1a;…

Android battery saver 简单记录

目录 一. battery saver模式的policy (1) DEFAULT_FULL_POLICY 对应的配置和解释: (2) OFF_POLICY 对应的配置也就说不使用policy (3) 获取省电模式下的policy: 二. 对各个参数代码讲解 (1) adjustBrightnessFactor (2) enableAdjustBrightness (3) advertiseIsEnabled…