“Java MVC之 Model层”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
Model层的编写
 
(未显示同一用户的3个中间版本)
第2行: 第2行:
 
*M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
 
*M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
  
 +
'''(该层最好用接口写,现在的内容实际是业务逻辑层的部分内容)'''
 
[[文件:Java8-1.png]]
 
[[文件:Java8-1.png]]
  
第7行: 第8行:
 
===客户端===
 
===客户端===
 
===管理端===
 
===管理端===
  <nowiki>package main;
+
 
 +
===业务逻辑层:UserService===
 +
  <nowiki>
 +
package service;
 +
import dao.*;
 +
import entity.*;
 +
//import exception.UserException;
 +
public class UserService {
 +
 +
/**
 +
* 用户集类(用于存储用户
 +
*/
 +
private UserDao userset = null;
 +
 +
 +
public UserService() {
 +
userset = new UserDaoMap();
 +
}
 +
 +
/**
 +
* 用于向用户集添加用户
 +
*/
 +
public void addUser(User user){
 +
 +
userset.addUser(user);
 +
        System.out.println("用户 "+user.getName() +" 注册成功");       
 +
System.out.println();
 +
}
 +
 +
/**
 +
* 查询仓库中的用户
 +
*/
 +
public void queryUser( ){
 +
System.out.println("本店现有如下用户:");
 +
userset.queryUser();
 +
System.out.println();
 +
}
 +
/**
 +
* 登录验证,判断用户名与密码是否一致
 +
*
 +
* @param uid 用户输入的登录账号
 +
* @param pwd 用户输入的登录密码
 +
* @return 登录信息有效:返回用户对象,否则返回NULL
 +
*/
 +
public boolean login(String name, String pwd) {
 +
//用户名为空,密码为空
 +
//try{
 +
if(!userset.hasUser(name)){
 +
//throw new UserException("用户 "+name+":该用户不存在");
 +
System.out.println("用户 "+name+":该用户不存在");
 +
return false;
 +
}else if(!userset.verify(name, pwd)){
 +
//throw new UserException("用户 "+name+":用户名或密码错误");
 +
System.out.println("用户 "+name+":用户名或密码错误");
 +
return false;
 +
}
 +
System.out.println("用户 "+name+" 登陆成功!");
 +
//}catch(UserException e){
 +
//System.out.println(e.toString());
 +
//return false;
 +
//}
 +
return true;
 +
}
 +
public static void main(String[] args) {
 +
UserService us =new UserService();
 +
User u1=new User("zhangliu","456");//这里可能会遇到构造方法参数不符的问题,重新修改一下构造方法
 +
    us.addUser(u1);
 +
    us.queryUser( );
 +
    us.login("zhangliu","456");
 +
 +
}
 +
}</nowiki>
  
  
import java.text.MessageFormat;
+
===业务逻辑层:GoodsService===
 +
<nowiki>package service;
 
import java.util.ArrayList;
 
import java.util.ArrayList;
import java.util.Scanner;
 
import java.util.Set;
 
  
 +
import dao.*;
 
import entity.*;
 
import entity.*;
 
 
import exception.GoodsException;
 
import exception.GoodsException;
import exception.UserException;
+
/**
import service.*;
+
* 这个类处理与商品有关的业务逻辑
 
+
*/
 
