用Java EE技术实现产品售后服务系统

简介: 用Java EE技术实现产品售后服务系统

项目编号:BS-XX-202

一,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

二,项目简介

我国信息产业、企业售后服务发展迅速,电商的发展超出了所有人都想象,与此同时也带来了诸多的问题。飞速发展的交易额,带来了大量的GDP增长,然而光鲜的背后是每天无数客服手忙脚乱的为顾客服务。由于顾客对自身生活质量要求越来越高,售后管理业必须随着人们生活水平的提高而改变。伴随着购物规模的不断扩大,售后的各项反馈、投诉,对售后的要求等都将越来越复杂,售后管理系统的自身的管理工作量也将越来越大。人工服务不能做到及时有效的反映,以及做出正确的应对以及保存,迫切需要一个系统来解决这些问题。本项目的出发点力在解决这一困难!

本系统的主要任务是为基于JavaEE技术和SQL Server数据库的售后服务管理系统建立一个企业设计。主要技术要求包括:掌握web开发所需的技术,包括HTML和JSP动态网页编程技术,SQL Server数据库知识,等等。主要实现企业售后服务信息的增删改查,顾客信息的增删改查,顾客留言信息的及时反馈保存,管理员帐号增删、登录等。该系统还可以方便制造商跟踪产品的质量和服务和管理以及购买者对企业的建议提交。

自进入现代社会以来,世界各地越来越密切,文化和经济交流日益频繁,带来了信息的爆炸性增长,近年来随着信息高速公路的快速发展迅速变化,每个人可以访问世界的任何角落,要获取的信息量大幅增长,外部环境的快速变化,完全人为地记录信息变得非常不切实际。如何收集足够的信息,及时快速的处理信息,快速存储和编辑信息,信息技术的发展已经成为现代社会的常见问题。电脑解决了外观上的问题。可以使用大量信息收集,编辑或调查易于使用和快速编辑,计算机和快速处理。同时,电脑硬件的发展也逐渐适应了现代社会信息量的快速增长,信息的快速更新,随时随地改变需求的趋势。可以预见未来信息系统的发展不仅仅是简单的数据处理,而且可以得出工具的结论,可以根据不同的条件从所有可用的信息中筛选,排序,分析,为用户提供一个最终结论,例如现在在实验治疗系统开发中包括开发过程系统简单,数据处理结果小,报表系统进一步发展成为最终决策专家系统的支持系统,甚至在一些领域已成为战略信息系统,可以支持领导层面的竞争战略。这是电脑发展的未来趋势。

目前在国内,售后系统架构主要分为B/S和C/S俩种,B/S是通过浏览器方式来浏览相关信息,进行一系列的相关操作。因为现代社会的信息更新速度快,更新频繁,同时对信息的安全性有很高的要求,所以各公司的内部系统大多采用这种模式,我要做的这个仅仅是为客户投诉,售后服务的,应该公开面向社会,所以,应当采用更稳定的C/S模式。

该系统采用三层结构,这是由客户端和用户通过浏览器完成,并且浏览器的表达逻辑由JSP页负责。

图2-1系统模式图

三,系统展示

1管理登陆

当系统登陆时,首先出现的是一个用户登陆的界面,主要是维护系统的安全性和完整性。如下图所示:

图4-12系统主页面

主要代码如下:

定义一个窗体

          setTitle("售后管理系统登录");

          label.setText("用  户  名:");

          label_1.setText("密      码:");

          login.setText("登录");

   reset.setText("重置");

   panel_1.add(reset);

生成验证码

public String getCheckCode(){

      Random random = new Random();

      String sRand="";

      for (int i=0;i<4;i++){

       String rand=String.valueOf(random.nextInt(10));

       sRand+=rand;

      }

       return sRand;

   }

4.4.2 售后服务分类管理

管理员可以对售后服务进行分类,包括对售后服务类别的添加、删除、修改等操作。界面如下图所示:

