小型客户管理系统的开发

(接上)

显示页面

frameset.jsp

实现页面分栏:

<frameset rows="20%, *, 8%">
      <frame src="top.jsp" name="top">
	  <frame src="main.jsp" name="main">
	  <frame src="tip.jsp" name="tip">
</frameset>

注:去掉<body></body>标签

top.jsp

顶部页面:

<head>
    <!-- 点击该页面的链接从“main”中打开 -->
    <base target="main" />
</head>
<body style="text-align:center;">
    <h1>客户关系管理系统</h1>
    <a href="add.jsp">添加客户</a>&nbsp;&nbsp;|&nbsp;
    <a href="CustomerServlet?method=a">查询客户</a>&nbsp;&nbsp;|&nbsp;
    <a href="#">高级搜索</a>
</body>

main.jsp

中间部分:

<h2>欢迎来到我的主页!</h2>

tip.jsp

底部:

<p>版权所有:lakuite</p>

显示效果:

add.jsp

添加客户信息的表单页面。

<body style="text-align:center;">
    <h3>添加客户信息</h3>
    <form action="CustomerServlet" method="post">
      <!-- 隐藏,传method过去以测试执行方法 -->
      <input type="hidden" name="method" value="add" />
      <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;
      	<input type="text" name="id" /></p>
      <p>&nbsp;name:&nbsp;
      	<input type="text" name="name" /></p>
      <p>sex:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      	<input type="radio" name="sex" value="男"/>男
      	<input type="radio" name="sex" value="女"/>女
      </p>
      <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;age:&nbsp;
      	<input type="text" name="age" /></p>
      <p>phone:&nbsp;
      	<input type="text" name="phone" /></p>
      <button type="submit">提交</button>&nbsp;&nbsp;&nbsp;
      <button type="reset">重置</button>
    </form>
  </body>

show.jsp

显示客户列表。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<body style="text-align:center;">
  	<h3>客户信息表</h3>
    <table border="1" cellspacing="0" cellpadding="7" style="margin:auto;">
      <tr>
    	<th>编号</th>
   		<th>姓名</th>
   		<th>性别</th>
   		<th>年龄</th>
   		<th>电话</th>
   		<th></th>
   		<th></th>
      </tr>
      <c:forEach var="v" items="${list }">
      <tr>
      	<td>${v.id }</td>
      	<td>${v.name }</td>
      	<td>${v.sex }</td>
      	<td>${v.age }</td>
      	<td>${v.phone }</td>
      	<td><a href="CustomerServlet?method=del&cid=${v.id }">删除</a></td>
      	<td><a href="CustomerServlet?method=findid&cid=${v.id }">修改</a></td>
      </tr>
      </c:forEach>
    </table>
  </body>

注:(1)这里用到了jstl和el表达式,需执行taglib指令。

(2)有时候html内的表格即使在外部设置了居中也依然不会显示居中,此时需加上  style="margin:auto;"  代码。

update.jsp

客户信息的修改页面。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<body style="text-align:center;">
    <h3>修改客户信息</h3>
    <form action="CustomerServlet" method="post">
      <input type="hidden" name="method" value="update" />
      <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id:&nbsp;
      	<input type="text" name="id" value="${p1.id }" /></p>
      <p>&nbsp;name:&nbsp;
      	<input type="text" name="name" value="${p1.name }" /></p>
      <p>sex:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      	<input type="radio" name="sex" value="男" <c:if test="${p1.sex=='男' }">checked</c:if> />男
      	<input type="radio" name="sex" value="女" <c:if test="${p1.sex=='女' }">checked</c:if> />女
      </p>
      <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;age:&nbsp;
      	<input type="text" name="age" value="${p1.age }" /></p>
      <p>phone:&nbsp;
      	<input type="text" name="phone" value="${p1.phone }" /></p>
      <button type="submit">修改</button>&nbsp;&nbsp;&nbsp;
      <button type="reset">重置</button>
    </form>
</body>

注:(1)性别为单选框,默认选择用 checked 表示,使用jstl的if判断来显示。

(2)与客户信息添加页面一样,不同的是输入框内需要传参。

super.jsp

高级搜索页面。

<body style="text-align:center;">
    <h3>查询客户信息</h3>
    <form action="CustomerServlet" method="post">
      <input type="hidden" name="method" value="superfind" />
      <p>&nbsp;name:&nbsp;
      	<input type="text" name="name" /></p>
      <p>sex:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      	<input type="radio" name="sex" value="男"/>男
      	<input type="radio" name="sex" value="女"/>女
      </p>
      <p>phone:&nbsp;
      	<input type="text" name="phone" /></p>
      <button type="submit">查询</button>&nbsp;&nbsp;&nbsp;
      <button type="reset">重置</button>
    </form>
