Java架构设计之购物车

来自CloudWiki
跳转至: 导航搜索

任务描述

1.创建购物车操作的业务逻辑层

2. 对用户操作的数据访问层做必要改动

3. 编写表示层的代码


实训原理

Java2020-12-3.png

表示层

表示层又称表现层UI,位于三层构架的最上层,与用户直接接触,主要是B/S信息系统中的Web浏览页面。作为Web浏览页面,表示层的主要功能是实现系统数据的传入与输出,在此过程中不需要借助逻辑判断操作就可以将数据传送到BLL系统中进行数据处理,处理后会将处理结果反馈到表示层中。换句话说,表示层就是实现用户界面功能,将用户的需求传达和反馈,并用BLL或者是Models进行调试,保证用户体验。

业务逻辑层

业务逻辑层BLL的功能是对具体问题进行逻辑判断与执行操作,接收到表现层UI的用户指令后,会连接数据访问层DAL,访问层在三层构架中位于表示层与数据层中间位置,同时也是表示层与数据层的桥梁,实现三层之间的数据连接和指令传达,可以对接收数据进行逻辑处理,实现数据的修改、获取、删除等功能,并将处理结果反馈到表示层UI中,实现软件功能。

数据访问层

数据访问层DAL是数据库的主要操控系统,实现数据的增加、删除、修改、查询等操作,并将操作结果反馈到业务逻辑层BLL。在实际运行的过程中,数据访问层没有逻辑判断能力,为了实现代码编写的严谨性,提高代码阅读程度,一般软件开发人员会在该层中编写DataAccessCommon,保证数据访问层DAL数据处理功能。

任务准备

加载指定数据库的驱动程序

(此步如果所在项目已做,可忽略)

Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connector/j/,解压后得到jar库文件,然后在对应的项目中导入该库文件。

你可以从群邮件里下载MySQL驱动 jar 包:mysql-connector-java-5.1.39-bin.jar ,对应于mysql5.7版本。

导入数据库驱动程序

(此步如果所在项目已做,可忽略)

具体参见 Eclipse导入数据库驱动程序


创建测试数据

接下来我们在 MySQL 中创建 cloud 数据库,并创建 goods 数据表,表结构如下:



 <nowiki>mysql> create database cloud;
    
Query OK, 1 row affected (0.00 sec)

mysql> use cloud;

 Database changed

数据表 carts:

CREATE TABLE IF NOT EXISTS `carts` (   
       `id` INT unsigned AUTO_INCREMENT,      
       `uid` INT(10) NOT NULL,   
       `gid` INT(10) NOT NULL,
       `num` INT(11) NOT NULL,       
        PRIMARY KEY (`id`)    
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入几条购物车数据(插的时候,uid,gid 分别对应着 user表和 goods表里的 id号,必须得是真实存在的。

MariaDB [cloud]> INSERT INTO `carts`(`uid`,`gid`,`num`) VALUES('1',`3`,3);
ERROR 1054 (42S22): Unknown column '3' in 'field list'

MariaDB [cloud]> INSERT INTO `carts`(`uid`,`gid`,`num`) VALUES('1','3','3');
Query OK, 1 row affected (0.00 sec)

MariaDB [cloud]> INSERT INTO `carts`(`uid`,`gid`,`num`) VALUES('1','4','2');
Query OK, 1 row affected (0.00 sec)

MariaDB [cloud]> SELECT * FROM `carts` inner join `goods` on `carts`.`gid` = `goods`.`id`;
+----+-----+-----+-----+----+-----------------+-------+-----+
| id | uid | gid | num | id | name            | price | num |
+----+-----+-----+-----+----+-----------------+-------+-----+
|  1 |   1 |   3 |   3 |  3 | 兰州牛肉面      |    12 |  20 |
|  2 |   1 |   4 |   2 |  4 | 黄焖鸡米饭      |    12 |  30 |
+----+-----+-----+-----+----+-----------------+-------+-----+

MariaDB [cloud]> SELECT `carts`.`id`,`goods`.`name`,`goods`.`price`,`carts`.num FROM `carts` inner join `goods` on `carts`.`gid` = `goods`.`id`;
+----+-----------------+-------+-----+
| id | name            | price | num |
+----+-----------------+-------+-----+
|  1 | 兰州牛肉面      |    12 |   3 |
|  2 | 黄焖鸡米饭      |    12 |   2 |
+----+-----------------+-------+-----+
2 rows in set (0.00 sec)

</nowiki>

建立数据连接类MyCon

(此步如果所在项目已做,可忽略)

 
package dao;

import java.sql.*;

public class MyCon {
	
	public static Connection conn = null;
	
	/**
	   * 连接数据库
	   * @param 值为空
	   * @return Connection 建立的数据库连接
	*/
    public static boolean getConn() {   
 
			// JDBC 驱动名及数据库 URL
		  final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
		  final String DB_URL = "jdbc:mysql://10.0.0.30:3306/cloud?characterEncoding=utf8";
		  final String USER = "root";
		  final String PASS = "000000";
		  
	    try {
	        Class.forName(JDBC_DRIVER); //classLoader,加载对应驱动
	        conn = (Connection) DriverManager.getConnection(DB_URL, USER, PASS);
	        System.out.println("MySQL连接成功!");
	    } catch (ClassNotFoundException e) {
	    	System.out.println(e.getMessage());
	    	return false;
	    } catch (SQLException e) {
	    	System.out.println(e.getMessage());
	    	return false;
	    }
	    return true;
   }
    public static boolean disConn() { 
		try {
           conn.close();
           System.out.println("MySQL关闭成功!");
        } catch (SQLException e) {
           System.out.println(e.getMessage());
           return false;
        }
		return true;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        getConn();
        disConn();
	}

}

运行一下,看看能否连接数据库 ?

数据访问层

CartDao接口

package dao;
import java.util.ArrayList;

import entity.*;
public interface CartDao {
	 public int getNum(Integer uid);//获取商品数量
	
	 public boolean addGoods(Integer uid,Integer gid,Integer num);//添加商品
	 
	 public boolean delGoods(Integer cid) ;//删除商品
	  
	  public ArrayList<Goods> queryGoods(Integer uid);//查询购物车内已放商品
	  
	  public Integer [] hasGoods(Integer uid,Integer gid);//查询购物车内是否已有某件商品,返回该商品的订单号和数量
	  
	  public boolean modifyGoods(Integer cid,Integer num);//修改购物车内该种商品的数量
	
}


创建CartDaoSQL实现类

package dao;

import java.sql.*;
import java.util.*;

import entity.*;

public class CartDaoSQL implements CartDao{
	Connection conn ;
			
	public CartDaoSQL(){
		 conn  = MyCon.conn;//建立数据连接
	}
       public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyCon.getConn();//建立数据库连接
		CartDao s = new CartDaoSQL(); 
		UserDao uds =new UserDaoSQL();
		GoodsDao g = new GoodsDaoSQL(); 
                MyCon.disConn();//建立数据库连接
				
	}
}


购物车商品数getNum()

   public int getNum(Integer uid) {
		 
		 int rowCount = 0;
		 try { 
	    		ResultSet rs = null;   //建立一个空的结果集
	            //1.创建PreparedStatement 对象,让它与一条SQL模板绑定;
	    		String sql = "SELECT sum(`carts`.num) record FROM `carts` "
	    				+ "inner join `goods` on `carts`.`gid` = `goods`.`id` where uid= ?";
	    		PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);  
	    		pstmt.setInt(1,uid);
                 //2.执行查询 
	            rs = pstmt.executeQuery();//执行查询		           
	            if(rs.next()){
	               rowCount=rs.getInt("record");
	            }
                pstmt.close();	    	     		
	            
	     }catch (SQLException e) {//捕捉、处理异常
	             System.out.println(e.getMessage());
	     }
		 return rowCount;
	  }

