ATM柜员机模拟程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ATM柜员机模拟系统
目录
1.设计目的 (2)
2.功能介绍 (2)
3.概要设计 (2)
3.1 需求分析 (2)
3.2 自定义类说明 (2)
3.3 界面设计思想 (3)
3.4 方法定义说明 (3)
4.详细设计 (3)
4.1程序流程图 (3)
4.2登陆界面设计 (4)
具体实现过程 (4)
关键代码设计 (5)
5.设计心得与体会 (25)
1·设计目的
使用图形用户界面。

当输入给定的卡号和密码(初始卡号和初始密码)时,系统能登录ATM柜员机系统
2·功能介绍
(1)查询余额:初始余额为10000元
(2)ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。

(3)ATM存款:不能出现负存款。

(4)修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。

3·概要设计
3.1 需求分析
使用ATM机可以节约人力资源,方便用户进行简单常用操作,并且可以为用户提供全天候的服务,提高银行效率。

3.2 自定义类说明
a:Guest类定义客户类,该类主要提供用户的各种操作提供定义变量 b:DENGRU类为主类,主要有按钮、文本框,组合框,标签,在组合中选择账号,在密码的文本框中输入各个账号所对应的密码,单击登录按钮可以进入选择界面,如果密码错误,就会弹出对话框,提示“密码错误,拒绝登录”。

c:KQ类为选择界面模块,在选择模块服务中,有各种ATM的服务功能,只要在用户该界面中选择按钮,它会弹出各个相应的界面。

d:Zdqk类为取款类,在取款模块中,用户在文本框中输入它想取的数
额,但必须是100的倍数,否则会弹出报错窗口,而且每一次最多只能去5000快,否则会弹出报错窗口,当然取款时不能超过卡里的余额没卡里的余额不可以为负数,否则会弹出报错的窗口。

e:Zdck类为自动存款类,用户在文本框中输入它想存入的数额,单击确定,就可以存入,如果输错了或者是不想存了,可以单击取消,退出的选择界面。

f:Cxye类为查询余额类,查询余额的界面主要有文本框,标签,按钮,主要功能是在上一级选择菜单中选择查询余额,就会弹出查询余额的这个对话框。

g:Xgmm类为修改密码类,主要功能是先在输入原始密码的文本框中输入原来的密码,然后在输入要修改的密码的文本框中输入新密码,新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。

3.3 界面设计思想
图形化界面设计
3.4 方法定义说明
通过DENGRU这个类登入KQ类的界面选择各种操作。

4·详细设计
4.1程序流程图
4.2登陆界面设计
具体实现过程
DENGRU类继承JFrame类,有账号选项和输入密码的文本框,在输入密码后登入按钮登入,如果密码错误弹出提示,按要求修改后可重新登入。

之后进入KQ类定义的ATM机界面,选择不同的选项进入不同操作,在进行各种操作是有
错误时可根据弹出的对话框进行修改。

