




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 欢迎下载 课程论文 现代软件工程与实践现代软件工程与实践 题 目: ATM 柜员机模拟程序 学院(系): 信息工程学院 专业班级: 学生姓名: 指导教师: 2011 年 12 月 4 日 欢迎下载 摘 要 通过设计 ATM 柜员模拟程序,加深自己对 Java 编程尤其是对 Java 图形用户界面 编程的了解,将自己的学到的编程知识融会贯通,同时培养自身面向对象软件开发的 思维,初步了解软件开发的一般流程,提高用 Java 实际动手能力并增强自己对面向对 象的了解。通过这次编程设计,加深了对 Java 图形界面编程中各个模块和组件的应用 了解,以及类和类之间的关系,界面排版的处理等。 设计要求
2、是,当输入给定的卡号和密码(初始卡号和密码为 123456)时,系统能 登录 ATM 柜员机系统,用户可以按照以下规则进行(规则可以按照实际系统做需求): (1)查询余额:初始余额为 10000 元。 (2)ATM 取款:每次取款金额为 100 的倍数, 总额不超过 5000 元,支取金额不允许透支。 (3)ATM 存款:不能出现负存款。 (4) 修改密码:新密码长度不小于 6 位,不允许出现 6 位完全相同的情况,只有旧密码正 确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。 该程序设置了 7 个类,1 个主类 6 个辅助类,6 个辅助类都是内部类的形式,辅助 类包括五个实现
3、ATM 的功能,一个存放客户资料,之所以用内部类来实现是为了在各 个界面转换时不至于要创建多个对象,每一个辅助类的对象只要在主类中创建一次就 可以在各个内部类中引用。该程序利用的功能是利用 Java 事件监听技术来实现的,各 种功能单独的创建一个类来实现,不会互相混淆,更加容易理清楚思路。设计的程序 完美的实现了设计要求,具有查询、取款、存款、修改密码等功能。 欢迎下载 目 录 摘 要.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
4、5.2 源代码说明 .21 5.2.1 源代码中自定义类的说明:.21 5.2.2 源代码中的事件监听器.22 6 调试及运行结果.23 7 体会.29 8 参考文献.30 欢迎下载 1 前言 1.1 设计任务设计任务 1.1.1 需求说明需求说明 随着市场经济的繁荣发展,人们的物质生活得到极大的提高,手中的剩余资金也 日益增多。受传统观念影响,绝大多数人喜欢把资金投进银行,而在需要使用现金的 时候再到银行提取现金。这就导致银行业务的急剧增加。虽然银行网点越来越多,银 行的工作效率也随着信息化有较明显的增长,但是依旧不能满足广大用户的需要。而 一味的增加营业网点,从理论上虽然能稍微的缓解银行的
5、压力,但是治标不治本,而 且每增加一个网点,不仅要付出昂贵的资金成本,还需要长期投入人力资本,成本非 常之昂贵。这时候就迫切的需要一种自动的,易于普及的,低成本的设备来解决这一 问题。于是 ATM 机系统应运而生了。 本文正是通过设计一个 ATM 模拟模拟程序来实现 ATM 机系统的基本功能,充分 运用自己所学的 Java 知识进行设计编程。 1.2 设计内容设计内容 (1)程序要求 (2)算法分析 (3)流程图 (4)源程序 (5)调试及运行结果 (6)体会 2 程序要求 本 ATM 柜员机的主要功能如下所述: 要求使用图形用户界面。当输入给定的卡号和密码(初始卡号和密码为 123456)
6、时,系统能登录 ATM 柜员机系统,用户可以按照以下规则进行: 查询余额:初始余额为 10000 元。 ATM 取款:每次取款金额为 100 的倍数,总额不超过 5000 元,支取金额不允 许透支。 ATM 存款:不能出现负存款。 欢迎下载 修改密码:新密码长度不小于 6 位,不允许出现 6 位完全相同的情况,只有旧 密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。 3 算法分析 通过程序要求,我们可以清楚的知道本次设计的 ATM 柜员模拟程序需要实现四大 功能,即查询余额、取款、存款、修改密码。初次之外,作为 ATM 系统,还需要最基 本的两大功能,即登陆和退出。 根据上
7、述的功能分析,我们可以吧整个 ATM 系统分为登陆模块、查询模块、取款 模块、存款模块、修改密码模块。除此之外,还有在登陆系统后的功能选择模块,退 出功能则镶嵌在各个需要的模块中。由于各个模块的功能实现是通过界面显示出来的, 则程序设计又可以理解为几大界面的设计:登陆界面、主界面、查询余额界面、取款 界面、存款界面、修改密码界面。除了几大界面之外,还有系统的初始化,主要是初 始卡号、密码的设定等。 在程序的大体框架确定之后,我们需要了解各个模块所要实现和需要具有的功能。 根据现有的银行 ATM 系统,我们可以很快就可以了解本次设计的 ATM 系统应该具有 的操作。 (1)登陆界面 用户输入正确
8、的账号和密码就可以登录到该系统的主界面中去,进行相应的操作: 取款、存款、查询、修改密码。 (2)主界面 主界面包括查询、存款、取款、修改密码、退出的功能按钮,按下相应的按钮, 可以进行相应的操作。 (3)查询界面 在主界面中按下查询按钮可以进行查询操作。通过查询功能我们可以查询账户的 余额,在查询过程中我们可以选择取款的业务,除此之外,查询界面之中还有返回和 退出的操作。返回的操作会使用户回到主界面,退出的操作会使用户直接回到登陆界 面。 (4)取款界面 取款界面既可以通过主界面进入,也可以通过查询、存款等操作过程中的界面进 入。取款功能在对话框中输入你想要取出的金额,但是次金额不可以比账户
9、的余额大, 且必须是 100 的整数倍,取款完毕,会弹出是否显示余额的提示,选“是”的话就会 进入查询界面,选“否”的话,则回到主界面。 (5)存款界面 欢迎下载 在主界面按下存款按钮可以进行存款操作,在对话中输入你需要存入的金额,所 输入的数字也要是 100 的整数倍,而且不可以是负数。存款完毕,会弹出是否显示余 额的提示,选“是”的话就会进入查询界面,选“否”的话,则回到主界面。 (6)修改密码 选择修改密码按钮可以进行修改密码房,但是要先输入就密码正确并且两次输入 新密码一致才可以修改密码。修改完成后,会返回主界面。 欢迎下载 4 流程图 业 业 业 业 业 业 业 业 业 业 业 业
10、业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业业 业业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 业 N N N N Y Y Y Y 图 1 程序流程图 欢迎下载 5 程序源代码及说明 5.1 程序源代码程序源代码 import javax.swing.*; import javax.swing.JOptionPane; import java.awt.event.*; public class ATMmodel Account myaccount=new Account(); L
11、oad 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(); /*创建账户*/ c
12、lass Account private int count=10000; /初始账户余额 10000 private String account=123456; /初始账号 private String password=123456; /初始密码 public Account() public void setpw(String password) this.password=password; public void deccount(int money) count-=money; public void reccount(int money) count+=money; 欢迎下载
13、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() initCompone
14、nts(); 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 柜员模
15、拟程序); setName(mianframe); setResizable(false); cunkuan.setText(存款); cunkuan.addActionListener(new ActionListener() public void actionPerformed(ActionEvent evt) cunkuanActionPerformed(evt); ); 欢迎下载 qukuan.setText(取款); qukuan.addActionListener(new ActionListener() public void actionPerformed(ActionEve
16、nt evt) qukuanActionPerformed(evt); ); checked.setText(查询); checked.addActionListener(new ActionListener() public void actionPerformed(ActionEvent evt) checkedActionPerformed(evt); ); reset.setText(修改密码); reset.addActionListener(new ActionListener() public void actionPerformed(ActionEvent evt) reset
17、ActionPerformed(evt); ); quit.setText(退出); quit.addActionListener(new ActionListener() public void actionPerformed(ActionEvent evt) quitActionPerformed(evt); ); GroupLayout layout = new GroupLayout(getContentPane(); /GroupLayout 它将组件按层 次分组,以决定它们在 Container 中的位置 getContentPane().setLayout(layout); la
18、yout.setHorizontalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(cunkuan) .addPreferred
19、Gap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 105, Short.MAX_VALUE) .addComponent(reset) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(qukuan) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 143, Short.MAX_VALUE) .ad
20、dComponent(quit) .addComponent(checked) 欢迎下载 .addContainerGap() ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(46, 46, 46) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELI
21、NE) .addComponent(cunkuan) .addComponent(reset) .addGap(51, 51, 51) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(quit) .addComponent(qukuan) .addGap(57, 57, 57) .addComponent(checked) .addGap(39, 39, 39) ); pack(); private void quitActionPerformed(Ac
22、tionEvent evt) load.setVisible(true); this.setVisible(false); private void resetActionPerformed(ActionEvent evt) setpw.setVisible(true); this.setVisible(false); private void checkedActionPerformed(ActionEvent evt) dis.setVisible(true); this.setVisible(false); private void qukuanActionPerformed(Actio
23、nEvent evt) take.setVisible(true); this.setVisible(false); private void cunkuanActionPerformed(ActionEvent evt) input.setVisible(true); this.setVisible(false); /*登录界面*/ 欢迎下载 class Load extends JFrame public JPasswordField Jpassword; public JTextField accountnum; public JButton commit; private JLabel
24、 jL1; private JLabel jL2; public Load() initComponents(); this.setLocationRelativeTo(null); this.setVisible(true); private void initComponents() jL1 = new JLabel(); jL2 = new JLabel(); accountnum = new JTextField(); commit = new JButton(); Jpassword = new JPasswordField(); setDefaultCloseOperation(W
25、indowConstants.EXIT_ON_CLOSE); setTitle(ATM 柜员模拟程序); setResizable(false); jL1.setText(账号:); jL2.setText(密码:); commit.setText(确定); commit.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) commitActionPerformed(evt); ); javax.swing.GroupL
26、ayout layout = new javax.swing.GroupLayout(getContentPane(); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alig
27、nment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap(50, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jL1) .addComponent(jL2) .addGap(31, 31, 31) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignm
28、ent.LEADING, false) 欢迎下载 .addComponent(Jpassword) .addComponent(accountnum, javax.swing.GroupLayout.DEFAULT_SIZE, 143, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addGap(122, 122, 122) .addComponent(commit) .addContainerGap(72, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.creat
29、eParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(85, 85, 85) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(accountnum, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SI
30、ZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jL1) .addGap(41, 41, 41) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jL2) .addComponent(Jpassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.Gr
31、oupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 72, Short.MAX_VALUE) .addComponent(commit) .addGap(64, 64, 64) ); pack(); private void commitActionPerformed(ActionEvent evt) if(accountnum.getText().equals(myaccount.getaccount() this.setVisible(false); a
32、ccountnum.setText(); Jpassword.setText(); else JOptionPane.showMessageDialog(null,密码与账户不匹配,请重新输入,出错提示,1); accountnum.setText(); Jpassword.setText(); 欢迎下载 /*取款界面*/ class Take extends JFrame public JButton back; public JButton clear; public JButton commit; private JLabel jL1; public JTextField jT1; pu
33、blic JButton quit; String str=; public Take() initComponents(); this.setLocationRelativeTo(null); this.setVisible(false); private void initComponents() jL1 = new JLabel(); jT1 = new JTextField(); commit = new JButton(); back = new JButton(); quit = new JButton(); clear = new JButton(); setDefaultClo
34、seOperation(WindowConstants.EXIT_ON_CLOSE); jL1.setText(取款金额:); commit.setText(确定); commit.addActionListener(new ActionListener() public void actionPerformed(ActionEvent evt) commitActionPerformed(evt); ); back.setText(返回); back.addActionListener(new ActionListener() public void actionPerformed(Acti
35、onEvent evt) backActionPerformed(evt); ); quit.setText(退出); quit.addActionListener(new ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) quitActionPerformed(evt); ); clear.setText(清除); 欢迎下载 clear.addActionListener(new ActionListener() public void actionPerformed(ActionEven
36、t evt) clearActionPerformed(evt); ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane(); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(41
37、, 41, 41) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jL1) .addGap(33, 33, 33) .addComponent(jT1, javax.swing.GroupLayout.PREFERRED_SIZE, 174, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(layout.createSeq
38、uentialGroup() .addComponent(clear) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 147, Short.MAX_VALUE) .addComponent(quit) .addGroup(layout.createSequentialGroup() .addComponent(commit) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 147, Short.MAX_VALUE)
39、 .addComponent(back) .addContainerGap(69, javax.swing.GroupLayout.PREFERRED_SIZE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(103, 103, 103) .addGroup(layout.createParallelGroup(javax.swing.GroupLa
40、yout.Alignment.BASELINE) .addComponent(jL1) .addComponent(jT1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(61, 61, 61) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(comm
41、it) .addComponent(back) .addGap(29, 29, 29) 欢迎下载 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(clear) .addComponent(quit) .addContainerGap(65, Short.MAX_VALUE) ); pack(); private void clearActionPerformed(ActionEvent evt) str=; jT1.setText(str); priva
42、te void quitActionPerformed(ActionEvent evt) load.setVisible(true); this.setVisible(false); private void backActionPerformed(ActionEvent evt) Jmain.setVisible(true); this.setVisible(false); private void commitActionPerformed(ActionEvent evt) if(Integer.parseInt(jT1.getText()0 int result=javax.swing.
43、JOptionPane.showConfirmDialog(null,是否显示余额? ,javax.swing.JOptionPane.YES_NO_OPTION,javax.swing.JOptionPane.QUESTION_MESSAGE); if(result=javax.swing.JOptionPane.YES_OPTION) dis.set(String.valueOf(myaccount.get(); str=; jT1.setText(str); dis.setVisible(true); this.setVisible(false); else Jmain.setVisib
44、le(true); this.setVisible(false); else 欢迎下载 JOptionPane.showMessageDialog(null,取款金额不能为负数+n 取款金额不能为 0+n 取 款金额必须是 100 的倍数+n 金额一次不能超过 5000+n 请重新输入你要取的金额数,出错提示 ,1); str=; jT1.setText(str); /*存款界面*/ class Input extends JFrame private JButton clear; private JButton commit; private JLabel jL1; private JTex
45、tField jT1; String str=; public Input() initComponents(); this.setLocationRelativeTo(null); this.setResizable(false); this.setVisible(false); private void initComponents() jL1 = new JLabel(); jT1 = new JTextField(); commit = new JButton(); clear = new JButton(); setDefaultCloseOperation(WindowConsta
46、nts.EXIT_ON_CLOSE); jL1.setText(存款金额:); commit.setText(确认); commit.addActionListener(new ActionListener() public void actionPerformed(ActionEvent evt) commitActionPerformed(evt); ); clear.setText(清除); clear.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) clearActionPerformed(evt); ); 欢迎下载 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane(); getContentPane().setLayout(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政治考试面试题及答案
- 天津华英面试题及答案
- 快递配送方案模板
- 思修课心理健康
- 门店装修货品清仓方案
- 疼痛健康宣教与管理要点
- 时间重合面试题及答案
- 思科销售考试题及答案
- 书店收银面试题及答案
- 农田建设面试题及答案
- 软件服务运维合同范本
- 无创血流动力学监测
- GB/T 28583-2025供电服务规范
- 恩施市2025届数学三年级第一学期期末达标测试试题含解析
- 安全注射检查规范与实施要点
- 装修售后维修合同协议
- 活禽定点屠宰宰杀场项目可行性报告
- 医学临床“三基”训练-护士分册-自测及答案
- 智能乐器演奏辅助系统-全面剖析
- 第30课 在线安全防范-2024-2025学年三年级全一册《信息技术》教案
- 《精密电子天平使用教程》课件
评论
0/150
提交评论