(购物车)添加商品addGoods

	public boolean addGoods(Integer uid,Integer gid,Integer num){	   
		  Connection conn =  this.conn;
	      int i = 0;
	      String sql = "insert into carts (uid,gid,num) values(?,?,?)";
	      PreparedStatement pstmt;
	      boolean success=false;
	      try {//1.创建PreparedStatement 对象,让它与一条SQL模板绑定;
	            pstmt = (PreparedStatement) conn.prepareStatement(sql);
	            pstmt.setInt(1, uid);
	            pstmt.setInt(2, gid);  //pstmt.setInt(2, user.getAge()); pstmt.setDate  
	            pstmt.setInt(3, num);  
	            
	            i = pstmt.executeUpdate();//2.执行查询 
	            if(i!=0){ //3.查看查询状态
	            	//System.out.println("商品"+gid+"插入成功!");
	            	success=true;
		        }else {
		        	//System.out.println("商品"+gid+"插入失败!");
		        	success=false;
		        }
	            pstmt.close();
	            
	        } catch (SQLException e) {
	        	System.out.println(e.getMessage());
	        	success=false;
	        }  
	      return success;
	}

(购物车)删除商品

	public boolean delGoods(Integer cid) {//cid为购物车某条订单的id号
	    Connection conn = this.conn;
        
		boolean success=false;
    	try {   		
    		
    		String sql = "DELETE FROM carts WHERE  id = ? "; 
    		PreparedStatement pstmt = conn.prepareStatement(sql);  
    		pstmt.setInt(1, cid);
    		
    		int i = pstmt.executeUpdate();
            if(i!=0){  
            	//System.out.println("订单"+cid+"删除成功!");
            	success=true;
	        }else {  
	        	//System.out.println("订单"+cid+"删除失败!");
	        	success=false;
	        }
    		pstmt.close();
            
    	}catch (SQLException e) {
        	System.out.println(e.getMessage());
        	success=false;
        }
    	return success;
	}

(购物车)查询某一商品是否存在

public Integer [] hasGoods(Integer uid,Integer gid) {//查询某一商品
		Integer[] info = new Integer[2];//新建数组,用来盛放商品的订单号和数量
		info[0]=0;info[1]=0;
		try { 
	    		ResultSet rs = null;   //建立一个空的结果集

	            //1.创建PreparedStatement 对象,让它与一条SQL模板绑定;
	    		String sql = "select id,num from carts where uid=? and gid=? ";
	    		PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);    		                               
	    		pstmt.setInt(1, uid);
	    		pstmt.setInt(2, gid);
	            //3.执行查询 
	            rs = pstmt.executeQuery();//执行查询   
	                     
                if(rs.next()){
                	info[0] = rs.getInt("id");
                	info[1] =rs.getInt("num");
	            }
                pstmt.close();
	            
	    }catch (SQLException e) {//捕捉、处理异常
	             System.out.println(e.getMessage());	            
	    }
		return info;
	}
	

(购物车)查询所有商品

