Java MVC之 Controller层

来自CloudWiki
Cloud17讨论 | 贡献2018年5月17日 (四) 12:53的版本 改进版代码
跳转至: 导航搜索
  • C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

控制层的作用可以概括如下:如果涉及用户交互的操作它就调用视图层去做,如果涉及业务逻辑和数据库的操作它就调用业务逻辑层去做,它本身什么也不做

Java8-1.png

管理端

初始版代码

MainClass

package main;


import java.text.MessageFormat;
import java.util.ArrayList;

/*本类对应实训: MVC之控制层*/
public class MainClass {
	
	public static void main(String[] args) {
				
		    //管理员登陆 	
		    //如果输入正确就往下进行,否则就提示用户再次输入
		    UserShow us= new UserShow();
	        while(true){
	        	        		
	        	ArrayList<String> uinfo = us.start();
	        	String name=uinfo.get(0);
	        	String pwd=uinfo.get(1);
	        	//在这里用一个if语句来模拟用户名和密码的验证
	        	if(name.equals("zhangyi")&& pwd.equals("123456")){
	        		System.out.println(name+"登陆成功!");
	        		break;
	        	}      		
	        	
	        }	       
		   
		    /
								
			while(true) {
				//显示可供选择的菜单
				us.showMenu();
					
				//获取用户的选择(应用不输入退出应用的编号则始终显示菜单)
		          
				int choise = us.getChoise();
					
				switch(choise) {
					
					case 1:	//商品上架
						    System.out.println("商品成功上架!\r\n");
						    //此处添加业务逻辑层的代码
						    break;
					case 2:	//商品下架
						    System.out.println("商品成功下架!\r\n");
						    //此处添加业务逻辑层的代码
							break;
					case 3:	//查询图书
						   System.out.println("商品成功查询!\r\n");
						    //此处添加业务逻辑层的代码
							break;
					case 4:	//根据商品编号查询图书
						    System.out.println("商品成功查询!\r\n");
						    //此处添加业务逻辑层的代码
						    break;
					case 5://修改图书数量
						    System.out.println("商品成功修改!\r\n");
						    //此处添加业务逻辑层的代码
							break;					
					case 6:	//退出当前应用程序
							System.out.println(MessageFormat.format("您选择了{0}", "退出当前应用程序"));
							System.exit(0);
							break;
					default:
							continue;
					}
				}
				
		
	}
	

}

改进版代码

控制层:MainClass类

package main;


import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Set;
import entity.*;

/*本类对应实训: MVC之控制层*/
public class MainClass {
	
	public static void main(String[] args) {
				
		    //管理员登陆 	
		    //如果输入正确就往下进行,否则就提示用户再次输入
		    UserShow us= new UserShow();
	        while(true){
	        	
	        	ArrayList<String> uinfo = us.start();//展示用户登陆页面
	        	String name=uinfo.get(0);
	        	String pwd=uinfo.get(1);
	        	//在这里用一个if语句来模拟用户名和密码的验证
	        	if(name.equals("zhangyi")&& pwd.equals("123456")){
	        		System.out.println(name+"登陆成功!");
	        		break;
	        	}      		
	        	
	        }	       
		   
		    //管理员要进行的各种操作      
			GoodsShow gs = new GoodsShow();
								
			while(true) {
				//显示可供选择的菜单
				us.showMenu();
					
				//获取用户的选择(应用不输入退出应用的编号则始终显示菜单)		          
				int choise = us.getChoise();
				String id = null;	
				switch(choise) {
					
					case 1:	//商品上架							
							gs.showTags();//调用视图层,展示所有标签
							Tag t= gs.getTag();//调用视图层,为该商品选择标签
							Goods g= gs.inputGoods(t);//调用视图层,手工录入商品信息
							//此处待添加业务逻辑层、进行实际上架的代码
							System.out.println("商品成功上架!\r\n");
						    break;
					case 2:	//商品下架
						    id = gs.inputId();//调用视图层,输入待下架的商品号
						    //此处待添加业务逻辑层、进行实际下架的代码
						    System.out.println("商品成功下架!\r\n");
						    break;
					case 3:	//查询图书
						    //此处待添加业务逻辑层、进行实际查询的代码
						    ArrayList<Goods> binfo=null;
					        gs.showGoods(binfo);
						    System.out.println("商品成功查询!\r\n");
						    break;
					case 4:	//根据商品编号查询图书
						    id = gs.inputId();
						    System.out.println(id);
						    //此处待添加业务逻辑层、进行实际查询的代码
						    ArrayList<Goods> cinfo=null;
					        gs.showGoods(cinfo);
						    System.out.println("商品成功查询!\r\n");
						    break;
					case 5://修改图书数量
						    ArrayList<String> ginfo = gs.inputNum();
						    System.out.println(ginfo.get(0)+" "+ginfo.get(1));
						    //此处待添加业务逻辑层、进行实际修改商品数量的代码
						    System.out.println("商品数量成功修改!\r\n");
						    break;					
					case 6:	//退出当前应用程序
							System.out.println(MessageFormat.format("您选择了{0}", "退出当前应用程序"));
							System.exit(0);
							break;
					default:
							continue;
					}
				}
				
		
	}
	

}

	



