超市管理系统(控制台操作)

题目要求完成上面图中的操作

首先,我们创建一个商品类class Goods来保存一个商品的序号、名称、原价、现价、折扣和数量这些属性;然后创建一个含有这些属性的构造函数便于为商品属性赋值;分别为每个属性添加set、get方法来获取和赋值商品的每个属性;

public class Goods {
    private static int count = 0;//静态变量,会保留每次运行时改变的结果
    private  int id;//商品的序号
    private String name;//商品的名称
    private double oldPrice;//商品的原价
    private double newPrice;//商品的现价
    private double discount;//商品的折扣
    private int num;//商品的数量
    //用private修辞,在别的类无法直接调用这些属性,只能使用set、get方法来进行属性的赋值和获取值。用于封装思想
    
    public Goods(int id, String name, double oldPrice, double newPrice, int num) {
        super();
        this.id = id;//根据需要创建不同数量属性的构造函数,便于在调用时直接赋值
        this.name = name;//如Goods  goods = new Goods(2, "苹果",  20.1, 12.3, 100);我们在创建一个Goods对象时,直接就其相对应的属性进行赋值,一个序号为2,名称为苹果,原价为20.1,现价为12.3,数量为100的商品就建立了,至于其折扣discount,我们可以根据需要调用Goods类里的setCount()方法进行单独赋值。
        this.oldPrice = oldPrice;
        this.newPrice = newPrice;
        this.num = num;
    }
    public int getId() {//下面就是Goods类的属性的set、get方法,我们可以使用这些方法单独对某个属性进行赋值或者获取值的操作
        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 getOldPrice() {
        return oldPrice;
    }
    public void setOldPrice(double oldPrice) {
        this.oldPrice = oldPrice;
    }
    public double getNewPrice() {
        return newPrice;
    }
    public void setNewPrice(double newPrice) {
        this.newPrice = newPrice;
    }
    public double getDiscount() {
        return discount;
    }
    public void setDiscount(double discount) {
        this.discount = discount;
    }
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
    
    public static int getCount() {
        return count;
    }
    public static void setCount(int count) {
        Goods.count = count;
    }
    @Override
    public String toString() {//这个方法是toString方法的重写,如果不重写的话,我们使用System.out.println(goods);(这里goods是Goods  goods = new Goods(2, "苹果",  20.1, 12.3, 100)创立的对象)时,会输出一个goods对象在计算机里的内存。我们如果想输出goods的属性,可以根据需求重写toString()方法,如下面输出结果就是id + "\t"+name+ "\t"+oldPrice+ "\t"+newPrice+ "\t"+discount+ "\t"+num,(id等是goods属性的值,\t是多个空格。)
        return id + "\t"+name+ "\t"+oldPrice+ "\t"+newPrice+ "\t"+discount+ "\t"+num;
    }    
}

接下来我们创建一个超市类supermarket类来实现对商品的操作

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Supermarket {
    Scanner sc = new Scanner(System.in);//这里我们创立一个Scanner对象,方便下面获取操作台输入值
    List<Goods> list = new ArrayList<Goods>();//创建一个List对象,集合,来储存我们加入的Goods对象。这里也可以使用数组,Map等来做
    private Goods goods;//建立一个Goods对象,方便下面调用Goods类里的count属性。
    public void menu(){//菜单主栏,用来在mian方法中运行Supermarket里的商品操作
        System.out.println("1、查看商品列表\n2、出库\n3、入库\n4、修改商品信息\n5退出");
        switch (sc.nextInt()) {//获取操作台的输入值,并进行相关的操作
        case 1: show(); menu(); break;//在show()方法运行结束后继续menu(),直到输入5是结束整个操作
        case 2: out(); menu(); break;
        case 3: add(); menu(); break;
        case 4: modify(); menu(); break;
        case 5: System.out.println("已退出~"); break;
        default:break;
        }
    }
    private void out() {//这是超市里的出库方法,将仓库中已有的商品提出部分数量发货。
        System.out.println("1、按商品号\n2、按商品名\n3、返回上一层");
        switch (sc.nextInt()) {
        case 1: searchId(); out(); break;
        case 2: searchName(); out(); break;
        case 3: System.out.println("返回上一层"); break;
        default:break;
        }
        
    }
    private void searchId() {//按照商品的序列号进行查找商品,然后进行提取商品部分数量操作
        System.out.println("请输入商品号:");//因为我们在list中加入Goods对象时,Goods的序列号就是其在list集合中的位置,所以我们在这里可以直接输出list中相对应下标出的Goods来获取我们输入Id对应的商品,
        int id = sc.nextInt();
        if(id < 1 || id > goods.getCount()) {//这里我们要对Id进行判断,判断list是否存在相对应的元素,要不然下面会抛出指针溢出异常
            System.out.println("不存在该商品号的商品,请重新输入:");
            searchId();
        }else{
            goodOut(list.get(id - 1));//因为编程语言中,数组、集合等元素的下标都是从0开始计算,所以这里要进行-1
        }
    }
    private void searchName() {//按照商品的名称进行查找商品,然后进行提取商品部分数量操作,
        Goods good = searchByName();//这里调用了下面的searchByName();来判断相对应名称的商品是否存在,如果存在就返回一个Goods对象来代表这个商品,否则返回null;
        System.out.println(good.getName());
        System.out.println("           dadada");
        if(good == null) {
            System.out.println("该商品不存在!");
            searchName();
        }else{
            goodOut(good);
        }
    }
    private void goodOut(Goods good) {//这个方法专门进行商品的出库操作,用户输入出库的数量,和库存进行判断,然后改变Goods对象里的num属性。
        System.out.println(good.getName()+"的剩余数量为:"+good.getNum());//用来检查代码的无用代码输出出库前的商品库存数量
        System.out.println("请输入"+good.getName()+"的出库数量:");
        int num = sc.nextInt();
        if(num > good.getNum()){//将商品将要出库的数量和库存数量进行比较,如果超过库存这重新输入出库数量
            System.out.println("库存不足!!!");
            goodOut(good);
        }else{
            good.setNum(good.getNum() - num);//对面Goods里的num属性改变
            System.out.println("////////////"+good.getName()+"的剩余数量为:"+good.getNum());   //检查改变结果
        }
    }
    private void modify() {//修改商品信息
        Goods good = searchByName();//首先找到相对应名称的Goods商品对象
        if(good == null) {//判断商品是否存在,如果不,这重新输入商品名称
            System.out.println("该商品不存在!");
            modify();
        }else{//如果存在,进行商品现价修改操作
            System.out.println("请输入现价:");
            good.setNewPrice(sc.nextDouble());
            System.out.println("现价为:"+good.getNewPrice());            
        }
    }
    private void add() {//商品的入库操作。
        System.out.println("1、添加商品数量\n2、新进商品\n3、返回上一层");
        switch (sc.nextInt()) {
        case 1: addNum(); add(); break;
        case 2: addGoods(); add(); break;
        case 3: System.out.println("返回上一层"); break;
        default:break;
        }
    }
    private void addGoods() {//添加一个新的商品,需要提供商品的序列号、名称、原价等属性值
        goods.setCount(goods.getCount() + 1);//自动生成Goods的Id属性
        System.out.print("请输入商品名:");
        String name = sc.next();
        System.out.print("请输入原价:");
        double oldPrice = sc.nextDouble();
        System.out.print("请输入现价:");
        double newPrice = sc.nextDouble();
        System.out.print("请输入数量:");
        int num = sc.nextInt();
        list.add(new Goods(goods.getCount(), name, newPrice, newPrice, num));
    }
    private void addNum() {//对已经存在的商品进行数量添加
        Goods good = searchByName();//判断商品是否存在
        if(good == null) {
            System.out.println("该商品不存在!");
            addNum();
        }else{//商品存在,进行Goods的num属性的改变
            System.out.print("请输入数量:");
            good.setNum(good.getNum() + sc.nextInt());
            System.out.println("添加成功");            
        }
    }
    private Goods searchByName(){//判断相对应名称的商品是否存在,如果存在就返回一个Goods对象来代表这个商品,否则返回null;
        System.out.print("请输入商品名:");
        String name = sc.next();
        System.out.println(name);
        for (Goods goods : list) {//foreach(),一种数组、集合等通用的遍历方法,每次都建立一个Goods对象去
            if(goods.getName().equals(name)) {
                return goods;
            }
        }
        return null;
    }
    private void show(){//浏览list集合里面的所有Goods对象
        System.out.println("序号\t商品名\t原价\t现价\t折扣\t数量");
        for (Goods goods : list) {
            System.out.println(goods);
        }
        System.out.println(goods.getCount() + 1 +"  返回上一层");
    }
}

最后,建立一个Test类来运行

package com.week2.day6_HomeWork;

public class HomeWork01 {

    public static void main(String[] args) {
        System.out.println("******超市管理系统******");
        Supermarket s = new Supermarket();//实例化一个supermarket对象来访问Supermarket类里的menu()方法
        s.menu();
    }

扫描二维码关注公众号,回复: 2559806 查看本文章

}

结果展示:

猜你喜欢

转载自blog.csdn.net/songxinyuandouxinyu/article/details/81260245