1、课程设计(大作业)汇报课程名称:面向对象程序设计课程设计 设计题目:ATM柜员机模拟程序 院 系:信息技术学院 班 级: 设 计 者: 学 号: 指导老师: 设计时间:-1-4-1-8 信息技术学院昆明学院课程设计(大作业)任务书姓 名:院(系):信息技术学院专 业:计算机科学和技术 学 号:任务起止日期:-1-4-1-8课程设计题目:设计一个ATM柜员机模拟程序,实现系统登录、余额查询、ATM取款、ATM存款、修改密码等部分ATM柜员机基础功效,模拟ATM工作原理和人机交互。课程设计要求:使用图形用户界面。当输入给定卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用
2、户能够根据以下规则进行:1、查询余额:初始余额为10000元2、ATM取款:每次取款金额为100倍数,总额不超出5000元,支取金额不许可透支。3、ATM存款:不能出现负存款。4、修改密码:新密码长度大于6位,不许可出现6位完全相同情况,只有旧密码正确,新密码符合要求,且两次输入相同情况下才能够成功修改密码。工作计划及安排:1月4号,老师部署任务、讲授设计内容。1月5号,查阅资料,进行初步设想并画出步骤图。 1月6号,具体设计,创建各个类、编写程序代码。1月7号,测试,对程序进行调试、运行并进行对应分析。1月8号,书写课程设计汇报,验收、考评及答辩。指导老师签字 年 月 日 课程设计(大作业)
3、成绩学号: 姓名: 指导老师: 课程设计题目:设计一个ATM柜员机模拟程序,实现系统登录、余额查询、ATM取款、ATM存款、修改密码等部分ATM柜员机基础功效,模拟ATM工作原理和人机交互。总结:经过为时一周课程设计,我受益匪浅,把平时所学知识通通利用了进来,即使平时积淀知识点比较少、比较单一,不过在这次试验中把零零碎碎知识全部连贯起来了,也达成了课程设计目标,最关键是经过一周努力我最终用面向对象程序设计知识做出了这个“ATM柜员机模拟系统”。因为知识积淀比较少,且有些知识掌握不太牢靠,记忆模模糊糊,最终决定恶补一下落下知识点再进行程序设计。第一天,去图书馆借了相关图书,把知识点打牢,然后参考
4、了相同多个实例,并进行了部分分析和总结。基础功课做好以后第二天正式开工,选定好了题目,进行方法选择、框架设计、画出步骤图、UML图,进行了初步程序设计构想。第三天,编写程序代码,这个过程我认为是最艰苦,因为代码太多,还有API接口不是很熟悉,所以要常常翻阅手册,花费了很多时间。程序一不小心就会犯错不能运行,还需要认真检验,细心细心加细心才能做好。反复进行分析调试,最终一天把程序调试经过后,进行课程设计汇报撰写。即使很幸苦不过,最终结果还是令人满意,最终感谢指导老师对我们帮助和支持。指导老师评语:成绩:填表时间:指导老师署名:课程设计(大作业)汇报一、 题目分析1.系统需求分析(1)设计目标:伴
5、随市场经济繁荣发展,大家物质生活得到极大提升,手中剩下资金也日益增多。受传统观念影响,绝大多数人喜爱把资金投进银行,而在需要使用现金时候再到银行提取现金。这就造成银行业务急剧增加。即使银行网点越来越多,银行工作效率也伴随信息化有较显著增加,不过依旧不能满足广大用户需要。而一味增加营业网点,从理论上即使能稍微缓解银行压力,不过治标不治本,而且每增加一个网点,不仅要付出昂贵资金成本,还需要长久投入人力资本,成本很之昂贵。这时候就迫切需要一个自动,易于普及,低成本设备来处理这一问题。于是ATM机系统应运而生了。自动柜员机,即ATM,是指银行在不一样地点设置一个小型机器,利用一张信用卡大小胶卡上磁带统
6、计用户基础户口资料(通常就是银行卡),让用户能够透过机器进行提款、存款、转账等银行柜台服务,大多数用户全部把这种自助机器称为自动提款机。本文正是经过设计一个ATM模拟模拟程序来实现ATM机系统基础功效,充足利用自己所学Java知识进行设计编程。(2)题目设计要求:本ATM柜员机关键功效以下所述:要求使用图形用户界面。当输入给定卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户能够根据以下规则进行:l 查询余额:初始余额为10000元。l ATM取款:每次取款金额为100倍数,总额不超出5000元,支取金额不许可透支。l ATM存款:不能出现负存款。l 修改密码:新密
7、码长度大于6位,不许可出现6位完全相同情况,只有旧密码正确,新密码符合要求,且两次输入相同情况下才能够成功修改密码。2.ATM模拟系统总体设计结构(1)设计思想:经过程序要求,我们能够清楚知道此次设计ATM柜员模拟程序需要实现四大功效,即查询余额、取款、存款、修改密码。首次之外,作为ATM系统,还需要最基础两大功效,即登陆和退出。依据上述功效分析,我们能够把整个ATM系统分为登陆模块、查询模块、取款模块、存款模块、修改密码模块。除此之外,还有在登陆系统后功效选择模块,退出功效则镶嵌在各个需要模块中。因为各个模块功效实现是经过界面显示出来,则程序设计又能够了解为几大界面设计:登陆界面、主界面、查
8、询余额界面、取款界面、存款界面、修改密码界面。除了几大界面之外,还有系统初始化,关键是初始卡号、密码设定等。在程序大致框架确定以后,我们需要了解各个模块所要实现和需要含有功效。依据现有银行ATM系统,我们能够很快就能够了解此次设计ATM系统应该含有操作。a.登陆界面用户输入正确账号和密码就能够登录到该系统主界面中去,进行对应操作:取款、存款、查询、修改密码。b.主界面主界面包含查询、存款、取款、修改密码、退出功效按钮,按下对应按钮,能够进行对应操作。c.查询界面在主界面中按下查询按钮能够进行查询操作。经过查询功效我们能够查询账户余额,在查询过程中我们能够选择取款业务,除此之外,查询界面之中还有
9、返回和退出操作。返回操作会使用户回到主界面,退出操作会使用户直接回到登陆界面。d.取款界面取款界面既能够经过主界面进入,也能够经过查询、存款等操作过程中界面进入。取款功效在对话框中输入你想要取出金额,不过次金额不能够比账户余额大,且必需是100整数倍,取款完成,会弹出是否显示余额提醒,选“是”话就会进入查询界面,选“否”话,则回到主界面。e.存款界面在主界面按下存款按钮能够进行存款操作,在对话中输入你需要存入金额,所输入数字也要是100整数倍,而且不能够是负数。存款完成,会弹出是否显示余额提醒,选“是”话就会进入查询界面,选“否”话,则回到主界面。f.修改密码选择修改密码按钮能够进行修改密码房
10、,不过要先输入就密码正确而且两次输入新密码一致才能够修改密码。修改完成后,会返回主界面。(2)ATM柜员机总体步骤图,图 图1图1(3)ATM柜员机模拟模拟系统UML图,图 图2 图 23.系统开发及运行环境软件平台:Eclipse,jdk全套软件,editpuls编辑器Eclipse 是一个开放源代码、基于Java可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于经过插件组件构建开发环境。幸运是,Eclipse 附带了一个标准插件集,包含Java开发工具(Java Development Kit,JDK)。Eclipse是著名跨平台自由集成开发环境(IDE)。最初关键用来Java语
11、言开发,经过安装不一样插件Eclipse能够支持不一样计算机语言,比如C+和Python等开发工具。Eclipse本身只是一个框架平台,不过众多插件支持使得Eclipse拥有其它功效相对固定IDE软件极难含有灵活性。很多软件开发商以Eclipse为框架开发自己IDE。 图 3二、各模块分析和实现1.系统各模块介绍代码中出现Account类、MainFrame类、Load类、Take类、Input类、Setpew类和Display类全部继承了Java类JFrame。(1)账户创建模块Class Accout创建用户,初始化用户信息功效和保留用户信息,比如:卡号、密码、原有余额、取款后卡里余额和存
12、款后卡里余额。这类包含组员有:组员变量account、count、password和方法结构方法Account()。实现了账户信息初始化工作,设置默认账户信息,账号:123456,密码:123456。方便后续测试登陆时作为进入模拟系统信息凭证。创建账户关键代码:class Account private int count=10000; /初始账户余额10000 private String account=123456; /初始账号 private String password=123456; /初始密码 public Account() /账户函数 public void setpw(S
13、tring password) /设置密码 this.password=password; public void deccount(int money) /deccount 取款 count-=money;/取款后再原来基础上减所取部分 public void reccount(int money) /reccount 存款 count+=money;/存款后在原来基础上加所存部分 (2)主界面结构模块Class MainFrame结构主界面,提供业务选择,让用户能够在这个界面选择存款、取款、查询余额、修改密码。它包含组员有:结构方法MainFrame()和初始化主界面方法 initComp
14、onents()和组员变量checked、cunkuan、quite、qukuan、reset。实现功效关键为主界面初始化,主界面布局管理,设置好查询、存款、取款、退出、返回操作按钮。关键代码:class MainFrame extends JFrame /主框架方法由JFrame继承而来 public JButton checked; /检测 public JButton cunkuan; /存款 public JButton quit; /退出 public JButton qukuan; /取款 public JButton reset; /重设 /框架按钮参数 public MainF
15、rame() /主框架函数 initComponents(); /添加组件 this.setLocationRelativeTo(null); /设置窗口相对于指定组件位置 this.setVisible(false); /隐藏其它窗口 (3)登陆模块Class Load 实现登录功效和登录界面,假如用户名和密码匹配就能够登录到主界面不然报错。它组员有:Jpassword、accountnum、committ、JL1、JL2和结构方法Load()和初始化方法initComponents()。关键代码:class Load extends JFrame public JPasswordField
16、 Jpassword; public JTextField accountnum;/ public JButton commit;/增删 private JLabel jL1;/设置对齐 private JLabel jL2; public Load() initComponents(); /初始化添加组件和添加监听器 this.setLocationRelativeTo(null);/使窗口至于屏幕中央 this.setVisible(true); (4)取款模块Class Take实现取款功效,按返回键返回主界面,按清除键能够删除输入数字,而且取出金额必需是100整数倍,一次取出金额不能超
17、出5000,取完款后能够显示余额。该类组员有:back、clear、commit、quite、JL1、JT1和结构方法Take()和初始化initComponents()。关键代码:class Take extends JFrame public JButton back; public JButton clear; public JButton commit; private JLabel jL1; public JTextField jT1; public JButton quit; String str=; public Take() initComponents(); this.set
18、LocationRelativeTo(null); this.setVisible(false); (5)存款模块Class input实现存款功效,存款金额必需是100整数倍,不然报错提醒重新输入。组员有:clear、commit、jL1、jT1、str和结构函数Inputhe()和初始化方法initComponents()。关键代码:class Input extends JFrame private JButton clear; private JButton commit; private JLabel jL1; private JTextField jT1; String str=;
19、 public Input() initComponents(); this.setLocationRelativeTo(null); this.setResizable(false); this.setVisible(false); (6)显示余额模块Class Display功效为显示目前余额,在显示余额时JTextField内容不能够编辑,组员有:组员变量back、jL1、quit、qukuan和结构方法Display()和方法数set(String str)和初始化方法initComponents()。关键代码:class Display extends JFrame public J
20、Button back; private JLabel jL1; public JTextField jT1; public JButton quit; public JButton qukuan; public Display() initComponents(); jT1.setText(String.valueOf(myaccount.get(); this.setLocationRelativeTo(null); this.setVisible(false); (7)修改密码模块class Setpw创建这类是为了实现修改密码功效,设置密码必需是六位以上字符,而且所设置密码不能是同一个
21、字符组成,不然报错。组员有:组员变量commit、commitpw、jPwcommit、jPwnew、jPwold、newpw、oldpw、quit和结构方法Setpw()和初始化方法initComponents()。关键代码:class Setpw extends JFrame public JButton commit; public JLabel commitpw; public JPasswordField jPwcommit; public JPasswordField jPwnew; public JPasswordField jPwold; public JLabel newpw
22、; public JLabel oldpw; public JButton quit; public Setpw() initComponents(); this.setResizable(false); this.setLocationRelativeTo(null); this.setVisible(false); 2.事件监听组件介绍(1) MainFrame类监听模块在该类中设置了五个监听器,监听鼠标单击按钮,分别监听退出quit.addActionListener(new ActionListener()、修改密码reset.addActionListener(new ActionL
23、istener()、查询checked.addActionListener(new ActionListener()、取款cunkuan.addActionListener(new ActionListener()、存款qukuan.addActionListener(new ActionListener()等按钮事件。(2) Load类监模块commit.addActionListener(new java.awt.event.ActionListener()在该类中只有一个监听器,监听鼠标单击“确定”按钮时事件。(3) Take类监听模块在该类中设置了四个监听器,一样是监听鼠标单击按钮事件
24、,分别监听“清除” clear.addActionListener(new ActionListener()、“退出” quit.addActionListener(new ActionListener()、“返回” back.addActionListener(new ActionListener()、“确定” commit.addActionListener(new ActionListener()按钮事件。(4 )input类监模块在这个类中共设置了两个监听器,它们也是监听鼠标单击按钮事件。它们监听“清除” clear.addActionListener(new ActionListen
25、er()、“确定” commit.addActionListener(new ActionListener()按钮事件。(5 )display类监听模块在display中设置了三个监听器,全部属于监听鼠标单击按钮事件,分别监听“退出” quit.addActionListener(new ActionListener()、“返回” back.addActionListener(new ActionListener()、“取款” qukuan.addActionListener(new java.awt.event.ActionListener()按钮事件。(6 )Setpw类监听模块在这个类中
26、设置了两个监听器,它们是监听鼠标单击按钮事件,分别监听“确定” commit.addActionListener(new ActionListener()、“退出” quit.addActionListener(new ActionListener()按钮事件。三、系统调试分析1.登陆界面 打开MyEcplise,编译运行程序后,将会看到图3所表示欢迎界面。点击确定以后,会进入图4所表示登陆界面。图3 欢迎登陆页面图4 登陆界面进入到登陆界面后,需要输入账号和密码,当账号和密码正确时,才会进入到主界面。账号和密码不符合时,会进入图4所表示错误提醒界面。初始账号和密码为“123456”。图5 登
27、陆犯错提醒界面2.账号密码登陆 当输入密码和卡号正确,单击确定后就会进入到主界面,选择服务,图6所表示,点击对应按钮就能够选择所需要服务了,点击“退出”会回到登陆界面。图6 主界面3.存款点击存款,进入存款界面,图7所表示。图7 存款界面当输入钱数不是100倍数时,就会弹出图7所表示错误提醒界面。输入正确时,进入图9所表示界面。选“是”话,会进入查询余额界面,查看存款操作是否成功;选“否”话,会回到主界面。图8 存款犯错提醒界面图9 操作完成后选择界面4.取款点击取款按钮,进入取款界面,图10所表示。当输入钱数是负数,或是0,或不是100倍数,又或大于5000时,会弹出图11所表示犯错提醒界面
28、。当输入钱数符合要求时,会弹出如同存款操作一样选择界面,图9所表示。图10 取款界面图11 取款错误提醒界面5.查询点击主界面中查询按钮,或是在存款和取款操作完成后选择界面中选“是”话,就会进入到图12所表示查询界面。点击取款按钮,会进入到取款界面。初始金额为50000,图12中余额是经过存款、取款操作以后金额。图12 查询界面6.修改密码点击主界面中修改密码按钮,进入到图13所表示修改密码界面。新密码长度大于6位,不许可出现6位完全相同情况,只有旧密码正确,新密码符合要求,且两次输入相同情况下才能够成功修改密码,弹出图14所表示提醒界面,点击确定后会回到主界面。不然,密码修改不成功,点击确定
29、按钮,界面没有反应。图13 修改密码界面图14 修改密码成功提醒界面经过上面操作,既测试了程序实现效果,又对系统使用进行了具体说明。从上面运行结果能够看出,程序基础上实现了全部设计要求,而且运行正常。四、总结经过为时一周课程设计,我受益匪浅,把平时所学知识通通利用了进来,即使平时积淀知识点比较少、比较单一,不过在这次试验中把零零碎碎知识全部连贯起来了,也达成了课程设计目标,最关键是经过一周努力我最终用面向对象程序设计知识做出了这个“ATM柜员机模拟系统”。因为知识积淀比较少,且有些知识掌握不太牢靠,记忆模模糊糊,最终决定恶补一下落下知识点再进行程序设计。第一天,去图书馆借了相关图书,把知识点打
30、牢,然后参考了相同多个实例,并进行了部分分析和总结。基础功课做好以后第二天正式开工,选定好了题目,进行方法选择、框架设计、画出步骤图、UML图,进行了初步程序设计构想。第三天,编写程序代码,这个过程我认为是最艰苦,因为代码太多,还有API接口不是很熟悉,所以要常常翻阅手册,花费了很多时间。程序一不小心就会犯错不能运行,还需要认真检验,细心细心加细心才能做好。反复进行分析调试,最终一天把程序调试经过后,进行课程设计汇报撰写。即使很幸苦不过,最终结果还是令人满意,最终感谢指导老师对我们帮助和支持。在这次课程设计中,我关键利用了Java图形界面编程方面知识,加深了对Java语言中各个基础知识点了解和
31、应用,将自己所学知识利用到实际操作当中,而不再是纸上谈兵。经过这次设计,我深刻感受到了面向对象语言中类库强大功效,掌握了利用Java中类实现一些基础功效,并学会了自己查询使用类方法,为以后面向对象语言自学奠定了基础。在这次课程设计中,我查了很多资料,很好锻炼了自己查阅资料能力和快速吸收新知识能力。同时,也加深了和同学交流,在设计过程中,我们相互帮助,共度难关,培养了很好默契。总而言之,在这次课程设计中,我学到了很多知识,同时也感谢我同学帮助和指导。在以后学习当中,我会愈加努力学习好专业知识,并将所学知识用于实践当中去,方便牢靠掌握知识。五、参考文件1 叶核亚. Java程序设计实用教程(第3版
32、.电子工业出版社,2 耿祥义. JAVA课程设计.清华大学出版,3 王文涛,袁海燕 JAVA实用程序设计100例M北京:人民邮电出版社,.54 雍俊海 JAVA程序设计M北京:清华大学出版社,.85 刘宝林 JAVA程序设计和案例M北京:高等教育出版社,.116 史斌星,史佳 .Java基础及应用教程 M.北京.清华大学出版社.27.15.101.7 Y.Daniel Liang.Java语言程序设计M.北京.机械工业出版社.六、附录 源代码程序源代码:/*API接口*/import javax.swing.*;import javax.swing.JOptionPane;import jav
33、a.awt.event.*;import java.awt.*;/*主类*/public class ATMmodel Account myaccount=new Account();/账户实例化 Load load=new Load(); MainFrame Jmain=new MainFrame();/主框架实例化 Take take=new Take(); Input input=new Input(); Display dis=new Display(); Setpw setpw=new Setpw();/设置密码实例化 /* 主方法*/ public ATMmodel() JOpti
34、onPane.showMessageDialog(null,欢迎使用ATM柜员模拟系统!);/进入主界面时用JOptionPane.showMessageDialog();弹出系统提醒 public static void main(String args) ATMmodel atm=new ATMmodel();/主函数实例化 /*创建账户*/ class Account private int count=10000; /初始账户余额10000 private String account=123456; /初始账号 private String password=123456; /初始密
35、码 public Account() /账户函数 public void setpw(String password) /设置密码 this.password=password; public void deccount(int money) /deccount 取款 count-=money;/取款后再原来基础上减所取部分 public void reccount(int money) /reccount 存款 count+=money;/存款后在原来基础上加所存部分 public int get() return count;/获取余额 public String getaccount()
36、 return account;/获取账号 public String getpw() return password;/获取密码 /*主界面*/ class MainFrame extends JFrame /主框架方法由JFrame继承而来 public JButton checked; /检测 public JButton cunkuan; /存款 public JButton quit; /退出 public JButton qukuan; /取款 public JButton reset; /重设 /框架按钮参数 public MainFrame() /主框架函数 initCompo
37、nents(); /添加组件 this.setLocationRelativeTo(null); /设置窗口相对于指定组件位置 this.setVisible(false); /隐藏其它窗口 /* 控件初始化*/ private void initComponents() /初始化添加组件和添加监听器 cunkuan = new JButton(); qukuan = new JButton(); checked = new JButton(); reset = new JButton(); quit = new JButton();setDefaultCloseOperation(Windo
38、wConstants.EXIT_ON_CLOSE);/退出程序 setTitle(ATM柜员模拟程序);setName(mianframe);/设置名称 setResizable(false); /窗口大小不可改变 cunkuan.setText(存款); /将“cunkuan”转换成“存款” cunkuan.addActionListener(new ActionListener() /设置事件监听 public void actionPerformed(ActionEvent evt) /活动事件响应 cunkuanActionPerformed(evt); );qukuan.setTex
39、t(取款); qukuan.addActionListener(new ActionListener() public void actionPerformed(ActionEvent evt) qukuanActionPerformed(evt); );checked.setText(查询); checked.addActionListener(new ActionListener() public void actionPerformed(ActionEvent evt) checkedActionPerformed(evt); );reset.setText(修改密码); reset.a
40、ddActionListener(new ActionListener() public void actionPerformed(ActionEvent evt) resetActionPerformed(evt); );quit.setText(退出); quit.addActionListener(new ActionListener() public void actionPerformed(ActionEvent evt) quitActionPerformed(evt); ); /程序界面划分,界面布局 /GroupLayout layout = new GroupLayout(getContentPane(); /GroupLayout它将组件按层次分组,以决定它们在 Container 中位置 getContentPane().setLayout(layout);/内容面板 layout.setHorizontalGroup( /水平划分 layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createPara