基于Javaweb实现ATM机系统开发实战(四)用户修改删除功能实现

news2024/11/16 23:39:50

我们点一下修改,发现页面进行了跳转,跳转到了/toUpdate,并传递了用户的卡号。

 我们可以先查看一下用户列表展示界面的前端代码:userlist.jsp,可以看到前端代码中做了跳转的动作,我们需要在后端中完成相应的servlet完成这个动作。

 首先,创建UserToUpdateServlet,对用户更新操作的请求进行页面跳转

package com.atm.servlet;

import com.atm.pojo.User;
import com.atm.service.UserService;
import com.atm.service.impl.UserServiceImpl;

import javax.print.attribute.standard.PresentationDirection;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet("/toUpdate")
public class UserToUpdateServlet extends HttpServlet {
    private UserService userService=new UserServiceImpl();
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String icno=request.getParameter("icno");
    try{
        User user=userService.getUserByIcno(icno);
        if(user==null){
            request.getSession().setAttribute("error","用户不存在");
        }
        request.getSession().setAttribute("user",user);
        response.sendRedirect("changepage/update.jsp");
    }catch (Exception e){
        e.printStackTrace();
    }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request,response);
    }


}

要完成修改操作,首先要在用户的修改界面进行数据回显,要显示出这些数据,首先要完成他的查询,所以我们在UserService中添加他的查询方法:

    //根据银行卡号查询用户信息
    public User getUserByIcno(String icno)throws Exception;

然后再他的实现类(UserServiceImpl)中去实现这个方法:

//根据银行卡号查询用户信息
    public User getUserByIcno(String icno) throws Exception{
        return userDao.getUserByIcno(icno);
    }

实现类中调用我们的Dao也就是我们的数据层进行了查询操作,所以在dao中也要对这个方法进行实现:

    //根据银行卡号查询用户信息
    public  User getUserByIcno(String icno)throws  Exception{
        Connection connection= DBUtils.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement("select * from user where icno=?");
        preparedStatement.setString(1,icno);
        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));
        }
        DBUtils.release(connection,preparedStatement,resultSet);
        return user;
    }

这样我们的后端代码就完成了,我们启动项目测试一下修改界面的跳转和回显是否正常:

发现页面跳转和回显功能都正常了,现在我们就可以完成修改操作了:

查看前端页面,我们发现提交修改这个动作跳转到了/update的前端界面。

 所以我们还需要创建一个servlet来接收请求完成数据更新的操作:

package com.atm.servlet;

import com.atm.pojo.User;
import com.atm.service.UserService;
import com.atm.service.impl.UserServiceImpl;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

//执行用户更新操作
@WebServlet("/update")
public class UserUpdateServlet extends HttpServlet {

    private UserService userService=new UserServiceImpl();
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
//获得参数
        String icno=request.getParameter("icno");
        String name=request.getParameter("name");
        String pwd=request.getParameter("pwd");
        String mobile=request.getParameter("mobile");
        String idcard=request.getParameter("idcard");
        double balance=0;
        if(request.getParameter("balance")!=null){
        balance=Double.parseDouble(request.getParameter("idcard"));
        User user=new User();
        user.setIcno(icno);
        user.setBalance(balance);
        user.setName(name);
        user.setPwd(pwd);
        user.setMobile(mobile);
        user.setIdcard(idcard);
//调用业务
        try{
            boolean result=userService.updateUser(user);
            if(result){
                response.sendRedirect("/list");
            }else{
                response.getOutputStream().print("更新失败");
            }
        }catch (Exception e){
            e.printStackTrace();
        }

    }}

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request,response);
    }


}

这里我们调用了UserService接口,但是接口中并没有这个方法,所以我们先在接口中完成这个方法:

    //更新用户
    public boolean updateUser(User user)throws Exception;

再在实现类中实现这个方法:


    //更新用户
    public boolean updateUser(User user)throws Exception{
        int num =userDao.updateUser(user);
        if(num>=1){
            return true;
        }else{
            return false;
        }
    }

实现类中调用了dao数据层进行数据库的操作,所以在数据层中我们也要实现这个功能的方法:

    //更新用户
    public int updateUser(User user) throws  Exception{
        Connection connection= DBUtils.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement("update user set name=?,pwd=?,mobile=?,idcard=?,balance=? where icno=?");
        preparedStatement.setString(1,user.getName());
        preparedStatement.setString(2,user.getPwd());
        preparedStatement.setString(3,user.getMobile());
        preparedStatement.setString(4,user.getIdcard());
        preparedStatement.setDouble(5,user.getBalance());
        preparedStatement.setString(6,user.getIcno());
        int num = preparedStatement.executeUpdate();

        DBUtils.release(connection,preparedStatement,null);
        return num;
    }

