String ArrayList 集合
商城系统:(登陆:商家,买家)
前台:用户操作界面(商品模块--à订单模块--à购物车模块-à支付模块)
后台: 商品管理(上传商品,删除商品-à上架,秒杀,打折à售卖价格,提供丰富的查询) 订单管理 支付管理)
ArrayList或者HashMap做商品管理后台
后台功能: 增删改 查(内功)
考虑思路:
采用开发方式: 面向接口开发方式
定义接口---à抽象类--à类--à主程序
商品管理: 商品增删改查
接口: 商品管理接口(管理商品类-à只是有getter或者是setter的方法类,这个特殊类 java bean )
方法:
add_goods 增加商品 商品的各种名称(商品编号,商品价格,商品名称,商品分类,商家名称)
用户输入: 商品名称 有一个商品名称
商品名称--à手机
名称(有意义的说明)---à值(说明的情况)
凡是有名称和值对应关系,这种考虑key-value(键---值)
达到这种对应关系,类型--àHashMap类型。
或者类(属性,方法)-à类属性--à值 ,把属性封装, 封装后私有化,某些属性可以getter,setter
一定商品类(不需要接口)方法就是getter setter,不需要其他方法去做商品类,这个类描述商品。
需要商家输入上架商品的内容,这里获取内容,必然有参数,参数就是商品类。
del_goods 删除商品(提供便利的删除,批量删除)
传入商品的编号(id)单个商品的删除
update_goods 修改商品
虽然用户输入的商品编号,用户一次性修改所有的项,传入的内容即有编号,也有各种修改内容,(商品类)
根据商品编号,修改商品相关名称,修改价格
查(有不同的条件)
按照商品名称 search_name 用户选择一个名称,需要参数 多个商品,不需要去重.
按照价格 search_price 用户选择区间,需要两个参数
查询所有 search_all 不需要传参
按编号查 search_no 一个商品
import java.util.Scanner;
public class MyMain1 {
public static void main(String[] args) {
GoodsManagerImpl goodsManager = new GoodsManagerImpl();
//一次添加
goodsManager.add_goods();
System.out.println(goodsManager.findAll());
//按名字查
Scanner scanner = new Scanner(System.in);
System.out.println("输入查询的商品名称");
String name=scanner.next();
System.out.println(goodsManager.findByName(name));
}
}
import java.util.Scanner;
public class MyMain {
public static void main(String[] args) {
GoodsManagerImpl goodsManager = new GoodsManagerImpl();
//两次添加
goodsManager.add_goods();
System.out.println(goodsManager.findAll());
goodsManager.add_goods();
System.out.println(goodsManager.findAll());
//删除
Scanner scanner=new Scanner(System.in);
System.out.println("输入需要删除的商品编号");
String no=scanner.next();
goodsManager.del_goods(no);
System.out.println(goodsManager.findAll());
//一次更新
goodsManager.update_goods();
System.out.println(goodsManager.findAll());
}
}
import java.util.*;
public class GoodsManagerImpl implements GoodsManager{
//设置一个总管家,HashMap,满足封装,需要私有,Map类型需要键(key) 就是no,是String,value是对象,是Goods
private Map<String,Goods> goods_list=new HashMap<>();
//根据字符串源码中的处理方法,一个char[]定义一个size,到底有多个数。
private int size=0;
//最开始完成,添加一个商品,注意里面goods是执行过程中用户输入的,这里的goods就不需要传参
@Override
public void add_goods() {
//需要输入商品的名称,商品的价格,店铺的名称,商品的分类
Scanner scanner=new Scanner(System.in);
//接收商品名称
System.out.println("请输入添加商品的名称");
String name=scanner.next();
//接收商品的价格
System.out.println("请输入添加商品的价格");
//初始化没有定义的价格
double price=9999;
try {
price = scanner.nextDouble();
}catch(Exception e){
}
//接收商品的商家
System.out.println("商家名称");
String shop=scanner.next();
//接收商品的分类
System.out.println("商品的分类");
String type=scanner.next();
//产生一个no,no让系统随机产生,产生后加上一个索引size,理解当前商品的索引值
//UUID,一串随机,随机类型是UUID类型,如果用+号,在这里有一个StringBuilder对象,只有一个size,这里使用concat,
String no=UUID.randomUUID().toString().concat(size+"");
//初始化,商品参数结束,直接实例化
Goods goods=new Goods(no,name,price,shop,type);
//放在HashMap中就已经去重
goods_list.put(no,goods);
size++;
}
@Override
public void del_goods(String no) {
goods_list.remove(no);
}
@Override
public void update_goods() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入修改商品的商品编号:");
//需要用户输入编号
String no=scanner.next();
//必须按商品的编号,告诉商品原来名称,需要改成,先把商品取出
Goods goods=goods_list.get(no);
//要求输入需要修改的商品名称内容
System.out.println("商品名称的原来内容:");
System.out.println(goods.getName());
//输出需要修改的商品名称内容
System.out.println("请输入修改后的名称");
String name=scanner.next();
// 要求输入需要修改的商品价格内容
System.out.println("商品名称的原来价格:");
System.out.println(goods.getPrice());
//输出需要修改的商品价格
System.out.println("请输入修改后的价格");
double price=goods.getPrice();
try{
price=scanner.nextDouble();
}catch(Exception e){
}
// 要求输入需要修改的商品店铺名称内容
System.out.println("商品名称的店铺名称:");
System.out.println(goods.getShop());
//输出需要修改的商品店铺名称
System.out.println("请输入修改后的店铺名称");
String shop=scanner.next();
// 要求输入需要修改的商品类别内容
System.out.println("商品名称的商品类别:");
System.out.println(goods.getType());
//输出需要修改的商品类别
System.out.println("请输入修改后的商品类别");
String type=scanner.next();
//修改商品的属性值,可以利用HashMap中key值覆盖的道理,产生一个新的商品
goods=new Goods(goods.getNo(),name,price,shop,type);
goods_list.put(goods.getNo(),goods);
}
@Override
public Goods findByNo(String no) {
return goods_list.get(no);
}
@Override
public Collection<Goods> findAll() {
//显示所有,就是遍历HashMap,遍历HashMap中的值就可以,不需要遍历key,因为key的目的是去重
//直接使用values显示所有的值
return goods_list.values();
}
@Override
public List<Goods> findByName(String name) {
//构造结果
List<Goods> myresult=new ArrayList<>();
Collection<Goods> mygoods=goods_list.values();
//这里迭代器写
Iterator<Goods> myiter=mygoods.iterator();
while(myiter.hasNext()){
Goods goods=myiter.next();
if(goods.getName().indexOf(name)>-1){
myresult.add(goods);
}
}
return myresult;
}
@Override
public List<Goods> findByPrice(double start, double end) {
//构造结果
List<Goods> myresult=new ArrayList<>();
Collection<Goods> mygoods=goods_list.values();
//这里迭代器写
Iterator<Goods> myiter=mygoods.iterator();
while(myiter.hasNext()){
Goods goods=myiter.next();
if(goods.getPrice()>=start && goods.getPrice()<=end){
myresult.add(goods);
}
}
return myresult;
}
}
import java.util.Collection;
import java.util.List;
/*
这是一个接口,专门管理商品的java bean
*/
public interface GoodsManager {
//添加方法,一般初始化,返回值为空,这里参数在逻辑实现直接在方法中输入商品的相关参数
public void add_goods();
//删除方法,传入索引,这里传入编号,因为这里的删除有ArrayList还有HashMap,HashMap高效率地做了商品编号去重
public void del_goods(String no);
//更新方法,需要更新商品的所有内容,按商品的编号来更新
public void update_goods();
//查询,必须返回用户结果,一定要有返回,返回内容多个
//按编号查,一个编号对应一个商品,返回值只有一个商品
public Goods findByNo(String no);
//查询所有,出来是一个动态的集合,不能是数组,不需要去重,使用ArrayList,返回是一个ArrayList,里面是Goods
public Collection<Goods> findAll();
//按商品名称查,返回一堆商品
public List<Goods> findByName(String name);
//按商品价格查,返回一堆商品
public List<Goods> findByPrice(double start,double end);
}
/*
java bean
这个类只是描述商品,哪些属性可以访问,哪些属性不开放访问。
描述商品的一个java bean
*/
public class Goods {
//封装,所有的属性私有化
//no商品编号
private String no;
//name商品名称
private String name;
//price商品价格
private double price;
//shop商家名称
private String shop;
//商品分类 type
private String type;
//封装构造函数,全参,无参
public Goods() {
}
public Goods(String no, String name, double price, String shop, String type) {
this.no = no;
this.name = name;
this.price = price;
this.shop = shop;
this.type = type;
}
//这些商品都需要getter,和setter方法
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getShop() {
return shop;
}
public void setShop(String shop) {
this.shop = shop;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
//打印对象显示的地址,显示的本类中所有的属性的值,重写toString
@Override
public String toString() {
return "Goods{" +
"no='" + no + '\'' +
", name='" + name + '\'' +
", price=" + price +
", shop='" + shop + '\'' +
", type='" + type + '\'' +
'}';
}
}