关键代码设计
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
class Guest // 定义客户类
{
String zh; //定义账号
String pswf; //定义密码
double jine; //定义金额
public Guest(){} //构造Guest
public Guest(String zh,String pswf,double jine) {
this.zh=zh; //带入顶层容器,账号,密码,金额
this.pswf=pswf;
this.jine=jine;
}
String getzh() //定义成员变量账号
{
return zh; //成员方法
}
double setMima(double pswf)//定义成员变量密码
{
return pswf;//成员方法
}
double getJine()//定义成员变量金额
{
return jine;//定义成员方法
}
void cunkuan(double money)//定义成员变量存款
{
jine=jine+money; //定义成员方法
}
void quqian(double money)//定义成员变量取款
{
jine=jine-money; //定义成员方法
}
String xiugaim(String mi)//定义成员变量密码
{
pswf = mi; //定义成员方法
return pswf;
}
}
public class DENGRU extends JFrame implements ActionListener //
导入接口类
{
JPanel p1,p2,p3;
JLabel l1,l2,l3,l4;
JPasswordField pswf;
JButton jb1,jb2,jb3;
JTextField jtf1;
JComboBox jc1;
ImageIcon myimage;
Container content;
Guest[] g=new Guest[4];
public DENGRU() {
g[0]=new Guest("chengchao","199101",10000);帐号,密码,钱数
g[1]=new Guest("baijing","199102",10000);
g[2]=new Guest("gaolingling","199103",10000);
g[3]=new Guest("zhaofengying","199104",10000);
p1 = new JPanel(); myimage = new
ImageIcon("yl1.jpg"); l1 = new JLabel(myimage); 的上面
p1.add(l1);
p2 = new JPanel(); l2 = new
JLabel("卡号:");
jc1 = new JComboBox();
jc1.addItem( "chengchao" );
jc1.addItem("baijing");
jc1.addItem("zhaofengying");
jc1.addItem("gaolingling");
jc1.setSelectedIndex( 0 );
jc1.setEditable(true); l3=new
JLabel("密码:"); pswf=new
JPasswordField(12); l4 = new JLabel("如果没有账
号请注册不能登录"); /*jb3 = new JButton("");
p2.add(l2);
p2.add(jc1);
p2.add(l3);
p2.add(pswf);
p2.add(l4);
/*p2.add(jb3);*/
p3 = new JPanel(); //定义第三个面板
jb1 = new JButton("登录"); //定义按钮登录jb1
jb1.addActionListener(this); //jb1申请监听
jb2 = new JButton("注销"); //定义按钮注销jb2
jb2.addActionListener(this); //jb2申请监听
p3.add(jb1); //把它们添加到p3面板里
p3.add(jb2);
content = this.getContentPane(); //布局定义
content.setLayout(new BorderLayout());
content.add(p1,BorderLayout.NORTH); //定义顶部为面板p1
content.add(p2,BorderLayout.CENTER); //定义中部为面板p2
content.add(p3,BorderLayout.SOUTH); //定义底部为面板
p3
this.pack();
this.setTitle("ATM 柜员机"); //定义为窗口名称
this.setSize(600,300); // 定义窗口的大小
this.setResizable(false);
this.show(); //显示
this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );// 关闭、
退出
this.validate();
}
public void actionPerformed(ActionEvent e ) //监听类
{String x= jc1.getSelectedItem().toString(); //把jc1的值强制转换
成字符
if(e.getSource()==jb1) //如果点击是jb1按钮就进
入For
{
for(int i=0;i<4;i++) //判断名字在数组的位

if(x.equals(g[i].zh)) //检查到开始判断是否
匹配
{
if(pswf.getText().equals(g[i].pswf)) //名字匹配成功后判断密
码是否成功
{
new KQ(g[i]); //密码真确后进入KQ的界面
setVisible( false);
}
else
{
JOptionPane.showMessageDialog( this,"密码错误,拒绝登陆"); //密码错误弹出提示密码错误
}
}
}
else
System.exit(0); //注销事件退出
}
public static void main(String args[]) //定义的MAIN,才能进入。

{
new DENGRU();
}
}
class KQ extends JFrame implements ActionListener //导入接口类
{
JPanel p1,p2,p3; //定义3个面板
JLabel l1; //定义1个标签
JButton jb1,jb2,jb3,jb4,jb5; //定义5个按钮
ImageIcon myimage; //定义导入图片
Container content; //定义一个容器
Guest key; //定义客户类传从参数key
public KQ(Guest key)
{
this.key =key; //把key传到顶层容器
p1 = new JPanel(); //定义第一个面板
myimage = new ImageIcon("yl1.jpg"); //定义填入的图片
l1 = new JLabel(myimage); //定义把图片放在标签的上面
p1.add(l1);
p2 = new JPanel(); //定义第二个面板
jb1 = new JButton("ATM取款"); //定义jb1按钮ATM取款
jb1.addActionListener(this); //jb1申请监听
jb2 = new JButton("ATM存款"); //定义jb2按钮ATM存款
jb2.addActionListener(this); //jb2申请监听
jb3 = new JButton("查询余额 "); //定义jb3按钮查询余额
jb3.addActionListener(this); //jb3申请监听
jb4 = new JButton("修改密码"); //定义jb4按钮修改密码
jb4.addActionListener(this); //jb4申请监听
p2.add(jb1);
p2.add(jb2);
p2.add(jb3);
p2.add(jb4);
p3 = new JPanel(); //定义第三个面板
jb5 = new JButton("退出"); //定义jb5按钮退出
jb5.addActionListener( //定义一个匿名类
new ActionListener()
{
public void actionPerformed( ActionEvent event )
{
System.exit(0); //退出登陆
}
}
);
p3.add(jb5);
content = this.getContentPane(); //布局定义
content.setLayout(new BorderLayout());
content.add(p1,BorderLayout.NORTH); //定义顶部为面板p1
content.add(p2,BorderLayout.CENTER); //定义中部为面板p2
content.add(p3,BorderLayout.SOUTH); //定义底部为面板p3
this.pack();
this.setTitle("进入界面"); //定义为窗口名称this.setSize(400,300); // 定义窗口的大小 this.setResizable(false);
this.show();
}
public void actionPerformed ( ActionEvent event ) //接口监听
{
if (event.getSource()==jb4 ) //判断是否是jb4
{
new Xgmm(key); //进入Xgmm
setVisible(false);
}
if (event.getSource()==jb1 ) //判断是否是jb1
{
new Zdqk(key); //进入Zdqk setVisible(false);
}
if (event.getSource()==jb2 ) //判断是否是jb2
{
new Zdck(key); //进入Zdck
setVisible( false);
}
if (event.getSource()==jb3 ) //判断是否是jb3
{
new Cxye(key); //进入Cxye
setVisible( false);
}
}
}
class Zdck extends JFrame implements ActionListener //导入接口类
{
JPanel p1,p2,p3; //定义3个面板JLabel l1; //定义1个标签
JButton jb1,jb2; //定义2个按钮
JTextField jtf1; //定义一个文本框ImageIcon myimage; //定义导入图片
Container content; //定义一个容器
Guest key; //定义客户类传从参数key
public Zdck(Guest key){
this.key=key; //把key传到顶层容器 p1=new JPanel(); //定义第一个面板
myimage = new ImageIcon("yl1.jpg"); //定义填入的图片
l1 = new JLabel(myimage); //定义把图片放在标签的上面
p1.add(l1);
p2=new JPanel(); //定义第二个面板
l1=new JLabel("请输入您要存入的金额:"); //定义一个标签请输入您要存入的金额:
jtf1 = new JTextField(10); //定义一个文本框
p2.add(l1);
p2.add(jtf1);
p3=new JPanel(); //定义第三个面板
jb1=new JButton("确定"); //定义一个按钮确定 jb1.addActionListener(this); //jb1申请一个监听
jb2=new JButton("返回"); //定义一个按钮返回 jb2.addActionListener( //定义一个匿名类监听
new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
KQActionPerformed(event);
}
}
);
p3.add(jb1);
p3.add(jb2);
content=this.getContentPane(); //布局定义
content.setLayout(new BorderLayout());
content.add(p2,BorderLayout.NORTH); //定义顶部为面板p1 content.add(p2,BorderLayout.CENTER); //定义中部为面板
p2
content.add(p3,BorderLayout.SOUTH); //定义底部为面板
p3
this.pack();
this.setTitle("自动存款"); //定义为窗口名称
this.setSize(320,300); // 定义窗口的大小
this.setResizable(false);
this.show(); //显示
}
public void actionPerformed (ActionEvent e) //接口监听类
{
if(e.getSource()==jb1) //判断是是否是jb1
{
double money = Double.parseDouble(jtf1.getText());// 把
money转成Double
JOptionPane.showMessageDialog(this,"成功存款
"+jtf1.getText()+"元!");//一个提示框填出你成功存了多少
key.cunkuan(money); //把存的钱传回客户

jtf1.setText("0");
return;
}
}
public void KQActionPerformed ( ActionEvent event ) //匿名类监听
过程
{
if (event.getSource()==jb2 ) //判断要是
jb2
{
new KQ(key); //返回KQ界面
setVisible( false);
}
}
}
class Zdqk extends JFrame implements ActionListener //导入接口类
{
JPanel p1,p2,p3; //定义3个面板
JLabel l1; //定义1个标签
JButton jb1,jb2; //定义2个按钮
JTextField jtf1; //定义一个文本框ImageIcon myimage; //定义导入图片
Container content; //定义一个容器
Guest key; //定义客户类传从参数key
public Zdqk(Guest key){
this.key=key; //把key传到顶层容器
p1=new JPanel(); //定义第一个面板
myimage = new ImageIcon("yl1.jpg"); //定义填入的图片 l1 = new JLabel(myimage); //定义把图片放在标签的上面
p1.add(l1);
p2=new JPanel(); //定义第二个面板
l1=new JLabel("请输入您要取的金额:"); //定义一个标签请输入您要取的金额:
jtf1 = new JTextField(10); //定义一个文本框
p2.add(l1);
p2.add(jtf1);
p3=new JPanel(); //定义第三个面板
jb1=new JButton("确定"); //定义一个按钮确定 jb1.addActionListener(this); //jb1申请一个监听 jb2=new JButton("返回"); //定义一个按钮返回 jb2.addActionListener(this); //jb1申请一个监听 p3.add(jb1);
p3.add(jb2);
content=this.getContentPane(); //布局定义
content.setLayout(new BorderLayout());
content.add(p1,BorderLayout.NORTH); //定义顶部为面板p1 content.add(p2,BorderLayout.CENTER); //定义中部为面板p2 content.add(p3,BorderLayout.SOUTH); //定义底部为面板p3 this.pack();
this.setTitle("自动取款"); //定义为窗口名称
this.setSize(320,300); // 定义窗口的大小 this.setResizable(false);
this.show();
}
public void actionPerformed (ActionEvent e) //接口监听类
{
if(e.getSource()==jb1) //判断是是否是jb1
{if((Double.parseDouble(jtf1.getText()))%100==0&&(Double.parseDouble( jtf1.getText()))<=5000&&(Double.parseDouble(jtf1.getText()))!=0)
{
double money = Double.parseDouble(jtf1.getText());// 把money转成Double
if(money<key.jine)
{
JOptionPane.showMessageDialog(this,"成功取款"+jtf1.getText()+"元!");//一个提示框填出你成功取了多少
key.quqian(money); //把存的钱传回客户类
jtf1.setText("0");
return;
}
else
{
JOptionPane.showMessageDialog(this,"你的卡即将要已透支");//一个提示框提示你你的卡即将要已透支
}
}
else
{
JOptionPane.showMessageDialog(this,"取款额必须为100的正整数倍且单次数额5000");
}
}
if (e.getSource()==jb2 )//判断是是否是jb2
{
new KQ(key); //放回KQ
setVisible( false);
}
}
}
class Cxye extends JFrame implements ActionListener //导入接口类
{
JPanel p1,p2,p3; //定义3个面板JLabel l1; //定义1个标签JButton jb1; //定义3个按钮ImageIcon myimage; //定义导入图片Container content; //定义一个容器Guest key; //定义客户类传从参数key
public Cxye(Guest key){
this.key=key; //把key传到顶层容器
p1=new JPanel(); //定义第一个面板 myimage = new ImageIcon("yl1.jpg"); //定义填入的图片 l1 = new JLabel(myimage); //定义把图片放在标签的上面
p1.add(l1);
p2=new JPanel(); //定义第二个面板 l1=new JLabel("您的剩余金额为:"+ key.getJine());
p2.add(l1);
p3=new JPanel(); //定义第三个面板 jb1=new JButton("返回");
jb1.addActionListener(this);
p3.add(jb1);
content=this.getContentPane(); //布局定义
content.setLayout(new BorderLayout());
content.add(p1,BorderLayout.NORTH); //定义顶部为面板p1
content.add(p2,BorderLayout.CENTER); //定义中部为面板p2
content.add(p3,BorderLayout.SOUTH); //定义底部为面板p3
this.pack();
this.setTitle("查询余额"); //定义为窗口名称
this.setSize(320,300); // 定义窗口的大小
this.setResizable(false);
this.show();
}
public void actionPerformed ( ActionEvent e ) //接口监听类
{
if (e.getSource()==jb1 ) //判断是否是jb1
{
new KQ(key); //放回KQ
setVisible( false);
}
}
}
class Xgmm extends JFrame implements ActionListener //导入接口类{
JPanel p1,p2,p3; //定义3个面板JLabel l1, l2, l3, l4; //定义4个标签JTextField jtf1,jtf2,jtf3; //定义3个文本框JButton jb1,jb2; //定义2个按钮ImageIcon myimage; //定义导入图片Container content; //定义一个容器Guest key; //定义客户类传从参数key
public Xgmm(Guest key)
{
this.key=key; //把key传到顶层容器
p1 = new JPanel(); //定义第一个面板
myimage = new ImageIcon("yl1.jpg"); //定义填入的图片
l1 = new JLabel(myimage); //定义把图片放在标签的上面
p1.add(l1)
p2=new JPanel(); //定义第二个面板
l2=new JLabel("请输入原始密码:"); //定义标签请输入原始密码:
l3=new JLabel("输入要修改的密码:"); //定义标签输入要修改的密码
l4=new JLabel("确认输入的新密码:"); //定义标签确认输入的新密码:
jtf1=new JTextField(15); //定义文本框jtf1
jtf2=new JTextField(15); //定义文本框jtf2
jtf3=new JTextField(15); //定义文本框jtf3
p2.add(l2);
p2.add(jtf1);
p2.add(l3);
p2.add(jtf2);
p2.add(l4);
p2.add(jtf3);
p3=new JPanel(); //定义第三个面板
jb1 = new JButton("确定"); //定义按钮jb1 确定
jb1.addActionListener(this); //jb1申请监听 jb2 = new JButton("放回登录"); //定义按钮jb2 放回登录
jb2.addActionListener(this); //jb2申请监听
p3.add(jb1);
p3.add(jb2);
content = this.getContentPane(); //布局定义
content.setLayout(new BorderLayout());
content.add(p1,BorderLayout.NORTH); //定义顶部为面板p1
content.add(p2,BorderLayout.CENTER); //定义中部为面板p2
content.add(p3,BorderLayout.SOUTH); //定义底部为面板p3
this.pack();
this.setTitle("修改密码"); //定义为窗口名称 this.setSize(400,350); // 定义窗口的大小
this.setResizable(false);
this.show(); //显示
}
public void actionPerformed(ActionEvent e) //接口监听类
{
if(e.getSource()==jb1) //判断是否是jb1 { char a[]=jtf2.getText().toCharArray();
int i;
for( i=1;i<jtf2.getText().length();i++)
{
if(a[0]!=a[i]) break;
}if(i>=jtf2.getText().length()) {jtf2.setText("");
jtf3.setText("");
JOptionPane.showMessageDialog( this,"数字不能完全相同!");return;}
if(jtf1.getText().equals(key.pswf))//判断是否是你输入的pswf正确
{if(Double.parseDouble(jtf2.getText())>=100000)
{if
(jtf2.getText().equals(jtf3.getText()))//判断是否是jtf2和jtf3相等不
{key.xiugaim(jtf2.getText()); //把改的密码传回Guest类中
JOptionPane.showMessageDialog( this,"修改成功!"); //定义一个提示框成功
jtf1.setText("");
jtf2.setText("");
jtf3.setText("");
}
else
{jtf2.setText("");jtf3.setText("");
JOptionPane.showMessageDialog( this,"两次输入密码不相符,请确认后重新输入!");//定义一个提示栏不成功
}}
else
{JOptionPane.showMessageDialog( this,"新密码必须是六位及六位以上的数字组合");}
}
else
{
JOptionPane.showMessageDialog( this,"密码输入错误,请确认后重新输入!");//定义一个提示栏原密码错误
jtf1.setText("");
jtf2.setText("");
jtf3.setText("");}
}
if(e.getSource()==jb2) //判断是是否是jb2
{
new DENGRU(); //返回DENGRU
setVisible( false);
}
}
}
3、运行结果截图
A:ATM柜员机界面设计
B:进入界面
C:自动取款界面
D:自动存款
E:查询余额界面
F:修改密码
5·设计心得与体会
通过这次课程设计,加深了对java知识的理解与掌握,感受到了java语言的简洁与直观,系统的学习了java的编程方法,也学会了使用myeclipse 9,配养了对java的兴趣。

2013/6/17。

相关文档
最新文档