简单实现图书购买的管理系统
(因为目前还没有学习JSP,所以一些界面的实现比较笨拙,也不美观)

功能:

1、用户登录功能
2、用户注册功能
3、显示图书功能
4、删除图书功能
5、添加图书功能
6、修改图书功能
7、添加购物车功能
8、查看购物车功能
9、清空购物车(结账)功能
10、历史订单功能
11、图书列表页的访问人数统计功能
12、字符过滤器
13、实现数据库操作工具类的单例模式

功能具体描述:

所有图书操作都必须在已登录的状态下进行

1、用户登录时需要输入用户名和密码,并与数据库中已有用户的用户名和密码进行比对,同时用户登录时需要区分用户身份(普通用户/管理员),身份不同,所进入的界面不同:管理员可以对图书进行浏览、删除、添加操作, 也可以加入购物车、结账;普通用户只能浏览图书、加入购物车、结账。
2、用户注册时,所注册的用户名不可与数据库中已有的用户重名,不区别用户身份。
3、把数据库中的图书信息显示到页面上。
4、根据图书名称删除指定图书。
5、所要添加图书的图书名称不可与数据库中的图书名称相同。
6、根据图书id修改图书的其他属性(图书名称、图书描述、图书价格…),修改的图书名不可与数据库已有图书的图书名称相同。
7、点击添加购物车时,将图书加入到购物车中(类似于我们平时网上购物加入购物车的操作)。
8、点击查看购物车时,将购物车中图书的信息显示在界面中,并显示商品数量和商品总价。
9、清空购物车中的商品,并提示“结账成功”。
10、历史订单功能:包括生成订单,查看历史订单;每个用户只能查看自己的历史订单。
11、选取合适的监听器实现统计图书列表页的访问人数(注:同一用户同一时段内多次访问图书列表页时,计数为1次;注销后重新登录访问图书列表页时计数值加1)。
12、对所有页面进行字符过滤功能。

知识点

1、Servlet
点击查看 Servlet 知识整理一点击查看 Servlet 知识整理二 2、Session会话管理
3、过滤器Filter
4、监听器Listener
5、JDBC数据库连接技术

项目中所写代码的包的结构

java 接收购物车数据代码 java购物车管理系统_java 接收购物车数据代码


java 接收购物车数据代码 java购物车管理系统_servlet_02

用户登录和注册功能

我所实现的简单的登录界面和注册界面:

java 接收购物车数据代码 java购物车管理系统_java_03


java 接收购物车数据代码 java购物车管理系统_java_04

关键代码

(声明:因为在doPost方法中调用了doGet方法,所以功能的实现我均写在了doGet方法内)

1、用户登录界面html中的关键代码:

java 接收购物车数据代码 java购物车管理系统_User_05


2、登录失败显示界面的相关代码:

java 接收购物车数据代码 java购物车管理系统_数据库_06


3、处理用户登录的Servlet中的关键代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 获取请求参数
		String uName = request.getParameter("uName");
		String uPwd = request.getParameter("uPwd");
		String logIn = request.getParameter("logIn");
		if (null != uName && null != uPwd) {
			// 根据请求参数构造User对象
			User user = new User();
			user.setUName(uName);
			user.setUPwd(uPwd);
			// 调用服务层接口查询用户是否存在
			boolean b = new UserService().isExistUser(user);
			if (b) {// 如果存在该用户,则跳转到首页显示图书信息
				List<Object> userLogin = (List<Object>) getServletContext().getAttribute("userLogin");
				// 将用户存入ServletContext
				getServletContext().setAttribute("user", uName);
				getServletContext().setAttribute("admin", logIn);
				//将用户名添加到List中,用来记录登录的人数(包含数据库中含有但登录失败的人)
				userLogin.add(uName);
				response.sendRedirect("book.action");
			} else {
				response.sendRedirect("loginfalse.html");
			}
		}
	}

4、用户注册界面html中的关键代码:

java 接收购物车数据代码 java购物车管理系统_User_07


5、处理用户处注册的Servlet中的关键代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 获取用户信息
		String uName = request.getParameter("uName");
		String uPwd = request.getParameter("uPwd");
		String uPwdCopy = request.getParameter("uPwdCopy");
		if (!uName.equals("") && !uPwd.equals("") && !uPwdCopy.equals("") && uPwd.equals(uPwdCopy)) {// 两次密码相同
			// 将用户信息添加到数据库
			User user = new User();
			user.setUName(uName);
			user.setUPwd(uPwd);
			boolean flag = new UserService().regestUser(user);
			if (flag) {
				// 跳转到登录页面
				response.sendRedirect("login.html");
			} else {
				response.sendRedirect("regest.html");
			}
		} else {// 两次密码不相同或用户名、密码为空
			response.sendRedirect("regest.html");
		}
	}

6、UserService中的对应方法

/**
	 * 判断用户是否存在
	 * 
	 * @param user 待判断的用户
	 * @return 存在则返回true,否则返回false
	 */
	public boolean isExistUser(User user) {
		// 获取待判断的用户信息
		String uName = user.getUName();
		String uPwd = user.getUPwd();
		// 根据用户信息拼接sql语句
		String sql = "select * from UserInfo where user_name = '" + uName + "' and user_pwd = '" + uPwd + "'";
		System.out.println(sql);
		boolean b = false;
		try {
			b = dbUtil.isExist(sql);
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}
		return b;
	}

	/**
	 * 注册用户
	 * 
	 * @param user 待注册的用户
	 * @return 注册是否成功,成功返回true,否则返回false
	 */
	public boolean regestUser(User user) {
		// 获取用户信息
		String uName = user.getUName();
		String uPwd = user.getUPwd();
		int n = -1;// 存储插入的记录数
		try {
			String select = "select user_name from UserInfo where user_name='" + uName + "'";
			boolean isExist = dbUtil.isExist(select);
			if (!isExist) {
				// 拼接插入用户的sql语句
				String sql = "insert into UserInfo(user_name, user_pwd) values('" + uName + "', '" + uPwd + "')";
				// 将用户的信息插入用户表中
				n = dbUtil.addDataToTable(sql);
			}
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}
		return n > 0 ? true : false;

	}