软件工程-ATM柜员机系统-课程设计报告书_第1页
软件工程-ATM柜员机系统-课程设计报告书_第2页
软件工程-ATM柜员机系统-课程设计报告书_第3页
软件工程-ATM柜员机系统-课程设计报告书_第4页
软件工程-ATM柜员机系统-课程设计报告书_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

软件工程课程设计题 目:ATM柜员机系统学 院:信息科学与工程学院专 业:计算机科学与技术学 号:班 级:学生:下载可编辑一可行性研究1编写目的1.1目的这份可行性研究报告是对ATM柜员机的可行性研究分析及指出存在的必要性。1.2预期的读者软件管理人员、开发人员、维护人员、顾客用户。2问题定义2.1ATM柜员机介绍ATM柜员机使用与ATM机相似的图形用户界面,当用户在登录界面输入给定的卡号和密码时,系统能登录ATM柜员机系统,通过数据操作来达到独立的客户与机器交互从而进行取款、存款、转账、查询余额、修改密码等业务办理的目的。2.2基本目标ATM柜员机主要是由各个实体窗口组成,它是由登录页面、选择服务、存款、取款、查询余额、修改密码以及查看交易记录等功能。它的各种按钮的事件和功能可以简单的模拟ATM柜员机的要求,让用户在电脑上可以轻松体验ATM取款机的使用流程,以达到易学易用的效果,避免用户在真实的ATM机上出现失误,带来不必要的损失。2.3经济目标由于本软件的主要背景(为课程设计)在经济上不注重直接的经济收益,而是注重小组成员整体水平的提高。3可行性研究的方法及评价度3.1可行性研究所采用的方法根据调查,本小组成员多数有JAVA编程经验,也具备MYSQL的使用经验,因而开发此系统采用JAVA结合MYSQL的数据库系统开发。3.2评价尺度此软件暂时只是一个初级产品,实现的功能也只能完成初步的工作。4工作产品4.1设计目标为了减少银行的业务处理压力,尽量节省人们取钱所花费的时间和价值;并且尽可能的防止一些非法的业务操作,同时它的使用可以有效解决用户信息和资金信息的繁杂问题。.专业.整理.下载可编辑4.2设计及约束条件a.ATM面向客户十分广泛,所以界面设计要力求简单明了,只要认识汉字并具备实际行动能力的人,就可以顺利进行操作,对于用户输入的数据,系统能进行严格的数据检验,尽可能的排除人为地错误。开发人员应具备相应的开发能力,懂C++与java编程,小组成员能够根据计划的要求,按时完成系统的每一部分,保证后面的开发进程可以顺利进行。但根据现有条件和知识,我们还得在技术方面进行学习和提高。4.3工作原理先建立数据库且追建数据库的驱动程序。在使用时,分为后台管理和前台操作。用户输入账户基本信息进行登录,然后方能进行下一步操作。4.4系统流程图4.5数据流图.专业.整理.下载可编辑4.6数据词典数据字典是关于数据的信息的集合,也就是对数据中包含的所有元素的定义的集合,它为软件开发人员提供数据库设计的参考,并为用户了解系统时作为一个必有工具。(1)数据项定义名字:用户别名:描述:银行账户的持有者定义:用户=账户++证件+存款余额位置:全部由账户持有者所拥有名字:信息别名:描述:银行系统用来鉴别是否有权来支配该账户存款余额的凭证定义:信息=账户+密码位置:输入到ATM(2)操作说明输入账户信息,就可以登陆并在ATM上进行一系列操作选择交易类型,就可以进行相应操作输入转账账号,就可以进行转账操作选择对应金额,就可以取得相应数量的现金选择余额查询,直接显示对应账号余额4.7产品的功能登录ATM柜员机系统,通过数据操作来达到独立的客户与机器交互从而进行取款、存款、转账、查询余额、修改密码、查看交易记录等业务的目的。4.8技术可行性。根据小组成员拥有良好的JAVA编程能力及拥有MYSQL的使用经验,再根据上述分析情况,利用现有人力和物力是具备开发此系统能力的。对于用户来说,此系统简单、大方、美观、易懂,顾客操作根据系统提示,容易完成。5可选方案鉴于系统必须具有高安全性,在数据库使用上都要求具有完善的管理功能且日后数据库升级方便,因而本次使用主要根据数据库的易用性及易升级性提供两种方案。采用Oracle数据库设计,这一数据库系统现在已成为主流的数据库管理系统,且易操作,易升级,因此提出这一方案。采用MYSQL的数据库管理系统实现。根据小组成员的技术,目前尚只有具备使用MYSQL数据环境开发的能力,且当前校园大多使用MYSQL作为数据库管理系统,因而第二种方案作为本次系统开发的方案。.专业.整理.下载可编辑6经济的可行性6.1市场分析按本软件开发方案,对于本系统软件投资方向,体现于软件开发、软件生产及软件测试。6.2投资估计本系统完全按开发计划进行估算,估计上网,打印需一些费用。本系统大约总体耗费主要为时间,精力。本系统本非收益性质开发,重要是为解决用户的需要。7社会因素方面的可行性7.1技术由于用户办理银行业务时,比较拥挤,而且需要花费大量的时间,为了减少银行的业务处理压力,尽量节省人们的时间,并且可以有效解决用户信息和资金信息的繁杂问题。7.2使用方面的可行性此系统给银行和用户都带来了利益,同时出售此系统的技术员也获得利润,相当于定期收取租金。有利于社会经济的发展。8产品可检测性8.1检测标准软件标准:软件规模、复杂程度、安全性、可操作性、可观察性、可控制性、冗余的大小。8.2检测的方法通过软件测试:黑盒测试法:主要在软件界面上进行的测试。白盒测试法:在重要逻辑路径进行测试,检测重要数据结构的有效性。9产品的可生产性正确性:程序是否按程序流程图及数据字典完成程度。可靠性:安全运行时间越长越好。可用性:是否能够解决实际的存在问题。完整性:对未授权的人员访问此系统软件可控性强。灵活性:修改一个程序的工作量。10可行性综合分析本工程产品开发周期为2月。要求所有数据信息的储存都由数据库来完成。时间十分宽裕,对我们工程的进行非常有利。11可行性结论综上所述,本工程的技术成熟、完备,测试手段可靠,具有良好的市场拓展,因.专业.整理.下载可编辑此本工程可立即开始。.专业.整理.下载可编辑二需求分析1项目背景在市场经济的蓬勃发展和人们日益繁忙的条件下,ATM应运而生,它可以减少银行的业务处理压力,尽量节省人们的时间,并且可以有效解决用户信息和资金信息的繁杂问题。2任务概述2.1目标本系统在设计上,尽可能使流程清晰,操作灵活。实现上应该具有如下功能:1.采用人机对话的方式,界面美观友好。2.为用户提供方便,快捷的业务办理功能。3.对用户输入的数据进行检查,尽可能排除人为的错误。4.用户可以随时查看自己的交易记录。8.系统运行稳定,数据存储安全可靠。2.2运行环境CPU Pentium41.8G以上存 512MB以上硬盘空间 500MB以上操作系统 WindowsXP或Windows7数据库 MYSQL开发环境 NetBeans+JDK2.1浏览器 IE6.0以上服务器2.3条件和限制2.3.1性能描述实时性好、灵活性强、易于不同年龄阶段的人操作。2.3.2界面要求以Windows窗口形式显示,标题栏为ATM柜员机名称,右上角有最小化按钮、关闭按钮,不同的窗口中有不同的按钮和选择菜单。2.3.3输入:输入容:账号,储户密码,取款额,转账卡号,转账金额储户密码:六位整数;存款额:50元的倍数;取款额,转账额:100元的倍数;转账卡号:18位整数;输入设备:数字键盘.专业.整理.下载可编辑输出容:余额,输入密码提示,业务选择提示,取卡提示,交易记录设备:显示器;介质:计算机3数据库描述数据库是数据管理的最新技术,是计算机科学的重要分支。十年来,数据库管理系统已从专用的应用程序包发展成为通用系统软件。由于数据库具有数据结构化、最低冗余度、较高的程序与数据独立性、易于扩充、易于编制应用程序等优点,较大的信息系统都是建立在数据库设计之上的。由于用到的数据表格多,另外考虑到实际情况,商品信息的更新,还有会员资料的变化,我们选用MYSQL作为数据库开发,而不用Access,主要是因为Access存放的记录,在实际运用中不适合此系统;而MYSQL是一种常用的关系数据库,能存放和读取大量的数据,管理众多并发的用户,故选用MYSQL数据库。4所用技术描述NetBeans由Sun公司在2000年创立,它是开放源运动以及开发人员和客户社区的家园,旨在构建世界级的JavaIDE。NetBeans当前可以在Solaris、Windows、Linux和MacintoshOSX平台上进行开发,并在SPL(Sun公用许可)围使用。已经获得业界广泛认可,并支持NetBeans扩展IDE模块目录中大约100多个模块。NetBeans是一个全功能的开放源码JavaIDE,可以帮助开发人员编写、编译、调试和部署Java应用,并将版本控制和XML编辑融入其众多功能之中。NetBeans可支持Java2平台标准版(J2SE)应用的创建、采用JSP和Servlet的2层Web应用的创建,以及用于2层Web应用的API及软件的核心组的创建。此外,NetBeans最新牒还预装了两个Web服务器,即Tomcat和GlassFish,从而免除了繁琐的配置和安装过程。所有这些都为Java开发人员创造了一个可扩展的开放源多平台的JavaIDE,以支持他们在各自所选择的环境中从事开发工作,如Solaris、Linux、Windows或Macintosh。5功能需求5.1功能模块图.专业.整理.下载可编辑5.2系统模块结构图6性能需求本ATM柜员机的主要功能如下所述:要求使用图形用户界面。当输入给定的卡号和密码时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:A、查询余额:初始余额为10000元;B、ATM取款:取款不能出现负数,每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支(若能够提供与ATM机一样的取款模式就更好);C、ATM存款:不能出现负存款,每次存款金额为50的倍数;一次存款不能超过10000元;D、修改密码:新密码长度为6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。E、查看交易记录:根据用户输入的查询起止时间,查询该时间段的存取款交易记录。.专业.整理.下载可编辑7数据描述.专业.整理.下载可编辑8静态数据描述用户:Username 用户名Tel账户Usernumber 账号Password 密码9动态数据分析鼠标对按钮的点击受限操作所需的密码;输出数据:查询余额的信息;查询记录信息;密码修改成功;信息录入、删改结果(成功或失败);10系统IPO图IPO图是输入输出图,IPO是指结构化设计中变换型结构的输入(Input)、加工(Processing)、输出(Output)。IPO图是对每个模块进行详细设计的工具,它是输入加工输出(INPUTPROCESSOUTPUT)图的简称,在此可以简略的描述系统的主要算法。输入 处理 输出用户信息输入 相应操作处理 反馈处理结果.专业.整理.下载可编辑三概要设计1需求规定真正的ATM针对的用户是广大消费者,但本系统设计相对简单,数据库资料也比较少,所以在应用上有一定的限制。但总体来说可以实现ATM的基本功能。2运行环境硬件平台:CPU:Pentium41.8GHz存:521MB以上软件平台:操作系统:WindowsXP或Windows7数据库:MYSQL开发工具:JDK2.1、NetBeans服务器:浏览器:IE6.0及以上版本,推荐使用IE8.03系统结构系统结构根据需求规定大致分为了以下几个模块。3.1总体层次结构图:.专业.整理.下载可编辑3.2业务流程图待机界面(按任意键进入登录界面(卡号、密码、取密码错误, 选择界面请重新输入!查询余额 取款 转帐 修改密码 存款 查看记录交易完成界面取卡界面.专业.整理.下载可编辑4人工处理过程该系统刚建立时,由于数据库的资料比较少,所以数据库管理员要输入大量的资料信息,逐条输入到数据库表中,这是一个比较繁琐的工程,需要花费大量的人力物力。同时还有对数据库的维护,都需要专业人士处理。5尚未解决的问题由于本系统属于小组业余制作的,所以无论在功能还是数据资料方面都远远不能同网络上的那些大型软件媲美,所以在以后的时间里我们会继续不断完善其功能。6接口设计6.1用户接口使用基于基本的用户界面,无论是前台的用户还是后台的相关操作都可以通过鼠标点击完成操作,编辑框用于用户输入。6.2外部接口按Windows应用软件用户界面的规来设计,使用以普通页面为主的用户界面,简单易懂,方便用户操作。1)登陆页面模块设计与ATM柜员机打交道比较多的,也是大家对安全比较关心的问题:密码。所以第一个界面就是要输入密码和卡号才能继续服务。2)主界面主界面共有取款、存款、转账、查询余额、修改密码和查看交易记录的6项功能,用户登陆后出现此界面,可以由用户根据自己的需要选择相应的功能。3)新品上市页面:顾名思义,该模块是一些新上架的商品。3)修改密码在修改密码模块中,首先你必须要输入你的旧密码是否正确,否则就会报错。再一个就是要两次输入你的新密码,且两次药匹配,否则也会报错,然后再重新回到修改密码的界面4)余额查询需要通过用户所使用的账户及密码来进行余额的查询,因为先前进行过登陆,所以这里不用再登陆,直接点击查询余额即可显示账户的实际余额。。5)取款该模块是一个相对比较重要的模块,因为ATM机就要的功能就是取款业务,因此在算法以及界面设计上花的功夫也是最多的,要根据功能需要中的要求做到用户顺利地取款,用户选择取款金额,然后点击确定进行取款操作,数字按钮的个数设计比较大,方便用户操作。6)转账该模块中,只需要输入对方的账户以及转账金额就可以了,为了防止用户出错,我们还设计了密码确认这一项。7)记录查询可以按输入的日期进行交易记录的相关查询。.专业.整理.下载可编辑6.3部接口本系统使用MYSQL数据库驱动程序及接口。7运行设计7.1运行模块组合本系统无论是前台模块还是后台模块,在程序打开后,用户单击导航按钮分别进入不同的子模块,再在这些模块中分别调用它们的子模块完成一系列的操作。7.2运行控制本软件控制流程:主页面运行,等待用户选择导航条,根据用户的选择调用不同的模块。7.3运行时间各模块的运行时间比较短,不至于影响软件的质量,因此不予讨论。8数据库设计本系统共设计了2个数据表,分别为Trade表格和User表格Trade表格此表是用来保存交易记录。CardNo是这个表格的唯一标识,Amount是交易数额,TradeDate用来记录交易时间,TradeNo是用来标记交易,Business是交易业务,Poundage是手续费。User表格此表是用来保存用户信息。CardNo是这个表的唯一标识,username是用户名,usertel是用户手机,ID是用户身份证,password是用户账户的密码,balance使用户账户余额。9系统出错处理设计在运行本程序过程中难免会遇到这样那样的问题导致系统无法正常操作,例如加载数据库驱动程序失败、连接数据库失败、更新数据库失败等,那么怎么解决这些问题呢?在这里我们列举一些常见的问题以及解决办法。9.1加载数据库驱动程序失败对于该问题,如果用户使用的是JDBC连接数据库,首先单看通过Class.forName().专业.整理.下载可编辑方法加载的驱动程序是否正确,然后查看WEB-INF/lib目录下是否存在msutil.jar、mssqlserver.jar、mabase.jar文件。9.2更新数据库失败更新数据库失败一般情况下是因为进行添加、删除、修改、查找的SQL语句存在错误,例如,将from写成form,或者所写的字表名与实际要操作的字表名不一致等。10维护设计除了严格按照软件工程的科学方法开发软件、认真建立文档、编码阶段写详细的注释外,没有特殊的维护设计。.专业.整理.下载可编辑四详细设计1编写目的在前面所述的基础上该阶段正式进入ATM系统软件的实际开发,本阶段完成系统的详细设计并明确系统的功能与编码。2背景众所周知随着信息时代科技的飞速发展和随着全球金融行业的兴起,使用ATM取款机、计算机信息技术以及计算机科学技术的发展,给人们的生活带来了天翻地覆的变化,同时这些技术在人们生活中的运用,不仅提高了银行的业务处理能力,而且大大的节省了人们取钱所花费的时间和价值;并且在有效防止了一些非法的业务操作,对于一些复杂的信息,就能够充分的发挥它们的优越性。说明:开发的软件系统名称:ATM系统本项目的提出者:课程设计小组开发者:指导老师:3定义什么是ATM柜员机?ATM柜员机使用与ATM机相似的图形用户界面,当用户在登录界面输入给定的卡号和密码时,系统能登录ATM柜员机系统,通过数据操作来达到独立的客户与机器交互从而进行取款、存款、转账、查询余额、修改密码等业务办理的目的。4参考资料[1]雍俊海JAVA程序设计[M]北京:清华大学,2006[2]海潘软件工程导论[M]北京:清华大学,2010耿祥义JAVA面向对象程序设计[M]北京:清华大学,20105程序系统的结构本系统的总功能可以划分为6大块,就是转账、存款、取款、查询余额、修改密码以及查看交易记录几项大功能(子系统)。6输入输出输入容:账号,储户密码,取款额,转账卡号,转账金额输出容:余额,输入密码提示,业务选择提示,取卡提示,交易记录7界面设计一个系统界面的好坏直接影响到用户的操作,界面设计要求样式美观、简单明了、方便易操作。我设计的界面主要分为窗体、菜单、按钮和文本输入框几个部分,分别执行相应的操作。.专业.整理.下载可编辑7.1窗体设计窗体整个框架使用Frame类构造,Frame有自己的外边框和自己的标题,创建Frame时可以指定其窗口标题,我创建的窗口标题是各个不同功能的模块的名字,比如说查询余额,还有取款等。向Frame窗口中添加组件使用add()。例如:button1=newButton("存款");p1.add(button1);我所设计的窗口的主要结构的特点就是每个窗口都对应着一个特定的功能。比如说报各种各样的错,还有各种查询余额、取款、选择服务等,所以它们都是由各种按钮和文本框,标签组成的,而联系各个窗体成为一个整体的就是各个按钮的监听事件。所以整个设计就趋向简单化了。为了定义各个按钮所对应的命令和操作,首先需要将各个按钮注册给实现了动作事件的监听接口ActionListener的监听者,然后为监听者定义actionPerformed(ActionEvente)方法,在这个方法中调用e.getSource()来判断用户点击的菜单子项,并完成这个菜单子项定义的操作。7.2主要模块设计7.2.1登陆页面模块设计与ATM柜员机打交道比较多的,也是大家对安全比较关心的问题:密码。所以第一个界面就是要输入密码和卡号才能继续服务。文本区调用publicStringgetText()方法,获取用户想要的字符串。用来判断输入的密码和卡号是否正确,如果不正确的话,则弹出密码或卡号错误的警告框,并用dispose()关掉窗口。7.2.2主界面主界面共有取款、存款、转账、查询余额、修改密码和查看交易记录的6项功能,用户登陆后出现此界面,可以由用户根据自己的需要选择相应的功能。部分代码如下:privatevoidjButton1MouseClicked(java.awt.event.MouseEventevt){//GEN-FIRST:event_jButton1MouseClickednewZhuanZhang(this).setVisible(true);this.dispose();}7.2.3修改密码在修改密码模块中,首先你必须要输入你的旧密码是否正确,否则就会报错。再一个就是要两次输入你的新密码,且两次药匹配,否则也会报错,然后再重新回到修改密码的界面。在修改密码时用到的方法为:StringpatternStr="[0-9a-zA-Z]{6}";StringnewPwd1=jPasswordField1.getText();8主要模块界面设计①登陆界面.专业.整理.下载可编辑登录模块依然采用的是用户名和密码验证的方式,首先需要用户输入用户名和密码然后点击确认进行验证,这里涉及到一组输入位数的问题,系统规定用户需要输入18位的用户名和6位的密码。②主界面主界面的设计主要是设计了查询余额、取款、存款、转账、密码更改及退出按钮等ATM的一些标准操作界面。③存款界面.专业.整理.下载可编辑此模块是用户登录成功后需要存款时的操作界面,在这个界面中输入存款金额,点击确定按钮后进行存款操作。④余额查询界面在此模块中,需要通过用户所使用的账户及密码来进行余额的查询,因为先前进行过登陆,所以这里不用再登陆,直接点击查询余额即可显示账户的实际余额。⑤密码修改界面因为先前已经用密码登陆,故此处不需要用户输入旧密码,直接两次输入新密码进行确认,然后系统会给出成功的提示信息。.专业.整理.下载可编辑⑥取款界面取款模块是一个相对比较重要的模块,因为ATM机就要的功能就是取款业务,因此在算法以及界面设计上花的功夫也是最多的,要根据功能需要中的要求做到用户顺利地取款,用户选择取款金额,然后点击确定进行取款操作,数字按钮的个数设计比较大,方便用户操作。⑦转账界面在转账模块中,只需要输入对方的账户以及转账金额就可以了,为了防止用户出错,我们还设计了密码确认这一项。⑧记录查询界面.专业.整理.下载可编辑9异常处理情况说明(1)打开、保存文件时的异常处理需要处理的异常:IOException(2)数据库访问时的异常处理需要处理的异常:SQLException(3)加载类时的异常处理需要处理的异常:ClassNotFindException,当应用程序试图使用Class类中的forName方法通过字符串名加载类时,但是没有找到具有指定名称的类的定义。五代码(见附录)六测试1测试方案考虑到各种因素和条件的限制,我们决定采用黑盒测试方案(又称功能测试,其测试用例完全是根据程序的功能说明来设计的)。即我们不考滤所编写程序的具体结构,而是根据软件所需要的输入数据的格式以及应该完成的功能,设计一些合法的测试用例和不合法的测试用例,特别是根据边界条件设计一些边界测试用例。以检查系.专业.整理.下载可编辑统是否能正确的完成预订功能,得到希望的输出。或者是对不合法的输入和操作能够正确的识别和防御。黑盒法是最基本的测试法,主要测试软件能否满足功能要求。2测试项目应该注意到,在本系统中从总体上分为了转账、选择服务、存款、取款、查询余额、修改密码以及查看交易记录模块设计。我们在设计测试用例的时候应该选择有代表的,可以用最小的工作量完成对整个系统的测试。3测试方法3.1单元测试1)模块接口参数的数目、次序与变元的是否相一致;全局变量的定义和用法在各个模块中是否也相一致。2)边界条件做完第一次操作进行第二次循环操作时,有没有出现使用上的错误;使用过大或过小的数据值和控制量时,系统是否进行了错误提示,有没有导致软件卡死或电脑死机情况。3.2集成测试1)模块测试第一步,对主控制模块进行测试,测试时用存根程序代替所有直接附属于主控制模块的模块;第二步,根据选定的结合策略,每次用一个实际模块代替一个存根程序;第三步,在结合进一个模块的同时进行测试。2)回归测试主要是检测软件全部功能的代表性测试用例。3)确认测试主要用来检测软件是否与需求一致,并要通过调试和测试观察软件能否满足所有的功能要求,能否达到每个性能要求。4测试环境与测试辅助工具测试辅助工具:Eclipse、NetBeans、MYSQL、JDK测试环境:Windows7、windowsxp5系统测试5.1登陆模块测试只要输入正确的用户名和密码即可完成登陆a.没输入账号或输入数据库不存在的账号b.密码输入错误或不输入密码测试用例期望结果实际结果不输入无法登录无法登录输入错误账号无法登录无法登录输入错误密码无法登录无法登录.专业.整理.下载可编辑.专业.整理.下载可编辑5.2取款模块测试因为该模块仅限于界面上的几个按钮可选,故测试围小、简单。5.3修改密码功能测试用户可修改用户的个人密码信息。a.修改密码成功b.修改密码失败测试用例期望结果实际结果密码输入5位修改失败修改失败不输入修改失败修改失败输入6位修改成功修改成功.专业.整理.下载可编辑5.4存款模块测试用户可以进行一定数额与次数的存款。a.存款金额一次不能多于10000b.存款金额不能为负测试用例期望结果实际结果存入11000存款失败存款失败存入-1000存款失败存款失败.专业.整理.下载可编辑5.5转账模块测试只要输入正确的用户名并进行密码确认即可完成此功能a.没输入账号或输入数据库不存在的账号b.密码输入错误测试用例期望结果实际结果不输入无法转账与期望相符输入错误账号无法转账与期望相符输入错误密码无法转账与期望相符.专业.整理.下载可编辑5.6查询模块测试只要输入正确的日期查询区间即可完成查询a.输入相同的日期(即查询区间为空)b.输入错误的日期(即查询起始时间比结束时间晚)测试用例期望结果实际结果输入相同的日期提示错误无记录输入错误的日期提示错误无记录.专业.整理.下载可编辑6测试结果及评价功能和性能与用户要求基本一致,软件可以接受。但仍有部分功能尚未实现或进行了更改,例如:1、原计划每天取款金额不超过5000元,但迫于代码复杂,没有实现;2、交易记录查询模块,如果用户输入的起始时间大于结束时间(例如起始时间为2008年,而结束时间为2004年),按照错误处理的原则,系统会自动报错,但是系统仍然会出现交易记录界面,只不过记录为空;3、原计划没有加入声音提示,但后来加以改进;附录:1、存款模块privatevoidjButton1MouseClicked(MouseEventevt){Stringyue=null;StringpatternStr="[0-9]*";try{GetBalancebalance=newGetBalance();yue=balance.getyue();StringnumOfMoney=jTextField1.getText().trim();if(numOfMoney.equals("")){//金额为空JOptionPane.showMessageDialog(this,"请输入您需要存入的金额","错误",JOptionPane.ERROR_MESSAGE);return;}.专业.整理.下载可编辑if(!numOfMoney.matches(patternStr)){JOptionPane.showMessageDialog(this,"请您输入数字","错误",JOptionPane.ERROR_MESSAGE);return;}doublenum=Double.parseDouble(numOfMoney)+Double.parseDouble(yue)-Double.parseDouble(numOfMoney)*0.005;if(num>10000.0){JOptionPane.showMessageDialog(this,"尊敬的客户您好,您的金额已超过我们公司可以受理的最大值,我们不能受理","错误",JOptionPane.ERROR_MESSAGE);jTextField1.setText("");return;}Stringsql1="updateusersetBalance='"+num+"'whereCardNo='"+Login.num+"'";inti=con.stat.executeUpdate(sql1);if(i==0){//更改失败提示信息JOptionPane.showMessageDialog(this,"系统更新失败,请检查您的输入是否正确","错误",JOptionPane.ERROR_MESSAGE);jTextField1.setText("");}Datenow=newDate();Stringdate=newSimpleDateFormat("yyyy年M月d日").format(now);Stringsql2="insertintotrade(CardNo,Amount,TradeDate,Business,Poundage)values('"+Login.num+"','"+Double.parseDouble(numOfMoney)+"','"+date.toString()+"','"+"存款"+"','"+Double.parseDouble(numOfMoney)*0.005+"')";intf=con.stat.executeUpdate(sql2);if(f==0){//更改失败提示信息JOptionPane.showMessageDialog(this,"系统更新失败,请检查您的输入是否正确","错误",JOptionPane.ERROR_MESSAGE);jTextField1.setText("");}}catch(SQLExceptione){e.printStackTrace();}newSuccessfulTrade(log);this.dispose();.专业.整理.下载可编辑}privatevoidjButton2MouseClicked(java.awt.event.MouseEventevt){log.initComponents();this.dispose();}2、取款模块privatevoidjButton1MouseClicked(MouseEventevt){num=100;Stringyue=null;doublenum2;try{GetBalancebalance=newGetBalance();yue=balance.getyue();num2=Double.parseDouble(yue)-num-num*0.005;if(num2<0){JOptionPane.showMessageDialog(this,"余额不足!","错误",JOptionPane.ERROR_MESSAGE);return;}Stringsql1="updateusersetBalance='"+num2+"'whereCardNo='"+Login.num+"'";inti=con.stat.executeUpdate(sql1);if(i==0){JOptionPane.showMessageDialog(this,"系统更新失败,请您原谅","错误",JOptionPane.ERROR_MESSAGE);}Datenow=newDate();Stringdate=newSimpleDateFormat("yyyy年M月d日").format(now);Stringsql2="insertintotrade(CardNo,Amount,TradeDate,Business,Poundage)values('"+Login.num+"','"+num+"','"+date.toString()+"','"+"取款"+"','"+num*0.005+"')";intf=con.stat.executeUpdate(sql2);if(f==0){//更改失败提示信息JOptionPane.showMessageDialog(this,"系统更新失败,请检查您的输入是否正确","错误",JOptionPane.ERROR_MESSAGE);.专业.整理.下载可编辑}}catch(SQLExceptione){e.printStackTrace();}newSuccessfulTrade(log);this.dispose();}privatevoidjButton2MouseClicked(MouseEventevt){num=200;Stringyue=null;doublenum2;try{GetBalancebalance=newGetBalance();yue=balance.getyue();num2=Double.parseDouble(yue)-num-num*0.005;if(num2<0){JOptionPane.showMessageDialog(this,"余额不足!","错误",JOptionPane.ERROR_MESSAGE);return;}Stringsql1="updateusersetBalance='"+num2+"'whereCardNo='"+Login.num+"'";inti=con.stat.executeUpdate(sql1);if(i==0){JOptionPane.showMessageDialog(this,"系统更新失败,请您原谅","错误",JOptionPane.ERROR_MESSAGE);}Datenow=newDate();Stringdate=newSimpleDateFormat("yyyy年M月d日").format(now);Stringsql2="insertintotrade(CardNo,Amount,TradeDate,Business,Poundage)values('"+Login.num+"','"+num+"','"+date.toString()+"','"+"取款"+"','"+num*0.005+"')";intf=con.stat.executeUpdate(sql2);if(f==0){//更改失败提示信息JOptionPane.showMessageDialog(this,"系统更新失败,请检查.专业.整理.下载可编辑您的输入是否正确","错误",JOptionPane.ERROR_MESSAGE);}}catch(SQLExceptione){e.printStackTrace();}newSuccessfulTrade(log);this.dispose();}privatevoidjButton3MouseClicked(MouseEventevt){num=500;Stringyue=null;doublenum2;try{GetBalancebalance=newGetBalance();yue=balance.getyue();num2=Double.parseDouble(yue)-num-num*0.005;if(num2<0){JOptionPane.showMessageDialog(this,"余额不足!","错误",JOptionPane.ERROR_MESSAGE);return;}Stringsql1="updateusersetBalance='"+num2+"'whereCardNo='"+Login.num+"'";inti=con.stat.executeUpdate(sql1);if(i==0){JOptionPane.showMessageDialog(this,"系统更新失败,请您原谅","错误",JOptionPane.ERROR_MESSAGE);}Datenow=newDate();Stringdate=newSimpleDateFormat("yyyy年M月d日").format(now);Stringsql2="insertintotrade(CardNo,Amount,TradeDate,Business,Poundage)values('"+Login.num+"','"+num+"','"+date.toString()+"','"+"取款"+"','"+num*0.005+"')";intf=con.stat.executeUpdate(sql2);.专业.整理.下载可编辑if(f==0){//更改失败提示信息JOptionPane.showMessageDialog(this,"系统更新失败,请检查您的输入是否正确","错误",JOptionPane.ERROR_MESSAGE);}}catch(SQLExceptione){e.printStackTrace();}newSuccessfulTrade(log);this.dispose();}privatevoidjButton4MouseClicked(MouseEventevt){num=5000;Stringyue=null;doublenum2;try{GetBalancebalance=newGetBalance();yue=balance.getyue();num2=Double.parseDouble(yue)-num-num*0.005;if(num2<0){JOptionPane.showMessageDialog(this,"余额不足!","错误",JOptionPane.ERROR_MESSAGE);return;}Stringsql1="updateusersetBalance='"+num2+"'whereCardNo='"+Login.num+"'";inti=con.stat.executeUpdate(sql1);if(i==0){JOptionPane.showMessageDialog(this,"系统更新失败,请您原谅","错误",JOptionPane.ERROR_MESSAGE);}Datenow=newDate();Stringdate=newSimpleDateFormat("yyyy年M月d日").format(now);Stringsql2="insertintotrade(CardNo,Amount,TradeDate,Business,Poundage)values('"+Login.num+"','"+num+"','"+date.toString()+"','"+"取款"+"','"+num*0.005+"')";.专业.整理.下载可编辑intf=con.stat.executeUpdate(sql2);if(f==0){//更改失败提示信息JOptionPane.showMessageDialog(this,"系统更新失败,请检查您的输入是否正确","错误",JOptionPane.ERROR_MESSAGE);}}catch(SQLExceptione){e.printStackTrace();}newSuccessfulTrade(log);this.dispose();}privatevoidjButton5MouseClicked(MouseEventevt){num=1000;Stringyue=null;doublenum2;try{GetBalancebalance=newGetBalance();yue=balance.getyue();num2=Double.parseDouble(yue)-num-num*0.005;if(num2<0){JOptionPane.showMessageDialog(this,"余额不足!","错误",JOptionPane.ERROR_MESSAGE);return;}Stringsql1="updateusersetBalance='"+num2+"'whereCardNo='"+Login.num+"'";inti=con.stat.executeUpdate(sql1);if(i==0){JOptionPane.showMessageDialog(this,"系统更新失败,请您原谅","错误",JOptionPane.ERROR_MESSAGE);}Datenow=newDate();Stringdate=newSimpleDateFormat("yyyy年M月d日").format(now);Stringsql2="insertintotrade(CardNo,Amount,TradeDate,Business,Poundage).专业.整理.下载可编辑values('"+Login.num+"','"+num+"','"+date.toString()+"','"+"取款"+"','"+num*0.005+"')";intf=con.stat.executeUpdate(sql2);if(f==0){//更改失败提示信息JOptionPane.showMessageDialog(this,"系统更新失败,请检查您的输入是否正确","错误",JOptionPane.ERROR_MESSAGE);}}catch(SQLExceptione){e.printStackTrace();}newSuccessfulTrade(log);this.dispose();}privatevoidjButton6MouseClicked(MouseEventevt){num=2000;Stringyue=null;doublenum2;try{GetBalancebalance=newGetBalance();yue=balance.getyue();num2=Double.parseDouble(yue)-num-num*0.005;if(num2<0){JOptionPane.showMessageDialog(this,"余额不足!","错误",JOptionPane.ERROR_MESSAGE);return;}Stringsql1="updateusersetBalance='"+num2+"'whereCardNo='"+Login.num+"'";inti=con.stat.executeUpdate(sql1);if(i==0){JOptionPane.showMessageDialog(this,"系统更新失败,请您原谅","错误",JOptionPane.ERROR_MESSAGE);}Datenow=newDate();Stringdate=newSimpleDateFormat("yyyy年M月d日").format(now);Stringsql2="insertintotrade(CardNo,Amount,TradeDate,Business,Poundage)values('"+Login.num+"','"+num+"','"+date.toString()+"','"+"取款.专业.整理.下载可编辑"+"','"+num*0.005+"')";intf=con.stat.executeUpdate(sql2);if(f==0){//更改失败提示信息JOptionPane.showMessageDialog(this,"系统更新失败,请检查您的输入是否正确","错误",JOptionPane.ERROR_MESSAGE);}}catch(SQLExceptione){e.printStackTrace();}newSuccessfulTrade(log);this.dispose();}3、转账模块privatevoidjButton1MouseClicked(MouseEventevt){StringpatternStr="[0-9]*";StringpatternStr2="[0-9]{18}";StringpatternStr3="[0-9]{6}";Stringnum=null;if(jPasswordField1.getText().trim().equals("")){JOptionPane.showMessageDialog(this,"请输入密码","错误",JOptionPane.ERROR_MESSAGE);jPasswordField1.setText("");return;}if(!jPasswordField1.getText().trim().matches(patternStr3)){JOptionPane.showMessageDialog(this,"请输入六位数字密码","错误",JOptionPane.ERROR_MESSAGE);jPasswordField1.setText("");return;}if(!jPasswordField1.getText().trim().equals(Login.pwd)){JOptionPane.showMessageDialog(this,"请重新输入正确的密码","错误",JOptionPane.ERROR_MESSAGE);jPasswordField1.setText("");return;}if(jTextField1.getText().trim().equals("")){JOptionPane.showMessageDialog(this,"请输入卡号","错误.专业.整理.下载可编辑",JOptionPane.ERROR_MESSAGE);jTextField1.setText("");return;}elseif(!jTextField1.getText().trim().matches(patternStr2)){JOptionPane.showMessageDialog(this,"请输入18位数字卡号","错误",JOptionPane.ERROR_MESSAGE);jTextField1.setText("");return;}GetBalancebalance=newGetBalance();num=balance.getyue();if(Double.parseDouble(num)<0){JOptionPane.showMessageDialog(this,"请重新输入正确的卡号","错误",JOptionPane.ERROR_MESSAGE);jTextField1.setText("");return;}doubleyue=Double.parseDouble(balance.getyue());if(jTextField2.getText().trim().equals("")){JOptionPane.showMessageDialog(this,"请输入数值","错误",JOptionPane.ERROR_MESSAGE);jTextField2.setText("");return;}if(!jTextField2.getText().trim().matches(patternStr)){JOptionPane.showMessageDialog(this,"请输入数字","错误",JOptionPane.ERROR_MESSAGE);jTextField2.setText("");return;}if(yue<Double.parseDouble(jTextField2.getText())){JOptionPane.showMessageDialog(this,"账户余额不足,无法转账!","错误",JOptionPane.ERROR_MESSAGE);jTextField2.setText("");return;}double.专业.整理.下载可编辑numofmoney=Double.parseDouble(num)+Double.parseDouble(jTextField2.getText());if(numofmoney>10000.0){JOptionPane.showMessageDialog(this,"尊敬的客户您好,您的金额已超过我们公司可以受理的最大值,我们不能受理","错误",JOptionPane.ERROR_MESSAGE);jTextField2.setText("");return;}Stringsql2="updateusersetBalance='"+numofmoney+"'whereCardNo='"+jTextField1.getText()+"'";try{inti=con.stat.executeUpdate(sql2);if(i==0){//更改失败提示信息JOptionPane.showMessageDialog(this,"系统更新失败,请检查您的输入是否正确","错误",JOptionPane.ERROR_MESSAGE);jTextField1.setText("");jTextField2.setText("");jPasswordField1.setText("");return;}}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}Datenow=newDate();Stringdate=newSimpleDateFormat("yyyy年M月d日").format(now);doublePoundage=0.0;Stringsql5="insertintotrade(CardNo,Amount,TradeDate,Business,Poundage)values('"+jTextField1

温馨提示

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

评论

0/150

提交评论