这篇文章主要介绍项目用户端的操作,包括查看余额,存钱,取钱,转账,和退卡操作,以及分页设置
一:用户登录
这里根据页面传入用户的个人信息查看用户的合法性,验证通过跳转页面,否则重新回到登录页面
dao
/**
* 根据卡号和密码查询用户信息
* @param icno 卡号
* @param pwd 密码
* @return 用户信息
*/
public User findUserByNameAndPwd(String icno, String pwd) {
Connection connection = DBUtils.getConnection();
PreparedStatement preparedStatement = null;
try {
preparedStatement = connection
.prepareStatement("select * from user where icno = ? and pwd = ?");
preparedStatement.setString(1,icno);
preparedStatement.setString(2,pwd);
ResultSet resultSet = preparedStatement.executeQuery();
User user = new User();
if (resultSet.next()) {
user.setIcno(resultSet.getString(1));
user.setName(resultSet.getString(2));
user.setPwd(resultSet.getString(3));
user.setMobile(resultSet.getString(4));
user.setIdcard(resultSet.getString(5));
user.setBalance(resultSet.getDouble(6));
}
return user;
}catch (Exception e) {
e.printStackTrace();
}finally {
DBUtils.release(connection,preparedStatement,null);
}
return null;
}
service
/**
* 查找用户
* @param icno 卡号
* @param pwd 密码
* @return 结果
*/
User findUserByNameAndPwd(String icno, String pwd);
@Override
public User findUserByNameAndPwd(String icno, String pwd) {
return userDao.findUserByNameAndPwd(icno, pwd);
}
servlet
/**
* 用户登录
*/
@WebServlet("/UserLogin")
public class UserLoginServlet extends HttpServlet {
private UserService userService =new UserServiceImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求参数
String icno = req.getParameter("icno");
String pwd = req.getParameter("pwd");
//验证
User user=userService.findUserByNameAndPwd(icno, pwd);
if (user==null){
req.setAttribute("error","用户登录失败");
req.getRequestDispatcher("/changepage/login.jsp").forward(req,resp);
}else {
req.getSession().setAttribute("ua",user);
resp.sendRedirect("/changepage/UserIndex.jsp");
}
}
}
二:修改密码
首先输入原来的密码,然后输入新密码并确认,在验证中查看俩次密码是否相同,原密码是否正确,在对密码的合法性进行校验。最后跳转到登录界面重新登录
dao
/**
* 更新用户信息
* @param icno 卡号
* @param newpwd 新密码
* @return result
*/
public int updateUserPwd(String icno,String newpwd) {
Connection connection = DBUtils.getConnection();
PreparedStatement preparedStatement = null;
try {
preparedStatement = connection
.prepareStatement("update user set pwd = ? where icno=?");
preparedStatement.setString(1,newpwd);
preparedStatement.setString(2,icno);
int num= preparedStatement.executeUpdate();
return num;
}catch (Exception e) {
e.printStackTrace();
}finally {
DBUtils.release(connection,preparedStatement,null);
}
return 0;
}
service
/**
* 更新密码
* @param icno 卡号
* @param newpwd 新密码
* @return 结果
*/
boolean updateUserPwd(String icno,String newpwd);
@Override
public boolean updateUserPwd(String icno,String newpwd) {
return userDao.updateUserPwd(icno, newpwd) >= 1;
}
servlet
/**
* 修改用户个人密码
*/
@WebServlet("/UserChange")
public class UserChangeServlet extends HttpServlet {
private UserService userService = new UserServiceImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获得密码
String icno = req.getParameter("icno");
String oldpwd = req.getParameter("oldpwd");
String newpwd = req.getParameter("newpwd");
String newpwd2 = req.getParameter("newpwd2");
//检验密码
User userByNameAndPwd = userService.findUserByNameAndPwd(icno, oldpwd);
if (userByNameAndPwd == null){
//密码错误
req.setAttribute("error","密码有误");
req.getRequestDispatcher("/changepage/UserChangePwd.jsp").forward(req,resp);
}else {
if (newpwd != null && newpwd.equals(newpwd2)){
boolean result=userService.updateUserPwd(icno,newpwd);
if (result){
req.getRequestDispatcher("/changepage/login.jsp").forward(req,resp);
}else {
req.setAttribute("error","更新失败");
req.getRequestDispatcher("/changepage/UserChangePwd.jsp").forward(req,resp);
}
}else {
req.setAttribute("error","输入密码不一致");
req.getRequestDispatcher("/changepage/UserChangePwd.jsp").forward(req,resp);
}
}
//比较内容
}
}
三:查询余额
在用户登录时保存了用户的基本信息,其中包括卡号,这时servlet接收卡号,并根据卡号查询所属用户的余额
dao
/**
* 根据卡号获取资金
* @param icno 卡号
* @return 资金
*/
public double getUserBalance(String icno) {
Connection connection = DBUtils.getConnection();
PreparedStatement preparedStatement = null;
try {
preparedStatement = connection
.prepareStatement("select balance from user where icno=?");
preparedStatement.setString(1,icno);
ResultSet resultSet = preparedStatement.executeQuery();
double balance=0;
if (resultSet.next()) {
balance=resultSet.getDouble(1);
}
return balance;
}catch (Exception e) {
e.printStackTrace();
}finally {
DBUtils.release(connection,preparedStatement,null);
}
return 0;
}
service
/**
* 获取金额
* @param icno 卡号
* @return 新密码
*/
double getUserBalance(String icno);
@Override
public double getUserBalance(String icno) {
return userDao.getUserBalance(icno);
}
servlet
/**
* 用户存款
*/
@WebServlet("/UserStore")
public class UserStoreServlet extends HttpServlet {
private UserService userService=new UserServiceImpl();
private RunMessageService runMessageService=new RunMessageServiceImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String saveNum = req.getParameter("saveNum");
String icno = null;
if (req.getSession().getAttribute("ua")!=null){
User user=(User)req.getSession().getAttribute("ua");
icno = user.getIcno();
}
int money=0;
if (saveNum != null){
money=Integer.parseInt(saveNum);
}
if (money==0){
req.getSession().setAttribute("error3","存款不能为0");
resp.sendRedirect("/changepage/UserStore.jsp");
}else if (money>2000){
req.getSession().setAttribute("error3","存款不能大于2000");
resp.sendRedirect("/changepage/UserStore.jsp");
}else if (money%50!=0){
req.getSession().setAttribute("error3","存款为50的倍数");
resp.sendRedirect("/changepage/UserStore.jsp");
}else {
boolean result=userService.saveMoney(money,icno);
//保存交易记录
RunMessage runMessage = new RunMessage();
runMessage.setIcno(icno);
Date date = new Date();
runMessage.setRm_date(new Date().toString());
runMessage.setRm_balance(Double.parseDouble(String.valueOf(money)));
runMessage.setRm_rest(userService.getUserBalance(icno));
runMessage.setRm_currency("RMB");
runMessageService.addRunMessage(runMessage);
if (result){
resp.sendRedirect("/UserSerch");
}
}
}
}
四:存款
在用户登录时保存了用户的基本信息,其中包括卡号,这时servlet接收卡号,并根据卡号将钱存进数据库当中
dao
/**
* 存钱
* @param money 金额
* @param icno 卡号
* @return result
*/
public int saveMoney(int money,String icno) {
Connection connection = DBUtils.getConnection();
PreparedStatement preparedStatement = null;
try {
preparedStatement = connection
.prepareStatement("update user set balance = balance + ? where icno = ?");
preparedStatement.setDouble(1,money);
preparedStatement.setString(2,icno);
int num = preparedStatement.executeUpdate();
return num;
}catch (Exception e) {
e.printStackTrace();
}finally {
DBUtils.release(connection,preparedStatement,null);
}
return 0;
}
service
/**
* 添加金额
* @param money 金额
* @param icno 卡号
* @return 结果
*/
boolean saveMoney(int money,String icno);
@Override
public boolean saveMoney(int money,String icno) {
return userDao.saveMoney(money,icno) >= 1;
}
servlet
/**
* 查询用户余额
*/
@WebServlet("/UserSerch")
public class UserSerchServlet extends HttpServlet {
private UserService userService = new UserServiceImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String icno = null;
if (req.getSession().getAttribute("ua")!=null){
User user=(User)req.getSession().getAttribute("ua");
icno = user.getIcno();
}
double balance = userService.getUserBalance(icno);
req.getSession().setAttribute("balance", balance);
// req.getRequestDispatcher("/changepage/SerchBalance.jsp").forward(req,resp);
resp.sendRedirect("/changepage/SerchBalance.jsp");
}
}
五:取款
在用户登录时保存了用户的基本信息,其中包括卡号,这时servlet接收卡号,并根据卡号将钱存进数据库当中
dao
/**
* 取钱
* @param money 金额
* @param icno 卡号
* @return result
*/
public int fetchMoney(int money, String icno) {
Connection connection = DBUtils.getConnection();
PreparedStatement preparedStatement = null;
try {
preparedStatement = connection
.prepareStatement("update user set balance = balance - ? where icno = ?");
preparedStatement.setDouble(1,money);
preparedStatement.setString(2,icno);
int num = preparedStatement.executeUpdate();
return num;
}catch (Exception e) {
e.printStackTrace();
}finally {
DBUtils.release(connection,preparedStatement,null);
}
return 0;
}
service
/**
* 取钱
* @param money 金额
* @param icno 卡号
* @return 结果
*/
boolean FetchMoney(int money, String icno);
@Override
public boolean FetchMoney(int money, String icno) {
return userDao.fetchMoney(money,icno) >=1;
}
servlet
/**
* 模拟用户取款
*/
@WebServlet("/UserFetch")
public class UserFetchServlet extends HttpServlet {
private UserService userService=new UserServiceImpl();
private RunMessageService runMessageService=new RunMessageServiceImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String fetchNum = req.getParameter("fetchNum");
String icno = null;
if (req.getSession().getAttribute("ua")!=null){
User user=(User)req.getSession().getAttribute("ua");
icno = user.getIcno();
}
double userBalance = userService.getUserBalance(icno);
int money=0;
if (fetchNum != null){
money=Integer.parseInt(fetchNum);
}
if (money==0){
req.getSession().setAttribute("error2","取款不能为0");
resp.sendRedirect("/changepage/UserStore.jsp");
}else if (money>2000){
req.getSession().setAttribute("error2","取款不能大于2000");
resp.sendRedirect("/changepage/UserStore.jsp");
}else if (money%50!=0){
req.getSession().setAttribute("error2","取款为50的倍数");
resp.sendRedirect("/changepage/UserStore.jsp");
}else if(money>userBalance){
req.getSession().setAttribute("error2","取款金额不能大于剩余金额");
resp.sendRedirect("/changepage/UserStore.jsp");
}else {
boolean result=userService.FetchMoney(money,icno);
//保存交易记录
RunMessage runMessage = new RunMessage();
runMessage.setIcno(icno);
runMessage.setRm_date(new Date().toString());
runMessage.setRm_balance(-Double.parseDouble(String.valueOf(money)));
runMessage.setRm_rest(userService.getUserBalance(icno));
runMessage.setRm_currency("RMB");
runMessageService.addRunMessage(runMessage);
if (result){
resp.sendRedirect("/UserSerch");
}else {
req.getSession().setAttribute("error2","取款失败");
resp.sendRedirect("/changepage/UserStore.jsp");
}
}
}
}
六:转账
dao
没有写独立的dao 复用存款和取款 注意转账的对方账户要存在,且转账金额不能超过自己的最大金额
service
/**
* 转账
* @param transferIn 转出账户
* @param icno 转入账户
* @param money 金额
* @return 结果
*/
boolean transfer(String transferIn, String icno, int money);
@Override
public boolean transfer(String transferIn, String icno, int money) {
//转入
int i = userDao.saveMoney(money, transferIn);
if (i >= 1) {
//转出
int i1 = userDao.fetchMoney(money, icno);
if (i1 >= 1){
return true;
}
}
return false;
}
servlet
/**
* 用户转账
*/
@WebServlet("/UserTransfer")
public class UserTransferServlet extends HttpServlet {
private UserService userService=new UserServiceImpl();
private RunMessageService runMessageService=new RunMessageServiceImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String transferIn = req.getParameter("transferIn");
String transferNum = req.getParameter("transferNum");
String icno = null;
if (req.getSession().getAttribute("ua")!=null){
User user=(User)req.getSession().getAttribute("ua");
icno = user.getIcno();
}
int money=0;
if (transferNum != null){
money=Integer.valueOf(transferNum);
}
if (userService.getUserByIcno(transferIn)==null){
req.getSession().setAttribute("error4","用户不存在");
resp.sendRedirect("/changepage/UserTransfer.jsp");
}
double userBalance = userService.getUserBalance(icno);
if (money==0){
req.getSession().setAttribute("error4","转账不能为0");
resp.sendRedirect("/changepage/UserTransfer.jsp");
}else if (money>2000){
req.getSession().setAttribute("error4","转账不能大于2000");
resp.sendRedirect("/changepage/UserTransfer.jsp");
}else if (money%50!=0){
req.getSession().setAttribute("error4","转账为50的倍数");
resp.sendRedirect("/changepage/UserTransfer.jsp");
}else if (userBalance<money){
req.getSession().setAttribute("error4","转账不能超过自己的金额");
resp.sendRedirect("/changepage/UserTransfer.jsp");
}else {
//转账操作
boolean result=userService.transfer(transferIn,icno,money);
//记录
//保存交易记录
RunMessage runMessage = new RunMessage();
runMessage.setIcno(transferIn);
runMessage.setRm_date(new Date().toString());
runMessage.setRm_balance(Double.parseDouble(String.valueOf(money)));
runMessage.setRm_rest(userService.getUserBalance(transferIn));
runMessage.setRm_currency("RMB");
if(result){
runMessageService.addRunMessage(runMessage);
runMessage.setIcno(icno);
runMessage.setRm_rest(userService.getUserBalance(icno));
runMessage.setRm_balance(-Double.parseDouble(String.valueOf(money)));
runMessageService.addRunMessage(runMessage);
resp.sendRedirect("/UserSerch");
}else {
req.getSession().setAttribute("error4","转账失败");
resp.sendRedirect("/changepage/UserTransfer.jsp");
}
}
}
}
七:交易明细+分页
需要额外的实体类记录交易信息
注意分页数据的封装
pojo
public class Manager {
private Integer id;
private String name;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "Manager{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
dao
public class PageBean<T> {
private int pageNum;
private int pageSize;
private int totalRecord;
private int totalPage;
private List<T> list;
private int startIndex;
private int start;
private int end;
public PageBean(int pageNum, int pageSize, int totalRecord) {
this.pageNum = pageNum;
this.pageSize = pageSize;
this.totalRecord = totalRecord;
if (totalRecord%pageSize==0){
this.totalPage=totalRecord/pageSize;
}else {
this.totalPage=totalRecord/pageSize+1;
}
this.startIndex=(pageNum-1)*pageSize;
this.start=1;
this.end=5;
if (totalPage<=5){
this.end=this.totalPage;
}else {
this.start=pageNum-2;
this.end=pageNum+2;
if (start<=0){
this.start=1;
this.end=5;
}
if (end>=this.totalPage){
this.end=totalPage;
this.start=end-4;
}
}
}
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getTotalRecord() {
return totalRecord;
}
public void setTotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int gettotalRecord() {
return totalRecord;
}
public void settotalRecord(int totalRecord) {
this.totalRecord = totalRecord;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
}
service
/**
* 添加交易记录
* @param runMessage 交易信息
*/
public void addRunMessage(RunMessage runMessage);
/**
* 查询所用数据
* @param icno
* @return
*/
List<RunMessage> findAllDetails(String icno);
/**
* 查询分页数据
* @param icno
* @param page
* @param pageSize
* @return
*/
List<RunMessage> findRunMessageByPage(String icno,int page, int pageSize);
public class RunMessageServiceImpl implements RunMessageService {
private RunMessageDao runMessageDao=new RunMessageDao();
@Override
public void addRunMessage(RunMessage runMessage) {
runMessageDao.addRunMessage(runMessage);
}
@Override
public List<RunMessage> findAllDetails(String icno) {
return runMessageDao.findAllDetails(icno);
}
@Override
public List<RunMessage> findRunMessageByPage(String icno,int page, int pageSize) {
return runMessageDao.findRunMessageByPage(icno,page, pageSize);
}
}
servlet
@WebServlet("/serchDetaile")
public class SerchDetaileServlet extends HttpServlet {
private RunMessageService runMessageService=new RunMessageServiceImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String icno;
if (req.getSession().getAttribute("ua")!=null){
User user=(User)req.getSession().getAttribute("ua");
icno = user.getIcno();
List<RunMessage> runMessageList=runMessageService.findAllDetails(icno);
//分页处理
String pageNum = req.getParameter("pageNum");
int page=1;
if (pageNum != null){
page=Integer.parseInt(pageNum);
}
//每页显示条数
int pageSize=5;
int totalRecord=runMessageList.size();
PageBean<RunMessage> pageBean = new PageBean<>(page, pageSize, totalRecord);
List<RunMessage> list=runMessageService.findRunMessageByPage(icno,page,pageSize);
pageBean.setList(list);
req.getSession().setAttribute("pageBean",pageBean);
req.getSession().setAttribute("RunMessage",pageBean.getList());
resp.sendRedirect("/changepage/UserDetaile.jsp");
}
}
}
八:退卡
将所有存入的session信息删除即可
servlet
/**
* 用户退出
*/
@WebServlet("/exit")
public class ExitServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//销毁session数据
req.getSession().removeAttribute("ua");
req.getSession().invalidate();
resp.sendRedirect("/changepage/login.jsp");
}
}
九:页面效果
十:总结
经过几天的学习,掌握了基于javaweb的开发技术,对jsp以及前端页面有了更深入的了解,善于使用工具类可以提高开发效率。