实验报告附源代码(Java程序设计)
发布时间:2012-05-27 21:39:37
发布时间:2012-05-27 21:39:37
计算机系
课程大作业实验报告
实验项目名称 银行ATM系统的设计与实现
所属课程名称 Java程序设计
实 验 类 型 综合设计
姓 名
提交时间 2012-5-10
班级学号
成 绩
计算机实验室
实验概述: |
【实验目的】 学习使用JAVA技术设计与实现软件的基本过程和技术。通过实现,巩固JAVA基础知识,掌握在实践中解决问题的方法,提升JAVA实践编程能力。 【实验环境】(使用的软件) Eclipse 开发环境,office Word 软件。 |
实验内容(不够附页): |
【实验方案设计与实验过程】 题目:银行业务ATM设计与实现 处理简单帐户存取款、查询。 要求:模拟ATM的界面,用户能取款、查询、存款。数据存放在文件中。 (界面、具体功能自定) 涉及:界面设计、文件输入输出流读、写。 系统需求分析 1 、功能需求分析 本ATM柜员机的主要功能如下所述: 要求使用图形用户界面。当输入给定的卡号和密码(卡号为123456和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行: 查询余额:初始余额为0元,存款后余额为本金加利息。 ATM存款:每次存款金额为100的倍数,总额不超过5000元,金额不为负数。 ATM取款:每次取款金额为100的倍数,总额不超过5000元,金额不允许透支。 查询利率:可查询利率。 2 、其他需求分析 (1)性能描述 实时性好、灵活性强、易于不同年龄阶段的人操作。 (2)设计约束 能实现用户所定义的各项需求。 系统设计 1、总体设计 我所设计的ATM柜员机主要是由登录页面模块还由选择服务模块组成,其中选择服务模块又由取款模块、查询余额模块、修改密码模块、退卡模块组成。其功能结构图如下所示: 登陆界面模块 选择服务模块 查询余额模块 存款模块 取款模块 查询利率模块 退出模块 图1 ATM功能结构示意图 2、ATM柜员机界面设计 我觉得一个系统的界面应该要简单明了,当然样式美观就更好了。我设计的界面主要是由窗体组成,操作简单。而每一个窗口则执行相应的功能。 一个系统界面的好坏直接影响到用户的操作,界面设计要求样式美观、简单明了、方便易操作。我设计的界面主要分为窗体、菜单、文本输入框几个部分,分别执行相应的操作。 (1)窗体的主要结构的设计 我所设计的窗口的主要结构的特点就是每个窗口都对应着一个特定的功能。比如说报错,还有各种查询余额、存款、取款、查询利率、选择服务等功能,所以它们都是由各种选择和文本框组成的。所以整个设计就趋向简单化了。 (2)各功能模块设计 1 登陆页面模块设计 与ATM柜员机打交道比较多的,也是大家对安全比较关心的问题:密码。所以第一个界面就是要输入密码和卡号才能继续服务。 我定义了文本框累的对象cardNum, password。判断输入的密码和卡号是否正确,如果不正确的话,则弹出密码或卡号错误的警告框,并用break跳出窗口,返回登陆界面。此模块相应的部分源代码为: str1=JOptionPane.showInputDialog("账号:"+"\n");//输入个人信息 cardNum1=Integer.parseInt(str1); str2=JOptionPane.showInputDialog("密码:"+"\n");//输入个人信息 password1=Integer.parseInt(str2); if((cardNum1==cardNum)&&(password1==password)) break; else if((cardNum1!=cardNum)||(password1!=password)) { JOptionPane.showMessageDialog(null,"错误!请重输"); str1=JOptionPane.showInputDialog("账号:"+"\n");//读入数据 cardNum1=Integer.parseInt(str1); str2=JOptionPane.showInputDialog("密码:"+"\n");//读入数据 password1=Integer.parseInt(str2); if((cardNum1!=cardNum)&&(password1!=password)) { JOptionPane.showMessageDialog(null,"两次输入错误!请退出!!"+"\n"+"卡被吞!"); System.exit(0); } else System.exit(0); } else System.exit(0); } 2 选择服务模块设计 在选择服务模块中,有各种ATM的服务功能,只要用户在该界面中选择,它就会弹出各个相应的界面。主要代码如下: String inputChoise = JOptionPane.showInputDialog ( "\t请输入您选择的项目代号:\n" + "\t\t 1 查询余额\n" + "\t\t 2 存款\n" + "\t\t 3 取款\n" + "\t\t 4 利率\n" + "\t\t 5 退出" ); choise = Integer.parseInt( inputChoise ); 3 查询余额模块设计 在查询余额模块中,会出现一个显示所剩余额的对话框。余额是由本金和利息的和。主要代码如下: cash= cash + cash * rate; JOptionPane.showMessageDialog( null,"您的余额: " + cash ); break; 4 存款模块设计 在存款模块中,和其他的界面是同样的结构。也是有一个文本框和选择组成的。用户在文本框中输入他想存的数额,但是必须是100的倍数,而且每一次最多只能存5000块。否则就会弹出报错的窗口。主要代码如下: String in = JOptionPane.showInputDialog( "请在空白框内输入金额!\n"+ "您要存款的金额是:" ); money = Integer.parseInt( in ); if((money>0)&&(money%100==0)) { cash=cash+money; JOptionPane.showMessageDialog(null,"存款成功!!"); JOptionPane.showMessageDialog(null,"您的余额是:"+cash); } else JOptionPane.showMessageDialog(null,"您的输入金额非法!请重输-->>>"); try { FileWriter fw = new FileWriter( "d:\\atm.txt ",true); PrintWriter out = new PrintWriter(fw); out.println("存款: "+money); out.close(); fw.close(); } catch (IOException e) { System.out.println( "Write file error! "); e.printStackTrace(); } break; 5 取款模块设计 在取款模块中,和存款界面是同样的结构。也是有一个文本框和按钮组成的。用户在文本框中输入他想取的数额,但是必须是100的倍数,而且每一次最多只能取5000块。当然了取款的时候也不能超过卡里的余额,再就是卡里的余额不可以为负,否则就会弹出报错的窗口。主要代码如下: String out = JOptionPane.showInputDialog( "请在空白框内输入金额!\n"+ "您要取款的金额是:" ); money = Integer.parseInt( out ); if((money>0)&&(money%100==0)) { cash=cash-money; JOptionPane.showMessageDialog(null,"取款成功!!"); JOptionPane.showMessageDialog(null,"您的余额是:"+cash); JOptionPane.showMessageDialog(null,"请取回卡!"); } if((money%100==0)&&(money<=5000)&&(money>=0)) { cash = cash - money; JOptionPane.showMessageDialog(null,"您的余额是:"+cash); if(money>0) JOptionPane.showMessageDialog(null,"请取回现金!"); } else{ JOptionPane.showMessageDialog(null,"您的输入金额非法!请重输-->>>"); str3= JOptionPane.showInputDialog("请输入金额:"+"\n");//读入数据 money=Integer.parseInt(str3); if((money%100==0)&&(money<=5000)&&(money>=0)) { cash=cash-money; JOptionPane.showMessageDialog(null,"您的余额是:"+cash); if(money>0) JOptionPane.showMessageDialog(null,"请取回现金!"); } else{ JOptionPane.showMessageDialog(null,"卡被吞!"); try{ clock.sleep(2000); } catch(InterruptedException ie){ System.err.println("Thread error:"+ie); } } } try { FileWriter fw = new FileWriter( "d:\\atm.txt ",true); PrintWriter ou = new PrintWriter(fw); ou.println("取款: "+money); ou.close(); fw.close(); } catch (IOException e) { System.out.println( "Write file error! "); e.printStackTrace(); } break; 6 退卡模块设计 在退卡模块设计中,这个方法就更加的简单了,它只是用了 System.exit(0); 7 查询利率设计 用户可查询利率,利率可在程序中修改,但不允许用户自己修改。 JOptionPane.showMessageDialog(null,"您的利率是: " + rate); 8 文件设计 存取款记录都可以在文件中体现。 存款记录只要代码如下: try { FileWriter fw = new FileWriter( "d:\\atm.txt ",true); PrintWriter out = new PrintWriter(fw); out.println("存款: "+money); out.close(); fw.close(); } catch (IOException e) { System.out.println( "Write file error! "); e.printStackTrace(); } 取款代码与存款相似。 实验步骤、测试数据及实验结果 1.登陆界面 (1)输入正确的帐号和密码
(2)输入密码错误
如上再次输入错误,则出现如下界面。程序被退出。 2.登陆正确进入选择界面 3. 输入选项1,出现查询余额界面 4.输入选项2,出现存款界面 (1)如输入不是整百的金额则不能存入金额
(2)输入整百的金额则存入
5.存入金额后,查询余额为本金加利息 6.输入选项3,出现取款界面 (1)如输入不是整百的金额则不能取款
(2)输入整百的金额则取款成功
7.输入选项4,出现利率界面 8.输入选项5,出现退出界面 9.记录文件内容 |
【实验小结】 出错原因分析 在此次课程设计中,我遇到了一些问题 1.对于java语言了解不够透彻,运用到实际的软件开发中存在着困难,只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误。经细心修改终于将程序改正完成。 2.在短时间内用Java语言来设计一个具体的系统是一个较大的挑战。主要是对于正规开发一个系统的流程不熟悉,适应起来比较慢,编写各个模块相对应的操作时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。只能大量阅读相关的书籍,对于书上以及网站上下载的资料中的Java实例加强理解,还有就是多跟精通此方面的老师和同学交流,取其精华。 3.在加入文件的时候,文件中只能存放一行数据且每次记录都覆盖上次的纪录,竟跟同学反复讨论后,终于将文件记录成功。 4.在判断输入的帐号和密码是否与原帐号和密码一致时,我原本想用数组将每一位数字都一一比较,但后来发现用整型变量就可以了,而且比数组简便多了,定义语句如下: int cardNum = 123456;//信用卡号 int password = 123456;//密码 比较语句如下: (cardNum1==cardNum)&&(password1==password) 心得体会 这次作业让我对于实际动手能力与系统开发的流程的有了很大的提升,让我了解到进行软件的开发必须多进行实际的练习与操作,才能有进步。在这作业我主要学会了运用Java语言设计界面、输入文本等,学会了综合运用Java语言。 这次作业内容主要是运用JAVA语言来编写一个ARM银行程序,由于以前学的不是很扎实,而且还有些知识我们都是没有学过的,这就要求我们去查相关的书籍,还有就是和同学之间的交流。正因为这样,才锻炼了我的自学的能力,还有就是加深了我对各个知识点的认识,并且提高了我对专业的学习的兴趣,为我以后的学习打下了基础。 在这个过程当中,我学到了很多的知识,同时也感谢我的同学的帮助和指导。在以后的学习当中,我会更加努力的学习好专业知识,并将所学的知识用于实践当中去,以便牢固掌握知识。 附: //Cash.java import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import javax.swing.*; public class Cash { public static void main( String args[] ) { int cardNum1 = 1; int password1 = 1; int cardNum = 123456;//信用卡号 int password = 123456;//密码 String str1 = ""; String str2 = ""; String str3 = ""; Thread clock=null; double cash = 0; int money = 0; int i = 1; double rate = 0.0023; do {
str1=JOptionPane.showInputDialog("账号:"+"\n");//输入个人信息 cardNum1=Integer.parseInt(str1); str2=JOptionPane.showInputDialog("密码:"+"\n");//输入个人信息 password1=Integer.parseInt(str2); if((cardNum1==cardNum)&&(password1==password)) break; else if((cardNum1!=cardNum)||(password1!=password)) { JOptionPane.showMessageDialog(null,"错误!请重输"); str1=JOptionPane.showInputDialog("账号:"+"\n");//读入数据 cardNum1=Integer.parseInt(str1); str2=JOptionPane.showInputDialog("密码:"+"\n");//读入数据 password1=Integer.parseInt(str2); if((cardNum1!=cardNum)&&(password1!=password)) { JOptionPane.showMessageDialog(null,"两次输入错误!请退出!!"+"\n"+"卡被吞!"); System.exit(0); } else System.exit(0); } else System.exit(0); } while( i>0 ); int choise; while( i==1 ) { do { { String inputChoise = JOptionPane.showInputDialog ( "\t请输入您选择的项目代号:\n" + "\t\t 1 查询余额\n" + "\t\t 2 存款\n" + "\t\t 3 取款\n" + "\t\t 4 利率\n" + "\t\t 5 退出" ); choise = Integer.parseInt( inputChoise ); switch( choise ) { case 1 : cash= cash + cash * rate; JOptionPane.showMessageDialog( null,"您的余额: " + cash ); break; case 2 : String in = JOptionPane.showInputDialog( "请在空白框内输入金额!\n"+ "您要存款的金额是:" ); money = Integer.parseInt( in ); if((money>0)&&(money%100==0)) { cash=cash+money; JOptionPane.showMessageDialog(null,"存款成功!!"); JOptionPane.showMessageDialog(null,"您的余额是:"+cash); } else JOptionPane.showMessageDialog(null,"您的输入金额非法!请重输-->>>"); try { FileWriter fw = new FileWriter( "d:\\atm.txt ",true); PrintWriter out = new PrintWriter(fw); out.println("存款: "+money); out.close(); fw.close(); } catch (IOException e) { System.out.println( "Write file error! "); e.printStackTrace(); } break; case 3 : String out = JOptionPane.showInputDialog( "请在空白框内输入金额!\n"+ "您要取款的金额是:" ); money = Integer.parseInt( out ); if((money>0)&&(money%100==0)) { cash=cash-money; JOptionPane.showMessageDialog(null,"取款成功!!"); JOptionPane.showMessageDialog(null,"您的余额是:"+cash); JOptionPane.showMessageDialog(null,"请取回卡!"); } if((money%100==0)&&(money<=5000)&&(money>=0)) { cash = cash - money; JOptionPane.showMessageDialog(null,"您的余额是:"+cash); if(money>0) JOptionPane.showMessageDialog(null,"请取回现金!"); } else{ JOptionPane.showMessageDialog(null,"您的输入金额非法!请重输-->>>"); str3= JOptionPane.showInputDialog("请输入金额:"+"\n");//读入数据 money=Integer.parseInt(str3); if((money%100==0)&&(money<=5000)&&(money>=0)) { cash=cash-money; JOptionPane.showMessageDialog(null,"您的余额是:"+cash); if(money>0) JOptionPane.showMessageDialog(null,"请取回现金!"); } else{ JOptionPane.showMessageDialog(null,"卡被吞!"); try{ clock.sleep(2000); } catch(InterruptedException ie){ System.err.println("Thread error:"+ie); } } } try { FileWriter fw = new FileWriter( "d:\\atm.txt ",true); PrintWriter ou = new PrintWriter(fw); ou.println("取款: "+money); ou.close(); fw.close(); } catch (IOException e) { System.out.println( "Write file error! "); e.printStackTrace(); } break; case 4 : JOptionPane.showMessageDialog(null,"您的利率是: " + rate); break; case 5 : JOptionPane.showMessageDialog( null, "谢谢使用!" ); System.exit(0); } } } while( choise<1 || choise>5 ); } System.exit(0); } } |
评语: 批阅日期: |