伙伴云客服论坛»论坛 S区 S客户管理 查看内容

0 评论

0 收藏

分享

商城订单管理系统

订单管理系统

某购物商场,想做一个在线购物的程序,客户可以通过程序自助购物,要求有显示商品、选购商品、购物车、历史订单等功能。
学习目的

通过这个案例我们想到达的学习目的是 以下几点
  1. -1.熟练使用BufferedReader和BufferedWriter读写数据
  2. -2.熟练使用ArrayList集合停止增、删、改、查等操作
  3. -3.理解面向对象和实际场景的结合使用
  4. -4.理解购物类项目的业务流程
复制代码
1. 需求分析
  1. 所有的商品信息以固定的格式(商品编号,商品名称,商品价格,商品库存)保管在product.txt文件中
  2.         格式如下:
  3.     001,小米手机,1999,10
  4.     002,华为手机,3999,10
  5.     003,乐事薯片,5,100
  6.     004,小米锅巴,5,200
  7.     005,格力空调,5000,5
  8.         ...
  9. 1.显示商品功能:
  10.         读取product.txt文件,将每一行打印在控制台即可
  11. 2.选购商品功能:
  12.         键盘录入购置的商品编号和数量,将商品信息添加到购物车,并提示是否继续购置。
  13.         如下:
  14.     录入购置的商品编号:
  15.     001
  16.     录入购置的商品数量
  17.     5
  18.     已添加到购物车,是否继续购置(Y/N)?
  19.     选择Y: 继续购物
  20.     选择N: 完毕购物
  21. 3.购物车功能:
  22.         显示购物车中每个商品的名称,数量和金额,以及购物车总金额,并提示是否生成订单。
  23.        
  24.         查看购物车格式如下:
  25.         商品名称:小米手机, 价格:1999, 数量:3, 金额:5997
  26.         商品名称:乐视薯片, 价格:5, 数量:3, 金额:15
  27.         总金额:6012元
  28.         ---------------------------------------------
  29.         是否生成订单?(Y/N)
  30.                 选择Y:
  31.                         1)会有一个唯一的订单号,并且把订单的购物清单写到orderlist文件中
  32.                         2)商品库存减少相应的数量
  33.                         3)清空购物车
  34.                 选择N: 什么都不做
  35.        
  36. 4.历史订单功能:每一个订单信息,以如下格式保管到orderlist.txt文件中。
  37.     订单编号:92a9502f-cbd8-40f3-af1d-87a387a9fada
  38.     商品名称:小米手机, 价格:1999, 数量:3, 金额:5997
  39.     商品名称:乐视薯片, 价格:5, 数量:3, 金额:15
  40.     总金额:6012元
  41.     ---------------------------------------------
  42.     订单编号:00785cce-394c-4788-9313-af5b3cd4a863
  43.     商品名称:小米手机, 价格:1999, 数量:3, 金额:5997
  44.     商品名称:乐视薯片, 价格:5, 数量:3, 金额:15
  45.     总金额:6012元
  46.     ---------------------------------------------
复制代码
2. 准备数据

在Shopping模块目录下,新建一个product.txt文件。将以下商品信息复制到文件中。每一行从左往右分别表示商品编号、商品名称、商品价格、商品库存
  1. 001,小米手机,1999,10002,华为电视,3999,10003,乐事薯片,5,100004,小米锅巴,5,200005,格力空调,5000,5006,海尔冰箱,2500,10007,公牛插座,50,250008,长虹电视,3500,200009,南孚电池,5,1000010,大桥鸡精,9000,100
复制代码
3. 功能菜单
  1. publicstaticvoidmain(String[] args)throws IOException {while(true){
  2.         System.out.println("**************欢送来到黑马商城***************");
  3.         System.out.println("1.查看商品  2.选购商品  3.我的购物车  4.我的订单");
  4.         Scanner sc =newScanner(System.in);
  5.         String choose = sc.next();switch(choose){case"1"://查看所有商品信息showAllProduct();break;case"2"://选购商品buyProduct(shoppingcart);break;case"3"://查看购物车showShoppingCart(shoppingcart);break;case"4"://查看订单showOrderList();break;default:
  6.                 System.out.println("你选择有误,请重新输入");}}}
