ui

BaseClass.java

package com.vince.ui;

import com.vince.bean.User;
import com.vince.framework.BeanFactory;

import java.util.ResourceBundle;
import java.util.Scanner;

//定义抽象类可以用来被继承
public abstract class BaseClass {
    public static Scanner input = new Scanner(System.in);
    public static User currUser; //维护当前用户对象{即登录或注册后的当前用户对象,可以用来判断:如果为空表示没有用户注册或没有用户登录}

    public BeanFactory beanFactory = null;

    //读取国际化配置文件
    private static ResourceBundle r = ResourceBundle.getBundle("com.vince.res.r");

    //定义一个get方法,获取配置文件的key的value值
    public static String getString(String key){
        return r.getString(key);
    }

    //经常会用到输出语句,封装成println方法
    public static void println(String s){
        System.out.println(s);
    }

    //经常会用到输出语句,封装成print方法
    public static void print(String s){
        System.out.print(s);
    }

    public BaseClass(){
        beanFactory = BeanFactory.init();
    }

}

HomeClass.java

package com.vince.ui;
import com.vince.bean.Clothes;
import com.vince.bean.Order;
import com.vince.bean.OrderItem;
import com.vince.service.ClothesService;
import com.vince.service.OrderService;
import com.vince.service.impl.ClothesServiceImpl;
import com.vince.service.impl.OrderServiceImpl;
import com.vince.utils.BusinessException;
import com.vince.utils.ConsoleTable;
import com.vince.utils.DateUtils;
import javafx.util.Builder;

import java.sql.BatchUpdateException;
import java.util.Date;
import java.util.List;

public class HomeClass extends BaseClass {

    /**
      这样写生成OrderServiceImpl的对象,实际和orderService做成了强耦合,不利于orderService的维护;如果orderService有变化则HomeClass也不利于维护
      因此需要对如下进行改进
     */
    //public OrderService orderService = new OrderServiceImpl();
    //public ClothesService clothesService = new ClothesServiceImpl();

    private OrderService orderService;
    private ClothesService clothesService;
    public HomeClass(){
        orderService = (OrderService)beanFactory.getBean("orderService");
        clothesService = (ClothesService)beanFactory.getBean("clothesService");
    }

    public void show() {
        showProducts();
        println("welcome" + currUser.getUsername());
        menu();
    }
    public void menu(){
        boolean flag=true;
        while(flag){
            println(getString("home.function"));
            println(getString("info.select"));
            String select = input.nextLine();
            switch (select){
                case "1":  //1、查询全部订单
                    findOrderList();
                    flag=false;  //退出循环
                    break;
                case "2":  //2、查找订单
                    findOrderById();
                    flag=false;  //退出循环
                    break;
                case "3":  //3、购买
                    try {
                        buyProducts();
                        flag = false;   //退出循环
                    }catch (BusinessException e){
                        println(e.getMessage());
                    }
                    break;
                case "4":  //4、显示商品
                    show();
                    break;
                case "0":  //0、退出
                    flag = false; //退出循环
                    println(getString("info.exit"));
                    System.exit(0);
                    break;
                default:
                    println(getString("input.error"));
                    break;
            }
        }
    }


    //购买商品方法:
    private void buyProducts() throws BusinessException {
        //生成订单;用户可以多次输入生成订单,因此需要循环
        boolean flag = true;
        boolean flag2 = true;
        int count = 1;
        Order order = new Order();//维护单笔订单的总订单列表
        float sum = 0.0f;         //order里维护的所有的订单的列表的总金额


        while(flag){
            println(getString("products.input.id"));
            String id = input.nextLine();                       //输入的是Clothes对象的ID
            println(getString("products.input.shoppingNum"));
            String shoppingNum = input.nextLine();              //输入的是需要购买的订单数量
            OrderItem orderItem = new OrderItem();
            Clothes clothes = clothesService.findById(id);

            int num = Integer.parseInt(shoppingNum);            //购买的数量:前提是在数量允许范围内
            if(num>clothes.getNum()){
                throw new BusinessException(getString("products.num.error"));
            }
            orderItem.setShoppingNum(num);

            //一条订单明细,{当生成一笔订单后,衣服数量就要相应减去}
            clothes.setNum(clothes.getNum()-num);     //减去购买的数量剩余的库存

            orderItem.setClothes(clothes);            //要把Clothes对象添加进订单,这里只有个该对象的ID,需要通过方法查询ID对应的对象
            orderItem.setShoppingNum(num);            //设置订单数量
            orderItem.setSum(clothes.getPrice()*num); //设置购买的总金额,指:每笔订单的总金额
            orderItem.setItemId(count++);             //设置订单的ID,ID是自增长的,可以自定义
            sum += orderItem.getSum();
            order.getOrderItemList().add(orderItem);

            //购买一笔后提示否是继续购买
            while(flag2) {
                println(getString("products.buy.continue"));
                String var = input.nextLine();
                switch (var) {
                    case "1":
                        flag = true;
                        flag2 = true;
                        break;
                    case "2":
                        flag = false;
                        flag2 = false;
                        break;
                    default:
                        println(getString("input.error"));
                        flag2 = true;
                        break;
                }
            }

        }
        order.setCreateDate(DateUtils.toDate(new Date())); //new Date()即获取系统当前时间
        order.setUserId(currUser.getId()); //获取用户的ID,此前已经有缓存下当前用户对象,可从该缓存的用户对象里获取用户ID
        order.setSum(sum);
        order.setOrderId(orderService.list().size()+1);

        //开始购买产品了;这里的参数order对象就是用户选择的商品生成的对象
        orderService.buyProduct(order);
        //更新库存列表
        clothesService.update();
        show();


    }

