目录

代码

实现思路

0x1 创建Book图书

0X2 读取图书

0x3 书籍判断

0x4 订单计算

总结


代码

import java.util.Random;
import java.util.Scanner;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 void setStorage(int storage) {this.storage = storage;}public int getId() {return id;}public String getName() {return name;}public double getPrice() {return price;}public int getStorage() {return storage;}
}public class saber {public static void main(String[] args) {Book[] books = new Book[3];     // 类型是数组那么就是可以这样outbooks(books);  // 传入参数到方法中while (true){System.out.println("请输入你选择的编号,如无需购买 6 键退出");Scanner sc = new Scanner(System.in);    // if判断输入值 1 2 3int  number = sc.nextInt();if (number == 1){System.out.println("输入您的购买数量");int  input = sc.nextInt();promotion(number,input,books);}else if (number == 2){System.out.println("输入您的购买数量");int  input = sc.nextInt();promotion(number,input,books);}else if(number == 3){System.out.println("输入您的购买数量");int  input = sc.nextInt();promotion(number,input,books);} else if (number == 6) {System.out.println("结束购买");break;}else {System.out.println("非法字符自动结束");break;}}}public static void  promotion(int id,int quantity,Book[] books){id-=1;  // 索引-1if (quantity > books[id].getStorage()){System.out.println("选择的数量大于实际数量,现有"+books[id].getStorage()+"本");}else {// 更新编号方法Random r = new Random();int data = r.nextInt();       // 随机编号System.out.println("订单信息================================\n编号:"+data+"\n选购图书:"+books[id].getName()+"\n选购数量:"+quantity+"\n订单总价:"+books[id].getPrice()*quantity);books[id].setStorage(books[id].getStorage()-quantity); // 更新库存set方法System.out.println("图书"+books[id].getName()+"库存还有"+books[id].getStorage()+"本");System.out.println("==================请继续选购=================\n");}}// 读取图书的方法public static void outbooks(Book[] books){books[0] = new Book(1,"Java教程",30,10);books[1] = new Book(2,"JSP教程",42,10);books[2] = new Book(3,"SSH架构",47,10);System.out.println("\t\t\t图书列表");System.out.println("图书编号\t图书名称\t\t图书单价\t库存数量");System.out.println("---------------------------------------");for(Book book : books) // 遍历数组{System.out.println(book.getId()+"\t\t"+book.getName()+"\t\t"+book.getPrice()+"\t\t"+book.getStorage());}System.out.println("---------------------------------------");}
}

实现思路

就是增删改查,定义图书为class类,但是图书Bokk class的有参构造函数为数组类型实例化。,这样可以将书籍的编号名称,单击库存依次存入,使用就通过数组books[]的索引来拿到每一项的值,通过遍历数组依次打印出所有数据, 而后判断用户输入的书籍编号还有书籍数量,传递到写好的promotion()方法中,在方法里完成我们对于图书的价格计算库存计算......总价计算通过拿到单击的get方法*=数量,库存也是通过拿到get和set方法进行判断,没有库存也会进行提示,购买成功。会输出订单的信息

0x1 创建Book图书

第一步我们创建所需要的图书Book类,写入4个私密成员变量保存我们所需的数据,并在 6-10 行入有参构造参数,后续我们的图书都是通过这个有参构造方法传入。  12-17 是属于库存的set方法 因为四个变量中编号 、书名、价格都是不需要改变的,只有 storage库存是在变化,所以需要拿到set方法 进行重新赋值  21-24 是4个变量的get方法

0X2 读取图书

回到mian方法中,我们将图书Book类进行实例化,但是我们实例化的类型是一个数组类型,此写法是浏览文章学习到了,通过这种写法可以将数据存储,我一开始想的是利用二维数组来存储书籍的信息,但是忽略了一个非常重要的问题,那就是数组的类型只能定义为一种,但是书籍的信息不同,书名只能是String,价格则是int 所以行不通就利用了这种写法,手动输出又太过多余,利用数组类型的对象来存储刚刚好,3个数组数据对应三本书

我们定义好读取图书的方法othbooks 这个方法存储了我们的数组输出,可以将书籍信息打印出来。传入的形参类型为数组Book[] 值则是对象名称books  ,通过实例化从0-2从有参构造器中传入书籍的各项信息。通过for依次打印出各项的get方法。最终输出的效果图1-4

0x3 书籍判断

传入好图书后来到最重要的判断环节,通过 if 配合 Scanner语句来判断编号 1 2 3,是何本书,判断到正确数字则接受,进入下一步购买数量,选择多少本 而后对于书籍购买另写了promotion() 方法, 里面有三个需要传入的参数分别是 书籍编号 购买数量 对象books,同时利用while循环购买一次还可以继续购买,只有按 6 键 才会 break 结束进程。 做了一点点微不足道的安全措施,只能输入白名单类的数字,只接受 1 2 3 6,输入别的非法字符直接终止 51-54。

0x4 订单计算

库存计算

promotion() 用于计算购买后的情况,形参中的3个参数上文也已经解释, 58 则是将编号 - 1,因为我们的数组是从0为索引开始,1则是2,那么我们我们的1编号其实就是2,所以要通过索引id-1 才能拿到正确的书籍,如果没有很明白可以去回顾一下数组

quantity 是我们的购买的书籍数量,拿到后我们需要去和现有的书籍库存进行判断在 59-60 就是判断库存的情况,通过books[id].getStorage()

通过数组索引拿到其中的库存getStorage 里面存放的此本书的库存数量,进行对比,如果购买的quantity 数量是大于现有库存的则输出getStorage() 显示目前有多少本 结束本次购买回到 while 语句中再次提示购买 如图 1-7

成功购买

购买成功实现非常简单,对现有库存做-=操作, 62  是随机编号,利用 Random 随机数 将编号值传递给变量 data存储使用。

64-65 输入订单信息,利用数组索引拿到各项数据,订单总价就是单价price* quantity,其余就是正常的拿到打印即可。

66 更新库存,减去购买数量利用setStotage 赋值

67 打印出现有库存

68 分割线,进行下次购买,因为是while 循环,只要不是退出或者是非法字符可以一直运行!

总结

以上就是程序全部代码,但仍有很多不足之处,面向对象还是很初级的状态,没有做到代码的复用性,利用更少的代码写出更完整的功能,实现时也想过很多种方式, 数据传入进构造方法直接判断编号和购买数量在class类里面完成,不需要额外的if语句,一切在类中完成,但是又考虑到类中如何判断的问题,,不通过if怎么判断,我想到的只能是写出三个构造函数,但这又违背了代码的复用性,三个相同的功能点我就想用一个整体来解决学习无止境......,,如有不正确不恰当之处 望老师同学不吝赐教!

java实现控制台购书系统相关推荐

  1. 基于JAVA的网上购书系统(附:源码 论文 项目运行视频)

    摘要 在当今的社会中, 随着社会经济的快速发展以及计算机网络技术和通讯技术的快速成长,网络应用领域也一天天扩大,网络中的新鲜事物层出不穷.电子商务的发展增加了许多商业交易的平台,借助于这种互联网平台, ...

  2. Java项目:控制台商城系统(java+打印控制台)

    源码获取:博客首页 "资源" 里下载! 功能简介: 客户信息管理.商品信息管理.购物信息管理.退出系统 显示系统主菜单: public class SystemMenu {//显示 ...

  3. 【Java案例】购书系统(超详细)

    ⭐️ 不爱生姜不吃醋 声明:

  4. Java基础案例3-1:基于控制台的购书系统

    [案例3-1]基于控制台的购书系统 [案例介绍] 伴随互联网的蓬勃发展,网络购书系统作为电子商务的一种形式,正以其高效.低成本的优势逐步成为新兴的经营模式,人们已经不再满足互联网的用途仅仅局限于信息的 ...

  5. 任务一:基于控制台的购书系统 java实验报告

    目录 一.实验目的及要求 二.实验环境 三.实验内容 四.实验步骤 五.调试过程及实验结果 六.总结 七.源程序清单 任务一:基于控制台的购书系统 任务目的 理解和掌握面向对象的设计程序 会用类图进行 ...

  6. java程序当当网购书系统怎么运行_Java实现基于控制台的购书系统基本操作

    Java开发基于控制台的购书系统 题目 开发基于控制台的购书系统.具体要求如下: (1)输出所有图书的信息:包括每本图书的图书编号.图书名称.图书单价和库存数量. (2)顾客购买图书:根据提示输入图书 ...

  7. java案例3:基于控制台的购书系统

    基于控制台的购书系统 顾客购买时,根据提示输入图书编号来选购需要的书及购买数的数量 购买完毕后,输出顾客的订单信息,包括订单号.订单明细.订单总额1.图书类(Book) 图书编号 id 图书名称 na ...

  8. java实验报告:实验一 基于控制台的购书系统

    注:博主为初学java,此实验报告代码仅供参考,如有错误,还望指正. 水平有限,仅供参考 实验目的及要求 1.理解和掌握面向对象的设计程序 2.会用类图进行面向对象设计 3.掌握封装的实现及好处 4. ...

  9. 购买流程图java_Java实现基于控制台的购书系统基本操作

    Java开发基于控制台的购书系统 题目 开发基于控制台的购书系统.具体要求如下: (1)输出所有图书的信息:包括每本图书的图书编号.图书名称.图书单价和库存数量. (2)顾客购买图书:根据提示输入图书 ...

最新文章

  1. mysql和mongodb对比互补
  2. Oracle查找重复数据
  3. 应用存储和持久化数据卷:核心知识
  4. Java 概述和编程基础
  5. .NET6下周发布真的香,可不少人却只会.NET Framework!
  6. SpringBoot 精通系列-创建SpringBoot的入门项目
  7. C ++ 类 | 类与数组(Array)_4
  8. SQLAlchemy engine.Connection
  9. 虾米回应“关闭”消息:不予置评;明年 Win 10 或将原生运行安卓应用;Perl 项目治理新规| 极客头条...
  10. SpringCloud微服务详细流程
  11. 技术篇-符号制作-标记符号制作
  12. 走进AngularJs(一)angular基本概念的认识与实战
  13. GD32F103ZKT6替换STM32F103调试手记
  14. 数学建模——微分方程
  15. MSDC 4.3 接口规范(13)
  16. ハーディー / 哈迪
  17. Nginx官方文档(四十七)【ngx_stream_js_module|ngx_stream_keyval_module|ngx_stream_limit_conn_module】
  18. 修改gh-ost源码实现两表在线高速复制
  19. IP地址分类/IP地址10开头和172开头和192开头的区别
  20. 活动报名 | 中科院信工所陈恺:人工智能安全攻防对抗

热门文章

  1. 15位身份证号转18位
  2. 2022 百度秋招笔试
  3. 【软考学习7】数据校验——海明校验码、循环校验码、奇偶校验码
  4. 浏览器扩展:比你想象得更危险
  5. 什么是次世代?次世代游戏建模的步骤详解
  6. 移动端1px像素问题及解决办法
  7. 「Adobe国际认证」不要让“字距调整”,限制你的风格
  8. 40条让人误会的短信
  9. POJ - 1990 (MooFest)
  10. (三)工作空间与功能包、Publisher、Subscriber