视图层:UserShow

package main;

import java.text.MessageFormat;
import java.util.*;

public class UserShow {
	private static Scanner sc = new Scanner(System.in);
	public UserShow(){
		
	}
	public  ArrayList<String> start(){
		
		System.out.println("***********************");
		System.out.println("**欢迎登录图书电商平台管理端***");
		System.out.println("***********************");
		System.out.println("账号:");
		String uname = sc.nextLine();
		System.out.println("密码:");
		String pwd = sc.nextLine();		
		
		ArrayList<String> uinfo = new ArrayList<>();
		uinfo.add(uname);
		uinfo.add(pwd);
		return uinfo;		
	}

	/**
	 * 主菜单
	 */
	public void showMenu() {
		/*
		 * 编写主菜单输出语句
		 */
		
		System.out.println("**********商品管理系统**********\r\n" 
				+ "1.商品上架\r\n" 
				+ "2.商品下架\r\n" 
				+ "3.查询所有商品\r\n" 
				+ "4.根据商品编号查询图书\r\n" 
				+ "5.更改商品数量\r\n" 
				+ "6.退出系统\r\n" 
				+ "*******************************");
	}
	public  int getChoise() {
		//要求用户选择菜单
		System.out.println("请选择(1-6):");
		//获取用户对于菜单的选择
		String value = sc.nextLine();
		//显示用户输入的菜单序号
		System.out.println(MessageFormat.format("您选择的是:{0}", value));
		//未学习异常时不考虑用户的错误输入
		try {
			return Integer.parseInt(value);
		} catch (NumberFormatException e) {
			// 转换失败,对外返回-1,表示输入无效
			return -1;
		}
	}
	/*
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        UserShow us = new UserShow();
        us.start();
	}*/

}

视图层:GoodsShow

package main;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Scanner;

import entity.Goods;
import entity.Tag;


public class GoodsShow {
	private static Scanner sc = new Scanner(System.in);
	public GoodsShow(){
		
	}
	/**
	 * 展示所有的商品分类标签
	 */
	public void showTags() {
		/*
		 * 编写输出语句
		 * 
		 */
		
		System.out.println("**********商品分类**********\r\n" 
				+ "1.纸质书籍, 软件编程\r\n" 
				+ "2.纸质书籍, 软件编程\r\n" 
				+ "3.电子产品, 学习工具\r\n" 
				+ "4.其他标签\r\n" 
				+ "*******************************");
	}

	/**
	 * 得到管理员为其贴的标签
	 */
	
	public  Tag getTag() {
		//要求管理员选择标签
		System.out.println("请选择(1-4):");
		//获取管理员对于标签的选择
		String value = sc.nextLine();
		
		
		//根据用户的选择创建相应标签对象
		Tag t =null;
		try {
			int choise = Integer.parseInt(value);
			switch(choise) 		{	
				case 1:	t= new Tag(1, "纸质书籍", "软件编程");
				        break;
				case 2: t= new Tag(1, "纸质书籍", "文学经典");
						break;
				case 3: t=  new Tag(1, "电子产品", "学习工具");
						break;
				default:t=  new Tag(2, "其他", "其他");
			}//显示管理员输入的菜单序号
			System.out.println(MessageFormat.format("您选择的是:{0}", t.toString()));
			
		} catch (NumberFormatException e) {
			// 转换失败,对外返回-1,表示输入无效
			System.out.println(e.getMessage());
		}
		return t;
	}
	 
	/**
	 * 新商品的录入界面
	 */
	
	public Goods inputGoods(Tag t){
		
		Goods g= new Goods();		
		System.out.println("请输入商品编号:");
		String id = sc.nextLine();
		g.setId(id);
		System.out.println("请输入商品名称:");
		String name =sc.nextLine();
		g.setName(name);
		
		System.out.println("请输入商品数量:");
		String number =sc.nextLine();
		int n= Integer.parseInt(number);
		g.setNumber(n);
		
		System.out.println("请输入商品价格:");
		String price =sc.nextLine();
		Float p = Float.parseFloat(price);
		g.setPrice(p);
		
		System.out.println("商品信息录入完毕!\r\n");		
		return g;
		
	}
	/**
	 * 输入商品编号的页面
	 */
	public String inputId(){
		System.out.println("请输入商品编号:");
		String id = sc.nextLine();
		return id;
	}
	
	/**
	 * 输入要修改的商品的编号和数量的页面
	 */
	public ArrayList<String> inputNum(){
		 System.out.println("请输入商品编号:");
		 String id = sc.nextLine();			
			
		 System.out.println("请输入新增加的该商品的数量:");
		 String number =sc.nextLine();
		 
		 ArrayList<String> ginfo = new ArrayList<>();
		 ginfo.add(id);
		 ginfo.add(number);
		 return ginfo;	
		
	}
  
	/**
	 * 展示所有商品
	 */
	
	public void showGoods(ArrayList<Goods> g){		
		System.out.println("站点商品明细:");
		System.out.println("编号\t商品名");
		System.out.println("***********************");
	    for (int i = 0; i < g.size(); i++) {
            System.out.println(g.get(i).toString());
         }		
		
	}
	 
}

用到的实体类:Goods

package entity;

public class Goods {
	protected String id;		//商品编号
	protected String name;	//商品名称
	protected int number;		//商品库存
	protected float price;		//商品价格
	protected Tag tag; // 书籍详细分类(类目)
	
	public Goods(){}
	
	public Goods(String id,String name,float price,int number){
		this.id = id;
		this.name = name;		
		this.number = number;
		this.price = price;
	}
	

	public Goods(String id, String name,  float price,
			int number,Tag tag) {
	
		this.id = id;
		this.name = name;
		this.number = number;
		this.price = price;
		this.tag = tag;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	public int getNumber() {
		return number;
	}
	public void setNumber(int number) {
		this.number = number;
	}
	public float getPrice() {
		return price;
	}
	public void setPrice(float price) {
		this.price = price;
	}
	public Tag getTag() {
		return tag;
	}
	public void setTag(Tag tag) {
		this.tag = tag;
	}
	
	@Override
	public String toString() {
		return "Goods [id=" + id + ", name=" + name + ", number=" + number + ", price="
				+ price +"tag="+tag+ "]";
	}
	
}

用到的实体类:Tag

package entity;

public class Tag {
	private int id = 0;
	//商品一级类目
	private String firstLevel;
	//商品二级类目
	private String secondLevel;		
	
	/*
	 * 无参构造函数
	 */
	public Tag() {}
	
	/*
	 * 带三个参数的构造函数
	 */
	public Tag(int id, String firstLevel, String secondLevel) {
		
		this.id = id;
		this.firstLevel = firstLevel;
		this.secondLevel = secondLevel;
	}
	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getFirstLevel() {
		return firstLevel;
	}

	public void setFirstLevel(String firstLevel) {
		this.firstLevel = firstLevel;
	}

	public String getSecondLevel() {
		return secondLevel;
	}

	public void setSecondLevel(String secondLevel) {
		this.secondLevel = secondLevel;
	}
	
	@Override
	public String toString() {
		return this.firstLevel + ">" + this.secondLevel;
	}
	
	
}