public ArrayList<Goods> queryGoods(Integer uid){//查询所有商品
		  
		 ArrayList<Goods> garray = new ArrayList<>();       
	      try { //1.编写预编译语句
	    	    String sql = "SELECT `carts`.`id`,`goods`.`name`,`goods`.`price`,`carts`.num FROM `carts` "
	    	    		+ "inner join `goods` on `carts`.`gid` = `goods`.`id`where uid= ?";
	    	    PreparedStatement pstmt = (PreparedStatement)conn.prepareStatement(sql);
	    	    pstmt.setInt(1, uid);
	            //2.执行查询 
	            ResultSet  rs = pstmt.executeQuery();//执行查询
	            int col = rs.getMetaData().getColumnCount();//获取字段数	            
	            
	                       
	          //4. 打印数据表结果	
	            
	            while (rs.next()) {
	            	   String id = Integer.toString(rs.getInt(1));
		               String gname = rs.getString(2);
		               float price= rs.getFloat(3);
		               int num = rs.getInt(4);
		               Goods g = new Goods(id,gname,price,num); 
		               garray.add(g);
		               //System.out.print(rs.getString(i) + "\t");	               
		         }      
	            
	        } catch (SQLException e) {
	        	System.out.println(e.getMessage());
	        }
	        
	      return garray;
	}

(购物车)修改商品数量

public boolean modifyGoods(Integer cid,Integer num) {		
		  //修改商品
		  int i = 0;
		  if(num ==0 ) {//如果修改数量为0,直接删除			  
			  return delGoods(cid);
		  }
		  
	      String sql = "UPDATE carts SET num=?"  
	                 + " WHERE id=?";  
	      PreparedStatement pstmt;
	      boolean success = false;
	      try {
	             pstmt = (PreparedStatement) conn.prepareStatement(sql);
	             pstmt.setInt(1, num);
	             pstmt.setInt(2,cid);            
	             i = pstmt.executeUpdate();
	             if(i!=0){ 
	            	 //System.out.println("订单"+cid+"修改成功!");
	            	 success=true;
		         }else {
		        	 //System.out.println("订单"+cid+"修改失败!");
		        	 success = false;
		         }
	             pstmt.close();
	             
	         } catch (SQLException e) {
	         	 System.out.println(e.getMessage());
	         	 success = false;
	         }	
	       return success;
	}

测试代码

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyCon.getConn();//建立数据库连接
		CartDao s = new CartDaoSQL(); 
		UserDao uds =new UserDaoSQL();
		GoodsDao g = new GoodsDaoSQL(); 
		
		/*选择一个用户id ,购物车是和用户身份相关联的 */
		System.out.println(uds.queryUser());
		System.out.println("请输入用户id号:");
		Scanner sc = new Scanner(System.in);
		int uid = Integer.valueOf(sc.next());//输入用户id号
		
		/* 向购物车中添加商品 */		
		System.out.println("商城现有商品:");
		System.out.println(g.findAll());
		int gid,num;
		System.out.println("您想购买什么商品?(输入商品id号)");
		gid = Integer.valueOf(sc.next());//输入商品id号
		System.out.println("购买该商品的数量为:");
		num = Integer.valueOf(sc.next());//输入商品购买数量
		System.out.println("添加商品操作:"+ s.addGoods(uid, gid, num));
		
		/* 查询购物车所有商品 */
		//获取购物车商品总数
		System.out.println("该用户购物车共有:" + s.getNum(uid)+" 件商品");
		//查询购物车所有商品
		System.out.println("该用户购物车如下所示:");
		System.out.println(s.queryGoods(uid));
		
		/*查看购物车内某商品是否存在 */
		System.out.println("商城现有商品:");
		System.out.println(g.findAll());
		System.out.println("您想查看什么商品在购物车内的情况?(输入商品id号)");
		gid = Integer.valueOf(sc.next());//输入商品id号
		Integer [] info = s.hasGoods(uid, gid);
		System.out.println("该商品在购物车内的订单号为:"+info[0]+",数量为:"+info[1]);
		
		/*修改购物车内商品数量 */		
		System.out.println("您想修改什么商品?(输入订单id号)");
		int cid = Integer.valueOf(sc.next());//输入商品id号
		System.out.println("修改后,该商品的数量为:");
		num = Integer.valueOf(sc.next());
		System.out.println("商品修改操作:"+s.modifyGoods(cid, num));
		//获取购物车商品总数
		System.out.println("该用户购物车共有:" + s.getNum(uid)+" 件商品");
		//查询购物车所有商品
		System.out.println("该用户购物车如下所示:");
		System.out.println(s.queryGoods(uid));
		
		/*删除购物车内商品 */
		//删除商品
		System.out.println("您想取消什么订单的购买?(输入订单id号)");
		cid = Integer.valueOf(sc.next());//输入订单id号
		System.out.println("商品删除操作:"+s.delGoods(cid));		
		//获取购物车商品总数
		System.out.println("该用户购物车共有:" + s.getNum(uid)+" 件商品");
		//查询购物车所有商品
		System.out.println("该用户购物车如下所示:");
		System.out.println(s.queryGoods(uid));
		
		
		sc.close();
		MyCon.disConn();//建立数据库连接
				
	}

全部代码

package dao;

import java.sql.*;
import java.util.*;

import entity.*;

public class CartDaoSQL implements CartDao{
	Connection conn ;
			
	public CartDaoSQL(){
		 conn  = MyCon.conn;//建立数据连接
	}