</body>

 

servlet

实现处理功能。

新建包“com.xmx.oa.controller”,在包下建servlet,命名为“CustomerServlet.java”:

源代码:

package com.xmx.oa.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.xmx.oa.model.entity.Person;
import com.xmx.oa.model.service.IPersonService;
import com.xmx.oa.model.service.impl.PersonServiceImpl;

public class CustomerServlet extends HttpServlet {
	IPersonService service = new PersonServiceImpl();
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
//		System.out.println("1");
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
//		System.out.println("2");
		String method = request.getParameter("method");
//		System.out.println(method);
		if(method.equals("add")){
			this.doAdd(request, response);
		}else if(method.equals("del")){
			this.doDel(request, response);
		}else if(method.equals("findid")){
			this.doFindId(request, response);
		}else if(method.equals("update")){
			this.doUpdate(request, response);
		}else if(method.equals("superfind")){
			this.doSuperFind(request, response);
		}else{
			this.doFind(request, response);
		}
	}
	
	public void doAdd(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		//1.提取参数
		int id = Integer.parseInt(request.getParameter("id"));
		String name = request.getParameter("name");
		String sex = request.getParameter("sex");
		int age = Integer.parseInt(request.getParameter("age"));
		String phone = request.getParameter("phone");
		//2.封装成对象
		Person p = new Person(id, name, sex, age, phone);
		//3.调用业务逻辑层(放到外面)
//		IPersonService service = new PersonServiceImpl();
		int i = service.addPerson(p);
		System.out.println(i);
		//4.跳转到显示页面
		if(i>0){
			request.getRequestDispatcher("CustomerServlet?method=a").forward(request, response);
		}else{
			request.getRequestDispatcher("add.jsp").forward(request, response);
		}
	}
	
	public void doDel(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1.取得参数
		int id = Integer.parseInt(request.getParameter("cid"));
		//2.调用业务逻辑层的删除方法
		int i = service.deletePersonById(id);
		//3.跳转到显示页面
		if(i>0){
			request.getRequestDispatcher("CustomerServlet?method=a").forward(request, response);
		}else{
			request.getRequestDispatcher("add.jsp").forward(request, response);
		}
	}
	
	public void doFindId(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1.取得参数
		int id = Integer.parseInt(request.getParameter("cid"));
		//2.调用业务逻辑层中的按id查询方法
		Person p = service.findByIdPerson(id);
		//3.保存对象
		request.setAttribute("p1", p);
		//4.跳转到update.jsp
		request.getRequestDispatcher("update.jsp").forward(request, response);
	}
	
	public void doUpdate(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1.提取参数
		int id = Integer.parseInt(request.getParameter("id"));
		String name = request.getParameter("name");
		String sex = request.getParameter("sex");
		int age = Integer.parseInt(request.getParameter("age"));
		String phone = request.getParameter("phone");
		//2.封装成对象
		Person p = new Person(id, name, sex, age, phone);
		//3.调用业务逻辑层(放到外面)
//		IPersonService service = new PersonServiceImpl();
		int i = service.updatePerson(p);
		System.out.println(i);
		//4.跳转到显示页面
		if(i>0){
			request.getRequestDispatcher("CustomerServlet?method=a").forward(request, response);
		}else{
			request.getRequestDispatcher("update.jsp").forward(request, response);
		}
	}
	
	//查询所有客户信息
	public void doFind(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1.调用业务逻辑层的查询方法
		List<Person> list = service.findAllPerson();
		//2.保存到request中
		request.setAttribute("list", list);
		//3.跳转到显示页面
		request.getRequestDispatcher("show.jsp").forward(request, response);
	}
	
	public void doSuperFind(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1.提取参数
		String name = request.getParameter("name");
		String sex = request.getParameter("sex");
		String phone = request.getParameter("phone");
		//2.封装成对象
		Person p = new Person(name, sex, phone);
		//3.调用业务逻辑层的高级搜索方法
		List<Person> list = service.superQuery(p);
		//4.保存到request中
		request.setAttribute("list", list);
		//5.跳转到显示页面
		request.getRequestDispatcher("show.jsp").forward(request, response);
	}

	public void init() throws ServletException {
		// Put your code here
	}

}

 

过滤器filter

实现完成编码问题。

