ATM柜台机模拟说明书.docx
《ATM柜台机模拟说明书.docx》由会员分享,可在线阅读,更多相关《ATM柜台机模拟说明书.docx(23页珍藏版)》请在冰豆网上搜索。
ATM柜台机模拟说明书
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2015年秋季学期
Java课程设计
题目:
ATM柜员机模拟
专业班级:
计算机科学与技术三班
姓名:
陈华
学号:
13240326
指导教师:
张永
成绩:
目录
摘要1
序言2
第一章系统需求分析3
1.1系统功能分析3
1.2总体设计3
第二章详细设计5
2.1各功能模块设计5
2.2选择服务模块设计6
2.3取款模块设计9
2.4修改密码模块设计11
2.5存款模块设计13
第三章系统测试16
3.1测试方案16
3.2测试用例16
3.3测试结果16
3.4软件的可靠行分析22
第四章软件使用说明书23
4.1系统界面23
4.2选择服务界面23
4.3存款界面24
4.4取款界面24
4.5查询余额界面25
4.6修改密码界面25
课程设计总结27
参考文献28
致谢29
摘要
我设计的ATM柜员机主要是由各个Windows窗口组成,它是由登录页面、选择服务、取款、查询余额、修改密码和退卡等功能。
它的各种按钮的事件和功能可以简单的模拟ATM柜员机的要求。
关键字:
Awt控件;Swing控件;输入输出流。
序言
在此次课程设计中,我遇到了一些问题,如:
对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于Java语言,只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误,而且要在短时间内用Java语言来设计一个具体的系统是一个较大的挑战;还有对于正规开发一个系统的流程不熟悉,适应起来比较慢,编写各个模块相对应的操作时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。
对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,对于书上以及网站上下载的资料中的Java实例必须有清楚的理解,还有就是多跟精通此方面的老师和同学交流,取其精华。
对于实际动手能力与系统开发的流程的适应,必须多进行实际的练习与操作,才能有大的进步。
第一章系统需求分析
1.1系统功能分析
本ATM柜员机的主要功能如下所述:
要求使用图形用户界面。
当输入给定的卡号和密码(初始卡号为000000和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:
●查询余额:
初始余额为50000元
●ATM取款:
每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
●ATM存款:
不能出现负存款。
●修改密码:
只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
1.2总体设计
我觉得一个系统的界面应该要简单明了,当然样式美观就更好了。
我设计的界面主要是由窗体组成,操作简单。
而每一个窗口则执行相应的功能。
一个系统界面的好坏直接影响到用户的操作,界面设计要求样式美观、简单明了、方便易操作。
我设计的界面主要分为窗体、菜单、按钮和文本输入框几个部分,分别执行相应的操作。
我所设计的窗口的主要结构的特点就是每个窗口都对应着一个特定的功能。
比如说报各种各样的错,还有各种查询余额、取款、选择服务等,所以它们都是由各种按钮和文本框,标签组成的,而联系各个窗体成为一个整体的就是各个按钮的监听事件。
所以整个设计就趋向简单化了。
为了定义各个按钮所对应的命令和操作,首先需要将各个按钮注册给实现了动作事件的监听接口ActionListener的监听者,然后为监听者定义actionPerformed(ActionEvente)方法,在这个方法中调用e.getSource()或e.getActionCommand()来判断用户点击的菜单子项,并完成这个菜单子项定义的操作。
我所设计的ATM柜员机主要是由登录页面模块还由选择服务模块组成,其中选择服务模块又由取款模块、查询余额模块、修改密码模块、退卡模块组成。
其功能结构图如下所示:
图1.功能结构图
第二章详细设计
2.1各功能模块设计
我定义了文本框类的对象tf1,tf2。
主要是用于输入单行的文本;文本区调用publicStringgetText()方法,获取用户想要的字符串。
用来判断输入的密码和卡号是否正确,如果不正确的话,则弹出密码或卡号错误的警告框,并用dispose()关掉窗口。
此模块相应的部分源代码为:
publicvoidactionPerformed(ActionEvente){
Accountact;
Stringcard;
Stringpwd;
act=newAccount("123456","Devil","123456",50000);//初始化
/*选择各种服务*/
if(e.getSource()==button1){
Stringnumber1,number2;
number1=tf1.getText();
number2=tf2.getText();
/*判断密码和卡号是否正确*/if((act.get_Code().equals(number1))&&(act.get_Password().equals(number2))){
dispose();
/*卡号和密码都正确则进入功能选择窗口*/
Selections=newSelection("选择服务",act);
}else{
dispose();
javax.swing.JOptionPane.showMessageDialog(null,"密码或卡号错误,请重新输入!
");
WindowBoxwb=newWindowBox("登录界面");
}
}
/*退卡*/
if(e.getSource()==button2){
System.exit(0);
dispose();
}
}
2.2选择服务模块设计
在选择服务模块中,有各种ATM的服务功能,只要用户在该界面中选择按钮,它就会弹出各个相应的界面。
每一个按钮都有监听器,在选择了按钮后,java.awt.event中的ActionEvent类创建一个事件对象,并将它传递给方法publicvoidactionPerformed(ActionEvente)中的参数e,监视器就会知道所发生的事件,对此事件进行处理。
其中的部分源代码为:
classSelectionextendsFrameimplementsActionListener{
Buttonbutton1,button2,button3,button4,button5;
Panelp1=newPanel();
Panelp2=newPanel();
Panelp3=newPanel();
Panelp4=newPanel();
Panelp5=newPanel();
Panelp=newPanel();
Accountact;
publicSelection(){}
Selection(Strings,Accountact){
super(s);
this.act=act;
this.setLayout(null);
this.setLayout(newGridLayout(6,1));
p.add(newLabel("请选择您需要的服务"));
this.add(p);
/*各种服务功能*/
button1=newButton("存款");
p1.add(button1);
this.add(p1);
button2=newButton("取款");
p2.add(button2);
this.add(p2);
button3=newButton("查询余额");
p3.add(button3);
this.add(p3);
button4=newButton("退出");
p4.add(button4);
this.add(p4);
button5=newButton("修改密码");
p5.add(button5);
this.add(p5);
this.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
button4.addActionListener(this);
button5.addActionListener(this);
setBounds(150,150,200,200);
setVisible(true);
validate();
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==button2){//取款
dispose();
GetBalancegb=newGetBalance("取款",act);
}
if(e.getSource()==button3){//查询余额
Queryq=newQuery("查询余额",act);
dispose();
}
elseif(e.getSource()==button4){//退出
System.exit(0);
dispose();
}
elseif(e.getSource()==button5){//修改密码
ChangePasswordcp=newChangePassword("修改密码",act);
dispose();
}
if(e.getSource()==button1){
dispose();
Savemoneysm=newSavemoney("存款",act);
}
}
2.3取款模块设计
在取款模块中,和其他的界面也是同样的结构。
也是有一个文本框和一个按钮还有标签组成的。
能超过卡里的余额,再就是卡里的余额不可以为负,否则就会弹出报错的窗口。
其方法为:
classGetBalanceextendsFrameimplementsActionListener{
BoxbaseBox,box1,box2;
Buttonbutton;
TextFieldtf;
Accountact;
Framef6;
GetBalance(Strings,Accountact){//构造函数
super(s);
this.act=act;
button=newButton("确定");
Panelpanel=newPanel();
Panelpanel1=newPanel();
tf=newTextField(6);
this.setLayout(newGridLayout(2,1));
panel1.add(newLabel("请输入你想取钱的数目"));
panel1.add(tf);
panel.add(button);
this.add(panel1);
this.add(panel);
button.addActionListener(this);
this.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
setBounds(200,200,150,150);
this.setVisible(true);
}
publicvoidactionPerformed(ActionEvente){
//System.out.println(e.getActionCommand());
doublemoney;
money=Double.parseDouble(tf.getText().trim());
if(e.getSource()==button){
if(moneyif((money%100!
=0)||(money>=5000)){
dispose();
javax.swing.JOptionPane.showMessageDialog(null,"取钱数不为100的倍数或大于5000!
");
Selections=newSelection("选择服务",act);
}
else{
dispose();
javax.swing.JOptionPane.showMessageDialog(null,"取款成功!
");
Selections=newSelection("选择服务",act);
act.set_Balance(money);//
}
}
else{
dispose();
javax.swing.JOptionPane.showMessageDialog(null,"余额不足!
");
Selections=newSelection("选择服务",act);
}
}
}
}
2.4修改密码模块设计
在修改密码模块中,首先你必须要输入你的旧密码是否正确,否则就会报错。
再一个就是要两次输入你的新密码,且两次药匹配,否则也会报错,然后再重新回到修改密码的界面。
在修改密码时用到的方法为:
classChangePasswordextendsFrameimplementsActionListener{
Panelpanel1=newPanel();
Panelpanel2=newPanel();
Panelpanel3=newPanel();
Panelpanel=newPanel();
TextFieldtf4,tf5,tf6;
Buttonbutton;
Accountact;
ChangePassword(Strings,Accountact){
super(s);
this.act=act;
tf4=newTextField(6);
tf5=newTextField(6);
tf6=newTextField(6);
button=newButton("确定");
button.addActionListener(this);
/*建立新密码*/
panel1.add(newLabel("请输入你的旧密码:
"));
panel1.add(tf4);
panel2.add(newLabel("请输入你的新密码:
"));
panel2.add(tf5);
panel3.add(newLabel("请再次输入你的新密码"));
panel3.add(tf6);
panel.add(button);
this.add(panel1);
this.add(panel2);
this.add(panel3);
this.add(panel);
setLayout(newGridLayout(4,1));
setBounds(200,200,250,250);
this.setVisible(true);
/*窗口事件*/
this.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
}
/*判断事件源,看条件是否成立再修改密码*/
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==button){
Stringpwd2,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();
javax.swing.JOptionPane.showMessageDialog(null,"密码已修改,请重新登录!
");
WindowBoxlo=newWindowBox("登录界面");
}
else{
dispose();
javax.swing.JOptionPane.showMessageDialog(null,"两次输入新密码不一致!
");
ChangePasswordcp=newChangePassword("修改密码",act);
}
}
else{
dispose();
javax.swing.JOptionPane.showMessageDialog(null,"旧密码不正确!
");
ChangePasswordcp=newChangePassword("修改密码",act);
}
}
}
}
2.5存款模块设计
在存款模块中,和其他的界面也是同样的结构。
也是有一个文本框和一个按钮还有标签组成的。
存款的数目不能是负数,否则就会弹出报错的窗口。
其方法为:
publicclassSavemoneyextendsFrameimplementsActionListener{
BoxbaseBox,box1,box2;
Buttonbutton;
TextFieldtf;
Accountact;
Savemoney(Strings,Accountact){//构造函数
super(s);
this.act=act;
button=newButton("确定");
Panelpanel=newPanel();
Panelpanel1=newPanel();
tf=newTextField(6);
this.setLayout(newGridLayout(2,1));
panel1.add(newLabel("请输入你想存钱的数目"));
panel1.add(tf);
panel.add(button);
this.add(panel1);
this.add(panel);
button.addActionListener(this);
this.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
setBounds(200,200,150,150);
this.setVisible(true);
}
publicvoidactionPerformed(ActionEvente){
doublemoney;
money=Double.parseDouble(tf.getText().trim());
if(money<0)
{
if(e.getSource()==button)
{
javax.swing.JOptionPane.showMessageDialog(null,"存款不能为负,请重新输入!
");
}
}
else
{
if(e.getSource()==button)
act.add_Balance(money);//重置余额
this.setVisible(false);
javax.swing.JOptionPane.showMessageDialog(null,"存款成功!
");
Selections=newSelection("选择服务",act);
}
}
}
第三章系统测试
3.1测试方案
1.打开系统,输入卡号密码;
2.点击存款,输入要存的钱数;
3.点击取款,输入要取得钱数;
4.点击查询余额,即可查询剩余钱数;
5.点击修改密码,输入旧密码与新密码修改密码;
3.2测试用例
进入系统,输入卡号123456,密码123456,点击确定进入,输入错误提示。
点击存款,输入500,点击查询,此时账户有1500元。
存入-2000,提示错误。
点击取款,输入500,成功后查询余额剩余1000,取款50000,提示余额不足,取款150,提示取款数不为10的倍数或大于5000!
取款6000提示取款数不为10倍数或大于5000!
返回主界面,点击修改密码,输入旧密码123456后点击确定弹出旧密码不正确!
输入新密码123456后,在重复输入时输入123456点击确定提示两次输入新密码不一致!
完全输入正确后点击确定,弹出密码已修改,请重新登录!
3.3测试结果
1.打开系统
图1.系统登录界面
输入卡号123456,密码000000点击确定,弹出密码或卡号错误,请重新输入。
图2.输入卡号密码
图3.输入错误
输入卡号123456,密码123456点击确定进入系统。
图4.重新输