ATM管理系统设计说明书

2024-05-21

ATM管理系统设计说明书(精选6篇)

篇1:ATM管理系统设计说明书

ATM机管理系统 设计说明书

班级:软件0802

姓名:杨凯

学号:200807040221

ATM机管理系统

1编写目的

ATM机管理系统是银行业务流程过程中十分重要且必备的环节之一,在银行业务流程当中起着承上启下的作用,其重要性不言而喻。但是,目前许多银行在具体的一些业务流程处理过程中仍然使用手工操作的方式来实施,不仅费时、费力,效率低下,而且无法达到理想的效果。为明确软件需求、安排项目规划与进度、组织软件开发与测试,撰写本文档,本文针对上述问题,采用软件工程的开发原理,依据软件流程过程规范,按照需求分析,概要设计,程序编码,软件应用等过程,开发了这个系统。ATM系统必须向客户提供如下服务:

1、客户可以做一次取款(取款金额必须是100元人民币的整数倍),在现金被提取之前,必须得到银行的许可。

2、客户可以做一次存款,客户把存款量输入到ATM系统中,必须从银行得到许可。

3、客户可以做一次转帐。

4、客户可以进行一次详细账户信息查询。

5、客户通过有效验证后可以更改密码。

6、客户可以在取回磁卡是选择是否得到记录操作的打印凭条。

ATM系统将把每一处理传达到银行并且获得银行许可。如果银行确定客户PIN 是无效的,客户将被要求再进入PIN。如果客户不能在五次尝试之后成功地进入PIN,客户的卡将被机器没收,而客户不得不联系银行取回它。

2背景

待开项目名称:ATM机管理系统。

3定义

账号:在银行中,事务应用的单个账号。账号可以为多种类型,但是至少包括支票和存款。每个顾客可以拥有多个账号。

ATM:一个工作站终端,使得顾客能够使用现金卡在ATM上进行自己的事务处理。ATM同顾客进行交互,收集事务信息,并发送事务信息到中心计算机,由中心计算机确认和处理信息之后,将现金通过ATM提供给顾客。

银行:一个金融机构,负责保存顾客的账号信息,执行授权卡通过ATM网访问账号。

银行计算机:银行拥有的计算机,同ATM网和银行自己的现金工作站进行交互。银行可以拥有自己的内部计算机网处理账号,但是我们只关心同网络进行交互的计算机。

现金卡:每张卡提供给一个银行客户,授权客户可以使用ATM机访问自己的账号。每张卡包含一个银行代码和一个卡号,银行代码根据信用卡的国际标准进行编码,卡号确定卡能够访问的账户。一张卡不能访问客户的所有账户。每张卡只能有一个持卡人,但是多个复本可能存在,所以必须考虑从不同的ATM机同时使用相同卡的行为。

客户:拥有银行的一个或者多个账号的人。客户可以包括一个人或者多个人,或者是公司。相同的人,拥有不同银行的账号被认为是不同的客户。

事务:对单个客户账号的单个完整的操作请求。

4参考资料

a. 《 统一建模语言UML》 主编:袁涛 孔蕾蕾 清华大学出版社

b.软件工程国家标准:软件需求说明书(GB856T——88)

5性能

说明:

1、ATM系统软件总体结构:交互式界面和事务处理型系统的混合体。

2、ATM系统分为三个系统层次:

(1)ATM事务处理层(2)营业部事务处理层(3)联营机构事务处理层

3、事务处理的数据库在营业部计算机中集中存放。可被多个并发的ATM通

过联营机构确定连接访问。数据处理是单一的批处理型系统(指一个帐号 被封锁直到处理结束)。

4、联营计算机通过电话线与各营业部计算机连接。并通过站代码和营业部代

码区分ATM业务到营业部的业务处理。

5、每一时刻ATM上只有一个业务活动,联营计算机和营业部计算机可同时

处理多个并发的业务活动。一个业务通过三个物理片段来完成,缺一不可。

6、系统应该具有增加和删除ATM和营业部处理层的能力。

7、系统的安全保证至关重要。必须包括:存取权限、数据一致性保证、出错处理等解决方案

6.ATM机查询账户系统设计说明

进入查询帐户的操作界面

选择你需要的操作就可以查询并显示你的帐户信息 如果 还需要其他操作

按“返回”键

否则(超过10秒钟没有操作 或 选择退出)

退卡

如果 选择其他三个任意一个操作

进入各自的界面进行各自的操作 否则

退卡

7.ATM机转账系统设计说明

进入转账/汇款的操作界面 选择你需要的操作

界面提醒你输入两次你要转入的卡号

卡号输入完毕,提醒你输入金额

按“确定”键,转账完毕

如果 还需要其他操作

按“返回”键

否则 超过10秒钟没有操作 或 选择退出

退卡

如果 选择其他三个任意一个操作 进入各自的界面进行各自的操作

否则

退卡

案。

ATM管理系统用例图:

uc ATM用例图 打印凭条插卡输入密码客户AMT输入取款金额退卡选择业务继续交易完成交易

ATM管理系统类图:

class ATM类图 总行-分行地址分行名称1维护*-1-姓名职务-+ + + + + 现有金额支出金额打印数据()读卡()分发现金()提交用户输入信息()吞卡()1处理*--金额类型日期修改 拥有1远程事务-银行卡*1密码账户号码授权

ATM顺序图:

sd ATM顺序图 CustomerInterfaceWithdrawalTransactionAccountDepositor插入银行卡()有效银行卡()输入密码()验证账户()与分行验证账户()银行账户合法()账户合法()选择取款业务()输入取款金额()处理取款业务()更新账户余额()业务处理成功()业务成功()分发现金()询问是否继续()选择结束服务()打印凭条()打印凭条()提取账户余额信息()返回收据信息()提取储户信息()推出银行卡()描述了顾客在ATM机上取款时信息的流动情况。以时间为顺序。因为仅是示例,所以整个过程是没有出现任何故障时的流程,并且只画到了取款结束。通过这个图,我们可以看出消息是如何在系统中不同对象之间进行交互。

8.注意事项

1.密码只能由0到9中的任意六个数字构成.2.密码不能为空.3.密码不能为相同的六个数字或其他过于简单的组成.

篇2:ATM管理系统设计说明书

课程设计报告

目:

ATM柜员机

业:

信息与计算科学

号:

名:

指导教师:

成绩:

2010 年 12 月 10 日

目 录

1课程设计研究背景及意义.......................................2 2 课程设计题目描述和基本功能设计要求...........................2 3 系统需求分析.................................................2 3.1 功能需求分析............................................2 3.2 其他需求分析............................................3 4 系统设计.....................................................3 4.1 总体设计................................................3 4.2 ATM柜员机界面设计......................................4 4.3 各功能模块设计..........................................5

4.3.1 登陆页面模块设计................................5 4.3.2 选择服务模块设计................................6 4.3.3 取款模块设计....................................7 4.3.4 修改密码模块设计................................8 4.3.5 查询余额模块设计................................9 4.3.6 退卡模块设计....................................9 4.4 异常处理情况说明.......................................10 5 系统实现与测试..............................................10 6 课程设计总结................................................13 6.1 遇到的问题及解决办法...................................13 6.2 心得体会...............................................14 参考文献......................................................14 附录(源码)..................................................14

1课程设计研究背景及意义

这次课程设计是通过JAVA编程来实现ATM柜员机的功能。以前,人们用手算取钱,不管从方便的角度还是速度的角度来看都不及现在。电子技术的不断发展使得ATM自动化的功能不断完善。在二十一世纪的今天,ATM柜员机是人们生活中重要的工具,所以,对ATM柜员机的研究的课程设计具有重大意义。

这次课程设计的主要目的是结合面向对象程序设计课程,培养我们面向对象开发的思维,初步了解软件开发的一般流程,提高用JAVA编程的实际动手能力并增强大家对面向对象的了解。这次课程设计的主要内容是独立用JAVA语言开发一个小的应用程序。课程设计题目描述和基本功能设计要求

本次设计的ATM柜员机主要是由各个Windows窗口组成,它是由登录页面、选择服务、取款、查询余额、修改密码和退卡等功能。它的各种按钮的事件和功能可以简单的模拟ATM柜员机的要求。组员分工:

组长(单焱): 负责分配其他组员的任务,构建需求分析,系统实现及异常处理情况,调试程序等,把握ATM柜员机的整体布局。

组员1(刘星):负责登陆界面模块,选择服务模块及退卡模块,编写相应代码。组员2(王玲玲):负责取款、修改密码、查询余额模块,编写相应代码。系统需求分析 3.1 功能需求分析

本ATM柜员机的主要功能如下所述:

要求使用图形用户界面。当输入给定的卡号和密码(初始卡号为000000和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:

 查询余额:初始余额为50000元

 ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。

 ATM存款:不能出现负存款。

 修改密码:只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。

3.2 其他需求分析

(1)性能描述

实时性好、灵活性强、易于不同年龄阶段的人操作。(2)设计约束 开发工具:Eclipse3.2.运行环境:Windows 2000以上。(3)界面要求

以Windows窗口形式显示,标题栏为ATM柜员机名称,右上角有最小化按钮、最大化按钮、关闭按钮,不同的窗口中有不同的按钮和选择菜单。系统设计 4.1 总体设计

本次设计的ATM柜员机主要是由登录页面模块还由选择服务模块组成,其中选择服务模块又由取款模块、查询余额模块、修改密码模块、退卡模块组成。如图:

图1

ATM功能结构示意图

4.2 ATM柜员机界面设计

一个系统的界面应该要简单明了,当然样式美观就更好了。本次设计的界面主要是由窗体组成,操作简单。而每一个窗口则执行相应的功能。

一个系统界面的好坏直接影响到用户的操作,界面设计要求样式美观、简单明了、方便易操作。界面主要分为窗体、菜单、按钮和文本输入框几个部分,分别执行相应的操作。

(1)窗体的设计

窗体整个框架使用Frame类构造,Frame有自己的外边框和自己的标题,创建Frame时可以指定其窗口标题,我创建的窗口标题是各个不同功能的模块的名字,比如说查询余额,还有取款等。相应源代码为:WindowBox(String s){super(s);}、Selection(String s,Account act){ } 向Frame窗口中添加组件使用add()。例如:button1 = new Button(“存款”);

p1.add(button1);this.add(p1);super(s);每个Frame在其右上角都有三个控制图标,分别代表将窗口最小化、窗口最大化和关闭的操作,其中最小化和最大化操作Frame可自动完成,而关闭窗口操作实现需要书写有关的代码,在我的程序中我采用的是对WINDOWS_CLOSING事件做出响应,调用dispose()方法关闭窗口。Frame也可以引发WindowsEvent类代表的窗口事件。相应源代码为:

addWindowListener(new WindowAdapter()//窗口侦听器,以从此窗口接收窗口事件 {public void windowClosing(WindowEvent e)//处理窗口关闭事件

{ System.exit(0);} });}(2)窗体的主要结构的设计(网格布局)

我所设计的窗口的主要结构的特点就是每个窗口都对应着一个特定的功能。比如说报各种各样的错,还有各种查询余额、取款、选择服务等,所以它们都是由各种按钮和文本框,标签组成的,而联系各个窗体成为一个整体的就是各个按钮的监听事件。所以整个设计就趋向简单化了。

为了定义各个按钮所对应的命令和操作,首先需要将各个按钮注册给实现了动作事件的监听接口ActionListener的监听者,然后为监听者定义actionPerformed(ActionEvent e)方法,在这个方法中调用e.getSource()或e.getActionCommand()来判断用户点击的菜单子项,并完成这个菜单子项定义的操作。

4.3 各功能模块设计 4.3.1 登陆页面模块设计

与ATM柜员机打交道比较多的,也是大家对安全比较关心的问题:密码。所以第一个界面就是要输入密码和卡号才能继续服务。

我定义了文本框累的对象tf1,tf2。抓药是用于输入单行的文本;文本区调用public String getText()方法,获取用户想要的字符串。用来判断输入的密码和卡号是否正确,如果不正确的话,则弹出密码或卡号错误的警告框,并用dispose()关掉窗口。此模块相应的部分源代码为:

public void actionPerformed(ActionEvent e){

Account act;

String card;

String pwd;

act=new Account(“000000”,“Devil”,“123456”,50000);//初始化

/*选择各种服务*/

if(e.getSource()== button1){

String number1,number2;

number1=tf1.getText();

number2=tf2.getText();

/*判断密码和卡号是否正确*/ if((act.get_Code().equals(number1))&&(act.get_Password().equals(number2))){

dispose();

/*卡号和密码都正确则进入功能选择窗口*/

Selection s = new Selection(“选择服务”,act);

}else{

dispose();

JOptionPane.showMessageDialog(null, “您输入的卡号或密码不正确,请核实后再确定”,“消息!”, JOptionPane.INFORMATION_MESSAGE);

new WindowBox(“登录界面”);

}

}

/*退卡*/ if(e.getSource()==button2){

dispose();

JOptionPane.showMessageDialog(null, “谢谢使用!”, “消息!”,JOptionPane.INFORMATION_MESSAGE);System.exit(0);

} } 4.3.2 选择服务模块设计

在选择服务模块中,有各种ATM的服务功能,只要用户在该界面中选择按钮,它就会弹出各个相应的界面。每一个按钮都有监听器,在选择了按钮后,java.awt.event中的ActionEvent类创建一个事件对象,并将它传递给方法public void actionPerformed(ActionEvent e)中的参数e,监视器就会知道所发生的事件,对此事件进行处理。其中的部分源代码为:

p.add(new Label(“请选择你要的服务”));

this.add(p);

button1 = new Button(“存款”);

p1.add(button1);

this.add(p1);

button2 = new Button(“取款”);

p2.add(button2);

this.add(p2);

button3 = new Button(“查询余额”);

p3.add(button3);

this.add(p3);

button4 = new Button(“退出”);

p4.add(button4);

this.add(p4);

button5 = new Button(“修改密码”);

p5.add(button5);

this.add(p5);

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0);

}

}

});button2.addActionListener(this);button3.addActionListener(this);button4.addActionListener(this);button5.addActionListener(this);setBounds(300,300,300,300);setVisible(true);validate();} public void actionPerformed(ActionEvent e){ if(e.getSource()==button2){//取款

dispose();

GetBalance gb = new GetBalance(“取款”,act);} if(e.getSource()==button3){//查询余额

Query q =new Query(“查询余额”,act);

dispose();} else if(e.getSource()==button4){//退出

dispose();

} JOptionPane.showMessageDialog(null, “谢谢使用!”, “消息!”,JOptionPane.INFORMATION_MESSAGE);System.exit(0);

} else if(e.getSource()==button5){//修改密码

ChangePassword cp = new ChangePassword(“修改密码”,act);

dispose();} 4.3.3 取款模块设计

在取款模块中,和其他的界面也是同样的结构。也是有一个文本框和一个按钮还有标签组成的。用户在文本框中输入他想取的数额,但是必须是100的倍数,而且每一次最多只能取5000块。当然了取款的时候也不能超过卡里的余额,再就是卡里的余额不可以为负,否则就会弹出报错的窗口。其方法为:

if(e.getSource()== button){

if(act.get_Money()< 0){// 判断余额是否为负

dispose();JOptionPane.showMessageDialog(null, “余额为负数”, “消息”,JOptionPane.INFORMATION_MESSAGE);} else if(money <= act.get_Money()){// 取钱的数额不大于余额

if(money % 100 == 0){

dispose();

JOptionPane.showMessageDialog(null, “取款成功!”, “消息”,JOptionPane.INFORMATION_MESSAGE);act.set_Balance(money);this.setVisible(false);Selection s = new Selection(“选择服务”, act);}

if((money % 100!= 0)||(money >= 5000)){// 取钱数为100的倍数或不大于5000

dispose();

JOptionPane.showMessageDialog(null,的钱!“, ”消息“,务窗口

}

”每次只能取100的倍数,而且不能超过5000,请重新输入你想取

JOptionPane.INFORMATION_MESSAGE);act.get_Money();this.setVisible(false);Selection s = new Selection(“选择服务”, act);// 返回选择服} else if(money > act.get_Money()){// 判断取款数额是否大于余额

dispose();

JOptionPane.showMessageDialog(null, “超过已有的钱数,请重新输入你想取的钱!”,“消息”, JOptionPane.INFORMATION_MESSAGE);

this.setVisible(false);

} Selection s = new Selection(“选择服务”, act);} 4.3.4 修改密码模块设计

在修改密码模块中,首先你必须要输入你的旧密码是否正确,否则就会报错。再一个就是要两次输入你的新密码,且两次药匹配,否则也会报错,然后再重新回到修改密码的界面。在修改密码时用到的方法为:

/*判断旧密码是是否正确*/ if(pwd2.equals(act.get_Password())){ /*判断两次输入的密码是否匹配*/

if(pwd3.equals(pwd4)){

/*如果都正确的话就设置新密码*/

act.setPassword(pwd3);

dispose();

Selection s = new Selection(“选择”,act);}else{

dispose();

ErrorWarn2 ew2 = new ErrorWarn2(“消息”,act);

} }else{

this.setVisible(false);

ErrorWarn3 ew1 = new ErrorWarn3(“消息”,act);

dispose();} 4.3.5 查询余额模块设计

在查询余额模块设计中, 和其他的界面的结构相差不多。有一个余额显示和一个按钮还有标签组成的。查询时用到的方法:

Query(String s, Account act){// 构造函数

super(s);this.act = act;button = new Button(“确定”);// TextField tf = new TextField(6);Panel panel1 = new Panel();Panel panel = new Panel();panel1.add(new Label(“你的余额为: ” + act.get_Money()));// 查询余额的button.addActionListener(this);panel.add(button);this.add(panel);this.add(panel1);this.setLayout(new GridLayout(2, 1));this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){

System.exit(0);} });setBounds(300, 300, 300, 300);setVisible(true);

方法

} 4.3.6 退卡模块设计

在退卡模块设计中,这个方法就更加的简单了,它只是用了if(e.getSource()==button4){//退出

dispose();JOptionPane.showMessageDialog(null, “谢谢使用!”, “消息!”,JOptionPane.INFORMATION_MESSAGE);System.exit(0);} 这个方法就可以实现了,这里就不再多说了。

4.4 异常处理情况说明

(1)打开、保存文件时的异常处理 需要处理的异常:IOException(2)数据库访问时的异常处理 需要处理的异常:SQLException(3)加载类时的异常处理

需要处理的异常:ClassNotFindException,当应用程序试图使用Class类中的forName方法通过字符串名加载类时,但是没有找到具有指定名称的类的定义。

(4)加载URL时的异常

需要处理的异常:MalformedURLException,抛出这一异常指示出现了错误的 URL。或者在规范字符串中找不到任何合法协议,或者无法分析字符串。系统实现与测试

(1)编译运行程序后,将会看到如下的界面,如图2所示。如果输入的密码或卡号不正确的话就会报右下图的错误。

图2 主界面—登陆页面

(2)选择服务界面效果

当输入的密码和卡号正确,单击确定后就会进入到选择服务的界面,如图3所示。然后就可以选择所需要的服务了。

图3 选择服务界面

(3)取款界面,如图4所示。

图4 取款界面

当输入的钱数不是100的倍数或每一次大于5000时就会报图5的错误。

图5 输入错误1 当取款时如果超过卡里的余额的话就会报图6的错误。

图6 输入错误2(4)查询余额界面,如图7所示。

图7 查询余额界面

(5)修改密码界面,如图8所示。

图8 修改密码界面

当输入的初始密码不正确会报图9所示错误。

图9 输入错误1

当2次输入的新密码不同会报图10所示错误。

图10 输入错误2

经过测试,所有的功能基本上都实现了,而且运行正常。课程设计总结

6.1 遇到的问题及解决办法

在此次课程设计中遇到了一些问题,如:对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于Java语言,只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误,而且要在短时间内用Java语言来设计一个具体的系统是一个较大的挑战;还有对于正规开发一个系统的流程不熟悉,适应起来比较慢,编写各个模块相对应的操作时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。

对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,对于书上以及网站上下载的资料中的Java实例必须有清楚的理解,还有就是多跟精通此方面的老师和同学交流,取其精华。对于实际动手能力与系统开发的流程的适应,必须多进

行实际的练习与操作,才能有大的进步。

6.2 心得体会

在这次的课程设计中,主要运用了Java语言的界面设计、异常处理、、Awt控件、Swing控件,输入输出流等,综合运用了Java语言。深刻感受到了面向对象语言中类库的强大功能,掌握了运用Java中的类实现某些基本功能,并学会了自己查询使用类的方法,为以后的面向对象语言的自学奠定了基础。

通过这次课程设计我学到了一些东西,这次的课程设计中,主要是运用JAVA语言来编写一个小的应用程序,当然还可以用其他的技术来辅助。在这个小应用程序当中,我用了Java外还用了Swing控件。输入输出流等。由于以前学的不是很扎实,而且还有些知识我们都是没有学过的,这就要求我们去查相关的书籍,还有就是和同学之间的交流。正因为这样,才锻炼了我的自学的能力,还有就是加深了我对各个知识点的认识,并且提高了我对专业的学习的兴趣,为我以后的学习打下了基础。此外,还感受到了面向对象语言的类库的强大的功能,掌握了运用JAVA中的类实现某些基本功能,并学会了自己查询使用类的方法,也就是要会用API文档,为以后更好的学习面向对象语言奠定了基础。

通过努力,这次课程设计终于完成了,在这个过程当中,学到了很多的知识,同时也感谢我的同学的帮助和指导。在以后的学习当中,我会更加努力的学习好专业知识,并将所学的知识用于实践当中去,以便牢固掌握知识。

参考文献

[1] 王萌,刘婧,来宾著.JAVA程序设计[M]北京 冶金工业出版社,2004 [2] 黄聪明 精通 JAVA2程序设计[M]北京:清华大学出版社,2004.4 [3] 王文涛,袁海燕 JAVA实用程序设计100例[M]北京:人民邮电出版社,2005.5 [4] 雍俊海 JAVA程序设计[M]北京:清华大学出版社,2006.8 [5] 刘宝林 JAVA程序设计与案例[M]北京:高等教育出版社,2006.11 附录(源码)

/******登陆页面首窗口*******/ import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;

import java.io.*;

public class WindowBox extends Frame implements ActionListener { Box baseBox, box1, box2;TextField tf1, tf2;Button button1;Button button2;

WindowBox(String s){// 构造方法

super(s);tf1 = new TextField(6);tf2 = new TextField(6);box1 = Box.createVerticalBox();

box1.add(new Label(“请输入你的卡号”));// 输入卡号 box1.add(Box.createVerticalStrut(8));box1.add(new Label(“请输入你的密码”));// 输入密码 box2 = Box.createVerticalBox();box2.add(tf1);// box2.add(new TextField(16));

box2.add(Box.createVerticalStrut(8));box2.add(tf2);// box2.add(new TextField(16));

baseBox = Box.createHorizontalBox();baseBox.add(box1);baseBox.add(Box.createHorizontalStrut(10));baseBox.add(box2);add(baseBox);button1 = new Button(“确定”);// 加入按钮 button1.addActionListener(this);add(button1);button2 = new Button(“退卡”);// 退卡按钮 button2.addActionListener(this);add(button2);setLayout(new FlowLayout());/* 监听器 */

this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){

System.exit(0);} });setBounds(300,300,220,220);setVisible(true);} public void actionPerformed(ActionEvent e){

Account act;String card;String pwd;act = new Account(“000000”, “Devil”, “123456”, 50000);// 初始化 /* 选择各种服务 */

if(e.getSource()== button1){

String number1, number2;// 输入的两个卡号和密码的变量 number1 = tf1.getText();number2 = tf2.getText();/* 判断两次输入的卡号和密码是否正确 */

if((act.get_Code().equals(number1))

&&(act.get_Password().equals(number2))){ dispose();Selection s = new Selection(“选择服务”, act);} else { dispose();

JOptionPane.showMessageDialog(null, “您输入的卡号或密码不正确,请核实后再确定”,“消息!”, JOptionPane.INFORMATION_MESSAGE);

// 报输入密码或卡号不正确

new WindowBox(“登录界面”);

}

}

if(e.getSource()== button2){

System.exit(0);

dispose();// 退出

} } }

/*************主函数****************/ public class ATM { public static void main(String[] args){

new WindowBox(“登录页面”);} } /********* 选择服务窗口 ***************/ import java.awt.*;import java.awt.event.*;

public class Selection extends Frame implements ActionListener { Button button1, button2, button3, button4, button5;

Panel p1 = new Panel();Panel p2 = new Panel();Panel p3 = new Panel();Panel p4 = new Panel();Panel p5 = new Panel();Panel p = new Panel();Account act;public Selection(){ } Selection(String s, Account act){ super(s);this.act = act;this.setLayout(null);this.setLayout(new GridLayout(6, 1));

p.add(new Label(“请选择你要的服务”));this.add(p);/* 各种服务功能 */

button1 = new Button(“存款”);p1.add(button1);this.add(p1);button2 = new Button(“取款”);p2.add(button2);this.add(p2);button3 = new Button(“查询余额”);p3.add(button3);this.add(p3);button4 = new Button(“退出”);p4.add(button4);this.add(p4);button5 = new Button(“修改密码”);p5.add(button5);this.add(p5);this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){

System.exit(0);} });button2.addActionListener(this);button3.addActionListener(this);button4.addActionListener(this);button5.addActionListener(this);setBounds(300, 300, 300, 300);setVisible(true);validate();

} } public void actionPerformed(ActionEvent e){

} if(e.getSource()== button2){// 取款

dispose();GetBalance gb = new GetBalance(“取款”, act);} if(e.getSource()== button3){// 查询余额

Query q = new Query(“查询余额”, act);dispose();} else if(e.getSource()== button4){// 退出

dispose();

JOptionPane.showMessageDialog(null, “谢谢使用!”, “消息!”,JOptionPane.INFORMATION_MESSAGE);System.exit(0);} else if(e.getSource()== button5){// 修改密码

ChangePassword cp = new ChangePassword(“修改密码”, act);dispose();} /**********取款功能************/ import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;

