目录
一、整体思路
分析---编写类---编写接口---编写实现类---主函数调试
二、例子
分析:以购物程序为例,编写购物程序时有很多的商品需要管理,将所有商品看成对象,编写一个类进行统一管理。
(1)建立商品类:
该类只写出商品该有的属性,并且全部使用private修饰,方法也只含有无参构造和全参构造,由于是private修饰,建立出所有属性的get和set方法,再包含一个打印输出商品信息的方法。
public class Goods {
//封装属性
private String no; //编号
private String name; //名称
private double price; //价格
private String shop; //商家名称
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;
}
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;
}
//打印对象
@Override
public String toString() {
return "Goods{" +
"no='" + no + '\'' +
", name='" + name + '\'' +
", price=" + price +
", shop='" + shop + '\'' +
", type='" + type + '\'' +
'}';
}
}
(2)建立接口:
建立一个商品管理接口,将商品会用到的方法都写出来,在接口中只声明,不实现。
public interface GoodsManager {
public void add_goods(); //添加方法
public void del_goods(String no); //删除方法
public void update_goods(); //修改商品
public Goods findByNo(String no); //按编号查询商品
public Collection<Goods> findAll(); //查询所有商品
public List<Goods> findByName(String name); //按名称查商品
public List<Goods> findByPrice(double start_price,double end_price); //按价格区间查商品
}
(3)建立商品管理接口的实现类:
在这个类中将接口中的方法都实现,不用一次全部实现,边写边在主函数中调试。
public class GoodsManagerImpl implements GoodsManager{
private Map<String,Goods> goods_list = new HashMap<>();
private int size = 0; //记录商品数量
/**
* 添加商品
* @param
*/
@Override
public void add_goods() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入添加商品的名称:");
String name = scanner.next();
System.out.println("请输入添加商品的价格:");
double price = 00000;
try {
price = scanner.nextDouble();
}catch (Exception e){
}
System.out.println("请输入添加商家的名称:");
String shop = scanner.next();
System.out.println("请输入添加商品的分类:");
String type = scanner.next();
//随机一个编号,size为当前商品的索引值
String no = UUID.randomUUID().toString().concat(Integer.toString(size));
//初始化商品
Goods goods = new Goods(no,name,price,shop,type);
goods_list.put(no,goods);
size++;
}
/**
* 按照编号删除商品
* @param no
*/
@Override
public void del_goods(String no) {
goods_list.remove(no);
}
/**
* 修改商品信息
*/
@Override
public void update_goods() {
System.out.println("请输入商品编号");
Scanner scanner = new Scanner(System.in);
String no = scanner.next();
Goods goods = goods_list.get(no);
//输入需要修改的内容
System.out.println("商品名称:" + goods.getName());
//输入要修改的内容
System.out.println("请输入修改后的名称:");
String name = scanner.next();
//输入需要修改的内容
System.out.println("商品价格:" + goods.getPrice());
//输入要修改的内容
System.out.println("请输入修改后的价格:");
double price = goods.getPrice();
try {
price = scanner.nextDouble();
}catch (Exception e){
}
//输入需要修改的内容
System.out.println("商家名称:" + goods.getShop());
//输入要修改的内容
System.out.println("请输入修改后的名称:");
String shop = scanner.next();
//输入需要修改的内容
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);
}
/**
* 按照编号查询商品
* @param no
* @return
*/
@Override
public Goods findByNo(String no) {
return goods_list.get(no);
}
/**
* 显示所有商品
* @return
*/
@Override
public Collection<Goods> findAll() {
return goods_list.values();
}
/**
* 按照名字查找商品信息
* @param name
* @return
*/
@Override
public List<Goods> findByName(String name) {
List<Goods> result = new ArrayList<>();
Collection<Goods> coGoods = goods_list.values();
Iterator<Goods> it = coGoods.iterator();
while (it.hasNext()){
Goods goods = it.next();
if (goods.getName().indexOf(name) > -1){
result.add(goods);
}
}
return result;
}
/**
* 按照价格区间查找商品信息
* @param start_price
* @param end_price
* @return
*/
@Override
public List<Goods> findByPrice(double start_price, double end_price) {
List<Goods> result = new ArrayList<>();
Collection<Goods> coGoods = goods_list.values();
Iterator<Goods> it = coGoods.iterator();
while (it.hasNext()){
Goods goods = it.next();
if (start_price <= goods.getPrice() && goods.getPrice() <= end_price){
result.add(goods);
}
}
return result;
}
}
(4)调试:
在主函数中调试,实例化商品对象,更具需求一步一步调试自己已经编写的功能。
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());
System.out.println();
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());
System.out.println("输入要查询的商品编号:");
no = scanner.next();
System.out.println(goodsManager.findByNo(no));
System.out.println("输入要查询的商品名称:");
String name = scanner.next();
System.out.println(goodsManager.findByName(name));
System.out.println("输入要查询的商品价格区间:");
System.out.println("请输入最小值:");
double min_price = scanner.nextDouble();
System.out.println("请输入最大值:");
double max_price = scanner.nextDouble();
System.out.println(goodsManager.findByPrice(min_price,max_price));
}
三、结语
这只是一种思路,这样写项目,清晰明了,哪里错了很好找,养成良好的编码习惯。进阶的可以建立数据库进行调试,将商品添加到数据库,从数据库中查询数据。