新建包“com.xmx.oa.filter”,在包下建class“CustomerFilter.java”,建的时候选择添加相应的Filter:

源代码:

package com.xmx.oa.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CustomerFilter implements Filter {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		System.out.println("我是过滤器,我骄傲!");
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		// 把请求传回过滤链
		chain.doFilter(request,response);

	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub

	}

}

配置“web.xml”文件:

<filter>
  	<filter-name>filter1</filter-name>
  	<filter-class>com.xmx.oa.filter.CustomerFilter</filter-class>
  </filter>
  <!-- mapping过滤器的映射,url-pattern中配置的是你要对那个内容进行过滤 -->
  <filter-mapping>
  <filter-name>filter1</filter-name>
  <url-pattern>/CustomerServlet</url-pattern>
</filter-mapping>

 

一些说明

1、传参

<a href="CustomerServlet?method=del&cid=${v.id }">删除</a>
  • CustomerServlet.java为处理页面
  • ?后为传参,参数值不需要打引号
  • &符号分隔两个不同参数

2、执行流程

以添加用户信息为例。

在add.jsp中添加信息后:

点击“提交”,页面交给“CustomerServlet.java”处理。

“add.jsp”传过去的method值为add:

<form action="CustomerServlet" method="post">
      <input type="hidden" name="method" value="add" />
      ……
</from>

 在“CustomerServlet.java”页面中,由“add”判断执行doAdd()方法:

if(method.equals("add")){
    this.doAdd(request, response);
}

把表单中的值获取,并封装到Person p中后,调用业务逻辑层,来到“PersonServiceImpl.java”页面:

IPersonService service = new PersonServiceImpl();
int i = service.addPerson(p);

“PersonServiceImpl.java”页面中,继承于“IPersonService.java”,该继承页面声明了dao中的方法:

public class PersonServiceImpl implements IPersonService {
    ……
}

return dao.addPerson(p) ,来到“PersonDao.java”:

PersonDao dao=new PersonDao();
	@Override
	public int addPerson(Person p) {
		// TODO Auto-generated method stub
		return dao.addPerson(p);
	}

“PersonDao.java”页面中,执行addPerson(Person p)方法:

public int addPerson(Person p) {
    ……
    return i;
}

获取返回值i后回到“CustomerServlet.java”页面:

if(i>0){
	request.getRequestDispatcher("CustomerServlet?method=a").forward(request, response);
}else{
	request.getRequestDispatcher("add.jsp").forward(request, response);
}

执行成功则跳转到“CustomerServlet.java”,并传method值为a。

method=a为else中的判断条件,执行doFind()方法:

else{
	this.doFind(request, response);
}

该方法最后获取到结果值,并跳转到显示页面显示出来:

//查询所有客户信息
	public void doFind(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1.调用业务逻辑层的查询方法
		List<Person> list = service.findAllPerson();
		//2.保存到request中
		request.setAttribute("list", list);
		//3.跳转到显示页面
		request.getRequestDispatcher("show.jsp").forward(request, response);
	}

3、dao中方法的定义

因为在“CustomerServlet.java”中使用的方法来源于 :IPersonService service = new PersonServiceImpl(); 

经历了“IPersonService.java”和“PersonServiceImpl.java”。

因此在“PersonDao.java”中如果新增了方法后,在另两个页面也要相应添加。

例如:

//PersonDao.java
//高级搜索(多字段)Person封装的是可能选择的条件字段
	public List<Person> superQuery(Person p){
        ……
        return list;
    }

//IPersonService.java
//高级搜索
	public List<Person> superQuery(Person p);

//PersonServiceImpl.java
@Override
	public List<Person> superQuery(Person p) {
		// TODO Auto-generated method stub
		return dao.superQuery(p);
	}

注:方法有改变后,需重启服务器代码才生效。 

 