public class GetBalance extends Frame implements ActionListener { Box baseBox, box1, box2;Button button;TextField tf;Account act;

GetBalance(String s, Account act){// 构造函数

super(s);this.act = act;

button = new Button(“确定”);Panel panel = new Panel();Panel panel1 = new Panel();tf = new TextField(6);this.setLayout(new GridLayout(2, 1));panel1.add(new Label(“请输入你想取钱的数目”));panel1.add(tf);panel.add(button);this.add(panel1);

this.add(panel);button.addActionListener(this);this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0);

} });setBounds(300, 300, 300, 300);this.setVisible(true);} public void actionPerformed(ActionEvent e){ // System.out.println(e.getActionCommand());

double money;money = Double.parseDouble(tf.getText().trim());if(e.getSource()== button){

if(act.get_Money()< 0){// 判断余额是否为负

dispose();JOptionPane.showMessageDialog(null, “余额为负数”, “消息”,JOptionPane.INFORMATION_MESSAGE);} else if(money <= act.get_Money()){// 取钱的数额不大于余额

if(money % 100 == 0){

dispose();

JOptionPane.showMessageDialog(null, “取款成功!”, “消息”,JOptionPane.INFORMATION_MESSAGE);act.set_Balance(money);this.setVisible(false);Selection s = new Selection(“选择服务”, act);}

if((money % 100!= 0)||(money >= 5000)){// 取钱数为100的倍数或不大于5000

dispose();

JOptionPane.showMessageDialog(null,的钱!“, ”消息“,务窗口

”每次只能取100的倍数,而且不能超过5000,请重新输入你想取

JOptionPane.INFORMATION_MESSAGE);act.get_Money();this.setVisible(false);Selection s = new Selection(“选择服务”, act);// 返回选择服 // dispose();} } else if(money > act.get_Money()){// 判断取款数额是否大于余额

dispose();JOptionPane.showMessageDialog(null, “超过已有的钱数,请重新输入

你想取的钱!”,“消息”, JOptionPane.INFORMATION_MESSAGE);

this.setVisible(false);口

Selection s = new Selection(“选择服务”, act);// 返回选择服务窗

} } } }

/********修改密码功能*************/ import java.awt.Button;import java.awt.Frame;import java.awt.GridLayout;import java.awt.Label;import java.awt.Panel;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JOptionPane;

public class ChangePassword extends Frame implements ActionListener { Panel panel1 = new Panel();Panel panel2 = new Panel();Panel panel3 = new Panel();Panel panel = new Panel();TextField tf4, tf5, tf6;Button button;Account act;ChangePassword(String s, Account act){

super(s);

this.act = act;

tf4 = new TextField(6);

tf5 = new TextField(6);

tf6 = new TextField(6);

button = new Button(“确定”);button.addActionListener(this);/* 建立新密码 */

panel1.add(new Label(“请输入你的旧密码:”));panel1.add(tf4);panel2.add(new Label(“请输入你的新密码:”));panel2.add(tf5);

} panel3.add(new Label(“请再次输入你的新密码”));panel3.add(tf6);panel.add(button);this.add(panel1);this.add(panel2);this.add(panel3);this.add(panel);setLayout(new GridLayout(4, 1));setBounds(300, 300, 300, 300);this.setVisible(true);/* 窗口事件 */

this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){

System.exit(0);} });/* 判断事件源,看条件是否成立再修改密码 */

public void actionPerformed(ActionEvent e){ if(e.getSource()== button){

String pwd2, 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();

JOptionPane.showMessageDialog(null, “密码修改成功!”, “消息

JOptionPane.INFORMATION_MESSAGE);

”,Selection s = new Selection(“选择”, act);// 返回服务窗口 } else { this.setVisible(true);

// ErrorWarn2 ew = new ErrorWarn2(“消息”,act);dispose();JOptionPane.showMessageDialog(null, “两次密码输入不匹配”, “

JOptionPane.INFORMATION_MESSAGE);

消息”,Selection s = new Selection(“选择”, act);// 返回服务窗口

} } else { this.setVisible(false);dispose();

“,} JOptionPane.showMessageDialog(null, ”初始密码输入错误“, ”消息

JOptionPane.INFORMATION_MESSAGE);

Selection s = new Selection(“选择”, act);// 返回选择服务窗口

} } } /**************查询余额功能******************/ import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;

public class Query extends Frame implements ActionListener { Button button;Account act;

Query(String s, Account act){// 构造函数

super(s);this.act = act;

button = new Button(“确定”);// TextField tf = new TextField(6);Panel panel1 = new Panel();Panel panel = new Panel();

panel1.add(new Label(“你的余额为: ” + act.get_Money()));// 查询余额的方法

// panel1.add(tf);

button.addActionListener(this);

panel.add(button);

this.add(panel);

this.add(panel1);

this.setLayout(new GridLayout(2, 1));

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0);

}

});

setBounds(300, 300, 300, 300);

setVisible(true);} public void actionPerformed(ActionEvent e){

if(e.getSource()== button){

dispose();

Selection s = new Selection(“选择服务”, act);// 返回选择服务窗口

} } }

/***********账户****************/ import java.io.*;/* 该类为实现客户信息及部分功能 */ public class Account {

{

} private String code = null;// 信用卡号 private String name = null;// 客户姓名

private String password = null;// 客户密码 private double money = 0.0;// 卡里金额

public Account(String code, String name, String password, double money)

} this.code = code;this.name = name;this.password = password;this.money = money;public String get_Code(){// 取得卡号

return code;} public String get_Name(){// 取得名字

return name;} public String get_Password(){// 取得密码

return password;} public double get_Money(){// 重置余额

return money;} /* 得到剩余的钱的数目 */

protected void set_Balance(double mon){ money-= mon;} /* 重置密码的方法 */

篇3:基于GIS的ATM选址系统设计

目前国内大部分银行主要依靠表格数据凭借经验实现ATM机网点选址。这样造成了ATM机网点选址缺乏科学依据,分布不合理、管理不规范等问题。如何依据科学理论、充分利用空间信息技术的优势来研究、分析和管理网点数据,为ATM网点分布提供合理的布局和规划[1],已成为银行迫在眉睫的问题和面临的重大挑战。基于此,本文设计了基于GIS的网络ATM选址系统[2]。该系统采用B S架构。所有数据都在服务器端进行处理,这样银行选址部门就能在线地进行选址,降低了银行的运营成本,极大地提高了银行的运营效率。

1 系统体系结构

B S(Browser Server)结构即浏览器和服务器结构[2],是当前最为流行的多层数据库模型之一。在这种结构下,用户工作界面通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,主要事务逻辑如地图数据、决策模型等都在服务器端(Server)实现,形成所谓三层3-tier结构。这样主要的工作都运行在服务器端,大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。本系统体系结构如图1所示。

2 系统功能设计

根据客户需求,本文将ATM选址系统划分为三个大模块:ATM选址模块,ATM系统运营模块,系统维护模块[3],每个大模块又被细化为小的模块,模块之间既相互独立,彼此之间又要传递信息,保证数据的同步,用户可以通过地图漫游或者交互式查询的方式确定ATM机的布放位置信息,ATM机选址系统的总体设计图如图2所示。

2.1 主要模块系统功能简介

ATM选址模块的主要功能是确定将要布放的ATM机的位置,在区域总量需求模块中,确定选定区域内需要的ATM机的数量,它是根据区域人口数据、GDP数据、区域经济类型、发卡量、银行存款余额等宏观经济数据,分析选定区域内ATM总的需求量[4]。当总的数量确定之后,在局部区域选择模块对选定的区域进行划分,划分为空白区域和潜力区域,进而确定细化的区域内是否需要布放ATM机[5],为评估分析模块作好准备,评估分析模块和点位评估模块的功能主要是确定备选点的位置,综合评价模块对确定的备选点进行三角函数模糊综合评价[6],选择出最适合布放ATM的位置。

ATM系统运营管理模块主要是完成系统设备信息、运营信息、维护信息及设备布放位置信息的浏览、查询,不同类型统计图的生成及打印等工作,对ATM的业务进行有效的管理。

系统维护模块主要是用于数据维护和系统管理,数据维护中能批量导入系统所需要的各种数据,保证ATM选址系统数据能得到实时更新,为了保证系统运营的安全性,根据用户级别的不同给用户提供了不同的权限。普通用户可以浏览、查询及统计数据,设计布点选址模型、地理编码以及迅速定位等等。管理员除了拥有普通用户的权限之外,还可以对系统数据进行维护、用户的权限设置。

2.2 系统实现技术

2.2.1 设计采用Java技术

本系统设计采用了Java技术来构建WEB服务,Java语言是一个纯的面向对象程序设计语言,Java的运行环境是用ANSI C实现的,Java的移植性非常好,利用J2EEAPI来创建事物和表现逻辑,访问、修改、更新XML文档,利用现在已经成熟的底层框架,在其基础上进行开发,构建新的功能,而且,根据Java面向对象技术的特点,基于J2EE的WEB服务可以自动继承J2EE容器服务的特征(如事物、应用程序安全型和后台应用程序数据库连接)最后完成WEB服务接口的部署。