    public int getNum(Integer uid) {
		 
		 int rowCount = 0;
		 try { 
	    		ResultSet rs = null;   //建立一个空的结果集
	            //1.创建PreparedStatement 对象,让它与一条SQL模板绑定;
	    		String sql = "SELECT sum(`carts`.num) record FROM `carts` "
	    				+ "inner join `goods` on `carts`.`gid` = `goods`.`id` where uid= ?";
	    		PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);  
	    		pstmt.setInt(1,uid);
                 //2.执行查询 
	            rs = pstmt.executeQuery();//执行查询		           
	            if(rs.next()){
	               rowCount=rs.getInt("record");
	            }
                pstmt.close();	    	     		
	            
	     }catch (SQLException e) {//捕捉、处理异常
	             System.out.println(e.getMessage());
	     }
		 return rowCount;
	  }
    
	public boolean addGoods(Integer uid,Integer gid,Integer num){	   
		  Connection conn =  this.conn;
	      int i = 0;
	      String sql = "insert into carts (uid,gid,num) values(?,?,?)";
	      PreparedStatement pstmt;
	      boolean success=false;
	      try {//1.创建PreparedStatement 对象,让它与一条SQL模板绑定;
	            pstmt = (PreparedStatement) conn.prepareStatement(sql);
	            pstmt.setInt(1, uid);
	            pstmt.setInt(2, gid);  //pstmt.setInt(2, user.getAge()); pstmt.setDate  
	            pstmt.setInt(3, num);  
	            
	            i = pstmt.executeUpdate();//2.执行查询 
	            if(i!=0){ //3.查看查询状态
	            	//System.out.println("商品"+gid+"插入成功!");
	            	success=true;
		        }else {
		        	//System.out.println("商品"+gid+"插入失败!");
		        	success=false;
		        }
	            pstmt.close();
	            
	        } catch (SQLException e) {
	        	System.out.println(e.getMessage());
	        	success=false;
	        }  
	      return success;
	}
	
	public boolean delGoods(Integer cid) {//cid为购物车某条订单的id号
	    Connection conn = this.conn;
        
		boolean success=false;
    	try {   		
    		
    		String sql = "DELETE FROM carts WHERE  id = ? "; 
    		PreparedStatement pstmt = conn.prepareStatement(sql);  
    		pstmt.setInt(1, cid);
    		
    		int i = pstmt.executeUpdate();
            if(i!=0){  
            	//System.out.println("订单"+cid+"删除成功!");
            	success=true;
	        }else {  
	        	//System.out.println("订单"+cid+"删除失败!");
	        	success=false;
	        }
    		pstmt.close();
            
    	}catch (SQLException e) {
        	System.out.println(e.getMessage());
        	success=false;
        }
    	return success;
	}
	public Integer [] hasGoods(Integer uid,Integer gid) {//查询某一商品
		Integer[] info = new Integer[2];//新建数组,用来盛放商品的订单号和数量
		info[0]=0;info[1]=0;
		try { 
	    		ResultSet rs = null;   //建立一个空的结果集

	            //1.创建PreparedStatement 对象,让它与一条SQL模板绑定;
	    		String sql = "select id,num from carts where uid=? and gid=? ";
	    		PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);    		                               
	    		pstmt.setInt(1, uid);
	    		pstmt.setInt(2, gid);
	            //3.执行查询 
	            rs = pstmt.executeQuery();//执行查询   
	                     
                if(rs.next()){
                	info[0] = rs.getInt("id");
                	info[1] =rs.getInt("num");
	            }
                pstmt.close();
	            
	    }catch (SQLException e) {//捕捉、处理异常
	             System.out.println(e.getMessage());	            
	    }
		return info;
	}
	
	
	public ArrayList<Goods> queryGoods(Integer uid){//查询所有商品
		  
		 ArrayList<Goods> garray = new ArrayList<>();       
	      try { //1.编写预编译语句
	    	    String sql = "SELECT `carts`.`id`,`goods`.`name`,`goods`.`price`,`carts`.num FROM `carts` "
	    	    		+ "inner join `goods` on `carts`.`gid` = `goods`.`id`where uid= ?";
	    	    PreparedStatement pstmt = (PreparedStatement)conn.prepareStatement(sql);
	    	    pstmt.setInt(1, uid);
	            //2.执行查询 
	            ResultSet  rs = pstmt.executeQuery();//执行查询
	            int col = rs.getMetaData().getColumnCount();//获取字段数	            
	            
	                       
	          //4. 打印数据表结果	
	            
	            while (rs.next()) {
	            	   String id = Integer.toString(rs.getInt(1));
		               String gname = rs.getString(2);
		               float price= rs.getFloat(3);
		               int num = rs.getInt(4);
		               Goods g = new Goods(id,gname,price,num); 
		               garray.add(g);
		               //System.out.print(rs.getString(i) + "\t");	               
		         }      
	            
	        } catch (SQLException e) {
	        	System.out.println(e.getMessage());
	        }
	        
	      return garray;
	}
	public boolean modifyGoods(Integer cid,Integer num) {		
		  //修改商品
		  int i = 0;
		  if(num ==0 ) {//如果修改数量为0,直接删除			  
			  return delGoods(cid);
		  }
		  
	      String sql = "UPDATE carts SET num=?"  
	                 + " WHERE id=?";  
	      PreparedStatement pstmt;
	      boolean success = false;
	      try {
	             pstmt = (PreparedStatement) conn.prepareStatement(sql);
	             pstmt.setInt(1, num);
	             pstmt.setInt(2,cid);            
	             i = pstmt.executeUpdate();
	             if(i!=0){ 
	            	 //System.out.println("订单"+cid+"修改成功!");
	            	 success=true;
		         }else {
		        	 //System.out.println("订单"+cid+"修改失败!");
		        	 success = false;
		         }
	             pstmt.close();
	             
	         } catch (SQLException e) {
	         	 System.out.println(e.getMessage());
	         	 success = false;
	         }	
	       return success;
	}

	 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyCon.getConn();//建立数据库连接
		CartDao s = new CartDaoSQL(); 
		UserDao uds =new UserDaoSQL();
		GoodsDao g = new GoodsDaoSQL(); 
		
		/*选择一个用户id ,购物车是和用户身份相关联的 */
		System.out.println(uds.queryUser());
		System.out.println("请输入用户id号:");
		Scanner sc = new Scanner(System.in);
		int uid = Integer.valueOf(sc.next());//输入用户id号
		
		/* 向购物车中添加商品 */		
		System.out.println("商城现有商品:");
		System.out.println(g.findAll());
		int gid,num;
		System.out.println("您想购买什么商品?(输入商品id号)");
		gid = Integer.valueOf(sc.next());//输入商品id号
		System.out.println("购买该商品的数量为:");
		num = Integer.valueOf(sc.next());//输入商品购买数量
		System.out.println("添加商品操作:"+ s.addGoods(uid, gid, num));
		
		/* 查询购物车所有商品 */
		//获取购物车商品总数
		System.out.println("该用户购物车共有:" + s.getNum(uid)+" 件商品");
		//查询购物车所有商品
		System.out.println("该用户购物车如下所示:");
		System.out.println(s.queryGoods(uid));
		
		/*查看购物车内某商品是否存在 */
		System.out.println("商城现有商品:");
		System.out.println(g.findAll());
		System.out.println("您想查看什么商品在购物车内的情况?(输入商品id号)");
		gid = Integer.valueOf(sc.next());//输入商品id号
		Integer [] info = s.hasGoods(uid, gid);
		System.out.println("该商品在购物车内的订单号为:"+info[0]+",数量为:"+info[1]);
		
		/*修改购物车内商品数量 */		
		System.out.println("您想修改什么商品?(输入订单id号)");
		int cid = Integer.valueOf(sc.next());//输入商品id号
		System.out.println("修改后,该商品的数量为:");
		num = Integer.valueOf(sc.next());
		System.out.println("商品修改操作:"+s.modifyGoods(cid, num));
		//获取购物车商品总数
		System.out.println("该用户购物车共有:" + s.getNum(uid)+" 件商品");
		//查询购物车所有商品
		System.out.println("该用户购物车如下所示:");
		System.out.println(s.queryGoods(uid));
		
		/*删除购物车内商品 */
		//删除商品
		System.out.println("您想取消什么订单的购买?(输入订单id号)");
		cid = Integer.valueOf(sc.next());//输入订单id号
		System.out.println("商品删除操作:"+s.delGoods(cid));		
		//获取购物车商品总数
		System.out.println("该用户购物车共有:" + s.getNum(uid)+" 件商品");
		//查询购物车所有商品
		System.out.println("该用户购物车如下所示:");
		System.out.println(s.queryGoods(uid));
		
		
		sc.close();
		MyCon.disConn();//建立数据库连接
				
	}
		


}

