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

来自CloudWiki
跳转至: 导航搜索
(创建页面,内容为“==任务描述== 1.创建用户操作的业务逻辑层 *用户注册 *用户登陆验证 *展示所有用户 2. 对用户操作的数据访问层做必要改动…”)
 
第1行: 第1行:
 
==任务描述==
 
==任务描述==
1.创建用户操作的业务逻辑层
+
1.创建商品操作的业务逻辑层
 
 
*用户注册
 
 
 
*用户登陆验证
 
 
 
*展示所有用户
 
  
 
2. 对用户操作的数据访问层做必要改动
 
2. 对用户操作的数据访问层做必要改动
第26行: 第20行:
 
===数据访问层===
 
===数据访问层===
 
数据访问层DAL是数据库的主要操控系统,实现数据的增加、删除、修改、查询等操作,并将操作结果反馈到业务逻辑层BLL。在实际运行的过程中,数据访问层没有逻辑判断能力,为了实现代码编写的严谨性,提高代码阅读程度,一般软件开发人员会在该层中编写DataAccessCommon,保证数据访问层DAL数据处理功能。
 
数据访问层DAL是数据库的主要操控系统,实现数据的增加、删除、修改、查询等操作,并将操作结果反馈到业务逻辑层BLL。在实际运行的过程中,数据访问层没有逻辑判断能力,为了实现代码编写的严谨性,提高代码阅读程度,一般软件开发人员会在该层中编写DataAccessCommon,保证数据访问层DAL数据处理功能。
 +
 +
==数据访问层==
 +
===GoodsDao接口===
 +
本接口改动不大,主要是find和findALL返回值变成了ArrayList<User>类型。
 +
 +
变动的原因是 现在软件分层了,数据库查询到的数据不宜直接在dao层打印了,通过arraylist传出去
 +
 +
<nowiki>
 +
package dao;
 +
 +
import java.util.ArrayList;
 +
 +
import entity.Goods;
 +
 +
public interface GoodsDao {
 +
  public int getNum();
 +
  public boolean add(Goods g);//增加商品
 +
 
 +
  public boolean delete(String id);//删除商品
 +
 
 +
  public ArrayList<Goods> findAll();//查询所有商品
 +
 
 +
  public ArrayList<Goods> find(String name);//查询某种商品是否存在
 +
 
 +
  public boolean modify(String id,float p);//修改商品
 +
 
 +
  public int hasGoods(String name);//查询某种商品是否存在,返回id号
 +
}</nowiki>
 +
 +
===创建GoodsDaoSQL实现类===
 +
本类改动不大,主要是queryUser( )返回值变成了ArrayList<User>类型。
 +
 +
变动的原因是 现在软件分层了,数据库查询到的数据不宜直接在dao层打印了,通过arraylist传出去
 +
 +
<nowiki>
 +
package dao;
 +
 +
import java.sql.*;
 +
import java.util.ArrayList;
 +
 +
import entity.*;
 +
 +
public class GoodsDaoSQL implements GoodsDao{
 +
// JDBC 驱动名及数据库 URL
 +
 +
    Connection conn;
 +
   
 +
    public GoodsDaoSQL(){
 +
    this.getConn();
 +
    }
 +
    /**
 +
  * 连接数据库
 +
  * @param 值为空
 +
  * @return 布尔值
 +
*/
 +
private boolean getConn() {   
 +
   
 +
    //Connection conn = null;     
 +
        try {
 +
        final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
 +
    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";
 +
   
 +
    // 数据库的用户名与密码,需要根据自己的设置
 +
    final String USER = "root";
 +
        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());
 +
        return false;
 +
        } catch (SQLException e) {
 +
        System.out.println(e.getMessage());
 +
        return false;
 +
        }
 +
        return true;
 +
  }
 +
}
 +
</nowiki>
 +
  
  
 
==业务逻辑层==
 
==业务逻辑层==
 
[[文件:java2020-12-1.png|500px]]
 
[[文件:java2020-12-1.png|500px]]
===创建服务类UserService===
+
===创建服务类GoodsService===
 +
 
 +
<nowiki>
 +
package service;
  
<nowiki>package service;
 
 
import java.util.ArrayList;
 
import java.util.ArrayList;
  
 
import dao.*;
 
import dao.*;
 
import entity.*;
 
