JavaSwing项目ATM自动提款机(mysql数据库)+详细报告

第一章 引言

1.1 设计目的

本系统设计的目的是开发一个功能全面且用户友好的自动取款机(ATM)系统,旨在模拟银行取款机的基本操作,包括取款、存款、查询余额、修改密码、转账、查询记录和导出记录等功能。通过开发该系统,用户能够体验并熟悉ATM机的操作流程,同时为进一步研究和实际应用打下基础。

1.2 相关开发工具介绍

本系统的开发使用了以下工具和技术:

  1. Java编程语言:Java是一种面向对象的编程语言,具有跨平台特性和丰富的类库,适用于开发各种应用程序。
  2. JDBC:Java数据库连接(JDBC)是一种用于执行SQL语句的Java API,可以连接和操作各种数据库。
  3. MySQL数据库:MySQL是一个流行的关系型数据库管理系统,以其可靠性和高性能广泛应用于各种场合。
  4. Swing:Swing是Java的GUI工具包,用于创建图形用户界面(GUI)应用程序。

第二章 数据库需求分析

2.1 系统功能分析

本系统的主要功能包括:

  1. 用户登录和注册
  2. 查询余额
  3. 存款
  4. 取款
  5. 转账
  6. 修改密码
  7. 查询交易记录
  8. 导出交易记录

这些功能需要与数据库交互,以实现用户数据的存储、修改和查询。

2.2 功能模块设计

系统功能模块设计如下:

  1. 用户模块:包括用户的注册、登录、修改密码。
  2. 账户管理模块:包括查询余额、存款、取款、转账。
  3. 交易记录模块:包括查询和导出交易记录。

第三章 数据库概念结构设计

3.1 概念模型

概念模型是对现实世界中实体及其关系的抽象。在本系统中,主要涉及以下实体:

  1. 用户(User)
  2. 账户(Account)
  3. 交易记录(TransactionRecord)
    1. 流程图和E-R图

ATM系统流程图

ATM系统E-R

第四章 数据库逻辑结构设计

    1. 关系模型设计

根据概念模型和E-R图,我们设计了以下关系模型(部分):

表结构:actionrecord

功能:记录用户的操作记录,包括取款、存款和转账等操作。

结构:

DROP TABLE IF EXISTS `actionrecord`;

CREATE TABLE `actionrecord` (

  `time` datetime NULL DEFAULT NULL,

  `cardnumber` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  `operation` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  `size` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  INDEX `cardnumber`(`cardnumber`) USING BTREE,

  CONSTRAINT `actionrecord_ibfk_1` FOREIGN KEY (`cardnumber`) REFERENCES `alluser` (`cardnumber`) ON DELETE RESTRICT ON UPDATE RESTRICT

) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

表结构:admin

·  功能:存储所有用户的信息,包括姓名、性别、电话号码、卡号、密码、余额、身份证号码等。

·  结构

DROP TABLE IF EXISTS `alluser`;

CREATE TABLE `alluser` (

  `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  `sex` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  `cardnumber` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,

  `password` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  `money` int(11) NULL DEFAULT NULL,

  `idnumber` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,

  PRIMARY KEY (`cardnumber`) USING BTREE

) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

表结构:alluser
  • 功能:存储所有用户的信息,包括姓名、性别、电话号码、卡号、密码、余额、身份证号码等。
  • 结构

DROP TABLE IF EXISTS `alluser`;

CREATE TABLE `alluser` (

  `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  `sex` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  `cardnumber` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,

  `password` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  `money` int(11) NULL DEFAULT NULL,

  `idnumber` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,

  PRIMARY KEY (`cardnumber`) USING BTREE

) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

表结构:employees
  • 功能:存储员工的信息,包括员工ID、姓名、薪水和状态等。
  • 结构:

DROP TABLE IF EXISTS `employees`;