业务逻辑层

创建服务类CartService

package service;

import java.util.ArrayList;
import java.util.Scanner;

import dao.*;
import entity.*;
//import exception.GoodsException;
/**
 * 这个类处理与购物车有关的业务逻辑
 */
public class CartsService {
	
	
	private CartDao cart ;//购物车
	private GoodsDao dbset;//商品库
	
	public CartsService() {
		cart =  new CartDaoSQL();
		dbset = new GoodsDaoSQL();
	}
        public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		MyCon.getConn();//建立数据库连接
		CartsService s = new CartsService();  
		UserDao uds =new UserDaoSQL();
		GoodsDao g = new GoodsDaoSQL();
              
		MyCon.disConn();//关闭数据库连接
       }
}


向购物车中添加商品addToCart()

    /**
	   * 添加购物车,向购物车中添加商品
	   * @param g 向仓库中添加的商品
	   * @return 值为空
	   */
	public String  addToCart(Integer uid,Integer gid,Integer n){	
	   
	   String message ="";
	   if(n<=0){
			message =  "商品数量必须大于0!";			
		}
	   Integer[] info = dbset.hasGoods(gid);//查询有无该商品,返回info[0]表示布尔值,info[1]表示商品数目
	   if(info[0] == 0) {//如果该商品不存在
		   message = "该商品已下架,请浏览其他商品!";
	   }else if (info[1] ==0) {//如果该商品数量为0
		   message = "该商品暂缺货,请浏览其他商品!";
	   }else if(info[1] < n) {
		   message = "该商品仅剩"+info[1] + "个,超过您的购买量,请调整购买量或选购其他商品";
	   }else {//如果以上情况都排除,可以将商品添加到购物车中了
		   boolean have=false,success=false;
		   Integer[] c= cart.hasGoods(uid, gid);//c[0] 返回订单号,c[1] 返回订单内商品数目
		   if(c[0]==0) {//购物车中原先没有此商品,直接添加即可
		       success= cart.addGoods(uid, gid, n);			  
		   }else {
			   success = cart.modifyGoods(c[0], c[1]+n);
		   }
		   if(success ==true) {
			   message ="该商品添加购物车成功!";
		   }else {
			   message ="该商品添加购物车失败!";
		   }
	   }
	   
		return message;
	}

从购物车删除商品delFromCart()

  /**
	   * 向购物车中删除商品
	   * @param g 向仓库中删除的商品
	   * @return 值为空
	   */
	public String delFromCart(Integer cid)  {
	
		System.out.println("现在开始从购物车中删除商品 ");
		String message="";
		
			
		if(cart.delGoods(cid)==true) {
			message =("订单"+ cid+" 取消成功!");
		}else {
			message =("订单"+ cid+" 取消失败!");
		}
		
		return message;
	
	}