因为卡号是用户的唯一凭证,为了安全,我们要在前端将卡号信息设置为不可修改:

 这里我们就已经完成了修改操作的全部代码了,重启下项目测试下修改功能是否成功:

 

 修改成功啦!接下来我们继续删除功能的实现:

我们先点一下删除,发现页面进行了跳转,跳转到/delete的前端页面,并传递了卡号。

 首先我们先随便加一条数据,方便删除功能的测试:

 还是刚刚的老步骤,先创建servlet进行数据接收和请求处理、页面跳转:

package com.atm.servlet;

import com.atm.service.UserService;
import com.atm.service.impl.UserServiceImpl;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet("/delete")
public class UserDeleteServlet extends HttpServlet {
    private UserService userService=new UserServiceImpl();
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String icno=request.getParameter("icno");
    try{


    boolean result=userService.deleteUser(icno);
    if(result){
        response.sendRedirect("/list");
    }else{
        response.getOutputStream().print("删除失败");
    }}catch (Exception e){
        e.printStackTrace();
    }}

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }


}

还是老样子,接口实现:

    //用户删除
    public boolean deleteUser(String icno)throws Exception;

实现类实现:

    //用户删除
    public boolean deleteUser(String icno)throws Exception{
        int num =userDao.deleteUser(icno);
        if(num>=1){
            return true;
        }else{
            return false;
        }
    }

数据层操作:


    //删除用户
    public int deleteUser(String icno) throws Exception{
        Connection connection= DBUtils.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement("delete from user where icno=?");
        preparedStatement.setString(1,icno);
        int num = preparedStatement.executeUpdate();
        DBUtils.release(connection,preparedStatement,null);
        return num;
    }

好啦,现在我们的删除代码全部实现了,现在我们来重启项目测试一下:

 删除成功!

实现代码已上传~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/738168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VectorCAST单元测试参数配置

一、打开 VectorCAST 通常情况下,技术人员会配置一个脚本文件(.bat、.cmd),用户可以通过这个脚本文件来启动 VectorCAST。使用脚本文件启动 VectorCAST,可以在启动时设置好编译器相关的环境变量,方便 Vecto…

企业毛利高,进项抵扣少,增值税高,怎么办?

企业毛利高,进项抵扣少,增值税高,怎么办? 《税筹顾问》专注于园区招商、企业税务筹划,合理合规助力企业节税! 金税四期的出现,让很多企业都陷入了税负重的不利局面。当然了在此环境之下&#x…

回溯法总结

文章目录 回溯法如何理解回溯法 回溯算法模板框架如下:树枝去重树层去重回溯法去重什么时候去重?树层去重数组used[i-1]:回溯函数的参数startIndex:回溯函数的参数用Set的对象uset:局部变量例题 其它细节对于组合问题&…

测试开发知识图谱

目录 前言: 1 测试方法与理论 2 Shell脚本相关 3 数据库相关 4 git 代码管理 5 Python 编程语言与测试框架 6 Web 自动化测试 7 移动端 app 自动化测试 8 常用开源测试平台 9 客户端专项测试 10 服务端接口测试 11 服务端接口自动化测试 12 服务端性能…

国产CAN收发器XL1050可替代NXP的TJA1050T,性能参数基本一致

CAN收发器是CAN控制器和物理总线之间的接口,在工控等需要CAN通信的应用场合是必要的,工程师通常采用NXP、TI等品牌的,TJA1050T是常见型号之一。XL1050是信路达一款CAN收发器,本文讨论信路达的XL1050 替代NXP的TJA1050T的可行性。 …

前后端分离,前端代理设置

