atm机状态图(精选4篇)
1.atm机状态图 篇一
ATM柜员机
目 录 课程设计过程概述.................................................................................1 2 课程设计题目描述和基本设计要求.......................................................1 3 系统需求分析.........................................................................................1 3.1 功能需求分析 ················································································ 1 3.2 其他需求分析 ················································································ 1 4 系统设计................................................................................................2 4.1 总体设计 ························································································ 2 4.2 ATM柜员机界面设计 ···································································· 3 4.3 各功能模块设计············································································· 4
4.3.1 登陆页面模块设计 ··························································· 4 4.3.2 选择服务模块设计 ··························································· 5 4.3.3 取款模块设计 ·································································· 7 4.3.4 修改密码模块设计 ··························································· 8 4.3.5 退卡模块设计 ·································································· 9
4.4 异常处理情况说明 ········································································· 9 5 系统实现与测试...................................................................................10 6 课程设计总结.......................................................................................12 6.1 遇到的问题及解决办法 ······························································· 12 6.2 心得体会 ······················································································ 12 参考文献..................................................................................................13 附录..........................................................................................................13
ATM柜员机 课程设计过程概述
2009年6月,JAVA游戏开发课程设计在实验楼三楼机房进行,持续时间为两周。这次课程设计的主要目的是结合面向对象程序设计课程,培养我们面向对象软件开发的思维,初步了解软件开发的一般流程,提高用JAVA编程的实际动手能力并增强大家对面向对象的了解。这次课程设计的主要内容是独立用JAVA语言开发一个小的应用程序。我开发了一个ATM柜员机。课程设计题目描述和基本设计要求
我设计的ATM柜员机主要是由各个Windows窗口组成,它是由登录页面、选择服务、取款、查询余额、修改密码和退卡等功能。它的各种按钮的事件和功能可以简单的模拟ATM柜员机的要求。系统需求分析 3.1 功能需求分析
本ATM柜员机的主要功能如下所述:
要求使用图形用户界面。当输入给定的卡号和密码(初始卡号为000000和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:
查询余额:初始余额为50000元
ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
ATM存款:不能出现负存款。
修改密码:只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
3.2 其他需求分析
(1)性能描述
实时性好、灵活性强、易于不同年龄阶段的人操作。(2)设计约束
开发工具:JCrator ProV3.5.0 运行环境:Windows 2000以上 能实现用户所定义的各项需求。(3)界面要求
以Windows窗口形式显示,标题栏为ATM柜员机名称,右上角有最小化按钮、最大化按钮、关闭按钮,不同的窗口中有不同的按钮和选择菜单。系统设计 4.1 总体设计
我所设计的ATM柜员机主要是由登录页面模块还由选择服务模块组成,其中选择服务模块又由取款模块、查询余额模块、修改密码模块、退卡模块组成。其功能结构图如下所示:
图1
ATM功能结构示意图
4.2 ATM柜员机界面设计
我觉得一个系统的界面应该要简单明了,当然样式美观就更好了。我设计的界面主要是由窗体组成,操作简单。而每一个窗口则执行相应的功能。
一个系统界面的好坏直接影响到用户的操作,界面设计要求样式美观、简单明了、方便易操作。我设计的界面主要分为窗体、菜单、按钮和文本输入框几个部分,分别执行相应的操作。
(1)窗体的设计
窗体整个框架使用Frame类构造,Frame有自己的外边框和自己的标题,创建Frame时可以指定其窗口标题,我创建的窗口标题是各个不同功能的模块的名字,比如说查询余额,还有取款等。相应源代码为:WindowBox(String s,Account act){super(“ATM柜员机”);}、Selection(String s,Account act){ } 向Frame窗口中添加组件使用add()。例如:button1 = new Button(“存款”);p1.add(button1);this.add(p1);super(s);每个Frame在其右上角都有三个控制图标,分别代表将窗口最小化、窗口最大化和关闭的操作,其中最小化和最大化操作Frame可自动完成,而关闭窗口操作实现需要书写有关的代码,在我的程序中我采用的是对WINDOWS_CLOSING事件做出响应,调用dispose()方法关闭窗口。Frame也可以引发WindowsEvent类代表的窗口事件。相应源代码为:
addWindowListener(new WindowAdapter()//窗口侦听器,以从此窗口接收窗口事件 {public void windowClosing(WindowEvent e)//处理窗口关闭事件
{ System.exit(0);} });}(2)窗体的主要结构的设计
我所设计的窗口的主要结构的特点就是每个窗口都对应着一个特定的功能。比如说报各种各样的错,还有各种查询余额、取款、选择服务等,所以它们都是由各种按钮和文本框,标签组成的,而联系各个窗体成为一个整体的就是各个按钮的监听事件。所以整个设计就趋向简单化了。
为了定义各个按钮所对应的命令和操作,首先需要将各个按钮注册给实现了动作事件的监听接口ActionListener的监听者,然后为监听者定义actionPerformed(ActionEvent e)方法,在这个方法中调用e.getSource()或e.getActionCommand()来判断用户点击的菜单子项,并完成这个菜单子项定义的操作。
4.3 各功能模块设计 4.3.1 登陆页面模块设计
与ATM柜员机打交道比较多的,也是大家对安全比较关心的问题:密码。所以第一个界面就是要输入密码和卡号才能继续服务。
我定义了文本框累的对象tf1,tf2。抓药是用于输入单行的文本;文本区调用public String getText()方法,获取用户想要的字符串。用来判断输入的密码和卡号是否正确,如果不正确的话,则弹出密码或卡号错误的警告框,并用dispose()关掉窗口。此模块相应的部分源代码为:
public void actionPerformed(ActionEvent e){
Account act;String card;
String pwd;
act=new Account(“000000”,“Devil”,“123456”,50000);//初始化
/*选择各种服务*/ if(e.getSource()== button1){
String number1,number2;
number1=tf1.getText();
number2=tf2.getText();/*判断密码和卡号是否正确*/
if((act.get_Code().equals(number1))&&(act.get_Password().equals(number2))){
dispose();
/*卡号和密码都正确则进入功能选择窗口*/
}
Selection s = new Selection(“选择服务”,act);
}else{
}
dispose();
ErrorWarn ew = new ErrorWarn(“消息!”,act);
/*退卡*/ if(e.getSource()==button2){
}
} System.exit(0);dispose();4.3.2 选择服务模块设计
在选择服务模块中,有各种ATM的服务功能,只要用户在该界面中选择按钮,它就会弹出各个相应的界面。每一个按钮都有监听器,在选择了按钮后,java.awt.event中的ActionEvent类创建一个事件对象,并将它传递给方法public void actionPerformed(ActionEvent e)中的参数e,监视器就会知道所发生的事件,对此事件进行处理。其中的部分源代码为:
p.add(new Label(“请选择你要的服务”));
this.add(p);button1 = new Button(“存款”);p1.add(button1);this.add(p1);button2 = new Button(“取款”);
} p2.add(button2);this.add(p2);button3 = new Button(“查询余额”);p3.add(button3);this.add(p3);button4 = new Button(“退出”);p4.add(button4);this.add(p4);button5 = new Button(“修改密码”);p5.add(button5);this.add(p5);this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
});System.exit(0);} button2.addActionListener(this);button3.addActionListener(this);button4.addActionListener(this);button5.addActionListener(this);//setLayout(new GridLayout());setBounds(150,150,200,200);setVisible(true);validate();public void actionPerformed(ActionEvent e){ if(e.getSource()==button2){//取款 dispose();
}
}
} GetBalance gb = new GetBalance(“取款”,act);
if(e.getSource()==button3){//查询余额
} else if(e.getSource()==button4){//退出
} else if(e.getSource()==button5){//修改密码
}
ChangePassword cp = new ChangePassword(“修改密码”,act);dispose();System.exit(0);dispose();Query q =new Query(“查询余额”,act);dispose();4.3.3 取款模块设计
在取款模块中,和其他的界面也是同样的结构。也是有一个文本框和一个按钮还有标签组成的。用户在文本框中输入他想取的数额,但是必须是100的倍数,而且每一次最多只能取5000块。当然了取款的时候也不能超过卡里的余额,再就是卡里的余额不可以为负,否则就会弹出报错的窗口。其方法为:
if(e.getSource()==button){
/*判断余额是否为负*/
if(act.get_Money()<0){
dispose();
ErrorWarn4 ew4 = new ErrorWarn4(“消息!”,act);
}
/*判断取款数额是否小于卡里余额*/ else if(money<=act.get_Money()){
/*取款的数额必须是100的倍数且每次最多只能取5000块*/
if((money%100!=0)||(money>=5000)){
}
act.set_Balance(money);//重新设置卡里的余额 this.setVisible(false);
dispose();
ErrorWarn6 ew6 = new ErrorWarn6(“消息!”,act);
/*取款后就再次进入选择界面*/
}
Selection s = new Selection(“选择服务”,act);
//dispose();
}else if(money>act.get_Money()){
}
dispose();
ErrorWarn5 ew5 = new ErrorWarn5(“消息!”,act);4.3.4 修改密码模块设计
在修改密码模块中,首先你必须要输入你的旧密码是否正确,否则就会报错。再一个就是要两次输入你的新密码,且两次药匹配,否则也会报错,然后再重新回到修改密码的界面。在修改密码时用到的方法为:
/*判断旧密码是是否正确*/ if(pwd2.equals(act.get_Password())){ /*判断两次输入的密码是否匹配*/ if(pwd3.equals(pwd4)){
/*如果都正确的话就设置新密码*/
act.setPassword(pwd3);
dispose();
Selection s = new Selection(“选择”,act);
}else{
dispose();
ErrorWarn2 ew2 = new ErrorWarn2(“消息”,act);
}
}else{
this.setVisible(false);
ErrorWarn3 ew1 = new ErrorWarn3(“消息”,act);
dispose();}
4.3.5 退卡模块设计
在退卡模块设计中,这个方法就更加的简单了,if(e.getSource()==button4){//退出
System.exit(0);
dispose();} 这个方法就可以实现了,这里就不再多说了。
4.4 异常处理情况说明
(1)打开、保存文件时的异常处理 需要处理的异常:IOException(2)数据库访问时的异常处理 需要处理的异常:SQLException(3)加载类时的异常处理
它只是用了需要处理的异常:ClassNotFindException,当应用程序试图使用Class类中的forName方法通过字符串名加载类时,但是没有找到具有指定名称的类的定义。
(4)加载URL时的异常
需要处理的异常:MalformedURLException,抛出这一异常指示出现了错误的 URL。或者在规范字符串中找不到任何合法协议,或者无法分析字符串。系统实现与测试
(1)打开DOS,编译运行程序后,将会看到如下的界面,如图2所示。如果输入的密码或卡号不正确的话就会报右下图的错误。
图2 主界面—登陆页面
(2)选择服务界面效果
当输入的密码和卡号正确,单击确定后就会进入到选择服务的界面,如图3所示。然后就可以选择所需要的服务了。
图3 选择服务界面
(3)取款界面,如图4所示。
图4 取款界面
当输入的钱数不是100的倍数或每一次大于5000时就会报图5的错误。
图5 输入错误1 当取款时如果超过卡里的余额的话就会报图6的错误。
图6 输入错误2(4)查询余额界面,如图7所示。
图7 查询余额界面
经过测试,所有的功能基本上都实现了,而且运行正常。
课程设计总结
6.1 遇到的问题及解决办法
在此次课程设计中,我遇到了一些问题,如:对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于Java语言,只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误,而且要在短时间内用Java语言来设计一个具体的系统是一个较大的挑战;还有对于正规开发一个系统的流程不熟悉,适应起来比较慢,编写各个模块相对应的操作时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。
对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,对于书上以及网站上下载的资料中的Java实例必须有清楚的理解,还有就是多跟精通此方面的老师和同学交流,取其精华。对于实际动手能力与系统开发的流程的适应,必须多进行实际的练习与操作,才能有大的进步。
6.2 心得体会
在这次的学课程设计中,我主要运用了Java语言的界面设计、异常处理、、Awt控件、Swing控件,输入输出流等,综合运用了Java语言。我深刻感受到了面向对象语言中类库的强大功能,掌握了运用Java中的类实现某些基本功能,并学会了自己查询使用类的方法,为以后的面向对象语言的自学奠定了基础。
通过这两个礼拜的课程设计我真的学到了很多的东西,当然这也和我的同学的帮助是离不开的。好了,下面就谈一下我在这些天的体会吧:
在这次的课程设计中,主要是运用JAVA语言来编写一个小的应用程序,当然还可以用其他的技术来辅助了。在这个小应用程序当中,我用了Java外还用了Swing控件。输入输出流等技术。由于以前学的不是很扎实,而且还有些知识我们都是没有学过的,这就要求我们去查相关的书籍,还有就是和同学之间的交流。正因为这样,才锻炼了我的自学的能力,还有就是加深了我对各个知识点的认识,并且提高了我对专业的学习的兴趣,为我以后的学习打下了基础。此外,我还感受到了面向对象语言的类库的强大的功能,掌握了运用JAVA中的类实现某些基本功能,并学会了自己查询使用类的方法,也就是要会用API文档,为以后更好的学习面向对象语言奠定了基础。
通过将近两周的努力,这次课程设计终于结束了,在这个过程当中,我学到了很多的知识,同时也感谢我的同学的帮助和指导。在以后的学习当中,我会更加努力的学习好专业知识,并将所学的知识用于实践当中去,以便牢固掌握知识。
参考文献
[1] 王萌,刘婧,来宾著.JAVA程序设计[M]北京 冶金工业出版社,2004 [2] 黄聪明
精通 JAVA2程序设计[M]北京:清华大学出版社,2004.4 [3] 王文涛,袁海燕 JAVA实用程序设计100例[M]北京:人民邮电出版社,2005.5 [4] 雍俊海 JAVA程序设计[M]北京:清华大学出版社,2006.8 [5] 刘宝林 JAVA程序设计与案例[M]北京:高等教育出版社,2006.11 附录
import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;import java.io.*;
/*登陆页面首窗口*/ class WindowBox extends Frame implements ActionListener{
Box baseBox,box1,box2;TextField tf1,tf2;Button button1;Button button2;WindowBox(String s){//构造方法 super(s);
tf1 = new TextField(6);
tf2 = new TextField(6);
box1= Box.createVerticalBox;box1.add(new Label(“请输入你的卡号”));//输入卡号 box1.add(Box.createVerticalStrut(8));box1.add(new Label(“请输入你的密码”));//输入密码 box2=Box.createVerticalBox();box2.add(tf1);//box2.add(new TextField(16));box2.add(Box.createVerticalStrut(8));box2.add(tf2);//box2.add(new TextField(16));baseBox=Box.createHorizontalBox();baseBox.add(box1);baseBox.add(Box.createHorizontalStrut(10));baseBox.add(box2);add(baseBox);button1= new Button(“确定”);//加入按钮 button1.addActionListener(this);add(button1);
button2 = new Button(“退卡”);//退卡按钮 button2.addActionListener(this);add(button2);setLayout(new FlowLayout());/*监听器*/ this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);
} });} setBounds(120,125,200,175);setVisible(true);public void actionPerformed(ActionEvent e){ Account act;String card;
String pwd;
act=new Account(“000000”,“Devil”,“123456”,50000);//初始化
/*选择各种服务*/ if(e.getSource()== button1){
String number1,number2;//输入的两个卡号和密码的变量
number1=tf1.getText();
number2=tf2.getText();
/*判断两次输入的卡号和密码是否正确*/ if((act.get_Code().equals(number1))&&(act.get_Password().equals(number2))){
dispose();
Selection s = new Selection(“选择服务”,act);
}else{
dispose();
ErrorWarn ew = new ErrorWarn(“消息!”,act);//报输入密码或卡号不正确
}
} if(e.getSource()==button2){
}
System.exit(0);dispose();//退出 } }
/*主函数*/ class ATM{
}
/*选择服务*/ import java.awt.*;import java.awt.event.*;class Selection extends Frame implements ActionListener{
Button button1,button2,button3,button4,button5;Panel p1 = new Panel();Panel p2 = new Panel();Panel p3 = new Panel();Panel p4 = new Panel();Panel p5 = new Panel();Panel p = new Panel();Account act;
public Selection(){} Selection(String s,Account act){
super(s);this.act=act;this.setLayout(null);
public static void main(String [] args){ } new WindowBox(“登录页面”);
this.setLayout(new GridLayout(6,1));p.add(new Label(“请选择你要的服务”));this.add(p);
/*各种服务功能*/
button1 = new Button(“存款”);p1.add(button1);this.add(p1);button2 = new Button(“取款”);p2.add(button2);this.add(p2);button3 = new Button(“查询余额”);p3.add(button3);this.add(p3);button4 = new Button(“退出”);p4.add(button4);this.add(p4);button5 = new Button(“修改密码”);p5.add(button5);this.add(p5);this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
});System.exit(0);} button2.addActionListener(this);button3.addActionListener(this);button4.addActionListener(this);button5.addActionListener(this);
}
} setBounds(150,150,200,200);setVisible(true);validate();public void actionPerformed(ActionEvent e){
} if(e.getSource()==button2){//取款
} if(e.getSource()==button3){//查询余额
} else if(e.getSource()==button4){//退出
} else if(e.getSource()==button5){//修改密码
}
ChangePassword cp = new ChangePassword(“修改密码”,act);dispose();System.exit(0);dispose();Query q =new Query(“查询余额”,act);dispose();dispose();GetBalance gb = new GetBalance(“取款”,act);
/*class Test4{ public static void main(String [] args){
Selection s = new Selection(“选择”);}
}*/ /*取款功能*/ import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;class GetBalance extends Frame implements ActionListener{
Box baseBox, box1,box2;Button button;TextField tf;Account act;GetBalance(String s,Account act){//构造函数
super(s);this.act=act;button=new Button(“确定”);Panel panel = new Panel();Panel panel1 = new Panel();tf = new TextField(6);this.setLayout(new GridLayout(2,1));panel1.add(new Label(“请输入你想取钱的数目”));panel1.add(tf);panel.add(button);this.add(panel1);this.add(panel);button.addActionListener(this);this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){
于5000
}
});
}
System.exit(0);setBounds(200,200,150,150);this.setVisible(true);public void actionPerformed(ActionEvent e){
//System.out.println(e.getActionCommand());double money;
money = Double.parseDouble(tf.getText().trim());if(e.getSource()==button){
if(act.get_Money()<0){//判断余额是否为负
}
dispose();
ErrorWarn4 ew4 = new ErrorWarn4(“消息!”,act);else if(money<=act.get_Money()){//取钱的数额不大于余额 if((money%100!=0)||(money>=5000)){//取钱数为100的倍数或不大
}
dispose();
ErrorWarn6 ew6 = new ErrorWarn6(“消息!”,act);
act.set_Balance(money);//重置余额 this.setVisible(false);
Selection s = new Selection(“选择服务”,act);//返回选择服务窗口
//dispose();}else if(money>act.get_Money()){判断取款数额是否大于余额
} /*
}
}
}
dispose();
ErrorWarn5 ew5 = new ErrorWarn5(“消息!”,act);public static void main(String[] args){
}
/*修改密码功能*/ import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;class ChangePassword extends Frame implements ActionListener{
Panel panel1 = new Panel();Panel panel2 = new Panel();Panel panel3 = new Panel();Panel panel = new Panel();TextField tf4,tf5,tf6;Button button;Account act;ChangePassword(String s,Account act){ super(s);
GetBalance test = new GetBalance(“dfdf”);} GetBalance gb = new GetBalance(“取款”);
this.act=act;
tf4 = new TextField(6);tf5 = new TextField(6);tf6 = new TextField(6);button = new Button(“确定”);button.addActionListener(this);/*建立新密码*/
}
panel1.add(new Label(“请输入你的旧密码:”));panel1.add(tf4);panel2.add(new Label(“请输入你的新密码:”));panel2.add(tf5);panel3.add(new Label(“请再次输入你的新密码”));panel3.add(tf6);panel.add(button);this.add(panel1);this.add(panel2);this.add(panel3);this.add(panel);setLayout(new GridLayout(4,1));setBounds(200,200,250,250);this.setVisible(true);/*窗口事件*/ this.addWindowListener(new WindowAdapter(){
});public void windowClosing(WindowEvent e){
}
System.exit(0);
} } /*判断事件源,看条件是否成立再修改密码*/ public void actionPerformed(ActionEvent e){ if(e.getSource()==button){ String pwd2,pwd3,pwd4;
pwd2 = tf4.getText();
pwd3 = tf5.getText();
pwd4 = tf6.getText();
} if(pwd2.equals(act.get_Password())){//判断旧密码是否正确
if(pwd3.equals(pwd4)){//判断两次输入的新密码是个匹配
act.setPassword(pwd3);//启用新的密码 dispose();Selection s = new Selection(“选择”,act);//返回选择服务窗口
}else{
//this.setVisible(true);
//ErrorWarn2 ew = new ErrorWarn2(“消息”,act);
dispose();}
ErrorWarn2 ew2 = new ErrorWarn2(“消息”,act);}else{
this.setVisible(false);
}
ErrorWarn3 ew1 = new ErrorWarn3(“消息”,act);
dispose();/*查询余额功能*/
import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;class Query extends Frame implements ActionListener{
//Account act;Button button;Account act;Query(String s,Account act){//构造函数
super(s);this.act = act;
button=new Button(“确定”);//TextField tf = new TextField(6);Panel panel1 = new Panel();Panel panel = new Panel();panel1.add(new Label(“你的余额为: ” + act.get_Money()));//查询余额的方法 //panel1.add(tf);
button.addActionListener(this);panel.add(button);this.add(panel);this.add(panel1);this.setLayout(new GridLayout(2,1));this.addWindowListener(new WindowAdapter(){
});public void windowClosing(WindowEvent e){
}
System.exit(0);setBounds(200,200,150,150);
} } setVisible(true);public void actionPerformed(ActionEvent e){
} if(e.getSource()==button){
dispose();Selection s = new Selection(“选择服务”,act);//返回选择服务窗口 } /*账户*/ import java.io.*;
/*该类为实现客户信息及部分功能*/ class Account { private String code
=null;
//信用卡号
private String name
=null;
//客户姓名
private String password=null;
//客户密码
private double money
=0.0;
//卡里金额
/********************/ public Account(String code,String name,String password,double money){
this.code=code;
this.name=name;
this.password=password;
this.money=money;}
public String get_Code(){//取得卡号
return code;}
public String get_Name(){//取得名字
return name;}
public String get_Password(){//取得密码
return password;}
public double get_Money(){//取得余额
return money;}
/*得到剩余的钱的数目*/ protected void set_Balance(double mon){
money-= mon;} /*重置秘密的方法*/ public String setPassword(String pwd){
} } password = pwd;return password;
2.ATM机出现故障不必慌 篇二
除了假钞的问题,ATM机吞卡、取款时扣账不吐钞、存款时吞钞不入账的事件也偶有发生。银行方面解释,以取款时扣账不吐钞为例,ATM机的工作原理是先扣账,后吐钞。在持卡人通过ATM机发出取款指令后,ATM机先向主机查询此卡的密码和账户余额,确认后,主机发送给ATM机可以吐钞的信息。有时会出现ATM机反应时间过长,因超时而不吐钞,但持卡人账户的款已显示被扣,有短信提醒的甚至可以收到扣款提醒。此时持卡人不必紧张,ATM机未能吐钞会向主机发出失败通知,银行会在清算的时候将账户轧平,资金还会回到持卡人的账户上去。
3.银行ATM机业务软件需求分析 篇三
银行ATM机业务软件
需求分析
1.1编写目的
为了使用户和软件开发者双方对该软件的初始规定有一个共同的理解,为了使用户与开发者更好地进行沟通,并在此基础上探索C程序语言的开发途径
和应用方法,使之成为整个开发工作的基础。本需求分析的预期使用用者ATM
系统软件开发有联系的决策人,开发组人员,支持本项目的领导和使用该系统的
用户。
1.2背景
软件名称:银行ATM机业务软件
ATM取款机项目设计小组
西安石油大学户县新校区软件0903行军蚁设计小组
1.3 定义 C语言是国内外广泛使用的一种计算机语言,C语言功能丰富,表达力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,即具有高级语言的优点,又具有低级语言的许多特点。既可以用来编写系统软件,也可以用来编写应用软件。它的语言简洁、紧凑,使用方便、灵活;运算符丰富;数据类型丰富;具有结构化的控制语句;语法限制不太严格,程序实际自由度大。
任务概述
2.1目标
2.1.1 开发意图
ATM取款机现在为大家广泛使用,与人们生活息息相关。本项目主要利用学过的C语言知识来编写一个ATM自动取款机的程序,可以让大家更加深刻的了解ATM的工作原理,同时也让大家对程序设计流程的有了更近一步了解,为以后的找工作积累了经验。
2.1.2 应用目标
本次项目的设计以实用为主,主要应用于银行卡业务,由于银行卡方便快捷,使用户在外游玩工作中避免携带大量纸币带来的不安全隐患,更好的享受生活。
2.1.3 作用范围
使用ATM取款机的人群必须进行电子注册,必须遵守用户许可协议,了解相应的操作流程。
ATM取款机项目设计小组
西安石油大学户县新校区软件0903行军蚁设计小组
2.2用户的特点
本软件的用户主要分为以下两类: 对于ATM使用者:
a)一般的开户持卡人员; b)不要求具备任何专业知识;
c)普通用户使用存款,查询余额,转账,修改密码,查询存取历史明细等功能。
对于维护人员:
a)要求熟练掌握C语言的相关知识;
b)对软件开发的各个过程有所了解,以及各个模块的相互联系要清楚。软件的预期使用频度为频繁。
3需求规定
3.1JPG 查
账户登录
密码错误超过三次即冻结账户。
存款
用户在登入ATM系统后即可自助存款,存入货币面额仅限100元,一次性存入总金额不得超过2000元。
取款
用户在登入ATM系统后即可自助取款,用户输入的取款面金额必须是50元或100元的整数倍数,一次性取款金额不得超过2000元。ATM取款机项目设计小组
西安石油大学户县新校区软件0903行军蚁设计小组
转账
用户在登入ATM系统后即可向其它账户进行转账操作,转账金额无上线。
查询
用户在登入ATM系统后可查询当前账户的余额情况。
卡信息
卡内明细(姓名,卡号码,办理银行卡地点)交易明细
用户在登入ATM系统后即可查询账户历史交易记录等等。
退卡
交易结束,请及时取卡。
3.2对性能的规定
3.2.1精度
取款机的各个按钮要准确映射到取款机的某个键。在主菜单界面中,通过控制相应按钮切换功能,按功能键确认选择。本软件要求用户输入密码用户名为字母数字或下划线,且首位不得为数字。输入密码为6位整数。取款及转账金额为整型数据。户源,目标账户为数据库中存在的用户名,即字母数字或下划线,且首位不得为数字。
3.2.2时间特性要求
a)响应时间:
ATM取款机项目设计小组
西安石油大学户县新校区软件0903行军蚁设计小组
用户插入银行卡后,按系统提示输入相应信息,系统确认完成后,自动进入主菜单界面。在主菜单界面中,如果用户选择修改密码,先输入旧密码,在很短的时间内再输入新密码;如果用户选择了存款,系统在短时间内确认金额,进行交易;如果用户选择了取款,则输入金额后系统在较短时间内弹出纸币;如果用户选择了其他选项(如交易明细查询),要短时间内显示相应的信息。用户交易完毕,则选择退卡,请在三十秒内拿走银行卡,否则后果自负。b)更新处理时间:
在每次用户结束交易后,请系统及时进行信息更新。c)数据转换和传送时间: 用户本次进入系统,要与最近一次的保存进度一致。在进行各项交易中,用户的时间记录要准确,不能有延迟和提前。d)解题时间:
不能出现让用户费解的信息。
3.2.3灵活性
a)操作系统:该软件当遇到非预期输入数据或操作时,会进行报错处理,并要 求用户重新进行输入数据或操作。
b)同其他软件接口的变化:考虑到接口的变化,尽量将代码模块化,多提供一些接口类,提高代码的可移植性。
c)运行环境的变化:由于代码输入到不同的取款机,其虚拟机可能有所不同,所以编写代码时要考虑运行在不同平台上的问题,即代码的平台可移植性。d)计划的变化或改进:项目过程中可能要更改方案,如更换背景,更换按钮风格,或者调整每次系统输出信息的时间等。这些就要依赖于代码的可扩展性,可以不用更改很多代码。
3.3输入输出要求
1)用户名:字母数字或下划线,且首位不得为数字。2)密码:6位整数。
3)取款及转账金额:整型数据。ATM取款机项目设计小组
西安石油大学户县新校区软件0903行军蚁设计小组
4)户源,目标账户:即字母数字或下划线,且首位不得为数字。5)用户需求事务:通过人机交互界面进行选择。
3.4数据管理能力要求
1)该软件需要进行的数据管理主要为用户信息,需要创建一个表,主要记录如用户名,用户密码,用户余额,用户类型,用户开户日期,用户操作记录等。2)进度是记录当前用户所处的环境,如余额的数目,存储的金额,交易明细等。这些可以通过数据库保存。
3.5故障处理要求
软件故障:系统运行过程中可能在输入密码后并无任何提示信息,或者查询详单时无输出信息,内存泄漏等。这些都给用户带来不必要的麻烦,故在程序设计中,代码编写以及测试的时候都要仔细关注这些方面的问题。
硬件故障:某些硬件故障无法解决,应与相关部门及时联系,解决问题。
4运行环境规定
4.1设备
ATM取款机。
4.2支持软件
不需要其他软件支持
4.3接口
外部接口方面:
本软件同外部无软件接口,取款机存在按键与屏幕映射方面的接口。内部接口方面: ATM取款机项目设计小组
西安石油大学户县新校区软件0903行军蚁设计小组
各模块之间存在着内部联系,有些模块之间存在着信息共享的关系。
5.实验开发心得
这次的开发只是主要单纯从界面以及数据库的设计和一些接口效率内容所需要注意。我认为每次设计界面和后台需要比较多的心细以免有错误漏洞的错误,甚至很简单的逻辑也非常容易出错,都需要演练一遍才避免错误。
感谢李静锴给我解答课外疑惑问题
4.atm机状态图 篇四
报告题目:ATM模拟程序
姓名:
学号:2009118246 学院:信息科学与技术学院
专业:计算机科学与技术
一、课程设计目的和内容
目的:课程设计的主要目的是结合面向对象程序设计课程,培养面向对象软件开发的思维,初步了解软件开发的一般流程,提高用JAVA编程的实际动手能力并增强大家对面向对象的了解。
内容:设计ATM取款机主要包括登录页面、选择服务、存款、取款、查询余额、修改密码和退出等功能。注:各种按钮的事件和功能简单模拟ATM取款机的要求。
二、系统需求分析
1、功能需求分析(1)模拟ATM柜员机程序;
(2)修改密码。当用户需要修改密码时,可以用这个功能,新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。(3)取款。用户根据自己需要取多少钱,输入要取的金额,每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。(4)查询余额。用户需要知道自己帐户还剩多少钱时,可以查询自己帐户的余额。
(5)存款。用户可以存款,金额为100的倍数,不能出现负存款。(6)锁机。当用户3次输入密码错误时,停止操作。
2、设计需求分析
A界面设计简洁、友好、美观大方。B操作简单、快捷方便。
C信息分类清晰、准确。3.ATM功能模块图
4、约束条件(1)设计工具
开发工具:NetBeans 运行环境:Windows 7(2)界面要求
以Windows窗口形式显示,标题栏为ATM自动取款机不同的窗口中有不同的按钮和选择菜单。
三、系统设计
1、功能结构模块图
我们所设计的ATM柜员机主要是由登录页面模块还由选择服务模块组成,其中选择服务模块又由取款模块、查询余额模块、修改密码模块、退卡模块组成。其功能结构图如下所示:
2、业务流程图
四、详细设计
1、界面设计概述
我设计的ATM机,主要应用java图形用户界面开发的知识,在netbeans上根据要求来创建窗体,窗体整个框架使用JFrame类构造,JFrame有自己的外边框和自己的标题,创建JFrame时可以指定其窗口标题,在创建窗口时,好多代码是自动生成,我只是在其基础上添加一些约束条件的代码,比如说每次输入的取款金额必须为100的整数,当密码输入三次错误,便锁卡等代码需要自己编写,这里我会主要说明自己编写的那部分代码,也是程序中比较重要的部分,其中有许多Swing组件重复应用,代码相同,在报告中不重复说明,比如说数字“0-9”的代码,“退卡”按钮的代码等。
1、各模块界面设计与程序设计
主模块设计:
主函数中定义了6个静态变量:密码(thePassword),余额(balance),新密码1(password1),新密码2(password2),其中密码为String类型,余额是double型,计数器(counter),用来记密码的输入次数,整型,初始化为0,dataStr是String类型,初始化为空字符串,还定义了FileWriter()和FileReader()方法分别用来写和读ATM在交易中的余额和密码也就是dataStr,使用户的余额和密码变成变化后的值。在主方法中首先要调用一次FileReader()方法,获取余额和密码。程序代码如下:
import java.io.*;public class Atm {
/**
* @param args the command line arguments
*/
static String thePassword;
static double balance;
static int counter = 0;
static String password1;
static String password2;
static String filePath = “./temp.txt”;
static File file = new File(filePath);static String dataStr = “";//写文件
static void FileWriter(){
String dataStr;
try{
if(!file.exists())
file.createNewFile();
dataStr = balance + ”,“ + thePassword + ”,“;
byte[] data = dataStr.getBytes();
FileOutputStream fos = new FileOutputStream(file);
fos.write(data);
fos.close();
}
catch(Exception e){
e.printStackTrace();
}
}
//读文件
static void FileReader(){
try{
if(!file.exists())
file.createNewFile();
byte[] data = new byte[64];
FileInputStream fis = new FileInputStream(file);
int rs = 0;
while((rs = fis.read(data))> 0){
dataStr += new String(data,0,rs);
}
if(!dataStr.isEmpty()){
String[] sets = dataStr.split(”,“);
balance = Double.parseDouble(sets[0]);
thePassword = sets[1];
}
fis.close();
}
catch(Exception e){
e.printStackTrace();
}
}
public static void main(String args[]){
FileReader();//调用读文件
try {
for(javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()){
if(”Nimbus“.equals(info.getName())){
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch(ClassNotFoundException ex){
java.util.logging.Logger.getLogger(AtmWelcome.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch(InstantiationException ex){
java.util.logging.Logger.getLogger(AtmWelcome.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch(IllegalAccessException ex){
java.util.logging.Logger.getLogger(AtmWelcome.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch(javax.swing.UnsupportedLookAndFeelException ex){
java.util.logging.Logger.getLogger(AtmWelcome.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} AtmWelcome aw=new AtmWelcome();aw.setSize(390,290);
aw.setVisible(true);
} }
1)待机界面
这个界面可以说是一个待机界面,点击“插卡”按钮,进入登陆界面,其过程相当于ATM读取磁卡信息的过程,利用了Swing控件中的标签和按钮,在“插卡”按钮添加鼠标点击事件代码如下:
private void jButton1MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmEnter().setVisible(true);//进入登陆界面
this.setVisible(false);}
2)登陆界面
这个登陆界面,用户名和账号在插卡时相当于系统已经读取,所以下面这个界面只是密码验证,输入正确的密码,若正确,则进入主交易界面,若错误则进入密码错误,重新输入,若输入3次错误,则进入锁卡界面,具体界面和程序代码如下所示:
“确定”按钮的鼠标点击事件代码(用户三次输入错误判断程序):
private void jButton11MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
int l=jPasswordField1.getText().length();
if(l==6&&jPasswordField1.getText().equals(Atm.thePassword))
{
new AtmEnterSuccess().setVisible(true);
this.setVisible(false);}
else if(Atm.counter<2)
{new AtmPasswordError().setVisible(true);
this.setVisible(false);
Atm.counter++;
}
else{new AtmLock().setVisible(true);
this.setVisible(false);
}
}
“数字0-9”按钮的鼠标点击事件代码:
public void setNumber(String c){
jPasswordField1.setText(jPasswordField1.getText()+c);
} private void jButton4MouseClicked(java.awt.event.MouseEvent evt){ // TODO add your handling code here:
setNumber(”1“);
}
private void jButton1MouseClicked(java.awt.event.MouseEvent evt){ // TODO add your handling code here:
setNumber(”2“);}
private void jButton5MouseClicked(java.awt.event.MouseEvent evt){ // TODO add your handling code here:
setNumber(”3“);}
private void jButton3MouseClicked(java.awt.event.MouseEvent evt){ // TODO add your handling code here:
setNumber(”4“);}
private void jButton2MouseClicked(java.awt.event.MouseEvent evt){ // TODO add your handling code here:
setNumber(”5“);}
private void jButton6MouseClicked(java.awt.event.MouseEvent evt){ // TODO add your handling code here:
setNumber(”6“);}
private void jButton7MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
setNumber(”7“);}
private void jButton8MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
setNumber(”8“);}
private void jButton9MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
setNumber(”9“);}
private void jButton12MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
setNumber(”0“);}
“退卡”按钮的鼠标点击事件代码:
private void jButton10MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmWelcome().setVisible(true);//返回到待机界面
this.setVisible(false);}
“更正”按钮的鼠标点击事件代码:
private void jButton14MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
int l = jPasswordField1.getText().length();
if(l!= 0)
jPasswordField1.setText(jPasswordField1.getText().substring(0,l-1));}
3)主交易界面
这个界面分别设计了“查询余额”按钮,“取款”按钮,“修改密码”按钮等,点击时分别进入相应的功能界面,具体代码如下所示:“查询余额”按钮的鼠标点击事件代码:
private void jButton1MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmAccountBalance().setVisible(true);//进入显示余额界面
this.setVisible(false);}
“取款”按钮的鼠标点击事件代码:
private void jButton4MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmWithdrawl().setVisible(true);//进入取款界面
this.setVisible(false);}
“存款”的鼠标点击事件代码:
private void jButton3MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmDeposit().setVisible(true);//进入存款界面
this.setVisible(false);}
“修改密码”的鼠标点击事件代码:
private void jButton6MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmPasswordChange().setVisible(true);//进入密码修改界面
this.setVisible(false);}
4)密码错误界面
当在登录界面登陆时,若密码错误则出现密码错误界面,这个界面上点击“继续” 按钮则返回到登陆界面重新输入密码,具体代码如下: “继续”按钮的鼠标点击事件代码:
private void jButton2MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmEnter().setVisible(true);//返回到登陆界面
this.setVisible(false);}
5)锁卡界面
密码输错3次,卡锁,代码见登陆界面的“确定”按钮点击事件代码。6)余额查询界面
点击“继续”则返回到主交易界面,具体的代码如下: 显示余额的代码:
public AtmAccountBalance(){
initComponents();
java.awt.EventQueue.invokeLater(new Runnable(){
public void run(){
setVisible(true);
}
});
jLabel1.setText(”当前余额:“+ Atm.balance);
Atm.FileWriter();} “继续”按钮的鼠标点击代码如下:
private void jButton1MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmEnterSuccess().setVisible(true);//进入主交易界面
this.setVisible(false);}
7)取款界面
取款界面规定单次最多取款5000元,若所取金额在界面上有,则直接点击相应按钮,若没有,则点击“其他面额”按钮,然后输入自己想取得面额,具体事件代码如下:
100,300,500,1000,2000按钮的鼠标点击事件代码如下:
private void jButton1MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
if(Atm.balance>=Double.valueOf(jButton1.getText()))
{
new AtmWithdrawlSuccess().setVisible(true);//进入取款成功界面
this.setVisible(false);
Atm.balance=Atm.balance-Double.valueOf(jButton1.getText());
Atm.FileWriter();}
else{ new AtmBalanceNotEnough().setVisible(true);//进入余额不足界面
this.setVisible(false);
} }
private void jButton3MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
if(Atm.balance>=Double.valueOf(jButton3.getText()))
{
new AtmWithdrawlSuccess().setVisible(true);//进入取款成功界面
this.setVisible(false);
Atm.balance=Atm.balance-Double.valueOf(jButton3.getText());
Atm.FileWriter();}
else{ new AtmBalanceNotEnough().setVisible(true);//进入余额不足界面
this.setVisible(false);
} }
private void jButton5MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here
if(Atm.balance>=Double.valueOf(jButton5.getText()))
{
new AtmWithdrawlSuccess().setVisible(true);//进入取款成功界面
this.setVisible(false);
Atm.balance=Atm.balance-Double.valueOf(jButton5.getText());
Atm.FileWriter();}
else{ new AtmBalanceNotEnough().setVisible(true);//进入余额不足界面
this.setVisible(false);
} }
private void jButton4MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
if(Atm.balance>=Double.valueOf(jButton4.getText()))
{
new AtmWithdrawlSuccess().setVisible(true);//进入取款成功界面
this.setVisible(false);
Atm.balance=Atm.balance-Double.valueOf(jButton4.getText());
Atm.FileWriter();}
else{ new AtmBalanceNotEnough().setVisible(true);//进入余额不足界面
this.setVisible(false);
} }
private void jButton6MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
if(Atm.balance>=Double.valueOf(jButton6.getText()))
{
new AtmWithdrawlSuccess().setVisible(true);//进入取款成功界面
this.setVisible(false);
Atm.balance=Atm.balance-Double.valueOf(jButton6.getText());
Atm.FileWriter();}
else{ new AtmBalanceNotEnough().setVisible(true);//进入余额不足界面
this.setVisible(false);
} }
“其他面额”按钮鼠标点击事件代码:
private void jButton2MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmWithdrawlInput().setVisible(true);//输入取款金额界面
this.setVisible(false);}
“返回”按钮的鼠标点击事件代码:
private void jButton7MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmEnterSuccess().setVisible(true);//返回主交易界面
this.setVisible(false);}
8)取款金额输入界面
这个界面是当用户所想取得金额在界面上没有的时候,便需要用户自己输入,规定输入的金额必须是100的倍数,且不大于5000元,具体事件代码如下所示:(其中按钮0-9的代码,“退卡”按钮等的代码和前面相同)
“确定”按钮的鼠标事件代码:
private void jButton11MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
double a=Double.valueOf(jTextField1.getText());
if(Atm.balance>=a&&a%100==0&&a<=5000.0){
new AtmWithdrawlSuccess().setVisible(true);//取款成功界面
this.setVisible(false);
Atm.balance=Atm.balance-Double.valueOf(jTextFiled1.getText());
Atm.FileWriter();
}
if(a%100!=0||a>5000){
new AtmWithdrawlInputError().setVisible(true);//取款金额输入错误界面
this.setVisible(false);
}
else{
new AtmBalanceNotEnough().setVisible(true);//余额不足
this.setVisible(false);
}
}
“取消”按钮的鼠标事件代码:
private void jButton13MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmEnterSuccess().setVisible(true);//返回到主交易界面
this.setVisible(false);}
9)存款界面
和取款界面类似,具体的代码如下所示: 100,300,500,1000,2000按钮的鼠标事件代码:
private void jButton1MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmDepositSuccess().setVisible(true);//存款成功界面
this.setVisible(false);
Atm.balance=Atm.balance+Double.valueOf(jButton1.getText());
Atm.FileWriter();}
private void jButton3MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmDepositSuccess().setVisible(true);
this.setVisible(false);
Atm.balance=Atm.balance+Double.valueOf(jButton3.getText());
Atm.FileWriter();}
private void jButton5MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmDepositSuccess().setVisible(true);
this.setVisible(false);
Atm.balance=Atm.balance+Double.valueOf(jButton5.getText());
Atm.FileWriter();}
private void jButton4MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmDepositSuccess().setVisible(true);
this.setVisible(false);
Atm.balance=Atm.balance+Double.valueOf(jButton4.getText());
Atm.FileWriter();}
private void jButton6MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmDepositSuccess().setVisible(true);
this.setVisible(false);
Atm.balance=Atm.balance+Double.valueOf(jButton6.getText());
Atm.FileWriter();}
“其他面额”按钮的鼠标事件代码:
private void jButton2MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmDepositInput().setVisible(true);//输入存款金额界面
this.setVisible(false);}
10)输入存款金额界面
和存款界面2类似,具体的事件代码如下: “确定”按钮的鼠标事件点击代码:
private void jButton11MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
String cs=jTextField1.getText();
if(Double.valueOf(cs)%100==0&&Double.valueOf(cs)>0){
new AtmDepositSuccess().setVisible(true);
this.setVisible(false);
Atm.balance=Atm.balance+Double.valueOf(cs);
Atm.FileWriter();}
else{new AtmDepositInputError().setVisible(true);//存款金额输入错误界面
this.setVisible(false);
} }
11)密码修改界面
本来修改密码是要输入原密码的,但我们在使用ATM时,一开始就输入了密码,否则也不能进入修改密码界面,所以在这里直接输入新密码,连续两次输入,且两次输入的密码相同,且6位密码不完全相同,则修改密码成功,否则失败,具体代码如下: “确定”按钮的鼠标事件代码:
private void jButton11MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
String a=jPasswordField1.getText();
Atm.password1=a;
new AtmPasswordInAgain().setVisible(true);//进入密码确认界面
this.setVisible(false);}
“返回”按钮的鼠标事件代码:
private void jButton10MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmEnterSuccess().setVisible(true);
this.setVisible(false);}
12)密码修改确认界面
第二次输入新密码,具体代码如下: “确定”按钮的鼠标事件代码:
private boolean Samechars(String str)//若6位密码相同,则返回false {
if(str.equals(”000000“)==true || str.equals(”111111“)==true || str.equals(”222222“)==true || str.equals(”333333“)==true || str.equals(”444444“)==true || str.equals(”555555“)==true || str.equals(”666666“)==true || str.equals(”777777“)==true || str.equals(”888888“)==true || str.equals(”999999")==true)
return true;
else
return false;}
private void jButton11MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
String b= jPasswordField1.getText();
Atm.password2=b;
int i = jPasswordField1.getText().length();
if(i== 6 && Atm.password1.equals(b)&& Samechars(b)==false)
{
Atm.thePassword = b;
Atm.FileWriter();
new AtmPasswordChangeSuccess().setVisible(true);//进入修改成功界面
this.setVisible(false);
}
else
{ new AtmPasswordUnsucc().setVisible(true);//进入失败界面
this.setVisible(false);}
} 13)密码修改成功界面
当两次输入的密码相同,则弹出密码修改成功界面,点击“继续”按钮返回到主交易界面,退出系统则点击“退卡”按钮。代码略。14)密码修改失败界面
点击“确定”按钮,则返回到修改密码界面,若放弃修改点击“退卡”按钮,若还想进行其他交易,则点击“确定”后,再点击修改密码界面的“返回”按钮。
“确定”按钮的鼠标点击事件代码:
private void jButton2MouseClicked(java.awt.event.MouseEvent evt){
// TODO add your handling code here:
new AtmPasswordChange().setVisible(true);//返回到密码修改界面
this.setVisible(false);}
15)存款成功界面
点击“继续”则返回到主交易界面,“退出”则退出交易。16)存款失败界面
当所存金额不是100的整数时,则存款失败,同样点击“返回”按钮则返回到主交易界面,点击“退卡”则退出交易。17)取款成功界面
当索取金额不大于5000,且是100的整数,当前余额不小于索取金额时,则取款成功。
18)取款失败界面(余额不足)
当输入的金额大于当前余额,输入的金额不大于5000且是100的倍数,则弹出余额不足界面。19)取款失败界面(输入金额错误)
当输入的金额不是100的倍数且大于5000时,出现此界面。
五、参考文献
《Java应用案例教程》张红梅,姜晓刚等著
清华大学出版社
六、心得体会
在这次的期中课程设计中,我主要运用了Java语言的图形用户界面设计、异常处理、Swing控件,输入输出流等,综合运用了Java语言。我深刻感受到了面向对象语言中类库的强大功能,掌握了运用Java中的类实现某些基本功能,在完成设计的同时培养了自己的编程思维,为以后做别的设计打下基础。
刚开始做ATM机课程设计的时候,我简直一点头绪也没有,我想着自己编程一直都那么差,怎么可能完成这么难的设计,但是这是期中考试设计,肯定得交啊,所以我不得不图书馆借书看,边看边做,在做的过程中,我才知道java不只是写代码,还有许多其他的功能,我发现我对专业课不像以前那么的排斥了,还有感觉通过自己查询相关书籍去实践以及和同学交流获取的知识更巩固,我不再那么讨厌编程了,我觉得无论什么事情,只要自己愿意去尝试,并且尽自己最大努力去做,总会有所收获的。本来一直认为这门专业对女生来说学起来很吃力,很困难,但是现在又有了信心,差的人可以付出更多的努
【atm机状态图】推荐阅读:
学习不在状态,高中生该如何进入学习状态?10-13
党员精神状态方面07-19
生活状态杂文随笔08-04
失地农民生存状态08-09
高效率学习状态06-21
高三学生备考状态问卷07-27
中国水产市场发展状态08-30
安全生产状态报告11-10
幼儿园教师工作状态09-21
幸福是能力不是状态的散文09-24