简单实现图书购买的管理系统
(因为目前还没有学习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数据库连接技术
项目中所写代码的包的结构
用户登录和注册功能
我所实现的简单的登录界面和注册界面:
关键代码
(声明:因为在doPost方法中调用了doGet方法,所以功能的实现我均写在了doGet方法内)
1、用户登录界面html中的关键代码:
2、登录失败显示界面的相关代码:
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中的关键代码:
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;
}