课程论文
现代软件工程与实践
题 目: ATM 柜员机模拟程序
学院(系): 信息工程学院
专业班级:
学生姓名:
指导教师:
2011 年 12 月 4 日
武汉理工大学工程硕士课程论文─《现代软件工程与实践》
摘 要
通过设计 ATM 柜员模拟程序,加深自己对 Java 编程尤其是对 Java 图形用户界面编
程的了解,将自己的学到的编程知识融会贯通,同时培养自身面向对象软件开发的思维,
初步了解软件开发的一般流程,提高用 Java 实际动手能力并增强自己对面向对象的了
解。通过这次编程设计,加深了对 Java 图形界面编程中各个模块和组件的应用了解,以
及类和类之间的关系,界面排版的处理等。
设计要求是,当输入给定的卡号和密码(初始卡号和密码为 123456)时,系统能登
录 ATM 柜员机系统,用户可以按照以下规则进行(规则可以按照实际系统做需求):(1)
查询余额:初始余额为 10000 元。(2)ATM 取款:每次取款金额为 100 的倍数,总额
不超过 5000 元,支取金额不允许透支。(3)ATM 存款:不能出现负存款。(4)修改密
码:新密码长度不小于 6 位,不允许出现 6 位完全相同的情况,只有旧密码正确,新密
码符合要求,且两次输入相同的情况下才可以成功修改密码。
该程序设置了 7 个类,1 个主类 6 个辅助类,6 个辅助类都是内部类的形式,辅助
类包括五个实现 ATM 的功能,一个存放客户资料,之所以用内部类来实现是为了在各
个界面转换时不至于要创建多个对象,每一个辅助类的对象只要在主类中创建一次就可
以在各个内部类中引用。该程序利用的功能是利用 Java 事件监听技术来实现的,各种功
能单独的创建一个类来实现,不会互相混淆,更加容易理清楚思路。设计的程序完美的
实现了设计要求,具有查询、取款、存款、修改密码等功能。
I
目 录
摘 要.........................................................................................................................................I
目 录....................................................................................................................................... II
1 前言........................................................................................................................................1
1.1 设计任务..........................................................................................................................1
1.1.1 需求说明...................................................................................................................1
1.2 设计内容..........................................................................................................................1
2 程序要求................................................................................................................................1
3 算法分析................................................................................................................................2
4 流程图....................................................................................................................................3
5 程序源代码及说明................................................................................................................4
5.1 程序源代码......................................................................................................................4
5.2 源代码说明....................................................................................................................21
5.2.1 源代码中自定义类的说明:.................................................................................21
5.2.2 源代码中的事件监听器..........................................................................................22
6 调试及运行结果..................................................................................................................23
7 体会......................................................................................................................................29
8 参考文献..............................................................................................................................30
II
武汉理工大学工程硕士课程论文─《现代软件工程与实践》
1 前言
1.1 设计任务
1.1.1 需求说明
随着市场经济的繁荣发展,人们的物质生活得到极大的提高,手中的剩余资金也日
益增多。受传统观念影响,绝大多数人喜欢把资金投进银行,而在需要使用现金的时候
再到银行提取现金。这就导致银行业务的急剧增加。虽然银行网点越来越多,银行的工
作效率也随着信息化有较明显的增长,但是依旧不能满足广大用户的需要。而一味的增
加营业网点,从理论上虽然能稍微的缓解银行的压力,但是治标不治本,而且每增加一
个网点,不仅要付出昂贵的资金成本,还需要长期投入人力资本,成本非常之昂贵。这
时候就迫切的需要一种自动的,易于普及的,低成本的设备来解决这一问题。于是 ATM
机系统应运而生了。
本文正是通过设计一个 ATM 模拟模拟程序来实现 ATM 机系统的基本功能,充分运
用自己所学的 Java 知识进行设计编程。
1.2 设计内容
(1)程序要求 (2)算法分析 (3)流程图 (4)源程序 (5)调试及运行结果
(6)体会
2 程序要求
本 ATM 柜员机的主要功能如下所述:
要求使用图形用户界面。当输入给定的卡号和密码(初始卡号和密码为 123456)时,
系统能登录 ATM 柜员机系统,用户可以按照以下规则进行:
查询余额:初始余额为 10000 元。
ATM 取款:每次取款金额为 100 的倍数,总额不超过 5000 元,支取金额不允
许透支。
ATM 存款:不能出现负存款。
1
武汉理工大学工程硕士课程论文─《现代软件工程与实践》
修改密码:新密码长度不小于 6 位,不允许出现 6 位完全相同的情况,只有旧
密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
3 算法分析
通过程序要求,我们可以清楚的知道本次设计的 ATM 柜员模拟程序需要实现四大
功能,即查询余额、取款、存款、修改密码。初次之外,作为 ATM 系统,还需要最基
本的两大功能,即登陆和退出。
根据上述的功能分析,我们可以吧整个 ATM 系统分为登陆模块、查询模块、取款
模块、存款模块、修改密码模块。除此之外,还有在登陆系统后的功能选择模块,退出
功能则镶嵌在各个需要的模块中。由于各个模块的功能实现是通过界面显示出来的,则
程序设计又可以理解为几大界面的设计:登陆界面、主界面、查询余额界面、取款界面、
存款界面、修改密码界面。除了几大界面之外,还有系统的初始化,主要是初始卡号、
密码的设定等。
在程序的大体框架确定之后,我们需要了解各个模块所要实现和需要具有的功能。
根据现有的银行 ATM 系统,我们可以很快就可以了解本次设计的 ATM 系统应该具有的
操作。
(1)登陆界面
用户输入正确的账号和密码就可以登录到该系统的主界面中去,进行相应的操作:
取款、存款、查询、修改密码。
(2)主界面
主界面包括查询、存款、取款、修改密码、退出的功能按钮,按下相应的按钮,可
以进行相应的操作。
(3)查询界面
在主界面中按下查询按钮可以进行查询操作。通过查询功能我们可以查询账户的余
额,在查询过程中我们可以选择取款的业务,除此之外,查询界面之中还有返回和退出
的操作。返回的操作会使用户回到主界面,退出的操作会使用户直接回到登陆界面。
(4)取款界面
取款界面既可以通过主界面进入,也可以通过查询、存款等操作过程中的界面进入。
取款功能在对话框中输入你想要取出的金额,但是次金额不可以比账户的余额大,且必
须是 100 的整数倍,取款完毕,会弹出是否显示余额的提示,选“是”的话就会进入查
询界面,选“否”的话,则回到主界面。
(5)存款界面
在主界面按下存款按钮可以进行存款操作,在对话中输入你需要存入的金额,所输
2
武汉理工大学工程硕士课程论文─《现代软件工程与实践》
入的数字也要是 100 的整数倍,而且不可以是负数。存款完毕,会弹出是否显示余额的
提示,选“是”的话就会进入查询界面,选“否”的话,则回到主界面。
(6)修改密码
选择修改密码按钮可以进行修改密码房,但是要先输入就密码正确并且两次输入新
密码一致才可以修改密码。修改完成后,会返回主界面。
4 流程图
登 录
输 入 账 号 和 密 码
N
账 号 和 密 码
是 否 正 确
Y
主 界 面
选 择 业 务
存
款
取
款
修
改
密
码
退
出
存 入
取 款
输 入 密 码
Y
N
是 否
符 合
Y
显 示
余 额
N
Y
取
款
显 示
余 额
N
3
查
询
显
示
余
额
退
出
返
回
武汉理工大学工程硕士课程论文─《现代软件工程与实践》
图 1 程序流程图
5 程序源代码及说明
5.1 程序源代码
import javax.swing.*;
import javax.swing.JOptionPane;
import java.awt.event.*;
public class ATMmodel {
Account myaccount=new Account();
Load load=new Load();
MainFrame Jmain=new MainFrame();
Take take=new Take();
Input input=new Input();
Display dis=new Display();
Setpw setpw=new Setpw();
public ATMmodel() {
JOptionPane.showMessageDialog(null,"欢迎使用 ATM 柜员模拟系统");
}
public static void main(String[] args) {
ATMmodel atm=new ATMmodel();
}
/*创建账户*/
class Account {
private int count=10000;
private String account="123456";
private String password="123456";
//初始账户余额 10000
//初始账号
//初始密码
public Account() {
}
public void setpw(String password){
this.password=password;
}
public void deccount(int money){
count-=money;
}
4
武汉理工大学工程硕士课程论文─《现代软件工程与实践》
public void reccount(int money){
count+=money;
}
public int get(){
return count;
}
public String getaccount(){
return account;
}
public String getpw(){
return password;
}
//账号
}
/* 主界面*/
class MainFrame extends JFrame {
public JButton checked;
public JButton cunkuan;
public JButton quit;
public JButton qukuan;
public JButton reset;
public MainFrame() {
initComponents();
this.setLocationRelativeTo(null);
this.setVisible(false);
//
}
/* 控件初始化*/
private void initComponents() {
cunkuan = new JButton();
qukuan = new JButton();
checked = new JButton();
reset = new JButton();
quit = new JButton();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setTitle("ATM 柜员模拟程序");
setName("mianframe");
setResizable(false);
cunkuan.setText("存款");
cunkuan.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
cunkuanActionPerformed(evt);
5