实验报告模拟ATM.docx
- 文档编号:18075690
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:42
- 大小:248.03KB
实验报告模拟ATM.docx
《实验报告模拟ATM.docx》由会员分享,可在线阅读,更多相关《实验报告模拟ATM.docx(42页珍藏版)》请在冰豆网上搜索。
实验报告模拟ATM
面向对象实训报告
题目:
模拟ATM机
组长:
杨新萍
成员:
郑苗
成员:
韩勇
成员:
齐雨霏
成员:
贾然
成员:
高凡
指导教师:
张燕
2014年5月20日
一、课程设计题目:
模拟ATM
1)程序允许建立10个账户。
2)弹出要建立帐户还是查询账户信息的界面。
用户选择自己所需的服务。
3)如果要建立帐户,弹出一个界面要求用户输入用户名和密码以及确认密码(两次输入密码均不可以显示在屏幕中)。
两次输入密码如果不相同,返回错误信息,再次要求输入用户名密码,直到用户选择该界面的退出键或者成功建立帐户为止,返回到2)的界面。
4)如果查询用户信息,弹出输入帐户名和密码界面。
如果该账户名和密码都注册成功过,进入个人账户的菜单,该菜单有存钱、取钱、查余额、退出等项目。
要求存钱、取钱弹出输入金额的菜单,并能判断是否有足够余额可以取。
如果查询余额,弹出显示余额的菜单。
如果退出,返回2)界面。
二、问题定义
设计ATM取款机主要包括登陆页面,选择服务,存款,取款,查询余额,修改密码和退出等功能。
三、需求分析
1、功能需求分析
(1)模拟ATM机程序主界面
(2)建立帐户
用户输入自己的用户名及密码,再输入一次密码以确认密码,直至成功建立帐户。
(3)取钱
用户根据自己需要取多少钱,输入要取的金额,系统判断是否有足够金额可以取出。
每次取款金额为系统界面显示的数字,或者用户自定义输入要取出的数目。
金额要求为100的倍数。
总额不超过5000元,支取金额不允许透支。
(4)存钱
用户可以存款,金额要求为100的倍数。
查询余额。
(5)查余额
用户需要查询账户内余额时,可以查询自己帐户的余额。
(6)修改密码
用户可以根据自己的意愿修改密码
(7)退出
用户无需再进行任何业务时,选择退出系统即退出系统。
2、设计需求分析
A.界面设计简洁。
B.操作简单。
C.信息分类简单明了,准确。
3、ATM功能模块图
4、Java类和自定义类的层次关系
MF类、denlu类、qukuan类、cunkuan类、chaxun类和gaimi类都继承了Java类的JFrame类
5、流程图
四、算法设计
1、概要设计
(1)ClassAccount主类
(2)ClassMF主界面类
(3)ClassZC注册类
(4)Classdenlu登录类
(5)Classqukuan取款类
(6)Classcunkuan存款类
(7)Classchaxun查余额类
(8)Classgaimi改密码类
2、详细设计
(1)ClassAccount
创建客户,初始化客户信息功能以及保存客户信息,例如:
用户名、密码、原有余额、取款后卡里的余额以及存款后卡里的余额。
此类中包含的成员有:
成员变量code,mima,money和构造方法Account(),获得用户名方法get_Code(),获得用户密码方法get_Mima(),获得用户账户的金额方法get_Money(),设置取款后的账户余额方法set_Balance(),设置存款后的账户余额方法reccount(),设置修改密码的方法gaimi()。
(2)ClassMF
实现登录的界面,如果用户名和密码匹配就可以登录到主界面否则报错。
它的成员有:
P1,P2,L1,L2,L3,password,B1,B2,TF1,content,a[]和构造方法MF和事件监听方法actionPerformed()。
(3)ClassZC
实现新用户注册界面,注册过程中出现错误对象相应的错误提示。
注册成功后进入服务界面。
它的成员有:
p1,p2,p3,p4,p5,b1,l1,l2,l3,l4,password,password2,content,v,j和构造方法ZC和事件监听方法actionPerformed()。
(4)Classdenlu
实现功能的主界面,它的成员有:
p2,p3,p4,b1,b2,b3,b4,b5,b6,l1,content,key和构造方法denlu和事件监听方法actionPerformed()。
(5)Classqukuan
实现取款的界面,如果每次取款金额不为100的倍数,总额少于余额或超过5000元,则报错。
它的成员有:
P1,P2,L1,B1,B2,TF1,content,key和构造方法qukuan和事件监听方法actionPerformed()。
(6)Classcunkuan
实现存款的界面,如果输入存款数为负款则报错。
它的成员有:
P1,P2,L1,B1,B2,TF1,content,key和构造方法cunkuan和事件监听方法actionPerformed()。
(7)Classchaxun
实现查询余额的界面,它的成员有:
P1,P2,L1,B1,content,key和构造方法cunkuan和事件监听方法actionPerformed()。
(8)Classgaimi
实现改密码的界面,它的成员有:
P1,P2,P3,P4,L1,L2,L3,TF1,TF2,TF3,B1,B2,content,key和构造方法cunkuan和事件监听方法actionPerformed()。
除Account类之外,其他的类均实现ActionListener接口。
五、算法实现
importjavax.swing.*;
importjavax.swing.event.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
importjava.util.*;
publicclassAccount
{
staticStringcode=null;//用户名
staticStringmima=null;//用户密码
staticintmoney=0;//账户金额
publicAccount(Stringcode,Stringmima,intmoney)//构造函数
{
this.code=code;
this.mima=mima;
this.money=money;
}
protectedStringget_Code()//获取用户名
{
returncode;
}
protectedStringget_mima()//获得用户密码
{
returnmima;
}
publicintget_Money()//获得账户金额
{
returnmoney;
}
protectedvoidset_Balance(doublemon)//设置取款后的账户余额
{
money-=mon;
}
publicvoidreccount(doublemon)//设置存款后的账户余额
{
money+=mon;
}
Stringgaimima(Stringmi)//修改密码方法
{
mima=mi;
returnmima;
}
}
/*主界面*/
classMFextendsJFrameimplementsActionListener//主界面导入接口类
{
JTextFieldt1;//文本域
JLabell1,l2,l3,l4;//标签
JButtonb1,b2,b3;//按钮
JPasswordFieldpassword;//密码域输出的东西为"*"
JPanelp1,p2,p3,p31,p32;//面板
Account[]a=newAccount[10];//可以设置的账户为10个
intv;
publicstaticvoidmain(Stringargs[])
{
newMF();
}
publicMF()
{
intv=1;
this.setSize(500,300);
password=newJPasswordField(12);
t1=newJTextField(10);
l1=newJLabel("用户");
l2=newJLabel("密码");
l3=newJLabel("未注册用户请注册");
l4=newJLabel("欢迎使用ATM");
b1=newJButton("注册");
b2=newJButton("确定");
b3=newJButton("取消");
b1.addActionListener(this);//B1申请监听
b2.addActionListener(this);//B2申请监听
QXqx=newQX(t1,password);
b3.addActionListener(qx);//B3申请监听
setLayout(newGridLayout(3,1));//布局管理--设置布局为GridLayout(网格式的布局管理器)---3行1列
p1=newJPanel();//面板p1
p2=newJPanel();//面板p2
p3=newJPanel();//面板p3
this.add(p1);
this.add(p2);
this.add(p3);
p3.setLayout(newGridLayout(1,2));//布局管理--设置布局为GridLayout(网格式的布局管理器)---1行3列
p31=newJPanel();//面板p31
p32=newJPanel();//面板p32
p3.add(p31);
p3.add(p32);
p1.add(l4);
p2.add(l1);
p2.add(t1);
p2.add(l2);
p2.add(password);
p2.add(l3);
p2.add(b1);
p31.add(b2);
p32.add(b3);
p1.setBackground(Color.white);//p1背景颜色是白色
p2.setBackground(Color.white);//p2背景颜色是白色
p31.setBackground(Color.white);//p31背景颜色是白色
p32.setBackground(Color.white);//p32背景颜色是白色
this.addWindowListener(newMyWindowMonitor());
this.setVisible(true);//setVisible显示
}
publicvoidactionPerformed(ActionEvente)//监听类
{
if(e.getSource()==b1)//判断是否是b1
{
newZC(v,a);//进入qukuan
setVisible(false);
}
if(e.getSource()==b2)//判断是否是b1
{
Stringx=t1.getText();//把TF1的值强制转换成字符
for(intj=0;j { if(x.equals(a[j].code))//检查到开始判断是否匹配 { for(inti=1;i<=3;i++)//利用for循环来判断错误密码输入次数 { if(password.getText().equals(a[i].mima))//名字匹配成功后判断密码是否成功 { newdenlu(a[i]);//密码输入正确后进入denlu的界面 setVisible(true); } else { JOptionPane.showMessageDialog(null,"对不起密码错误"+"\n您还有"+(3-i)+"次机会,否则将会吞卡! ");//密码错误弹出提示密码错误框 } break; } } } } } } classMyWindowMonitorimplementsWindowListener//窗口监听 { publicvoidwindowActivated(WindowEvente) {} publicvoidwindowClosed(WindowEvente) {} publicvoidwindowClosing(WindowEvente) { System.exit(-1); } publicvoidwindowDeactivated(WindowEvente) {} publicvoidwindowDeiconified(WindowEvente) {} publicvoidwindowIconified(WindowEvente) {} publicvoidwindowOpened(WindowEvente) {} } /*注册界面*/ classZCextendsJFrameimplementsActionListener { JPanelp1,p2,p3,p4,p5;//新建五个面板 JButtonb1;//新建一个按钮 JLabell1,l2,l3,l4;//新建四个标签 JTextFieldt1;//新建一个文本域 JPasswordFieldpassword,password2;//新建两个密码域 Containercontent; intv,j; Accounta[];//a是数组 publicZC(intv,Accounta[]) { this.v=v; this.a=a; p1=newJPanel(); l1=newJLabel("用户注册"); p1.add(l1); p2=newJPanel(); l2=newJLabel("姓名"); t1=newJTextField(10); p2.add(l2); p2.add(t1); p3=newJPanel(); l3=newJLabel("密码"); password=newJPasswordField(12); p3.add(l3); p3.add(password); p4=newJPanel(); l4=newJLabel("再次输入密码"); password2=newJPasswordField(20); p4.add(l4); p4.add(password2); p5=newJPanel(); b1=newJButton("确定"); b1.addActionListener(this); p5.add(b1); p1.setBackground(Color.white); p2.setBackground(Color.white); p3.setBackground(Color.white); p4.setBackground(Color.white); p5.setBackground(Color.white); content=this.getContentPane();//布局定义 content.setLayout(newGridLayout(5,1)); content.add(p1); content.add(p2); content.add(p3); content.add(p4); content.add(p5); this.pack(); this.setLocation(100,100); this.setTitle("用户注册"); this.setSize(500,300); this.setResizable(false); this.show(); } publicvoidactionPerformed(ActionEventevent)//接口监听 { Stringx=t1.getText(); if(x.equals("")){ JOptionPane.showMessageDialog(null,"用户名为空,请重新命名","Message",JOptionPane.INFORMATION_MESSAGE); } elseif(password.getText().equals("")) {JOptionPane.showMessageDialog(null,"密码输入为空,请输入密码","Message",JOptionPane.INFORMATION_MESSAGE);} elseif(password2.getText().equals("")) {JOptionPane.showMessageDialog(null,"再次密码输入为空,请输入密码","Message",JOptionPane.INFORMATION_MESSAGE);} elseif(! (password.getText().equals(password2.getText()))) { JOptionPane.showMessageDialog(null,"两次密码输入不一样,请重新输入","Message",JOptionPane.INFORMATION_MESSAGE); password.setText(""); password2.setText(""); } else { a[v]=newAccount(null,null,0); a[v].code=x; a[v].mima=password.getText(); a[v].money=0; JOptionPane.showMessageDialog(null,"注册成功"); newdenlu(a[j]); setVisible(false); } } } /*取消*/ classQXimplementsActionListener { JTextFieldn1; JPasswordFieldn2; publicQX(JTextFieldn1,JPasswordFieldn2) { this.n1=n1; this.n2=n2; } publicvoidactionPerformed(ActionEvente) { n1.setText(""); n2.setText(""); } } /*登陆后界面*/ classdenluextendsJFrameimplementsActionListener//导入接口类 { JPanelp2,p3,p4;//新建三个面板 JButtonb1,b2,b3,b4,b5,b6;//新建六个按钮 JLabell1;//新建一个标签 Containercontent; Accountkey;//定义客户类传从参数key publicdenlu(Accountkey) { this.key=key;//把key传到顶层容器 p2=newJPanel(); l1=newJLabel("欢迎进入用户界面"); p2.add(l1); p3=newJPanel(); b1=newJButton("取款"); b1.addActionListener(this);//b1申请监听 b2=newJButton("存款"); b2.addActionListener(this);//b2申请监听 b3=newJButton("查询余额"); b3.addActionListener(this);//b3申请监听 b4=newJButton("修改密码"); b4.addActionListener(this);//b4申请监听 p3.add(b1); p3.add(b2); p3.add(b3); p3.add(b4); p4=newJPanel(); b5=newJButton("退出"); b6=newJButton("返回登录"); b5.addActionListener(//定义一个匿名类 newActionListener() { publicvoidactionPerformed(ActionEventevent) { System.exit(0);//退出登陆 } }); b6.addActionListener(this);//b6申请监听 p4.add(b5); p4.add(b6); p2.setBackground(Color.w
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 模拟 ATM