超市管理系统(控制台操作)
题目要求完成上面图中的操作
首先,我们创建一个商品类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();
}}
结果展示: