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方法

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怎么判断,我想到的只能是写出三个构造函数,但这又违背了代码的复用性,三个相同的功能点我就想用一个整体来解决学习无止境......,,如有不正确不恰当之处 望老师同学不吝赐教!

  • 9
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值