import entity.*;
//import exception.UserException;
+
//import exception.GoodsException;
public class UserService {
+
/**
 +
* 这个类处理与商品有关的业务逻辑
 +
*/
 +
public class GoodsService {
 +
 
 
/**
+
private GoodsDao dbset ;
* 用户集类(用于存储用户
 
*/
 
private UserDao userset = null;
 
 
 
 
 
public UserService() {
+
public GoodsService() {
userset = new UserDaoSQL();
+
dbset = new GoodsDaoSQL();
 
}
 
}
}</nowiki>
+
        public static void main(String[] args) {
 +
        }
 +
}
 +
</nowiki>
  
===添加用户addUser()===
+
===添加商品addGoods()===
 
  <nowiki>
 
  <nowiki>
 
/**
 
/**
* 用于向用户集添加用户
+
  * 商品上架,向数据仓库中添加商品
*/
+
  * @param g 向仓库中添加的商品
public void addUser(User user){
+
  * @return 值为空
 +
  */
 +
  public void addGoods(Goods  g){
 +
 
 +
  String name = g.getName();
 +
  int id = dbset.hasGoods(name);//查询有无该商品,返回商品id号
 +
  if(id == 0){ //如果没有该商品,再执行上架操作  
 +
  if(dbset.add(g)==true) {
 +
      System.out.println("    商品 "+g.getName() +" 成功上架");
 +
  }else {
 +
  System.out.println("    商品 "+g.getName() +" 上架失败");
 +
  }
 +
  }else {
 +
  System.out.println("    商品 "+g.getName() +"已存在");
 +
  }
 
 
userset.addUser(user);
+
}
        System.out.println("用户 "+user.getName() +" 注册成功");       
+
System.out.println();
+
</nowiki>
}</nowiki>
+
 
 +
===删除商品delGoods()===
  
===查询函数queryUser( )===
 
这个功能要完成,需要把UserDao的queryUser( )返回值改为ArrayList<User>,这个我们稍后处理
 
  
 
  <nowiki>/**
 
  <nowiki>/**
* 查询仓库中的用户
+
  * 向数据仓库中删除商品
 +
  * @param g 向仓库中删除的商品
 +
  * @return 值为空
 +
  */
 +
public void delGoods(String name)  {
 +
//try{
 +
System.out.println("现在开始向库中删除商品 ");
 +
int id = dbset.hasGoods(name);//查询有无该商品,返回商品id号
 +
if(id!=0){//确定有该商品再执行删除操作
 +
if(dbset.delete(Integer.toString(id))==true) {
 +
        System.out.println("商品"+ name+" 下架成功!");
 +
}else {
 +
System.out.println("商品"+ name+" 下架失败!");
 +
}
 +
}else{
 +
//throw new GoodsException("要删除的商品"+id+" 不存在哦!");
 +
System.out.println("要删除的商品"+name+" 不存在");
 +
}
 +
System.out.println();
 +
//}catch(GoodsException e){
 +
//System.out.println(e.toString());
 +
//}
 +
}</nowiki>
 +
 
 +
===查看所有商品queryGoods( )===
 +
<nowiki>
 +
/**
 +
* 查询仓库中的商品
 +
* * @param 值为空
 +
  * @return 值为空
 
*/
 
*/
public void queryUser( ){
+
System.out.println("本店现有如下用户:");
+
public void queryGoods( ){
ArrayList<User> users =userset.queryUser();
+
                //测试代码
+
ArrayList<Goods> goods = dbset.findAll();
for(User user:users){
+
System.out.println("本店现有商品数:");
System.out.println(user);  
+
for(Goods g :goods) {
 +
System.out.println(g);
 
}
 
}
System.out.println();
+
System.out.println();;
 +
 +
 
}</nowiki>
 
}</nowiki>
  
===验证函数login()===
+
===搜索商品queryGoods(String name)===
  
 
  <nowiki>/**
 
  <nowiki>/**
* 登录验证,判断用户名与密码是否一致
+
* 查询仓库中的商品
*  
+
* * @param 值为空
* @param uid 用户输入的登录账号
+
  * @return 值为空
* @param pwd 用户输入的登录密码
 
* @return 登录信息有效:返回用户对象,否则返回NULL
 
 
*/
 
*/
public boolean login(String name, String pwd) {
+
//用户名为空,密码为空
+
public void queryGoods(String name) {
//try{
+
if(!userset.hasUser(name)){
+
ArrayList<Goods> goods = dbset.find(name);
//throw new UserException("用户 "+name+":该用户不存在");
+
System.out.println("查询到名称为"+name+"商品有:");
System.out.println("用户 "+name+":该用户不存在");
+
for(Goods g :goods) {
return false;
+
System.out.println(g);
}else if(!userset.verify(name, pwd)){
+
}
//throw new UserException("用户 "+name+":用户名或密码错误");
+
System.out.println();;
System.out.println("用户 "+name+":用户名或密码错误");
 
return false;
 
}
 
System.out.println("用户 "+name+" 登陆成功!");
 
//}catch(UserException e){
 
//System.out.println(e.toString());
 
//return false;
 
//}
 
return true;
 
 
}</nowiki>
 
}</nowiki>
  
===main方法中测试===
 
  
<nowiki>
+
===查询函数queryUser( )===
    public static void main(String[] args) {
+
这个功能要完成,需要把UserDao的queryUser( )返回值改为ArrayList<User>,这个我们稍后处理
    UserService us =new UserService();
 
    User u1=new User("zhangliu","456");
 
    us.addUser(u1);
 
    us.queryUser( );
 
    us.login("zhangliu","123");
 
 
}</nowiki>
 
  
===完整代码===
+
  <nowiki>/**
  <nowiki>
 
package service;
 
import java.util.ArrayList;
 
 
 
import dao.*;
 
import entity.*;
 
//import exception.UserException;
 
public class UserService {
 
 
/**
 
* 用户集类(用于存储用户
 
*/
 
private UserDao userset = null;
 
 
 
public UserService() {
 
userset = new UserDaoSQL();
 
}
 
 
/**
 
* 用于向用户集添加用户
 
*/
 
public void addUser(User user){
 
 
userset.addUser(user);
 
        System.out.println("用户 "+user.getName() +" 注册成功");       
 
System.out.println();
 
}
 
 
/**
 
 
* 查询仓库中的用户
 
* 查询仓库中的用户
 
*/
 
*/
第156行: 第234行:
 
System.out.println("本店现有如下用户:");
 
System.out.println("本店现有如下用户:");
 
ArrayList<User> users =userset.queryUser();
 
ArrayList<User> users =userset.queryUser();
 +
                //测试代码
 
for(User user:users){
 
for(User user:users){
 
System.out.println(user);  
 
System.out.println(user);  
 
}
 
}
 
System.out.println();
 
System.out.println();
}
+
}</nowiki>
 +
 
 +
===修改商品modifyGoods()===
 +
 
 +
<nowiki>
 +
 
 
/**
 
/**
* 登录验证,判断用户名与密码是否一致
+
  * 向数据仓库中修改商品的数量
*
+
  * @param g 仓库中待修改的商品
* @param uid 用户输入的登录账号
+
  * @param p 商品修改后的价格
* @param pwd 用户输入的登录密码
+
  * @return 值为空
* @return 登录信息有效:返回用户对象,否则返回NULL
+
  */
*/
+
public void modifyGoods(String name,float p) {
public boolean login(String name, String pwd) {
+
System.out.println("现在开始修改商品 "+name+ " 的价格");
//用户名为空,密码为空
 
 
//try{
 
//try{
if(!userset.hasUser(name)){
+
    int id = dbset.hasGoods(name);
//throw new UserException("用户 "+name+":该用户不存在");
+
    if(id==0){//如果查不到这个商品
System.out.println("用户 "+name+":该用户不存在");
+
//throw new GoodsException("要修改的商品"+g.getName()+" 不存在哦!");
return false;
+
System.out.println("要修改的商品"+name+" 不存在");
}else if(!userset.verify(name, pwd)){
+
}else {//查到这个商品了,可以做进一步操作
//throw new UserException("用户 "+name+":用户名或密码错误");
+
    dbset.modify(Integer.toString(id), p);
System.out.println("用户 "+name+":用户名或密码错误");
+
System.out.println(name+" 的价格更改为 " + p+ " ");
return false;
+
    System.out.println();
 
}
 
}
System.out.println("用户 "+name+" 登陆成功!");
+
//}catch( GoodsException e){
//}catch(UserException e){
+
//System.out.println(e.toString());
//System.out.println(e.toString());
+
//}
//return false;
+
//}
+
   
return true;
 
 
}
 
}
public static void main(String[] args) {
+
</nowiki>
UserService us =new UserService();
 
User u1=new User("zhangliu","456");//这里可能会遇到构造方法参数不符的问题,重新修改一下构造方法
 
    us.addUser(u1);
 
    us.queryUser( );
 
    us.login("zhangliu","123");
 
 
}
 
}</nowiki>
 
 
 
==数据访问层==
 
===UserDao接口===
 
本接口改动不大,主要是queryUser( )返回值变成了ArrayList<User>类型。
 
  
变动的原因是 现在软件分层了,数据库查询到的数据不宜直接在dao层打印了,通过arraylist传出去
+
===在main方法中写测试代码===
  
 
  <nowiki>
 
  <nowiki>
package dao;
+
public static void main(String[] args) {
 
+
// TODO Auto-generated method stub
import java.util.ArrayList;
+
GoodsService s = new GoodsService();  
 
+
//GoodsDao s = new GoodsDaoSet();
import entity.User;
+
//GoodsDao s = new GoodsDaoArrayList();
 
+
//GoodsDao s = new GoodsDaoLinkedList();
public interface UserDao {
+
  public void addUser(User u);//添加用户
+
Goods g1= new Goods("1","山西刀削面",105.0f,30);
+
Goods g2= new Noodles("2","兰州牛肉面",15.0f,20);
  public ArrayList<User> queryUser( );//查询用户,这里返回值改为了ArrayList<User>  
+
Goods g3= new Rice("3","黄焖鸡米饭",12.0f,30,false);
 
+
  public boolean hasUser(String name);//查询某个用户是否存在
+
//商品上架
+
System.out.println("执行添加餐品操作...");
  public boolean verify(String name, String pwd);//验证用户名和密码是否一致
+
s.addGoods(g1);
 
+
s.addGoods(g2);
 
+
s.addGoods(g3);
}</nowiki>
+
 
+
//System.out.println("共找到商品?件:"+s.getNum());
===UserDaoSQL实现类===
+
System.out.println("以下为商品详情信息:");
本类改动不大,主要是queryUser( )返回值变成了ArrayList<User>类型。
+
s.queryGoods();
 
 
变动的原因是 现在软件分层了,数据库查询到的数据不宜直接在dao层打印了,通过arraylist传出去
 
 
 
<nowiki>
 
package dao;
 
 
 
import java.sql.*;
 
import java.util.ArrayList;
 
 
 
import entity.User;
 
 
 
public class UserDaoSQL implements UserDao{
 
// JDBC 驱动名及数据库 URL
 
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"
 
static 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";
 
 
// 数据库的用户名与密码,需要根据自己的设置
 
static final String USER = "root";
 
    static final String PASS = "000000";
 
    Connection conn;
 
 
    public UserDaoSQL(){
 
    this.getConn();
 
    }
 
    /**
 
  * 连接数据库
 
  * @param 值为空
 
  * @return Connection 建立的数据库连接
 
  */
 
private boolean getConn() {   
 
   
 
    //Connection conn = null;     
 
        try {
 
            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());
 
        return false;
 
        } catch (SQLException e) {
 
        System.out.println(e.getMessage());
 
        return false;
 
        }
 
        return true;
 
  }
 
public boolean disConn() {
 
try {
 
          this.conn.close();
 
        } catch (SQLException e) {
 
        System.out.println(e.getMessage());
 
        return false;
 
        }
 
return true;
 
}
 
  /**
 
  * 向数据库中添加用户
 
  * @param user,要添加的用户
 
  * @return 返回值为空
 
  */
 
public void addUser(User user){//添加用户   
 
 
 
        String sql = "insert into user (name,password) values(?,?)";
+
//商品下架
        PreparedStatement pstmt;
+
System.out.println("执行删除餐品操作...");
        try {
+
s.delGoods("山西刀削面");
            pstmt = (PreparedStatement) conn.prepareStatement(sql);
+
//查询所有商品
            pstmt.setString(1, user.getName());
+
s.queryGoods();
            pstmt.setString(2, user.getPwd());  //pstmt.setInt(2, user.getAge()); pstmt.setDate 
 
                       
 
            pstmt.executeUpdate();
 
            pstmt.close();
 
           
 
        } catch (SQLException e) {
 
        System.out.println(e.getMessage());
 
        }
 
       
 
}
 
 
/**
 
  * 向数据库中查询所有用户
 
  * @param 值为空
 
  * @return 值为空
 
  */
 
  public ArrayList<User> queryUser( ){//查询用户      
 
 
 
      String sql = "select * from user";
 
      PreparedStatement pstmt;
 
      ArrayList<User> uarray = new ArrayList<>();
 
      try {
 
            pstmt = (PreparedStatement)conn.prepareStatement(sql);
 
            ResultSet rs = pstmt.executeQuery();//执行查询
 
            int col = rs.getMetaData().getColumnCount();//获取字段数
 
            //System.out.println("============================");
 
            while (rs.next()) {           
 
              String name = rs.getString(2);
 
              String pwd = rs.getString(3);
 
              User u = new User(name,pwd);
 
              uarray.add(u);
 
              //System.out.print(rs.getString(i) + "\t");
 
             
 
            }
 
            //System.out.println("============================");
 
        } catch (SQLException e) {
 
        System.out.println(e.getMessage());
 
        }
 
        return uarray;
 
  }
 
  /**
 
  * 验证用户名是否存在
 
  * @param name,用户名
 
  * @return 布尔值
 
  */
 
  public boolean hasUser(String name){//查询某个用户是否存在
 
  boolean success=false;//标记验证是否成功         
 
 
 
    try {
+
System.out.println("修改兰州牛肉面的价格为15:");
     
+
s.modifyGoods("兰州牛肉面", 15f);
    String sql = "select * from user where name=? ";
 
    PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);    
 
            pstmt.setString(1, name);
 
           
 
            ResultSet rs = pstmt.executeQuery();//执行查询   
 
   
 
    if(rs.next()) { 
 
    //System.out.println("欢迎" + rs.getString("name"));
 
    success=true;
 
    }
 
    pstmt.close();          
 
           
 
    }catch (SQLException e) {
 
            System.out.println(e.getMessage());
 
        }
 
       
 
    return success; 
 
 
 
  }
 
