《java课程设计-ATM柜员机模拟程序(27页).doc》由会员分享,可在线阅读,更多相关《java课程设计-ATM柜员机模拟程序(27页).doc(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-java课程设计-ATM柜员机模拟程序-第 27 页课程设计(大作业)报告课程名称:面向对象程序设计课程设计 设计题目:ATM柜员机模拟程序 院 系:信息技术学院 班 级: 设 计 者: 学 号: 指导教师: 设计时间:2016-1-42016-1-8 信息技术学院昆明学院课程设计(大作业)任务书姓 名:院(系):信息技术学院专 业:计算机科学与技术 学 号:任务起止日期:2016-1-42016-1-8课程设计题目:设计一个ATM柜员机模拟程序,实现系统登录、余额查询、ATM取款、ATM存款、修改密码等一些ATM柜员机的基本功能,模拟ATM的工作原理和人机交互。课程设计要求:使用图形用户界
2、面。当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:1、查询余额:初始余额为10000元2、ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。3、ATM存款:不能出现负存款。4、修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。工作计划及安排:1月4号,老师布置任务、讲授设计内容。1月5号,查阅资料,进行初步设想并画出流程图。 1月6号,详细设计,创建各个类、编写程序代码。1月7号,测试,对程序进行调试、运行并进行
3、相应的分析。1月8号,书写课程设计报告,验收、考核及答辩。指导教师签字 年 月 日 课程设计(大作业)成绩学号: 姓名: 指导教师: 课程设计题目:设计一个ATM柜员机模拟程序,实现系统登录、余额查询、ATM取款、ATM存款、修改密码等一些ATM柜员机的基本功能,模拟ATM的工作原理和人机交互。总结:通过为时一周的课程设计,我受益匪浅,把平时所学的知识通通运用了进来,虽然平时积淀的知识点比较少、比较单一,但是在这次实验中把零零碎碎的知识都连贯起来了,也达到了课程设计的目的,最主要的是通过一周的努力我终于用面向对象程序设计的知识做出了这个“ATM柜员机模拟系统”。由于知识的积淀比较少,且有些知识
4、掌握不太牢靠,记忆模模糊糊的,最后决定恶补一下落下的知识点再进行程序的设计。第一天,去图书馆借了相关图书,把知识点打牢,然后参考了相似的的几个实例,并进行了一些分析和总结。基础功课做好以后第二天正式开工,选定好了题目,进行方法选择、框架设计、画出流程图、UML图,进行了初步的程序设计构想。第三天,编写程序代码,这个过程我觉得是最艰难的,因为代码太多,还有API接口不是很熟悉,所以要经常翻阅手册,花费了很多时间。程序一不小心就会出错不能运行,还需要认真检查,细心细心加细心才能做好。反复的进行分析调试,最后一天把程序调试通过后,进行课程设计报告的撰写。虽然很幸苦但是,最终的成果还是令人满意的,最后
5、感谢指导老师对我们帮助和支持。指导教师评语:成绩:填表时间:指导教师签名:课程设计(大作业)报告一、 题目分析1.系统需求分析(1)设计目标:随着市场经济的繁荣发展,人们的物质生活得到极大的提高,手中的剩余资金也日益增多。受传统观念影响,绝大多数人喜欢把资金投进银行,而在需要使用现金的时候再到银行提取现金。这就导致银行业务的急剧增加。虽然银行网点越来越多,银行的工作效率也随着信息化有较明显的增长,但是依旧不能满足广大用户的需要。而一味的增加营业网点,从理论上虽然能稍微的缓解银行的压力,但是治标不治本,而且每增加一个网点,不仅要付出昂贵的资金成本,还需要长期投入人力资本,成本非常之昂贵。这时候就
6、迫切的需要一种自动的,易于普及的,低成本的设备来解决这一问题。于是ATM机系统应运而生了。自动柜员机,即ATM,是指银行在不同地点设置一种小型机器,利用一张信用卡大小的胶卡上的磁带记录客户的基本户口资料(通常就是银行卡),让客户可以透过机器进行提款、存款、转账等银行柜台服务,大多数客户都把这种自助机器称为自动提款机。本文正是通过设计一个ATM模拟模拟程序来实现ATM机系统的基本功能,充分运用自己所学的Java知识进行设计编程。(2)题目设计要求:本ATM柜员机的主要功能如下所述:要求使用图形用户界面。当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以
7、按照以下规则进行:l 查询余额:初始余额为10000元。l ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。l ATM存款:不能出现负存款。l 修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。2.ATM模拟系统总体设计结构(1)设计思想:通过程序要求,我们可以清楚的知道本次设计的ATM柜员模拟程序需要实现四大功能,即查询余额、取款、存款、修改密码。初次之外,作为ATM系统,还需要最基本的两大功能,即登陆和退出。根据上述的功能分析,我们可以把整个ATM系统分为登陆模块、查询模
8、块、取款模块、存款模块、修改密码模块。除此之外,还有在登陆系统后的功能选择模块,退出功能则镶嵌在各个需要的模块中。由于各个模块的功能实现是通过界面显示出来的,则程序设计又可以理解为几大界面的设计:登陆界面、主界面、查询余额界面、取款界面、存款界面、修改密码界面。除了几大界面之外,还有系统的初始化,主要是初始卡号、密码的设定等。在程序的大体框架确定之后,我们需要了解各个模块所要实现和需要具有的功能。根据现有的银行ATM系统,我们可以很快就可以了解本次设计的ATM系统应该具有的操作。a.登陆界面用户输入正确的账号和密码就可以登录到该系统的主界面中去,进行相应的操作:取款、存款、查询、修改密码。b.
9、主界面主界面包括查询、存款、取款、修改密码、退出的功能按钮,按下相应的按钮,可以进行相应的操作。c.查询界面在主界面中按下查询按钮可以进行查询操作。通过查询功能我们可以查询账户的余额,在查询过程中我们可以选择取款的业务,除此之外,查询界面之中还有返回和退出的操作。返回的操作会使用户回到主界面,退出的操作会使用户直接回到登陆界面。d.取款界面取款界面既可以通过主界面进入,也可以通过查询、存款等操作过程中的界面进入。取款功能在对话框中输入你想要取出的金额,但是次金额不可以比账户的余额大,且必须是100的整数倍,取款完毕,会弹出是否显示余额的提示,选“是”的话就会进入查询界面,选“否”的话,则回到主
10、界面。e.存款界面在主界面按下存款按钮可以进行存款操作,在对话中输入你需要存入的金额,所输入的数字也要是100的整数倍,而且不可以是负数。存款完毕,会弹出是否显示余额的提示,选“是”的话就会进入查询界面,选“否”的话,则回到主界面。f.修改密码选择修改密码按钮可以进行修改密码房,但是要先输入就密码正确并且两次输入新密码一致才可以修改密码。修改完成后,会返回主界面。(2)ATM柜员机总体流程图,如图 图1图1(3)ATM柜员机模拟模拟系统UML图,如图 图2 图 23.系统开发及运行环境软件平台:Eclipse,jdk全套软件,editpuls编辑器Eclipse 是一个开放源代码的、基于Jav
11、a的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,通过安装不同的插件Eclipse可以支持不同的计算机语言,比如C+和Python等开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。 图 3二、各模块分析与实现
12、1.系统各模块介绍代码中出现的Account类、MainFrame类、Load类、Take类、Input类、Setpew类和Display类都继承了Java类JFrame。(1)账户创建模块Class Accout创建客户,初始化客户信息功能以及保存客户信息,例如:卡号、密码、原有余额、取款后卡里的余额以及存款后卡里的余额。此类包含的成员有:成员变量account、count、password和方法构造方法Account()。实现了账户信息的初始化工作,设置默认账户信息,账号:123456,密码:123456。以便后续测试登陆时作为进入模拟系统的信息凭证。创建账户关键代码:class Acco
13、unt 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) /deccount 取款 count-=money;/取款后再原来基础上减所取部分 public void reccount(
14、int money) /reccount 存款 count+=money;/存款后在原来基础上加所存部分(2)主界面构造模块Class MainFrame构造主界面,提供业务选择,让用户可以在这个界面选择存款、取款、查询余额、修改密码。它包含的成员有:构造方法MainFrame()和初始化主界面的方法 initComponents()以及成员变量checked、cunkuan、quite、qukuan、reset。实现的功能主要为主界面的初始化,主界面的布局管理,设置好查询、存款、取款、退出、返回的操作按钮。关键代码:class MainFrame extends JFrame /主框架方法由
15、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); /隐藏其他窗口 (3)登陆模块Class Lo
16、ad 实现登录功能和登录界面,如果用户名和密码匹配就可以登录到主界面否则报错。它的成员有:Jpassword、accountnum、committ、JL1、JL2和构造方法Load()和初始化方法initComponents()。关键代码:class Load extends JFrame public JPasswordField Jpassword; public JTextField accountnum;/ public JButton commit;/增删 private JLabel jL1;/设置对齐 private JLabel jL2; public Load() initC
17、omponents(); /初始化添加组件的和添加监听器 this.setLocationRelativeTo(null);/使窗口至于屏幕中央 this.setVisible(true);(4)取款模块Class Take实现取款功能,按返回键返回主界面,按清除键可以删除输入数字,并且取出的金额必须是100的整数倍,一次取出的金额不能超过5000,取完款后可以显示余额。该类的成员有:back、clear、commit、quite、JL1、JT1和构造方法Take()和初始化的initComponents()。关键代码:class Take extends JFrame public JBut
18、ton back; public JButton clear; public JButton commit; private JLabel jL1; public JTextField jT1; public JButton quit; String str=; public Take() initComponents(); this.setLocationRelativeTo(null); this.setVisible(false);(5)存款模块Class input实现存款功能,存款的金额必须是100的整数倍,否则报错提示重新输入。成员有:clear、commit、jL1、jT1、st
19、r以及构造函数Inputhe()和初始化方法initComponents()。关键代码:class Input extends JFrame private JButton clear; private JButton commit; private JLabel jL1; private JTextField jT1; String str=; public Input() initComponents(); this.setLocationRelativeTo(null); this.setResizable(false); this.setVisible(false);(6)显示余额模块
20、Class Display功能为显示当前余额,在显示余额时JTextField的内容不可以编辑,成员有:成员变量back、jL1、quit、qukuan和构造方法Display()和方法数set(String str)和初始化的方法initComponents()。关键代码:class Display extends JFrame public JButton back; private JLabel jL1; public JTextField jT1; public JButton quit; public JButton qukuan; public Display() initComp
21、onents(); jT1.setText(String.valueOf(myaccount.get(); this.setLocationRelativeTo(null); this.setVisible(false);(7)修改密码模块class Setpw创建此类是为了实现修改密码的功能,设置的密码必须是六位以上的字符,并且所设置的密码不能是同一个字符组成,否则报错。成员有:成员变量commit、commitpw、jPwcommit、jPwnew、jPwold、newpw、oldpw、quit和构造方法Setpw()和初始化方法initComponents()。关键代码:class Se
22、tpw extends JFrame public JButton commit; public JLabel commitpw; public JPasswordField jPwcommit; public JPasswordField jPwnew; public JPasswordField jPwold; public JLabel newpw; public JLabel oldpw; public JButton quit; public Setpw() initComponents(); this.setResizable(false); this.setLocationRel
23、ativeTo(null); this.setVisible(false);2.事件监听组件介绍(1) MainFrame类的监听模块在该类中设置了五个监听器,监听鼠标单击按钮,分别监听退出quit.addActionListener(new ActionListener()、修改密码reset.addActionListener(new ActionListener()、查询checked.addActionListener(new ActionListener()、取款cunkuan.addActionListener(new ActionListener()、存款qukuan.addAc
24、tionListener(new ActionListener()等按钮的事件。(2) Load类的监模块commit.addActionListener(new java.awt.event.ActionListener()在该类中只有一个监听器,监听鼠标单击“确定”按钮时的事件。(3) Take类的监听模块在该类中设置了四个监听器,同样是监听鼠标单击按钮事件,分别监听“清除” clear.addActionListener(new ActionListener()、“退出” quit.addActionListener(new ActionListener()、“返回” back.addA
25、ctionListener(new ActionListener()、“确定” commit.addActionListener(new ActionListener()按钮的事件。(4 )input类的监模块在这个类中共设置了两个监听器,它们也是监听鼠标单击按钮事件。它们监听“清除” clear.addActionListener(new ActionListener()、“确定” commit.addActionListener(new ActionListener()按钮事件。(5 )display类的监听模块在display中设置了三个监听器,都属于监听鼠标单击按钮事件,分别监听“退出
26、” quit.addActionListener(new ActionListener()、“返回” back.addActionListener(new ActionListener()、“取款” qukuan.addActionListener(new java.awt.event.ActionListener()按钮事件。(6 )Setpw类的监听模块在这个类中设置了两个监听器,它们是监听鼠标单击按钮事件,分别监听“确定” commit.addActionListener(new ActionListener()、“退出” quit.addActionListener(new Actio
27、nListener()按钮事件。三、系统调试分析1.登陆界面 打开MyEcplise,编译运行程序后,将会看到如图3所示的欢迎界面。点击确定之后,会进入如图4所示的登陆界面。图3 欢迎登陆页面图4 登陆界面进入到登陆界面后,需要输入账号和密码,当账号和密码正确时,才会进入到主界面。账号和密码不符合时,会进入如图4所示的错误提示界面。初始账号和密码为“123456”。图5 登陆出错提示界面2.账号密码登陆 当输入的密码和卡号正确,单击确定后就会进入到主界面,选择服务,如图6所示,点击相应的按钮就可以选择所需要的服务了,点击“退出”会回到登陆界面。图6 主界面3.存款点击存款,进入存款界面,如图7
28、所示。图7 存款界面当输入的钱数不是100的倍数时,就会弹出如图7所示的错误提示界面。输入正确时,进入如图9所示的界面。选“是”的话,会进入查询余额界面,查看存款操作是否成功;选“否”的话,会回到主界面。图8 存款出错提示界面图9 操作完成后的选择界面4.取款点击取款按钮,进入取款界面,如图10所示。当输入的钱数是负数,或者是0,或者不是100的倍数,又或者大于5000时,会弹出如图11所示的出错提示界面。当输入的钱数符合要求时,会弹出如同存款操作一样的选择界面,如图9所示。图10 取款界面图11 取款错误提示界面5.查询点击主界面中的查询按钮,或者是在存款和取款操作完成后的选择界面中选“是”
29、的话,就会进入到如图12所示的查询界面。点击取款按钮,会进入到取款界面。初始金额为50000,图12中的余额是经过存款、取款操作以后的金额。图12 查询界面6.修改密码点击主界面中的修改密码按钮,进入到如图13所示的修改密码界面。新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码,弹出如图14所示的提示界面,点击确定后会回到主界面。否则,密码修改不成功,点击确定按钮,界面没有反应。图13 修改密码界面图14 修改密码成功提示界面经过上面的操作,既测试了程序的实现效果,又对系统的使用进行了详细的说明。从上面的运行结果可以看
30、出,程序基本上实现了所有的设计要求,而且运行正常。四、总结通过为时一周的课程设计,我受益匪浅,把平时所学的知识通通运用了进来,虽然平时积淀的知识点比较少、比较单一,但是在这次实验中把零零碎碎的知识都连贯起来了,也达到了课程设计的目的,最主要的是通过一周的努力我终于用面向对象程序设计的知识做出了这个“ATM柜员机模拟系统”。由于知识的积淀比较少,且有些知识掌握不太牢靠,记忆模模糊糊的,最后决定恶补一下落下的知识点再进行程序的设计。第一天,去图书馆借了相关图书,把知识点打牢,然后参考了相似的的几个实例,并进行了一些分析和总结。基础功课做好以后第二天正式开工,选定好了题目,进行方法选择、框架设计、画
31、出流程图、UML图,进行了初步的程序设计构想。第三天,编写程序代码,这个过程我觉得是最艰难的,因为代码太多,还有API接口不是很熟悉,所以要经常翻阅手册,花费了很多时间。程序一不小心就会出错不能运行,还需要认真检查,细心细心加细心才能做好。反复的进行分析调试,最后一天把程序调试通过后,进行课程设计报告的撰写。虽然很幸苦但是,最终的成果还是令人满意的,最后感谢指导老师对我们帮助和支持。在这次的课程设计中,我主要运用了Java图形界面编程方面的知识,加深了对Java语言中各个基础知识点的了解和应用,将自己所学的知识运用到实际操作当中,而不再是纸上谈兵。通过这次设计,我深刻感受到了面向对象语言中类库
32、的强大功能,掌握了运用Java中的类实现某些基本功能,并学会了自己查询使用类的方法,为以后的面向对象语言的自学奠定了基础。在这次课程设计中,我查了很多资料,很好的锻炼了自己的查阅资料的能力和快速吸收新知识的能力。同时,也加深了与同学的交流,在设计过程中,我们互相帮助,共度难关,培养了很好的默契。总之,在这次课程设计中,我学到了很多的知识,同时也感谢我的同学的帮助和指导。在以后的学习当中,我会更加努力的学习好专业知识,并将所学的知识用于实践当中去,以便牢固掌握知识。五、参考文献1 叶核亚. Java程序设计实用教程(第3版.电子工业出版社,20102 耿祥义. JAVA课程设计.清华大学出版,2
33、0093 王文涛,袁海燕 JAVA实用程序设计100例M北京:人民邮电出版社,2005.54 雍俊海 JAVA程序设计M北京:清华大学出版社,2006.85 刘宝林 JAVA程序设计与案例M北京:高等教育出版社,2006.116 史斌星,史佳 .Java基础及应用教程 M.北京.清华大学出版社.2007.27.15.101.7 Y.Daniel Liang.Java语言程序设计M.北京.机械工业出版社.2008.六、附录 源代码程序源代码:/*API接口*/import javax.swing.*;import javax.swing.JOptionPane;import java.awt.e
34、vent.*;import java.awt.*;/*主类*/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.
35、showMessageDialog(null,欢迎使用ATM柜员模拟系统!);/进入主界面时用JOptionPane.showMessageDialog();弹出系统提示 public static void main(String args) ATMmodel atm=new ATMmodel();/主函数实例化 /*创建账户*/ class Account private int count=10000; /初始账户余额10000 private String account=123456; /初始账号 private String password=123456; /初始密码 publi
36、c Account() /账户函数 public void setpw(String password) /设置密码 this.password=password; public void deccount(int money) /deccount 取款 count-=money;/取款后再原来基础上减所取部分 public void reccount(int money) /reccount 存款 count+=money;/存款后在原来基础上加所存部分 public int get() return count;/获取余额 public String getaccount() return
37、 account;/获取账号 public String getpw() return password;/获取密码/*主界面*/ class MainFrame extends JFrame /主框架方法由JFrame继承而来 public JButton checked; /检测 public JButton cunkuan; /存款 public JButton quit; /退出 public JButton qukuan; /取款 public JButton reset; /重设 /框架按钮参数 public MainFrame() /主框架函数 initComponents();
38、 /添加组件 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(WindowConst
39、ants.EXIT_ON_CLOSE);/退出程序 setTitle(ATM柜员模拟程序);setName(mianframe);/设置名称 setResizable(false); /窗口大小不可改变 cunkuan.setText(存款); /将“cunkuan”转换成“存款” cunkuan.addActionListener(new ActionListener() /设置事件监听 public void actionPerformed(ActionEvent evt) /活动事件响应 cunkuanActionPerformed(evt);qukuan.setText(取款); qu
40、kuan.addActionListener(new ActionListener() public void actionPerformed(ActionEvent evt) qukuanActionPerformed(evt);checked.setText(查询); checked.addActionListener(new ActionListener() public void actionPerformed(ActionEvent evt) checkedActionPerformed(evt);reset.setText(修改密码); reset.addActionListene
41、r(new ActionListener() public void actionPerformed(ActionEvent evt) resetActionPerformed(evt); quit.setText(退出); quit.addActionListener(new ActionListener() public void actionPerformed(ActionEvent evt) quitActionPerformed(evt); /程序界面划分,界面布局 /GroupLayout layout = new GroupLayout(getContentPane(); /Gr
42、oupLayout它将组件按层次分组,以决定它们在 Container 中的位置 getContentPane().setLayout(layout);/内容面板 layout.setHorizontalGroup( /水平划分 layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequ