




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录前言11、程序设思路12、程序的整体描述12.1使用说明12.2程序流程图22.3 JAVA类与自定义类的32.4 自定义类的说明32.5 事件监听器42.6 运行效果52.7 存在的问题53、源程序清单84、参考文献55ATM柜员机模拟程序摘要:运用了事件监听技术来实现ATM的各种功能例如:存款、取款、修改密码、查询。利用NetBeans进行用户图形的界面排版,符合日常软件使用规范来设计菜单和界面,方便用户操作,同时也使的程序更加简单。关键字: JAVA、ATM 前言 :ATM柜员机模拟实现了ATM柜员机的基本功能,本文主要介绍了编写ATM柜员机的一些过程和方法。系统需要账户要有密码保护功能,只有输入相应的密码才可以进入该账户,登陆界面中密码框须使用*保护。用户登录后,进入服务选择界面,浏览各种服务,选择所需要的服务。服务包括(取款,存款,查询余额,修改密码)。 文中列出了所有的自定义的类和类中所包含的成员。以及Java类与自定义类相互之间继承的层次关系及。同时也画出了程序运行的流程图。1程序设计思路阐述该程序设置了8个类,1个主类7个辅助类,7个辅助类都是内部类的形式,辅助类包括五个实现ATM的功能,一个用来显示ATM主界面,一个存放账户资料,之所以用内部类来实现是为了在各个界面转换时不至于要创建多个对象,每一个辅助类的对象只要在主类中创建一次就可以在各个内部类中引用。至于界面的实现则利用NetBeans对图形用户界面进行排版,这样比起用JCreator来写更容易,布局不需要自己用语言写出来,只要按着程序的需要在NetBeans中设置控件属性就可以了。该程序利用的功能是利用Java事件监听技术来实现的,各种功能单独的创建一个类来实现,不会互相混淆,更加容易理清楚思路。2程序整体描述21使用说明用户可以根据流程图很快就可以了解该模拟柜员机的使用:用户输入正确的账号和密码就可以登录到该系统中去,进行相应的操作:取款、存款、查询、修改密码。通过查询功能我们可以查询账户的余额,在查询过程中我们可以选择取款的业务。取款功能在对话框中输入你想要取出的金额,但是次金额不可以比账户的余额大,且必须是100的整数倍,取款完毕,可以选择显示余额的操作。返回后可以进行存款操作,在对话中输入你需要存入的金额,所输入的数字也要是100的整数倍,而且不可以是负数,支取金额也不允许透支。选择修改密码按钮可以进行密码修改,但是要先输入就正确密码并且两次输入一致的新密码才可以修改密码。22程序流程图如下图:图123 Java类与自定义类的层次关系如下图:SetpewInputTakeMainFrameLoadJFrameDisplay图2MyAccount类、MainFrame类、Load类、Take类、Input类、Display类、Setpew类和Doing类都继承了Java类JFrame类。24自定义类的说明:(1)Class MyAccount创建客户,初始化客户信息功能以及保存客户信息,例如:卡号、密码、原有余额、取款后卡里的余额以及存款后卡里的余额。此类包含的成员有:修改密码方法setpw(),设置取款后的账户余额方法deccount(),设置存款后的账户余额方法reccount(),获得账户金额方法get(),取得账号方法getaccount()和获得密码方法getpw(),成员变量count、account、password和方法构造方法MyAccount()。(2)Class MainFrame构造主界面,提供业务选择,让用户可以在这个界面选择存款、取款、查询余额、修改密码。它包含的成员有:构造方法MainFrame()和初始化主界面的方法 initComponents()以及成员变量checked、cunkuan、quite、qukuan、reset。(3)Class Load 实现登录功能和登录界面,如果用户名和密码匹配就可以登录到主界面否则报错。它的成员有:Jpassword、accountnum、committ、JL1、JL2和构造方法Load()和初始化方法initComponents()。(4)Class Take实现取款功能,按返回键返回主界面,按清除键可以删除输入数字,并且取出的金额必须是100的整数倍,一次取出的金额不能超过5000,而且不可以是负数,支取金额也不允许透支,取完款后可以显示余额。该类的成员有:back、clear、commit、quite、JL1、JT1和构造方法Take()和初始化的initComponents()。(5)Class input实现存款功能,存款的金额必须是100的整数倍,否则报错提示重新输入。成员有:成员变量:str、back、clear、commit、doing、jB0、jB00、jB1、jB2、jB3、jB4、jB5、jB6、jB7、jB8、jB9、jL1、jPanel1、jT1、quite以及构造函数Inputhe()和初始化方法initComponents()(6)Class Display功能为显示当前余额,在显示余额时JTextField的内容不可以编辑,成员有:成员变量back、jL1、jT1、quit、qukuan和构造方法Display()和方法数set(String str)和初始化的方法initComponents()。(7)class Setpw创建此类是为了实现修改密码的功能,设置的密码必须是六位以上的字符,并且所设置的密码不能是同一个字符组成,否则报错。成员有:成员变量commit、commitpw、jPwcommit、jPwnew、jPwold、newpw、oldpw、quit和构造方法Setpw()和初始化方法initComponents()。(8)Class Doing功能是为显示取款时的状态类,当用户进行取款操作时显示“处理中”,成员有:成员变量JL和font以及构造方法Doing()。25事件监听器(1)MainFrame类的监听器在该类中设置了五个监听器,监听鼠标单击按钮,分别监听存款、取款、查询、修改密码、退出等按钮的事件。(2) Load类的监听器在该类中只有一个监听器,监听鼠标单击“确定”按钮时的事件。(3) Take类的监听器在该类中设置了四个监听器,同样是监听鼠标单击按钮事件,分别监听“清除”、“退出”、“返回”、“确定”按钮的事件。(4 )input类的监听器在这个类中共设置了两个监听器,它们也是监听鼠标单击按钮事件。它们监听“清除”、“确定”按钮事件。(5 )display类的监听器在display中设置了三个监听器,都属于监听鼠标单击按钮事件,分别监听“退出”、“返回”、“取款”按钮事件。(6 )Setpw类的监听器在这个类中设置了两个监听器,它们是监听鼠标单击按钮事件,分别监听“确定”、“退出”按钮事件26运行效果程序运行能够实现图形用户界面。当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,登录界面如下:图3登录后界面如下:图4用户可以按照以下规则进行:(1) 查询余额:初始余额为10000元(2) ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。(3)ATM存款:不能出现负存款。(4) 修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。27存在的问题:通过了这些天的课程设计,对于我这个编程新手来说,还的确有些困难。首先,我需要了解一些基本的术语。程序是计算机执行的一系列的指令。这些指令说明了计算机要做什么,究竟是用文字处理、电子表格、玩游戏还是其他用途。然后,我还要去图书馆查阅资料,找一些与这次课设有关的内容作参考,以便能更方便的完成课设的内容。另外,我还去网上查阅了一些资料,充实一下自己,一切都准备好了,我就可以完成我的ATM柜员机设计报告了。由于对neatbeans运用的不够熟练,界面不美观,功能与真实的有一定的差距。多个账户的实现需要创建数据库,而因为对此还不是很熟练,故没能实现多个账户。通过此次课程设计,将我本学期所学的JAVA知识得到巩固和应用,在设计的过程中我遇到了很到问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。感谢傅老师,他循循善诱的教导和不拘一格的思路给予我的启迪。同时也感谢同学对我的帮助和指点。3源程序清单import javax.swing.JOptionPane;import javax.swing.JDialog;import javax.swing.JLabel;import java.awt.Font;import java.awt.Color;import javax.swing.SwingConstants;import java.awt.event.*;/* *该类是主类,在该类中定义了其他各个类的全局对象 *登录界面的类Load、主界面的类MainFrame、取款的界面类Take *存款界面的类Input、显示余额的界面类Display *修改密码的类Setpw、账户类MyAccount *状态显示类Doing */public class ATMModel MyAccount myaccount=new MyAccount();/账户类MyAccount Load load=new Load();/登录界面的类Load MainFrame Jmain=new MainFrame();/主界面的类MainFrame Take take=new Take();/取款的界面类Take Input input=new Input();/存款界面的类Input Display dis=new Display();/显示余额的界面类Display Setpw setpw=new Setpw();/修改密码的类Setpw Doing doing=new Doing();/状态显示类Doing public ATMModel() public static void main(String args) ATMModel atm=new ATMModel(); /* *我的账户,在该类中定义了初始账户余额count *初始账号account *初始密码password */ class MyAccount private int count=10000;/初始账户余额10000 private String account=123456;/初始账号 private String password=123456;/初始密码 public MyAccount() public void setpw(String password)/修改密码方法 this.password=password; public void deccount(int money)/设置取款后的账户余额 count-=money; 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 javax.swing.JFrame public javax.swing.JButton checked;/查询按钮 public javax.swing.JButton cunkuan;/存款按钮 public javax.swing.JButton quit;/退出按钮 public javax.swing.JButton qukuan;/取款按钮 public javax.swing.JButton reset;/修改密码按钮 public MainFrame() initComponents();/一些控件位置的初始化 this.setLocationRelativeTo(null);/设置窗口居中 this.setVisible(false);/把窗口设置为不可见的,在需要显示的地方再调用并设置为可见的 /* * * 控件初始化代码 * */ private void initComponents() cunkuan = new javax.swing.JButton(); qukuan = new javax.swing.JButton(); checked = new javax.swing.JButton(); reset = new javax.swing.JButton(); quit = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle(ATM模拟程序); setName(主界面); setResizable(false); cunkuan.setText(存款); /为存款按钮添加响应事件 cunkuan.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) cunkuanActionPerformed(evt); ); qukuan.setText(取款); /原理同上 qukuan.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) qukuanActionPerformed(evt); ); checked.setText(查询); /原理同上 checked.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) checkedActionPerformed(evt); ); reset.setText(修改密码); /原理同上 reset.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) resetActionPerformed(evt); ); quit.setText(退出); /原理同上 quit.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) quitActionPerformed(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() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(cunkuan) .addPreferredGap(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) .addComponent(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.BASELINE) .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(); /END:initComponents private void quitActionPerformed(java.awt.event.ActionEvent evt) /退出按钮的事件响应函数 load.setVisible(true);/把登录界面调出来 this.setVisible(false);/把本来的界面隐藏起来 private void resetActionPerformed(java.awt.event.ActionEvent evt) /修改密码按钮的事件响应函数setpw.setVisible(true);/原理同上this.setVisible(false); private void checkedActionPerformed(java.awt.event.ActionEvent evt) /查询按钮的事件响应函数 dis.setVisible(true);/原理同上 this.setVisible(false); private void qukuanActionPerformed(java.awt.event.ActionEvent evt) /取款按钮的事件响应函数 take.setVisible(true);/原理同上 this.setVisible(false); private void cunkuanActionPerformed(java.awt.event.ActionEvent evt) /存款按钮的事件响应函数 input.setVisible(true);/原理同上 this.setVisible(false); /* *登录界面 * */ public class Load extends javax.swing.JFrame /* Creates new form Load */ public Load() initComponents(); this.setLocationRelativeTo(null); this.setVisible(true); private void initComponents() jL1 = new javax.swing.JLabel(); jL2 = new javax.swing.JLabel(); accountnum = new javax.swing.JTextField(); commit = new javax.swing.JButton(); Jpassword = new javax.swing.JPasswordField(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 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.GroupLayout 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.Alignment.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.Alignment.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.createParallelGroup(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_SIZE, 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.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 72, Short.MAX_VALUE) .addComponent(commit) .addGap(64, 64, 64) ); pack(); / /确认按钮的事件响应函数 private void commitActionPerformed(java.awt.event.ActionEvent evt) /如果账号与密码匹配时登录到主界面 if(accountnum.getText().equals(myaccount.getaccount() & Jpassword.getText().equals(myaccount.getpw() Jmain.setVisible(true);this.setVisible(false);accountnum.setText();/为了从其他界面换回到登录界面时账号栏与密码栏都置为空的Jpassword.setText();/账号与密码不匹配时显示提示信息,让用户重新输入elseJOptionPane.showMessageDialog(null,密码与账户不匹配,请重新输入,出错提示,1);accountnum.setText();/原理同上Jpassword.setText(); / 变量声明 public javax.swing.JPasswordField Jpassword; public javax.swing.JTextField accountnum; public javax.swing.JButton commit; private javax.swing.JLabel jL1; private javax.swing.JLabel jL2; / 变量声明结束 /* * *取款界面 */class Take extends javax.swing.JFrame String str=;/记录按下按钮时的字符/变量声明public javax.swing.JButton back; public javax.swing.JButton clear; public javax.swing.JButton commit; public javax.swing.JLabel doing; private javax.swing.JButton jB0; private javax.swing.JButton jB00; private javax.swing.JButton jB1; private javax.swing.JButton jB2; private javax.swing.JButton jB3; private javax.swing.JButton jB4; private javax.swing.JButton jB5; private javax.swing.JButton jB6; private javax.swing.JButton jB7; private javax.swing.JButton jB8; private javax.swing.JButton jB9; private javax.swing.JLabel jL1; public javax.swing.JPanel jP1; public javax.swing.JTextField jT1; public javax.swing.JButton quit;/声明结束 public Take() initComponents(); this.setLocationRelativeTo(null); this.setVisible(false); /控件位置的初始化 private void initComponents() doing = new javax.swing.JLabel(); jL1 = new javax.swing.JLabel(); jT1 = new javax.swing.JTextField(); jP1 = new javax.swing.JPanel(); jB7 = new javax.swing.JButton(); jB8 = new javax.swing.JButton(); jB9 = new javax.swing.JButton(); jB4 = new javax.swing.JButton(); jB5 = new javax.swing.JButton(); jB6 = new javax.swing.JButton(); jB1 = new javax.swing.JButton(); jB2 = new javax.swing.JButton(); jB3 = new javax.swing.JButton(); jB0 = new javax.swing.JButton(); jB00 = new javax.swing.JButton(); commit = new javax.swing.JButton(); back = new javax.swing.JButton(); quit = new javax.swing.JButton(); clear = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setResizable(false); doing.setFont(new java.awt.Font(宋体, 0, 20); doing.setText(你好!); jL1.setText(取款金额:); jP1.setLayout(new java.awt.GridLayout(4, 3, 5, 5); jP1.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED, null, new java.awt.Color(255, 255, 204), null, null); jB7.setText(7); /为按钮添加事件响应 jB7.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) jB7ActionPerformed(evt); ); jP1.add(jB7); jB8.setText(8); jB8.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent evt) jB8ActionPerformed(evt); ); jP1.add(jB8); jB9.setText(9); jB9.addActionListener(new java
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 泉州实验中学协议书
- 材料被盗调解协议书
- 掉到坑里调解协议书
- 渔业生产承包协议书
- 权益业务合作协议书
- 景区设备联营协议书
- 水果定点配送协议书
- 标书制作保密协议书
- 洗车会所转让协议书
- 机车线下购买协议书
- 2025全国保密教育线上培训考试试题库(含答案)
- 2025年北京市东城区高三二模地理试卷(含答案)
- 2025购车贷款合同范本
- 土地荒漠化试题及答案
- 初中地理《埃及》教学设计-2024-2025学年湘教版地理七年级下册
- 内蒙古百校联盟2025届高考英语押题试卷含答案
- 2025年北京市通州区九年级初三一模道德与法治试卷(含答案)
- 数据资产的确认与计量问题研究
- 浙江省北斗星盟2025届高三下学期适应性考试(三模)物理试题(含答案)
- Unit 4 Healthy food B Lets learn(教学设计)-2024-2025学年人教PEP版(2024)英语三年级下册
- 七年级地理下册 7.1 日本教学设计 湘教版
评论
0/150
提交评论