课程设计:基于JavaWeb实现ATM机系统

简介: 课程设计:基于JavaWeb实现ATM机系统

一,项目简介

本项目主要实现一个模拟ATM机存款、取款、转账功能的一个系统,可以查看打印交易明细,后台用户可以管理用户账户卡信息。本系统主要是针对计算机专业的学生做课程设计或课程期未作业使用。功能完整,界面美观大方。如果你的课程设计或作业是关于ATM机存取款方面的,可以考虑使用。本系统包含完整源码和数据库一份,并配套文档说明一份。

二,环境介绍

开发工具:IDEA / ECLIPSE

数据库:MYSQL5.7

应用服务器:TOMCAT8.5.31

后台开发技术:JSP、Servlet

前端开发技术:javascript、css、bootstrap

三,系统展示

前端页面

用户登陆

前端用户登陆后主页显示用户信息

修改密码

查询银行卡余额

银行卡存款

银行卡取款:取款金额不得大于当前余额

银行卡转账

分页查询交易明细

后台管理功能

用户登陆

银行卡用户列表:可以实现模糊搜索

用户信息修改删除

银行卡用户添加

四,核心代码展示

用户登陆代码

package com.atm.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.atm.service.UserService;
import com.atm.service.impl.UserServiceimpl;
public class LoginServlet extends HttpServlet {
  public void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    req.setCharacterEncoding("utf-8");
    resp.setContentType("text/html;charset=utf-8");
    String name = req.getParameter("name");
    String pwd = req.getParameter("password");
    System.out.println(name+"----"+pwd);
    UserService us = new UserServiceimpl();
    int result = us.login(name, pwd, req);
    System.out.println(result);
    if(result==1){
      System.out.println("用户登录成功!");
      resp.sendRedirect("list");
    }else if(result==0){
      System.out.println("用户登录失败");
      req.setAttribute("error", "密码错误");
      req.getRequestDispatcher("changepage/login.jsp").forward(req, resp);
    }else{
      System.out.println("LoginServlet.doGet(我是result==其他)");
      req.setAttribute("error", "用户名不存在");
      req.getRequestDispatcher("changepage/login.jsp").forward(req, resp);
    }
    }
  public void doPost(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    doGet(req,resp);
  }
}

用户模拟取款代码

package com.atm.servlet;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.atm.dao.BeanUserDao;
import com.atm.dao.impl.BeanUserDaoImpl;
import com.atm.pojo.RunMessage;
import com.atm.service.BeanUserService;
import com.atm.service.impl.BeanUserServiceImpl;
@WebServlet("/UserFetch")
public class UserFetchServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;
  @Override
  protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.setCharacterEncoding("utf-8");
    resp.setContentType("text/html;charset=uttf-8");
    int fetchNum = Integer.parseInt(req.getParameter("fetchNum"));
    HttpSession session = req.getSession();
    Object obj = session.getAttribute("userAccount");
    BeanUserService us = new BeanUserServiceImpl();
    double Money = us.serchBalance((String)obj);
    RunMessage rm = new RunMessage();
    BeanUserDao bud = new BeanUserDaoImpl();
    double fushu = -fetchNum;
    if(session!=null && fetchNum<=2000 && Money-fetchNum>=0&&fetchNum%50==0
        && fetchNum>0) {
        rm.setICno((String)obj);
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
        rm.setRM_date(df.format(new Date()));
        rm.setRM_Currency("人民币");
        rm.setRM_Balance(fushu);
        System.out.println("用户:"+(String)obj+" 取款"+fetchNum+"元");
        rm.setRM_Rest(us.serchBalance((String)obj)-fetchNum);
        BeanUserService bus = new BeanUserServiceImpl(); 
        req.getSession().setAttribute("balance", Money);
         bus.fetchMoney((String)obj, fetchNum);
         bud.RunMessage(rm);
//      req.getRequestDispatcher("serch").forward(req, resp);
      resp.sendRedirect("/Final/UserSerch");
    }else if(fetchNum>2000){
      req.getSession().setAttribute("error2", "取出失败,金额不得超过2000元");
//      req.getRequestDispatcher("UserJsp/fetchMoney.jsp").forward(req, resp);
      //这个地方必须是重定向,因为 UserJsp/fetchMoney.jsp 这个jsp中提交地址是<form action="../fetch">
      //,它会进行一次向上跳转,所以需要重定向而不是请求转发,否则地址栏将会变成
      //http://localhost:8080/fetch?fetchNum=你输入的取钱金额,应该是:
      //http://localhost:8080/course/fetch?fetchNum=你输入的取钱金额
      resp.sendRedirect("/Final/changepage/UserFetch.jsp");
    }else if(fetchNum<0) {
      req.getSession().setAttribute("error2", "取款金额必须大于0!");
      resp.sendRedirect("/Final/changepage/UserFetch.jsp");
    }else if(fetchNum%50!=0) {
      req.getSession().setAttribute("error2", "只能取出50或100元现金的倍数!");
      resp.sendRedirect("/Final/changepage/UserFetch.jsp");
    }else if(Money-fetchNum<0) {
      req.getSession().setAttribute("error2", "卡内余额不足!");
      resp.sendRedirect("/Final/changepage/UserFetch.jsp");
    }
  }
}
package com.atm.servlet;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.atm.dao.BeanUserDao;
import com.atm.dao.impl.BeanUserDaoImpl;
import com.atm.pojo.RunMessage;
import com.atm.service.BeanUserService;
import com.atm.service.impl.BeanUserServiceImpl;
@WebServlet("/UserStore")
public class UserStoreServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;
  @Override
  protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.setCharacterEncoding("utf-8");
    resp.setContentType("text/html;charset=utf-8");
    RunMessage rm = new RunMessage();
    BeanUserDao bud = new BeanUserDaoImpl();
    int result = 0;
    int saveNum = Integer.parseInt(req.getParameter("saveNum"));
    HttpSession session = req.getSession();
    Object obj = session.getAttribute("userAccount");
    BeanUserService us = new BeanUserServiceImpl();
    double Money = us.serchBalance((String)obj);
    if(session!=null && saveNum<=2000 && saveNum%50==0 && saveNum >0) {
      BeanUserService bus = new BeanUserServiceImpl();
      bus.saveMoney((String)obj, saveNum);
      rm.setICno((String)obj);
      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
      rm.setRM_date(df.format(new Date()));
      rm.setRM_Currency("人民币");
      rm.setRM_Balance(saveNum);
      rm.setRM_Rest(us.serchBalance((String)obj));
      bud.RunMessage(rm);
        req.getSession().setAttribute("balance", Money);
        List<RunMessage> list = bud.SelMessage((String)obj);
        req.getServletContext().setAttribute("RunMessage", list);
//        req.getRequestDispatcher("serch").forward(req, resp);
        resp.sendRedirect("/Final/UserSerch");
        System.out.println("用户:"+(String)obj+" 存款"+saveNum+"元");
//      resp.sendRedirect("serch");
    }else if (result == 4 && session != null) {
//      req.getRequestDispatcher("UserJsp/saveMoney.jsp").forward(req, resp);
      resp.sendRedirect("/Final/changepage/UserStore.jsp");
    }else if(saveNum>2000){
      req.getSession().setAttribute("error3", "存储失败,金额不得超过2000元");
//      req.getRequestDispatcher("UserJsp/saveMoney.jsp").forward(req, resp);
//      resp.sendRedirect("UserJsp/saveMoney.jsp");
      resp.sendRedirect("/Final/changepage/UserStore.jsp");
    }else if(saveNum%50!=0) {
      req.getSession().setAttribute("error3", "只能投入50元或100元的钞票!");
//      req.getRequestDispatcher("UserJsp/saveMoney.jsp").forward(req, resp);
//      resp.sendRedirect("UserJsp/saveMoney.jsp");
      resp.sendRedirect("/Final/changepage/UserStore.jsp");
    }else if(saveNum<0) {
      req.getSession().setAttribute("error3", "存款金额必须大于0!");
//      req.getRequestDispatcher("UserJsp/saveMoney.jsp").forward(req, resp);
//      resp.sendRedirect("UserJsp/saveMoney.jsp");
      resp.sendRedirect("/Final/changepage/UserStore.jsp");
    }
  }
}
package com.atm.servlet;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.atm.dao.BeanUserDao;
import com.atm.dao.impl.BeanUserDaoImpl;
import com.atm.pojo.RunMessage;
import com.atm.service.BeanUserService;
import com.atm.service.impl.BeanUserServiceImpl;
@WebServlet("/UserTransfer")
public class UserTransferServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;
  @Override
  protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.setCharacterEncoding("utf-8");
    resp.setContentType("text/html;charset=utf-8");
    BeanUserDao budin = new BeanUserDaoImpl();
    BeanUserDao budout = new BeanUserDaoImpl();
    RunMessage rm1 = new RunMessage();
    RunMessage rm2 = new RunMessage();
    String transferIn = req.getParameter("transferIn");
    double transferNum = Double.parseDouble(req.getParameter("transferNum"));
    HttpSession session = req.getSession();
    Object obj = session.getAttribute("userAccount");
    double fushu = -transferNum;
    BeanUserService us = new BeanUserServiceImpl();
    if(transferNum<10000 && transferNum>0 && us.serchBalance((String)obj)-transferNum>=0) {
      us.transfer((String)obj, transferIn, transferNum);
      rm1.setICno((String)obj);
      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
      rm1.setRM_date(df.format(new Date()));
      rm1.setRM_Currency("人民币");
      rm1.setRM_Balance(fushu);
      rm1.setRM_Rest(us.serchBalance((String)obj));
      rm2.setICno(transferIn);
      rm2.setRM_date(df.format(new Date()));
      rm2.setRM_Currency("人民币");
      rm2.setRM_Balance(transferNum);
      rm2.setRM_Rest(us.serchBalance(transferIn));
      budout.RunMessage(rm1);
      budin.RunMessage(rm2);
      List<RunMessage> list = budout.SelMessage((String)obj);
      List<RunMessage> list1 = budin.SelMessage(transferIn);
      req.getServletContext().setAttribute("RunMessage", list);
      req.getServletContext().setAttribute("RunMessage", list1);
      System.out.println("用户:"+(String)obj+" 转账"+transferNum+"元");
      resp.getWriter().write("转账成功  3s后自动跳转回主页... ...");
      resp.setHeader("refresh", "3,url=/Final/UserSerch");
//      req.getRequestDispatcher("serch").forward(req, resp);
//      resp.sendRedirect("/Final/UserSerch");
    }else if(us.serchBalance((String)obj)-transferNum<0){
      req.getSession().setAttribute("error4", "抱歉,余额不足!");
      resp.sendRedirect("/Final/changepage/UserTransfer.jsp");
    }else if(transferNum > 10000) {
      req.getSession().setAttribute("error4", "转账金额不得高于10,000元!");
      resp.sendRedirect("/Final/changepage/UserTransfer.jsp");
    }else if(transferNum < 0 ) {
      req.getSession().setAttribute("error4", "请重新输入!");
      resp.sendRedirect("/Final/changepage/UserTransfer.jsp");
    }
  }
}

