Java架构设计之购物车
任务描述
1.创建购物车操作的业务逻辑层
2. 对用户操作的数据访问层做必要改动
3. 编写表示层的代码
实训原理
表示层
表示层又称表现层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(); } }
管理端
管理端没有购物车功能,只有客户端有。