“Java架构设计之商品口”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
显示层
 
(未显示同一用户的13个中间版本)
第21行: 第21行:
 
数据访问层DAL是数据库的主要操控系统,实现数据的增加、删除、修改、查询等操作,并将操作结果反馈到业务逻辑层BLL。在实际运行的过程中,数据访问层没有逻辑判断能力,为了实现代码编写的严谨性,提高代码阅读程度,一般软件开发人员会在该层中编写DataAccessCommon,保证数据访问层DAL数据处理功能。
 
数据访问层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
 +
 +
数据表 goods:
 +
 +
CREATE TABLE IF NOT EXISTS `goods` (   
 +
      `id` INT unsigned AUTO_INCREMENT,     
 +
      `name` VARCHAR(100) NOT NULL,   
 +
        `price`  FLOAT NOT NULL,   
 +
        `num` INT(11) NOT NULL,     
 +
        PRIMARY KEY (`id`),   
 +
        UNIQUE KEY `gname` (`name`)
 +
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 +
 +
 +
desc goods;
 +
 +
+-------+------------------+------+-----+---------+----------------+
 +
| Field | Type            | Null | Key | Default | Extra          |
 +
+-------+------------------+------+-----+---------+----------------+
 +
| id    | int(10) unsigned | NO  | PRI | NULL    | auto_increment |
 +
| name  | varchar(100)    | NO  | UNI | NULL    |                |
 +
| price | float            | NO  |    | NULL    |                |
 +
| num  | int(11)          | NO  |    | NULL    |                |
 +
+-------+------------------+------+-----+---------+----------------+
 +
4 rows in set (0.02 sec)
 +
 +
</nowiki>
 +
===建立数据连接类MyCon===
 +
(此步如果所在项目已做,可忽略)
 +
 +
  <nowiki>
 +
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();
 +
}
 +
 +
}
 +
</nowiki>
 +
 +
运行一下,看看能否连接数据库 ?
 
==数据访问层==
 
==数据访问层==
 
===GoodsDao接口===
 
===GoodsDao接口===
本接口改动不大,主要是find和findALL返回值变成了ArrayList<User>类型。
 
  
变动的原因是 现在软件分层了,数据库查询到的数据不宜直接在dao层打印了,通过arraylist传出去
 
  
 
  <nowiki>
 
  <nowiki>
第36行: 第141行:
 
public interface GoodsDao {
 
public interface GoodsDao {
 
  public int getNum();
 
  public int getNum();
 +
 
 
  public boolean add(Goods g);//增加商品
 
  public boolean add(Goods g);//增加商品
 
   
 
   
  public boolean delete(String id);//删除商品
+
  public boolean delete(int id);//删除商品
 
   
 
   
 
  public ArrayList<Goods> findAll();//查询所有商品
 
  public ArrayList<Goods> findAll();//查询所有商品
 
   
 
   
  public ArrayList<Goods> find(String name);//查询某种商品是否存在
+
  public ArrayList<Goods> find(String name);//模糊查询,查询某关键词的商品是否存在
 +
 
 +
  public boolean modify(int id,float p);//修改商品
 
   
 
   
  public boolean modify(String id,float p);//修改商品
+
  public Integer [] hasGoods(String name);//精确查询,查询某种商品是否存在,返回id号和数量
 
   
 
   
  public int hasGoods(String name);//查询某种商品是否存在,返回id号
+
  public Integer[] hasGoods(int id);//查询某种商品是否存在,返回布尔值和数量
}</nowiki>
+
 
 +
 
 +
}
 +
</nowiki>
  
 
===创建GoodsDaoSQL实现类===
 
===创建GoodsDaoSQL实现类===
本类改动不大,主要是queryUser( )返回值变成了ArrayList<User>类型。
 
  
变动的原因是 现在软件分层了,数据库查询到的数据不宜直接在dao层打印了,通过arraylist传出去
 
  
 
  <nowiki>
 
  <nowiki>
第58行: 第167行:
  
 
import java.sql.*;
 
import java.sql.*;
import java.util.ArrayList;
+
import java.util.*;
 
 
 
import entity.*;
 
import entity.*;
  
 
public class GoodsDaoSQL implements GoodsDao{
 
public class GoodsDaoSQL implements GoodsDao{
// JDBC 驱动名及数据库 URL
+
 +
    Connection conn;
 
 
    Connection conn;
 
   
 
 
    public GoodsDaoSQL(){
 
    public GoodsDaoSQL(){
    this.getConn();
+
    conn  = MyCon.conn;//建立数据连接
 
    }
 
    }
    /**
+
            public static void main(String[] args) {
  * 连接数据库
+
// TODO Auto-generated method stub
  * @param 值为空
+
// TODO Auto-generated method stub
  * @return 布尔值
+
MyCon.getConn();//建立数据库连接
*/
+
GoodsDao s = new GoodsDaoSQL();
private boolean getConn() {    
+
            }
   
+
}
    //Connection conn = null;      
+
</nowiki>
        try {
+
===返回商品总数getNum()===
        final String JDBC_DRIVER = "com.mysql.jdbc.Driver";   
+
<nowiki>
    final String DB_URL = "jdbc:mysql://10.0.0.30:3306/cloud?characterEncoding=utf8";
+
/*
    // static final String DB_URL = "jdbc:mysql://localhost:3306/cloud?characterEncoding=utf8";
+
* 功能:返回商品库的总数目
 +
*/
 +
  public int getNum() {
 +
 +
    int rowCount = 0;
 +
    try {
 +
    ResultSet rs = null;  //建立一个空的结果集
 +
            //1.创建PreparedStatement 对象,让它与一条SQL模板绑定;
 +
    String sql = "select count(*) record from  goods";
 +
    PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);                         
 +
                //2.执行查询
 +
            rs = pstmt.executeQuery();//执行查询          
 +
            if(rs.next()){
 +
              rowCount=rs.getInt("record");
 +
            }
 +
                pstmt.close();        
 +
           
 +
    }catch (SQLException e) {//捕捉、处理异常
 +
            System.out.println(e.getMessage());
 +
    }
 +
  return rowCount;
 +
  }</nowiki>
 +
 
 +
 
 +
===增加操作add( )===
 +
 
 +
<nowiki>
 +
  public boolean add(Goods g) {//增加商品
 +
 
 +
      try {
 +
      Connection conn =  this.conn;
 +
      int i = 0;
 +
      String sql = "insert into goods (name,price,num) values(?,?,?)";
 +
      PreparedStatement pstmt;
 +
     
 +
            pstmt = (PreparedStatement) conn.prepareStatement(sql);
 +
            pstmt.setString(1, g.getName());
 +
            pstmt.setFloat(2, g.getPrice());  //pstmt.setInt(2, user.getAge()); pstmt.setDate 
 +
            pstmt.setInt(3, g.getNum()); 
 +
           
 +
            i = pstmt.executeUpdate();
 +
            pstmt.close();
 +
            if(i!=0){
 +
            return true;
 +
            //System.out.println(g.getName()+"插入成功!");
 +
        }         
 +
           
 +
        } catch (SQLException e) {
 +
        System.out.println(e.getMessage());
 +
        }
 +
      return false;
 +
         
 +
  }</nowiki>
 +
 
 +
===按id号查询有无特定商品hasGoods(int id)===
 +
 
 +
<nowiki>
 +
  public Integer[] hasGoods(int id){//按id查询某一商品
 +
  Integer [] info = new Integer[2];
 +
  info[0] =0;info[1]=0;//info[0]表示是否存在,info[1] 表示该商品的数目
 +
 
 +
  try {  
 +
    ResultSet rs = null;  //建立一个空的结果集
 +
            //1.创建PreparedStatement 对象,让它与一条SQL模板绑定;
 +
    String sql = "select num  from  goods where id = ?";
 +
    PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
 +
    pstmt.setInt(1, id);
 +
                //2.执行查询
 +
            rs = pstmt.executeQuery();//执行查询          
 +
            if(rs.next()) {
 +
              info[0] = 1;
 +
              info[1] = rs.getInt("num");
 +
            }
 +
                pstmt.close();        
 +
           
 +
  }catch (SQLException e) {//捕捉、处理异常
 +
            System.out.println(e.getMessage());
 +
           
 +
  }
 +
  return info;
 +
}</nowiki>
 +
 