2.2.2 数据库

由于系统中所涉及到的数据比较大,既包含地理属性的数据以及描述地理要素的空间分布位置的空间数据,同时也包含大量需要进行运算的业务数据,如对ATM机进行查询时,既要描述出ATM机的空间位置,又要描述出ATM机自身的信息,为了把这些数据更加合理地进行描述,本系统采用把系地理数据和业务数据分开组织的形式,分离开的空间数据和属性数据之间通过唯一的ID建立映射的关系。

空间数据的存储采用Geomedia数据库,它是建立在开放标准的Windows基础上的以数据库管理为核心的企业级地理信息系统,在设计中,可以利用面向对象编程技术直接与GeoMedia数据模型进行交流,不仅可以完全利用GeoMedia对象,而且可以限制用户的访问权限和控制工作流程,如在Geomedia中可以利用Connection对象连接数据库:

Dim objConnection As newConnections

Dim objConnection As Connection

Dim objOpipe as OriginatingPipe

Set objConnection=objConnections.Add(“ConnectionName”)

With objConnection

ATM的业务数据包含大量实体的描述数据,社会经济统计数据以及金融服务业数据,非常复杂,本系统采用ESRI公司的ArcSDE空间数据库引擎技术实现空间数据库与业务数据库的关连。所有的用户均通过JDBC连接缓冲池实现对数据库的连接,用户并不保持连接,这样保证了用户的连接速度比较快。

3 结束语

基于GIS的ATM选址系统建立了基于GIS技术的选址决策模型:区域需求总量模型、区域选择模型、位置分析模型、点位评估模型、模糊综合评价模型,并建立相关的空间数据库、业务数据库,并利用模型及相关的数据库ATM机布放的一般规律,从而使ATM机取得的利益最大化。该系统已在威海市某商业银行使用,并取得了预期的效果,大大缩短了该商业银行的选址周期,为该银行创造了很好的效益。

参考文献

[1]张伟,刘纯波,周廷刚.基于GIS与遥感影像的银行ATM机网点选址方法研究[J].测绘科学,2007.

[2]张红.基于GIS的银行ATM区位选址分析一以郑州市为例[D].河南大学硕士学位论文,2005.

[3]杨香花.GIS辅助下的金融网点选址研究一一以广州市农业银行网点布局调整为例[D].东北师范大学硕士学位论文,2003.

[4]Min H.Amodel-based decision support systemfor location banks[J].Information and Management,1989,17(4):207-215.

[5]黄红,廖玲.商业银行自动柜员机的选址方法初探[J].银行管理,2006.

[6]黄克中,毛善培.随机方法与模糊数学应用[M].上海:同济大学出版社,1987.

[7]埃克尔.Java编程思想[M].机械工业出版社,2007.

篇4:ATM管理系统设计说明书

关键词 Abstract KeyWord 系统设计

中图分类号:TP3 文献标识码:A

0绪论

近些年来,金融机具发展速度很快。存取款业务的办理,由开始时必须人工服务到后来ATM机等简单的取款装置的出现,实现了取款的机器化与自动化。ATM自动取款机系统向用户提供一个方便、简单、及时、随时随地可以随心所欲存取款的互联的现代计算机化的网络系统。

1系统设计要求

该系统依据core java构架的运行平台,通过JDBC连接数据库,最后进行全面的系统调试而完成。系统设计旨在培养学生分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。

(1)系统设计主要使用的技术要求有Java技术,C/S体系结构以及Access数据库,设计人员需掌握这三种技术。

(2)该系統设计需达到一定的安全性,灵活性,可扩展性和易维护性。

2系统运行环境

操作系统:Windows 2000 (Advanced) Server/2003 Server/XP Professional

数据库:SQL Server 2000;

JSP服务器:Tomcat;

开发工具:JBuilder X。

3系统功能概述

用户:使用ATM自动取款机进行现金交易。进行取款、查询余额、设置密码、转账等操作。

系统:对用户的需求进行接收,通过与数据库的交互,根据对用户应用服务的响应,更新数据库中用户的信息。

数据库:对用户的所有信息进行存储更新。

(1)取款功能:用户按照系统输入要求输入取款金额即可取出相应金额的现金。

(2)查询余额功能:用户可以查看账户所剩现金余额。

(3)修改密码功能:如果用户想要修改当前密码,通过系统可以设置新密码。

(4)转账功能:用户可以通过该功能将自己账户上的金额转到其他账户。

(5)登录界面:在整个系统中,首先用户要输入正确用户登录密码以后才可以进入主界面进行相关的操作。

(6)主界面:主界面有“查询余额”“取款”“转账”“修改密码”等功能选项。

(7)取款界面:首先你可以输入取款的金额,输入金额之后,按“确认”,即完成取款功能。

(8)余额查询界面:在主界面中点击余额查询功能选项,就会弹出余额的窗口。

(9)修改密码界面:改密码功能界面,系统要求首先输入旧密码,再输入新密码,并对新密码进行第二次确认,全部输入正确,修改功能完成。

(10)转账界面:当点击转账功能选项,会出现转账的界面,这时就可以进行转账;

4数据库设计

4.1总体表设计

(1)admin表:记录管理员信息;

(2)cardinfo表:记录卡片信息;

(3)transInfo表:记录交易信息;

(4)userInfo表:记录储户信息;

4.2数据库连接

JDBC是Java数据库连接的简称,是为各种常用的数据库提供无缝连接的技术。JDBC的关键技术是数据库连接驱动程序,针对这点大量的数据库厂商和第三方开发商支持Java的JDBC的标准,并开发了不同的数据库JDBC驱动程序。

数据库连接关键代码如下:

public Connection getConn(){

try{

conn=DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=F:/bank.mdb");

}catch(SQLException ex){

ex.printStackTrace();

}

return conn;

}

5系统具体实现

经过测试,系统能够很好的运行实现管理功能,系统可以实现学生信息的集中管理、分散操作、检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高ATM运行的效率,也是储蓄业务的科学化、正规化管理,与世界接轨的重要条件。

参考文献

[1] 薛华成.管理信息系统第四版[M].清华大学出版社,2003.12.

[2] 石志国,薛为民,董洁.JSP应用教程[M].清华大学出版社,2004.10.

[3] 丁宝康,董健全,施伯乐.数据库实用教程[M].清华大学出版社,2001.9.

[4] 李香敏.SQL Server2000编程员指南[M].北京希望电子出版社,2000.12.

[5] 杨易.JSP网络编程技术与实例[M].人民邮电出版社,2005.10.

篇5:ATM取款机java课程设计

JAVA 课程设计报告

目: 《ATM柜员机》课程设计

院:

信 息 工 程 学 院

业:

计算机科学与技术

指导老师:

二0一三年六月

目录 课程设计过程概述.......................................................................................3 2 课程设计题目描述和基本设计要求...........................................................3 3 系统需求分析...............................................................................................3 3.1 功能需求分析···················································································· 3 3.2 其他需求分析···················································································· 4 4 系统设计........................................................................................................4 4.1 总体设计 ··························································································· 4 4.2 ATM柜员机界面设计 ········································································· 5 4.3 各功能模块设计 ················································································ 7

4.3.1 登陆页面模块设计 ····························································· 7 4.3.2 选择服务模块设计 ····························································· 8 4.3.3 取款模块设计 ····································································· 9 4.3.4 修改密码模块设计 ····························································· 9 4.3.5 退卡模块设计 ··································································· 10

4.4 异常处理情况说明 ·········································································· 10 5 系统实现与测试.........................................................................................11 6 课程设计总结.............................................................................................13 6.1 遇到的问题及解决办法 ·································································· 13 6.2 心得体会 ························································································· 14 参考文献..........................................................................................................15 附录..................................................................................................................15

ATM初始账号:000000

初始密码:123456

ATM柜员机 课程设计过程概述

2013年6月,JAVA课程设计在1#楼六楼机房进行,持续时间为两周。这次课程设计的主要目的是结合面向对象程序设计课程,培养我们面向对象软件开发的思维,初步了解软件开发的一般流程,提高用JAVA编程的实际动手能力并增强大家对面向对象的了解。这次课程设计的主要内容是独立用JAVA语言开发一个小的应用程序。我们开发了一个ATM柜员机。课程设计题目描述和基本设计要求

我设计的ATM柜员机主要是由各个Windows窗口组成,它是由登录页面、选择服务、取款、查询余额、修改密码和退卡等功能。它的各种按钮的事件和功能可以简单的模拟ATM柜员机的要求。3 系统需求分析 3.1 功能需求分析

本ATM柜员机的主要功能如下所述:

要求使用图形用户界面。当输入给定的卡号和密码(初始卡号为000000和密码为123456)时,系统能登录ATM柜员机系统,用户可

以按照以下规则进行:

 查询余额:初始余额为50000元

 ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。 ATM存款:不能出现负存款。

 修改密码:只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。

3.2 其他需求分析(1)性能描述