图4-13系统管理界面

主要代码如下:

x= new x();

      x.open();

      try{

          int i = x.executeUpdate(sql);

          if(i == 1)

             return Constant.SUCCESS;

          else

             return Constant.SYSTEM_ERROR;

      }catch(Exception e){

          e.printStackTrace();

          return Constant.SYSTEM_ERROR;

      }finally{

          x.close();

      }

4.4.3 售后服务信息管理

系统分为管理员和普通用户,管理员权限较高,可对售后服务信息进行管理,包括增、删、修等操作。下图为相关界面:

增加

public int addEmp(String name,String sex,String bir,String departs,String zhiwu,String tel,String address,String remark){

      String sql="insert into emp(name,sex,bir,departs,zhiwu,tel,address,remark,addtime) " +

          "values('"+name+"','"+sex+"','"+bir+"','"+departs+"','"+zhiwu+"','"+tel+"','"+address+"','"+remark+"','"+date+"') ";

      DBO dbo = new DBO();

      dbo.open();

      try{

          int i = dbo.executeUpdate(sql);

          if(i == 1)

             return Constant.SUCCESS;

          else

             return Constant.SYSTEM_ERROR;

      }catch(Exception e){

          e.printStackTrace();

          return Constant.SYSTEM_ERROR;

      }finally{

          dbo.close();

      }

}

修改

public int upEmp(String id,String name,String sex,String bir,String departs,String zhiwu,String tel,String address,String remark){

      String sql="update emp set name='"+name+"',sex='"+sex+"',bir='"+bir+"',departs='"+departs+"',zhiwu='"+zhiwu+"',"+"tel='"+tel+"',address='"+address+"',remark='"+remark+"'  where id='"+id+"' ";

      DBO dbo = new DBO();

      dbo.open();

      try{

          int i = dbo.executeUpdate(sql);

          if(i == 1)

             return Constant.SUCCESS;

          else

             return Constant.SYSTEM_ERROR;

      }catch(Exception e){

          e.printStackTrace();

          return Constant.SYSTEM_ERROR;

      }finally{

          dbo.close();

      }

  }  

图4-14售后服务信息管理

4.4.4 投诉信息管理

管理员还可以对客户留言的投诉信息进行回复或者删除操作,相关界面如下:

删除留言

   public int delGuestBook(int id[]){

      DBO dbo=new DBO();

      dbo.open();

      try{

          for(int i = 0;i<id.length;i++){

 dbo.executeUpdate("delete from  guestbook  where  id = '"+id[i]+"'");  

   dbo.executeUpdate("delete from  replay  where  mid = '"+id[i]+"'");

          }

          return Constant.SUCCESS;

      }catch(Exception e){

          e.printStackTrace();

          return Constant.SYSTEM_ERROR;

      }finally{

          dbo.close();

      }

   }

回复留言

   public int reGuestBook(int mid ,String replay,String replayer){

      String sql = "insert into replay (mid,replay,replayer,replaytime)" +

   " values ('"+mid+"','"+replay+"','"+replayer+"','"+date+"') ";

   String sql2 = "update guestbook set replay='1' where id='"+mid+"' ";

      DBO dbo = new DBO();

      dbo.open();

      try{

          int i = dbo.executeUpdate(sql);

          int j = dbo.executeUpdate(sql2);

          if(i == j && i== 1)

             return Constant.SUCCESS;

          else

             return Constant.SYSTEM_ERROR;

      }catch(Exception e){

          e.printStackTrace();

          return Constant.SYSTEM_ERROR;

      }finally{

          dbo.close();

      }

   }

图4-15 投诉信息管理

4.4.5 产品回访管理

可以对回访信息进行添加修改或删除,界面如下图所示:

图4-16 产品回访管理

四,核心代码展示

