毕业论文-Java模拟ATM系统_第1页
毕业论文-Java模拟ATM系统_第2页
毕业论文-Java模拟ATM系统_第3页
毕业论文-Java模拟ATM系统_第4页
毕业论文-Java模拟ATM系统_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

太原理工大学毕业设计(论文)用纸绪论1.1ATM概述近年来,随着Internet网络的迅速发展,其在现实生活中应用很广泛。互联网给现实生活带来很大的方便。如今,人们的交流已越来越多,对信息传送的要求更严格,“信息高速公路”也就应运而生了。其中,Internet已拥有了数千万个用户,通过Internet我们就可以与全世界来联网。对于当中各种各样的信息,人们都可以通过网络来共享和使用。比如ATM自动取款系统,我们可以把它当作一个虚拟的市场销售中心,每个人都可以在这个网络上享受所提供的服务,这样既节约了时间,又满足了需求。尤其是人们的生活速度越来越快,没有大量的时间花费在银行等待长时间的排队。ATM银行取款系统的出现,使这一问题迎刃而解。自动取款机又称ATM,是AutomaticTellerMachine的缩写,又称自动柜员机,是指银行在不同地点设置一种小型机器,利用一张信用卡大小的胶卡上的磁带记录客户的基本户口资料(通常就是银行卡),让客户可以透过机器进行提款、存款、转帐等银行柜台服务,尽管大多数客户都把这种自助机器称为提款机。自动存取款机是一种客户进行自助服务的电子化设备,它具有存款、取款、卡卡转账、查询余额、修改密码等功能,是一种新型的银行电脑终端。它是一种高度精密的机电一体化装置,利用磁性代码卡或智能卡实现金融交易的自助服务系统。1.2选题意义随着Internet网络的迅速发展,作为电子商务的ATM自动取款系统以其方便、快捷和高效的优势,逐步成为新兴电子商务的经营模式和理念,人们已经不再只是满足于低效率的排队等待,而是渴望能够充分享受网络所带来的更多的便利。ATM自动取款系统恰恰适应了如今的快节奏生活。本文以实际ATM取款机应用为背景,阐述了系统开发过程的开发方法、系统分析以及一般步骤。2ATM系统开发方法2.1系统开发方法概述结构化系统开发方法(StructuredSystemAnalysisAndDesign,SSA&D,)又称结构化生命周期法,是系统分析员、软件工程师、程序员以及最终用户按照用户至上的原则,自顶向下分析与设计和自底向上逐步实施的建立计算机信息系统的一个过程,是组织、管理和控制信息系统开发过程的一种基本框架。是用系统的思想和系统工程的方法,按照用户至上的原则结构化、模块化,自顶向下对系统进行分析与设计。步骤如下:(1)先将整个信息系统开发过程划分为若干个相对独立的阶段(系统规划、系统分析、系统设计、系统实施等);(2)在前三个阶段坚持自顶向下地对系统进行结构化划分;(3)在系统调查和理顺管理业务时,应从最顶层的管理业务入手,逐步深入至最基层;(4)在系统分析、提出目标系统方案和系统设计时,应从宏观整体考虑入手,先考虑系统整体的优化,然后再考虑局部的优化问题;(5)在系统实施阶段,则坚持自底向上地逐步实施,即组织人员从最基层的模块做起(编程),然后按照系统设计的结构,将模块一个个拼接到一起进行调试,自底向上、逐步地构成整个系统。其主要特点为:(1)自顶向下整体地进行分析与设计和自底向上逐步实施的系统开发过程:在系统规划、分析与设计时,从整体全局考虑,自顶向下地工作;在系统实施阶段则根据设计的要求,先编制一个个具体的功能模块,然后自底向上逐步实现整个系统。(2)用户至上是影响成败的关键因素,整个开发过程中,要面向用户,充分了解用户的需求与愿望。(3)符合实际,客观性和科学化,即强调在设计系统之前,深入实际,详细地调查研究,努力弄清实际业务处理过程的每一个细节,然后分析研究,制定出科学合理的目标系统设计方案。(4)严格区分工作阶段,把整个开发过程划分为若干工作阶段,每一个阶段有明确的任务和目标、预期达到的工作成效,以便计划和控制进度,协调各方面的工作。前一阶段的工作成果是后一阶段的工作依据。(5)充分预料可能发生的变化:环境变化、内部处理模式变化、用户需求变化。(6)开发过程工程化,要求开发过程的每一步都要按工程标准规范化,工作文体或文档资料标准化。系统开发工作的自动化、计算机化是提高系统开发效率与质量的重要途径。计算机辅助软件工程(简记为CASE)也是当前信息系统领域和计算机应用领域的热门话题。CASE技术的目标是实现系统开发生命周期内各阶段工作基于计算机的自动化。这将导致系统开发工作的根本变化。2.2该系统开发方法比较各种开发方法的特点,结合银行取款系统的实际情况,整个系统采用结构化生命周期法,以原型法和面向对象的开发方法作为辅助,即系统总体上采用结构化生命周期法进行系统分析和系统设计,系统实施等步骤采用面向对象方法。本系统开发工具使用的是基于Java的可扩展开发平台的Eclipse。2.3开发工具eclipse介绍Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。2.3.1主要组成Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部分组成——EclipsePlatform、JDT、CDT和PDE。JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,EclipsePlatform则是一个开放的可扩展IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发工具的基础。EclipsePlatform允许工具建造者独立开发与他人工具无缝集成的工具从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。2.3.2软件开发包EclipseSDK(软件开发者包)是EclipsePlatform、JDT和PDE所生产的组件合并,它们可以一次下载。这些部分在一起提供了一个具有丰富特性的开发环境,允许开发者有效地建造可以无缝集成到EclipsePlatform中的工具。EclipseSDK由Eclipse项目生产的工具和来自其它开放源代码的第三方软件组合而成。Eclipse项目生产的软件以GPL发布,第三方组件有各自自身的许可协议。3系统分析系统分析方法是指把要解决的问题作为一个系统,对系统要素进行综合分析,找出解决问题的可行方案的咨询方法。3.1系统分析方法概述系统分析是一种研究方略,它能在不确定的情况下,确定问题的本质和起因,明确咨询目标,找出各种可行方案,并通过一定标准对这些方案进行比较,帮助决策者在复杂的问题和环境中作出科学抉择。系统分析方法的具体步骤包括:限定问题、确定目标、调查研究收集数据、提出备选方案和评价标准、备选方案评估和提出最可行方案。系统分析的目标是明确系统开发的目标和用户信息需求,提出系统的逻辑方案。为系统设计做好准备。3.1.1限定问题所谓问题,是现实情况与计划目标或理想状态之间的差距。系统分析的核心内容有两个:其一是进行“诊断”,即找出问题及其原因;其二是“开处方”,即提出解决问题的最可行方案。所谓限定问题,就是要明确问题的本质或特性、问题存在范围和影响程度、问题产生的时间和环境、问题的症状和原因等。限定问题是系统分析中关键的一步,因为如果“诊断”出错,以后开的“处方”就不可能对症下药。在限定问题时,要注意区别症状和问题,探讨问题原因不能先入为主,同时要判别哪些是局部问题,哪些是整体问题,问题的最后确定应该在调查研究之后。通过亲身体验总结各银行ATM提款机界面流程,得到本系统开发的主要流程界面(主要功能取款、转账、查询、修改密码等)。3.1.2确定目标系统分析目标应该根据客户的要求和对需要解决问题的理解加以确定,如有可能应尽量通过指标表示,以便进行定量分析。对不能定量描述的目标也应该尽量用文字说明清楚,以便进行定性分析和评价系统分析的成效。3.1.3调查研究,收集数据调查研究和收集数据应该围绕问题起因进行,一方面要验证有限定问题阶段形成的假设,另一方面要探讨产生问题的根本原因,为下一步提出解决问题的备选方案做准备。调查研究常用的有四种方式,即阅读文件资料、访谈、观察和调查。收集的数据和信息包括事实(facts)、见解(opinions)和态度(attitudes)。要对数据和信息去伪存真,交叉核实,保证真实性和准确性。3.1.4提出方案和评价标准通过深入调查研究,使真正有待解决的问题得以最终确定,使产生问题的主要原因得到明确,在此基础上就可以有针对性地提出解决问题的备选方案。备选方案是解决问题和达到咨询目标可供选择的建议或设计,应提出两种以上的备选方案,以便提供进一步评估和筛选。为了对备选方案进行评估,要根据问题的性质和客户具备的条件。提出约束条件或评价标准,供下一步应用。3.1.5方案评估根据上述约束条件或评价标准,对解决问题备选方案进行评估,评估应该是综合性的,不仅要考虑技术因素,也要考虑社会经济等因素,评估小组应该有一定代表性,除咨询项目组成员外,也要吸收客户组织的代表参加。根据评估结果确定最可行方案。3.1.6提交可行方案最可行方案并不一定是最佳方案,它是在约束条件之内,根据评价标准筛选出的最现实可行的方案。如果客户满意,则系统分析达到目标。如果客户不满意,则要与客户协商调整约束条件或评价标准,甚至重新限定的问题,开始新一轮系统分析,直到客户满意为止。3.2系统功能结构图结构化设计方法使用的描述方式是系统结构图,也称结构图或控制结构图。它表示了一个系统(或功能模块)的层次分解关系,模块之间的调用关系,以及模块之间数据流和控制流信息的传递关系,它是描述系统物理结构的主要图表工具。系统结构图是对软件系统结构的总体设计的图形显示。在需求分析阶段,已经从系统开发的角度出发,把系统按功能逐次分割成层次结构,使每一部分完成简单的功能且各个部分之间又保持一定的联系,这就是功能设计。在设计阶段,基于这个功能的层次结构把各个部分组合起来成为系统。处理方式设计:确定为实现软件系统的功能需求所必需的算法,评估算法的性能。确定为满足软件系统的性能需求所必需的算法和模块间的控制方式(性能设计)。确定外部信号的接收发送形式。图3-1ATM系统功能结构图该系统主要实现银行卡用户的存取款,以及进行一些简单的查询和取款业务,同时能够在系统里面进行客户密码的修改,实现简单的机器与客户交互。