 +
===按商品全名查找有无特定商品hasGoods(String name)===
 +
  <nowiki>
 +
public Integer[] hasGoods(String name) {//查询某一商品
 +
Integer [] info = new Integer[2];
 +
info[0]=0;info[1]=0;
 +
try {
 +
    ResultSet rs = null;  //建立一个空的结果集
 +
 
 +
    //1.创建PreparedStatement 对象,让它与一条SQL模板绑定;
 +
    String sql = "select id,num from goods where name = ?";
 +
    PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
 +
   
 +
            //使用2. setXXX()系列方法为sql命令设置值
 +
    pstmt.setString(1, name);// 
 +
            //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;
 +
}</nowiki>
 +
===删除操作delete()===
 +
 
 +
<nowiki>
 +
public boolean delete(int id) {//删除商品
 +
    Connection conn = this.conn;
 +
        int i = 0;
 +
String sql = "DELETE FROM goods WHERE id = ?";
 +
 +
    try { 
 +
         
 +
    PreparedStatement pstmt = conn.prepareStatement(sql); 
 +
    pstmt.setInt(1, id);           
 +
    i = pstmt.executeUpdate();
 +
    pstmt.close();
 +
            if(i!=0){
 +
                return true;
 +
                //System.out.println("商品"+id+"删除成功!");
 +
        }else {
 +
            return false;
 +
            //System.out.println("商品"+id+"删除失败!");
 +
        }
 
   
 
   
    // 数据库的用户名与密码,需要根据自己的设置
+
             
    final String USER = "root";
+
    }catch (SQLException e) {
        final String PASS = "000000";
 
       
 
            Class.forName(JDBC_DRIVER); //classLoader,加载对应驱动
 
            this.conn = (Connection) DriverManager.getConnection(DB_URL, USER, PASS);
 
            System.out.println("MySQL连接成功!");
 
        } catch (ClassNotFoundException e) {
 
 
        System.out.println(e.getMessage());
 
        System.out.println(e.getMessage());
        return false;
+
        }    
 +
    return false;
 +
  }
 +
  </nowiki>
 +
 
 +
===查询所有操作findAll()===
 +
<nowiki>
 +
  public ArrayList<Goods> findAll() {//查询所有商品
 +
 
 +
  ArrayList<Goods> garray = new ArrayList<>();
 +
     
 +
      try {
 +
        String sql = "select * from goods";
 +
        PreparedStatement  pstmt = (PreparedStatement)conn.prepareStatement(sql);
 +
           
 +
            //3.执行查询
 +
            ResultSet  rs = pstmt.executeQuery();//执行查询
 +
            int col = rs.getMetaData().getColumnCount();//获取字段数     
 +
           
 +
         
 +
            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) {
 
        } catch (SQLException e) {
 
        System.out.println(e.getMessage());
 
        System.out.println(e.getMessage());
        return false;
 
 
        }
 
        }
        return true;
+
        return garray;
  }
+
  }</nowiki>
}
+
 
 +
===搜索操作find()===
 +
 
 +
<nowiki>
 +
  public ArrayList<Goods> find(String name) {//查询某种商品是否存在
 +
  ArrayList<Goods> garray = new ArrayList<>();
 +
  try {
 +
    ResultSet rs = null;  //建立一个空的结果集
 +
 
 +
            //1.创建PreparedStatement 对象,让它与一条SQL模板绑定;
 +
    String sql = "select * from goods where name LIKE ?";
 +
    PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
 +
   
 +
            //使用2. setXXX()系列方法为sql命令设置值
 +
    pstmt.setString(1, "%"+name+"%");//                       
 +
 
 +
            //3.执行查询
 +
            rs = pstmt.executeQuery();//执行查询
 +
            int col = rs.getMetaData().getColumnCount();//获取字段数                   
 +
                     
 +
            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");              
 +
        }     
 +
         
 +
      pstmt.close();
 +
   
 +
           
 +
    }catch (SQLException e) {//捕捉、处理异常
 +
            System.out.println(e.getMessage());
 +
        }
 +
  return garray;
 +
  }
 
</nowiki>
 
</nowiki>
  
  
 +
 +
===修改价格操作modify()===
 +
 +
<nowiki>
 +
public boolean modify(int id,float p) {
 +
  //修改商品
 +
       
 +
      try { 
 +
        String sql = "UPDATE goods SET  price=?" 
 +
                + " WHERE id=?"; 
 +
        PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
 +
            pstmt.setFloat(1, p);
 +
            pstmt.setInt(2,id);           
 +
            int i = pstmt.executeUpdate();
 +
            pstmt.close();
 +
           
 +
            if(i!=0){ //如果影响行数非零,说明修改成功
 +
           
 +
            return true;            
 +
        }
 +
           
 +
           
 +
        } catch (SQLException e) {
 +
        System.out.println(e.getMessage());
 +
        }
 +
      return false;
 +
               
 +
  }</nowiki>
 +
 +
===在main方法编写测试代码===
 +
 +
<nowiki>
 +
public static void main(String[] args) {
 +
// TODO Auto-generated method stub
 +
// TODO Auto-generated method stub
 +
MyCon.getConn();//建立数据库连接
 +
GoodsDao s = new GoodsDaoSQL();
 +
Scanner sc = new Scanner(System.in);
 +
 +
/*向商品库中添加商品 */
 +
Goods g1= new Goods("1","山西刀削面",105.0f,30);
 +
Goods g2= new Noodles("2","兰州牛肉面",15.0f,20);
 +
Goods g3= new Rice("3","黄焖鸡米饭",12.0f,30,false);
 +
 +
//添加元素
 +
System.out.println("执行添加餐品操作...");
 +
System.out.println("添加餐品结果:"+s.add(g1));
 +
System.out.println("添加餐品结果:"+s.add(g2));
 +
System.out.println("添加餐品结果:"+s.add(g3));
 +
 +
System.out.println("共找到商品?种:"+s.getNum());
 +
System.out.println("以下为商品详情信息:");
 +
System.out.println(s.findAll());
 +
 +
/*修改商品库中商品的价格 */
 +
System.out.println("请问您想修改什么餐品?输入餐品全名");
 +
String name = sc.next();
 +
System.out.println("餐品修改后的价格为?");
 +
float price= Float.valueOf(sc.next());
 +
Integer[] info =s.hasGoods(name);
 +
System.out.println("该商品的id为:"+ info[0]+",数量为:"+info[1]);
 +
System.out.println("修改餐品结果:"+s.modify(info[0], price));
 +
System.out.println(s.findAll());
 +
 +
 +
/* 删除商品库中商品 */
 +
System.out.println("执行删除餐品操作...");
 +
System.out.println("请问您想删除什么餐品?输入餐品id");
 +
int id = Integer.valueOf(sc.next());
 +
Integer[] info2 = s.hasGoods(id);
 +
if( info2[0] == 1 ){ //如果被删除产品在库中存在
 +
System.out.println("id号为"+id+"餐品现在在库中存在,商品数量为:"+info[1]);
 +
System.out.println("删除餐品结果:"+s.delete(id));
 +
}else {System.out.println("id号为"+id+"餐品现在在库中不存在");}
 +
 +
 +
/* 查询所有商品 */
 +
System.out.println(s.findAll());
 +
 +
/* 根据商品名称查找商品 */
 +
System.out.println("请问您想查询什么餐品?输入餐品关键词:");
 +
name = sc.next();
 +
System.out.println("共找到以下商品:");
 +
System.out.println(s.find(name));
 +
 +
sc.close();
 +
MyCon.disConn();//建立数据库连接
 +
 +
}
 +
</nowiki>
  
 
==业务逻辑层==
 
==业务逻辑层==
第109行: 第495行:
  
 
  <nowiki>
 
  <nowiki>
package service;
+
public static void main(String[] args) {
 +
// TODO Auto-generated method stub
 +
MyCon.getConn();//建立数据库连接
 +
Scanner sc = new Scanner(System.in);
 +
GoodsService s = new GoodsService();  
  
import java.util.ArrayList;
+
                sc.close();
 
+
MyCon.disConn();//关闭数据库连接
import dao.*;
 
import entity.*;
 
//import exception.GoodsException;
 
/**
 
* 这个类处理与商品有关的业务逻辑
 
*/
 
public class GoodsService {
 
 
 
private GoodsDao dbset ;
 
 
 
public GoodsService() {
 
dbset =  new GoodsDaoSQL();
 
}
 
        public static void main(String[] args) {
 
        }
 
}
 
 
</nowiki>
 
</nowiki>
  
===添加商品addGoods()===
+
===添加商品服务addGoods()===
 
  <nowiki>
 
  <nowiki>
/**
+
  /**
 
  * 商品上架,向数据仓库中添加商品
 
  * 商品上架,向数据仓库中添加商品
 
  * @param g 向仓库中添加的商品
 
  * @param g 向仓库中添加的商品
 
  * @return 值为空
 
  * @return 值为空
 
  */
 
  */
  public void addGoods(Goods  g){
+
    public String addGoods(Goods  g){
 
   
 
   
 +
      String message = "";
 
  String name = g.getName();
 
  String name = g.getName();
  int id = dbset.hasGoods(name);//查询有无该商品,返回商品id号
+
   
  if(id == 0){ //如果没有该商品,再执行上架操作    
+
  Integer [] info = dbset.hasGoods(name);//查询有无该商品,返回商品id号和数量
 +
  if(info[0] == 0){ //如果没有该商品,才能执行上架操作    
 
  if(dbset.add(g)==true) {
 
  if(dbset.add(g)==true) {
      System.out.println("    商品 "+g.getName() +" 成功上架");
+
      message =  "    商品 "+g.getName() +" 成功上架";
 
  }else {
 
  }else {
  System.out.println("    商品 "+g.getName() +" 上架失败");
+
  message = "    商品 "+g.getName() +" 上架失败";
 
  }
 
  }
 
  }else {
 
  }else {
  System.out.println("    商品 "+g.getName() +"已存在");
+
      message = "    商品 "+g.getName() +"已存在";
 
  }  
 
  }  
 +
  return message;
 
 
 
}
 
}
 
 
</nowiki>
 
</nowiki>
  
===删除商品delGoods()===
+
===删除商品服务delGoods()===
  
  
  <nowiki>/**
+
  <nowiki>
 +
  /**
 
  * 向数据仓库中删除商品
 
  * 向数据仓库中删除商品
 
  * @param g 向仓库中删除的商品
 
  * @param g 向仓库中删除的商品
 
  * @return 值为空
 
  * @return 值为空
 
  */
 
  */
public void delGoods(String name)  {
+
public String delGoods(int id)  {
 
//try{
 
//try{
 +
String message = "";
 
System.out.println("现在开始向库中删除商品 ");
 
System.out.println("现在开始向库中删除商品 ");
int id = dbset.hasGoods(name);//查询有无该商品,返回商品id号
+
Integer[] info = dbset.hasGoods(id);//查询有无该商品,返回布尔值和数量
if(id!=0){//确定有该商品再执行删除操作
+
if(info[0] ==1){//确定有该商品再执行删除操作
if(dbset.delete(Integer.toString(id))==true) {
+
if(dbset.delete(id)==true) {
        System.out.println("商品"+ name+" 下架成功!");
+
message =("商品"+ id+" 下架成功!");
 
}else {
 
}else {
System.out.println("商品"+ name+" 下架失败!");
+
message =("商品"+ id+" 下架失败!");
 
}
 
}
}else{
+
}else{//如果该商品不在库中
 
//throw new GoodsException("要删除的商品"+id+" 不存在哦!");
 
//throw new GoodsException("要删除的商品"+id+" 不存在哦!");
System.out.println("要删除的商品"+name+" 不存在");
+
message =("要删除的商品"+id +" 不存在");
 
}
 
}
 
System.out.println();
 
System.out.println();
第184行: 第560行:
 
//System.out.println(e.toString());
 
//System.out.println(e.toString());
 
//}
 
//}
 +
  return message;
 
}</nowiki>
 
}</nowiki>
  
===查看所有商品queryGoods( )===
+
===查看所有商品服务queryGoods( )===
 
  <nowiki>
 
  <nowiki>
/**
+
/**
 
* 查询仓库中的商品
 
* 查询仓库中的商品
 
* * @param 值为空
 
* * @param 值为空
第194行: 第571行:
 
*/
 
*/
 
 
public void queryGoods( ){
+
public ArrayList<Goods> queryGoods( ){
 
 
 
ArrayList<Goods> goods = dbset.findAll();
 
ArrayList<Goods> goods = dbset.findAll();
 +
/*
 
System.out.println("本店现有商品数:");
 
System.out.println("本店现有商品数:");
 
for(Goods g :goods) {
 
for(Goods g :goods) {
第202行: 第580行:
 
}
 
}
 
System.out.println();;
 
System.out.println();;
+
*/
 +
 +
return goods;
 
 
 
}</nowiki>
 
}</nowiki>
  
===搜索商品queryGoods(String name)===
+
===搜索商品服务queryGoods(String name)===
  
 
  <nowiki>/**
 
  <nowiki>/**
第214行: 第594行:
 
*/
 
*/
 
 
public void queryGoods(String name)  {
+
public ArrayList<Goods> queryGoods(String name)  {
 
 
 
ArrayList<Goods> goods = dbset.find(name);
 
ArrayList<Goods> goods = dbset.find(name);
 +
 +
/*
 
System.out.println("查询到名称为"+name+"商品有:");
 
System.out.println("查询到名称为"+name+"商品有:");
 
for(Goods g :goods) {
 
for(Goods g :goods) {
 
System.out.println(g);
 
System.out.println(g);
 +
 
}
 
}
 
System.out.println();;
 
System.out.println();;
}</nowiki>
+
*/
 +
return goods;
 +
}
 +
</nowiki>
  
  
===查询函数queryUser( )===
+
===修改商品服务modifyGoods()===
这个功能要完成,需要把UserDao的queryUser( )返回值改为ArrayList<User>,这个我们稍后处理
 
 
 
<nowiki>/**
 
* 查询仓库中的用户
 
*/
 
public void queryUser( ){
 
System.out.println("本店现有如下用户:");
 
ArrayList<User> users =userset.queryUser();
 
                //测试代码
 
for(User user:users){
 
System.out.println(user);
 
}
 
System.out.println();
 
}</nowiki>
 
 
 
===修改商品modifyGoods()===
 
  
 
  <nowiki>
 
  <nowiki>
第251行: 第621行:
 
  * @return 值为空
 
  * @return 值为空
 
  */
 
  */
public void modifyGoods(String name,float p)  {
+
public String modifyGoods(int id,float p)  {
System.out.println("现在开始修改商品 "+name+ " 的价格");
+
String message = "";
 +
 
//try{
 
//try{
    int id = dbset.hasGoods(name);
+
    Integer[] info = dbset.hasGoods(id);//查询有无该商品,返回布尔值和数量
    if(id==0){//如果查不到这个商品
+
    if(info[0] ==0){//确定有该商品再执行修改操作    
 
//throw new GoodsException("要修改的商品"+g.getName()+" 不存在哦!");
 
//throw new GoodsException("要修改的商品"+g.getName()+" 不存在哦!");
System.out.println("要修改的商品"+name+" 不存在");
+
    message =("要修改的商品"+id+" 不存在");
 
}else {//查到这个商品了,可以做进一步操作
 
}else {//查到这个商品了,可以做进一步操作
    dbset.modify(Integer.toString(id), p);
+
    dbset.modify(id, p);
System.out.println(name+" 的价格更改为 " + p+ " 元");
+
    message =(id+" 的价格更改为 " + p+ " 元");
    System.out.println();
+
   
 
}
 
}
 
//}catch( GoodsException e){
 
//}catch( GoodsException e){
 
//System.out.println(e.toString());
 
//System.out.println(e.toString());
 
//}
 
//}
+
return message;
 
   
 
   
 
}
 
}
第276行: 第647行:
 
public static void main(String[] args) {
 
public static void main(String[] args) {
 
// TODO Auto-generated method stub
 
// TODO Auto-generated method stub
 +
MyCon.getConn();//建立数据库连接
 +
Scanner sc = new Scanner(System.in);
 
GoodsService s = new GoodsService();  
 
GoodsService s = new GoodsService();  
//GoodsDao s = new GoodsDaoSet();
+
 
//GoodsDao s = new GoodsDaoArrayList();
+
/* 商品上架 */
//GoodsDao s = new GoodsDaoLinkedList();
 
 
 
Goods g1= new Goods("1","山西刀削面",105.0f,30);
 
Goods g1= new Goods("1","山西刀削面",105.0f,30);
 
Goods g2= new Noodles("2","兰州牛肉面",15.0f,20);
 
Goods g2= new Noodles("2","兰州牛肉面",15.0f,20);
 
Goods g3= new Rice("3","黄焖鸡米饭",12.0f,30,false);
 
Goods g3= new Rice("3","黄焖鸡米饭",12.0f,30,false);
 
 
//商品上架
 
 
System.out.println("执行添加餐品操作...");
 
System.out.println("执行添加餐品操作...");
s.addGoods(g1);
+
System.out.println(s.addGoods(g1));
s.addGoods(g2);
+
System.out.println(s.addGoods(g2));
s.addGoods(g3);
+
System.out.println(s.addGoods(g3));
 
 
 
//System.out.println("共找到商品?件:"+s.getNum());
 
//System.out.println("共找到商品?件:"+s.getNum());
 
System.out.println("以下为商品详情信息:");
 
System.out.println("以下为商品详情信息:");
s.queryGoods();
+
System.out.println(s.queryGoods());
 +
 +
/*修改商品价格 */
 +
System.out.println("执行修改价格操作...");
 +
System.out.println("请问您想修改什么餐品?输入餐品id");
 +
int id = Integer.valueOf(sc.next());
 +
System.out.println("餐品修改后的价格为?");
 +
float price= Float.valueOf(sc.next());
 +
System.out.println("该商品的id为:"+ id+",修改后的价格为:"+price);
 +
System.out.println(s.modifyGoods(id,price));
 +
 +
/*根据商品名称查找商品*/
 +
System.out.println("执行关键词查询商品操作...");
 +
System.out.println("请问您想查询什么餐品?输入餐品关键词:");
 +
String name = sc.next();
 +
System.out.println("查询到名称为"+name+"商品有:");
 +
System.out.println(s.queryGoods(name));
 +
 +
/* 查询所有商品  */
 +
System.out.println("执行查询所有商品操作...");
 +
System.out.println(s.queryGoods());
 
 
//商品下架
+
/*商品下架 */
 
System.out.println("执行删除餐品操作...");
 
System.out.println("执行删除餐品操作...");
s.delGoods("山西刀削面");
+
System.out.println("请问您想删除什么餐品?输入餐品id");
//查询所有商品
+
id = Integer.valueOf(sc.next());
s.queryGoods();
+
System.out.println(s.delGoods(id));
 
 
System.out.println("修改兰州牛肉面的价格为15:");
+
sc.close();
s.modifyGoods("兰州牛肉面", 15f);
+
MyCon.disConn();//关闭数据库连接
 
//根据商品名称查找商品
 
String name="牛肉面";
 
s.queryGoods(name);
 
 
}</nowiki>
 
}</nowiki>
  
 
===完整代码===
 
===完整代码===
 +
 
  <nowiki>
 
  <nowiki>
 +
package service;
 +
 +
import java.util.ArrayList;
 +
import java.util.Scanner;
 +
 +
import dao.*;
 +
import entity.*;
 +
//import exception.GoodsException;
 +
/**
 +
* 这个类处理与商品有关的业务逻辑
 +
*/
 +
public class GoodsService {
 +
 +
 +
private GoodsDao dbset ;
 +
 +
 +
public GoodsService() {
 +
dbset =  new GoodsDaoSQL();
 +
}
 +
 
 +
    /**
 +
  * 商品上架,向数据仓库中添加商品
 +
  * @param g 向仓库中添加的商品
 +
  * @return 值为空
 +
  */
 +
    public String addGoods(Goods  g){
 +
 
 +
      String message = "";
 +
  String name = g.getName();
 +
 
 +
  Integer [] info = dbset.hasGoods(name);//查询有无该商品,返回商品id号和数量
 +
  if(info[0] == 0){ //如果没有该商品,才能执行上架操作  
 +
  if(dbset.add(g)==true) {
 +
      message =  "    商品 "+g.getName() +" 成功上架";
 +
  }else {
 +
  message = "    商品 "+g.getName() +" 上架失败";
 +
  }
 +
  }else {
 +
      message = "    商品 "+g.getName() +"已存在";
 +
  }
 +
  return message;
 +
 +
}
 +
    /**
 +
  * 向数据仓库中删除商品
 +
  * @param g 向仓库中删除的商品
 +
  * @return 值为空
 +
  */
 +
public String delGoods(int id)  {
 +
//try{
 +
String message = "";
 +
System.out.println("现在开始向库中删除商品 ");
 +
Integer[] info = dbset.hasGoods(id);//查询有无该商品,返回布尔值和数量
 +
if(info[0] ==1){//确定有该商品再执行删除操作
 +
if(dbset.delete(id)==true) {
 +
message =("商品"+ id+" 下架成功!");
 +
}else {
 +
message =("商品"+ id+" 下架失败!");
 +
}
 +
}else{//如果该商品不在库中
 +
//throw new GoodsException("要删除的商品"+id+" 不存在哦!");
 +
message =("要删除的商品"+id +" 不存在");
 +
}
 +
System.out.println();
 +
//}catch(GoodsException e){
 +
//System.out.println(e.toString());
 +
//}
 +
  return message;
 +
}
 +
/**
 +
* 查询仓库中的商品
 +
* * @param 值为空
 +
  * @return 值为空
 +
*/
 +
 +
public ArrayList<Goods>  queryGoods( ){
 +
 +
ArrayList<Goods> goods = dbset.findAll();
 +
/*
 +
System.out.println("本店现有商品数:");
 +
for(Goods g :goods) {
 +
System.out.println(g);
 +
}
 +
System.out.println();;
 +
*/
 +
 +
return goods;
 +
 +
}
 +
/**
 +
* 查询仓库中的商品
 +
* * @param 值为空
 +
  * @return 值为空
 +
*/
 +
 +
public ArrayList<Goods> queryGoods(String name)  {
 +
 +
ArrayList<Goods> goods = dbset.find(name);
 +
 +
/*
 +
System.out.println("查询到名称为"+name+"商品有:");
 +
for(Goods g :goods) {
 +
System.out.println(g);
 +
 +
}
 +
System.out.println();;
 +
*/
 +
return goods;
 +
}
 +
 +
/**
 +
  * 向数据仓库中修改商品的数量
 +
  * @param g 仓库中待修改的商品
 +
  * @param p 商品修改后的价格
 +
  * @return 值为空
 +
  */
 +
public String modifyGoods(int id,float p)  {
 +
String message = "";
 +
 +
//try{
 +
    Integer[] info = dbset.hasGoods(id);//查询有无该商品,返回布尔值和数量
 +
    if(info[0] ==0){//确定有该商品再执行修改操作    
 +
//throw new GoodsException("要修改的商品"+g.getName()+" 不存在哦!");
 +
    message =("要修改的商品"+id+" 不存在");
 +
}else {//查到这个商品了,可以做进一步操作
 +
    dbset.modify(id, p);
 +
    message =(id+" 的价格更改为 " + p+ " 元");
 +
   
 +
}
 +
//}catch( GoodsException e){
 +
//System.out.println(e.toString());
 +
//}
 +
return message;
 +
   
 +
}
 +
public static void main(String[] args) {
 +
// TODO Auto-generated method stub
 +
MyCon.getConn();//建立数据库连接
 +
Scanner sc = new Scanner(System.in);
 +
GoodsService s = new GoodsService();
 +
 +
/* 商品上架 */
 +
Goods g1= new Goods("1","山西刀削面",105.0f,30);
 +
Goods g2= new Noodles("2","兰州牛肉面",15.0f,20);
 +
Goods g3= new Rice("3","黄焖鸡米饭",12.0f,30,false);
 +
 +
System.out.println("执行添加餐品操作...");
 +
System.out.println(s.addGoods(g1));
 +
System.out.println(s.addGoods(g2));
 +
System.out.println(s.addGoods(g3));
 +
 +
//System.out.println("共找到商品?件:"+s.getNum());
 +
System.out.println("以下为商品详情信息:");
 +
System.out.println(s.queryGoods());
 +
 +
/*修改商品价格 */
 +
System.out.println("执行修改价格操作...");
 +
System.out.println("请问您想修改什么餐品?输入餐品id");
 +
int id = Integer.valueOf(sc.next());
 +
System.out.println("餐品修改后的价格为?");
 +
float price= Float.valueOf(sc.next());
 +
System.out.println("该商品的id为:"+ id+",修改后的价格为:"+price);
 +
System.out.println(s.modifyGoods(id,price));
 +
 +
/*根据商品名称查找商品*/
 +
System.out.println("执行关键词查询商品操作...");
 +
System.out.println("请问您想查询什么餐品?输入餐品关键词:");
 +
String name = sc.next();
 +
System.out.println("查询到名称为"+name+"商品有:");
 +
System.out.println(s.queryGoods(name));
 +
 +
/* 查询所有商品  */
 +
System.out.println("执行查询所有商品操作...");
 +
System.out.println(s.queryGoods());
 +
 +
/*商品下架 */
 +
System.out.println("执行删除餐品操作...");
 +
System.out.println("请问您想删除什么餐品?输入餐品id");
 +
id = Integer.valueOf(sc.next());
 +
System.out.println(s.delGoods(id));
 +
 +
sc.close();
 +
MyCon.disConn();//关闭数据库连接
 +
}
 +
}
 
</nowiki>
 
</nowiki>
 
  
 
==显示层==
 
==显示层==
 
显示层 调用业务逻辑层的代码,完成查询
 
显示层 调用业务逻辑层的代码,完成查询
  
[[文件:java2020-12-4.png]]
+
===客户端===
 +
main包 中 Main类:
  
===客户端===
+
====用户登录功能start()====
main/TestUser:
+
<nowiki>
   
+
public  static int start(Scanner sc){
  <nowiki>package main;
+
 +
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;
 +
 +
  }</nowiki>
 +
====菜单输出功能showMenu()====
 +
<nowiki>
 +
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):");
 +
}</nowiki>
 +
 
 +