复制代码
4. Product类
  1. publicclassProduct{private String id;//编号private String name;//名称privateint price;//单价privateint stock;//库存//自己补全get和set方法,以及构造方法...}
复制代码
5. 查看商品
  1. 查看商品的思路:
  2.     1.编写方法readProductToList(),读取所有的商品信息到集合
  3.     2.遍历集合中的所有数据,并打印输出
复制代码
    读取product.txt文件到集合
  1. - 使用BufferedReader读取product.txt文件
  2. - 使用把每一行使用","停止切割,得到一个字符串数组
  3. - 字符串数组中的元素分别表示:商品编号、商品名称、商品价格、商品库存
  4.     注意:其中商品的价格和库存需要转换为整数
  5.     //如: 把"123"转换为123int price=Integer.parseInt("123");- 把商品信息封装为Product对象
  6. - 把对象存储到ArrayList集合中
复制代码
  1. //读取文件到集合publicstatic ArrayList<Product>readProductToList()throws IOException {//创建流对象,关联day15/product.txt文件
  2.     BufferedReader br =newBufferedReader(newFileReader("Shoppping/product.txt"));//创建集合,用于存储商品对象
  3.     ArrayList<Product> list =newArrayList<>();//line用来记录读取的每一行
  4.     String line;//读取readLine()方法返回null,则表示读取到文件末尾while((line = br.readLine())!= null){//对每一行使用","停止切割,得到一个数组
  5.         String[] array = line.split(",");//数组中的元素分别表示:商品编号、商品名称、商品价格、商品库存
  6.         String productId = array[0];//商品id
  7.         String productName = array[1];//商品名称
  8.         String productPrice = array[2];//商品价格
  9.         String productStock = array[3];//商品库存//每一个元素封装为Product对象
  10.         Product p =newProduct(productId, productName, Integer.parseInt(productPrice), Integer.parseInt(productStock));
  11.         list.add(p);}//关闭流
  12.     br.close();return list;}
复制代码
    查看商品时,遍历集合,打印集合中元素
  1. //显示所有商品privatestaticvoidshowAllProduct()throws IOException {//1.读取product.txt文件到集合
  2.     ArrayList<Product> list =readProductToList();//2.打印集合
  3.     System.out.println("id,名称,价格,库存");for(int i =0; i < list.size(); i++){
  4.         Product p = list.get(i);
  5.         System.out.println(p.getId()+","+ p.getName()+","+ p.getPrice()+","+ p.getStock());}}
复制代码
6. 选购商品
  1. 选购商品的思路:
  2.     1.键盘录入要选购的商品编号,假设不存在给出提示,并完毕选购;
  3.     2.键盘录入要选购的商品数量,假设库存缺乏给出提示,并完毕选购
  4.     3.假设商品编号正确、库存也足够,就将商品添加到购物车。
  5.     4.提示是否继续选购(Y/N),输入Y表示继续,N表示不继续。
复制代码
    根据id获取Product对象,没有获取到返回null
  1. //获取id对应的产品privatestatic Product getProductById(String productId)throws IOException {
  2.     ArrayList<Product> list =readProductToList();for(int i =0; i < list.size(); i++){
  3.         Product p = list.get(i);if(p.getId().equals(productId)){return list.get(i);}}return null;}
复制代码
    选购的商品条目
每次选购一个商品,会在购物车中添加一个购物条目
  1. publicclassBuyItem{private String id;private String name;privateint price;privateint number;privateint money;//get和set方法自动生成,以及构造方法}
复制代码
  1. //购物车publicstatic ArrayList<BuyItem> shoppingcart =newArrayList<>();privatestaticvoidbuyProduct()throws IOException {//1.读取所有的商品信息
  2.     ArrayList<Product> list =readProductToList();//2.键盘录入选购商品编号,判断商品编号是否存在
  3.     Scanner sc =newScanner(System.in);while(true){
  4.         System.out.println("键盘录入选购的商品编号:");
  5.         String id = sc.next();//获取id对应的商品
  6.         Product product =getProductById(list, id);if(product == null){
  7.             System.out.println("选购的商品不存在");return;//完毕选购}//3.键盘录入选购商品数量,判断库存是否充足
  8.         System.out.println("请录入选购的商品数量:");int number = sc.nextInt();//获取该商品的库存if(product.getStock()< number){
  9.             System.out.println("商品库存缺乏,剩余库存为:"+ product.getStock());return;}//4.创建选购商品条目int money = number * product.getPrice();
  10.         BuyItem item =newBuyItem(id, product.getName(), product.getPrice(), number, money);//5.将选购的商品条目添加到购物车
  11.         shoppingcart.add(item);
  12.         System.out.println("选购商品胜利,已将"+ product.getId()+"号商品添加到购物车");
  13.         System.out.println("是否继续选购(Y/N)");
  14.         String isContinue = sc.next();if(isContinue.equalsIgnoreCase("Y")){continue;//继续选购}else{
  15.             System.out.println("已经完毕选购,请到购物车结算!");break;//完毕选购}}}
复制代码
7. 查看购物车
  1. 查看购物车思路:
  2.     1.遍历购物车集合,假设没有要给出提示
  3.     2.打印购物车商品信息
  4.     3.计算购物车总金额
  5.     4.是否生成订单(Y/N),Y表示生成订单;N表示不生成订单
  6.             Y: 生成订单,并产生一个唯一的订单号,把购物车清空
  7.         N: 不做任何处置
复制代码
  1. privatestaticvoidshowShoppingCart()throws IOException {//判断购物车是否为空if(shoppingCart.isEmpty()){
  2.         System.out.println("购物车什么都没有,选购商品后再来看看吧");return;}//打印购物车清单int totalMoney =0;for(int i =0; i < shoppingCart.size(); i++){
  3.         BuyItem buyItem = shoppingCart.get(i);//打印清单信息//商品名称:小米手机, 价格:1999, 数量:3, 金额:5997
  4.         System.out.println("商品名称"+ buyItem.getName()+","+"价格:"+ buyItem.getPrice()+","+"数量:"+ buyItem.getNumber()+","+"金额:"+ buyItem.getMoney());//计算购物清单总金额
  5.         totalMoney += buyItem.getMoney();}
  6.     System.out.println("总金额:"+ totalMoney);
  7.     System.out.println("---------------------------------------------");
  8.     System.out.println("是否生成订单?(Y/N)");
  9.     Scanner sc =newScanner(System.in);
  10.     String confirm = sc.next();//是否生成订单if(confirm.equalsIgnoreCase("y")){//生成订单
  11.         Order order =createOrder(shoppingCart);//将订单写入到orderlist.txt文件中writeOrderToFile(order);//生成订单后,更新商品库存updateProductStock(order);//购物车清空
  12.         shoppingCart.clear();}}