CREATE TABLE `employees` (

  `eid` int(11) NOT NULL AUTO_INCREMENT,

  `ename` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  `salary` float NULL DEFAULT NULL,

  `state` int(11) NULL DEFAULT NULL,

  PRIMARY KEY (`eid`) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

表结构:goods
  • 功能:存储商品信息,包括商品ID、商品名称、价格、商品点数、种类ID和数量等。
  • 结构

DROP TABLE IF EXISTS `goods`;

CREATE TABLE `goods` (

  `goodsid` int(11) NOT NULL AUTO_INCREMENT,

  `goodsname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  `price` float NULL DEFAULT NULL,

  `goodspoint` int(11) NULL DEFAULT NULL,

  `kindid` int(11) NULL DEFAULT NULL,

  `num` int(11) NULL DEFAULT NULL,

  PRIMARY KEY (`goodsid`) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

表结构:kinds
  • 功能:存储商品种类的信息,包括种类ID和种类名称。
  • 结构

DROP TABLE IF EXISTS `kinds`;

CREATE TABLE `kinds` (

  `kindid` int(11) NOT NULL AUTO_INCREMENT,

  `kindname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  PRIMARY KEY (`kindid`) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

表结构:transactions
  • 功能:记录用户的交易信息,包括交易ID、用户ID、VIP ID、商品ID、数量、总价和交易时间等。
  • 结构

DROP TABLE IF EXISTS `transactions`;

CREATE TABLE `transactions` (

  `transid` int(11) NOT NULL AUTO_INCREMENT,

  `userid` int(11) NULL DEFAULT NULL,

  `vipid` int(11) NULL DEFAULT NULL,

  `goodsid` int(11) NOT NULL,

  `quantity` int(11) NOT NULL,

  `totalprice` float NOT NULL,

  `transtime` timestamp NULL DEFAULT CURRENT_TIMESTAMP,

  PRIMARY KEY (`transid`) USING BTREE,

  INDEX `userid`(`userid`) USING BTREE,

  INDEX `vipid`(`vipid`) USING BTREE,

  INDEX `goodsid`(`goodsid`) USING BTREE,

  CONSTRAINT `transactions_ibfk_1` FOREIGN KEY (`userid`) REFERENCES `users` (`uid`) ON DELETE RESTRICT ON UPDATE RESTRICT,

  CONSTRAINT `transactions_ibfk_2` FOREIGN KEY (`vipid`) REFERENCES `vip` (`vipid`) ON DELETE RESTRICT ON UPDATE RESTRICT,

  CONSTRAINT `transactions_ibfk_3` FOREIGN KEY (`goodsid`) REFERENCES `goods` (`goodsid`) ON DELETE RESTRICT ON UPDATE RESTRICT

) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

表结构:users
  • 功能:存储用户的信息,包括用户ID、用户名、密码和积分等。
  • 结构

DROP TABLE IF EXISTS `users`;

CREATE TABLE `users` (

  `uid` int(11) NOT NULL AUTO_INCREMENT,

  `uname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  `upass` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  `upoint` int(11) NULL DEFAULT NULL,

  PRIMARY KEY (`uid`) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

表结构:vip
  • 功能:存储VIP用户的信息,包括VIP ID、VIP用户名、密码和积分等。
  • 结构

DROP TABLE IF EXISTS `vip`;

CREATE TABLE `vip` (

  `vipid` int(11) NOT NULL AUTO_INCREMENT,

  `vipname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  `vippass` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,

  `vippoint` int(11) NULL DEFAULT NULL,

  PRIMARY KEY (`vipid`) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

表关系图
 
关键代码:

AdministratorUI类主要负责两个界面的初始化和事件处理:

  1. 登录界面:管理员和普通用户可以在此登录。
  2. 管理员界面:管理员可以进行用户的增、删、改、查操作。
public static void init() {
   
    jframe_1.setSize(260,200);
    jframe_1.setLayout(new FlowLayout());
    jframe_1.setResizable(false);
    jframe_1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
    JLabel jlabel = new JLabel("  ATM 模拟系统  ");
    JLabel jlabel_1 = new JLabel("卡  号:");
    JLabel jlabel_2 = new JLabel("密  码:");
 
    jpassword.setEchoChar('*');
    Font font = new Font("宋体",Font.BOLD,26);
    Font font_1 = new Font("宋体",Font.BOLD,16);
    jlabel.setFont(font);
    jlabel_1.setFont(font_1);
    jlabel_2.setFont(font_1);
 
    JButton jbutton_1 = new JButton("管理员登录");
    JButton jbutton_2 = new JButton("用户登录");
    jbutton_1.setFont(font_1);
    jbutton_2.setFont(font_1);
 
    jframe_1.add(jlabel);
    jframe_1.add(jlabel_1);
    jframe_1.add(jtext);
    jframe_1.add(jlabel_2);
    jframe_1.add(jpassword);
    jframe_1.add(jbutton_1);
    jframe_1.add(jbutton_2);
 
    // 注册 管理员登录界面 的监听
    jbutton_1.addActionListener(new ActionListener() {
   
        @Override
        public void actionPerformed(ActionEvent e) {
   
            String username = jtext.getText();
            String password = new String(jpassword.getPassword());
            if (MysqlOperation.isAdmin(username, password)) {
   
                JOptionPane.showMessageDialog(
                        jbutton_1,
                        "登录成功!\n欢迎使用ATM管理员系统!",
                        "提示",
                        JOptionPane.INFORMATION_MESSAGE
                );
                jframe_1.dispose();
                AdministratorUI.init_1();
            } else {
   
                JOptionPane.showMessageDialog(
                        jbutton_1,
                        "用户名或密码错误!\n请重新输入!",
                        "警告",
                        JOptionPane.WARNING_MESSAGE
                );
            }
        }
    });
 
    jbutton_2.addActionListener(new ActionListener() {
   
        @Override
        public void actionPerformed(ActionEvent e) {
   
            String password = new String(jpassword.getPassword());
            if (MysqlOperation.selectUserText(jtext.getText())) {
   
                if (password.equals(MysqlOperation.selectPasswor
### 实现银行ATM存取款机系统的关键要素 #### 设计思路概述 为了创建一个完整的银行ATM存取款机系统,需要考虑几个核心模块的设计与实现。这些模块包括但不限于用户界面(UI)设计、数据存储机制以及业务逻辑处理。 #### 用户界面 (UI) 构建 采用 Java 的 Swing 库来开发图形化用户界面是非常合适的选项之一。通过定义窗口组件如按钮(Button),标签(Label),文本框(TextField)等基本控件,并设置其布局管理器(Layout Manager),可以轻松搭建起直观友好的操作面板[^1]。 ```java import javax.swing.*; public class ATMFrame extends JFrame { private JLabel label; private JTextField textField; public ATMFrame() { setTitle("Bank ATM System"); setSize(400, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); label = new JLabel("Enter Account Number:"); textField = new JTextField(20); JButton button = new JButton("Submit"); panel.add(label); panel.add(textField); panel.add(button); add(panel); } } ``` #### 数据库连接配置 对于持久化的金融交易记录和其他重要信息,则推荐使用关系型数据库管理系统(RDBMS)—MySQL作为后台支持。建立稳定可靠的JDBC链接是必不可少的前提条件,在此过程中需指定正确的驱动程序名称、URL地址、用户名及密码参数。 ```java String url = "jdbc:mysql://localhost:3306/atm_db"; String user = "root"; String password = ""; try{ Connection conn = DriverManager.getConnection(url,user,password); }catch(SQLException e){ e.printStackTrace(); } ``` #### 功能实现细节 针对具体的银行业务需求,比如存款、取款、转账和余额查询等功能点,应当精心规划相应的算法流程并编写对应的函数方法。下面给出一段简化版的存款功能代码片段供参考: ```java private void deposit(double amount) throws SQLException { String query = "UPDATE accounts SET balance=balance+? WHERE account_number=?"; try (PreparedStatement pstmt = connection.prepareStatement(query)) { pstmt.setDouble(1, amount); pstmt.setString(2, currentAccountNumber); // 假定已获取当前账号 int affectedRows = pstmt.executeUpdate(); if (affectedRows == 0) { throw new SQLException("Creating user failed, no rows affected."); } else { JOptionPane.showMessageDialog(null,"Deposit successful!"); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值