友佳书屋实训项目(三)

简介: 友佳书屋实训项目(三)

三、 客户模块

1.分析实体

客户,单词为 Customer 实体的名称就定义下来了

定义实体类

|— 属性:

客户编号 customerId 类型是 int(用于确定的唯一性);

客户名称 customerName;类型是 String 【收件人的姓名】

客户用户名 username; 类型是 String 【客户用于登录网站的账号】

客户密码 password ; 类型是 String【客户用于登录网站的密码】

客户性别 sex ; 类型是 String

出书年月 birthday ; 类型是 String

客户地址 address 类型是 String 【收件人的地址】

电子邮箱 email{ 类型: String} 【邮箱邮件认证,确认邮箱真实性】

手机号码 telephone{ 类型: String} 【收件人的电话】

|— 方法:

getter And Setter方法

toString 方法

构造方法

|— 有参数构造方法

|---- ① 带有customerId 及后续所有属性的构造方法

|---- ② 不带有customerId 及后续所有属性的构造方法

|— 无参数构造方法


演示代码如下:

package cn.javabs.entity;

public class Customer {
    private int  customerId  ;
    private String  customerName;
    private String  username ;
    private String  password ;
    private String  sex;
    private String  birthday;
    private String  address ;
    private String  email;
    private String  telephone;


    public Customer() {

    }
    public Customer(String customerName, String username, String password, String sex, String birthday, String address, String email, String telephone) {
        this.customerName = customerName;
        this.username = username;
        this.password = password;
        this.sex = sex;
        this.birthday = birthday;
        this.address = address;
        this.email = email;
        this.telephone = telephone;
    }

    public Customer(int customerId, String customerName, String username, String password, String sex, String birthday, String address, String email, String telephone) {
        this.customerId = customerId;
        this.customerName = customerName;
        this.username = username;
        this.password = password;
        this.sex = sex;
        this.birthday = birthday;
        this.address = address;
        this.email = email;
        this.telephone = telephone;
    }

    @Override
    public String toString() {
        return "Customer{" +
                "customerId='" + customerId + '\'' +
                ", customerName='" + customerName + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", sex='" + sex + '\'' +
                ", birthday='" + birthday + '\'' +
                ", address='" + address + '\'' +
                ", email='" + email + '\'' +
                ", telephone='" + telephone + '\'' +
                '}';
    }

    public int getCustomerId() {
        return customerId;
    }

    public void setCustomerId(int customerId) {
        this.customerId = customerId;
    }

    public String getCustomerName() {
        return customerName;
    }

    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }
}


2 编写Service层

Service层有 接口和实现类

(1)先去编写接口,接口的命名规范为 [实体类的名称+ Service],本接口为BookService,实现类为BookServiceImpl

(2)考虑该接口内哪些功能,功能对应的是方法。

2.1 编写Service接口

功能如下:

①客户注册

②删除客户

③修改客户

④查询所有客户

⑤根据客户名称查询模糊查询客户

⑥客户登录

⑦根据客户编号查询图书

对应的是七个方法:

客户注册方法, 参数列表是:Customer customer; 返回值类型为int

删除客户方法, 参数列表是:int customerId; 返回值类型为int

修改客户方法, 参数列表是Customer customer; 返回值类型为int

查询所有客户方法, 无参数 返回值类型为List;

【因为查询的所有类目,不再是单一的一个类目,需要有容器存储所有类目对象,该容器合适的是集合,便于查询的是ArrayList集合。{ArrayList特性是 查询快、增删慢 | LinkedList特性是 查询慢、增删快}】

根据客户编号查询客户, 参数列表是int customerId; 返回值类型为Customer;

根据客户名称或者是姓氏查询客户,属于模糊查询, 参数列表是String customerName; 返回值类型为List;

客户登录方法,参数列表是:String username , String password 返回值类型为Customer;

【根据用户名和密码进行查询,只能够是一个客户】


代码如下:

package cn.javabs.service;

import cn.javabs.entity.Customer;
import java.util.List;
public interface CustomerService {

    /**
     * 1.客户注册
     * @param customer
     * @return
     */
    int  customerRegister(Customer customer);

    /**
     * 2.客户登录
     * @param username
     * @param password
     * @return
     */
    Customer customerLogin(String username,String password);

    /**
     * 3.删除客户
     * @param customerId
     * @return
     */
    int  delCustomer(int customerId);

    /**
     * 4.修改客户
     * @param customer
     * @return
     */
    int editCustomer(Customer customer);

