目 录
第一章 引言
1.1 设计目的
本系统设计的目的是开发一个功能全面且用户友好的自动取款机(ATM)系统,旨在模拟银行取款机的基本操作,包括取款、存款、查询余额、修改密码、转账、查询记录和导出记录等功能。通过开发该系统,用户能够体验并熟悉ATM机的操作流程,同时为进一步研究和实际应用打下基础。
1.2 相关开发工具介绍
本系统的开发使用了以下工具和技术:
- Java编程语言:Java是一种面向对象的编程语言,具有跨平台特性和丰富的类库,适用于开发各种应用程序。
- JDBC:Java数据库连接(JDBC)是一种用于执行SQL语句的Java API,可以连接和操作各种数据库。
- MySQL数据库:MySQL是一个流行的关系型数据库管理系统,以其可靠性和高性能广泛应用于各种场合。
- Swing:Swing是Java的GUI工具包,用于创建图形用户界面(GUI)应用程序。
第二章 数据库需求分析
2.1 系统功能分析
本系统的主要功能包括:
- 用户登录和注册
- 查询余额
- 存款
- 取款
- 转账
- 修改密码
- 查询交易记录
- 导出交易记录
这些功能需要与数据库交互,以实现用户数据的存储、修改和查询。
2.2 功能模块设计
系统功能模块设计如下:
- 用户模块:包括用户的注册、登录、修改密码。
- 账户管理模块:包括查询余额、存款、取款、转账。
- 交易记录模块:包括查询和导出交易记录。
第三章 数据库概念结构设计
3.1 概念模型
概念模型是对现实世界中实体及其关系的抽象。在本系统中,主要涉及以下实体:
ATM系统流程图
ATM系统E-R图
第四章 数据库逻辑结构设计
-
- 关系模型设计
根据概念模型和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类主要负责两个界面的初始化和事件处理:
- 登录界面:管理员和普通用户可以在此登录。
- 管理员界面:管理员可以进行用户的增、删、改、查操作。
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