+
public class GoodsService {
 
+
/*本类对应实训: MVC之Model层 */
+
public class MainClass {
+
private GoodsDao dbset ;
 +
 +
 +
public GoodsService() {
 +
dbset =  new GoodsDaoMem();
 +
}
 +
 +
/**
 +
  * 向数据仓库中批量添加商品
 +
  * @param goods 向仓库中添加商品(数组)
 +
  * @return 值为空
 +
  */
 +
public void addGoods(Goods [] goods){
 +
 +
System.out.println("现在开始向库中添加商品 ");
 +
for(int i=0;i<goods.length;i++){
 +
        this.addGoods(goods[i]);       
 +
        }
 +
System.out.println("所有商品添加完毕 ");
 +
System.out.println();
 +
 +
 +
}
 +
/**
 +
  * 向数据仓库中添加商品
 +
  * @param g 向仓库中添加的商品
 +
  * @return 值为空
 +
  */
 +
  public void addGoods(Goods  g){
 +
 
 +
  int num = g.getNumber();
 +
  if(dbset.hasGoods(g)){//如果该商品已经存在,则追加商品数目
 +
  dbset.modifyGoods(g, num);
 +
  }else{//如果该商品不存在,则添加这个商品到数据库
 +
  dbset.addGoods(g);
 +
  }
 +
  System.out.println("    商品 "+g.getName() +" 成功入库");
 +
 +
}
 +
 +
/**
 +
  * 向数据仓库中删除商品
 +
  * @param g 向仓库中删除的商品
 +
  * @return 值为空
 +
  */
 +
public void delGoods(Goods g) {
 +
System.out.println("现在开始向库中删除商品 ");
 +
try{
 +
if(dbset.hasGoods(g)){
 +
    dbset.delGoods(g);
 +
    System.out.println(g.getName()+" 已删除完毕!");
 +
}else{
 +
throw new GoodsException("要删除的商品"+g.getName()+" 不存在哦!");
 +
//System.out.println("要删除的商品"+g.getName()+" 不存在");
 +
}
 +
System.out.println();
 +
}catch(GoodsException e){
 +
System.out.println(e.toString());
 +
}
 +
}
 +
/**
 +
  * 向数据仓库中删除商品
 +
  * @param g 向仓库中删除的商品
 +
  * @return 值为空
 +
  */
 +
public void delGoods(String id)  {
 +
try{
 +
System.out.println("现在开始向库中删除商品 ");
 +
if(dbset.hasGoods(id)){
 +
    dbset.delGoods(id);
 +
    System.out.println("商品"+ id+" 已删除完毕!");
 +
}else{
 +
throw new GoodsException("要删除的商品"+id+" 不存在哦!");
 +
//System.out.println("要删除的商品"+g.getName()+" 不存在");
 +
}
 +
System.out.println();
 +
}catch(GoodsException e){
 +
System.out.println(e.toString());
 +
}
 +
}
 +
/**
 +
* 查询仓库中的商品
 +
* * @param 值为空
 +
  * @return 值为空
 +
*/
 
 
 
+
public ArrayList<Goods>  queryGoods( ){
 +
 +
ArrayList<Goods> g= dbset.queryGoods();
 +
System.out.println("商品成功查询!\r\n");
 +
return g;
 +
 +
 +
}
 +
/**
 +
* 查询仓库中的商品
 +
* * @param 值为空
 +
  * @return 值为空
 +
*/
 
 
public static void main(String[] args) {
+
public Goods  queryGoods(String id )  {
 +
 +
Goods g= dbset.queryGoods(id);
 +
 +
if(g==null){
 +
System.out.println("要查找的商品"+id+" 不存在哦!");
 +
return null;
 +
}
 +
System.out.println("商品成功查询!\r\n");
 +
return g;
 +
 +
}
 +
/**
 +
  * 向数据仓库中修改商品的数量
 +
  * @param g 仓库中待修改的商品
 +
  * @param n 商品的数量增加或减少的数量
 +
  * @return 值为空
 +
  */
 +
public void modifyGoods(Goods g,int n)  {
 +
System.out.println("现在开始修改商品 "+g.getName()+ " 的数量");
 +
try{
 +
if(!dbset.hasGoods(g)){//如果查不到这个商品
 +
throw new GoodsException("要修改的商品"+g.getName()+" 不存在哦!");
 +
//System.out.println("要修改的商品"+g.getName()+" 不存在");
 +
}else {//查到这个商品了,可以做进一步操作
 
 
        /*管理员登陆
+
    int s = g.getNumber();//该商品现在的库存数
        * 
+
if(n>0){//如果n>0 ,库存实际上是增加了
        */
+
    dbset.modifyGoods(g, n);
        //如果输入正确就往下进行,否则就提示用户再次输入
+
   
        UserShow us= new UserShow();
+
    }else if(s +n >=0){//如果n<0,s+n>=0,库存实际上是减小了,但仍是正数
        while(true){
+
    dbset.modifyGoods(g, n);  
       
+
   
        ArrayList<String> uinfo = us.start();
+
    }else{//对应s +n <0的情况,要减去的数目比实际的库存数还要大,操作错误。
        UserService admin = new UserService();
+
    throw new GoodsException(g.getName()+" 待删除数量已超过该商品库存数哦!");
       
+
    //System.out.println(g.getName()+" 待删除数量已超过该商品库存数!");
        //uinfo.get(0)和uinfo.get(1)分别代表用户名和密码
+
    }
        //验证用户名和密码是否正确
+
System.out.println(g.getName()+" 的库存增加了 " + n+ " 个");
        boolean success =admin.login(uinfo.get(0),uinfo.get(1));
+
    System.out.println();
        if(success)
+
}
        break;
+
}catch( GoodsException e){
       
+
System.out.println(e.toString());
        }
+
}
       
 
 
 
GoodsShow gs = new GoodsShow();//视图层对象
 
GoodsService bs = new GoodsService();//业务逻辑层对象
 
        String id=null;//商品编号
 
       
 
while(true) {
 
//显示菜单
 
us.showMenu();
 
 
//获取用户的选择(应用不输入退出应用的编号则始终显示菜单)
 
         
 
int choise = us.getChoise();
 
 
switch(choise) {
 
 
case 1: //商品上架
 
gs.showTags();//调用视图层,展示所有标签
 
Tag t= gs.getTag();//调用视图层,为该商品选择一种标签
 
Goods g= gs.inputGoods(t);//调用视图层,手工录入商品信息
 
bs.addGoods(g);//调用业务逻辑层,添加商品到数据库
 
//System.out.println("商品成功上架!\r\n");
 
    break;
 
 
case 2: //商品下架
 
id = gs.inputId();//调用视图层,输入待下架的商品号
 
    bs.delGoods(id);//调用业务逻辑层、进行实际下架
 
    //System.out.println("商品成功下架!\r\n");
 
 
    break;
 
case 3: //查询图书
 
  //调用业务逻辑层、进行实际查询的代码
 
    ArrayList<Goods> binfo= bs.queryGoods();    
 
        gs.showGoods(binfo);//调用视图层,将商品进行展示
 
    //System.out.println("商品成功查询!\r\n");
 
    break;
 
case 4: //根据商品编号查询图书
 
    id = gs.inputId();//调用视图层,输入商品编号
 
    Goods g4= bs.queryGoods(id);
 
    //调用业务逻辑层、进行实际查询的代码
 
    ArrayList<Goods> cinfo=new ArrayList<>();
 
    cinfo.add(g4);
 
    gs.showGoods(cinfo);
 
  // System.out.println("商品成功查询!\r\n");
 
   
 
    break;
 
case 5://修改图书数量
 
    ArrayList<String> ginfo = gs.inputNum();
 
    String id5 =ginfo.get(0);
 
    int num = Integer.parseInt(ginfo.get(1));
 
    bs.modifyGoods(id5,num);
 
    //调用业务逻辑层、进行实际修改商品数量的代码
 
    //System.out.println("商品数量成功修改!\r\n");
 
    break;
 
case 6: //退出当前应用程序
 
System.out.println(MessageFormat.format("您选择了{0}", "退出当前应用程序"));
 
System.exit(0);
 
break;
 
default:
 
continue;
 
}
 
}
 
 
 
     
+
   
+
}
 +
/**
 +
  * 向数据仓库中修改商品的数量
 +
  * @param g 仓库中待修改的商品
 +
  * @param n 商品的数量增加或减少的数量
 +
  * @return 值为空
 +
  */
 +
public void modifyGoods(String id,int n) {
 +
System.out.println("现在开始修改商品 "+id+ " 的数量");
 +
try{
 +
if(!dbset.hasGoods(id)){//如果查不到这个商品
 +
throw new GoodsException("要修改的商品"+id+" 不存在哦!");
 +
 +
}else {//查到这个商品了,可以做进一步操作
 +
Goods g=dbset.queryGoods(id);
 +
      int s = g.getNumber();//该商品现在的库存数
 +
if(n>0){//如果n>0 ,库存实际上是增加了
 +
    dbset.modifyGoods(g, n);
 +
   
 +
    }else if(s +n >=0){//如果n<0,s+n>=0,库存实际上是减小了,但仍是正数
 +
    dbset.modifyGoods(g, n);  
 +
   
 +
    }else{//对应s +n <0的情况,要减去的数目比实际的库存数还要大,操作错误。
 +
    throw new GoodsException(g.getName()+" 待删除数量已超过该商品库存数哦!");
 +
    //System.out.println(g.getName()+" 待删除数量已超过该商品库存数!");
 +
    }
 +
System.out.println(g.getName()+" 的库存增加了 " + n+ " 个");
 +
    System.out.println();
 +
}
 +
}catch( GoodsException e){
 +
System.out.println(e.toString());
 +
}
 +
 
 
}
 
}
 
 
 
+
 
}
 
}
 +
