1、学院本科毕业设计(论文)ATM柜员机模拟程序学生姓名: 学生学号: . 院(系): 年级专业: . 指导教师: 讲师 二一一年六月学院本科学生课程设计任务书题目ATM柜员机模拟程序1、课程设计的目的通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)编写一个ATM柜员机模拟程序,要求:使用图形用户界面。当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:1、查询余额:初始余额为10000
2、元2、ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。3、ATM存款:不能出现负存款。4、修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。3、主要参考文献1朱福喜.Java语言程序设计(第二版).科学出版社2陈国君等.Java程序设计基础(第二版).清华大学出版社3 Deitel.Java大学基础教程(第六版).电子工业出版社 4 MaryCampione.Java语言导学(第四版).机械工业出版社5 Y.Daniel Liang.Java语言程序设计基础篇(第六版). 机
3、械工业出版社6 Kathy Sierra.Head First Java(第二版).东南大学出版社4、课程设计工作进度计划序号时间(天)内容安排备注11分析设计准备周一22编程调试阶段周二至周三31编写课程设计报告周四41考核周五总计5(天)指导教师(签字)日期年 月 日教研室意见:年 月 日学生(签字): 接受任务时间: 年 月 日注:任务书由指导教师填写。课程设计(论文)指导教师成绩评定表题目名称ATM柜员机模拟程序评分项目分值得分评价内涵工作表现20%01学习态度6遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。02科学实践、调研7通过实验、试验、查阅文献、深入生产实践等渠道获取与课
4、程设计有关的材料。03课题工作量7按期圆满完成规定的任务,工作量饱满。能力水平35%04综合运用知识的能力10能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。05应用文献的能力5能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。06设计(实验)能力,方案的设计能力5能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。07计算及计算机应用能力5具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。08对计算或实验结果
5、的分析能力(综合分析能力、技术经济分析能力)10具有较强的数据收集、分析、处理、综合的能力。成果质量45%09插图(或图纸)质量、篇幅、设计(论文)规范化程度5符合本专业相关规范或规定要求;规范化符合本文件第五条要求。10设计说明书(论文)质量30综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。11创新10对前人工作有改进或突破,或有独特见解。成绩指导教师评语指导教师签名: 年 月 日学院论文 摘要I学院论文 目录摘 要21世纪,便利服务已经成为人们生活中不可或缺的一部分。各种各样的便利服务给人们的生活带来巨大的方便,它改变了人们的生活节奏,提高人们业务的效率。
6、随着时间的推移,人们对便利服务的功能愈加的提出更多、更实际的要求。AMT自动取款服务就是众多便利服务中最普遍的一种。本文就模拟AMT柜员机系统设计一项简单小巧的AMT取款系统,以实现简单的取款、存款、查询余额、修改密码等功能。受限制于知识和时间,此次设计对于界面和功能损耗不做很大的要求,重于对AMT设计流程的把握,感受企业开发的思想,尽可能多的处于专业角度思考问题,理解和掌握所学知识,提高自己的编码能力。关键词 ATM柜员机,取款,存款,查询,余额,修改密码学院论文 课程设计目的目 录摘 要I1 课程设计目的12 系统的分析与设计22.1需求分析22.1.1 课设任务22.1.2 课设要求22
7、.2系统的设计32.2.1功能层次的设计32.2.2逻辑层次的设计33 程序设计43.1 程序流程图43.2系统实现5总 结28参 考 文 献291学院论文 系统的分析与设计1 课程设计目的(1)通过本次设计掌握使用java语言中窗体的建立,各个控件的使用,以及界面的设计(2)巩固所学的java的相关理论知识,提高分析和解决实际问题的能力(3)初步掌握使用java工具设计一个具体实例的方法,包括软件的设计,调试的全过程(4)全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。29学院论文 系统分析与设计2 系统的分析与设计AMT自取存取业务24小时不间断自助服务,对于银行的业务增长和竞争
8、能力提供了很大的帮助。新时期对于AMT设备的数量和系统稳定性都提出了更多更苛刻的要求。AMT的效率、人性化和功能丰富化将直接影响银行的业务竞争。此次课程设计模拟AMT系统实现银行自助基本的业务。2.1需求分析2.1.1 课设任务编写一个ATM柜员机模拟程序。2.1.2 课设要求使用图形用户界面。当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:1、查询余额:初始余额为10000元2、ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。3、ATM存款:不能出现负存款。4、修改密码:新密码长度不小于6位,不
9、允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。2.2系统的设计2.2.1功能层次的设计可以为银行用户提供各项基本服务:学院论文 程序设计(1)功能方面:存款、取款、查询余额、修改密码(2)性能:快捷、简单明了(3)输入:用户通过键盘进行输入2.2.2逻辑层次的设计本次课设的自动提款机模拟软件系统基本结构框图如图2.1所示:启动系统进入登录窗口用户登录退出系统ATM取款ATM存款余额查询修改密码图2.1 ATM系统的基本框图攀枝花学院论文 程序流程图3 程序设计用户进入系统后,点击用户登录进入登陆界面,在登录窗口中输入卡号和密码,判断卡号与
10、密码是否正确,若卡号与密码正确则进入用户操作界面,并根据用户的相关操作给用户提供相应的服务。若卡号与密码不正确,弹出对话框提示用户确认卡号和密码错误后重新输入。攀枝花学院论文 程序流程图3.1 程序流程图程序流程图如图3.1所示:开始输入卡号不正确验证卡号密码正确性正确业务选择业务处理是否处理成功是是否继续否退出结束否是图3.1程序流程图学院论文 程序设计3.2系统实现本系统主要通过运用java的Windows窗体的设计进行开发和实施,主要通过如下几个功能模块来完成系统的具体的实施过程:(1)ATM柜员机登录界面模块设计 登录界面用标签,文本框,按钮来实现。输入卡号和密码,正确则进入功能界面,
11、不正确则提示。注销关闭系统。图3.2 登录界面 图3.3 错误提示代码如下:package amt;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;public class UI extends JFrame implements ActionListener private static final long seriaVersionUID = 1L;private JLabel luser = new JLabel(账号
12、:);private JLabel lpassword = new JLabel(密码:);private JPasswordField user = new JPasswordField(20);private JPasswordField password = new JPasswordField(20);private JButton confirm = new JButton(确定);private JButton repeal = new JButton(注销);private JPanel panel = new JPanel();Message m;public UI() ini
13、Component();iniContainer();m = new Message(123456,123456,5000);public void iniComponent() GridLayout p = new GridLayout();panel.setLayout(p);p.setRows(4);p.setColumns(1);JPanel panelRow1 = new JPanel();JPanel panelRow2 = new JPanel();JPanel panelRow3 = new JPanel();panelRow1.add(luser);panelRow1.add
14、(user);panelRow2.add(lpassword);panelRow2.add(password);panelRow3.add(confirm);confirm.addActionListener(this);panelRow3.add(repeal);repeal.addActionListener(this);panel.add(new JPanel();panel.add(panelRow1);panel.add(panelRow2);panel.add(panelRow3);setDefaultCloseOperation(DISPOSE_ON_CLOSE);public
15、void iniContainer() this.add(panel, Center);setTitle(AMT自动取款服务);setSize(500, 400);setResizable(false);public void showUI() this.setVisible(true);public static void main(String args) UI ui = new UI();ui.setLocation(200, 200);ui.showUI();public void actionPerformed(ActionEvent e) if (e.getSource() = c
16、onfirm) String suser = new String(user.getPassword();String spassword = new String(password.getPassword();if (suser.equals(m.cuser) & spassword.equals(m.cpassword) new Function(m).showFunction();this.setVisible(false); else JOptionPane.showMessageDialog(this, 密码或者账户错误!); else if (e.getSource() = rep
17、eal) System.exit(0);(2)功能界面模块设计功能界面只使用按钮组件。图3.4 功能界面代码如下:package amt;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;public class Function extends JFrame implements ActionListener private JButton getMoney = new JButton(取款);private JButton
18、 saveMoney = new JButton(存款);private JButton account = new JButton(查询余额);private JButton modify = new JButton(修改密码);Message m;JPanel panel = new JPanel();public Function(Message m) this.m = m;iniComponent();iniContainer();public void iniComponent() GridLayout p = new GridLayout();panel.setLayout(p);
19、p.setRows(1);p.setColumns(4);JPanel panelRow1 = new JPanel();panelRow1.add(getMoney);getMoney.addActionListener(this);panelRow1.add(saveMoney);saveMoney.addActionListener(this);panelRow1.add(account);account.addActionListener(this);panelRow1.add(modify);modify.addActionListener(this);panel.add(panel
20、Row1);setDefaultCloseOperation(DISPOSE_ON_CLOSE);public void iniContainer() this.add(panel);this.setSize(500, 400);this.setTitle(功能选择);setResizable(false);public void showFunction() this.setVisible(true);this.setLocation(250, 250);public static void main(String srgs) public void actionPerformed(Acti
21、onEvent e) if (e.getSource() = getMoney) new GetMoney(m).showGetMoney(); else if (e.getSource() = saveMoney) new SaveMoney(m).showSaveMoney(); else if (e.getSource() = account) new Account(m).showAccount(); else if (e.getSource() = modify) new Modify(m).showModify();(3)自动存款模块设计 取款界面使用标签,文本和按钮组成。存款成功
22、后会提示存款成功。 图3.5 自动存款图 3.6 存款成功代码如下:package amt;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;public class SaveMoney extends JFrame implements ActionListener private JLabel lsaveNum = new JLabel(存款数);private JTextField saveNum = new JText
23、Field(20);private JButton confirm = new JButton(确定);private JButton repeal = new JButton(取消);Message m;JPanel panel = new JPanel();public SaveMoney(Message m) iniConponent();iniContainer();this.m = m;public void iniConponent() GridLayout p = new GridLayout();panel.setLayout(p);p.setRows(2);p.setColu
24、mns(2);JPanel panelRow1 = new JPanel();JPanel panelRow2 = new JPanel();panelRow1.add(lsaveNum);panelRow1.add(saveNum);panelRow2.add(confirm);confirm.addActionListener(this);panelRow2.add(repeal);repeal.addActionListener(this);panel.add(panelRow1);panel.add(panelRow2);setDefaultCloseOperation(DISPOSE
25、_ON_CLOSE);public void iniContainer() this.add(panel);this.setLocation(200, 200);this.setSize(500, 400);setResizable(false);this.setTitle(存钱);public void showSaveMoney() this.setVisible(true);public static void main(String args) public void actionPerformed(ActionEvent e) if (e.getSource() = confirm)
26、 double money = Double.parseDouble(saveNum.getText();/ System.out.println(money);if (money % 100 = 0) m.saveMoney(money);JOptionPane.showMessageDialog(this, 存款 + money + 成功!);saveNum.setText(); else JOptionPane.showMessageDialog(this, 存款需为百元); else if (e.getSource() = repeal) this.setVisible(false);
27、(4)自动取款模块设 取款界面有文本框和按钮还有标签,用户在文本框中输入它想取的数额,但必须是100的倍数,而且最多只取5000快,当然取款时超过余额或者不是100倍数的时候就会报错。 图3.7 自动取款当取款成功时就会提示如图3.8的消息。 图3.8 成功取款提示当取款时不是100的倍数或者如果超过卡里的余额的话就会报错如下图3.9,3.10,3.11 图3.9 超余额取款 图3.10 非百元倍数取款 图3.11 报错代码如下:package amt;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.eve
28、nt.ActionListener;import javax.swing.*;public class GetMoney extends JFrame implements ActionListener private JLabel lgetNum = new JLabel(取款数:);private JTextField getNum = new JTextField(20);private JButton confirm = new JButton(确定);private JButton repeal = new JButton(取消);Message m;JPanel panel = n
29、ew JPanel();public GetMoney(Message m) iniComponent();iniContainer();this.m = m;public void iniComponent() GridLayout p = new GridLayout();panel.setLayout(p);p.setRows(2);p.setColumns(2);JPanel panelRow1 = new JPanel();JPanel panelRow2 = new JPanel();panelRow1.add(lgetNum);panelRow1.add(getNum);pane
30、lRow2.add(confirm);confirm.addActionListener(this);panelRow2.add(repeal);repeal.addActionListener(this);panel.add(panelRow1);panel.add(panelRow2);setDefaultCloseOperation(DISPOSE_ON_CLOSE);public void iniContainer() this.add(panel);this.setLocation(200, 200);this.setSize(500, 400);setResizable(false
31、);this.setTitle(取钱);public void showGetMoney() this.setVisible(true);public static void main(String args) public void actionPerformed(ActionEvent e) if (e.getSource() = confirm) double money = Double.parseDouble(getNum.getText();/System.out.println(money);if (money % 100 = 0 & money= m.account) m.ge
32、tMoney(money);JOptionPane.showMessageDialog(this, 取款 + money + 成功!);getNum.setText(); else JOptionPane.showMessageDialog(this, 非百元或者你的卡额透支!); else if (e.getSource() = repeal) this.setVisible(false);(5)查询余额模块设计查询余额的界面主要有文本框,标签,按钮,主要功能是在上一级选择菜单中选择查询余额,就会弹出查询余额的这个对话框。 图3.12存款2500后看查询3.13图 图3.13代码如下:pac
33、kage amt;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;public class Account extends JFrame implements ActionListenerprivate static final long seriaVersionUID = 1L;private JLabel account = null;private JButton confirm = new JButton(确定);
34、private JPanel panel = new JPanel(); Message m;public Account(Message m) String saccount = Double.toString(m.getAccount();account = new JLabel(余额为 + saccount);GridLayout p = new GridLayout();panel.setLayout(p);p.setRows(2);p.setColumns(1);JPanel panelRow1 = new JPanel();JPanel panelRow2 = new JPanel
35、();panelRow1.add(account);panelRow2.add(confirm); confirm.addActionListener(this);panel.add(panelRow1);panel.add(panelRow2);setDefaultCloseOperation(DISPOSE_ON_CLOSE);iniContainer();this.m = m;public void iniContainer() this.add(panel);this.setLocation(200,200);this.setSize(200,200);setResizable(fal
36、se);this.setTitle(余额);public void showAccount() this.setVisible(true);public void actionPerformed(ActionEvent e) if (e.getSource() = confirm) this.setVisible(false);(6)修改密码模块设计修改密码的界面主要有文本框,标签,按钮,主要功能是先在输入原始密码的文本框中输入原来的密码,然后在输入要修改的密码的文本框中输入新密码,在确认新密码后,才能真正的将密码修改成功。如果修改密码成功,就会出现如图3.14和3.15的信息提示: 图3.1
37、4 修改密码 图3.15 修改成功如果输入的原始密码是错误的就会出现图3.16和3.17的错误提示: 图3.16 图3.17如果新输入的两个密码不一致,就会出现如图3.18、3.19的信息提示: 图3.18 图3.19代码如下:package amt;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;public class Modify extends JFrame implements ActionListener pri
38、vate static final long seriaVersionUID = 1L;private JLabel oldpassword = new JLabel( 原始密码);private JLabel newpassword1 = new JLabel( 新密码);private JLabel newpassword2 = new JLabel(确认新密码);private JTextField t1 = new JTextField(20);private JTextField t2 = new JTextField(20);private JTextField t3 = new
39、JTextField(20);private JButton confirm = new JButton(确定);private JButton repeal = new JButton(取消);private JPanel panel = new JPanel();Message m;public Modify(Message m) iniComponent();iniContainer();this.m = m;public void iniComponent() GridLayout p = new GridLayout();panel.setLayout(p);p.setRows(4);p.setColumns(2);JPa