ATM课程设计报告--ATM模拟程序.docx

上传人:夺命阿水 文档编号:900934 上传时间:2024-01-10 格式:DOCX 页数:19 大小:128.60KB
返回 下载 相关 举报
ATM课程设计报告--ATM模拟程序.docx_第1页
第1页 / 共19页
ATM课程设计报告--ATM模拟程序.docx_第2页
第2页 / 共19页
ATM课程设计报告--ATM模拟程序.docx_第3页
第3页 / 共19页
ATM课程设计报告--ATM模拟程序.docx_第4页
第4页 / 共19页
ATM课程设计报告--ATM模拟程序.docx_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《ATM课程设计报告--ATM模拟程序.docx》由会员分享,可在线阅读,更多相关《ATM课程设计报告--ATM模拟程序.docx(19页珍藏版)》请在课桌文档上搜索。

1、第1章课题概述11.1 课题的目的11.2 课题的要求11.2.1登陆账户的要求11. 2.2程序实现的功能要求11.3涉及包的描述1第2章概要设计22.1 整个程序的模块结构及流程22.2 各个功能的设计思路22.3.1查询余额22.3.2ATM取款32.4.3ATM存款32.4.4更改密码32.3.5退出程序32.3美化程序3第3章功能实现43.1登录窗口的实现43.2功能选择窗口的实现63.3主要功能模块的实现63.3.1查询余额的实现73.3.2取钱的实现93.3.3存钱的实现103.3.4改密的实现10第4章调试及发现问题的解决13第5章程序测试及分析14第6章总结17参考文献18第

2、1章课题概述本次数据结构课程设计的题目是设计并实现ATM模拟程序。1.1 课题的目的ATM模拟程序是日常应用程序,将java程序和日常生活的应用相结合,表现了java语言设计的实践性和应用性。加深学生对理论教学内容的理解和掌握,使学生系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发打下一定基础。1. 2课题的要求1.2 .1登陆账户的要求输入给定的卡号和密码(初始卡号为62250028和密码为123456)时,系统能登录ATM柜员机系统,进行一系列操作。1.2.2程序实现的功能要求1、查询余额:初始余额为100OO元;2、AT

3、M取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支;3、ATM存款:不能出现负存款;4、修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码;5、要求数据采用文件存储,如果界面实现采用了GUL则酌情加分。1.3涉及包的描述1. java,awt包,包含构成抽象窗口的工具集(abstractwindowtoolkit)的多个类,用来构建和管理应用程序的图形用于界面(GUI)。2. javax.swing包,扩充和增强图形用户界面功能。3. java.io包,通过数据流、序列化和文件系统提供

4、系统输入和输出。4. java.Iang包,提供利用Java编程语言进行程序设计的基础类。5. java,uti包,包含collection框架、遗留的collection类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。第2章概要设计2.1整个程序的模块结构及流程根据课题要求,整个程序分为两个主窗口,分别为登陆窗口和功能选择窗口。登陆窗口主要实现用户登陆。输入用户名以及密码,判断是否正确,若正确,则登入功能选择窗口,反之,重新输入。功能选择窗口分为五个模块,分别为查询:查询余额、取款:ATM取款、存款:ATM存款、改密:更改密码以及退出:退出程序

5、。程序各功能模块的划分,及主要流程如图2-1(1)和图2-1(2)所示。图2-1整个程序各功能模块间的流程2.2各个功能的设计思路程序一共有八个类,其中LoginFrame()类为登录页面。主要包括:两个标签:“卡号”、“密码”,两个文本框:JTeXtField、JPasswordField和两个按钮:“登录登退出退程序可以从文档中直接读取用户名以及密码,通过验证正确与否,进入功能选择窗口,即MainFrame()类。该页面设置安放按钮并给按钮创建监听ActionListener,对所有按钮进行监听。2.3.1查询余额按下“查询”按钮就可以进行查询功能,可以跳出一个依附功能选择窗口的小窗口(各

6、个跳出的小窗口都是如此),显示了当前用户所拥有的余额。在此小窗口里有“确认”按钮,可以销毁小窗口,即返回功能选择窗口。2.3.2ATM取款按下“取款”按钮就可以跳出取款的小窗口。在文本框中输入你想取出的金额,就可以实行取款功能,余额会相应减少。取款成功会弹出“取款成功,谢谢!”的语句,按下“确定”会销毁窗体。要注意的是1、每次取款的金额数需要是100的倍数。2、每次取款总额不超过5000元。3、取款金额不允许是负数。4、取款金额不得超过账户所拥有的余额。2.4.3ATM存款按下“存款”按钮就可以跳出存款的小窗口。在文本框中输入你想存储的金额,就可以实行存款功能,余额会相应增加。存款成功会弹出“