实时性好、灵活性强、易于不同年龄阶段的人操作。(2)设计约束 开发工具:MyEclipse 运行环境:Windows XP、Window 7 能实现用户所定义的各项需求。(3)界面要求

以Windows窗口形式显示,标题栏为ATM柜员机名称,右上角有最小化按钮、最大化按钮、关闭按钮,不同的窗口中有不同的按钮和选择菜单。4 系统设计 4.1 总体设计

我所设计的ATM柜员机主要是由登录页面模块还由选择服务模块组

成,其中选择服务模块又由取款模块、查询余额模块、修改密码模块、退卡模块组成。其功能结构图如下所示:

图1 ATM功能结构示意图 4.2 ATM柜员机界面设计

我们觉得一个系统的界面应该要简单明了,当然样式美观就更好了。我设计的界面主要是由窗体组成,操作简单。而每一个窗口则执行相应的功能。

一个系统界面的好坏直接影响到用户的操作,界面设计要求样式美观、简单明了、方便易操作。我设计的界面主要分为窗体、菜单、按钮和文本输入框几个部分,分别执行相应的操作。(1)窗体的设计

窗体整个框架使用Frame类构造,Frame有自己的外边框和自己的标题,创建Frame时可以指定其窗口标题,我创建的窗口标题是各个不

同功能的模块的名字,比如说查询余额,还有取款等。相应源代码为: 向Frame窗口中添加组件使用add()。例如:button1 = new Button(“存款”);p1.add(button1);this.add(p1);每个Frame在其右上角都有三个控制图标,分别代表将窗口最小化、窗口最大化和关闭的操作,其中最小化和最大化操作Frame可自动完成,而关闭窗口操作实现需要书写有关的代码,在我的程序中我采用的是对WINDOWS_CLOSING事件做出响应,调用dispose()方法关闭窗口。Frame也可以引发WindowsEvent类代表的窗口事件。相应源代码为:

addWindowListener(new WindowAdapter()//窗口侦听器,以从此窗口接收窗口事件

{public void windowClosing(WindowEvent e)//处理窗口关闭事件 { System.exit(0);} });}(2)窗体的主要结构的设计

我所设计的窗口的主要结构的特点就是每个窗口都对应着一个特定的功能。比如说报各种各样的错,还有各种查询余额、取款、选择服务等,所以它们都是由各种按钮和文本框,标签组成的,而联系各个窗体成为一个整体的就是各个按钮的监听事件。所以整个设计就趋向简单化了。

为了定义各个按钮所对应的命令和操作,首先需要将各个按钮注册给实现了动作事件的监听接口ActionListener的监听者,然后为监听者定义actionPerformed(ActionEvent e)方法,在这个方法中调用e.getSource()或e.getActionCommand()来判断用户点击的菜单子项,并完成这个菜单子项定义的操作。4.3 各功能模块设计 4.3.1 登陆页面模块设计

与ATM柜员机打交道比较多的,也是大家对安全比较关心的问题:密码。所以第一个界面就是要输入密码和卡号才能继续服务。我定义了文本框类的对象tf1,tf2。是用于输入单行的文本;文本区调用public String getPassword()方法,获取用户想要的字符串。用来判断输入的密码和卡号是否正确,如果不正确的话,则弹出密码或卡号错误的警告框,并用dispose()关掉窗口。此模块相应的部分源代码为:

public void actionPerformed(ActionEvent e){ Account act;act=new Account(“000000”,“HuangHuai”,“123456”,50000);//初始化

/*选择各种服务*/ if(e.getSource()== button1){ String number1,number2;//输入的两个卡号和密码的变量

number1=tf1.getText().toString();number2 = new String(tf2.getPassword());

/*判断两次输入的卡号和密码是否正确*/

if((act.getCode().equals(number1))&&(act.getPassword().equals(number2))){

dispose();

new Selection(“选择服务”,act);}else{

JOptionPane.showMessageDialog(this, “密码或帐号错误!”,“账户提

示信息”,JOptionPane.ERROR_MESSAGE);

dispose();

new WindowBox(“ATM”);

} }

if(e.getSource()==button2){

System.exit(0);

dispose();//退出

} } 4.3.2 选择服务模块设计

在选择服务模块中,有各种ATM的服务功能,只要用户在该界面中选择按钮,它就会弹出各个相应的界面。每一个按钮都有监听器,在选择了按钮后,java.awt.event中的ActionEvent类创建一个事件对象,并将它传递给方法public void actionPerformed(ActionEvent e)中的参数e,监视器就会知道所发生的事件,对此事件进行处理。其中的部分源代码为:

p.add(new Label(“请选择你要的服务”));

this.add(p);/*各种服务功能*/

buttonCUN = new Button(“ 存 款 ”);

p1.add(buttonCUN);

this.add(p1);

buttonQU = new Button(“ 取 款 ”);

p2.add(buttonQU);

this.add(p2);

buttonCHA = new Button(“ 查询余额 ”);

p3.add(buttonCHA);

this.add(p3);

buttonTUI = new Button(“ 退 出 ”);

p4.add(buttonTUI);

this.add(p4);

buttonGAI = new Button(“ 修改密码 ”);

4.3.3 取款模块设计

在取款模块中,和其他的界面也是同样的结构。也是有一个文本框和一个按钮还有标签组成的。用户在文本框中输入他想取的数额,但是必须是100的倍数,而且每一次最多只能取5000块。当然了取款的时候也不能超过卡里的余额,再就是卡里的余额不可以为负,否则就会弹出报错的窗口。其方法为:

public String withdrawMoney(double money){

String str = null;

if(money<=0){

str = “取款数目须是正数!”;}else{

if(getMoney()<0){//判断余额是否为负

str=“余额为负数!”;

}else if(money<=getMoney()){

if((money%100!=0)||(money>=5000)){//取钱数为100的倍数或不大于5000

str= “取款数目须是一百的整数倍!”;

}else{

setBalance(money);

str = “取款成功:余额为”+getMoney();

}

}else{

str = “余额不足!”;

}

} return str;} 4.3.4 修改密码模块设计

在修改密码模块中,首先你必须要输入你的旧密码是否正确,否则就会报错。再一个就是要两次输入你的新密码,且两次药匹配,否则也会报错,然后再重新回到修改密码的界面。在修改密码时用到的方法为:

/*判断旧密码是是否正确*/ if(pwd2.equals(pwd1)){

if(pwd3.equals(pwd4)){//判断两次输入的新密码是个匹配

act.changePassword(pwd3);//启用新的密码

dispose();

JOptionPane.showMessageDialog(this, “修改密码成功!”);

new Selection(“选择”,act);//返回选择服务窗口

}else{

this.setVisible(true);

dispose();

JOptionPane.showMessageDialog(this, “两次输入要修改的密码不同,更新密码失败!”);

new Selection(“选择”,act);

} }else{

this.setVisible(false);

dispose();

JOptionPane.showMessageDialog(this, “输入密码错误,更新密码失败!”);

new Selection(“选择”,act);} } 4.3.5 退卡模块设计

在退卡模块设计中,这个方法就更加的简单了,它只是用了if(e.getSource()==buttonTUI){//退出

System.exit(0);

dispose();

} 这个方法就可以实现了,这里就不再多说了。4.4 异常处理情况说明

(1)打开、保存文件时的异常处理 需要处理的异常:IOException(2)数据库访问时的异常处理 需要处理的异常:SQLException

(3)加载类时的异常处理

需要处理的异常:ClassNotFindException,当应用程序试图使用Class类中的forName方法通过字符串名加载类时,但是没有找到具有指定名称的类的定义。(4)加载URL时的异常

需要处理的异常:MalformedURLException,抛出这一异常指示出现了错误的 URL。或者在规范字符串中找不到任何合法协议,或者无法分析字符串。5 系统实现与测试

(1)打开MyEclipse,编译运行程序后,将会看到如下的界面,如图2所示。如果输入的密码或卡号不正确的话就会报下图的错误。

图2 主界面—登陆页面

(2)选择服务界面效果

当输入的密码和卡号正确,单击确定后就会进入到选择服务的界面,如图3所示。然后就可以选择所需要的服务了。

图3 选择服务界面

(3)取款界面,如图4所示。

图4 取款界面

当输入的钱数不是100的倍数或每一次大于5000时就会报图5的错误。

图5 输入错误

当取款时如果超过卡里的余额的话就会报图6的错误。

图6 输入错误2(4)查询余额界面,如图7所示。

图7 查询余额界面

(5)修改密码界面,如下图所示。

经过测试,所有的功能基本上都实现了,而且运行正常。6 课程设计总结

6.1 遇到的问题及解决办法

在此次课程设计中,我遇到了一些问题,如:对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于Java语言,只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误,而且要在短时间内用Java语言来设计一个具体的系统是一个较大的挑战;还有对于正规开发一个系统的流程不熟悉,适应起来比

较慢,编写各个模块相对应的操作时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。

对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,对于书上以及网站上下载的资料中的Java实例必须有清楚的理解,还有就是多跟精通此方面的老师和同学交流,取其精华。对于实际动手能力与系统开发的流程的适应,必须多进行实际的练习与操作,才能有大的进步。6.2 心得体会

在这次的学课程设计中,我主要运用了Java语言的界面设计、异常处理、、Awt控件、Swing控件,输入输出流等,综合运用了Java语言。我深刻感受到了面向对象语言中类库的强大功能,掌握了运用Java中的类实现某些基本功能,并学会了自己查询使用类的方法,为以后的面向对象语言的自学奠定了基础。

通过这两个礼拜的课程设计我真的学到了很多的东西,当然这也和我的同学的帮助是离不开的。好了,下面就谈一下我在这些天的体会吧: 在这次的课程设计中,主要是运用JAVA语言来编写一个小的应用程序,当然还可以用其他的技术来辅助了。在这个小应用程序当中,我用了Java外还用了Swing控件。输入输出流等技术。由于以前学的不是很扎实,而且还有些知识我们都是没有学过的,这就要求我们去查相关的书籍,还有就是和同学之间的交流。正因为这样,才锻炼了我的自学的能力,还有就是加深了我对各个知识点的认识,并且提高了我对专业的学习的兴趣,为我以后的学习打下了基础。此外,我还

感受到了面向对象语言的类库的强大的功能,掌握了运用JAVA中的类实现某些基本功能,并学会了自己查询使用类的方法,也就是要会用API文档,为以后更好的学习面向对象语言奠定了基础。通过将近两周的努力,这次课程设计终于结束了,在这个过程当中,我学到了很多的知识,同时也感谢我的同学的帮助和指导。在以后的学习当中,我会更加努力的学习好专业知识,并将所学的知识用于实践当中去,以便牢固掌握知识。参考文献

[1] 王萌,刘婧,来宾著.JAVA程序设计[M]北京 冶金工业出版社,2004 [2] 黄聪明 精通 JAVA2程序设计[M]北京:清华大学出版社,2004.4 [3] 王文涛,袁海燕 JAVA实用程序设计100例[M]北京:人民邮电出版社,2005.5 [4] 雍俊海 JAVA程序设计[M]北京:清华大学出版社,2006.8 [5] 刘宝林 JAVA程序设计与案例[M]北京:高等教育出版社,2006.11 附录

Account类:

package cn.com.account;/** * 帐户

* 该类为实现客户信息及部分功能 */

public class Account {

private String code = null;//信用卡号 private String name = null;//客户姓名 private String password= null;//客户密码 private double money = 0.0;//卡里金额

public Account(){

}

public Account(String code,String name,String password,double money){

} public String getCode(){//取得卡号

return code;} public String getName(){//取得名字

return name;} /**

* 取得密码 * @return */

public String getPassword(){ } /**

* 重置秘密的方法 */

public void changePassword(String pwd){ }

public double getMoney(){//取得余额

return money;} /**

* 得到剩余的钱的数目 */

private void setBalance(double mon){ } money-= mon;password = pwd;return password;this.code=code;this.name=name;this.password=password;this.money=money;this.code = “123456”;this.password = “123456”;

} /** * 取款设置 * 若成功显示余额 * 不成功显示提示信息 */

public String withdrawMoney(double money){ String str = null;if(money<=0){ str = “取款数目须是正数!”;}else{

if(getMoney()<0){//判断余额是否为负

str=“余额为负数!”;}else if(money<=getMoney()){

if((money%100!=0)||(money>=5000)){//取钱数为100的倍数 str= “取款数目须是一百的整数倍!”;}else{

setBalance(money);str = “取款成功:余额为”+getMoney();} 或不大于5000

}else{

str = “余额不足!”;}

} return str;} /** * 存款设置 * 若成功显示余额 * 不成功显示提示信息 */

public String depositMoney(double money){

} String str = null;

if(money<0){ str =“存款数目须是正数!”;}else{ setBalance(-money);str = “存款成功:余额为”+getMoney();} return str;ChangePassword类:

package cn.com.frameui;import cn.com.account.Account;import javax.swing.*;import java.awt.*;import java.awt.event.*;@SuppressWarnings(“serial”)public class ChangePassword extends Frame implements ActionListener{

Panel panel1 = new Panel();Panel panel2 = new Panel();Panel panel3 = new Panel();Panel panel = new Panel();//TextField tf4,tf5,tf6;JPasswordField tf4,tf5,tf6;Button button;Account act;ChangePassword(String s,Account act){

super(s);this.act=act;

tf4 = new JPasswordField(6);tf5 = new JPasswordField(6);tf6 = new JPasswordField(6);button = new Button(“确定”);button.addActionListener(this);/*建立新密码*/

panel1.add(new Label(“请输入你的旧密码:”));panel1.add(tf4);panel2.add(new Label(“请输入你的新密码:”));panel2.add(tf5);panel3.add(new Label(“请再次输入新密码:”));panel3.add(tf6);panel.add(button);this.add(panel1);this.add(panel2);this.add(panel3);this.add(panel);setLayout(new GridLayout(4,1));setBounds(200,200,300,200);this.setVisible(true);/**

* 窗口事件, 判断窗口是否关闭 */

this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){

System.exit(0);

}

}

} });/**

* 判断事件源,看条件是否成立再修改密码 */

