《java课程设计--ATM模拟程序.docx》由会员分享,可在线阅读,更多相关《java课程设计--ATM模拟程序.docx(17页珍藏版)》请在课桌文档上搜索。
1、第1章课题概述11.1 课题的目的11.2 课题的要求11.2.1存取款的要求11.2.2修改密码的要求1第2章概要设计22.1整个程序的界面结构22.2各个界面的设计32.2.1登录界面32.2.2选择业务界面32.2.3修改密码界面42.2.4查询余额界面42.2.5取款界面52.2.6存款界面5第3章程序功能的实现63.1主界面的实现63.2业务界面的实现73.2.1选择业务界面实现73.2.2修改密码界面实现83.2.3查询余额界面实现103.2.4存取款界面实现10第4章调试及发现问题的解决12第5章程序测试及分析13第6章总结15参考文献16第1章课题概述本次java课程设计的题目
2、是简单的ATM程序。1.1 课题的目的ATM柜员机在我们生活中随处可见,24小时为我们提供了存取款等业务,让我们的生活更加的便利,我需要做的就是将这样一个程序通过图形界面模拟现实生活中的ATM界面,并且也会提供一些已有的账号和密码,在登陆页面登陆,若密码与账号无误则会显示选择业务页面,会提供常见的功能,存取款,修改密码功能。这里就有文件存储与读取来记录账号和密码,以及余额,密码的改动,密码改动后将更新密码,这样就更接近现实生活中的程序,有很大的现实意义。1.2 课题的要求1.2.1 存取款的要求(1)查询余额:初始余额为100OO元;(2) ATM取款:每次取款金额为100的倍数,总额不超过5
3、000元,支取金额不允许透支;(3) ATM存款:不能出现负存款;(4)余额变化要通过文件存储的形式保存下来,该账号对应的余额在程序下次启动时是更新后的数目;1.2.2修改密码的要求(1)修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码;(2)修改的新密码需要以文件存储方式更新,下次该账户登录需要使用修改的新密码;第2章概要设计2.1整个程序的界面结构根据课题要求,首先出现的是登陆界面,在确认账号密码无误后出现选择业务页面,再可以选择业务,并根据你选择的业务出现相应界面,每个界面都有程序退出键以及返回键返回登
4、陆界面。下图是功能模块图:2.2各个界面的设计2.2.1登录界面第一个窗口的变量有JPanelimagePanel;ImageiconbackgroundJFrameframe1;JLabellbl,lb2,lb3,lb4;JTextFieldtextl;JPasswordFieldtext2;JPanelpane;JButtonbtl,bt2,bt3背景图片放在一个JLable中再将framel的背景设为透明,再将有背景图片的JLabIe放在Pane上,将Pane放在framel上达到背景的效果。窗口的其他组件在计算好坐标后就依次添加在pane上,这样第一个界面就已经设计好了2.2.2选择业
5、务界面第二个界面的变量有JBUttOnbl,b2,b3,b4,b5,b6;利用在MainFrame中的构造方法,设置每一个JButton的位置,排列好了之后添加监听,在用户选择后显示相应的界面。2.2.3修改密码界面第三个界面的变量有JButtonbtnl,btn2,btn3;JLabellbel,lbe2,lbe3,cwl,cw2,cw3;JPasswordFieldtf1,tf2,tf3;在文本输入框的右方依次放置三个JLabe1,用于提示用户输入密码的规则,密码输入框的字符是以*表示,是不可见的。在密码修改全部符合规则才可以更新密码,返回到选择业务界面。2.2.4查询余额界面第四个界面的
6、变量有JLabeIlabel;JLabeltt;JLabelttl;JButtonbbl,bb2;这个界面是一个查询的页面,用户无法修改余额,因此没有设置文本输入框,两个按键用户可以操作,可以返回选择业务界面或者退出程序。2.2.5取款界面第五个界面的变量有JLabelaa,bb,WW1;JTextFieldff;JPanelpp;JButtonqql,qq2,qq3;在这个界面用户需要输入的金额,输入的金额需要符合规则,是大于100且小于5000的100的整数,这一点也是很符合实际生活中的标准的。在这里设置了JOptionPane,来提示用户输入金额。2.26存款界面第六个界面的变量有JLa
7、belwl,w2,w;JTextFieldf;JPanelp3;JButtonql,q2,q3;这个界面与第五个界面没有什么大的区别,只是文本不一样,提示的文字也不一样,在这里用户输入的金额耍求不能为负数,且为100的倍数,大于100小于5000o第3章程序功能的实现3.1主界面的实现在设置好界面的布局后,添加事件的监听,用数组的形式依次读取账号和密码,之所以用数组是以为,数组可以存储多个用户,这样就可以实现取款机的多用户使用了。在这些准备工作做好之后就是实现登录界面的功能。代码如下:publicvoidactionPerformed(ActionEvente)if(e.getSource()
8、=btl)lb3.setText(,z,);lb4.setText();textl.SetTeXt();text2.setText(/,z,);elseif(e.getSource()=bt2)intflag=O;for(inti=O;izh.length;i+)if(textl.getText().equals(zhi)&text2.getText().equals(password)flag=1;newFrame_2();frame1.disposeO;break;)flag=-1;if(flag=-1)textl.setText(z,z,);text2.SetTeXt();lb3.set
9、Text(,z,);lb4.setText(账户不存在,请重新输入);return;elseif(e.getSource()=bt3)System,exit(O);)publicstaticvoidWriter()throwsIOExceptiontry(FileWriterf3=null;f3=newFileWriter(,d:Wpassword.txtzz);BufferedWriterff3=newBufferedWriter(f3);ff3.write(password);ff3.close();catch(FileNotFoundExceptione)e.PrintStackTrac
10、e();)publicstaticvoidWriterMoneyOthrowsIOExceptiontryFileWriterf3=null;f3二newFileWriter(z,d:count.txtz,);BufferedWriterff3=newBufferedWriter(f3);ff3.write(money+;ff3.close();catch(FileNotFoundExceptione)e.PrintStackTrace();)3.2业务界面的实现3.2.1选择业务界面实现选择业务界面主要是根据用户的选择显示相应的界面,用if-else判断并做出响应皆可。因此在选择业务界面的实
11、现里只要是方法的调用。publicvoidactionPerformed(ActionEvente)if(e.getSource()=bl)newMoclifyPassword(this);elseif(e.getSource()=b2)newSearchMoney(this);elseif(e.getSource()=b3)newDrawMoney(this);elseif(e.getSource()=b4)newAddMoney(this);elseif(e.getSourceO=b5)System,exit(O);elseif(e.getSource()=b6)System,exit(O
12、);3.2.2修改密码界面实现修改密码的实现主要是判断,在判断原密码是否错误,在判断新密码两次是否一致,以及新密码的要求,当符合所有的条件后才可以修改成功,并以写的方式写到存储密码的文件里,实现密码的刷新。publicvoidactionPerformed(ActionEvente)if(e.getSource()=btnl)/确认if(tf1.getText().equals(MainFrame.password)Strings=tf2.getText();if(s.matches(,0-96*)=true)if(s.equals(tf3.getText()intsum=O;charc=s.
13、charAt(O);for(intj=O;j=6)tf2.setText(”);tf3.SetTeXt();cw1.setText();cw2.setText(请输入不重复的六位数!);cw3.setText(/,z,);return;elsecw1.setText();cw2.setText();MainFrame.password=s;try(MainFrame.WriterO;catch(IOExceptionel)el.PrintStackTrace();)cw3.SetTeXt(密码修改成功!);return;)elsecw1.setText();cw3.setText(,z,);t
14、f1.setText();tf2.SetTeXt();tf3.SetTeXt();cw2.SetTeXt(两次输入的密码不一致!”);return;elsecw1.setText();cw2.setText(”);tf1.setText(/,z,);tf2.setText();tf3.SetTCXt();cw3.setText(”请输入六位数的密码!);return;)elsecwl.SetTeXt(原密码错误!);cw2.setTextC);cw3.setText(z,z,);tf1.SetTeXt();tf2.setText(z,z,);tf3.setText();elseif(e.get
15、Source()=btn2)dispose();elseif(e.getSource()=btn3)System,exit(0);)3.2.3查询余额界面实现查询余额的实现就是将在文件中读取的数目显示出来publicvoidactionPerformed(ActionEvente)if(e.getSource()=bbl)this,disposeO;elseif(e.getSource()=bb2)System,exit(0);)3.2.4存取款界面实现存取款界面的实现的方法是一样的就放在一起来描述,存款的限制是需要符合为大于100小于5000的100的倍数,取款除此之外还不能大于账户的余额,
16、之后符合条件才可以存取款成功若不符合就会出现提示框提示用户操作。这里给出存款功能实现的代码如下:publicvoidactionPerformed(ActionEvente)if(e.getSource()=ql)Stringstr=f.getText();doubleprice=0;tryprice=Double.parseDouble(str);catch(NumberFormatExceptionel)JOptionPane.ShowMessageDialog(this,存款金额格式错误,请重新输入!);f.setText();return;)if(priceO)存钱不能为负存款成功,谢
17、JOptionPane.ShowMessageDialog(this,数!);f.setText(z,z,);return;elseJOptionPane.ShowMessageDialog(this,谢!);MainFrame.money+=price;tryMainFrame.WriterMoneyO;catch(IOExceptionel)el.PrintStackTrace();f.setText(z,zz);)elseif(e.getSource()=q2)this,dispose();elseif(e.getSource()=q2)System,exit(O);第4章调试及发现问题
18、的解决在做课程设计的时候遇见了很多的问题,但是通过百度,询问老师和同学也解决了,总结在编写程序过程中遇见的问题及其解决的方法如下:1 .在界面的设计上,选择使用的是什么布局管理器?为什么?在开始准备用流式布局管理器,但是界面出来后发现组件的排列就不是自己设计的样子,也尝试过别的布局管理器,在尝试过后发现还是网格管理器比较灵活,可以设置坐标,这样就可以计算坐标,组件的位置就可以自主设计。2 .怎么将六个界面分开,而不是放在一起,并且可以正常的运行?在修改程序的时候发现将六个界面的代码放在一个类里面会很长,并且出现错误时不好调试以及修改,在修改第一个界面的设计是,就需要该相应的事件响应程序,代码过
19、长就容易混乱。在这个问题上,是咨询的同学,最后的解决方法是将六个界面放在六个类里面,并且将登陆界面更名为MainFranle的类,用来提示主页面。接下来就是将各个页面都放入新的类里,类中包括界面的设计以及事件监听,在需要事就可以调用类。这样在修改程序或是捕获异常时就少了很多的麻烦。3 .怎么实现多用户,以及余额的存储?单用户的操作不符合实际,而且余额不可能一直是同一个数目。因此想实现多用户和余额的存储。开始就只能想到要用文件读写来实现这些功能,在查阅一些资料之后想到,可以用数组或者集合来读取,并存储多个数据,因为对集合的使用不多,就选择了用数组读取,通过循环来按行读取数据并放在数组中,每一个用
20、户相对应的密码也用数组来存储,这样就可以实现多用户了。余额的存储主要就是文件的读写,在存取款之后都调用一次写的方法更新余额,在查询余额是就是文件的读取。4 .实现多用户后修改密码怎么更新?开始的时候实现多用户就已经将修改密码的功能写好了,实现了以后,修改密码就不能对应每一个账号来修改了,这个问题困扰了我,在询问同学之后。是这样解决的:用一个for循环来获取当前账号所对应的密码,确认旧密码是否与输入的密码一致,若一致,则判断新密码是否符合要求,待所有条件都符合就允许修改当前账号的密码,并调用已经写好的文件的写入类,来更新此账号的密码并存储在密码所在的数组中。5 .运行时会偶尔抛出一些异常,但是编
21、译时却没有提示异常?第一次运行发现没有任何错误,但是第二次却抛出了异常,将异常捕获到,发现是调用文件读写类的时候没有正确处理异常,虽然在写读写类时用了try-catch捕获异常,但是并没有捕获全部可能出现的异常。解决方法是百度搜索了一下可能在运行中出现的异常,捕获,就没有出现这样的问题了。第5章程序测试及分析在运行程序后就会出现登陆页面,输入错误的账号,即账号不是存储在文件中的账号就会出现提示,如图5-1图5-1登陆界面同理,密码的错误也会有这样的提示。当密码与账号均正确就会显示选择业务界面,如图5-2图5-2选择业务界面修改密码时若密码与旧密码不一致则如图5-3图5-3修改密码界面两次输入的
22、新密码不一致则如图5-4图5-4修改密码界面取款成功如图5-5图5-5取款界面若不成功则显示用户提示,其他同上。存款成功如图5-6图5-6存款界面若不成功则显示用户提示,其他同上。余额界面就是在进行上述操作后,余额更新,并显示即可。第6章总结在这次的课程设计中,主要运用了JaVa语言的界面设计、异常处理、Swing控件等,综合运用了JaVa语言。我深刻感受到了面向对象语言中类库的强大功能,掌握了运用JaVa中的类实现某些基本功能,并且学会自己解决一些编译过程中的问题,为以后的面向对象语言的自学奠定了基础。通过这一个礼拜的课程设计我真的学到了很多的东西,当然这也和我的同学的帮助是离不开的。在这次
23、的课程设计中,是运用JAVA语言来编写了一个ATM模拟程序,程序的模块及思路很简单,只是在编译过程中有一些小的细节上的问题,特别是在写事件是,很多的if-else循环大括号的位置放错了就会出现问题而且不容易被发现,在修改密码那里就因为存在很多的嵌套和判断语句搞混,虽然都是细节上的问题但是还是要注意到,要做一名程序员最起码的就是要细心,在写外层循环是要习惯性的把符号结构写好而不是走一步加一步。其中输入输出流等技术由于以前学的不是很扎实,而且还有些知识我们都是没有学过的,这就要求我们去查相关的书籍,还有就是和同学之间的交流。正因为这样,才锻炼了我的自学的能力,还有就是加深了我对各个知识点的认识,并
24、且提高了我对专业的学习的兴趣。此外,我还感受到了面向对象语言的类库的强大的功能,掌握了运用JAVA中的类实现某些基本功能,并学会了自己查询使用类的方法,也就是要会用API文档,为以后更好的学习面向对象语言奠定了基础。当然了写程序还要养成良好的学习态度和学习习惯,培养正确的学习方法。编写复杂的计算机程序要学会独立思考,不懂的地方可以上网或到图书馆查阅资料,遇到实在无法理解或解决的问题时,要主动向老师请教。不能只是以一种应付任务的态度去写程序,我们现在编写简单的小程序就应该认真对待,以后还会有大的一些项目需要做,我们需要在现在就培养好的习惯,为以后的工作养好良好的习惯。通过将近一周的努力,这次课程设计结束了,在这个过程当中,我学到了很多的知识,同时也感谢我的同学的帮助和指导。在以后的学习当中,我会更加努力的学习好专业知识,并将所学的知识用于实践当中去,以便牢固掌握知识。参考文献1张晨,付冰,赵军,Java2应用编程150例M.北京:电子工业出版社,20032黄明,梁旭,周绍斌,JaVa课程设计ML北京:电子工业出版社,20063徐谡,徐立,孙记安,Java应用与开发案例教程M.北京:清华大学出版社,2005