    /**
     * 5.查询所有客户
     * @return
     */
    List<Customer> findAllCustomer();

    /**
     * 6.根据客户的名称进行查询客户【模糊查询】
     * @param customerName
     * @return
     */
    Customer findCustomerByCustomerName(String customerName);

    /**
     * 7.根据客户的编号进行查询客户
     * @param customerId
     * @return
     */
    Customer findCustomerByCustomerId(int customerId);


}
2.2 编写Service实现类

CustomerServiceImpl实现类具体操作与上篇雷同,不再截图展示具体过程。

package cn.javabs.service.impl;

import cn.javabs.dao.CustomerDao;
import cn.javabs.dao.impl.CustomerDaoImpl;
import cn.javabs.entity.Customer;
import cn.javabs.service.CustomerService;

import java.util.List;

public class CustomerServiceImpl implements CustomerService {

    CustomerDao customerDao =  new CustomerDaoImpl();
    
    /**
     * 1.客户注册
     *
     * @param customer
     * @return
     */
    @Override
    public int customerRegister(Customer customer) {
        return customerDao.register(customer);
    }

    /**
     * 2.客户登录
     *
     * @param username
     * @param password
     * @return
     */
    @Override
    public Customer customerLogin(String username, String password) {
        return customerDao.login(username,password);
    }

    /**
     * 3.删除客户
     *
     * @param customerId
     * @return
     */
    @Override
    public int delCustomer(int customerId) {
        return customerDao.del(customerId);
    }

    /**
     * 4.修改客户
     *
     * @param customer
     * @return
     */
    @Override
    public int editCustomer(Customer customer) {
        return customerDao.edit(customer);
    }

    /**
     * 5.查询所有客户
     *
     * @return
     */
    @Override
    public List<Customer> findAllCustomer() {
        return customerDao.getAllCustomer();
    }

    /**
     * 6.根据客户的名称进行查询客户【模糊查询】
     *
     * @param customerName
     * @return
     */
    @Override
    public Customer findCustomerByCustomerName(String customerName) {
        return customerDao.getCustomerByCustomerName(customerName);
    }

    /**
     * 7.根据客户的编号进行查询客户
     *
     * @param customerId
     * @
     * return
     */
    @Override
    public Customer findCustomerByCustomerId(int customerId) {
        return customerDao.getCustomerByCustomerId(customerId);
    }
}

3 编写DAO层

Dao层有 接口和实现类

3.1 编写Dao接口
package cn.javabs.dao;

import cn.javabs.entity.Customer;

import java.util.List;

public interface CustomerDao {
    int register(Customer customer);

    Customer login(String username, String password);

    int del(int customerId);

    int edit(Customer customer);

    List<Customer> getAllCustomer();

    Customer getCustomerByCustomerName(String customerName);

    Customer getCustomerByCustomerId(int customerId);
}

3.1 编写Dao实现类

命名为: CustomerDaoImpl

该实现类实现CustomerDao接口内所有的抽象方法,此处借助了Apache开源提供的数据库工具类 Dbutils包、利用该包内的QueryRunner进行完成增删改查的语句执行操作,省去了Jdbc繁琐的环节。

具体代码如下:

package cn.javabs.dao.impl;

import cn.javabs.dao.CustomerDao;
import cn.javabs.entity.Customer;
import cn.javabs.util.DruidUtil;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import javax.xml.namespace.QName;
import java.sql.SQLException;
import java.util.List;

public class CustomerDaoImpl implements CustomerDao {

    QueryRunner qr = new QueryRunner(DruidUtil.getDataSource());

