java课程设计ATM柜员机模拟程序.docx
《java课程设计ATM柜员机模拟程序.docx》由会员分享,可在线阅读,更多相关《java课程设计ATM柜员机模拟程序.docx(42页珍藏版)》请在冰豆网上搜索。
java课程设计ATM柜员机模拟程序
课程设计(大作业)报告
课程名称:
面向对象程序设计课程设计
设计题目:
ATM柜员机模拟程序
院系:
信息技术学院
班级:
设计者:
学号:
指导教师:
设计时间:
2016-1-4-2016-1-8
信息技术学院
昆明学院课程设计(大作业)任务书
姓名:
院(系):
信息技术学院
专业:
计算机科学与技术学号:
任务起止日期:
2016-1-4-2016-1-8
课程设计题目:
设计一个ATM柜员机模拟程序,实现系统登录、余额查询、ATM取款、ATM存款、修改密码等一些ATM柜员机的基本功能,模拟ATM的工作原理和人机交互。
课程设计要求:
使用图形用户界面。
当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:
1、查询余额:
初始余额为10000元
2、ATM取款:
每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
3、ATM存款:
不能出现负存款。
4、修改密码:
新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
工作计划及安排:
1月4号,老师布置任务、讲授设计内容。
1月5号,查阅资料,进行初步设想并画出流程图。
1月6号,详细设计,创建各个类、编写程序代码。
1月7号,测试,对程序进行调试、运行并进行相应的分析。
1月8号,书写课程设计报告,验收、考核及答辩。
指导教师签字
年月日
课程设计(大作业)成绩
学号:
姓名:
指导教师:
课程设计题目:
设计一个ATM柜员机模拟程序,实现系统登录、余额查询、ATM取款、ATM存款、修改密码等一些ATM柜员机的基本功能,模拟ATM的工作原理和人机交互。
总结:
通过为时一周的课程设计,我受益匪浅,把平时所学的知识通通运用了进来,虽然平时积淀的知识点比较少、比较单一,但是在这次实验中把零零碎碎的知识都连贯起来了,也达到了课程设计的目的,最主要的是通过一周的努力我终于用面向对象程序设计的知识做出了这个“ATM柜员机模拟系统”。
由于知识的积淀比较少,且有些知识掌握不太牢靠,记忆模模糊糊的,最后决定恶补一下落下的知识点再进行程序的设计。
第一天,去图书馆借了相关图书,把知识点打牢,然后参考了相似的的几个实例,并进行了一些分析和总结。
基础功课做好以后第二天正式开工,选定好了题目,进行方法选择、框架设计、画出流程图、UML图,进行了初步的程序设计构想。
第三天,编写程序代码,这个过程我觉得是最艰难的,因为代码太多,还有API接口不是很熟悉,所以要经常翻阅手册,花费了很多时间。
程序一不小心就会出错不能运行,还需要认真检查,细心细心加细心才能做好。
反复的进行分析调试,最后一天把程序调试通过后,进行课程设计报告的撰写。
虽然很幸苦但是,最终的成果还是令人满意的,最后感谢指导老师对我们帮助和支持。
指导教师评语:
成绩:
填表时间:
指导教师签名:
课程设计(大作业)报告
一、题目分析
1.系统需求分析
(1)设计目标:
随着市场经济的繁荣发展,人们的物质生活得到极大的提高,手中的剩余资金也日益增多。
受传统观念影响,绝大多数人喜欢把资金投进银行,而在需要使用现金的时候再到银行提取现金。
这就导致银行业务的急剧增加。
虽然银行网点越来越多,银行的工作效率也随着信息化有较明显的增长,但是依旧不能满足广大用户的需要。
而一味的增加营业网点,从理论上虽然能稍微的缓解银行的压力,但是治标不治本,而且每增加一个网点,不仅要付出昂贵的资金成本,还需要长期投入人力资本,成本非常之昂贵。
这时候就迫切的需要一种自动的,易于普及的,低成本的设备来解决这一问题。
于是ATM机系统应运而生了。
自动柜员机,即ATM,是指银行在不同地点设置一种小型机器,利用一张信用卡大小的胶卡上的磁带记录客户的基本户口资料(通常就是银行卡),让客户可以透过机器进行提款、存款、转账等银行柜台服务,大多数客户都把这种自助机器称为自动提款机。
本文正是通过设计一个ATM模拟模拟程序来实现ATM机系统的基本功能,充分运用自己所学的Java知识进行设计编程。
(2)题目设计要求:
本ATM柜员机的主要功能如下所述:
要求使用图形用户界面。
当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:
●查询余额:
初始余额为10000元。
●ATM取款:
每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
●ATM存款:
不能出现负存款。
●修改密码:
新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
2.ATM模拟系统总体设计结构
(1)设计思想:
通过程序要求,我们可以清楚的知道本次设计的ATM柜员模拟程序需要实现四大功能,即查询余额、取款、存款、修改密码。
初次之外,作为ATM系统,还需要最基本的两大功能,即登陆和退出。
根据上述的功能分析,我们可以把整个ATM系统分为登陆模块、查询模块、取款模块、存款模块、修改密码模块。
除此之外,还有在登陆系统后的功能选择模块,退出功能则镶嵌在各个需要的模块中。
由于各个模块的功能实现是通过界面显示出来的,则程序设计又可以理解为几大界面的设计:
登陆界面、主界面、查询余额界面、取款界面、存款界面、修改密码界面。
除了几大界面之外,还有系统的初始化,主要是初始卡号、密码的设定等。
在程序的大体框架确定之后,我们需要了解各个模块所要实现和需要具有的功能。
根据现有的银行ATM系统,我们可以很快就可以了解本次设计的ATM系统应该具有的操作。
a.登陆界面
用户输入正确的账号和密码就可以登录到该系统的主界面中去,进行相应的操作:
取款、存款、查询、修改密码。
b.主界面
主界面包括查询、存款、取款、修改密码、退出的功能按钮,按下相应的按钮,可以进行相应的操作。
c.查询界面
在主界面中按下查询按钮可以进行查询操作。
通过查询功能我们可以查询账户的余额,在查询过程中我们可以选择取款的业务,除此之外,查询界面之中还有返回和退出的操作。
返回的操作会使用户回到主界面,退出的操作会使用户直接回到登陆界面。
d.取款界面
取款界面既可以通过主界面进入,也可以通过查询、存款等操作过程中的界面进入。
取款功能在对话框中输入你想要取出的金额,但是次金额不可以比账户的余额大,且必须是100的整数倍,取款完毕,会弹出是否显示余额的提示,选“是”的话就会进入查询界面,选“否”的话,则回到主界面。
e.存款界面
在主界面按下存款按钮可以进行存款操作,在对话中输入你需要存入的金额,所输入的数字也要是100的整数倍,而且不可以是负数。
存款完毕,会弹出是否显示余额的提示,选“是”的话就会进入查询界面,选“否”的话,则回到主界面。
f.修改密码
选择修改密码按钮可以进行修改密码房,但是要先输入就密码正确并且两次输入新密码一致才可以修改密码。
修改完成后,会返回主界面。
(2)ATM柜员机总体流程图,如图图1
图1
(3)ATM柜员机模拟模拟系统UML图,如图图2
图2
3.系统开发及运行环境
软件平台:
Eclipse,jdk全套软件,editpuls编辑器
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。
Eclipse是著名的跨平台的自由集成开发环境(IDE)。
最初主要用来Java语言开发,通过安装不同的插件Eclipse可以支持不同的计算机语言,比如C++和Python等开发工具。
Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。
许多软件开发商以Eclipse为框架开发自己的IDE。
图3
二、各模块分析与实现
1.系统各模块介绍
代码中出现的Account类、MainFrame类、Load类、Take类、Input类、Setpew类和Display类都继承了Java类JFrame。
(1)账户创建模块
ClassAccout创建客户,初始化客户信息功能以及保存客户信息,例如:
卡号、密码、原有余额、取款后卡里的余额以及存款后卡里的余额。
此类包含的成员有:
成员变量account、count、password和方法构造方法Account()。
实现了账户信息的初始化工作,设置默认账户信息,账号:
123456,密码:
123456。
以便后续测试登陆时作为进入ATM模拟系统的信息凭证。
创建账户关键代码:
classAccount{
privateintcount=10000;//初始账户余额10000
privateStringaccount="123456";//初始账号
privateStringpassword="123456";//初始密码
publicAccount(){//账户函数
}
publicvoidsetpw(Stringpassword){//设置密码
this.password=password;
}
publicvoiddeccount(intmoney){//deccount取款
count-=money;//取款后再原来基础上减所取部分
}
publicvoidreccount(intmoney){//reccount存款
count+=money;//存款后在原来基础上加所存部分
}
(2)主界面构造模块
ClassMainFrame构造主界面,提供业务选择,让用户可以在这个界面选择存款、取款、查询余额、修改密码。
它包含的成员有:
构造方法MainFrame()和初始化主界面的方法initComponents()以及成员变量checked、cunkuan、quite、qukuan、reset。
实现的功能主要为主界面的初始化,主界面的布局管理,设置好查询、存款、取款、退出、返回的操作按钮。
关键代码:
classMainFrameextendsJFrame{//主框架方法由JFrame继承而来
publicJButtonchecked;//检测
publicJButtoncunkuan;//存款
publicJButtonquit;//退出
publicJButtonqukuan;//取款
publicJButtonreset;//重设
//框架按钮参数
publicMainFrame(){//主框架函数
initComponents();//添加组件
this.setLocationRelativeTo(null);//设置窗口相对于指定组件的位置
this.setVisible(false);//隐藏其他窗口
}
(3)登陆模块
ClassLoad实现登录功能和登录界面,如果用户名和密码匹配就可以登录到主界面否则报错。
它的成员有:
Jpassword、accountnum、committ、JL1、JL2和构造方法Load()和初始化方法initComponents()。
关键代码:
classLoadextendsJFrame{
publicJPasswordFieldJpassword;
publicJTextFieldaccountnum;//
publicJButtoncommit;//增删
privateJLabeljL1;//设置对齐
privateJLabeljL2;
publicLoad(){
initComponents();//初始化添加组件的和添加监听器
this.setLocationRelativeTo(null);//使窗口至于屏幕中央
this.setVisible(true);
}
(4)取款模块
ClassTake实现取款功能,按返回键返回主界面,按清除键可以删除输入数字,并且取出的金额必须是100的整数倍,一次取出的金额不能超过5000,取完款后可以显示余额。
该类的成员有:
back、clear、commit、quite、JL1、JT1和构造方法Take()和初始化的initComponents()。
关键代码:
classTakeextendsJFrame{
publicJButtonback;
publicJButtonclear;
publicJButtoncommit;
privateJLabeljL1;
publicJTextFieldjT1;
publicJButtonquit;
Stringstr="";
publicTake(){
initComponents();
this.setLocationRelativeTo(null);
this.setVisible(false);
}
(5)存款模块
Classinput实现存款功能,存款的金额必须是100的整数倍,否则报错提示重新输入。
成员有:
clear、commit、jL1、jT1、str以及构造函数Inputhe()和初始化方法initComponents()。
关键代码:
classInputextendsJFrame{
privateJButtonclear;
privateJButtoncommit;
privateJLabeljL1;
privateJTextFieldjT1;
Stringstr="";
publicInput(){
initComponents();
this.setLocationRelativeTo(null);
this.setResizable(false);
this.setVisible(false);
}
(6)显示余额模块
ClassDisplay功能为显示当前余额,在显示余额时JTextField的内容不可以编辑,成员有:
成员变量back、jL1、quit、qukuan和构造方法Display()和方法数set(Stringstr)和初始化的方法initComponents()。
关键代码:
classDisplayextendsJFrame{
publicJButtonback;
privateJLabeljL1;
publicJTextFieldjT1;
publicJButtonquit;
publicJButtonqukuan;
publicDisplay(){
initComponents();
jT1.setText(String.valueOf(myaccount.get()));
this.setLocationRelativeTo(null);
this.setVisible(false);
}
(7)修改密码模块
classSetpw创建此类是为了实现修改密码的功能,设置的密码必须是六位以上的字符,并且所设置的密码不能是同一个字符组成,否则报错。
成员有:
成员变量commit、commitpw、jPwcommit、jPwnew、jPwold、newpw、oldpw、quit和构造方法Setpw()和初始化方法initComponents()。
关键代码:
classSetpwextendsJFrame{
publicJButtoncommit;
publicJLabelcommitpw;
publicJPasswordFieldjPwcommit;
publicJPasswordFieldjPwnew;
publicJPasswordFieldjPwold;
publicJLabelnewpw;
publicJLabeloldpw;
publicJButtonquit;
publicSetpw(){
initComponents();
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setVisible(false);
}
2.事件监听组件介绍
(1)MainFrame类的监听模块
在该类中设置了五个监听器,监听鼠标单击按钮,分别监听退出quit.addActionListener(newActionListener()、修改密码reset.addActionListener(newActionListener()、查询checked.addActionListener(newActionListener()、取款cunkuan.addActionListener(newActionListener()、存款qukuan.addActionListener(newActionListener()等按钮的事件。
(2)Load类的监模块
commit.addActionListener(newjava.awt.event.ActionListener()
在该类中只有一个监听器,监听鼠标单击“确定”按钮时的事件。
(3)Take类的监听模块
在该类中设置了四个监听器,同样是监听鼠标单击按钮事件,分别监听“清除”clear.addActionListener(newActionListener()、“退出”quit.addActionListener(newActionListener()、“返回”back.addActionListener(newActionListener()、“确定”commit.addActionListener(newActionListener()按钮的事件。
(4)input类的监模块
在这个类中共设置了两个监听器,它们也是监听鼠标单击按钮事件。
它们监听“清除”clear.addActionListener(newActionListener()、“确定”commit.addActionListener(newActionListener()按钮事件。
(5)display类的监听模块
在display中设置了三个监听器,都属于监听鼠标单击按钮事件,分别监听“退出”quit.addActionListener(newActionListener()、“返回”back.addActionListener(newActionListener()、“取款”qukuan.addActionListener(newjava.awt.event.ActionListener()按钮事件。
(6)Setpw类的监听模块
在这个类中设置了两个监听器,它们是监听鼠标单击按钮事件,分别监听“确定”commit.addActionListener(newActionListener()、“退出”quit.addActionListener(newActionListener()按钮事件。
三、系统调试分析
1.登陆界面
打开MyEcplise,编译运行程序后,将会看到如图3所示的欢迎界面。
点击确定之后,会进入如图4所示的登陆界面。
图3欢迎登陆页面
图4登陆界面
进入到登陆界面后,需要输入账号和密码,当账号和密码正确时,才会进入到主界面。
账号和密码不符合时,会进入如图4所示的错误提示界面。
初始账号和密码为“123456”。
图5登陆出错提示界面
2.账号密码登陆
当输入的密码和卡号正确,单击确定后就会进入到主界面,选择服务,如图6所示,点击相应的按钮就可以选择所需要的服务了,点击“退出”会回到登陆界面。
图6主界面
3.存款
点击存款,进入存款界面,如图7所示。
图7存款界面
当输入的钱数不是100的倍数时,就会弹出如图7所示的错误提示界面。
输入正确时,进入如图9所示的界面。
选“是”的话,会进入查询余额界面,查看存款操作是否成功;选“否”的话,会回到主界面。
图8存款出错提示界面
图9操作完成后的选择界面
4.取款
点击取款按钮,进入取款界面,如图10所示。
当输入的钱数是负数,或者是0,或者不是100的倍数,又或者大于5000时,会弹出如图11所示的出错提示界面。
当输入的钱数符合要求时,会弹出如同存款操作一样的选择界面,如图9所示。
图10取款界面
图11取款错误提示界面
5.查询
点击主界面中的查询按钮,或者是在存款和取款操作完成后的选择界面中选“是”的话,就会进入到如图12所示的查询界面。
点击取款按钮,会进入到取款界面。
初始金额为50000,图12中的余额是经过存款、取款操作以后的金额。
图12查询界面
6.修改密码
点击主界面中的修改密码按钮,进入到如图13所示的修改密码界面。
新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码,弹出如图14所示的提示界面,点击确定后会回到主界面。
否则,密码修改不成功,点击确定按钮,界面没有反应。
图13修改密码界面
图14修改密码成功提示界面
经过上面的操作,既测试了程序的实现效果,又对系统的使用进行了详细的说明。
从上面的运行结果可以看出,程序基本上实现了所有的设计要求,而且运行正常。
四、总结
通过为时一周的课程设计,我受益匪浅,把平时所学的知识通通运用了进来,虽然平时积淀的知识点比较少、比较单一,但是在这次实验中把零零碎碎的知识都连贯起来了,也达到了课程设计的目的,最主要的是通过一周的努力我终于用面向对象程序设计的知识做出了这个“ATM柜员机模拟系统”。
由于知识的积淀比较少,且有些知识掌握不太牢靠,记忆模模糊糊的,最后决定恶补一下落下的知识点再进行程序的设计。
第一天,去图书馆借了相关图书,把知识点打牢,然后参考了相似的的几个实例,并进行了一些分析和总结。
基础功课做好以后第二天正式开工,选定好了题目,进行方法选择、框架设计、画出流程图、UML图,进行了初步的程序设计构想。
第三天,编写程序代码,这个过程我觉得是最艰难的,因为代码太多,还有API接口不是很熟悉,所以要经常翻阅手册,花费了很多时间。
程序一不小心就会出错不能运行,还需要认真检查,细心细心加细心才能做好。
反复的进行分析调试,最后一天把程序调试通过后,进行课程设计报告的撰写。
虽然很幸苦但是,最终的成果还是令人满意的,最后感谢指导老师对我们帮助和支持。
在这次的课程设计中,我主要运用了Java图形界面编程方面的知识,加深了对Java语言中各个基础知识点的了解和应用,将自己所学的知识运用到实际操作当中,而不再是纸上谈兵。
通过这次设计,我深刻感受到了面向对象语言中类库的强大功能,掌握了运用Java中的类实现某些基本功能,并学会了自己查询使用类的方法,为以后的面向对象语言的自学奠定了基础。