public void actionPerformed(ActionEvent e){ if(e.getSource()==button){ String pwd2,pwd3,pwd4,pwd1;char [] p2,p3,p4;pwd1 = act.getPassword();p2=tf4.getPassword();p3=tf5.getPassword();p4=tf6.getPassword();

pwd2 = new String(p2);pwd3 = new String(p3);pwd4 = new String(p4);

if(pwd2.equals(pwd1)){

if(pwd3.equals(pwd4)){//判断两次输入的新密码是个匹配

act.changePassword(pwd3);//启用新的密码 dispose();JOptionPane.showMessageDialog(this, “修改密码成功!”);new Selection(“选择”,act);//返回选择服务窗口 }else{ this.setVisible(true);dispose();JOptionPane.showMessageDialog(this, “两次输入要修改的密码不同, new Selection(”选择“,act);}

this.setVisible(false);dispose();JOptionPane.showMessageDialog(this, ”输入密码错误,更新密码失更新密码失败!“);}else{ 败!”);

new Selection(“选择”,act);} } }

GetBalance类:

package cn.com.frameui;import cn.com.account.*;import javax.swing.*;

import java.awt.*;import java.awt.event.*;@SuppressWarnings(“serial”)public class GetBalance extends Frame implements ActionListener{

Box baseBox, box1,box2;Button button;TextField tf;Account act;public GetBalance(String s,Account act){//构造函数

super(s);

}

public void actionPerformed(ActionEvent e){

double money;String str = null;/*

* 取款判定 */ this.act=act;button=new Button(“确定”);Panel panel = new Panel();Panel panel1 = new Panel();tf = new TextField(6);this.setLayout(new GridLayout(2,1));panel1.add(new Label(“请输入你想取钱的数目”));panel1.add(tf);panel.add(button);this.add(panel1);this.add(panel);button.addActionListener(this);this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){ }

System.exit(0);});setBounds(200,200,300,200);this.setVisible(true);

if(tf.getText().toString().equals(“")){ str = ”取款数目不能为空!“;}else{

} money = Double.parseDouble(tf.getText().toString());str = act.withdrawMoney(money);

JOptionPane.showMessageDialog(this, str,”取款提示信息“,JOptionPane.PLAIN_MESSAGE);

} this.setVisible(false);new Selection(”选择服务“,act);}

Query类:

package cn.com.frameui;import cn.com.account.*;import java.awt.*;import java.awt.event.*;@SuppressWarnings(”serial“)public class Query extends Frame implements ActionListener{

Button button;Account act;public Query(String s,Account act){//构造函数

super(s);

this.act = act;

button=new Button(”确定“);

Panel panel1 = new Panel();Panel panel = new Panel();panel1.add(new Label(”你的余额为: “ + act.getMoney()));//查询余额的方法

this.add(panel1);this.add(panel);

button.addActionListener(this);panel.add(button);

this.setLayout(new GridLayout(2,1));this.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){

}

}

}

System.exit(0);});setBounds(200,200,200,150);setVisible(true);public void actionPerformed(ActionEvent e){

} if(e.getSource()==button){ dispose();new Selection(”选择服务“,act);//返回选择服务窗口

} Selection类:

package cn.com.frameui;import cn.com.account.*;import java.awt.*;import java.awt.event.*;@SuppressWarnings(”serial“)public class Selection extends Frame implements ActionListener{

Button buttonCUN,buttonQU,buttonCHA,buttonTUI,buttonGAI;Panel p1 = new Panel();Panel p2 = new Panel();Panel p3 = new Panel();Panel p4 = new Panel();Panel p5 = new Panel();Panel p = new Panel();Account act;

public Selection(){} public Selection(String s,Account act){

super(s);this.act=act;this.setLayout(null);this.setLayout(new GridLayout(6,1));p.add(new Label(”请选择你要的服务“));this.add(p);buttonCUN = new Button(” 存 款 “);p1.add(buttonCUN);this.add(p1);buttonQU = new Button(” 取 款 “);p2.add(buttonQU);/*各种服务功能*/

} this.add(p2);buttonCHA = new Button(” 查询余额 “);p3.add(buttonCHA);this.add(p3);buttonTUI = new Button(” 退 出 “);p4.add(buttonTUI);this.add(p4);buttonGAI = new Button(” 修改密码 “);p5.add(buttonGAI);this.add(p5);this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){ System.exit(0);} });buttonCUN.addActionListener(this);buttonQU.addActionListener(this);buttonCHA.addActionListener(this);buttonTUI.addActionListener(this);buttonGAI.addActionListener(this);setBounds(150,150,300,200);setVisible(true);validate();public void actionPerformed(ActionEvent e){

if(e.getSource()==buttonCUN){//存款

dispose();new SetBalance(”存款款“,act);

}else if(e.getSource()==buttonQU){//取款

dispose();new GetBalance(”取款“,act);

}else if(e.getSource()==buttonCHA){//查询余额

dispose();new Query(”查询余额“,act);

}else if(e.getSource()==buttonTUI){//退出

System.exit(0);dispose();

}

} }else if(e.getSource()==buttonGAI){//修改密码

dispose();new ChangePassword(”修改密码“,act);

} SetBalance类:

package cn.com.frameui;import cn.com.account.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;@SuppressWarnings(”serial“)public class SetBalance extends Frame implements ActionListener{

Box baseBox, box1,box2;Button button;TextField tf;Account act;public SetBalance(String s,Account act){//构造函数

super(s);

}

public void actionPerformed(ActionEvent e){ this.act=act;button=new Button(”确定“);Panel panel = new Panel();Panel panel1 = new Panel();tf = new TextField(6);this.setLayout(new GridLayout(2,1));panel1.add(new Label(”请输入你想存款的数目“));panel1.add(tf);panel.add(button);this.add(panel1);this.add(panel);button.addActionListener(this);this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){ }

System.exit(0);});setBounds(200,200,300,200);this.setVisible(true);

double money;String str = null;if(tf.getText().toString().equals(”“)){ str = ”存款数目不能为空!“;}else{

} money = Double.parseDouble(tf.getText().toString());str = act.depositMoney(money);

JOptionPane.showMessageDialog(this, str,”存款提示信息“,JOptionPane.INFORMATION_MESSAGE);

} dispose();this.setVisible(false);new Selection(”选择服务“,act);} WindowBox类:

package cn.com.frameui;import cn.com.account.Account;import javax.swing.*;

import java.awt.*;import java.awt.event.*;/**

* 登陆页面首窗口 */

@SuppressWarnings(”serial“)public class WindowBox extends Frame implements ActionListener{

box1= Box.createVerticalBox();box1.add(new Label(”请输入您的卡号“));//输入卡号 box1.add(Box.createVerticalStrut(8));box1.add(new Label(”请输入您的密码“));//输入密码 box2=Box.createVerticalBox();Box baseBox,box1,box2;TextField tf1;JPasswordField tf2;Button button1;Button button2;public WindowBox(String s){//构造方法

super(s);tf1 = new TextField(6);tf2 = new JPasswordField(6);

} box2.add(tf1);

box2.add(Box.createVerticalStrut(8));box2.add(tf2);

baseBox=Box.createHorizontalBox();baseBox.add(box1);baseBox.add(Box.createHorizontalStrut(10));baseBox.add(box2);add(baseBox);button1= new Button(”确定“);//加入按钮 button1.addActionListener(this);add(button1);

button2 = new Button(”退卡“);//退卡按钮 button2.addActionListener(this);add(button2);setLayout(new FlowLayout());/*监听器*/

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){ System.exit(0);} });setBounds(120,125,300,200);setVisible(true);public void actionPerformed(ActionEvent e){ Account act;act=new Account(”000000“,”HuangHuai“,”123456“,50000);//初始化

/*选择各种服务*/

if(e.getSource()== button1){ String number1,number2;//输入的两个卡号和密码的变量 number1=tf1.getText().toString();number2 = new String(tf2.getPassword());

/*判断两次输入的卡号和密码是否正确*/

if((act.getCode().equals(number1))&&(act.getPassword().equals(num dispose();ber2))){ new Selection(”选择服务“,act);}else{

JOptionPane.showMessageDialog(this, ”密码或帐号错误!“,”账户提示信息“,JOptionPane.ERROR_MESSAGE);dispose();

new WindowBox(”ATM“);} }

if(e.getSource()==button2){

System.exit(0);

dispose();//退出

} } }

package cn.com.test;import cn.com.frameui.*;public class ATM { /**

* 主测试程序

* @param args

*/

public static void main(String[] args){

篇6:ATM管理系统设计说明书

梁小宇 潘贵敦 钟晓建 马亲民

华中师范大学物理系(430079)

摘要:本文讨论用ADSL作宽带接入设备,另一侧接局域网用户(可以是有线或无线),实现小型办公室和家庭(SOHO)共享带宽上网的网关设计的一个实例:在该网关中,硬件上采用嵌入式体系结构,用AMD公司的ElanSC520作协议处理器和网络处理器,ADSL模块部分采用Itex公司的Apollo3芯片组。我们对该ADSL SOHO网关电路及其功能进行了总体概述。

关键词:ADSL SOHO

网关  ElanSC520  Apollo3芯片组

a Design Example of ADSL

SOHOGateway Based on ATM

Liang Xiaoyu   Pan Guidun   Zhongxiaojian   Ma qinming

Central China Normal University Physics Department (430079)

Abstract: In this article, we discussed a design example of ADSL SOHO gateway based on ATM to share the internet bandwith,in which we use ADSL as the broadband accessing equipment and on the other end we use LAN as the network model. We adopted the embedded system as the hardware solution by using AMD ElanSC520 as the network and protocol processor,using Itex Apollo3 chipset as the ADSL module.We analyse the whole circuit of the ADSL SOHO Gateway and it’s function.

Keywords: AD

SL SOHO Gateway   ElanSC520   Apollo3 chipset

1引言

智能家庭网络是信息时代带给人们的又一个高科技产物。它借助现有的计算机网络技术,将家庭内各种家电和设备连网,实现一种SOHO(Small Office Home Office)网,通过网络为人们提供各种丰富、多样化、个性化、方便、舒适、安全和高效的服务。实现家庭内部信息与家庭外部信息的交换,无疑是家庭连网的目的所在。然而随着上网需求的增加,带宽和IP地址不足的问题更显突出。而信息时代的来临,使得家庭或办公室的个人计算机都想上网,信息及档案共享也成了时势所趋。无疑我们需要解决带宽和IP地址不足的问题。IP地址不足的问题可以通过一个网关来实现代理,使局域网内用户共享一个IP;带宽的解决也已经有了很好的解决办法,这就是ADSL(不对称数字用户环路)技术,利用电话线上高于话音频带的带宽(4K~

1.1MHz),采用离散多音频调制来调制高速数字信号(传统的Modem是用话音频带来调制数字信号的),下行速率可达8Mbit/s,上行可达1.5Mbit/s。这样我们将各种技术结合起来,这就形成了我们的ADSL SOHO 网关,既解决了多用户上网IP地址不足的问题,又大大提高了上网速度,还可以解决SOHO 网内用户的安全问题。

ADSL网关采用Itex的Apollo 3, ADSL PCI解决方案作Internet的接入部分,另一侧用以太网或无线局域网接多用户,可以广泛应用于家庭、小型办公室的接入,实现灵活的`组网方式。

2 SOHO网关硬件体系设计

我们设计实现的网关硬件上采用了嵌入式体系结构,用AMD公司的ElanSC520作协议处理器和网络处理器,ADSL模块部分采用了Itex公司的Apollo3芯片组。整个网关对外有三个接口:与ADSL线路即电话线的RJ11接口;与以太网RJ45接口;与无线局域网的接口,这部分接插无线网卡,再与无线局域网中的接入访问点AP(Access Point)相联系。整个系统结构框图如图1所示,按功能主要分成四个相对独立的模块:520模块、ADSL

模块(即Apollo3芯片组)、8029模块、PCMCIA模块。信号的流程是由电话线输入该系统,由ADSL模块处理,由电话线进来的是模拟信号,Apollo3芯片组完成A/D,D/A变换,采用FFT/IFFT作DMT和卷积编码调制,既实现了高带宽利用率,又保证了传输的低误码特性。结果通过PCI BUS送520进行协议处理,将ATM 信元转换成 Ethernet帧,然后送8029或PCMCIA分别以802.3

上一篇:应聘外企面试时请改掉你的陋习习惯下一篇:阿里巴巴企业社会责任研究