    private void findOrderById() {
        println(getString("product.order.input.oid"));
        String oid = input.nextLine();
        Order order = orderService.findById(Integer.parseInt(oid));
        if(order!=null){
            showOrder(order);
        }else{
            println(getString("product.order.error"));
        }
        menu();
    }

    //查找已下单的订单列表
    private void findOrderList() {
        List<Order> list = orderService.list();
        for(Order o:list){
            showOrder(o);
        }
        menu();
    }




    //显示已下单的订单详情列表
    public void showOrder(Order o){
        print(getString("product.order.oid") + o.getOrderId());
        print("\t"+getString("product.order.createDate") + o.getCreateDate());
        println("\t"+getString("product.order.sum") + o.getSum());
        ConsoleTable t = new ConsoleTable(9, true);
        t.appendRow();
        t.appendColum("itemId")
                .appendColum("brand")
                .appendColum("style")
                .appendColum("color")
                .appendColum("size")
                .appendColum("price")
                .appendColum("desciription")
                .appendColum("shoppingNum")
                .appendColum("sum");

        for(OrderItem item:o.getOrderItemList()){
            t.appendRow();
            t.appendColum((item.getItemId()))
                    .appendColum(item.getClothes().getBrand())
                    .appendColum(item.getClothes().getStyle())
                    .appendColum(item.getClothes().getColor())
                    .appendColum(item.getClothes().getSize())
                    .appendColum(item.getClothes().getPrice())
                    .appendColum(item.getClothes().getDescription())
                    .appendColum(item.getShoppingNum())
                    .appendColum(item.getSum());
        }
        println(t.toString());
    }

    //显示所有衣服商品,然后让用户去选择
    public void showProducts(){
        List<Clothes> list = clothesService.list();
        ConsoleTable t = new ConsoleTable(8, true);
        t.appendRow();
        t.appendColum("id");
        t.appendColum("brand");
        t.appendColum("style");
        t.appendColum("color");
        t.appendColum("size");
        t.appendColum("num");
        t.appendColum("price");
        t.appendColum("description");
        for(Clothes c:list){
            t.appendRow();
            t.appendColum(c.getId());
            t.appendColum(c.getBrand());
            t.appendColum(c.getStyle());
            t.appendColum(c.getColor());
            t.appendColum(c.getSize());
            t.appendColum(c.getNum());
            t.appendColum(c.getPrice());
            t.appendColum(c.getDescription());
        }
        println(t.toString());

    }
}

LoginClass.java

package com.vince.ui;

import com.vince.bean.User;
import com.vince.service.UserService;
import com.vince.service.impl.UserServiceImpl;
import com.vince.utils.BusinessException;

public class LoginClass extends BaseClass {

    private UserService userService;
    public LoginClass(){
        userService =  (UserService)beanFactory.getBean("userService");
    }

    //用户登录界面
    public void login() throws BusinessException {
        println(getString("input.username"));
        String username = input.nextLine();
        println(getString("input.password"));
        String password = input.nextLine();

        //UserService userService = new UserServiceImpl();
        // 这样就具体依赖上面某一个类了

        userService.login(username, password);

        //如果登录成功就new一个对象出来给当前对象
        User user = new User(username,password);
        if(user!=null){
            currUser = user;
        }else{
            throw new BusinessException("login.error");
        }


    }
}

RegisterClass.java

package com.vince.ui;

import com.vince.bean.User;
import com.vince.service.UserService;
import com.vince.service.impl.UserServiceImpl;
import com.vince.utils.BusinessException;

public class RegisterClass extends BaseClass {

    private UserService userService;
    public RegisterClass(){
        userService = (UserService)beanFactory.getBean("userService");
    }

    public void register() throws BusinessException{
        println(getString("input.username"));
        String username = input.nextLine();
        println(getString("input.password"));
        String passwoed = input.nextLine();

        //需要将输入的用户信息封装正用户对象
        User user = new User(username,passwoed);

        //然后将该用户对象传给业务,注册用户
        //UserService userService = new UserServiceImpl();


        userService.register(user);



    }
}

WelcomeClass.java

package com.vince.ui;

import com.vince.utils.BusinessException;
import com.vince.utils.UserIO;

public class WelcomeClass extends BaseClass {
    public void start(){
        println(getString("info.welcome"));

        //用户注册,初始化只需注册一次
        //new RegisterClass().register();

        UserIO userIO = new UserIO();
        userIO.readUsers(); //先初始化读取对象文件

        //提示用户输入1 或 2 ,用户有可能输入其它不合法值,因此需要循环判断,直到用户输入规定值
        boolean flag = true;
        while(flag){
            println(getString("info.login.reg"));
            println(getString("info.select"));
            String s = input.nextLine();
            switch (s){
                case "1":
                    try {
                        new LoginClass().login();
                        flag = false;
                        println(getString("login.success"));
                    }catch (BusinessException e){
                        println(getString(e.getMessage()));
                        e.printStackTrace();
                    }
                    break;
                case "2":
                    try {
                        new RegisterClass().register();
                        println(getString("reg.success"));
                        flag=false; //注册成功就退出循环
                    }catch (BusinessException e){
                        println(getString("reg.error"));
                    }
                    break;
                default:
                    println(getString("input.error"));
                    break;
            }

        }
        HomeClass homeClass = new HomeClass();
        homeClass.show();

    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。