1. 没有vue.config.js的配置方法 1.1 在config目录下的index.js里面加入如下所示代码 proxyTable: {"/api": { // 不能写成^/apitarget: "http://localhost:50000", // 只写域名即可ws: true,changeOrigin: true, // 允许跨域pathRewrite: { // 重写&…

leetcode:除自身以外数组的乘积

除自身以外数组的乘积 medium 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请**不要使用除法&a…

抖音seo矩阵系统源码搭建技术+二开开源代码定制部署

抖音SEO源码是指将抖音平台上的视频资源进行筛选、排序等操作,进而提升其在搜索排名中的权重,从而让更多的用户能够发现并观看到这些视频资源。而抖音SEO矩阵系统源码则是指通过建立一个分析系统,分析抖音中的用户、视频、标签等数据&#xf…

【数据分类】基于蜣螂优化算法优化支持向量机的数据分类方法 DBO-SVM分类算法【Matlab代码#47】

文章目录 【可更换其他群智能算法,获取资源请见文章第6节:资源获取】1. 蜣螂优化算法(DBO)2. 支持向量机(SVM)3. DBO-SVM分类模型4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他群智能算法&#…

Java Leetcode 动态规划 91. 解码方法

未优化版本代码展示: class Solution {public int numDecodings(String s) {char[]charss.toCharArray();int lengths.length();//创建dp数组int[]dpnew int[length];//初始化if(chars[0]!0){dp[0]1;}//特殊情况处理if(length1){return dp[0];}if(chars[1]!0){dp[1…

Postman高级应用——变量、流程控制、调试、公共函数、外部数据文件

目录 流程控制 调试 公共函数 外部数据文件 总结: Postman 提供了四种类型的变量 环境变量(Environment Variable) 不同的环境,使用不同的环境变量,例如:测试过程中经常会用到 测试环境,外…

PHP5.4以下解决json_encode中文UNICODE转码问题

PHP5.4以下解决json_encode中文UNICODE转码问题 把汉字先urlencode 然后再使用json_encode, json_encode之后 再次使用urldecode来解码, 这样编码出来的json数组中的 汉字就不会出现unicode编码了。 $params[importList][recipientAddress] urlencode(&…

Spring WebFlux使用函数式编程模型构建异步非阻塞服务

1 前言 上文引入了 Spring 框架中专门用于构建响应式 Web 服务的 WebFlux 框架,同时我也给出了两种创建 RESTful 风格 HTTP 端点实现方法中的一种,即注解编程模型。 本文介绍另一种实现方法——如何使用函数式编程模型创建响应式 RESTful 服务&#xf…

解决子元素设置margin-top使父元素也跟着向下移动的问题

先看代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevi…

rpc、gRPC快速入门,python调用,protobuf协议

什么是rpc?grpc又是什么&#xff1f; 什么是RPC 远程过程调用协议RPC (Remote Procedure Call Protocol) RPC是指远程过程调用&#xff0c;也就是说两台服务器A&#xff0c;B&#xff0c;一个应用部署在A服务器上&#xff0c;想要调用B服务器上应用提供的函数/方法&#xff…

何洁「桔梗」2023巡演广州站7月22日强势回归!

睽违5年&#xff0c;从心出发。7月22日&#xff0c;何洁携新专辑《桔梗》和你相约广州。这次巡回演唱会不仅会带来回忆满满的经典曲目&#xff0c;全新专辑里的作品也会惊喜开唱&#xff0c;期待值拉满。 19岁时年少成名&#xff0c;以不服输的态度诠释音乐至今&#xff0c;应该…

linux中安装nginx

2.安装nginx 2.1 安装nginx前&#xff0c;需要安装的依赖&#xff08;可能是由于nginx版本旧原因&#xff0c;可能最新或较新版本不需安装这些依赖&#xff09; 如下四个依赖需要安装到linux中 2.1.1 安装 pcre 依赖 &#xff08;使用wget命令&#xff09; 步骤一&#xff1…

自动应急灯电路/12V供电的电子节能灯电路设计

自动应急灯电路 本例介绍的自动应急灯&#xff0c;在白天或夜晚有灯光时不工作&#xff0c;当夜晚关灯后或停电时能自动点亮&#xff0c;延时一段时间后能自动熄灭。 一、电路工作原理 电路原理如图 25 所示。 该自动应急灯电路由光控灯电路、电子开关电路和延时照明电路组成…

关于时间序列的平稳性检测

时间序列的平稳性检验 对时间序列的研究和处理&#xff0c;其实也算是有点意思。很多时候就是耍流氓&#xff0c;我们假设它有规律&#xff0c;然后去研究它&#xff0c;等老天开眼的时候&#xff0c;总能找出点东西来自圆其说&#xff0c;嘿嘿。 ARIMA家族的时序模型&#xf…

Java基层云HIS系统源码融合B/S电子病历系统(SaaS模式)

一、云his系统概述 ta是一款满足二甲医院、基层医院机构业务需要的健康卫生云系统。该系统能帮助基层医院机构完成日常各类业务&#xff0c;提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生站和护士站等一系列常规功能&#xff0c;还能与公卫、PAC…