7、存款成功,谢谢!”的语句,按下“确定”会销毁窗体。要注意的是存款时,金额不允许有负存款。2.4.4更改密码按下“改密”按钮,会弹出更改密码的小窗口。此窗口内有3个文本框,分别是原密码,新密码和确认密码。首先,原密码必须正确,其次,输入新密码的长度不小于6位,不允许出现6位完全相同的情况,最后,输入的确认密码必须和新密码相同,才可以更改密码成功。任何一点不符合即更改密码失败。按取消或者确认按钮则可以销毁窗体。2.3.5退出程序按下“退出”按钮,就会弹出是否退出程序的小窗口,可选择是或否来决定是否退出。是,则程序结束,将余额写进文档中。2.3美化程序以JFrame对象作为此程序的容器,设置标题并实

8、现最小化窗、移动窗口等功能。其中添加JLabel(Iconimage)构造JLabel标签文本以及指定图标为image,添加JBUttOn(IConicon)构造JBUtton按钮组件,并指定图标。运用了FloWLayoUt、BorClerLayoUt等布局,布置了容器的边框布局。对容器组件进行安排,并调整其大小,在北、南、东、西、中的区域中安排组件,也安排面板中的按钮,使得按钮呈水平放置。第3章功能实现3.1登录窗口的实现程序中用了ActionListener监听JBUttOn按钮。定义了USer和PaSSWOrd,用try-catch-finalIy语句处理异常,读取文本文档count中的