/**
 
  * 验证用户名和密码是否正确
 
  * @param usename,用户名
 
  * @param password,密码
 
  * @return 建立的数据库连接
 
  */
 
public  boolean verify(String username, String password) {
 
boolean success=false;
 
 
 
try {
+
//根据商品名称查找商品
   
+
String name="牛肉面";
    ResultSet rs = null;   //建立一个空的结果集
+
s.queryGoods(name);
 +
}</nowiki>
  
                //1.创建PreparedStatement 对象,让它与一条SQL模板绑定;
+
===完整代码===
    String sql = "select * from user where name=? and password=?";
+
<nowiki>
    PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
+
</nowiki>
   
 
  
                //使用2. setXXX()系列方法为sql命令设置值
 
                pstmt.setString(1, username);//
 
                pstmt.setString(2, password);  //setInt,setFloat
 
 
                //3.执行查询
 
                rs = pstmt.executeQuery();// 
 
   
 
    if(rs.next()) { 
 
    success=true;
 
    } else { 
 
    success=false;
 
    }
 
    pstmt.close();
 
         
 
}catch (SQLException e) {
 
            System.out.println(e.getMessage());
 
}
 
 
return success;    
 
   
 
}
 
 
public static void main(String[] args) throws Exception{
 
 
UserDaoSQL uds =new UserDaoSQL();
 
 
    uds.verify("ma","123456");
 
    User u1=new User("zhangwu","456");//这里可能会遇到构造方法参数不符的问题,重新修改一下构造方法
 
    uds.addUser(u1);
 
    System.out.println(uds.hasUser(u1.getName()));
 
    uds.queryUser();
 
    System.out.println("Goodbye!");
 
    uds.conn.close();
 
}
 
}</nowiki>
 
  
 
==显示层==
 
==显示层==

2020年5月27日 (三) 07:02的版本

任务描述

1.创建商品操作的业务逻辑层

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

3. 编写表示层的代码


实训原理

Java2020-12-3.png

表示层

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

业务逻辑层

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

数据访问层

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

数据访问层

GoodsDao接口

本接口改动不大,主要是find和findALL返回值变成了ArrayList<User>类型。

变动的原因是 现在软件分层了,数据库查询到的数据不宜直接在dao层打印了,通过arraylist传出去

package dao;

import java.util.ArrayList;

import entity.Goods;

public interface GoodsDao {
	  public int getNum();
	  public boolean add(Goods g);//增加商品
	  
	  public boolean delete(String id);//删除商品
	  
	  public ArrayList<Goods> findAll();//查询所有商品
	  
	  public ArrayList<Goods> find(String name);//查询某种商品是否存在
	  
	  public boolean modify(String id,float p);//修改商品
	  
	  public int hasGoods(String name);//查询某种商品是否存在,返回id号
}

创建GoodsDaoSQL实现类