package com.action;
/**
 * 
 * 留言本
 */
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.bean.GuestBookBean;
import com.bean.SystemBean;
import com.util.Constant;
import com.util.Filter;
public class GuestBookServlet extends HttpServlet {
  /**
   * Constructor of the object.
   */
  public GuestBookServlet() {
    super();
  }
  /**
   * Destruction of the servlet. <br>
   */
  public void destroy() {
    super.destroy(); // Just puts "destroy" string in log
    // Put your code here
  }
  /**
   * The doGet method of the servlet. <br>
   *
   * This method is called when a form has its tag value method equals to get.
   * 
   * @param request the request send by the client to the server
   * @param response the response send by the server to the client
   * @throws ServletException if an error occurred
   * @throws IOException if an error occurred
   */
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      doPost(request,response);
  }
  /**
   * The doPost method of the servlet. <br>
   *
   * This method is called when a form has its tag value method equals to post.
   * 
   * @param request the request send by the client to the server
   * @param response the response send by the server to the client
   * @throws ServletException if an error occurred
   * @throws IOException if an error occurred
   */
  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    request.setCharacterEncoding(Constant.CHARACTERENCODING);
    response.setContentType(Constant.CONTENTTYPE);
    //nikename, pic, email, qq, weburl, blogurl, expressions, content
    String sysdir = new SystemBean().getDir();
    HttpSession session = request.getSession();
    String method = request.getParameter("method").trim();
      GuestBookBean guestBookBean = new GuestBookBean();
      if(method.equals("add")){//发表留言
        String member=(String)session.getAttribute("member");
        String nikename = Filter.escapeHTMLTags(request.getParameter("nikename").trim());
        String face ="images/nobody.gif";
        String email = Filter.escapeHTMLTags(request.getParameter("email").trim());
        String qq = Filter.escapeHTMLTags(request.getParameter("qq").trim());
        String weburl = Filter.escapeHTMLTags(request.getParameter("weburl").trim());
        String blogurl = Filter.escapeHTMLTags(request.getParameter("blogurl").trim());
        String expressions = "images/face/"+Filter.escapeHTMLTags(request.getParameter("face").trim())+".gif";
        String content = Filter.escapeHTMLTags(request.getParameter("content").trim());
        String ip = request.getRemoteAddr();
        int guestbook=1;
        int flag = guestBookBean.addGuestBook(nikename, face, email, qq, weburl, blogurl, expressions, content, ip,guestbook);
        if(flag == 1){
            request.setAttribute("message", "谢谢您的留言,请等候管理员回复!");
            request.getRequestDispatcher("guestbook.jsp").forward(request, response);
        }
        else{
          request.setAttribute("message", "系统维护中,请稍后再试!");
          request.getRequestDispatcher("guestbook.jsp").forward(request, response);
        }
      }
      else if(method.equals("delguestbook")){//删除留言
        try{
          String username2 = (String)session.getAttribute("user");
          if(username2 == null){
            request.getRequestDispatcher("error.jsp").forward(request, response);
          }
          else{
            String check[] = request.getParameterValues("checkit");
            if(check == null){
              request.setAttribute("message", "请选择要删除的记录!");
              request.getRequestDispatcher(sysdir+"/guestbook/index.jsp").forward(request, response);
            }
            else{
              int id[]= new int[check.length];
              for(int i = 0;i<check.length;i++){
                int s = Integer.parseInt(check[i]);       
                id[i] = s;
              }
              int flag = guestBookBean.delGuestBook(id);
              if(flag == Constant.SUCCESS){
                request.getRequestDispatcher(sysdir+"/guestbook/index.jsp").forward(request, response);
              }
              else{
                request.setAttribute("message", "系统维护中,请稍后再试!");
                request.getRequestDispatcher(sysdir+"/guestbook/index.jsp").forward(request, response);
              }
            }
          }
        }catch(Exception e){
          request.getRequestDispatcher("error.jsp").forward(request, response);
        }
      }
      else if(method.equals("replay")){//回复留言
        try{
          String username2 = (String)session.getAttribute("user");
          if(username2 == null){
            request.getRequestDispatcher("error.jsp").forward(request, response);
          }
          else{
            String messageid = Filter.escapeHTMLTags(request.getParameter("id").trim());
            String replay = Filter.escapeHTMLTags(request.getParameter("replay").trim());
            int flag = guestBookBean.reGuestBook(Integer.parseInt(messageid), replay, username2);
            if(flag == Constant.SUCCESS){
              request.setAttribute("message", "回复成功!");
              request.getRequestDispatcher(sysdir+"/guestbook/index.jsp").forward(request, response);
            }
            else{
              request.setAttribute("message", "系统维护中,请稍后再试!");
              request.getRequestDispatcher(sysdir+"/guestbook/index.jsp").forward(request, response);
            }
          }
        }catch(Exception e){
          request.getRequestDispatcher("error.jsp").forward(request, response);
        }
      }
      else if(method.equals("upreplay")){
        try{
          String username2 = (String)session.getAttribute("user");
          if(username2 == null){
            request.getRequestDispatcher("error.jsp").forward(request, response);
          }
          else{
            String messageid = Filter.escapeHTMLTags(request.getParameter("id").trim());
            String replay = Filter.escapeHTMLTags(request.getParameter("replay").trim());
            int flag = guestBookBean.upReplay(Integer.parseInt(messageid), replay);
            if(flag == Constant.SUCCESS){
              request.setAttribute("message", "修改成功!");
              request.getRequestDispatcher(sysdir+"/guestbook/index.jsp").forward(request, response);
            }
            else{
              request.setAttribute("message", "系统维护中,请稍后再试!");
              request.getRequestDispatcher(sysdir+"/guestbook/index.jsp").forward(request, response);
            }
          }
        }catch(Exception e){
          request.getRequestDispatcher("error.jsp").forward(request, response);
        }
      }
      else{
        request.getRequestDispatcher("error.jsp").forward(request, response);
      }
  }
  /**
   * Initialization of the servlet. <br>
   *
   * @throws ServletException if an error occure
   */
  public void init() throws ServletException {
    // Put your code here
  }
}

