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