java实现控制台购书系统

这篇具有很好参考价值的文章主要介绍了java实现控制台购书系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

代码

实现思路

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 3
           int  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;  // 索引-1
          if (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方法

基于控制台的购书系统java,java,java,算法

0X2 读取图书

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

基于控制台的购书系统java,java,java,算法

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

基于控制台的购书系统java,java,java,算法

基于控制台的购书系统java,java,java,算法

0x3 书籍判断 

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

基于控制台的购书系统java,java,java,算法

0x4 订单计算

库存计算

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

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

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

基于控制台的购书系统java,java,java,算法

成功购买

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

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

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

67 打印出现有库存

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

基于控制台的购书系统java,java,java,算法

总结

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

到了这里,关于java实现控制台购书系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手把手教你写代码——基于控制台的通讯录管理系统(单表)

    本栏目专为入门java学习者设计的一些简单的入门项目 本项目为简单的基于控制台的通讯录管理系统,所需要的环境仅仅为jdk以及mysql(版本不限)!只有一个简单的eclipse软件以及我们的mysql可视化工具(视频使用navicat) 本项目数据库表仅有一个,单表操作,方便学习! 本项

    2024年02月15日
    浏览(31)
  • python控制台学生管理系统

    设计初始界面 设计学生信息录入 【数据校准】录入判断 学生姓名不能为空,并且不成超过4个字 【数据校准】录入判断年龄在0-120 需要进行判断 【数据校准】录入需要判断学号是否为空与学号是否在10位数 【数据校准】录入需要判断成绩是否在0-100之间、并判断录入成绩为

    2024年02月09日
    浏览(34)
  • 在控制台实现贪吃蛇

    本文通过C语言在Windows环境下的控制台实现贪吃蛇小游戏,实现的基本功能包括地图的绘制,蛇的移动(这个过程到底是吃到食物还是没有吃到食物),以及贪吃蛇是否撞墙,或撞到自身,通过贪吃蛇是否吃到食物来计算当前的得分,还将实现加速减速的功能以及暂停游戏的

    2024年04月27日
    浏览(36)
  • Java程序设计入门教程--控制台输入数据

    控制台输入数据常用类 Scanner类        在 很多情况下,我们需要 Java 程序能够对我们指定的值进行计算,这样的话就需要我们的 Java 程序能够读取我们所输入的值。我们可以使用 Java 自带的 Scanner 类来从控制台获取 输入 。        Scanner 类在包 java.util 里。我们一般在程

    2024年02月07日
    浏览(33)
  • Java学习之Eclipse 控制台中文输出乱码解决

    Eclipse IDE for java Developers 2023-06 版本 缺省情况下,Eclipse将输出中文或非英文字符作为问号(?)或某些奇怪的字符。,它无法显示其他非英语单词。 那么想要在控制台显示中文,我们应该怎么办呢?  先找到run ----再找到里面的 Run Configurations    在跳出的页面的右边选择c

    2024年02月08日
    浏览(44)
  • C++制作安装包【1】—— 控制台实现

    之前用NSIS的时候发现不方便自制UI,找了其他的安装包开发框架,开发手感还是不好,功能残缺不一。我就想 如何使用纯代码的方式制作安装包 呢?经历了众多艰难才终于摸出方法。网上现有的文章都是用NSIS,Windows Installer等等现成框架制作安装包的。所以我另开一个专栏

    2024年02月04日
    浏览(36)
  • C++控制台实现简化版吃鸡游戏

    直接上代码 这个游戏是一个简化版的吃鸡游戏。你需要通过键盘输入W、A、S、D来移动玩家位置,并击败敌人来获得积分。当你累计得分达到5分时,游戏结束,你将获得胜利。地图中的P表示玩家位置,E表示敌人位置,.表示空白位置。每次击败敌人后,将会生成一个新的敌人

    2024年02月16日
    浏览(41)
  • springboot+mysql+mybatis如何实现控制台打印sql

    在Spring Boot中使用MyBatis与MySQL,并希望在控制台打印SQL语句,你可以通过配置MyBatis的日志级别来实现。以下是具体步骤: 添加依赖: 确保你的项目中包含了MyBatis和MySQL的相关依赖。在 pom.xml 文件中添加如下依赖: 配置application.properties或application.yml: 在 application.properties 或

    2024年02月01日
    浏览(40)
  • .NET Core 实现日志打印输出在控制台应用程序中

    在本文中,我们将探讨如何在 .NET Core 应用程序中将日志消息输出到控制台,从而更好地了解应用程序的运行状况。 在 .NET Core 中,日志输出打印是使用 Microsoft.Extensions.Logging 命名空间中的类和方法实现的。首先,我们需要确保在项目中添加了以下必要的依赖包: Microsoft.Ex

    2024年02月11日
    浏览(47)
  • #Fortigate#LDAP 如何设置同步LDAP用户作为系统登录控制台的管理员账号

    1、首先创建一个LDAP用户服务器,在用户与认证--LDAP里面选择新建  先添加LDAP自定义名称、服务器IP、服务器端口(默认389)  然后填写common name标识符,常用标识符有三种:cn (常用名)、sAMAccountName (远程登录名)、uid (用户ID)。默认为cn。 a、当标识符为cn时,我们需要知道用户

    2024年02月07日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包