</nowiki>
  
+
项目源文件请见:
  
</nowiki>
+
  http://cloud.sict.edu.cn:80/link/CED3A93616F3973EBBBBCC4427DE32B1
  
项目源文件请见:
 
  
  http://cloud.sict.edu.cn:80/link/CED3A93616F3973EBBBBCC4427DE32B1
+
返回 [[Java程序设计]]

2020年5月17日 (日) 09:32的最新版本

Model层的作用

  • M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

(该层最好用接口写,现在的内容实际是业务逻辑层的部分内容) Java8-1.png

Model层的编写

客户端

管理端

业务逻辑层:UserService

package service;
import dao.*;
import entity.*;
//import exception.UserException;
public class UserService {
	
	/**
	 * 用户集类(用于存储用户
	 */
	private UserDao userset = null;
	
	
	public UserService() {
		userset = new UserDaoMap();
	}
	
	/**
	 * 用于向用户集添加用户
	 */
	public void addUser(User user){
		
		userset.addUser(user);
        System.out.println("用户 "+user.getName() +" 注册成功");        
		System.out.println();
	}	
	
	/**
	 * 查询仓库中的用户
	 */
	public void queryUser( ){
		System.out.println("本店现有如下用户:");
		userset.queryUser();
		System.out.println();
	}
	/**
	 * 登录验证,判断用户名与密码是否一致
	 * 
	 * @param uid 用户输入的登录账号
	 * @param pwd 用户输入的登录密码
	 * @return 登录信息有效:返回用户对象,否则返回NULL
	 */
	public boolean login(String name, String pwd) {
		//用户名为空,密码为空
		//try{
			if(!userset.hasUser(name)){
				//throw new UserException("用户 "+name+":该用户不存在");
				System.out.println("用户 "+name+":该用户不存在");
				return false;
			}else if(!userset.verify(name, pwd)){
				//throw new UserException("用户 "+name+":用户名或密码错误");
				System.out.println("用户 "+name+":用户名或密码错误");
				return false;
			}
			System.out.println("用户 "+name+" 登陆成功!");
		//}catch(UserException e){
			//System.out.println(e.toString());
			//return false;
		//}		
		return true;
	}
	public static void main(String[] args) {
		UserService us =new UserService();
		User u1=new User("zhangliu","456");//这里可能会遇到构造方法参数不符的问题,重新修改一下构造方法
	    us.addUser(u1);
	    us.queryUser( );
	    us.login("zhangliu","456");
		
	}
}