查看购物车所有商品queryGoods( )

/**
	 * 查询购物车中的商品
	 * * @param 值为空
	   * @return 值为空
	 */
	
	public ArrayList<Goods> queryGoods(Integer uid ){
		
		ArrayList<Goods> goods = cart.queryGoods(uid);
		
		//测试代码
		/*
		System.out.println("购物车中现有商品数:");
		for(Goods g :goods) {
			System.out.println(g);
		}
		*/
		return goods;
			
		
	}

获取购物车商品数getNum()

public int getNum(Integer uid) {//获取商品数量
		
		return cart.getNum(uid);
	}


修改商品服务modifyCart

	/**
	   * 向购物车中修改商品的数量
	   * @param g 仓库中待修改的商品
	   * @param p 商品修改后的价格
	   * @return 值为空
	   */
	public String modifyCart(Integer cid,Integer num)  {
		System.out.println("现在开始修改商品 "+ cid+ " 的价格");
		String message="";
		   
		boolean success =cart.modifyGoods(cid, num);
		if(success ==true) {
			message =("订单"+ cid+" 修改成功!");
		}else {
			message =("订单"+ cid+" 修改失败!");
		}
		
		return message;
			
		
			
		    	
	}



在main方法中写测试代码

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		MyCon.getConn();//建立数据库连接
		CartsService s = new CartsService();  
		UserDao uds =new UserDaoSQL();
		GoodsDao g = new GoodsDaoSQL();
		
		/*选择一个用户id ,购物车是和用户身份相关联的 */
		System.out.println(uds.queryUser());
		System.out.println("请输入用户id号:");
		Scanner sc = new Scanner(System.in);
		int uid = Integer.valueOf(sc.next());//输入用户id号
		
		/* 向购物车中添加商品 */		
		System.out.println("商城现有商品:");
		System.out.println(g.findAll());
		int gid,num;
		System.out.println("您想购买什么商品?(输入商品id号)");
		gid = Integer.valueOf(sc.next());//输入商品id号
		System.out.println("购买该商品的数量为:");
		num = Integer.valueOf(sc.next());//输入商品购买数量
		System.out.println("添加商品操作:"+ s.addToCart(uid, gid, num));
		
		/* 查询购物车所有商品 */
		//获取购物车商品总数
		System.out.println("该用户购物车共有:" + s.getNum(uid)+" 件商品");
		//查询购物车所有商品
		System.out.println("该用户购物车如下所示:");
		System.out.println(s.queryGoods(uid));
		
			
		/*修改购物车内商品数量 */		
		System.out.println("您想修改什么商品?(输入订单id号)");
		int cid = Integer.valueOf(sc.next());//输入商品id号
		System.out.println("修改后,该商品的数量为:");
		num = Integer.valueOf(sc.next());
		System.out.println("商品修改操作:"+s.modifyCart(cid, num));
		//获取购物车商品总数
		System.out.println("该用户购物车共有:" + s.getNum(uid)+" 件商品");
		//查询购物车所有商品
		System.out.println("该用户购物车如下所示:");
		System.out.println(s.queryGoods(uid));
		
		/*删除购物车内商品 */
		//删除商品
		System.out.println("您想取消什么订单的购买?(输入订单id号)");
		cid = Integer.valueOf(sc.next());//输入订单id号
		System.out.println("商品删除操作:"+s.delFromCart(cid));		
		//获取购物车商品总数
		System.out.println("该用户购物车共有:" + s.getNum(uid)+" 件商品");
		//查询购物车所有商品
		System.out.println("该用户购物车如下所示:");
		System.out.println(s.queryGoods(uid));
		
		
		sc.close();
		MyCon.disConn();//关闭数据库连接
	}
}


完整代码

package service;

import java.util.ArrayList;
import java.util.Scanner;

import dao.*;
import entity.*;
//import exception.GoodsException;
/**
 * 这个类处理与购物车有关的业务逻辑
 */
public class CartsService {
	
	
	private CartDao cart ;//购物车
	private GoodsDao dbset;//商品库
	
	public CartsService() {
		cart =  new CartDaoSQL();
		dbset = new GoodsDaoSQL();
	}
   
    /**
	   * 添加购物车,向购物车中添加商品
	   * @param g 向仓库中添加的商品
	   * @return 值为空
	   */
	public String  addToCart(Integer uid,Integer gid,Integer n){	
	   
	   String message ="";
	   if(n<=0){
			message =  "商品数量必须大于0!";			
		}
	   Integer[] info = dbset.hasGoods(gid);//查询有无该商品,返回info[0]表示布尔值,info[1]表示商品数目
	   if(info[0] == 0) {//如果该商品不存在
		   message = "该商品已下架,请浏览其他商品!";
	   }else if (info[1] ==0) {//如果该商品数量为0
		   message = "该商品暂缺货,请浏览其他商品!";
	   }else if(info[1] < n) {
		   message = "该商品仅剩"+info[1] + "个,超过您的购买量,请调整购买量或选购其他商品";
	   }else {//如果以上情况都排除,可以将商品添加到购物车中了
		   boolean have=false,success=false;
		   Integer[] c= cart.hasGoods(uid, gid);//c[0] 返回订单号,c[1] 返回订单内商品数目
		   if(c[0]==0) {//购物车中原先没有此商品,直接添加即可
		       success= cart.addGoods(uid, gid, n);			  
		   }else {
			   success = cart.modifyGoods(c[0], c[1]+n);
		   }
		   if(success ==true) {
			   message ="该商品添加购物车成功!";
		   }else {
			   message ="该商品添加购物车失败!";
		   }
	   }
	   
		return message;
	}
   