五,项目总结

本系统仿照银行ATM取款机的功能,通过WEB的形式进行开发实现,功能完整,界面简洁大方,并可通过CSS自由切换系统背景界面风格,比较适合作课程设计或期未作业使用。

相关文章
|
3天前
|
Java
排课系统【JSP+Servlet+JavaBean】(Java课设)
排课系统【JSP+Servlet+JavaBean】(Java课设)
13 5
|
3天前
|
数据采集 前端开发 Java
Java医院绩效考核系统源码maven+Visual Studio Code一体化人力资源saas平台系统源码
医院绩效解决方案包括医院绩效管理(BSC)、综合奖金核算(RBRVS),涵盖从绩效方案的咨询与定制、数据采集、绩效考核及反馈、绩效奖金核算到科到组、分配到员工个人全流程绩效管理;将医院、科室、医护人员利益绑定;全面激活人才活力;兼顾质量和效益、长期与短期利益;助力医院降本增效,持续改善、优化收入、成本结构。
9 0
|
3天前
|
存储 Java API
java对接IPFS系统-以nft.storage为列
java对接IPFS系统-以nft.storage为列
12 2
|
4天前
|
监控 前端开发 Java
Java基于B/S医院绩效考核管理平台系统源码 医院智慧绩效管理系统源码
医院绩效考核系统是一个关键的管理工具,旨在评估和优化医院内部各部门、科室和员工的绩效。一个有效的绩效考核系统不仅能帮助医院实现其战略目标,还能提升医疗服务质量,增强患者满意度,并促进员工的专业成长
16 0
|
4天前
|
Java 云计算
Java智能区域医院云HIS系统SaaS源码
云HIS提供标准化、信息化、可共享的医疗信息管理系统,实现医患事务管理和临床诊疗管理等标准医疗管理信息系统的功能。优化就医、管理流程,提升患者满意度、基层首诊率,通过信息共享、辅助诊疗等手段,提高基层医生的服务能力构建和谐的基层医患关系。
18 2
|
1天前
|
Java
Java中的多线程编程:基础知识与实践
【5月更文挑战第13天】在计算机科学中,多线程是一种使得程序可以同时执行多个任务的技术。在Java语言中,多线程的实现主要依赖于java.lang.Thread类和java.lang.Runnable接口。本文将深入探讨Java中的多线程编程,包括其基本概念、实现方法以及一些常见的问题和解决方案。
|
1天前
|
安全 算法 Java
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第13天】 在Java开发中,并发编程是一个复杂且重要的领域。它不仅关系到程序的线程安全性,也直接影响到系统的性能表现。本文将探讨Java并发编程的核心概念,包括线程同步机制、锁优化技术以及如何平衡线程安全和性能。通过分析具体案例,我们将提供实用的编程技巧和最佳实践,帮助开发者在确保线程安全的同时,提升应用性能。
8 1
|
2天前
|
Java 调度
Java一分钟之线程池:ExecutorService与Future
【5月更文挑战第12天】Java并发编程中,`ExecutorService`和`Future`是关键组件,简化多线程并提供异步执行能力。`ExecutorService`是线程池接口,用于提交任务到线程池,如`ThreadPoolExecutor`和`ScheduledThreadPoolExecutor`。通过`submit()`提交任务并返回`Future`对象,可检查任务状态、获取结果或取消任务。注意处理`ExecutionException`和避免无限等待。实战示例展示了如何异步执行任务并获取结果。理解这些概念对提升并发性能至关重要。
16 5
|
2天前
|
安全 Java 调度
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第12天】 在现代软件开发中,多线程编程是提升应用程序性能和响应能力的关键手段之一。特别是在Java语言中,由于其内置的跨平台线程支持,开发者可以轻松地创建和管理线程。然而,随之而来的并发问题也不容小觑。本文将探讨Java并发编程的核心概念,包括线程安全策略、锁机制以及性能优化技巧。通过实例分析与性能比较,我们旨在为读者提供一套既确保线程安全又兼顾性能的编程指导。
|
2天前
|
Java
Java一分钟:线程协作:wait(), notify(), notifyAll()
【5月更文挑战第11天】本文介绍了Java多线程编程中的`wait()`, `notify()`, `notifyAll()`方法,它们用于线程间通信和同步。这些方法在`synchronized`代码块中使用,控制线程执行和资源访问。文章讨论了常见问题,如死锁、未捕获异常、同步使用错误及通知错误,并提供了生产者-消费者模型的示例代码,强调理解并正确使用这些方法对实现线程协作的重要性。
13 3