3.3系统主要处理流程图3.3.1系统办理所有业务流程图选择界面(查询、取款、转帐、修改密码、取消)登录界面选择界面(查询、取款、转帐、修改密码、取消)登录界面(卡号、密码、验证码、取消等选项)待机界面(按确定键进入登录界面)密码错误,请从新输入!密码错误,请从新输入!修改密码查询取款修改密码查询取款转帐交易完成交易完成点击退出点击退出谢谢使用,再见!谢谢使用,再见!图3-2业务流程图该系统主要实现银行卡用户的存取款,以及进行一些简单的查询和取款业务,同时能够在系统里面进行客户密码的修改,实现简单的机器与客户交互。3.3.2用户登录流程图图3-3用户登录流程图该模块主要实现银行卡用户的登录流程,登录模块时需要进行账号和密码的验证,直到账号和密码同时正确才能登录成功。3.3.3用户修改密码流程图图3-4用户修改密码流程图该模块主要实现银行卡账户的密码修改功能,在密码修改过程中需要验证新密码和旧密码的输入是否正确,直到旧密码输入正确,两次输入新密码一致且和旧密码不相同才能修改成功。3.3.3用户转账流程图图3-5用户转账流程图通过该功能用户可以选择给对方转账,只要输入对法的卡号的所转入的金额就可以实现转账功能。但是前提是需要与数据库中的账号进行余额匹配,只有在输入的所转入的金额小于自己账号的余额时才能实现转账成功,如果输入的所转金额大于自己的账号余额,那么就会出现错误,此部分的代码设计中使用了人为的异常抛出功能,将出现的所转金额大于余额时的异常抛出,从而提示用户选择其他的操作来阻止错误的发生。4系统设计4.1系统设计概述这个阶段的任务是设计软件系统的模块层次结构,设计数据库的结构以及设计模块的控制流程,其目的是明确软件系统"如何做"。这个阶段又分两个步骤:概要设计和详细设计。在系统分析的基础上,设计出能满足预定目标的系统的过程。系统设计内容主要包括:确定设计方针和方法,将系统分解为若干子系统,确定各子系统的目标、功能及其相互关系,决定对子系统的管理体制和控制方式,对各子系统进行技术设计和评价,对全系统进行技术设计和评价等。系统设计通常应用两种方法:一种是归纳法,另一种是演绎法。应用归纳法进行系统设计的程序是:首先尽可能地收集现有的和过去的同类系统的系统设计资料;在对这些系统的设计、制造和运行状况进行分析研究的基础上,根据所设计的系统的功能要求进行多次选择,然后对少数几个同类系统作出相应修正,最后得出一个理想的系统。演绎法是一种公理化方法,即先从普遍的规则和原理出发,根据设计人员的知识和经验,从具有一定功能的元素集合中选择能符合系统功能要求的多种元素,然后将这些元素按照一定形式进行组合(见系统结构),从而创造出具有所需功能的新系统。在系统设计的实践中,这两种方法往往是并用的。4.1.1系统设计原则(1)阶段开发原则系统框架和数据结构全面设计,具体功能实现分阶段进行。网站的建设过程可以采取以下三期:第一期工程搭建网站的基本构架,实现电子商务网的大部分功能,初步实现网上交易;第二期工程实现网上竞价系统的全部功能;第三期工程实现网站在线的BtoB交易。(2)易用性原则方便上网客户浏览和操作,最大限度地减轻后台管理人员的负担,做到部分业务的自动化处理。(3)业务完整性原则对于业务进行中的特殊情况能够做出及时、正确的响应,保证业务数据的完整性。(4)业务规范化原则在系统设计的同时,也为将来的业务流程制定了较为完善的规范,具有较强的实际操作性。(5)可扩展性原则系统设计要考虑到业务未来发展的需要,要尽可能设计得简明,各个功能模块间的耦合度小,便于系统的扩展。如果存在旧有的数据库系统,则需要充分考虑兼容性。4.1.2系统设计的方法系统设计的方法主要包括结构化生命周期法(又称瀑布法)、原型化方法(迭代法)、面向对象方法。按时间过程来分,开发方法分为生命周期法和原型法,实际上还有许多处于中间状态的方法。原型法又按照对原型结果的处理方式分为试验原型法和演进原型法。试验原型法只把原型当成试验工具,试了以后就抛掉,根据试验的结论做出新的系统。演进原型法则把试好的结果保留,成为最终系统的一部分。按照系统的分析要素,可以把开发方法分为三类:1、面向处理方法(ProcessingOriented,简称PO);2、向数据方法(DataOriented,简称DO);3、向对象的方法(ObjectOriented,简称OO)。4.2系统总体结构设计根据业务流程图转化为软件的体系结构,进而用软件结构图建立物理模型,得系统活动图,如下:图4-1系统结构图该图按照实际的ATM系统顺序进行大体设计,分为三大层。从储户的登入进入主界面,在该界面中设计了ATM的主要模块功能,如取款、查询、修改密码以及转账业务,用户可以进入想要实现的模块中进行相关业务的处理;同时可以在任何一个界面选择退出系统,来终止错误的操作。此图根据业务流程图转化为软件的体系结构,进而用软件结构图建立物理模型,软件人员根据物理模型对软件进行系统总体结构设计,继而细化为对各个模块的代码实现,系统结构图是对软件系统结构的总体设计的图形显示。在详细阶段确定为满足软件系统的性能需求所必需的算法和模块间的控制方式(性能设计)。确定外部信号的接收发送形式。在需求分析阶段,已经从系统开发的角度出发,把系统按功能逐次分割成层次结构,使每一部分完成简单的功能且各个部分之间又保持一定的联系,这就是功能设计。在设计阶段,基于这个功能的层次结构把各个部分组合起来成为系统。图4-2系统活动图4.3系统详细设计4.3.1系统详细设计概述对概要设计的一个细化,就是详细设计每个模块实现算法,所需的局部结构。详细设计的实现根据结构程序设计原理,将每个模块的功能用相应的标准语句表示出来。4.3.2基本任务为每个模块进行详细的算法设计。用某种图形、表格、语言等工具将每个模块处理过程的详细算法描述出来。为模块内的数据结构进行设计。对于需求分析、概要设计确定的概念性的数据类型进行确切的定义。为数据结构进行物理设计,即确定数据库的物理结构。物理结构主要指数据库的存储记录格式、存储记录安排和存储方法,这些都依赖于具体所使用的数据库系统。其他设计:根据软件系统的类型,还可能要进行以下设计:①代码设计。为了提高数据的输入、分类、存储、检索等操作,节约内存空间,对数据库中的某些数据项的值要进行代码设计。②输入/输出格式设计。③人机对话设计。对于一个实时系统,用户与计算机频繁对话,因此要进行对话方式、内容、格式的具体设计。编写详细设计说明书。(6)评审。对处理过程的算法和数据库的物理结构都要评审。4.4系统逻辑设计数据库设计指对系统所采用的数据模式、子模式、应用程序、数据库等根据用户的具体要求进行分析和设计。它也是管理信息系统设计的重要组成部分。数据库设计的基本原则是尽可能提高数据组织的相对独立性,简化其结构,即用规范化方法设施数据存储的结构,提高数据的可维护性、完整性、一致性。通过收集和分析用户需求,确定了数据库要保存的信息,我将此次数据库设计为二个如下所示表的设计如下:表4-1用户信息设计表1、客户表(user)CardID字段信息字段名称类型宽度小数位数空特性姓名unamevarchar30性别usexvarchar20身份证号uidvarchar30N卡号ucnovarchar30N用户信息表定义了用户的姓名、性别、身份证号码和卡号,其中身份证号是主键,用于在查询卡信息的时候,从数据库中提取出相关数据显示在用户的交互界面,方便用户查看相关信息。而卡号是账户信息的表中的主键,在此表中属于外键,定义了用户表和账户信息表的关系。表4-2账户信息设计表2、账户表(card)CardID字段信息字段名称类型宽度小数位数空特性卡号ucnovarchar30N账户余额cbalint20N密码cpwdint20N账户信息设计表主要设计了账户的卡号,账户余额以及密码等字段,其中卡号是该表的主键。数据库设计如下:1.名字:用户登录信息描述:助记词登录时,用于确认身份定义:登录信息=帐号+密码2.名字:修改密码信息描述:用户确认修改后的信息定义:修改密码信息=原密码+新密码+确认密码3.名字:转账信息描述:用户所要转入账户的信息定义:转账信息=用户账号余额+对方账号+转入金额4.名字:查询余额信息描述:用户需要清楚的知道自己账户中的信息定义:查询余额信息=用户余额4.5界面模块设计用户界面设计目前已成为评价软件质量的一条重要指标,所谓用户界面是批软件系统与用户交互的接口,通常包括输入、输出设计、人机对话的界面设计。4.5.1首页设计的窗体实现当插入现金卡之后出现如上欢迎界面,系统出现选择确定和取消的登入方式,点击按钮之后(确定)出现后对话框://首页设计窗体classPanel01extendsJPanel{JLabellabel1,label2,label3,label4;JPasswordFieldtextA;JTextFieldtextC;staticJTextFieldtextB;chart[]=newchar[4];Panel01(){setLayout(newGridLayout(4,4));for(inti=0;i<4;i++){ t[i]=(char)(Math.random()*26+'A'); }Stringmm=newString(t);label2=newJLabel("请输入卡号:");label1=newJLabel("请输入密码:");label3=newJLabel();label4=newJLabel("请输入验证码:");add(textB);add(textA);add(textC);}}classPanel02extendsJPanel{JButtonbutton1,button2;Panel02(){setLayout(newGridLayout(3,6));button1=newJButton("确定");button2=newJButton("取消");}}该代码对首页的组件进行了设计,用户在使用过程需要将卡号,密码和验证码都输入正确才能进入下一步的操作,如果其中一个出现问题则不能成功登陆,也不能实现后面相对应的操作。//首页添加监听器并添加actionclassClient00extendsJFrameimplementsActionListener{publicvoidactionPerformed(ActionEvente){char[]passwords=panel1.textA.getPassword();Stringpassword=newString("1234");//此处设置账号123456的初始密码为1234,每输入一次都有提示,在连续输入三次不正确后系统自动退出。if(e.getActionCommand().equals("确定"))if(panel1.textC.getText().equals(panel1.label3.getText())){right();}elseif(e.getActionCommand()=="取消"){ this.setVisible(false); newClient08(""); }}publicvoidright(){if(panel1.textA.getText().equals("")||panel1.textB.getText().equals("")){ JOptionPane.showMessageDialog(frame,"请输入账号、密码!");return;}Stringurl="jdbc:mysql://localhost:3306/atm?useUnicode=true&characterEncoding=gbk"; //定义与连接数据库的url try{ Class.forName("com.mysql.jdbc.Driver"); //加载mysql数据库驱动 Connectioncon=DriverManager.getConnection(url,"root","123"); //连接URL为jdbc:mysql//服务器地址/数据库名,后面的2个参数分别是登陆用户名和密码 Statementsql=con.createStatement();Stringql=panel1.textB.getText(); ResultSetrs=sql.executeQuery("selectcpwdfromcardwhereucno="+ql+"");在此时输入的数据会与数据库进行数据匹配,因此可能会出现错误的信息,那么要对错误的信息进行处理,于是针对输入密码的错误次数设置了处理过程,相应的处理过程写成下面的代码:if(rs.next()){Stringqerycpwd=panel1.textA.getText();Strings=rs.getString(1);if(qerycpwd.equals(s)){ JOptionPane.showMessageDialog(frame,"连接成功!"); this.setVisible(false); newClient01("用户取款系统");}else{ if(i!=2){ i++; j=3-i;JOptionPane.showMessageDialog(frame,"密码有误!你还有"+j+"次机会,请你再仔细想想.");panel1.textA.setText("");} else{ JOptionPane.showMessageDialog(frame,"对不起,你输入的密码次数达三次,下次再见。"); System.exit(0); }}con.close();frame.repaint();}else{ JOptionPane.showMessageDialog(null,"该用户不存在,重新输入!","警告!",JOptionPane.YES_NO_OPTION);return;}}图4-3登录界面登录模块采用的是密码、验证码的方式,需要用户输入卡号、密码和验证码然后点击确认进行验证登录,程序将根据输入卡号查找对应密码,第一如果账号找到则继续下一步,在这里我用了输入验证码的方式,输入正确则继续,程序系统将根据卡号调用后台数据库查找与卡号对应的密码并与用户输入的密码相对比。密码正确则继续,否则当输入的错误密码次数达到三次时,系统将提示你需要与前台服务员取得联系。第二如果没有找到,则提示输入账号错误。4.5.2查询信息页面的设计//查询余额页面窗体设计classPanel06extendsJPanel{JLabellabel1,label2;JTextFieldtextA;JFrameframe;Panel06(){setLayout(newGridLayout(4,4));label1=newJLabel("你的余额为:");textA=newJTextField(6);}图4-4查询模块在查询模块中,将通过用户所使用的账户账号来进行余额的查询,将显示账户的实际余额,点击“查询”按钮,在程序中通过按钮的Action方法进行方法的调用,就可以实现查询余额的功能并且把查询到的账户余额显示在此界面上。当用户点击“继续”时,程序则返回到初始主界面。classPanel07extendsJPanel{JButtonbutton1,button2;Panel07(){setLayout(newGridLayout(3,6));button1=newJButton("继续");button2=newJButton("查询");classClient03extendsJFrameimplementsActionListener{Panel06panel1;Panel07panel2;publicvoidactionPerformed(ActionEvente){if(e.getActionCommand().equals("继续")){this.setVisible(false);newClient01("选择服务种类");}elseif(e.getActionCommand()=="查询") showcbal();}publicvoidshowcbal(){ Stringurl="jdbc:mysql://localhost:3306/atm"; //定义与连接数据库的url try{ Class.forName("com.mysql.jdbc.Driver"); //加载mysql数据库驱动 Connectioncon=DriverManager.getConnection(url,"root","123"); //连接URL为jdbc:mysql//服务器地址/数据库名,后面的2个参数分别是登陆用户名和密码 ResultSetrs=sql.executeQuery("selectcbalfromcardwherecno="+ql+"");if(rs.next()){Stringucbal=rs.getString(1);}con.close();}catch(Exceptionex){ex.printStackTrace();}}}图4-5查询卡信息模块这个功能用来显示账户的基本信息包括用户名、性别、身份证、卡号等,点击查询按钮后系统将根据与输入的卡号相一致的字段信息查询后台数据库进行比较,并将匹配的信息显示在此页面上。当点击“取消”按钮时,系统将返回到初始主界面。4.5.3修改密码界面的设计//修改密码页面窗体设计Panel10(){setLayout(newGridLayout(10,6));label1=newJLabel("请输入原密码:");label2=newJLabel("请输入新密码:");label3=newJLabel("再次确认密码:");button1=newJButton("确定");button2=newJButton("取消");修改密码过程需要对数据库进行操作,首先要找到该账户的账户信息进行匹配,只有输入的原密码正确了才能进行下面的修改,而且两次输入的新密码必须一致,如果不一致也不能进行修改,如果都正确则需要更新数据库中已经存入的密码。publicvoidupdateM(){ Stringurl="jdbc:mysql://localhost:3306/atm"; //定义与连接数据库的url try{Class.forName("com.mysql.jdbc.Driver");//加载mysql数据库驱动Connectioncon=DriverManager.getConnection(url,"root","123");//连接URL为jdbc:mysql//服务器地址/数据库名,后面的2个参数分别是登陆用户名和密码Statementsql=con.createStatement();Stringcno=Panel01.textB.getText(); ResultSetrs=sql.executeQuery("selectcpwdfromcardwherecno="+cno+"");}classbankSystem05{ publicstaticvoidmain(String[]args){ newClient02("修改密码服务"); }}图4-6修改密码模块这个模块需要用户输入旧密码后,再次输入两次新密码来进行确认,然后点击“确定”按钮进行密码的修改,修改成功后将给出提示信息,其中还考虑到了一些用户可能的输入错误问题,在程序设计时我做出了一些异常的判断和处理,比如空输入,输入两次新密码不一致以及原密码输入不正确等问题。修改更新密码的完成,依然采用的是“确定”按钮控件的Action事件来进行完成。4.5.4转账页面的窗体设计//转账页面窗体设计Panel08(){setLayout(newGridLayout(4,4));label1=newJLabel("输入预转账号:");label2=newJLabel("输入预转金额:");}classClient04extendsJFrameimplementsActionListener{publicvoidactionPerformed(ActionEvente){if(e.getActionCommand().equals("确定")){zhuanzhang();//程序根据输入账号调用数据库,修改对应金额数。this.setVisible(false);newClient01("用户取款系统");}publicvoidzhuanzhang(){if(panel1.textA.getText().equals("")||panel1.textB.getText().equals("")){ JOptionPane.showMessageDialog(frame,"请输入欲转账号、金额!");return;}Stringurl="jdbc:mysql://localhost:3306/atm"; //定义与连接数据库的url try{Class.forName("com.mysql.jdbc.Driver");//加载mysql数据库驱动Connectioncon=DriverManager.getConnection(url,"root","123");//连接URL为jdbc:mysql//服务器地址/数据库名,后面的2个参数分别是登陆用户名和密码 ResultSetss=sql.executeQuery("selectcnofromcardwherecno="+cno+"");intshbal=Integer.parseInt(ybal);if(ss.next()){ ResultSetrs=sql.executeQuery("selectcbalfromcardwherecno="+ql+"");转账时用户将根据需要自己输入预转账号和预转金额,这个模块的设计其实质是具体的SQL语句操作,系统根据输入的账号查找与之对应的用户数据表,从而根据操作修改金额。第一,系统首先根据本账号,后台数据库进行本卡金额与输入的金额对比,如果找到且在金额允许范围,就提示转账成功,并更新本账号的数据信息。第二,如果没有找到输入的预转账号,则提示没有该用户,并跳转回来重新输入预转账号。if(rs.next()){Stringquerybal=rs.getString(1);intqybal=Integer.parseInt(querybal);if(shbal<qybal){intnewcbal=qybal-shbal;intnewcbal2=qybal+shbal;Stringnewbal=String.valueOf(newcbal);Stringnewbal2=String.valueOf(newcbal2);sql.executeUpdate("updatecardsetcbal='"+newbal+"'wherecno="+ql+"");sql.executeUpdate("updatecardsetcbal='"+newbal2+"'wherecno="+cno+""); JOptionPane.showMessageDialog(frame,"操作已成功,谢谢使用!");this.setVisible(false);newClient01("用户取款系统");}}con.close();frame.repaint();}}图4-7转账业务模块这个模块中,用户将根据需要自己输入预转账号和预转金额,这个模块的设计其实质是具体的SQL语句操作,系统根据输入的账号查找与之对应的用户数据表,从而根据操作修改金额。第一,系统首先根据本账号,后台数据库进行本卡金额与输入的金额对比,如果找到且在金额允许范围,就提示转账成功,并更新本账号的数据信息。第二,如果没有找到输入的预转账号,则提示没有该用户,并跳转回来重新输入预转账号。4.5.5取款界面的窗体设计//取款页面窗体设计classClient02extendsJFrameimplementsActionListener{Panel04panel1;Panel05panel2;JFrameframe;publicvoidactionPerformed(ActionEvente){if(e.getActionCommand()=="100"){this.setVisible(false);qukuan();//程序根据输入金额和输入卡号,修改数据库。newClient01("用户取款系统");}elseif(e.getActionCommand()=="500"){ this.setVisible(false); newClient01("用户取款系统"); }//这里当点击取款金额200时,程序返回上层操作界面。}publicvoidqukuan(){ Stringurl="jdbc:mysql://localhost:3306/atm"; //定义与连接数据库的url try{ Class.forName("com.mysql.jdbc.Driver"); //加载mysql数据库驱动 Connectioncon=DriverManager.getConnection(url,"root","123"); //连接URL为jdbc:mysql//服务器地址/数据库名,后面的2个参数分别是登陆用户名和密码 if(rs.next()){Stringmm=rs.getString(1);intnn=Integer.parseInt(mm);Stringqerycbal=panel1.button1.getActionCommand();intquerybal=Integer.parseInt(qerycbal);取款时用户将根据需要自己输入取款金额,这个模块的设计其实质是具体的SQL语句操作,系统根据输入的金额查找与之对应的用户数据表,从而根据操作修改金额。第一,系统首先根据本账号,后台数据库进行本卡金额与输入的金额对比,如果找到且在金额允许范围,就提示取款成功,并更新本账号的数据信息。第二,如果没有找到输入的预转账号,则提示没有该用户,并跳转回来重新输入预转账号。if(querybal<nn){ intnewbal=nn-querybal; Stringnewbals=String.valueOf(newbal); intupdatepwd=sql.executeUpdate("updatecardsetcbal='"+newbals+"'wherecno="+ql+"");if(updatepwd==1){ JOptionPane.showMessageDialog(frame,"操作已成功,谢谢使用!");}this.setVisible(false);newClient01("用户取款系统");} else{JOptionPane.showMessageDialog(null,"对不起,你的卡余额已不足!","警告!",JOptionPane.YES_NO_OPTION);this.setVisible(false);newClient01("用户取款系统");}图4-8取款模块取款模块是ATM系统中一个相对比较重要的模块,因为ATM机主要实现的功能就是取款业务,用户选择账户名并点击相应的取款金额,将触发按钮控件的action事件,对后台数据库进行操作。此处设置的几个数字按钮比较大,方便用户的操作,其中一些相应的提示信息也会给出,以防止用户的错误操作。由于这个模块不需要用户手动输入,所以在程序设计时没有使用输入的异常处理。根据参考资料及网上查询,在程序中我采用的SQL语句调用方法是预处理指令的方法,事实证明,这种方法对于处理此程序有很大的益处,而且还可以防止非法的SQL输入。当用户点击对应的数据按钮后系统会根据本账号查找本卡余额并与按钮的数字相对比,如果选择的金额大于本卡余额将显示相应的提示信息(不允许透支)。4.5.6退出界面设计//转账页面窗体设计classAthreadextendsThread{staticintj=1;publicvoidrun(){for(;j<2;){newClient09("提示退出对话框");try{sleep(30000);j++;}}classPanel13extendsJPanel{JLabellabel;Panel13(){label=newJLabel("谢谢使用,请在30秒内退出此卡!");}classbankSystem08{ publicstaticvoidmain(String[]args){ newClient07(""); } }图4-9退卡模块退卡模块是相对简单的模块,没有什么具体的界面设计,只是一个消息的显示,也是一种友好的界面处理方式,以防止用户的错误操作的方法。5系统实现5.1程序设计程序设计的基本概念有程序、数据、子程序、子例程、协同例程、模块以及顺序性、并发性、并行性、和分布性等。程序是程序设计中最为基本的概念,子程序和协同例程都是为了便于进行程序设计而建立的程序设计基本单位,顺序性、并发性、并行性和分布性反映程序的内在特性。程序设计规范是进行程序设计的具体规定。程序设计是软件开发工作的重要部分,而软件开发是工程性的工作,所以要有规范。语言影响程序设计的功效以及软件的可靠性、易读性和易维护性。专用程序为软件人员提供合适的环境,便于进行程序设计工作。程序设计=数据结构+算法程序设计(Programming)是指设计、编制、调试程序的方法和过程。它是目标明确的智力活动。由于程序是软件的本体,软件的质量主要通过程序的质量来体现,在软件研究中,程序设计的工作非常重要,内容涉及到有关的基本概念、工具、方法以及方法学等。程序设计通常分为问题建摸,算法设计,编写代码,编译调试和整理并写出文档资料五个阶段。本系统中用Eclipse编程工具,采用结构化的编程方法对模块进行程序编写。具体源程序见附页。5.2程序调试程序调试,是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。这是保证计算机信息系统正确性的必不可少的步骤。编完计算机程序,必须送入计算机中测试。5.2.1程序调试的原则软件测试的目的是尽可能多的发现程序中的错误,而调试则是在进行了成功的测试之后才开始的工作。程序调试是指在系统测试的基础上,将发现的问题进行改正,使之符合设计标准。(1)用头脑去分析思考与错误征兆有关的信息。(2)避开死胡同。(3)只把调试工具当做手段。利用调试工具,可以帮助思考,但不能代替思考,因为调试工具给的是一种无规律的调试方法。(4)避免用试探法,最多只能把它当做最后手段。(5)再出现错误的地方,可能还有别的错误。(6)修改错误的一个常见失误是只修改了这个错误的征兆或这个错误的表现,而没有修改错误本身。如果提出的修改不能解释与这个错误有关的全部线索,那就表明只修改了错误的一部分。(7)注意修正一个错误的同时可能会引入新的错误。(8)修改错误的过程将迫使人们暂时回到程序设计阶段。修改错误也是程序设计的一种形式。(9)修改源代码程序,不要改变目标代码。5.2.2调试方法1、简单调试方法:步骤(1)在程序中插入打印语句、优点是能够显示程序的动态过程,比较容易检查源程序的有关信息。确定是效率低,可能输入大量无关的数据,发现错误带有偶然性。(2)运行部分程序。有时为了测试某些被怀疑有错的程序段,却将整个程序反复执行许多次,在这种情况下,应设法使被测程序只执行需要检查的程序段,以提高效率。(3)借助调试工具。目前大多数程序设计语言都有专门的调试工具,可以用这些工具来分析程序的动态行为。2、回溯法排错。确定最先发现错误症状的地方,人工沿程序的控制流往回追踪源程序代码,直到找到错误或范围。具来分析程序的动态行为。3、归纳法排错。是一种系统化的思考方法,是从个别推断全体的方法,这种方法从线索(错误征兆出发),通过分析这些线索之间的关系找出故障。主要有4步:(1)收集有关数据。收集测试用例,弄清测试用例观察到哪些错误征兆,以及在什么情况下出现错误等信息。(2)组织数据。整理分析数据,以便发现规律,即什么条件下出现错误,什么条件下不出现错误。(3)导出假设。分析研究线索之间的关系,力求找出它们的规律,从而提出关于错误的一个或多个假设,如果无法做出假设,则应设计并执行更多的测试用例,以便获得更多的数据。证明假设。假设不等于事实,证明假设的合理性是极其重要的,不经证明就根据假设排除错误,往往只能消除错误的征兆或只能改正部分错误。证明假设的方法是用它解释所有原始的测试结果,如果能圆满地解释一切现象,则假设得到证明,否则要么是假设不成立或不完备,要么是有多个错误同时存在。4、演绎法排错。设想可能的原因,用已有的数据排除不正确的假设,精化并证明余下的假设。5、对分查找法。如果知道每个变量子啊程序内若干个关键点上的正确值,则可用赋值语句或输入语句在程序中的关键点附近“注入”这些变量的正确值,然后检查程序的输出。如果输出结果是正确的,则表示错误发生在前半部分,否则,不妨认为错误在后半部分。这样反复进行多次,逐渐逼近错误位置。5.2.3调试分类1、静态调试可以采用如下两种方法:(1)输出寄存器的内容。在测试中出现问题,设法保留现场信息。把所有寄存器和主存中有关部分的内容打印出来(通常以八进制或十六进制的形式打印),进行分析研究。用这种方法调试,输出的是程序的静止状态(程序在某一时刻的状态),效率非常低,不得已时才采用。(2)为取得关键变量的动态值,在程序中插入打印语句。这是取得动态信息的简单方法,并可检验在某时间后某个变量是否按预期要求发生了变化。此方法的缺点是可能输出大梁需要分析的信息,必须修改源程序才能插入打印语句,这可能改变关键的时序关系,引入新的错误。2、动态调试通常利用程序语言提供的调试功能或专门的调试工具来分析程序的动态行为。一般程序语言和工具提供的调试功能有检查主存和寄存器;设置断点,即当执行到特定语句或改变特定变量的值时,程序停止执行,以便分析程序此时的状态。综上所述,本系统采用的主要方法如下:(1)单元测试:是指原程序中每个程序单元进行测试,检查各个模块是否正确实现规定的功能,从而发现模块在编码中或算法中的错误。采用白盒法对各模块进行逻辑错误排查,用黑盒法录入一些有特征的数据从不同角度验证结果。(2)集成测试:在单元测试的基础上,将所有模块按照设计要求组装成一个完整的系统进行测试。(3)确认测试(有效性测试):它的任务是检查软件的功能与性能是否与需求规格说明书中确定的指标相符合。一般分为用黑盒进行确认测试,再检查软件所有文档的完整性、正确性——软件配置审查。5.3试运行系统试运行是指对系统的运行环境和资源进行设置、系统运行和控制参数设定、数据加载以及调整系统与业务工作同步等。6系统维护维护是指在已完成对软件的研制(分析、设计、编码和测试)工作并交付使用以后,对软件产品所进行的一些软件工程的活动。即根据软件运行的情况,对软件进行适当修改,以适应新的要求,以及纠正运行中发现的错误。编写软件问题报告、软件修改报告。6.1系统维护概述系统维护是软件生存周期中时间最长的一个阶段,所花费的精力和费用也是最多的一个阶段,系统维护的目的是保证系统中的各个要素随着环境的变化始终处于最新的、正确的工作状态。系统维护是信息系统可靠运行的重要技术保障,我们应给予足够的重视。6.2软件维护类型软件维护活动类型总起来大概有四种:纠错性维护(校正性维护)、适应性维护、完善性维护或增强、预防性维护或再工程。除此四类维护活动外,还有一些其它类型的维护活动,如:支援性维护(如用户的培训等)。针对以上几种类型的维护,可以采取一些维护策略,以控制维护成本。(1)改正性维护改正性维护是指改正在系统开发阶段已发生而系统测试阶段尚未发现的错误。这方面的维护工作量要占整个维护工作量的17%~21%。所发现的错误有的不太重要,不影响系统的正常运行,其维护工作可随时进行:而有的错误非常重要,甚至影响整个系统的正常运行,其维护工作必须制定计划,进行修改,并且要进行复查和控制。(2)适应性维护适应性维护是指使用软件适应信息技术变化和管理需求变化而进行的修改。这方面的维护工作量占整个维护工作量的18%~25%。由于目前计算机硬件价格的不断下降.各类系统软件屡出不穷,人们常常为改善系统硬件环境和运行环境而产生系统更新换代的需求;企业的外部市场环境和管理需求的不断变化也使得各级管理人员不断提出新的信息需求。这些因素都将导致适应性维护工作的产生。进行这方面的维护工作也要像系统开发一样,有计划、有步骤地进行。(3)完善性维护完善性维护是为扩充功能和改善性能而进行的修改,主要是指对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。这些功能对完善系统功能是非常必要的。另外,还包括对处理效率和编写程序的改进,这方面的维护占整个维护工作的50%~60%,比重较大.也是关系到系统开发质量的重要方面。这方面的维护除了要有计划、有步骤地完成外.还要注意将相关的文档资料加入到前面相应的文档中去。(4)预防性维护预防性维护为了改进应用软件的可靠性和可维护性,为了适应未来的软硬件环境的变化,应主动增加预防性的新的功能,以使应用系统适应各类变化而不被淘汰。例如将专用报表功能改成通用报表生成功能,以适应将来报表格式的变化。这方面的维护工作量占整个维护工作量的4%左右。图6-1软件维护过程7ATM银行取款系统测试7.1引言软件测试(英语:softwaretesting),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度(correctness)、完全度(completeness)和质量(quality)的软件过程;是SQA(softwarequalityassurance)的重要子域。软件测试是软件开发过程的重要组成部分,是用来确认一个程序的功能、性能是否符合开发之前所提出的一些要求。软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件质量保证的关键步骤。软件测试是为了发现错误而执行程序的过程。测试的目的:(1)测试是为了发现程序中的错误而执行程序的过程。(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案。(3)成功的测试是发现了至今为止尚未发现的错误的测试。(4)测试并不仅仅是为了找出错误。通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进。(5)这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性。(6)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法。(7)另外,根据测试目的的不同,还有回归测试、压力测试、性能测试等,分别为了检验修改或优化过

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论