    /**
	   * 向购物车中删除商品
	   * @param g 向仓库中删除的商品
	   * @return 值为空
	   */
	public String delFromCart(Integer cid)  {
	
		System.out.println("现在开始从购物车中删除商品 ");
		String message="";
		
			
		if(cart.delGoods(cid)==true) {
			message =("订单"+ cid+" 取消成功!");
		}else {
			message =("订单"+ cid+" 取消失败!");
		}
		
		return message;
	
	}
	/**
	 * 查询购物车中的商品
	 * * @param 值为空
	   * @return 值为空
	 */
	
	public ArrayList<Goods> queryGoods(Integer uid ){
		
		ArrayList<Goods> goods = cart.queryGoods(uid);
		
		//测试代码
		/*
		System.out.println("购物车中现有商品数:");
		for(Goods g :goods) {
			System.out.println(g);
		}
		*/
		return goods;
			
		
	}
	
	public int getNum(Integer uid) {//获取商品数量
		
		return cart.getNum(uid);
	}
	/**
	   * 向购物车中修改商品的数量
	   * @param g 仓库中待修改的商品
	   * @param p 商品修改后的价格
	   * @return 值为空
	   */
	public String modifyCart(Integer cid,Integer num)  {
		System.out.println("现在开始修改商品 "+ cid+ " 的价格");
		String message="";
		   
		boolean success =cart.modifyGoods(cid, num);
		if(success ==true) {
			message =("订单"+ cid+" 修改成功!");
		}else {
			message =("订单"+ cid+" 修改失败!");
		}
		
		return message;
			
		
			
		    	
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		MyCon.getConn();//建立数据库连接
		CartsService s = new CartsService();  
		UserDao uds =new UserDaoSQL();
		GoodsDao g = new GoodsDaoSQL();
		
		/*选择一个用户id ,购物车是和用户身份相关联的 */
		System.out.println(uds.queryUser());
		System.out.println("请输入用户id号:");
		Scanner sc = new Scanner(System.in);
		int uid = Integer.valueOf(sc.next());//输入用户id号
		
		/* 向购物车中添加商品 */		
		System.out.println("商城现有商品:");
		System.out.println(g.findAll());
		int gid,num;
		System.out.println("您想购买什么商品?(输入商品id号)");
		gid = Integer.valueOf(sc.next());//输入商品id号
		System.out.println("购买该商品的数量为:");
		num = Integer.valueOf(sc.next());//输入商品购买数量
		System.out.println("添加商品操作:"+ s.addToCart(uid, gid, num));
		
		/* 查询购物车所有商品 */
		//获取购物车商品总数
		System.out.println("该用户购物车共有:" + s.getNum(uid)+" 件商品");
		//查询购物车所有商品
		System.out.println("该用户购物车如下所示:");
		System.out.println(s.queryGoods(uid));
		
			
		/*修改购物车内商品数量 */		
		System.out.println("您想修改什么商品?(输入订单id号)");
		int cid = Integer.valueOf(sc.next());//输入商品id号
		System.out.println("修改后,该商品的数量为:");
		num = Integer.valueOf(sc.next());
		System.out.println("商品修改操作:"+s.modifyCart(cid, num));
		//获取购物车商品总数
		System.out.println("该用户购物车共有:" + s.getNum(uid)+" 件商品");
		//查询购物车所有商品
		System.out.println("该用户购物车如下所示:");
		System.out.println(s.queryGoods(uid));
		
		/*删除购物车内商品 */
		//删除商品
		System.out.println("您想取消什么订单的购买?(输入订单id号)");
		cid = Integer.valueOf(sc.next());//输入订单id号
		System.out.println("商品删除操作:"+s.delFromCart(cid));		
		//获取购物车商品总数
		System.out.println("该用户购物车共有:" + s.getNum(uid)+" 件商品");
		//查询购物车所有商品
		System.out.println("该用户购物车如下所示:");
		System.out.println(s.queryGoods(uid));
		
		
		sc.close();
		MyCon.disConn();//关闭数据库连接
	}
}

显示层

显示层 调用业务逻辑层的代码,完成查询


客户端

建立空的Main类

main包中建立Main类:

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

import dao.MyCon;
import service.*;

public class Main {
	public static void main(String[] args) {
		MyCon.getConn();//建立数据库连接	
		
		MyCon.disConn();//关闭数据库连接
	}
	
	
}

用户登录函数start()

public  static int start(Scanner sc){
		
		System.out.println("****************************");
		System.out.println("*****欢迎登录商院面馆平台客户端****");
		System.out.println("****************************");
		System.out.println("账号:");
		String uname = sc.nextLine();
		System.out.println("密码:");
		String pwd = sc.nextLine();
		//System.out.println("用户名为:"+uname+",密码为:"+pwd);	
		UserService us =new UserService(); 
		String info[]= us.login(uname,pwd);
	        System.out.println(info[1]);//打印登录信息
	        int uid = Integer.valueOf(info[0]);
	        return uid;
		 	
   }


菜单输出功能showMenu()

	public static 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" 
							+ "*******************************");
		
	    System.out.println("请选择(1-6):");
	}

用户选择功能getChoice()