    @Override
    public int register(Customer customer) {
        try {
            return qr.update("insert into customer(customerName,username,password,sex,birthday,address,email,telephone)",
                        customer.getCustomerName(),
                        customer.getUsername(),
                        customer.getPassword(),
                        customer.getSex(),
                        customer.getBirthday(),
                        customer.getAddress(),
                        customer.getEmail(),
                        customer.getTelephone()
                    );
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public Customer login(String username, String password) {
        try {
            return qr.query("select * from customer where username = ? and password = ?",new BeanHandler<Customer>(Customer.class),username,password);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public int del(int customerId) {
        try {
            return qr.update("delete from customer where customerId = ?",customerId);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public int edit(Customer customer) {
         try {
            return qr.update("update customer set customerName = ? , username = ? , password = ? , sex = ? , birthday = ? , address = ? , email = ?, telephone = ? where customerId = ?",
                    customer.getCustomerName(),
                    customer.getUsername(),
                    customer.getPassword(),
                    customer.getSex(),
                    customer.getBirthday(),
                    customer.getAddress(),
                    customer.getEmail(),
                    customer.getTelephone(),
                    customer.getCustomerId());
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public List<Customer> getAllCustomer() {
        try {
            return qr.query("select * from customer ",new BeanListHandler<Customer>(Customer.class));
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 根据客户名称【模糊查询】 重点在  sql语句内 不再是 =,而是 like
     * @param customerName
     * @return
     */
    @Override
    public Customer getCustomerByCustomerName(String customerName) {
        try {
            return qr.query("select * from customer where customerName like  ? ",new BeanHandler<Customer>(Customer.class),customerName);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public Customer getCustomerByCustomerId(int customerId)   {
        try {
            return qr.query("select * from customer where customerId = ? ",new BeanHandler<Customer>(Customer.class),customerId);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}


4. 编写CustomerServlet

代码如下:`

package cn.javabs.web.servlet;

import cn.javabs.entity.Customer;
import cn.javabs.service.CustomerService;
import cn.javabs.service.impl.CustomerServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/customerServlet")
public class CustomerServlet extends HttpServlet {

    CustomerService customerService = new CustomerServiceImpl();

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=UTF-8");

        String op = request.getParameter("op");
        switch (op){
            case "register":
                register(request,response);
            break;
            case "login":
                login(request,response);
                break;
            case "editCustomer":
                editCustomer(request,response);
                break;
            case "delCustomer":
                delCustomer(request,response);
                break;
            case "updateCustomer":
                updateCustomer(request,response);
                break;
            case "customerList":
                customerList(request,response);
                break;
            default:
                System.out.println("没有找到对应的参数!请查证");
                break;
        }
    }

    /**
     * 查询所有客户列表
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    private void customerList(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        List<Customer> customerList = customerService.findAllCustomer();
        if(customerList.size()>0 && customerList != null){
            request.setAttribute("list",customerList);
            request.getRequestDispatcher("customerList.jsp").forward(request,response);
        }else{
            request.setAttribute("msg","尚未查询到客户信息");
            request.getRequestDispatcher("message.jsp").forward(request,response);
        }
    }

    private void updateCustomer(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{

    }

    /**
     * 删除客户
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    private void delCustomer(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{

        String sid = request.getParameter("id");
        int id = Integer.parseInt(sid);

        int row = customerService.delCustomer(id);
        if(row > 0){
            request.setAttribute("msg","删除客户成功!");
            request.getRequestDispatcher("message.jsp").forward(request,response);
        }else{
            request.setAttribute("msg","删除客户失败!");
            request.getRequestDispatcher("message.jsp").forward(request,response);
        }
    }

    private void editCustomer(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{


    }

    private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{

    }

    private void register(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{

    }
}

5.页面
5.1. customerList.jsp
<%--
  Created by IntelliJ IDEA.
  User: Mryang
  Date: 2021/10/18
  Time: 11:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>客户列表</title>
</head>
<body>
<table border="1" cellpadding="0" cellspacing="0" align="center" width="900px">
    <tr>
        <th>序号</th>
        <th>客户名称</th>
        <th>客户账号</th>
        <th>客户密码</th>
        <th>客户电话</th>
        <th>客户邮箱</th>
        <th>客户性别</th>
        <th>客户生日</th>
        <th>客户地址</th>
        <th>操作</th>
    </tr>
    <c:forEach items="${list}" var="item">
        <tr>
            <td>${item.customerId}</td>
            <td>${item.customerName}</td>
            <td>${item.username}</td>
            <td>${item.password}</td>
            <td>${item.telephone}</td>
            <td>${item.email}</td>
            <td>${item.sex}</td>
            <td>${item.birthday}</td>
            <td>${item.address}</td>
            <td>
                <a href="JavaScript:alert('略')">修改</a>
                <a href="JavaScript:delCustomer(${item.customerId})">删除</a>
            </td>
        </tr>
    </c:forEach>
</table>
</body>
</html>
<script>
    function delCustomer(id) {
        console.log("id是" + id);
        var sure = confirm("您确定要删除该客户吗?");
        if(sure){
            location.href="customerServlet?op=delCustomer&id=" + id;
        }

    }
</script>
6. 编写Sql语句

-- 创建数据库
create  database bookmarket;

-- 选中数据库
use bookmarket;

-- 1. 创建  类目 数据表
CREATE  table  category(
   categoryId int primary key auto_increment, --  auto_increment  自动递增
   categoryName varchar(50),
   categoryDescription varchar(250)
);


-- 2. 创建  图书 数据表
CREATE  table  book(
   bookId int primary key auto_increment, --  auto_increment  自动递增
   bookName varchar(50),
   publish varchar(100),
   price double,
   author varchar (50),
   count int ,
   bookPic varchar (500),
   categoryId int,
   --  外键 categoryId  指向  category主键categoryId
   foreign  key(categoryId) references category(categoryId)
);

-- 3. 创建  客户 数据表
CREATE  table  customer(
    customerId    int primary key auto_increment, --  auto_increment  自动递增
    customerName  varchar(50),
    username   varchar(50),
    password   varchar(50),
    sex  varchar(10),
    birthday  varchar(50),
    address   varchar(500),
    email  varchar(50),
    telephone  varchar(50)
);

利用可视化操作台Navicat软件进行操作,首先随便打开一个数据库:

然后点击 【查询】

然后点击【新建查询】:

最后:


登录功能
1. 设计网页的页面
1.1 登录页面 :login.jsp
<%--
  Created by IntelliJ IDEA.
  User: Mryang
  Date: 2021/10/19
  Time: 8:30
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>客户登录</title>
</head>
<body>
    <form action="/customerServlet?op=login" method="post">
        <table>
            <tr>
                <td>用户名:</td>
                <td>
                    <input type="text" name="username" id="username">
                </td>
            </tr>
            <tr>
                <td>密  码:</td>
                <td>
                    <input type="text" name="password" id="password">
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <input type="submit" value="快速登录">
                </td>
            </tr>
        </table>
    </form>
</body>
</html>

1.2 主页页面 :main.jsp
<%--
  Created by IntelliJ IDEA.
  User: Mryang
  Date: 2021/10/19
  Time: 8:53
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>网站后台主页</title>
</head>
<body>
        ${sessionScope.CUST.customerName},您好!欢迎您登录到友佳书屋后台管理系统!
        <hr/>

</body>
</html>

1.3 首页页面 :index.jsp
<%-- Created by IntelliJ IDEA. --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <head>
    <title>网站首页</title>
  </head>
  <body>

      <c:if test="${sessionScope.CUST != null}">
          <a href="/categoryServlet?op=categoryList">查询类目列表</a>
          <a href="addCategory.jsp">添加类目</a>
          <hr/>
          <a href="bookServlet?op=toAddBook">添加图书</a>
          <a href="bookServlet?op=bookList">查询图书列表</a>
          <hr/>
          <a href="customerServlet?op=customerList">查询客户列表</a>
      </c:if>
      <c:if test="${sessionScope.CUST == null}">
        <a href="login.jsp">登录页面</a>
      </c:if>

  </body>
</html>

2. 编写Servlet
2.1 登录功能的方法代码

    private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        Customer customer = customerService.customerLogin(username, password);//此时, 存储在customer【查到了,用户名和密码 放在了customer | null】
        if (customer != null){//  有这个数据
            HttpSession session = request.getSession();
            session.setAttribute("CUST",customer);
            request.getRequestDispatcher("main.jsp").forward(request,response);
        }else{
            request.setAttribute("msg","您填写的用户名和密码不正确,请查证后登录");
            request.getRequestDispatcher("message.jsp").forward(request,response);
        }
    }

目录
相关文章
|
6月前
|
Java 关系型数据库 MySQL
|
5月前
|
存储 对象存储 容器
友佳书屋实训项目(二)
友佳书屋实训项目(二)
44 0
|
5月前
|
存储 druid 数据库
友佳书屋实训项目(一)
友佳书屋实训项目(一)
56 0
|
6月前
|
算法 前端开发 Java
思途实训-day03-04
思途实训-day03-04
|
存储 程序员 Linux
苏嵌实训——day14(上)
苏嵌实训——day14(上)
苏嵌实训——day14(上)
|
存储
苏嵌实训——day11(下)
苏嵌实训——day11(下)
101 0
苏嵌实训——day11(下)
|
存储 Ubuntu 固态存储
苏嵌实训——day1
苏嵌实训——day1
143 0
苏嵌实训——day1
|
存储
苏嵌实训——day11(上)
苏嵌实训——day11(上)
101 0
苏嵌实训——day11(上)