五,相关作品展示

基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目

基于Nodejs、Vue等前端技术开发的前端实战项目

基于微信小程序和安卓APP应用开发的相关作品

基于51单片机等嵌入式物联网开发应用

基于各类算法实现的AI智能应用

基于大数据实现的各类数据管理和推荐系统

相关文章
|
10天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
43 7
|
25天前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
10天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
16天前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
27天前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
1月前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
81 3
|
1月前
|
JSON 前端开发 JavaScript
java-ajax技术详解!!!
本文介绍了Ajax技术及其工作原理,包括其核心XMLHttpRequest对象的属性和方法。Ajax通过异步通信技术,实现在不重新加载整个页面的情况下更新部分网页内容。文章还详细描述了使用原生JavaScript实现Ajax的基本步骤,以及利用jQuery简化Ajax操作的方法。最后,介绍了JSON作为轻量级数据交换格式在Ajax应用中的使用,包括Java中JSON与对象的相互转换。
45 1
|
1月前
|
SQL 监控 Java
技术前沿:Java连接池技术的最新发展与应用
本文探讨了Java连接池技术的最新发展与应用,包括高性能与低延迟、智能化管理和监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,为开发者提供了一份详尽的技术指南。
33 7
|
1月前
|
移动开发 前端开发 Java
过时的Java技术盘点:避免在这些领域浪费时间
【10月更文挑战第14天】 在快速发展的Java生态系统中,新技术层出不穷,而一些旧技术则逐渐被淘汰。对于Java开发者来说,了解哪些技术已经过时是至关重要的,这可以帮助他们避免在这些领域浪费时间,并将精力集中在更有前景的技术上。本文将盘点一些已经或即将被淘汰的Java技术,为开发者提供指导。
97 7
|
1月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
49 3