public static void getChoice(Scanner sc,Integer uid) {
		
		 //获取用户对于菜单的选择
		   String value = sc.next();
		   int choise = Integer.valueOf(value);
		   int gid =0;int num =0;int cid=0;
		   GoodsService gs = new GoodsService();
		   CartsService cs = new CartsService();
		   switch(choise) {
				case 1:	//处理查询所有商品的业务
					System.out.println("您选择了:查询所有商品的业务");
					printArray(gs.queryGoods());//查询所有商品
					break;
				case 2:	//处理按商品编号查询
					System.out.println("您选择了: 按商品名称查询的业务");
					System.out.println("请输入关键词:");
					String gname = sc.next();
					printArray(gs.queryGoods(gname));
					break;
				case 3:	//购买商品,将商品加入到用户的购物车中
					System.out.println("您选择了:列出购买商品的业务");
					printArray(gs.queryGoods());
					System.out.println("请问您想购买什么餐品?输入餐品id");
					gid = Integer.valueOf(sc.next());
					System.out.println("购买后,该商品的数量为:");
					num = Integer.valueOf(sc.next());
					System.out.println(cs.addToCart(uid, gid, num));
					break;
				case 4:	//删除商品,从购物车中删除商品信息
					System.out.println("您选择了:处理删除商品的业务");
					System.out.println("请问您想删除什么订单?输入订单id");
					printArray(cs.queryGoods(uid));
					cid = Integer.valueOf(sc.next());
					System.out.println(cs.delFromCart(cid));
					break;
				case 5:	//显示某个用户购物车中所有的商品
					System.out.println("您选择了:显示查询购买情况");
					printArray(cs.queryGoods(uid));
					break;
				case 6:	//退出当前应用程序
					System.out.println("您选择了:退出当前应用程序");
					sc.close();
					System.exit(0);
					break;
				default:
					System.out.println("您的选择不正确");
			}
		   
	}

打印数组方法printArray

	public static <E>void printArray(ArrayList<E> inputArray) {
		  for ( E element : inputArray ){        
			  System.out.println(element);
	      }
	      System.out.println();
	}


在main中编写测试代码

	public static void main(String[] args) {
		MyCon.getConn();//建立数据库连接	
		Scanner sc = new Scanner(System.in);
		int uid = start(sc);
		if( uid!= 0) {
			while(true) {
				showMenu() ;
				getChoice(sc,uid );			  
			}
		}
		MyCon.disConn();
	}

完整代码

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

import dao.MyCon;
import service.CartsService;
import service.GoodsService;
import service.UserService;

public class Main {
	
public  static int start(Scanner sc){
		
		System.out.println("****************************");
		System.out.println("*****欢迎登录商院面馆平台客户端****");
		System.out.println("****************************");
		System.out.println("账号:");
		String uname = sc.nextLine();
		System.out.println("密码:");
		String pwd = sc.nextLine();
		//System.out.println("用户名为:"+uname+",密码为:"+pwd);	
		UserService us =new UserService(); 
		String info[]= us.login(uname,pwd);
	    System.out.println(info[1]);//打印登录信息
	    int uid = Integer.valueOf(info[0]);
	    return uid;
		 	
   }
	public static 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" 
							+ "*******************************");
		
	    System.out.println("请选择(1-6):");
	}
	public static void getChoice(Scanner sc,Integer uid) {
		
		 //获取用户对于菜单的选择
		   String value = sc.next();
		   int choise = Integer.valueOf(value);
		   int gid =0;int num =0;int cid=0;
		   GoodsService gs = new GoodsService();
		   CartsService cs = new CartsService();
		   switch(choise) {
				case 1:	//处理查询所有商品的业务
					System.out.println("您选择了:查询所有商品的业务");
					printArray(gs.queryGoods());//查询所有商品
					break;
				case 2:	//处理按商品编号查询
					System.out.println("您选择了: 按商品名称查询的业务");
					System.out.println("请输入关键词:");
					String gname = sc.next();
					printArray(gs.queryGoods(gname));
					break;
				case 3:	//购买商品,将商品加入到用户的购物车中
					System.out.println("您选择了:列出购买商品的业务");
					printArray(gs.queryGoods());
					System.out.println("请问您想购买什么餐品?输入餐品id");
					gid = Integer.valueOf(sc.next());
					System.out.println("购买后,该商品的数量为:");
					num = Integer.valueOf(sc.next());
					System.out.println(cs.addToCart(uid, gid, num));
					break;
				case 4:	//删除商品,从购物车中删除商品信息
					System.out.println("您选择了:处理删除商品的业务");
					System.out.println("请问您想删除什么订单?输入订单id");
					printArray(cs.queryGoods(uid));
					cid = Integer.valueOf(sc.next());
					System.out.println(cs.delFromCart(cid));
					break;
				case 5:	//显示某个用户购物车中所有的商品
					System.out.println("您选择了:显示查询购买情况");
					printArray(cs.queryGoods(uid));
					break;
				case 6:	//退出当前应用程序
					System.out.println("您选择了:退出当前应用程序");
					sc.close();
					System.exit(0);
					break;
				default:
					System.out.println("您的选择不正确");
			}
		   
	}
	public static <E>void printArray(ArrayList<E> inputArray) {
		  for ( E element : inputArray ){        
			  System.out.println(element);
	      }
	      System.out.println();
	}
	public static void main(String[] args) {
		MyCon.getConn();//建立数据库连接	
		Scanner sc = new Scanner(System.in);
		int uid = start(sc);
		if( uid!= 0) {
			while(true) {
				showMenu() ;
				getChoice(sc,uid );			  
			}
		}
		MyCon.disConn();
	}
	
	
}

管理端

管理端没有购物车功能,只有客户端有。