旧版地址:http://www.jb51.net/codes/272886.html 软件名称:云点滴客户关系管理CRMOA系统 软件版本:v1.02.13简体中文安装部署版 软件大小:8.12M 软件类型:简体中文/国产软件/免费版 软件分类:电子商务/客户管理 软件所需系统要求:winserver2003、winserver2008、win7、winxp、mssql2008 联系人:QQ1921681647 开 发 商:http://www.yundiandi.cn 软件下载地址:http://www.yundiandi.cn/Soft/YDDV1.0.ZIP 简要介绍: 云点滴客户解决方案是针对中小企业量身制定的具有简单易用、功能强大、永久免费使用、终身升级维护的智能化客户解决方案。依托功能强大、安全稳定的阿里云平 台,性价比高、扩展性好、安全性高、稳定性好。高内聚低耦合的模块化设计,使得每个模块最大限度的满足需求,相关模块的组合能满足用户的一系列要求。简单 易用的云备份使得用户随时随地简单、安全、可靠的备份客户信息。功能强大的报表统计使得用户大数据分析变的简单,更加容易的制定销售战略。集成的短信发送 使得用户随时随地的为公司客户发送短信。简单易用的操作界面使得用户快速上手。 功能介绍; 一、个人中心:通讯录备忘录 电话薄 主要用于添加联系人信息,相当于通讯录功能,可以存贮相关联系人的基本信息,姓名、联系方式、地址、邮箱等。 工作日志 主要用于记录个人工作生活中大小事情的备忘,相当于备忘录功能,后期将会添加到期提醒功能,提示您什么时间做什么事情。 二、任务管理:工作交流平台 指派任务 主要用于公司内部成员之间进行任务指派的功能,包括完成任务的具体要求和最后期限,及时指派给负责人,并可以对完成情况反馈结果进行查看。 查看任务 用于被派送任务的查看和管理。 日志管理 对每日、每周、每月的工作情况及时向上级领导反馈的功能,支持图文并茂的展现形式。 批注日志 对下属工作情况的浏览,并及时根据完成情况给予批注。 三、资讯管理:信息传播平台 资讯管理 公司内部可以发布公司新闻、任命通知、放假通知、会议通知等 四、机会管理:挖掘潜在客户 机会公海管理 机会是指有关个人、公司一些原始数据信息,这些信息可能来自于商业展会、会议营销、广告等其它的商业活动,每一条机会都有可能发展为有效的客户。销售机会信息、销售机会描述、销售机会指派、申请、关闭。 个人机会管理 对自己销售机会进行管理,可丢弃,开发成功或者生成客户。 机会申请管理 对所有申请销售机会进行分配。 五、客户管理:有效管理客户 客户信息管理 全面记录客户信息,包括客户基本信息、联系人信息、产品或服务购买记录、账款往来,交往记录等等,在一个界面里可以查看以上所有信息。并可以对客户信息共享或放入公海或申请或指派。 公海申请管理 可以对公海中的客户进行指派。 公海池管理 公海池中的客户可以申请、转移、共享、生成客户。 六、产品管理:清晰产品归类 产品信息管理 可以记录产品详细信息,比如货号,颜色、尺码、所属类别,成本价,零售价等基本信息。 七、合同管理:记录业务往来 合同维护 主要记录业务往来记录、含合同明细、订单记录、付款方式、付款金额、回款记录等。有未审核的款项会有提示。 合同审核 可以分配相关人员审核合同信息,生效后不可更改内容;但可以添加回款记录,在回款审核中进行审核。 合同回款 可以在合同维护中添加回款记录,并在此处进行回款审核。 八、账号管理: 企业用户信息自定义 账号分配 管理员用户可以自由设置企业组织架构 管理员用户可以设置多个 管理员用户可以自由添加用户账号 用户级别可以自定义 可以管理员工基本信息 每个用户有独立的用户名和密码 权限控制 各用户的权限可以细化到各栏目 各用户的权限可以细化到每项操作 各用户的权限可以细化到操作范围 各用户登陆系统后,功能菜单可以各不相同 离职员工处理 可以冻结用户账号 可以将已冻结用户的工作转移给其他用户 可以随时再次激活已冻结账号 十、系统设置:公司信息自由设置 公司信息管理 自由设置公司基本信息,包含公司LOGO、公司网址、地址和网站管理人员 组织机构管理 设置公司组织机构,并添加相关人员 权限设置 通过自由滑动对每一个功能模块自由设置权限 用户管理 可以对公司每个员工基本信息进行设置、进行权限设置 数据字典 可以自定义设置每个功能模块中下拉框的字段 登陆日志 可以查看用户登陆情况 十一、云备份: 移动数据宝库 云备份 一键备份数据,客户信息,公司信息永不丢失 更新记录: 1、更新手机登陆绑定 2、新增从excel文件导入到电话本功能 3、新增用户信息导入电话本功能. 4、更新日志图片溢出问题 5、更新登录页面样式 6、增加首页本周新增客户、合同、销售机会查看功能 7、更新新增合同、客户界面。 8、新增短信发送记录统计条数功能。 9、更新机会公海一个员工只能申请一次机会。 官网网站:http://www.yundiandi.cn 演示网址:http://www.yundiandi.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值