====用户选择功能getChoice()====
 +
<nowiki>
 +
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("您选择了:列出购买商品的业务");
 +
//此功能暂不开放
 +
                        break;
 +
case 4: //删除商品,从购物车中删除商品信息
 +
System.out.println("您选择了:处理删除商品的业务");
 +
//此功能暂不开放
 +
                        break;
 +
case 5: //显示某个用户购物车中所有的商品
 +
System.out.println("您选择了:显示查询购买情况");
 +
//此功能暂不开放
 +
                        break;
 +
case 6: //退出当前应用程序
 +
System.out.println("您选择了:退出当前应用程序");
 +
sc.close();
 +
System.exit(0);
 +
break;
 +
default:
 +
System.out.println("您的选择不正确");
 +
}
 +
 
 +
}</nowiki>
 +
====打印输出函数printArray()====
 +
  <nowiki>public static <E>void printArray(ArrayList<E> inputArray) {
 +
  for ( E element : inputArray ){       
 +
  System.out.println(element);
 +
      }
 +
      System.out.println();
 +
}</nowiki>
 +
====在main中编写测试代码====
 +
  <nowiki>
 +
MyCon.getConn();//建立数据库连接
 +
Scanner sc = new Scanner(System.in);
 +
int uid = start(sc);
 +
if( uid!= 0) {
 +
while(true) {
 +
showMenu() ;
 +
getChoice(sc,uid );  
 +
}
 +
}
 +
MyCon.disConn();</nowiki>
 +
====完整代码====
  
 +
<nowiki>
 +
package main;
 +
import java.util.ArrayList;
 
import java.util.Scanner;
 
import java.util.Scanner;
import service.*;
 
  
public class TestUser {
+
import dao.MyCon;
public  static void start(Scanner sc){
+
import service.CartsService;
 +
import service.GoodsService;
 +
import service.UserService;
 +
 
 +
public class Main {
 +
 +
public  static int start(Scanner sc){
 
 
 
System.out.println("****************************");
 
System.out.println("****************************");
第339行: 第1,014行:
 
//System.out.println("用户名为:"+uname+",密码为:"+pwd);
 
//System.out.println("用户名为:"+uname+",密码为:"+pwd);
 
UserService us =new UserService();  
 
UserService us =new UserService();  
    us.login(uname,pwd);//向下调用业务逻辑层的代码
+
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("您选择了:列出购买商品的业务");
 +
//此功能暂不开放
 +
                        break;
 +
case 4: //删除商品,从购物车中删除商品信息
 +
System.out.println("您选择了:处理删除商品的业务");
 +
//此功能暂不开放
 +
                        break;
 +
case 5: //显示某个用户购物车中所有的商品
 +
System.out.println("您选择了:显示查询购买情况");
 +
//此功能暂不开放
 +
                        break;
 +
case 6: //退出当前应用程序
 +
System.out.println("您选择了:退出当前应用程序");
 +
sc.close();
 +
System.exit(0);
 +
break;
 +
default:
 +
System.out.println("您的选择不正确");
 +
}
 +
 
 +
}</nowiki>
 +
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();
 +
}
 
 
 
 
public static void main(String[] args) throws Exception{
 
 
Scanner sc = new Scanner(System.in);
 
start(sc);
 
   
 
}
 
 
}</nowiki>
 
}</nowiki>
  
输出结果:
+
===管理端===
 +
main包 中 Main类:
  
[[文件:java2020-12-5.png]]
+
====用户登录功能start()====
 +
<nowiki>
 +
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;
 +
 +
  }</nowiki>
  
===管理端===
+
====菜单输出功能showMenu()====
管理端显示层功能:
+
 
 +
<nowiki> 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):");
 +
}</nowiki>
 +
 
 +
====用户选择功能getChoice()====
 +
<nowiki>
 +
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("您选择了:处理商品上架的业务");
 +
Goods g = inputGoods(sc);
 +
System.out.println(gs.addGoods(g));
 +
break;
 +
case 2: //处理商品下架的业务
 +
System.out.println("您选择了: 处理商品下架的业务");
 +
printArray(gs.queryGoods());
 +
System.out.println("请问您想下架什么商品?输入商品id");
 +
gid = Integer.valueOf(sc.next());
 +
System.out.println(gs.delGoods(gid));
 +
break;
 +
case 3://处理查询所有商品的业务
 +
System.out.println("您选择了:查询所有商品的业务");
 +
printArray(gs.queryGoods());//查询所有商品
 +
break;
 +
case 4: //处理按商品名称查询
 +
System.out.println("您选择了: 按商品名称查询的业务");
 +
System.out.println("请输入关键词:");
 +
String gname = sc.next();
 +
printArray(gs.queryGoods(gname));
 +
break;
 +
case 5: //更改商品信息的业务
 +
System.out.println("您选择了:更改商品信息的业务");
 +
String [] m = alterPrice();//输入更改的商品和价格
 +
int id=Integer.valueOf(m[0]);
 +
float price = Float.valueOf(m[1]);
 +
System.out.println(gs.modifyGoods(id,price));
 +
break;
 +
 
 +
case 6: //退出当前应用程序
 +
System.out.println("您选择了:退出当前应用程序");
 +
sc.close();
 +
System.exit(0);
 +
break;
 +
default:
 +
System.out.println("您的选择不正确");
 +
}
 +
 
 +
}</nowiki>
 +
 
 +
 
 +
====打印输出函数printArray()====
 +
<nowiki>public static <E>void printArray(ArrayList<E> inputArray) {
 +
  for ( E element : inputArray ){       
 +
  System.out.println(element);
 +
      }
 +
      System.out.println();
 +
}</nowiki>
 +
 
 +
====商品输入函数inputGoods()====
 +
<nowiki>public static Goods inputGoods(Scanner sc){
 +
 +
Goods g= new Goods();
 +
System.out.print("请输入商品名称:");
 +
String name =sc.next();
 +
g.setName(name);
 +
 +
System.out.print("请输入商品数量:");
 +
String number =sc.next();
 +
int n= Integer.parseInt(number);
 +
g.setNum(n);
 +
 +
System.out.println("请输入商品价格:");
 +
String price =sc.next();
 +
Float p = Float.parseFloat(price);
 +
g.setPrice(p);
 +
 +
 
 +
return g;
 +
 +
}</nowiki>
 +
 
 +
====更改价格函数====
 +
 
 +
<nowiki>public static String[] alterPrice(){
 +
String [] m = new String[2];
 +
System.out.println("请输入商品ID:");
 +
m[0]= sc.next();
 +
 +
System.out.println("请输入商品价格:");
 +
m[1] =sc.next();
 +
return m;
 +
 +
}</nowiki>
 +
 
 +
====测试函数====
 +
 
 +
<nowiki>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();
 +
}</nowiki>
 +
====全部代码====
 +
<nowiki>package main;
 +
import java.util.ArrayList;
 +
import java.util.Scanner;
 +
 
 +
import dao.MyCon;
 +
import entity.Goods;
 +
import service.CartsService;
 +
import service.GoodsService;
 +
import service.UserService;
  
1. 添加用户
+
public class Main {
 +
static Scanner sc = new Scanner(System.in);
 +
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("您选择了:处理商品上架的业务");
 +
Goods g = inputGoods(sc);
 +
System.out.println(gs.addGoods(g));
 +
break;
 +
case 2: //处理商品下架的业务
 +
System.out.println("您选择了: 处理商品下架的业务");
 +
printArray(gs.queryGoods());
 +
System.out.println("请问您想下架什么商品?输入商品id");
 +
gid = Integer.valueOf(sc.next());
 +
System.out.println(gs.delGoods(gid));
 +
break;
 +
case 3://处理查询所有商品的业务
 +
System.out.println("您选择了:查询所有商品的业务");
 +
printArray(gs.queryGoods());//查询所有商品
 +
break;
 +
case 4: //处理按商品名称查询
 +
System.out.println("您选择了: 按商品名称查询的业务");
 +
System.out.println("请输入关键词:");
 +
String gname = sc.next();
 +
printArray(gs.queryGoods(gname));
 +
break;
 +
case 5: //更改商品信息的业务
 +
System.out.println("您选择了:更改商品信息的业务");
 +
String [] m = alterPrice();//输入更改的商品和价格
 +
int id=Integer.valueOf(m[0]);
 +
float price = Float.valueOf(m[1]);
 +
System.out.println(gs.modifyGoods(id,price));
 +
break;
  
2. 展示所有用户
+
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 Goods inputGoods(Scanner sc){
 +
 +
Goods g= new Goods();
 +
System.out.print("请输入商品名称:");
 +
String name =sc.next();
 +
g.setName(name);
 +
 +
System.out.print("请输入商品数量:");
 +
String number =sc.next();
 +
int n= Integer.parseInt(number);
 +
g.setNum(n);
 +
 +
System.out.println("请输入商品价格:");
 +
String price =sc.next();
 +
Float p = Float.parseFloat(price);
 +
g.setPrice(p);
 +
  
管理员先在这两个功能中选择其一,然后根据选择、调用业务逻辑层的不同方法,实现功能。
+
return g;
 +
 +
}
 +
public static String[] alterPrice(){
 +
String [] m = new String[2];
 +
System.out.println("请输入商品ID:");
 +
m[0]= sc.next();
 +
 +
System.out.println("请输入商品价格:");
 +
m[1] =sc.next();
 +
return m;
 +
 +
}
 +
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();
 +
}
 +
 +
 +
}</nowiki>

2020年6月12日 (五) 08:13的最新版本

任务描述

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 数据表,表结构如下:

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

mysql> use cloud;

 Database changed

数据表 goods:

 CREATE TABLE IF NOT EXISTS `goods` (    
       `id` INT unsigned AUTO_INCREMENT,      
       `name` VARCHAR(100) NOT NULL,    
        `price`  FLOAT NOT NULL,     
        `num` INT(11) NOT NULL,       
        PRIMARY KEY (`id`),    
         UNIQUE KEY `gname` (`name`) 
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


desc goods;

+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name  | varchar(100)     | NO   | UNI | NULL    |                |
| price | float            | NO   |     | NULL    |                |
| num   | int(11)          | NO   |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
4 rows in set (0.02 sec)


建立数据连接类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();
	}

}

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

数据访问层

GoodsDao接口

package dao;

import java.util.ArrayList;

import entity.Goods;

public interface GoodsDao {
	  public int getNum();
	  
	  public boolean add(Goods g);//增加商品
	  
	  public boolean delete(int id);//删除商品
	  
	  public ArrayList<Goods> findAll();//查询所有商品
	  
	  public ArrayList<Goods> find(String name);//模糊查询,查询某关键词的商品是否存在
	  
	  public boolean modify(int id,float p);//修改商品
	  
	  public Integer [] hasGoods(String name);//精确查询,查询某种商品是否存在,返回id号和数量
	  
	  public Integer[] hasGoods(int id);//查询某种商品是否存在,返回布尔值和数量
	  
	  
}

创建GoodsDaoSQL实现类

package dao;

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

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

返回商品总数getNum()

/*
 * 功能:返回商品库的总数目
 */
	  public int getNum() {
		 
		    int rowCount = 0;
		     try { 
			    		ResultSet rs = null;   //建立一个空的结果集
			            //1.创建PreparedStatement 对象,让它与一条SQL模板绑定;
			    		String sql = "select count(*) record from  goods";
			    		PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);                           
		                 //2.执行查询 
			            rs = pstmt.executeQuery();//执行查询		           
			            if(rs.next()){
			               rowCount=rs.getInt("record");
			            }
		                pstmt.close();	    	     		
			            
			     }catch (SQLException e) {//捕捉、处理异常
			             System.out.println(e.getMessage());
			     }
			  return rowCount;
	  }


增加操作add( )

	  public boolean add(Goods g) {//增加商品
		  
	      try {
	    	   Connection conn =  this.conn;
		       int i = 0;
		       String sql = "insert into goods (name,price,num) values(?,?,?)";
		       PreparedStatement pstmt;
		      
	            pstmt = (PreparedStatement) conn.prepareStatement(sql);
	            pstmt.setString(1, g.getName());
	            pstmt.setFloat(2, g.getPrice());  //pstmt.setInt(2, user.getAge()); pstmt.setDate  
	            pstmt.setInt(3, g.getNum());  
	            
	            i = pstmt.executeUpdate();
	            pstmt.close();
	            if(i!=0){
	            	return true;
	            	//System.out.println(g.getName()+"插入成功!");
		        }           
	            
	        } catch (SQLException e) {
	        	System.out.println(e.getMessage());
	        }
	       return false;
	        
	  }

按id号查询有无特定商品hasGoods(int id)

  public Integer[] hasGoods(int id){//按id查询某一商品
		  Integer [] info = new Integer[2];
		  info[0] =0;info[1]=0;//info[0]表示是否存在,info[1] 表示该商品的数目
		  
		  try { 
			    		ResultSet rs = null;   //建立一个空的结果集
			            //1.创建PreparedStatement 对象,让它与一条SQL模板绑定;
			    		String sql = "select num  from  goods where id = ?";
			    		PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
			    		pstmt.setInt(1, id);
		                 //2.执行查询 
			            rs = pstmt.executeQuery();//执行查询		           
			            if(rs.next()) {
			               info[0] = 1;
			               info[1] = rs.getInt("num");
			            }
		                pstmt.close();	    	     		
			            
		   }catch (SQLException e) {//捕捉、处理异常
			             System.out.println(e.getMessage());
			             
		   }
		   return info;
		}

按商品全名查找有无特定商品hasGoods(String name)

		public Integer[] hasGoods(String name) {//查询某一商品
			Integer [] info = new Integer[2];
			info[0]=0;info[1]=0;
			try { 
		    		ResultSet rs = null;   //建立一个空的结果集

		    		//1.创建PreparedStatement 对象,让它与一条SQL模板绑定;
		    		String sql = "select id,num from goods where name = ?";
		    		PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
		    		
		            //使用2. setXXX()系列方法为sql命令设置值
		    		pstmt.setString(1, name);//  
		            //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;
		}

删除操作delete()

 
public boolean delete(int id) {//删除商品
		    Connection conn = this.conn;
	        int i = 0;
			String sql = "DELETE FROM goods WHERE id = ?"; 
			
	    	try {   		
	          
	    		PreparedStatement pstmt = conn.prepareStatement(sql);  
	    		pstmt.setInt(1, id);            
	    		i = pstmt.executeUpdate();
	    		pstmt.close();
	            if(i!=0){
	                	return true;
	                	//System.out.println("商品"+id+"删除成功!");
		        }else {
		            	return false;
		            	//System.out.println("商品"+id+"删除失败!");
		        }
	    		
	            
	    	}catch (SQLException e) {
	        	System.out.println(e.getMessage());
	        }	    
	    	return false;
	  }
	  

查询所有操作findAll()

	
	  public ArrayList<Goods> findAll() {//查询所有商品
		  
		  ArrayList<Goods> garray = new ArrayList<>();
	      
	      try {
	    	    String sql = "select * from goods";
	    	    PreparedStatement  pstmt = (PreparedStatement)conn.prepareStatement(sql);
	            
	            //3.执行查询 
	            ResultSet  rs = pstmt.executeQuery();//执行查询
	            int col = rs.getMetaData().getColumnCount();//获取字段数       
	            
	           
	            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;
	  }

搜索操作find()

	  public ArrayList<Goods> find(String name) {//查询某种商品是否存在
		  ArrayList<Goods> garray = new ArrayList<>();
		  try { 
	    		ResultSet rs = null;   //建立一个空的结果集

	            //1.创建PreparedStatement 对象,让它与一条SQL模板绑定;
	    		String sql = "select * from goods where name LIKE ?";
	    		PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
	    		
	            //使用2. setXXX()系列方法为sql命令设置值
	    		pstmt.setString(1, "%"+name+"%");//                        

	            //3.执行查询 
	            rs = pstmt.executeQuery();//执行查询
	            int col = rs.getMetaData().getColumnCount();//获取字段数                     
	                       
	            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");	               
		         }      
	           
	    	   pstmt.close();
	    		
	            
	    	 }catch (SQLException e) {//捕捉、处理异常
	             System.out.println(e.getMessage());
	        }
		  return garray;
	  }


修改价格操作modify()

	 public boolean modify(int id,float p) {
		  //修改商品
		  	      
	      try {  
	    	     String sql = "UPDATE goods SET  price=?"  
		                 + " WHERE id=?";  
		         PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
	             pstmt.setFloat(1, p);
	             pstmt.setInt(2,id);            
	             int i = pstmt.executeUpdate();
	             pstmt.close();
	             
	             if(i!=0){ //如果影响行数非零,说明修改成功
	            	 
	            	 return true;	            	 
		         }
	            
	             
	         } catch (SQLException e) {
	         	 System.out.println(e.getMessage());
	         }
	      return false;
	                 
	  }

在main方法编写测试代码

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// TODO Auto-generated method stub
		MyCon.getConn();//建立数据库连接
		GoodsDao s = new GoodsDaoSQL(); 
		Scanner sc = new Scanner(System.in);
		
		/*向商品库中添加商品 */
		Goods g1= new Goods("1","山西刀削面",105.0f,30);
		Goods g2= new Noodles("2","兰州牛肉面",15.0f,20);
		Goods g3= new Rice("3","黄焖鸡米饭",12.0f,30,false);
				
		//添加元素		
		System.out.println("执行添加餐品操作...");
		System.out.println("添加餐品结果:"+s.add(g1));
		System.out.println("添加餐品结果:"+s.add(g2));
		System.out.println("添加餐品结果:"+s.add(g3));
				
		System.out.println("共找到商品?种:"+s.getNum());
		System.out.println("以下为商品详情信息:");
		System.out.println(s.findAll());
		
		/*修改商品库中商品的价格 */
		System.out.println("请问您想修改什么餐品?输入餐品全名");
		String name = sc.next();
		System.out.println("餐品修改后的价格为?");
		float price= Float.valueOf(sc.next());
		Integer[] info =s.hasGoods(name);
		System.out.println("该商品的id为:"+ info[0]+",数量为:"+info[1]);
		System.out.println("修改餐品结果:"+s.modify(info[0], price));
		System.out.println(s.findAll());
				
		
		/* 删除商品库中商品 */
		System.out.println("执行删除餐品操作...");				
		System.out.println("请问您想删除什么餐品?输入餐品id");
		int id = Integer.valueOf(sc.next());
		Integer[] info2 = s.hasGoods(id);		
		if( info2[0] == 1 ){ //如果被删除产品在库中存在
			System.out.println("id号为"+id+"餐品现在在库中存在,商品数量为:"+info[1]);
			System.out.println("删除餐品结果:"+s.delete(id));
		}else {System.out.println("id号为"+id+"餐品现在在库中不存在");}
		
		
		/* 查询所有商品 */
		System.out.println(s.findAll());
					
		/* 根据商品名称查找商品 */
		System.out.println("请问您想查询什么餐品?输入餐品关键词:");
		name = sc.next();
		System.out.println("共找到以下商品:");
		System.out.println(s.find(name));
			
		sc.close();
		MyCon.disConn();//建立数据库连接
				
	}

业务逻辑层

Java2020-12-1.png

创建服务类GoodsService

public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyCon.getConn();//建立数据库连接	
		Scanner sc = new Scanner(System.in);
		GoodsService s = new GoodsService(); 

                sc.close();
		MyCon.disConn();//关闭数据库连接

添加商品服务addGoods()

	
  /**
	   * 商品上架,向数据仓库中添加商品
	   * @param g 向仓库中添加的商品
	   * @return 值为空
	   */
    public String addGoods(Goods  g){	
	   
       String message = "";
	   String name = g.getName();
	   
	   Integer [] info = dbset.hasGoods(name);//查询有无该商品,返回商品id号和数量
	   if(info[0] == 0){	//如果没有该商品,才能执行上架操作	   
		   if(dbset.add(g)==true) {
		       message =  "    商品 "+g.getName() +" 成功上架";
		   }else {
			   message = "    商品 "+g.getName() +" 上架失败";
		   }
	   }else {
		       message = "    商品 "+g.getName() +"已存在";
	   } 
	   return message;
		
	}

删除商品服务delGoods()

   /**
	   * 向数据仓库中删除商品
	   * @param g 向仓库中删除的商品
	   * @return 值为空
	   */
	public String delGoods(int id)  {
	//try{
		String message = "";
		System.out.println("现在开始向库中删除商品 ");
		Integer[] info = dbset.hasGoods(id);//查询有无该商品,返回布尔值和数量
		if(info[0] ==1){//确定有该商品再执行删除操作
			 if(dbset.delete(id)==true) {
				 message =("商品"+ id+" 下架成功!");
			 }else {
				 message =("商品"+ id+" 下架失败!");
			 }
		}else{//如果该商品不在库中
			//throw new GoodsException("要删除的商品"+id+" 不存在哦!");
			message =("要删除的商品"+id +" 不存在");
		}
		System.out.println();	
	//}catch(GoodsException e){
		//System.out.println(e.toString());
	//}
	  return message;
	}

查看所有商品服务queryGoods( )

		/**
	 * 查询仓库中的商品
	 * * @param 值为空
	   * @return 值为空
	 */
	
	public ArrayList<Goods>  queryGoods( ){
		
		ArrayList<Goods> goods = dbset.findAll();
		/*
		System.out.println("本店现有商品数:");
		for(Goods g :goods) {
			System.out.println(g);
		}
		System.out.println();;
		*/
		
		return goods;	
		
	}

搜索商品服务queryGoods(String name)

/**
	 * 查询仓库中的商品
	 * * @param 值为空
	   * @return 值为空
	 */
	
	public ArrayList<Goods> queryGoods(String name)  {
	
		ArrayList<Goods> goods = dbset.find(name);
		
		/*
		System.out.println("查询到名称为"+name+"商品有:");
		for(Goods g :goods) {
			System.out.println(g);
			
		}
		System.out.println();;
		*/		
		return goods;
	}
	


修改商品服务modifyGoods()


	/**
	   * 向数据仓库中修改商品的数量
	   * @param g 仓库中待修改的商品
	   * @param p 商品修改后的价格
	   * @return 值为空
	   */
	public String modifyGoods(int id,float p)  {
		String message = "";
		
		//try{
		    Integer[] info = dbset.hasGoods(id);//查询有无该商品,返回布尔值和数量
		    if(info[0] ==0){//确定有该商品再执行修改操作		    		
				//throw new GoodsException("要修改的商品"+g.getName()+" 不存在哦!");
		    	message =("要修改的商品"+id+" 不存在");
			}else {//查到这个商品了,可以做进一步操作				
	    		dbset.modify(id, p);
	    		message =(id+" 的价格更改为 " + p+ " 元");
			    	
			}
		//}catch( GoodsException e){
				//System.out.println(e.toString());
		//}
		return message;
		    	
	}
	

在main方法中写测试代码

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyCon.getConn();//建立数据库连接	
		Scanner sc = new Scanner(System.in);
		GoodsService s = new GoodsService(); 

		/* 商品上架 */
		Goods g1= new Goods("1","山西刀削面",105.0f,30);
		Goods g2= new Noodles("2","兰州牛肉面",15.0f,20);
		Goods g3= new Rice("3","黄焖鸡米饭",12.0f,30,false);
		
		System.out.println("执行添加餐品操作...");
		System.out.println(s.addGoods(g1));
		System.out.println(s.addGoods(g2));
		System.out.println(s.addGoods(g3));
		
		//System.out.println("共找到商品?件:"+s.getNum());
		System.out.println("以下为商品详情信息:");
		System.out.println(s.queryGoods());		
		
		/*修改商品价格 */
		System.out.println("执行修改价格操作...");
		System.out.println("请问您想修改什么餐品?输入餐品id");
		int id = Integer.valueOf(sc.next());
		System.out.println("餐品修改后的价格为?");
		float price= Float.valueOf(sc.next());
		System.out.println("该商品的id为:"+ id+",修改后的价格为:"+price);
		System.out.println(s.modifyGoods(id,price));
		
		/*根据商品名称查找商品*/
		System.out.println("执行关键词查询商品操作...");
		System.out.println("请问您想查询什么餐品?输入餐品关键词:");
		String name = sc.next();
		System.out.println("查询到名称为"+name+"商品有:");
		System.out.println(s.queryGoods(name));
		
		/* 查询所有商品  */
		System.out.println("执行查询所有商品操作...");
		System.out.println(s.queryGoods());		
		
		/*商品下架 */
		System.out.println("执行删除餐品操作...");
		System.out.println("请问您想删除什么餐品?输入餐品id");
		id = Integer.valueOf(sc.next());
		System.out.println(s.delGoods(id));
		
		sc.close();
		MyCon.disConn();//关闭数据库连接
	}

完整代码

package service;

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

import dao.*;
import entity.*;
//import exception.GoodsException;
/**
 * 这个类处理与商品有关的业务逻辑
 */
public class GoodsService {
	
	
	private GoodsDao dbset ;
	
	
	public GoodsService() {
		dbset =  new GoodsDaoSQL();
	}
   
    /**
	   * 商品上架,向数据仓库中添加商品
	   * @param g 向仓库中添加的商品
	   * @return 值为空
	   */
    public String addGoods(Goods  g){	
	   
       String message = "";
	   String name = g.getName();
	   
	   Integer [] info = dbset.hasGoods(name);//查询有无该商品,返回商品id号和数量
	   if(info[0] == 0){	//如果没有该商品,才能执行上架操作	   
		   if(dbset.add(g)==true) {
		       message =  "    商品 "+g.getName() +" 成功上架";
		   }else {
			   message = "    商品 "+g.getName() +" 上架失败";
		   }
	   }else {
		       message = "    商品 "+g.getName() +"已存在";
	   } 
	   return message;
		
	}
    /**
	   * 向数据仓库中删除商品
	   * @param g 向仓库中删除的商品
	   * @return 值为空
	   */
	public String delGoods(int id)  {
	//try{
		String message = "";
		System.out.println("现在开始向库中删除商品 ");
		Integer[] info = dbset.hasGoods(id);//查询有无该商品,返回布尔值和数量
		if(info[0] ==1){//确定有该商品再执行删除操作
			 if(dbset.delete(id)==true) {
				 message =("商品"+ id+" 下架成功!");
			 }else {
				 message =("商品"+ id+" 下架失败!");
			 }
		}else{//如果该商品不在库中
			//throw new GoodsException("要删除的商品"+id+" 不存在哦!");
			message =("要删除的商品"+id +" 不存在");
		}
		System.out.println();	
	//}catch(GoodsException e){
		//System.out.println(e.toString());
	//}
	  return message;
	}
	/**
	 * 查询仓库中的商品
	 * * @param 值为空
	   * @return 值为空
	 */
	
	public ArrayList<Goods>  queryGoods( ){
		
		ArrayList<Goods> goods = dbset.findAll();
		/*
		System.out.println("本店现有商品数:");
		for(Goods g :goods) {
			System.out.println(g);
		}
		System.out.println();;
		*/
		
		return goods;	
		
	}
	/**
	 * 查询仓库中的商品
	 * * @param 值为空
	   * @return 值为空
	 */
	
	public ArrayList<Goods> queryGoods(String name)  {
	
		ArrayList<Goods> goods = dbset.find(name);
		
		/*
		System.out.println("查询到名称为"+name+"商品有:");
		for(Goods g :goods) {
			System.out.println(g);
			
		}
		System.out.println();;
		*/		
		return goods;
	}
	
	/**
	   * 向数据仓库中修改商品的数量
	   * @param g 仓库中待修改的商品
	   * @param p 商品修改后的价格
	   * @return 值为空
	   */
	public String modifyGoods(int id,float p)  {
		String message = "";
		
		//try{
		    Integer[] info = dbset.hasGoods(id);//查询有无该商品,返回布尔值和数量
		    if(info[0] ==0){//确定有该商品再执行修改操作		    		
				//throw new GoodsException("要修改的商品"+g.getName()+" 不存在哦!");
		    	message =("要修改的商品"+id+" 不存在");
			}else {//查到这个商品了,可以做进一步操作				
	    		dbset.modify(id, p);
	    		message =(id+" 的价格更改为 " + p+ " 元");
			    	
			}
		//}catch( GoodsException e){
				//System.out.println(e.toString());
		//}
		return message;
		    	
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyCon.getConn();//建立数据库连接	
		Scanner sc = new Scanner(System.in);
		GoodsService s = new GoodsService(); 

		/* 商品上架 */
		Goods g1= new Goods("1","山西刀削面",105.0f,30);
		Goods g2= new Noodles("2","兰州牛肉面",15.0f,20);
		Goods g3= new Rice("3","黄焖鸡米饭",12.0f,30,false);
		
		System.out.println("执行添加餐品操作...");
		System.out.println(s.addGoods(g1));
		System.out.println(s.addGoods(g2));
		System.out.println(s.addGoods(g3));
		
		//System.out.println("共找到商品?件:"+s.getNum());
		System.out.println("以下为商品详情信息:");
		System.out.println(s.queryGoods());		
		
		/*修改商品价格 */
		System.out.println("执行修改价格操作...");
		System.out.println("请问您想修改什么餐品?输入餐品id");
		int id = Integer.valueOf(sc.next());
		System.out.println("餐品修改后的价格为?");
		float price= Float.valueOf(sc.next());
		System.out.println("该商品的id为:"+ id+",修改后的价格为:"+price);
		System.out.println(s.modifyGoods(id,price));
		
		/*根据商品名称查找商品*/
		System.out.println("执行关键词查询商品操作...");
		System.out.println("请问您想查询什么餐品?输入餐品关键词:");
		String name = sc.next();
		System.out.println("查询到名称为"+name+"商品有:");
		System.out.println(s.queryGoods(name));
		
		/* 查询所有商品  */
		System.out.println("执行查询所有商品操作...");
		System.out.println(s.queryGoods());		
		
		/*商品下架 */
		System.out.println("执行删除餐品操作...");
		System.out.println("请问您想删除什么餐品?输入餐品id");
		id = Integer.valueOf(sc.next());
		System.out.println(s.delGoods(id));
		
		sc.close();
		MyCon.disConn();//关闭数据库连接
	}
}

显示层

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

客户端

main包 中 Main类:

用户登录功能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("您选择了:列出购买商品的业务");
					//此功能暂不开放
	                         	break;
				case 4:	//删除商品,从购物车中删除商品信息
					System.out.println("您选择了:处理删除商品的业务");
					//此功能暂不开放
	                         	break;
				case 5:	//显示某个用户购物车中所有的商品
					System.out.println("您选择了:显示查询购买情况");
					//此功能暂不开放
	                         	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中编写测试代码

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("您选择了:列出购买商品的业务");
					//此功能暂不开放
	                         	break;
				case 4:	//删除商品,从购物车中删除商品信息
					System.out.println("您选择了:处理删除商品的业务");
					//此功能暂不开放
	                         	break;
				case 5:	//显示某个用户购物车中所有的商品
					System.out.println("您选择了:显示查询购买情况");
					//此功能暂不开放
	                         	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(); }


}</nowiki>

管理端

main包 中 Main类:

用户登录功能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("您选择了:处理商品上架的业务");
					Goods g = inputGoods(sc);
					System.out.println(gs.addGoods(g));
					break;
				case 2:	//处理商品下架的业务
					System.out.println("您选择了: 处理商品下架的业务");
					printArray(gs.queryGoods());
					System.out.println("请问您想下架什么商品?输入商品id");
					gid = Integer.valueOf(sc.next());
					System.out.println(gs.delGoods(gid));
					break;
				case 3://处理查询所有商品的业务
					System.out.println("您选择了:查询所有商品的业务");
					printArray(gs.queryGoods());//查询所有商品
					break;
				case 4:	//处理按商品名称查询
					System.out.println("您选择了: 按商品名称查询的业务");
					System.out.println("请输入关键词:");
					String gname = sc.next();
					printArray(gs.queryGoods(gname));
					break;
				case 5:	//更改商品信息的业务
					System.out.println("您选择了:更改商品信息的业务");
					String [] m = alterPrice();//输入更改的商品和价格
					int id=Integer.valueOf(m[0]);
					float price = Float.valueOf(m[1]);
					System.out.println(gs.modifyGoods(id,price));					
					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();
	}

商品输入函数inputGoods()

public static Goods inputGoods(Scanner sc){
		
		Goods g= new Goods();		
		System.out.print("请输入商品名称:");
		String name =sc.next();
		g.setName(name);
		
		System.out.print("请输入商品数量:");
		String number =sc.next();
		int n= Integer.parseInt(number);
		g.setNum(n);
			
		System.out.println("请输入商品价格:");
		String price =sc.next();
		Float p = Float.parseFloat(price);
		g.setPrice(p);
		

		return g;
		
	}

更改价格函数

public static String[] alterPrice(){
		String [] m = new String[2];
		System.out.println("请输入商品ID:");
		m[0]= sc.next();		
					
		System.out.println("请输入商品价格:");
		m[1] =sc.next();
		return m;
		
	}

测试函数

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 entity.Goods;
import service.CartsService;
import service.GoodsService;
import service.UserService;

public class Main {
	static Scanner sc = new Scanner(System.in);	
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("您选择了:处理商品上架的业务");
					Goods g = inputGoods(sc);
					System.out.println(gs.addGoods(g));
					break;
				case 2:	//处理商品下架的业务
					System.out.println("您选择了: 处理商品下架的业务");
					printArray(gs.queryGoods());
					System.out.println("请问您想下架什么商品?输入商品id");
					gid = Integer.valueOf(sc.next());
					System.out.println(gs.delGoods(gid));
					break;
				case 3://处理查询所有商品的业务
					System.out.println("您选择了:查询所有商品的业务");
					printArray(gs.queryGoods());//查询所有商品
					break;
				case 4:	//处理按商品名称查询
					System.out.println("您选择了: 按商品名称查询的业务");
					System.out.println("请输入关键词:");
					String gname = sc.next();
					printArray(gs.queryGoods(gname));
					break;
				case 5:	//更改商品信息的业务
					System.out.println("您选择了:更改商品信息的业务");
					String [] m = alterPrice();//输入更改的商品和价格
					int id=Integer.valueOf(m[0]);
					float price = Float.valueOf(m[1]);
					System.out.println(gs.modifyGoods(id,price));					
					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 Goods inputGoods(Scanner sc){
		
		Goods g= new Goods();		
		System.out.print("请输入商品名称:");
		String name =sc.next();
		g.setName(name);
		
		System.out.print("请输入商品数量:");
		String number =sc.next();
		int n= Integer.parseInt(number);
		g.setNum(n);
			
		System.out.println("请输入商品价格:");
		String price =sc.next();
		Float p = Float.parseFloat(price);
		g.setPrice(p);
		

		return g;
		
	}
	public static String[] alterPrice(){
		String [] m = new String[2];
		System.out.println("请输入商品ID:");
		m[0]= sc.next();		
					
		System.out.println("请输入商品价格:");
		m[1] =sc.next();
		return m;
		
	}
	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();
	}
	
	
}