9、数据。try(br=newBufferedReader(newInputStreamReader(newFiIeInputStream(z,D:/count,txt);user=br.readLine();password=br.readLine();)catch(IOExccptione)e.PrintStackTrace();finally(try(br.close();)catch(IOExceptione)e.PrintStackTrace();)在LoginFranle()类中,用语句SUPCr(ATM管理系统);继承父类,命名了窗口。定义了一个容器COntainerC=this.g

10、ctContentPanc();定义容器大小setSize(300,200);并使窗口居中显示。使用了BorderLayout的布局,在北部、南部以及中部分别放置一个组件。/北部JLabeljl=newJLabel();Iconicon=CreateIcon.getlcon(*login.jpgzz);jl.setlcon(icon);/南部JPanelpl=newJPanel();pl.SetLayout(newFlowLayout(FlowLayout.CENTER,30,2);jbl=newJButton(登录);jbl.addActionListener(this);Jb2=newJB

11、utton(退出);jb2.addActionListener(this);pl.add(jbl);pl.add(jb2);/中部JPanelcenter=newJPanel();JLabeljll=newJLabel(卡号:);jtfl=newJTextField(12);JLabeljl2=newJLabcl(密码:);jpf=newJPasswordField(12);jtfl.SCtText(user);center.SetLayout(newGridLayout(2,1);center,add(jll);center,add(jtf1);JPanel11=newJPanel();ll

12、.add(jll);11.add(jtfl);JPanel12=newJPanel();12.add(j12);12.add(jpf);center,add(ll);center,add(12);c.add(jl,BorderLayout.NORTH);c.add(pl,BorderLayout.SOUTH);c.add(center,BorderLayout.CENTER);SetDefaultcioseOperation(JFramc.EXITONCLOSE);setVisible(true);)publicstaticvoidmain(Stringargs)newLoginFrameO;

13、)监听登录按钮,执行以下代码,使用if-else语句判断登录用户名和密码是否正确。正确,则调用newMainFrameO;,错误,则显示语句“帐号或者密码错误:监听退出按钮,执行程序退出。SUPPreSSWarningS(deprecation)publicvoidactionPerformcd(ActionEvente)/登录按钮if(e.getSource()=jbl)(if(jtf1.getText().equals(user)&jpf.getText().equals(password)newMainFrame();dispose();)elseJOptionPane.ShowMess

14、ageDialog(this,帐号或者密码错误”);)/退出按钮elseif(e.getSource()=jb2)System,exit(O);3.2功能选择窗口的实现程序中用了ActionListener监听JBUttOn按钮。定义JBUttOrb定义JPanel容器,用FlowLayout流布局使五个按钮在同一直线水平放置添加在容器里。用BorderLayout布局将JPanel放在南部,将找的一张图片放在中部作为背景。用if-else语句,调用ShowMoneyDialogODrawMoneyDialogOAddMoneyDiaIog()和ModifyDialogO。确认退出程序,则将用

15、户的余额写入文本文档Colmter中,并退出程序。publicvoidactionPerformcd(ActionEvente)if(e.getSourcc()=jbl)/查询余额newShowMoneyDialog(this);elseif(e.gctSource()=jb2)/取钱按钮newDrawMoneyDialog(this);elseif(e.getSource()=jb3)/存钱newAddMoncyDialog(this);elseif(e.gctSource()=jb4)/修改密码newModifyDialog(this);elseif(e.getSource()=Jb5)/

16、退出按钮if(JOptionPane.ShowCOnfirmDialog(this,“确认退出系统?)=0)try(BufferodWriterbr=newBufferedWriter(newOutputStreamWriter(newFiIeOutputStreain(,D:/counter,txt);br.write(Count,balance+;br.close();catch(FileNotFoundExceptionel)el.PrintStackTrace();catch(NumberFormatExceptionel)el.PrintStackTrace();catch(IOEx

17、ceptionel)el.PrintStackTrace();)System,exit(0);)3.3主要功能模块的实现定义了COUnt()类,读取文本文档中COUnter里的账户余额数据,数据传给balance0publicclassCount(publicstaticdoublebalance;static(try(BufferedReaderbr=newBuffercdReader(newInputStreamReader(newFileInputStream(,D:/counter,txt);balance=Double.parseDouble(br.readLine();br.clo

18、se();catch(FileNotFoundExceptione)e.PrintStackTrace();catch(NumberFormatExceptione)e.PrintStackTrace();catch(IOExceptione)e.PrintStackTrace();)publicstaticCountcount=newCount();publicdoublegetBalance()(returnbalance;)在取钱时,当所取的钱大于账户余额或者所取的钱小于等于O,取钱操作不执行。publicbooleandrawMoney(doublemoney)if(moneybala

19、nce)(returnfalse;)balance-=money;returntrue;)在存钱时,当所存的钱小于等于O,存钱操作不执行。publicbooleanaddMoney(doublemoney)if(money5000)JOptionPane.ShowMessagcDialog(this,”取款金额不能超过5000元,请重新输入取款金额!);jtf.SetText();return;)if(Count,count.drawMoney(price)(JOptionPane.ShowMessagcDialog(this,”取款成功,谢谢!”);jtf.setText();dispose

20、();else(JOptionPane.ShowMessageDialog(this,”取款失败!”);jtf.setText();)elseif(e.getSource()=jb2)dispose();3.3.3存钱的实现在AddMoneyDiaIog中用CatCh抓取异常,完成规定要求,并增加了要求存款必须为100的倍数。调用addMoney(),存款成功,销毁窗体。反之,失败,显示语句“存款失败,存款金额不能为负!”publicvoidactiOnPerformcd(ActionEvente)(if(e.getSource()=jbl)Stringstr=jtf.getText();do

21、ubleprice=0;try(price=Double.parscDoublc(str);catch(NumberFormatExceptionel)(JOptionPane.ShowMcssageDialog(this,”存款金额格式错误,请重新输入!);jtf.SetText(*);return;)if(!(price%100=0)JOptionPanc.ShowMcssagcDialog(this,”存款金额只能是100元的倍数,请重新输入存款金额!);jtf.SetText;return;)if(Count,count.addMoncy(price)JOptionPanc.showM

22、cssageDialog(xist”存款成功,谢谢!”);jtf.setText();dispose();else(JOptionPane.ShowMcssageDialog(this,”存款失败,存款金额不能为负!);jtf.setText(*);)elseif(e.getSource()=jb2)dispose();)3.3.4改密的实现监听改密按钮,设至JLabeI标签,分别为原密码,新密码,确认密码。在其后构造文本域。当原密码不同于新密码,新密码大于六位字符且不能为同一个字符,确认密码与新密码相同,则成功更改密码。publicvoidactiOnPerformed(ActionEven

23、te)/确定按钮if(e.getSource()=jbl)Stringpl=jtfl.gctText().trim();Stringp2=jtf2.getText().trim();Stringp3=jtf3.getText().trim();/判断旧新密码是否为空if(PLeqUalS()p2.equals(*)p3.equals()(JOptionPane.ShowMessageDialog(this,”密码不能为空!”);return;)/判断原密码是否正确if(!pl.equals(LoginFrame.password)JOptionPane.ShowMessageDialog(th

24、is,原密码错误!”);return;)/判断两次密码是否相同if(!p2.equals(p3)JOptionPane.ShowMessageDialog(this,”两次密码不匹配!”);return;)/判断密码长度是否合法if(p2.length()6)JOptionPane.ShowMessageDialog(this,”密码长度不能小于6!);return;)/判断密码是否是同一字符charc=p2.charAt(0);intn=0;for(inti=1;ip2.length();i+)(if(p2.charAt(i)=c)n+;)if(n=p2.length()-1)JOption

25、Pane.ShowMessagcDialog(this,”密码不能设置为同样字符!”);return;)/保存用户和密码信息WriteUSer(“62250028,p2);JOptionPane.ShowMessagcDialog(this,”密码修改成功!”);jtfl.SetTcxt();jtf2.SetText();Jtf3.setText();dispose();/取消按钮elseif(e.getSource()=jb2)dispose();)* 向文件中写入和保存修改后的用户和密码* paramuser* parampassword* /publicstaticvoidWriteUs

26、er(Stringuser,Stringpassword)BufferedWriterbw=null;try(bw=newBufferedWriter(newOutputStreaniWriter(newFiIeOutputStreani(,D:/count,txt);bw.write(user);bw.newLine();bw.write(password);bw.flush();catch(IOExceptione)e.PrintStackTrace();finally(try(bw.close();catch(IOExceptione)e.PrintStackTrace();)第4章调试

27、及发现问题的解决虽然在程序的编写过程中遇到了很多问题,但是通过上网查阅相关资料,与其它同学讨论,询问指导老师等方式,最终都一一解决了,程序实现及调试过程中遇到的主要问题及解决方法如下。1、第一次调试后,结果发现窗口很单调,怎么解决?解决方法:上网找到一些可用的图片等,放入image文件夹中,创建CreatelCOn()类,用于读取图片。在各个窗口中的JFrame容器中,用Iconicon=CreateIcon.getlcon(zzlogin.jpgz,);jl.seticon(icon);等类似语句调用图片,根据BOrderLayOUt布局,用c.add(jl,BOrderLayoUt.NOR

28、TH);等类似语句,将其放在合适的位置。2、更改密码的实现中,如何使判断密码不为同一字符?解决方法:将输入的新密码P2的第一个字符赋值给c,不更改C的值,通过了for循环语句,依次判断新密码的后几位的字符是否和C相同。如果相同,n的值增加1,当for循环执行完毕,若全部相同,则n的值为新密码的长度减一,就执行for循环外的if语句,“密码不能设置为同样字符!”,新密码不成立。charc=p2.charAt(0);intn=0;for(inti=1;ip2.length();i+)if(p2.charAt(i)=c)n+;if(n=p2.IengthO-1)JOptionPane.ShowMes

29、sageDialog(this,密码不能设置为同样字符!);return;)3、如何实现存钱取钱的功能?解决方案:我在程序里创建了一个COUnt类,定义了balance为账户余额。调用文本文档COUnter中的数据,赋值给balance。当所取得钱money不小于零或者不大于余额,则可以取钱。当要存的钱不小于等于零,可以成功取钱。第5章程序测试及分析运行程序,首先显示登录页面,填写卡号和密码。由于账户是程序直接从CoUnt文本文档中读取,根据要求:初始卡号为62250028和密码为123456。图5-1所示,是登录窗口的显示。图5-1登录窗口图5-2所示,是功能选择主窗口的显示。分别有查询、取

30、款、存款、改密和退出五个按钮。图5-2功能选择窗口从文本文档counter中直接读取账户余额的数据,初始余额为10000元。如图所示5-3所示。图5-3查询余额存取款功能以及改密功能的实现,如图5-4所示。图5-4取款、存款、改密窗口退出程序功能的实现。图5-5退出程序窗口第6章总结通过这几周的课程设计,终于写出了程序,更重要的是通过这次实践,加深了我对java程序设计学科相关知识的理解。总结起来,主要有以下几点体会:1、java语言从浅入深,一开始的知识都是基础,像是基本数据类型,逻辑运算符,流程控制的分支、循环结构等,这些都是学习java程序设计的前提和基础,也是必须要掌握的知识。对于对象

31、的创建和使用,类的继承,构造方法等就是java程序设计的入门了。只有先将这些掌握了才能更好地进行下一个阶段的学习。2、在java程序设计的学习中,编写程序时必不可少的,从一开始的if-else语句的编写,到其成功运行,收获的就是每次成功的一点点喜悦。这可以使我对这门学科有兴趣,并慢慢加大。兴趣是学习的首要条件,只有你有了兴趣才能真正的去用心学习。3、java编程是很枯燥乏味的,但是仍需要以百分之百的细心严谨的态度去对待它。将较难的编程分成一小块一小块,每实现一小块就代表你离程序的成功运行更近一步。像这个ATM模拟程序中,我将功能块分割出来,分成登录功能、主窗口选择功能面,分窗口:存钱、取钱、改密、显示余额,一个一个的完成,再进行组合,到最后调试,并成功运行。在这次的程序设计中,使我对布局有了进一步的认识,同时也锻炼了我对于SWing组件、图形化用户界面的知识了解程度,充分发现了自己的不足,在同学以及老师的帮助下完成了此次课程设计任务。感谢在此过程中帮助过我的指导老师和各位同学!参考文献1曲培新等.java项目开发案例精粹.电子工业出版社Y.DanielLiang译:万波,郑海红.Java语言程序设计基础篇“原书第6版”.机械出版社出版

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号