业务逻辑层:GoodsService

package service;
import java.util.ArrayList;

import dao.*;
import entity.*;
import exception.GoodsException;
/**
 * 这个类处理与商品有关的业务逻辑
 */
public class GoodsService {
	
	
	private GoodsDao dbset ;
	
	
	public GoodsService() {
		dbset =  new GoodsDaoMem();
	}
	
	/**
	   * 向数据仓库中批量添加商品
	   * @param goods 向仓库中添加商品(数组)
	   * @return 值为空
	   */
	public void addGoods(Goods [] goods){
		
		System.out.println("现在开始向库中添加商品 ");
		for(int i=0;i<goods.length;i++){
        	this.addGoods(goods[i]);        	
        }
		System.out.println("所有商品添加完毕 ");
		System.out.println();
		
		
	}
	/**
	   * 向数据仓库中添加商品
	   * @param g 向仓库中添加的商品
	   * @return 值为空
	   */
   public void addGoods(Goods  g){	
	   
	   int num = g.getNumber();
	   if(dbset.hasGoods(g)){//如果该商品已经存在,则追加商品数目
		   dbset.modifyGoods(g, num);
	   }else{//如果该商品不存在,则添加这个商品到数据库
		   dbset.addGoods(g);
	   }
	   System.out.println("    商品 "+g.getName() +" 成功入库");
		
	}
	 