复制代码
8. 生成订单

    订单类Order
  1. /*
  2. 订单类分析:
  3.     一个订单有一个唯一的订单编号
  4.     一个订单包含多选购的商品条目
  5.     一个订单有一个订单金额
  6. */publicclassOrder{private String orderId;//订单编号private ArrayList<BuyItem> list;//该订单选购的商品privateint money;//订单金额publicOrder(){}publicOrder(String orderId, ArrayList<BuyItem> list,int money){this.orderId = orderId;this.list = list;this.money=money;}//自动生成get和set方法,自己补全}
复制代码
    生成订单
  1. //生成订单privatestatic Order createOrder()throws IOException {//创建订单
  2.     Order order =newOrder();//设置订单ID
  3.     order.setOrderId(UUID.randomUUID().toString());//设置订单商品列表
  4.     order.setList(shoppingCart);//计算订单金额,购物车的所有商品的金额相加,就是订单金额int money=0;for(int i =0; i < shoppingCart.size(); i++){
  5.         money+=shoppingCart.get(i).getMoney();}//设置订单金额
  6.     order.setMoney(money);return order;}
复制代码
9. 订单写入到文件
  1. 订单编号:92a9502f-cbd8-40f3-af1d-87a387a9fada
  2. 商品名称:小米手机, 价格:1999, 数量:3, 金额:5997
  3. 商品名称:乐视薯片, 价格:5, 数量:3, 金额:15
  4. 总金额:6012元
  5. ---------------------------------------------
复制代码
  1. //写入订单信息到文件privatestaticvoidwriteOrderToFile(Order order)throws IOException {//创建输出流对象
  2.     BufferedWriter bw =newBufferedWriter(newFileWriter("Shoppping/orderlist.txt",true));
  3.     bw.write("订单号:"+ order.getOrderId());
  4.     bw.newLine();//获取订单商品条目
  5.     ArrayList<BuyItem> list = order.getList();for(int i =0; i < list.size(); i++){
  6.         BuyItem buyItem = list.get(i);
  7.         bw.write("商品名称:"+ buyItem.getName()+","+"价格:"+ buyItem.getPrice()+","+"数量:"+ buyItem.getNumber()+","+"金额:"+ buyItem.getMoney());
  8.         bw.newLine();}
  9.     bw.write("订单金额:"+ order.getMoney());
  10.     bw.newLine();
  11.     bw.write("---------------------------------------------");
  12.     bw.newLine();
  13.     bw.close();}
复制代码
10. 更新库存
  1. //更新商品库存privatestaticvoidupdateProductStock(Order order)throws IOException {//获取订单中购置的产品条目
  2.     ArrayList<BuyItem> orderItems = order.getList();//获取所有的产品
  3.     ArrayList<Product> allProducts =readProductToList();//订单中每一个商品的库存for(int i =0; i < orderItems.size(); i++){
  4.         BuyItem buyItem = orderItems.get(i);//根据id获取产品for(int j =0; j < allProducts.size(); j++){
  5.             Product product = allProducts.get(j);if(buyItem.getId().equals(product.getId())){
  6.                 product.setStock(product.getStock()- buyItem.getNumber());}}}//重新把产品信息写到product.txt文件中writeProductToFile(allProducts);}
复制代码
  1. //重新写入产品信息到文件privatestaticvoidwriteProductToFile(ArrayList<Product> allProducts)throws IOException {
  2.     BufferedWriter bw =newBufferedWriter(newFileWriter("Shoppping/product.txt"));for(int i =0; i < allProducts.size(); i++){
  3.         Product product = allProducts.get(i);
  4.         bw.write(product.getId()+","+ product.getName()+","+ product.getPrice()+","+ product.getStock());
  5.         bw.newLine();}
  6.     bw.close();}
复制代码
11.查看订单
  1. //查看订单privatestaticvoidshowOrderList()throws IOException {
  2.     BufferedReader br=newBufferedReader(newFileReader("Shopping/orderlist.txt"));
  3.     String line;while((line=br.readLine())!=null){
  4.         System.out.println(line);}
  5.     br.close();}
复制代码

回复

举报 使用道具

相关帖子
全部回复
暂无回帖,快来参与回复吧
本版积分规则 高级模式
B Color Image Link Quote Code Smilies

呼噜怪
注册会员
主题 17
回复 12
粉丝 0
|网站地图
快速回复 返回顶部 返回列表