本类改动不大,主要是queryUser( )返回值变成了ArrayList<User>类型。

变动的原因是 现在软件分层了,数据库查询到的数据不宜直接在dao层打印了,通过arraylist传出去

package dao;

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

import entity.*;

public class GoodsDaoSQL implements GoodsDao{
	// JDBC 驱动名及数据库 URL
		
	    Connection conn;
	    
	    public GoodsDaoSQL(){
	    	 this.getConn();
	    }
	     /**
		   * 连接数据库
		   * @param 值为空
		   * @return 布尔值
		*/
		private boolean getConn() {     
	     
	    	//Connection conn = null;       
	        try {
	        	final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
	    		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";
	    		
	    		// 数据库的用户名与密码,需要根据自己的设置
	    		final String USER = "root";
	    	    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());
	        	return false;
	        } catch (SQLException e) {
	        	System.out.println(e.getMessage());
	        	return false;
	        }
	        return true;
	   }
}


业务逻辑层

Java2020-12-1.png

创建服务类GoodsService

package service;

import java.util.ArrayList;

import dao.*;
import entity.*;
//import exception.GoodsException;
/**
 * 这个类处理与商品有关的业务逻辑
 */
public class GoodsService {
	
	
	private GoodsDao dbset ;
	
	
	public GoodsService() {
		dbset =  new GoodsDaoSQL();
	}
        public static void main(String[] args) {
        }
}

添加商品addGoods()

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

删除商品delGoods()

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

查看所有商品queryGoods( )

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

搜索商品queryGoods(String name)

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


查询函数queryUser( )

这个功能要完成,需要把UserDao的queryUser( )返回值改为ArrayList<User>,这个我们稍后处理

/**
	 * 查询仓库中的用户
	 */
	public void queryUser( ){
		System.out.println("本店现有如下用户:");
		ArrayList<User> users =userset.queryUser();
                //测试代码
		for(User user:users){
			System.out.println(user); 
		}
		System.out.println();
	}

修改商品modifyGoods()


	/**
	   * 向数据仓库中修改商品的数量
	   * @param g 仓库中待修改的商品
	   * @param p 商品修改后的价格
	   * @return 值为空
	   */
	public void modifyGoods(String name,float p)  {
		System.out.println("现在开始修改商品 "+name+ " 的价格");
		//try{
		    int id = dbset.hasGoods(name);
		    if(id==0){//如果查不到这个商品			
				//throw new GoodsException("要修改的商品"+g.getName()+" 不存在哦!");
				System.out.println("要修改的商品"+name+" 不存在");
			}else {//查到这个商品了,可以做进一步操作				
	    		dbset.modify(Integer.toString(id), p);
				System.out.println(name+" 的价格更改为 " + p+ " 元");
			    System.out.println();	
			}
		//}catch( GoodsException e){
				//System.out.println(e.toString());
		//}
			
		    	
	}
	

在main方法中写测试代码

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		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 g2= new Noodles("2","兰州牛肉面",15.0f,20);
		Goods g3= new Rice("3","黄焖鸡米饭",12.0f,30,false);
		
		//商品上架		
		System.out.println("执行添加餐品操作...");
		s.addGoods(g1);
		s.addGoods(g2);
		s.addGoods(g3);
		
		//System.out.println("共找到商品?件:"+s.getNum());
		System.out.println("以下为商品详情信息:");
		s.queryGoods();
		
		//商品下架
		System.out.println("执行删除餐品操作...");
		s.delGoods("山西刀削面");
		//查询所有商品
		s.queryGoods();		
		
		System.out.println("修改兰州牛肉面的价格为15:");
		s.modifyGoods("兰州牛肉面", 15f);
		
		//根据商品名称查找商品
		String name="牛肉面";
		s.queryGoods(name);
	}

完整代码



显示层

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

Java2020-12-4.png

客户端

main/TestUser:

package main;

import java.util.Scanner;
import service.*;

public class TestUser {
	public  static void 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(); 
	    us.login(uname,pwd);//向下调用业务逻辑层的代码
		 	
   }
	
	
	public static void main(String[] args) throws Exception{
		 
		Scanner sc = new Scanner(System.in);
		start(sc);
	     
	 }
}

输出结果:

Java2020-12-5.png

管理端

管理端显示层功能:

1. 添加用户

2. 展示所有用户

管理员先在这两个功能中选择其一,然后根据选择、调用业务逻辑层的不同方法,实现功能。