	 /**
	   * 向数据仓库中删除商品
	   * @param g 向仓库中删除的商品
	   * @return 值为空
	   */
	public void delGoods(Goods g) {
		System.out.println("现在开始向库中删除商品 ");
	try{
		if(dbset.hasGoods(g)){
		     dbset.delGoods(g);
		     System.out.println(g.getName()+" 已删除完毕!");
		}else{
			throw new GoodsException("要删除的商品"+g.getName()+" 不存在哦!");
			//System.out.println("要删除的商品"+g.getName()+" 不存在");
		}
		System.out.println();	
	}catch(GoodsException e){
		System.out.println(e.toString());
	}
	}
	 /**
	   * 向数据仓库中删除商品
	   * @param g 向仓库中删除的商品
	   * @return 值为空
	   */
	public void delGoods(String id)  {
	try{
		System.out.println("现在开始向库中删除商品 ");
		if(dbset.hasGoods(id)){
		     dbset.delGoods(id);
		     System.out.println("商品"+ id+" 已删除完毕!");
		}else{
			throw new GoodsException("要删除的商品"+id+" 不存在哦!");
			//System.out.println("要删除的商品"+g.getName()+" 不存在");
		}
		System.out.println();	
	}catch(GoodsException e){
		System.out.println(e.toString());
	}
	}
	/**
	 * 查询仓库中的商品
	 * * @param 值为空
	   * @return 值为空
	 */
	
	public ArrayList<Goods>  queryGoods( ){
		
		ArrayList<Goods> g= dbset.queryGoods();
		System.out.println("商品成功查询!\r\n");
		return g;
		
		
	}
	/**
	 * 查询仓库中的商品
	 * * @param 值为空
	   * @return 值为空
	 */
	
	public Goods  queryGoods(String id )  {
		
		Goods g= dbset.queryGoods(id);
		
		if(g==null){
			System.out.println("要查找的商品"+id+" 不存在哦!");
			return null;
		}
		System.out.println("商品成功查询!\r\n");
		return g;
		
	}
	/**
	   * 向数据仓库中修改商品的数量
	   * @param g 仓库中待修改的商品
	   * @param n 商品的数量增加或减少的数量
	   * @return 值为空
	   */
	public void modifyGoods(Goods g,int n)  {
		System.out.println("现在开始修改商品 "+g.getName()+ " 的数量");
		try{
			if(!dbset.hasGoods(g)){//如果查不到这个商品
				throw new GoodsException("要修改的商品"+g.getName()+" 不存在哦!");
				//System.out.println("要修改的商品"+g.getName()+" 不存在");
			}else {//查到这个商品了,可以做进一步操作
				
	    		int s = g.getNumber();//该商品现在的库存数		
				if(n>0){//如果n>0 ,库存实际上是增加了		
				    dbset.modifyGoods(g, n);
				    
			    }else if(s +n >=0){//如果n<0,s+n>=0,库存实际上是减小了,但仍是正数
			    	dbset.modifyGoods(g, n);		  
			    	
			    }else{//对应s +n <0的情况,要减去的数目比实际的库存数还要大,操作错误。
			    	throw new GoodsException(g.getName()+" 待删除数量已超过该商品库存数哦!");
			    	//System.out.println(g.getName()+" 待删除数量已超过该商品库存数!");
			    }	
				System.out.println(g.getName()+" 的库存增加了 " + n+ " 个");
			    System.out.println();	
			}
		}catch( GoodsException e){
				System.out.println(e.toString());
			}
			
		    	
	}
	/**
	   * 向数据仓库中修改商品的数量
	   * @param g 仓库中待修改的商品
	   * @param n 商品的数量增加或减少的数量
	   * @return 值为空
	   */
	public void modifyGoods(String id,int n) {
		System.out.println("现在开始修改商品 "+id+ " 的数量");
		try{
			if(!dbset.hasGoods(id)){//如果查不到这个商品
				throw new GoodsException("要修改的商品"+id+" 不存在哦!");
				
			}else {//查到这个商品了,可以做进一步操作
				Goods g=dbset.queryGoods(id);
	  		    int s = g.getNumber();//该商品现在的库存数		
				if(n>0){//如果n>0 ,库存实际上是增加了		
				    dbset.modifyGoods(g, n);
				    
			    }else if(s +n >=0){//如果n<0,s+n>=0,库存实际上是减小了,但仍是正数
			    	dbset.modifyGoods(g, n);		  
			    	
			    }else{//对应s +n <0的情况,要减去的数目比实际的库存数还要大,操作错误。
			    	throw new GoodsException(g.getName()+" 待删除数量已超过该商品库存数哦!");
			    	//System.out.println(g.getName()+" 待删除数量已超过该商品库存数!");
			    }		
				System.out.println(g.getName()+" 的库存增加了 " + n+ " 个");
			    System.out.println();	
			}
		}catch( GoodsException e){
			System.out.println(e.toString());
		}
  	
	}
	
	
}

项目源文件请见:
 http://cloud.sict.edu.cn:80/link/CED3A93616F3973EBBBBCC4427DE32B1


返回 Java程序设计