您的当前位置:首页正文

银行账户管理系统.doc

2021-12-22 来源:年旅网


文献综述

一、概述

ATM自动取款机是由计算机控制的持卡人自我服务型的金融专用设备。ATM是英

文Automatic Teller Machine的缩写。ATM是最普遍的自助银行设备,可以提供最基本的银行服务之一,即出钞交易,有些全功能的产品还可以提供信封存款业务。在ATM自动取款机上也可以进行账户查询、修改密码和转账的业务。

同时在制作这个系统的过程中也应用了数据库的知识,这个相对于想从事软件开发的人来说是比较重要的内容,这个也是本次设计的重点知识,同时数据库链接是必须要学会的,因为这个是最核心的内容,培养自己坚实的逻辑表达能力和沟通能力,和培养自己良好的文案能力,要求掌握ATM取款机的具体工作原理以及java简单系统的设计方法。

二、内容

(一) ATM的研究现状

众所周知随着信息时代科技的飞速发展和随着全球金融行业的兴起,使用ATM取款机、计算机信息技术以及计算机科学技术的发展,给人们的生活带来了翻天覆地的变化,同时这些技术在人们生活中的运用,随着科学技术的进步,经营方式的转变,处理信息系统的内容和形式也在发生变化。当前,以计算机和通信技术为基础的信息系统正处在蓬勃发展的时期,ATM取款系统可充分利用网络技术和数据库技术的发展,形成一种全新的运作方式。随着因特网的形成和发展,基于网络技术的信息系统除了它传统的功能外,实现了特定地方刷卡消费等。不仅提高了银行的业务处理能力,而且大大的节省了人们取钱所花费的时间和价值;并且在有效防止了一些非法的业务操作,对于一些复杂的信息,就能够充分的发挥它们的优越性。

据悉,中国最近几年ATM增长速度维持在10%以上,而世界其它国家ATM增长率大致为3%。现在,中国已经成为全球最大的ATM市场。但是,市场研究机构同时认为,我国今后几年的发展势头将较过去几年慢下来,不再维持过去两位数的高增长率,因为大城市的ATM拥有量已达一定程度,而二线城市的ATM则需要一定的配套设施方能开始高速度发展。目前,国内ATM最多只有七八种功能,相对于其它国家,如新加坡,功能确实少一些。新加坡的ATM交易功能多达40多种。在发达国家,多种新技术应用于ATM,使ATM使用更加便捷,功能也更多。持卡人无需携带银行卡,虹膜识别、手纹识别ATM可通过识别客户独有的生物特征进行交易。借助无线通ATM,持卡人可以远程在手机上先行操作交易,并在ATM上按最后一个交易指令。另外,有的ATM可以打印彩色地图、销售电影票和邮票等。从技术上讲,这些最先进的ATM随时可以提供给中国的商业银行。但ATM是一个终端,其功能需要银行主机的配合。而且中国银行业正对外资银行加速开放,进入中国的外资银行今后一定会将最新的ATM带入中国。

(二)ATM取款机系统的影响

ATM取款机诞生可以说是世界金融行业的一大进步,也是历史性的转折点。ATM自动取款机不仅能提高了银行的业务处理能力,还能大大的节省人们取钱所花费的时间和价值;并且在有效防止了一些非法的业务操作,对于一些复杂的信息,就能够充分的发挥它们的优越性。

ATM系统对金融业的变革产生了和正在产生着深远的影响。从现代金融业新概念来看,ATM系统就是电子信息技术在金融业金融管理的一种应用。它避免了对于用户的信息资料、以及资金统计等用人工办理。数据信息处理工作量大,繁琐,数据处理手工操作,工作量大,工作时需实时认真办理,一但出现错误将带来很大的损失。从而解决了用户信息和资金信息的繁杂问题,对于ATM取款系统数据的统计和核实等都是采用卡号进行核对的,进而实现了数据的准确性、完整性、及时性,避免了工作人员和管理员工作时间一长,再进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。

同时也得用户可以安全的进行操作,便捷,快速的进行取款以及完成一些商业上

2

的交易,大大提高办公效率,能够及时、准确、有效的帮用户办理各种繁琐的手续,也减缓了银行工作人员的压力。

(三)ATM自动取款机系统的展望

近年来我国信息产业发展迅速,手工管理方式在银行帐目管理等需要大量事务处理的应用中已显得不相适应,采用IT技术提高服务质量和管理水平势在必行。目前,对外开放必然趋势使银行业直面外国银行巨头的直接挑战,因此,银行必须提高其工作效率,改善其工作环境。这样,帐户管理的信息化也势在必行。

另外,ATM需要的是更高的人性化和更强大的中间业务,现在的ATM都是穿墙的或者是大堂的,如果要重新设计的话,可以设计更轻便的但是又安全的ATM,比如说可以放在汽车上,火车上,甚至是飞机上。将来的ATM应该不是按键式的,可能会发展成语音操作式,只要人机语音对话就能实现,这对一些残障人士更有帮助。

(四)开发语言和开发平台的选择与介绍

本文利用面向对象开发的方法,联系实际ATM应用界面,采用MyEclipse开发工具,以windows7操作系统、MySql小型数据库为后台以及利用java语言和通过实现JDBC数据库的连接开发出了一套模拟自动取款机系统。

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策(本词条

3

“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。

MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSP,CSS,Javascript,Spring,SQL,Hibernate。

MyEclipse 是一个十分优秀的用于开发Java, J2EE的 Eclipse 插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse目前支持Java Servlet,AJAX, JSP, JSF, Struts,Spring, Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse几乎囊括了目前所有主流开源产品的专属eclipse开发工具。

三、总结

本文利用java语言面向对象、跨平台、分布应用等特点,采用MyEclipse开发工具,以windows7操作系统、MySql数据库为后台开发出了一套自动取款机系统,基本上实现了账户查询、修改密码、转账和取款等业务。

随着计算机技术飞速发展及其应用领域的扩大,特别是计算机网络和电子商务的发展,极大地改变了商业银行传统的经营和管理模式。能够为客户提供方便、快捷、安全的服务,也能有效降低银行的运营成本,这是银行管理系统追求的目标。目前,对于现代化银行运营的要求是客户可以实现随时随地的业务交易,银行职员可以进行高效合理的工作管理,实现银行业务电子化。

4

四、参考文献

[1] 孙卫琴.Java 面向对象程序设计[M]. 北京:电子工业出版社,2009.7 [2] 王国辉, 吕海涛. Java数据库系统开发案例精选[M]. 北京:人民邮电出版社 [3] 陈国君, 陈锡祯. Java2程序设计基础[M]. 北京: 清华大学出版社 [4] 袁海燕. Java实用程序设计100例[M]. 北京: 人民邮电出版社 [5] 朱站立、沈伟. Java程序设计实用教程[M]. 电子工业出版社 [6] 印旻编、许伟. Java2从入门到精通[M].北京:清华大学出版社

[7] 杨树林,胡洁萍. Java语言最新实用案例教程. 北京:清华大学出版社,2010.7: 141–232

[8] 李刚等. Java数据库技术详解. 北京:化学工业出版社,2010.7

[9] [美]Liang Y D.Java语言程序设计.王镁,等译. 北京:机械工业出版社,2005. [10] [美]Kathy Walrath 等.JFC Swing标准教材. 北京:电子工业出版社,2005. [11] 郑莉,王言行,马素霞. Java语言程序设计. 北京:清华大学出版社,2006. [12] 朱喜福,林建民,唐永新. Java程序设计. 北京:人民邮电出版社,2001. [13] 朱喜福. Java程序设计. 北京:清华大学出版社,2005.

5

摘要:21世纪是催人奋进的时代,科学技术飞速发展,金融业ATM取款机的诞生可以说是世界金融行业中的一大进步,更是其发展历史性的转折点。本文以实际提款机应用为背景,阐述了系统开发过程的开发方法、系统分析和一般步骤。

全文共分为ATM系统综述、ATM系统的开发方法、系统分析、系统设计、系统实现和系统维护与评价七个部分,利用JAVA语言强大功能,并具有面向对象开发等的特点,联系实际ATM应用界面,采用MyEclipse开发工具,以windows7操作系统、MySQL数据库为后台开发出了一套自动取款机系统,基本上实现了账户查询、修改密码、转账和取款等业务。

针对这一系列问题,我们利用JAVA语言在MyEclipse下设计了这么一个系统,使得用户可以安全的进行操作,便捷,快速的进行取款以及完成一些商业上的交易,大大提高办公效率,能够及时、准确、有效的帮用户办理各种繁琐的手续,也减缓了银行工作人员的压力。

关键字:ATM Java MyEclipse MySQL

Abstract:The 21st century is the era of inspiring. With the rapid development of science and technology, the birth of the ATM cash machines in the financial industry deserves to be called a tremendous progress and a historic turning point in the world's financial industry .This paper described the system development process,system analysis and general steps of the development methodology.

This paper is composed by the ATM system, the ATM system development methodology, system analysis, system design, system implementation and system maintenance, and evaluation .Take good advantage of the powerful features and the characteristics of object-oriented development of the JAVA programming language , using MyEclipse development tools, window7 operating system, MySql database as a background to develop an automatic teller machine system, and basically realized account inquiries, modify password, transfers and withdrawals business.

For this series problem, we use JAVA language to design such a system in the the MyEclipse environment so that the user can operate safely and conveniently.Besides, not only it can fasten the completion of commercial transactions, but also greatly improving the efficiency of the office,.Most important of all ,ATM can timely and accurate effectively help users handle the cumbersome procedures, and also slow down the pressure of the bank staff.

Key words: ATM Java MyEclipse MySQL

目 录

目 录 ................................................................. 1 1. ATM系统开发方法 ..................................................... 1

1.1系统方法概述 .................................................... 1 1.2本系统使用方法概述 .............................................. 2 2. 系统分析 ............................................................ 2

2.1系统初步调查 .................................................... 2 2.2可行性研究 ...................................................... 2 2.3系统详细调查及提出 .............................................. 3 3. 系统设计 ............................................................ 6

3.1 开发环境 ........................................................ 6 3.2 系统总体结构设计 ................................................ 7 3.3 系统详细设计 .................................................... 8

3.3.1 数据库设计 ................................................ 8 3.3.2 界面模块设计 ............................................. 10

4. 系统实现 ........................................................... 18

4.1程序设计与调试 ................................................. 18

4.1.1程序设计 .................................................. 18 4.1.2程序调试 .................................................. 19 4.2 试运行 ......................................................... 19 5. 系统维护 ........................................................... 19 6. 系统评价 ........................................................... 20 7. 结束语 ............................................................. 20 参考文献 .............................................................. 22 附 件(论文源代码) .................................................. 23

附一 主界面 ........................................................ 23 附二 登陆界面 ...................................................... 24

附三 功能菜单界面 .................................................. 26 附四 修改密码界面 .................................................. 27 附五 结束对话框界面 ................................................ 30 附六 退出信用卡界面 ................................................ 30 附七 查询余额界面 .................................................. 31 附八 取款界面 ...................................................... 32 附十 查询服务界面 .................................................. 34 附十一 查询用户信息界面 ............................................ 35 附十二 转账界面 .................................................... 36 致谢 .................................................................. 39

1. ATM系统开发方法

1.1系统方法概述

软件开发方法是一种使用早已定义好的技术集及符号表示习惯来组织软件生产的过程。开发目标是在规定的投资和时间内,开发出符合用户需求的高质量的软件。任何系统均有其产生、发展、成熟、消亡或更新换代的过程。这个过程称为系统的生命周期。系统生命周期法提供的思路、逻辑、技能、工具与工作规范,是系统开发、处理管理信息系统建设中各类实际问题的重要基础,对复杂系统的建设具有重要的指导意义。系统开发是管理信息系统建设中工作任务最为繁重,也是最重要的一个阶段。从项目开发到结束的整个过程,称为系统开发的生命周期。系统开发的生命周期一般分为系统分析、系统设计和系统实施。

结构化生命周期法是一种面向数据流的开发方法。该方法简单实用、应用较广、技术成熟,方法的指导思想是自顶向下、逐步求精,基本原则是能动的分解与抽象,特别适合于数据处理领域的问题,随着开发项目规模的变化,该方法也就暴漏出了它的缺点:(1)对于规模大、特别复杂的项目不太适应 (2)难于解决软件重用问题 (3)难于适应需求变化问题,难于彻底解决维护问题。

到了90年代,主流的开发方法是面向对象的开发方法,它的基本出发点是尽可能的按照人类认识世界的方法和思维方式来分析和解决问题。面向对象方法支持软件重用和原型概念,提高了系统开发的效率,因而得到了ATM系统各计算机界的极大关注。该方法包括面向对象分析、面向对象设计、面向对象实现。

系统开发工作的自动化、计算机化是提高系统开发效率与质量的重要途径。计算机辅助软件工程(简记为CASE)也是当前信息系统领域和计算机应用领域的热门话题。CASE技术的目标是实现系统开发生命周期内各阶段工作基于计算机的自动化。这将导致系统开发工作的根本变化。

1.2本系统使用方法概述

比较各种开发方法的特点,结合银行取款系统的实际情况,整个系统采用结构化生命周期法,以原型法和面向对象的开发方法作为辅助,即系统总体上采用结构化生命周期法进行系统分析和系统设计,系统实施等步骤采用面向对象方法。本系统开发工具使用的是基于 Java 的可扩展开发平台的MyEclipse。

2. 系统分析

系统分析是管理系统开发的起始阶段,也是MIS(管理信息系统)开发工作中最重要的一环。系统分析阶段的主要活动有:系统初步调查、可行性研究、系统详细调查、新系统逻辑方案的提出。系统分析的目标是明确系统开发的目标和用户信息需求,提出系统的逻辑方案。为系统设计做好准备。

2.1系统初步调查

系统的初步调查是系统分析阶段的第一项活动,也是系统开发的第一项活动,初步调查的主要目标是从系统分析人中和管理人员的角度看新系统开发有无必要和可能。

通过亲身体验总结各银行ATM提款机界面流程,得到本系统开发的主要流程界面(主要功能取款、转账、查询、修改密码等)。并决定亲自开发取款机系统,测试自己水平。

2.2可行性研究

可行性研究(Feasibility Study),是指在调查的基础上,通过市场分析、技术分析、财务分析和国民经济分析,对各种投资项目的技术可行性与经济合理性进行的综合评价。可行性研究的基本任务,是对新建或改建项目的主要问题,从技术经济角度进行全面的分析研究,并对其投产后的经济效果进行预测,在既定的范围内进行方

案论证的选择,以便最合理地利用资源,达到预定的社会效益和经济效益。

可行性研究必须从系统总体出发,对技术、经济、财务、商业以至环境保护、法律等多个方面进行分析和论证,以确定建设项目是否可行,为正确进行投资决策提供科学依据。项目的可行性研究是对多因素、多目标系统进行的不断的分析研究、评价和决策的过程。它需要有各方面知识的专业人才通力合作才能完成。可行性研究不仅应用于建设项目,还可应用于科学技术和工业发展的各个阶段和各个方面。

可行性研究的目的就是用最小的代价在最短的时间内确定该软件项目是否能够开发,是否值得去开发。实质上就是进行一次简化、压缩了的需求分析、设计过程。可从以下三个方面分析研究每种解决问题的可行性:

a.技术可行性:对项目的功能、性能、限制条件进行分析,确定在现有的资源条件下项目是否能实现。(开发的风险、资源的有效性、技术)

b.社会可行性:要开发的项目是否存在任何侵犯、妨碍等责任问题,要开发项目的运行方式在用户组织内是否行得通,现有管理制度、人员素质、操作方式是否可行。

c.经济可行性:进行开发成本的估算以及了解得到效益的评估,确定要开发项目是否值得投资开发。对银行业来说,是靠存款贷款之间的差额来生存的,所以要尽可能的拉拢更多的客户使用本行,ATM取款机是为了能让为客户更便捷的服务,从而更具有吸引力。从银行的角度出发还是非常愿意把一部分资金投入到这方面的。

2.3系统详细调查及提出

系统详细调查是在可行性研究的基础上进一步对现行系统进行全面、深入的调查和分析,弄清现行系统运行状况,发现其薄弱环节,确保新系统比原系统更有效。详细调查的重点在于对系统的内部情况更详细和具体的了解,从而可以提供在新系统建设时改进或更换的内容。

明确用户的信息需求,明确新系统的逻辑功能。主要工作是对用户需求进行进一步调查分析,创建新系统的逻辑模型。逻辑模型主要以数据流程图和数据字典为主要描述工具。

一般登陆模块只输入账号、密码,当然在实际应用中没有要求用户输入账号,这是因为在磁卡上有个感应区,设计此模块时加上了验证码。银行帐目管理系统是针对

银行帐目的日常管理而设计。银行操作系统不仅要求操作方便而且要求界面简洁,它需要实现帐户管理,用户查询和查询统计等几个功能。其中帐目管理又包含了开户、存款、取款和修改信息的功能。用户可以通过不同的方式来查询需要的信息。

通过该系统的设计实现,使银行部门更好地进行业务管理,为客户提供更加优质的服务。通过仔细调查得以下功能图和业务流程图:

图3-1 功能图

ATM取款机系统 登入模块

验证码 输入账号 输入密码 查询余额 转账 查卡信息 修改密码 取款 退卡 功能模块 退出模块

该系统主要实现银行卡用户的存取款,以及进行一些简单的查询和转账业务,同时能够在系统里面进行客户密码的修改,实现简单的机器与客户交互。

图3-2 业务流程图:

查询 取款 待机界面 (按任意键进入登录界面) 登录界面 (卡号、密码、验证码、取消等选项) 密码错误,请从新输入! 选择界面 (查询、取款、转帐、修改密码、取消) 转帐 修改密码 交易完成 点击退出 谢谢使用,再见!

3. 系统设计

系统设计阶段的主要目的是将系统分析所提出的反映用户信息需求的系统逻辑方案转换成可以实施的基本计算机(ATM取款机)与通信系统的物理(技术)方案。

系统设计主要包括系统总体结构设计和详细设计。系统设计的依据主要有系统分析的成果、现行技术、用户需求、系统运行环境。

3.1 开发环境

(1)、软件开发工具的选择

本系统采用Java作为编程语言,采用MyEclipse软件开发环境,MyEclipse对数据库应用的强大支持,使数据库应用开发功能更强大,控制更灵活,编译后的程序运

行速度更快。MyEclipse企业级工作平台(MyEclipse Enterprise Workbench,简称MyEclipse)是对EclipseIDE的扩展,利用它可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSF,CSS,Javascript,SQL,Hibernate。

(2)、数据库管理系统的选择

由于本次设计所采用的是MySql 小型数据库,这种数据库用来存储少量数据,在设计和实施上有很大的优势,根据之前所做的功能分析,以及ATM柜员机自身所具

备的功能。MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQLAB公司,在2008年1月16号被Sun公司收购。MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。 (3)、开发平台的选择

windows 平台以其全新的界面简单快捷的操作方式而成为软件开发的趋势。根据本系统的运行环境和实际情况,选择Windows7(旗舰版)作为开发测试和运行的平台。

3.2 系统总体结构设计

系统总体结构是指整个系统由哪些部分组成,以及各部分在物理上、逻辑上的相互关系,包括硬件部分和软件部分,该设计包括:系统总体布局方案的确定、软件系统总体结构的设计、计算机硬件方案的选择和设计、数据存储的总体设计。根据业务流程图转化为软件的体系结构,进而用软件结构图建立物理模型,得系统活动图,如下:

图4-1系统结构图:

启动系统储户登入用户主界面退出系统取款查询修改密码转账

图4-2系统活动图:

3.3 系统详细设计

详细设计的实现根据结构程序设计原理,将每个模块的功能用相应的标准语句表示出来。包括代码设计、数据库设计、用户界面设计、处理过程设计。代码设计是指把系统管理对象数字化或字符化,便于计算机的处理。遵照代码设计的原则:合理性、简明性、系统性、稳定性、可扩充性、标准化、便于识别和记忆。

数据库设计指对系统所采用的数据模式、子模式、应用程序、数据库等根据用户的具体要求进行分析和设计。它也是管理信息系统设计的重要组成部分。数据库设计的基本原则是尽可能提高数据组织的相对独立性,简化其结构,即用规范化方法设施数据存储的结构,提高数据的可维护性、完整性、一致性。 3.3.1 数据库设计

通过收集和分析用户需求,确定了数据库要保存的信息,我将此次数据库设计为二个如下所示表:

1、客户表(user) 字段信息 姓名 性别 身份证号 字段名称 userName userSex userID 类型 varchar varchar varchar 宽度 10 2 10 CardID 小数位数 空特性 N N N

卡号 userCardNo varchar 10 N 图 4-3用户信息设计表

2、账户表(card) 字段信息 卡号 账户余额 密码 字段名称 cardNo cardBalance cardPassWord 类型 varchar decimal varchar 宽度 10 10 6 CardID 小数位数 2 空特性 N N N 图 4-4 账户信息设计表

3.3.2 界面模块设计

用户界面设计目前已成为评价软件质量的一条重要指标,所谓用户界面是指软件系统与用户交互的接口,通常包括输入设计、输出设计、人机对话的界面设计。

图 4-5登录模块

主要代码如下:

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand() == \"中文\") { this.setVisible(false);

new Client00(\"输入密码\");

} else if (e.getActionCommand() == \"英文\") { String inputValue = JOptionPane }

.showInputDialog(\"Please input a value\");

}//监听是选择中文输入还是英文输入 }

public class ATM { }

public static void main(String[] args) { new Client(\"ATM自动取款系统\"); }

当插入现金卡之后出现界面,系统出现选择中英文的登入方式,点击按钮之后(中文)出现后对话框:

图 4-6登录界面

登录模块依然采用的是密码验证的方式,需要用户输入卡号、密码和验证码然后点击确认进行验证,程序将根据输入卡号查找密码,第一没有找到提示,找到继续下一步,在这里我用了验证码方式,输入正确继续,程序系统将根据卡号调用后台数据库查找与卡号对应的密码并与用户输入的密码相对比。密码正确继续,否则当输入的次数达到三次时,系统将提示你与前台服务员取得联系。第二如果没有找到,提示输入账号错误。

主要代码如下:

(1)从后台获得账号信息,用于与用户输入的账号密码对照

Class.forName(\"com.mysql.jdbc.Driver\");//加载驱动

Connection con = DriverManager.getConnection(url,

\"root\",

null);//建立连接

Statement sql = con.createStatement();//获得一个statement对象

String ql = panel1.textB.getText();//获取账号

ResultSet rs = sql.executeQuery(\"select cnima from card where cno=\"+ ql + \"\");//根据账号搜索密码,获得结果集

(2)系统生成验证码并验证用户输入的验证码

public void actionPerformed(ActionEvent e) {

char[] passwords = panel1.textA.getPassword();

String password = new String(\"112626\");// 设置账号123456789的初始if (e.getActionCommand().equals(\"确定\"))

if(panel1.textC.getText().equals(panel1.label3.getText())) {heshi(); } else {

JOptionPane.showMessageDialog(frame, \"你输入的验证码有误,

请重新输入。\"); }

密码为112626,每输入一次都有提示,在连续输入三次不正确后系统自动退出。

else if (e.getActionCommand() == \"取消\") { this.setVisible(false); new Client08(\"\"); }

}//当输入验证码有误是弹出一个提醒窗口

图 4-7首页设计

首页的设计主要是设计了查询余额、取款、转账、密码更改及退出按钮等ATM的

一些标准操作界面。

主要代码如下: (1)本界面设置了五个按钮

button1=new JButton(\"查询\"); button2=new JButton(\"取款\"); button3=new JButton(\"转账\"); button4=new JButton(\"退出\");

button5=new JButton(\"修改密码\"); (2)点击以上五个按钮可以触发进入相应操作界面

public void actionPerformed(ActionEvent e){

if(e.getActionCommand()==\"取款\"){ this.setVisible(false); new Client02(\"请选择取款金额\"); }

else if(e.getActionCommand()==\"查询\"){ this.setVisible(false); new Client06(\"查询服务\");

}

else if(e.getActionCommand()==\"修改密码\"){ this.setVisible(false); new Client05(\"修改密码服务\"); }

else if(e.getActionCommand()==\"转账\"){ this.setVisible(false); new Client04(\"用户转账服务\"); }

else if(e.getActionCommand()==\"退出\"){ this.setVisible(false);

new Client08(\"\"); }

}

图 4-8查询模块

在此模块中,将通过用户所使用的账户编号来进行余额的查询,将显示账户的实

际余额,点击“查询”按钮,通过按钮的Action方法进行方法调用,就可以实现查询的功能并把查询到的账户余额显示到界面上。当用户点击“返回”时,程序返回到初始主界面。

图 4-9 查询卡信息模块

此功能用来显示持卡人的基本信息包括姓名、性别、身份证、卡号等,点击查询

按钮后系统将根据与输入的卡号相一致的字段信息,显示输出在该页面上。当点击取消按钮时系统将返回到初始主界面。

图 4-10 修改密码模块

此模块需要用户输入旧密码后,两次输入新密码进行确认,然后,点击确定,修

改密码,成功后给出提示信息,其中考虑到一些用户的输入错误问题,我做出了一些异常的判断和处理,空输入,输入两次新密码不匹配和原密码不正确等问题。修改更新密码的完成仍然依靠按钮控件的Action事件完成。

修改密码主要代码如下:

if(new String(passwords1).equals(new String(passwords2))){

this.setVisible(false);

JOptionPane.showMessageDialog(frame,\" 输入新密码和和原密码

一致,请重新输入。\");

panel10.text1.setText(\"\");

panel10.text2.setText(\"\"); panel10.text3.setText(\"\"); return; }

this.setVisible(false);

JOptionPane.showMessageDialog(frame,\" 正修改原密码,请 updateM();

if(new String(passwords2).equals(new String(passwords3))){

等待\");

}// 程序根据输入原密码,查找数据库表格user进而修改密码数据表数据。 else {

JOptionPane.showMessageDialog(frame,\" 两次输入新密码不一

致,请重新输入。\");

panel10.text2.setText(\"\");

panel10.text3.setText(\"\"); }

//}

if(panel10.text1.getText().equals(\"\")||panel10.text2.getText().equals(\"\")||panel10.text3.getText().equals(\"\")){

JOptionPane.showMessageDialog(frame,\" 请输入原密码及新

密码!\");

return;

} else{

if(new String(passwords1).equals(new String(passwords2))){

JOptionPane.showMessageDialog(frame,\" 输入新密码和原密码

一致,请重新输入。\");

panel10.text2.setText(\"\"); panel10.text3.setText(\"\"); return;}

if(new String(passwords2).equals(new String(passwords3))){

JOptionPane.showMessageDialog(frame,\" 正修改原密码,

请等待\");updateM();}// 程序根据输入原密码,查找数据库表格user进而修改密码数据表数据。

else {

JOptionPane.showMessageDialog(frame,\" 两次输入新密码不

一致,请重新输入。\");

panel10.text2.setText(\"\"); panel10.text3.setText(\"\");} }

图 4-11 转账业务模块

在此模块,用户根据需要自己输入卡号及欲转金额,这里的设计其实最终归结于

具体的SQL语句而言,系统将根据输入的卡号查找与之对应的用户数据表,从而修改金额。第一,系统首先根据本卡号,查找本卡金额与输入的金额对比,如果找到,且金额允许就提示转账成功。第二,如果,没有找到输入的卡号,提示没有该用户,重新输入欲转账号。

图 4-12 取款模块

取款模块是一个相对比较重要的模块,因为ATM机就要的功能就是取款业务,用

户选择账户名点击取款金额然后点击取款进行取款操作,所以几个数字按钮的设计比较大,方便用户操作,其中一些提示信息也相应地给出,以防用户误操作。由于此模块不需要用户输入,所以没有对输入的异常处理。根据所查资料我所采用的SQL语句调用方法是预处理指令方法,这种方法对于处理此程序具有很大的益处,而且可以防止非法SQL注入。当用户点击数组按钮后系统将根据输入的卡号查找卡号余额并与按钮的数字相对比,如果选择的金额大于本卡余额将提示(不允许透支)。

图 4-13 退卡模块

退卡模块相对简单多了,没有什么具体的界面设计,只是一个消息的提示,也是一种友好的处理方式,以防止用户误操作的方法。

4. 系统实现

系统实施是ATM系统开发过程中的最后一个阶段。它的目标是将技术设计转化成物理实现。系统实施阶段的主要任务有:按总体设计方案购置和安装计算机网络系统、建立数据库、编程与调试、整理基础数据、培训操作人员、程序试运行和系统切换。

4.1程序设计与调试

4.1.1程序设计

程序设计语言的选择通常考虑到项目的应用领域、软件开发方法、软件执行环境、算法和数据结构的复杂性、和软件开发人员的知识。程序设计是指使用选定的程序设计语言,把经过概要设计和详细设计所得到的信息处理过程,转换成能在计算机上运行的程序源代码。

本系统中用MyEclipse编程工具,采用结构化的编程方法对模块进行程序编写。具体源程序见附件。

4.1.2程序调试

软件测试的目的是尽可能多的发现程序中的错误,而调试则是在进行了成功的测试之后才开始的工作。程序调试是指在系统测试的基础上,将发现的问题进行改正,使之符合设计标准。本系统采用的主要方法如下:

(1)单元测试:是指原程序中每个程序单元进行测试,检查各个模块是否正确实现规定的功能,从而发现模块在编码中或算法中的错误。采用白盒法对各模块进行逻辑错误排查,用黑盒法录入一些有特征的数据从不同角度验证结果。

(2)集成测试:在单元测试的基础上,将所有模块按照设计要求组装成一个完整的系统进行测试。

(3)确认测试(有效性测试):它的任务是检查软件的功能与性能是否与需求规格说明书中确定的指标相符合。一般分为用黑盒进行确认测试,再检查软件所有文档的完整性、正确性——软件配置审查。

4.2 试运行

系统试运行是指对系统的运行环境和资源进行设置、系统运行和控制参数设定、数据加载以及调整系统与业务工作同步等。

5. 系统维护

系统维护是软件生存周期中时间最长的一个阶段,所花费的精力和费用也是最多的一个阶段,系统维护的目的是保证系统中的各个要素随着环境的变化始终处于最新的、正确的工作状态。系统维护是信息系统可靠运行的重要技术保障,我们应给予足够的重视。

系统维护内容有校正性维护、适应性维护、完善性维护和预防性维护四种。 (1)校正性维护:为了识别和纠正错误,修改软件性能上的缺陷,进行确定和修改错误的过程。

(2)适应性维护:为了使应用软件适应变化而修改软件的过程

(3)完善性维护:为了适应变化,应用软件原来的功能和性能需要扩充和增强。从而达到提高软件运行效率,增强软件性能而进行的维护。

(4)预防性维护:为了提高软件的可维护性和可靠性而对软件的修改。

6. 系统评价

系统评价应是贯穿系统整个生命周期各个阶段的重要决策手段和工作环节。狭义上的系统评价是指系统投入运行后从功能性能、经济效益、社会效益上的评价

本系统基本实现了取款、查询余额、转账、修改密码等功能,但由于时间短、知识水平有限,经验不足,系统仍存在不足,该系统主要有以下特点: 1、程序可读性强,易懂易维护

2、用户界面简洁,方便了用户使用。

3、安全性好,系统仍然使用输入密码方式,保证了系统的安全。 4、系统稳定,基本达到预期的功能要求。

5、系统还存在着许多不足,特别是在数据库的链接上,在代码的编写上也存在着很多的不足,代码存在着很多的缺陷。

6、在系统的的界面效果上也存在不足,系统界面显示应在屏中间。

总的来说,本次设计当中存有许多的不足之处,基本上设计出了和自己预想中的效果,但同时在设计上也还存在着很多的,很多事没有什么用的代码,我想是因为时间和经验的问题,以后多练习就肯定能提高,UI设计方面,仔细地看,还有一些小问题,系统运行时的警告就多达36处,但不会影响程序的运行,只会在美观方面有一定的影响,今后一定改善。

7. 结束语

1.通过java编写简单的ATM登录系统的设计,我不仅复习了上学期的java编程

设计基础知识,并且增强了我对java语言的领悟和应用,同时也更深刻的懂得了学好学会了并不是代表能够真正的在实践中运用得流畅,这次实践给了我们一个既动手

又动脑独立实践的机会,但其中也包含了自我寻找资料的能力和同学间的合作能力。这个系统将理论和实践相结合,提高自己的分析、解决问题的能力,并且让我明白了计算机的技术一定要从实际出发才能真正的提高自己的能力。

2.经过了一个多月的设计和编写这个系统,我深刻的认识到了自己的不足和缺

点,自己处在什么水平,和同学相比自己的差距有多大,但是我也发现了自己的优点和长处,不管怎么样,通过这次学习,我懂得了怎样取长补短,充分利用网络资源的重要性。

参考文献

[1] 夏宽理. Java语言程序设计. 北京:机械工业出版社,2008.4. [2] 张孝祥. Java就业培训教程. 北京:清华大学出版社,2008.6. [3] 陆丽娜. 软件工程. 北京:经济科学出版社,2000.3. [4] 丁宝康. 数据库系统原理. 北京:经济科学出版社,2007. [5] 孙卫琴. Java面向对象程序设计[M]. 电子工业出版社,2009.7.

[6] 王国辉, 吕海涛. Java数据库系统开发案例精选[M]. 北京:人民邮电出版 社.

[7] 陈国君, 陈锡祯. Java2程序设计基础[M]. 北京: 清华大学出版社. [8] 袁海燕. Java实用程序设计100例[M]. 北京: 人民邮电出版社. [9] 朱站立、沈伟. Java程序设计实用教程[M]. 电子工业出版社. [10] 印旻编、许伟. Java2从入门到精通[M].北京:清华大学出版社.

[11] 杨树林,胡洁萍. Java语言最新实用案例教程. 北京:清华大学出版社, 2010.7: 141–232

[12] 李刚等. Java数据库技术详解. 北京:化学工业出版社,2010.7

[13] [美]Liang Y D.Java语言程序设计.王镁,等译. 北京:机械工业出版社,2005. [14] [美]Kathy Walrath 等.JFC Swing标准教材. 北京:电子工业出版社,2005. [15] 郑莉,王言行,马素霞. Java语言程序设计. 北京:清华大学出版社,2006. [16] 朱喜福,林建民,唐永新. Java程序设计. 北京:人民邮电出版社,2001. [17] 朱喜福. Java程序设计. 北京:清华大学出版社,2005.

附 件(论文源代码)

附一 主界面

class Panel1 extends JPanel {

JLabel label1, label2; Panel1() {

setLayout(new GridLayout(4, 1));

label1 = new JLabel(\" \" + \"银行存取款系统\");

label2 = new JLabel(\" \" + \"欢迎你成为本行用户,你可以选择中文或英文方式\"); add(new JLabel());add(label1);add(label2);add(new JLabel());}}

class Panel2 extends JPanel {

JButton button1, button2; Panel2() {

setLayout(new GridLayout(3, 6));

button1 = new JButton(\"中文\");button2 = new JButton(\"英文\");

add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel()); add(new JLabel());add(new JLabel());add(new JLabel());add(button1); add(new JLabel());add(new JLabel());add(button2);add(new JLabel()); add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel()); add(new JLabel());dd(new JLabel());}}

class Client extends JFrame implements ActionListener {

Panel1 panel1;Panel2 panel2;JFrame frame; Client(String s) {

super(s);Container con = this.getContentPane();

con.setLayout(new GridLayout(2, 1));panel1 = new Panel1(); panel2 = new Panel2();con.add(panel1);con.add(panel2); panel2.button1.addActionListener(this);

public class ATM {

panel2.button2.addActionListener(this); this.setVisible(true);this.pack();}

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand() == \"中文\") {

this.setVisible(false);new Client00(\"登陆界面\");

String inputValue= JOptionPane.showInputDialog(\"Please input a value\");}}} } else if (e.getActionCommand() == \"英文\") {

public static void main(String[] args) {

new Client(\"银行账户管理系统\");

}

}

//ATM.java

附二 登陆界面

class Panel01 extends JPanel {

JLabel label1, label2, label3, label4;JPasswordField textA; JTextField textC;static JTextField textB;char t[] = new char[4]; Panel01() {

setLayout(new GridLayout(4, 4)); for (int i = 0; i < 4; i++) { }

String mm = new String(t);// 获得验证码

label2 = new JLabel(\"请输入卡号:\");label1 = new JLabel(\"请输入密码:\"); label3 = new JLabel();label4 = new JLabel(\"请输入验证码:\"); label3.setBackground(Color.white);label3.setForeground(Color.red); textC = new JTextField(10);textC.setForeground(Color.blue); label3.setText(mm);textA = new JPasswordField(6); textA.setEchoChar('*');textB = new JTextField(\"\"); for (int i = 0; i < 5; i++) { }

add(new JLabel());

t[i] = (char) (Math.random() * 26 + 'a');

add(label2);add(textB);add(new JLabel());add(new JLabel()); add(label1);add(textA);add(new JLabel());add(new JLabel()); add(label4);add(textC);add(label3);}}

class Panel02 extends JPanel {

JButton button1, button2; Panel02() {

setLayout(new GridLayout(3, 6));button1 = new JButton(\"确定\"); button2 = new JButton(\"取消\"); for (int i = 0; i < 7; i++) {

add(new JLabel());}

add(button1);add(new JLabel());add(new JLabel());add(button2); for (int i = 0; i < 6; i++) {

add(new JLabel());}}}

class Client00 extends JFrame implements ActionListener {

Panel01 panel1;Panel02 panel2; JFrame frame = this;//有改动请注意 //JFrame frame;

入。\");}

return;

int i = 0, j = 0; Client00(String s) {

super(s);Container con = this.getContentPane();

con.setLayout(new GridLayout(2, 1));panel1 = new Panel01(); panel2 = new Panel02();con.add(panel1);con.add(panel2);

panel2.button1.addActionListener(this);panel2.button2.addActionListener(this); this.setVisible(true);this.pack();}

public void actionPerformed(ActionEvent e) {

char[] passwords = panel1.textA.getPassword();

String password = new String(\"112626\");// 设置账号123456789的初始密码为112626,if (e.getActionCommand().equals(\"确定\"))

if (panel1.textC.getText().equals(panel1.label3.getText())) { heshi(); } else {

JOptionPane.showMessageDialog(frame, \"你输入的验证码有误,请重新输

每输入一次都有提示,在连续输入三次不正确后系统自动退出。

else if (e.getActionCommand() == \"取消\") {

this.setVisible(false);new Client08(\"\");}}

public void heshi() {

if (panel1.textA.getText().equals(\"\") }

|| panel1.textB.getText().equals(\"\")) {

JOptionPane.showMessageDialog(frame, \" 请输入账号、密码!\");

String url = \"jdbc:mysql://localhost/BankAccountSystem\";// 程序直接使用当前类目录下的数据库文件

try {

Class.forName(\"com.mysql.jdbc.Driver\");

Connection con = DriverManager.getConnection(url, \"root\Statement sql = con.createStatement(); String ql = panel1.textB.getText();//获取账号

ResultSet rs = sql.executeQuery(\"select cnima from card where cno=\"

+ ql + \"\");//根据账号搜索密码

if (rs.next()) {

String qerycmima = panel1.textA.getText(); String s = rs.getString(1); if (qerycmima.equals(s)) { JOptionPane

.showMessageDialog(frame, \" 连接成功!\");

this.setVisible(false);new Client01(\"用户取款系统\");

} 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, \" 该用户不存在,重新

panel1.textA.setText(\"\");panel1.textB.setText(\"\"); panel1.textC.setText(\"\");return;}

输入!\警告!\

} catch (SQLException g) {

System.out.println(\"E Code\" + g.getErrorCode()); System.out.println(\"E M\" + g.getMessage()); } catch (Exception e) {

e.printStackTrace();}}}

class bankSystem00 {

public static void main(String[] args) {

new Client00(\"登陆界面\");}}

//LoginWindows.java

附三 功能菜单界面

class Panel03 extends JPanel{

JButton button1,button2,button3,button4,button5; Panel03(){

setLayout(new GridLayout(8,6));

button1=new JButton(\"查询\");button2=new JButton(\"取款\"); button3=new JButton(\"转账\"); button4=new JButton(\"退出\"); button5=new JButton(\"修改密码\");

for(int i=0;i<7;i++) { add(new JLabel());}

add(button1); add(new JLabel()); add(new JLabel());add(button2); for(int i=0;i<8;i++){add(new JLabel());} add(button3);add(new JLabel()); add(new JLabel());add(button5); for(int i=0;i<17;i++){add(new JLabel());} add(button4); for(int i=0;i<7;i++){

add(new JLabel());} }}

class Client01 extends JFrame implements ActionListener{ Panel03 panel1;JFrame frame; Client01(String s){

super(s); Container con=this.getContentPane();panel1=new Panel03(); con.add(panel1);panel1.button1.addActionListener(this);

panel1.button2.addActionListener(this);panel1.button3.addActionListener(this); panel1.button4.addActionListener(this);panel1.button5.addActionListener(this); this.setVisible(true);this.pack(); }

public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==\"取款\"){

this.setVisible(false); new Client02(\"请选择取款金额\"); } else if(e.getActionCommand()==\"查询\"){

this.setVisible(false);new Client06(\"查询服务\");} else if(e.getActionCommand()==\"修改密码\"){

this.setVisible(false);new Client05(\"修改密码服务\");} else if(e.getActionCommand()==\"转账\"){

this.setVisible(false);new Client04(\"用户转账服务\"); } else if(e.getActionCommand()==\"退出\"){

this.setVisible(false);new Client08(\"\");} }} class bankSystem01{

public static void main(String []args){

new Client01(\"用户取款系统\");}}//functionOperation.java

附四 修改密码界面

class Panel10 extends JPanel{

JLabel label1,label2,label3;JPasswordField text1,text2,text3;JButton button1,button2; Panel10(){

setLayout(new GridLayout(10,6));label1=new JLabel(\"请输入原密码:\"); label2=new JLabel(\"请输入新密码:\");label3=new JLabel(\"再次确认密码:\"); button1=new JButton(\"确定\");button2=new JButton(\"取消\"); text1=new JPasswordField(6);text1.setEchoChar('*'); text2=new JPasswordField(6);text2.setEchoChar('*'); text3=new JPasswordField(6);text3.setEchoChar('*'); for(int i=0;i<=7;i++)

add(new JLabel());add(label1); add(text1);

for(int i=0;i<=9;i++)add(new JLabel());add(label2);add(text2); for(int i=0;i<=9;i++)add(new JLabel());add(label3);add(text3); for(int i=0;i<=8;i++)add(new JLabel());add(button1);

add(new JLabel());add(new JLabel());add(button2); add(new JLabel());}}

for(int i=0;i<=12;i++)

class Client05 extends JFrame implements ActionListener{ Panel10 panel10;JFrame frame=this; Client05(String s){ }

public void actionPerformed(ActionEvent e){

char[] passwords1=panel10.text1.getPassword(); char[] passwords2=panel10.text2.getPassword(); char[] passwords3=panel10.text3.getPassword(); if(e.getActionCommand()==\"确定\"){

if(new String(passwords1).equals(new String(passwords2))){

this.setVisible(false);

panel10.text1.setText(\"\"); panel10.text2.setText(\"\"); panel10.text3.setText(\"\"); return; }

this.setVisible(false);

}// 程序根据输入原密码,查找数据库表格user进而修改密码数据表数据。

super(s);Container con=this.getContentPane(); panel10=new Panel10(); con.add(panel10);

panel10.button1.addActionListener(this); panel10.button2.addActionListener(this); this.setVisible(true);this.pack();

JOptionPane.showMessageDialog(frame,\" 输入新密码和和原密码一致,请重新输入。\");

if(new String(passwords2).equals(new String(passwords3))){

JOptionPane.showMessageDialog(frame,\" 正修改原密码,请等待\");updateM();

else {

JOptionPane.showMessageDialog(frame,\" 两次输入新密码不一致,请重新输入。\");

panel10.text2.setText(\"\"); panel10.text3.setText(\"\");}//}

return;}

else{if(new String(passwords1).equals(new String(passwords2))){

JOptionPane.showMessageDialog(frame,\" 输入新密码和原密码一致,请重新输入。\");

panel10.text2.setText(\"\"); panel10.text3.setText(\"\"); return;} if(new

String(passwords2).equals(new

String(passwords3))){ JOptionPane.showMessageDialog(frame,\" 正修改原密码,请等待\");updateM();}// 程序根据输入原密码,查找数据库表格user进而修改密码数据表数据。

else {JOptionPane.showMessageDialog(frame,\" 两次输入新密码不一致,请重新输入。\");

panel10.text2.setText(\"\"); panel10.text3.setText(\"\");} }}

else if (e.getActionCommand()==\"取消\"){

this.setVisible(false); new Client01(\"选择服务种类\");}}

public void updateM(){String url = \"jdbc:mysql://localhost/BankAccountSystem\";// 程序直接使用当

if(panel10.text1.getText().equals(\"\")||panel10.text2.getText().equals(\"\")||panel10.text3.getText

().equals(\"\")){ JOptionPane.showMessageDialog(frame,\" 请输入原密码及新密码!\");

前类目录下的数据库文件

try{

Connection con=DriverManager.getConnection(url,\"root\

Statement sql=con.createStatement();String cno=Panel01.textB.getText(); Class.forName(\"com.mysql.jdbc.Driver\");

ResultSet rs=sql.executeQuery(\"select cnima from card where cno=\"+cno+\"\"); if(rs.next()){

String oldmima=rs.getString(1); String soldmima=panel10.text1.getText(); if(oldmima.equals(soldmima)){

String newmima=panel10.text2.getText();

sql.executeUpdate(\"update card set cnima='\"+newmima+\"'where cno=\"+cno+\"\");

JOptionPane.showMessageDialog(frame,\" 密码修改成功!\"); this.setVisible(false);

new Client01(\"选择服务种类\"); } } }

class bankSystem05{

public static void main(String []args){ new Client05(\"修改密码服务\"); } }

//changePassword.java

}

else{JOptionPane.showMessageDialog(null,\" 用户名不存在!\警告!\} catch(Exception ex) { ex.printStackTrace();

}

JOptionPane.YES_NO_OPTION);}

else{JOptionPane.showMessageDialog(null,\" 输入原密码错误,请重新输入!panel10.text1.setText(\"\"); panel10.text2.setText(\"\"); panel10.text3.setText(\"\");} con.close(); frame.repaint();

\警告!\

附五 结束对话框界面

class Panel13 extends JPanel{

JLabel label; Panel13(){

label=new JLabel(\" 谢谢使用,请在30秒内退

出此卡! \");

setLayout(new GridLayout(10,1));

add(new JLabel()); add(new JLabel()) ;add(new JLabel()); add(label); for(int i=0;i<6;i++) } }

class Client09 extends JFrame{

Panel13 panel13; Client09(String s){ super(s);

Container con=this.getContentPane(); panel13=new Panel13(); con.add(panel13); this.setVisible(true); this.pack(); }

add(new JLabel());

}

class bankSystem09{

public void main(String []args){ new Client09(\"提示退出对话框\"); } }

//exitDialogWindow.java

附六 退出信用卡界面

class Client08{

static Athread threadA; Client08(String s){

threadA=new Athread();

threadA.start(); }}

class Athread extends Thread{

static int j=1; public void run(){

for(;j<2;){new Client09(\"提示退出对话框\"); try{sleep(30000);j++;}

catch(InterruptedException e){}}System.exit(0);}}

class bankSystem08{

public static void main(String []args){ new Client08(\"\"); }}

//exitWindow.java

附七 查询余额界面

class Panel06 extends JPanel{

JLabel label1,label2;JTextField textA;JFrame frame; Panel06(){

setLayout(new GridLayout(4,4));label1=new JLabel(\"你的余额为:\"); textA=new JTextField(6); for(int i=0;i<5;i++){

add(new JLabel()); }

add(label1);add(textA); for(int i=0;i<9;i++){ add(new JLabel());}}} class Panel07 extends JPanel{ JButton button1,button2; Panel07(){

setLayout(new GridLayout(3,6));button1=new JButton(\"继续\"); button2=new JButton(\"查询\"); for(int i=0;i<7;i++){

add(new JLabel());}

add(button2);add(new JLabel());add(new JLabel());add(button1); for(int i=0;i<7;i++){

add(new JLabel());}}}

class Client03 extends JFrame implements ActionListener{ Panel06 panel1;Panel07 panel2; Client03(String s){

super(s);Container con=this.getContentPane();

con.setLayout(new GridLayout(2,1));panel1=new Panel06(); panel2=new Panel07(); con.add(panel1);

con.add(panel2); panel2.button1.addActionListener(this);

panel2.button2.addActionListener(this);this.setVisible(true);this.pack();} public void actionPerformed(ActionEvent e){

if(e.getActionCommand().equals(\"继续\")){

this.setVisible(false); new Client01(\"选择服务种类\");} showcjine();}

else if(e.getActionCommand()==\"查询\")

public void showcjine(){String url = \"jdbc:mysql://localhost/BankAccountSystem\";// 程序直接使用当前类目录下的数据库文件

try{

Connection con=DriverManager.getConnection(url,\"root\ Statement sql=con.createStatement();String ql=Panel01.textB.getText(); Class.forName(\"com.mysql.jdbc.Driver\");

ResultSet rs=sql.executeQuery(\"select cjine from card where cno=\"+ql+\"\");

if(rs.next()){

String ucjine=rs.getString(1); panel1.textA.setText(ucjine);}

else{JOptionPane.showMessageDialog(null,\" 该用户不存在\警告!\JOptionPane.YES_NO_OPTION);

}

con.close(); }catch(Exception ex) {

ex.printStackTrace(); } }} class bankSystem03{

public static void main(String []args){ new Client03(\"用户查询服务\"); }} //quetyBalance.java

附八 取款界面

class Panel04 extends JPanel{

JButton button1,button2,button3,button4; Panel04(){

setLayout(new GridLayout(4,6)); button1=new JButton(\"100\"); button2=new JButton(\"200\");button3=new JButton(\"300\"); button4=new JButton(\"500\"); for(int i=0;i<7;i++add(new JLabel()); }

add(button1);add(new JLabel());add(new JLabel()); add(button2); for(int i=0;i<8;i++){ add(new JLabel()); }

add(button3);add(new JLabel());add(new JLabel()); add(button4);add(new JLabel());}} class Panel05 extends JPanel{

JButton button1,button2,button3,button4; Panel05(){

setLayout(new GridLayout(4,6));button1=new JButton(\"800\");

button2=new JButton(\"1000\");

for(int i=0;i<7;i++){add(new JLabel()); }

add(button1);add(new JLabel()); add(new JLabel());add(button2); for(int i=0;i<13;i++){

add(new JLabel()); } }}

class Client02 extends JFrame implements ActionListener{ Panel04 panel1;Panel05 panel2;JFrame frame=this; Client02(String s){

super(s);Container con=this.getContentPane();

con.setLayout(new GridLayout(2,1)); panel1=new Panel04(); panel2=new Panel05();con.add(panel1);

con.add(panel2);panel1.button1.addActionListener(this);

panel1.button2.addActionListener(this);panel1.button3.addActionListener(this); panel1.button4.addActionListener(this);panel2.button1.addActionListener(this); panel2.button2.addActionListener(this);this.setVisible(true);this.pack();} public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==\"100\"){

this.setVisible(false);qukuan(); // 程序根据输入金额和输入卡号,修改数据库。 new Client01(\"用户取款系统\"); }

else if(e.getActionCommand()==\"200\"){

this.setVisible(false);new Client01(\"用户取款系统\");

} // 这里当点击取款金额200时,程序返回上层操作界面。

}

public void qukuan(){

String url = \"jdbc:mysql://localhost/BankAccountSystem\";// 程序直接使用当前类目

录下的数据库文件

try{

Class.forName(\"com.mysql.jdbc.Driver\");

Connection con=DriverManager.getConnection(url,\"root\Statement sql=con.createStatement();String ql=Panel01.textB.getText(); ResultSet rs=sql.executeQuery(\"select cjine from card where cno=\"+ql+\"\"); if(rs.next()){

String mm=rs.getString(1); int nn= Integer.parseInt(mm);

String qerycjine=panel1.button1.getActionCommand(); int queryjine=Integer.parseInt(qerycjine); if(queryjineint newjine=nn-queryjine;String newjin=String.valueOf(newjine); int updateMima=sql.executeUpdate(\"update card set cjine='\"+newjin+\"'where cno=\"+ql+\"\");

if(updateMima==1){

this.setVisible(false); new Client01(\"用户取款系统\");

JOptionPane.showMessageDialog(frame,\" 操作已成功,谢谢使用!\");}

}

else{JOptionPane.showMessageDialog(null,\" 你的卡余额已不足,请注意!\警告!\JOptionPane.YES_NO_OPTION);

this.setVisible(false);new Client01(\"用户取款系统\");} con.close(); frame.repaint(); }

System.out.println(\"E Code\"+g.getErrorCode()); System.out.println(\"E M\"+g.getMessage());

}catch(SQLException g){

} catch(Exception e) {

e.printStackTrace(); } }}

class bankSystem02{

public static void main(String []args){ new Client02(\"请选择取款金额\"); }}

附十 查询服务界面

class Panel11 extends JPanel{

JButton button1,button2; Panel11(){

setLayout(new GridLayout(10,5)); button1=new JButton(\"查询余额\"); button2=new JButton(\"查本卡信息\");

for(int i=0;i<=16;i++) add(new JLabel()); add(button1); for(int i=0;i<=13;i++) add(new JLabel()); add(button2); for(int i=0;i<=16;i++)add(new JLabel()); }} class Client06 extends JFrame implements ActionListener{ Panel11 panel11; JFrame frame; Client06(String s){

super(s); Container con=this.getContentPane(); panel11=new Panel11(); con.add(panel11); this.setVisible(true); this.pack();} public void actionPerformed(ActionEvent e){

if(e.getActionCommand()==\"查询余额\"){this.setVisible(false); new Client03(\"用户查询服务\"); }

else if(e.getActionCommand()==\"查本卡信息\"){

this.setVisible(false); new Client07(\"本卡信息\"); } }}

class bankSystem06{

public static void main(String []args){ new Client06(\"查询服务\"); } }

panel11.button1.addActionListener(this); panel11.button2.addActionListener(this);

//queryService.java

附十一 查询用户信息界面

class Panel12 extends JPanel{

JLabel label1,label2,label3,label4;

JButton button1,button2;JTextField text1,text2,text3,text4; Panel12(){

setLayout(new GridLayout(9,6));

label1=new JLabel(\"显示用户名:\"); label2=new JLabel(\"显示性别:\"); label3=new JLabel(\"显示身份证:\");label4=new JLabel(\"显示卡号:\"); button1=new JButton(\"查询\"); text1=new JTextField(\"\"); text2=new JTextField(\"\"); button2=new JButton(\"取消\"); text3=new JTextField(\"\"); text4=new JTextField(\"\"); for(int i=0;i<8;i++)

add(new JLabel()); add(label1); add(text1);

for(int i=0;i<4;i++)add(new JLabel()); add(label2); add(text2); for(int i=0;i<4;i++) add(new JLabel()); add(label3); add(text3); for(int i=0;i<4;i++)

add(new JLabel());add(label4);add(text4);

for(int i=0;i<15;i++)

add(new JLabel()); add(button1);add(new JLabel());add(new JLabel());add(button2); for(int i=0;i<7;i++) add(new JLabel()); } }

class Client07 extends JFrame implements ActionListener{ Panel12 panel12;JFrame frame; Client07(String s){

super(s); Container con=this.getContentPane(); panel12=new Panel12(); con.add(panel12);

panel12.button1.addActionListener(this); panel12.button2.addActionListener(this); this.setVisible(true); this.pack();} public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==\"查询\") showCard();

else if(e.getActionCommand()==\"取消\"){ this.setVisible(false);

new Client01(\"用户取款系统\"); } }

public void showCard(){ String url = \"jdbc:mysql://localhost/BankAccountSystem\";// 程序直接使用当前类目录下的数据库文件

try{

Connection con=DriverManager.getConnection(url,\"root\ Statement sql=con.createStatement();String ql=Panel01.textB.getText(); Class.forName(\"com.mysql.jdbc.Driver\");

ResultSet rs=sql.executeQuery(\"select * from user where ucno=\"+ql+\"\"); if(rs.next()){

String uname=rs.getString(1); String usex=rs.getString(2); String uid=rs.getString(3); String ucno=rs.getString(4);

panel12.text1.setText(uname); panel12.text2.setText(usex); panel12.text3.setText(uid); panel12.text4.setText(ucno); } else{

JOptionPane.showMessageDialog(null,\" 该用户不存在\警告!\

}

JOptionPane.YES_NO_OPTION);

con.close();

} catch(Exception ex) {

ex.printStackTrace(); } }}

class bankSystem07{

public static void main(String []args){ new Client07(\"本卡信息\"); }} //queryUserInformation.java

附十二 转账界面

class Panel08 extends JPanel{

JLabel label1,label2;JTextField textA,textB;

Panel08(){

setLayout(new GridLayout(4,4)); label1=new JLabel(\"输入预转账号:\"); label2=new JLabel(\"输入预转金额:\"); textA=new JTextField(6); textB=new JTextField(6);

for(int i=0;i<5;i++){ add(new JLabel()); }add(label1);add(textA); for(int i=0;i<6;i++){ add(new JLabel()); } add(label2); add(textB); add(new JLabel()); }} class Panel09 extends JPanel{ JButton button1,button2; Panel09(){

setLayout(new GridLayout(3,6));button1=new JButton(\"确定\"); button2=new JButton(\"取消\"); add(new JLabel());

add(new JLabel()); add(new JLabel());add(new JLabel()); add(new JLabel()); add(new JLabel()); add(new JLabel()); add(button1); add(new JLabel()); add(new JLabel()); add(button2);add(new JLabel());add(new JLabel()); add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel()); add(new JLabel()); }}

class Client04 extends JFrame implements ActionListener{ Panel08 panel1; Panel09 panel2; JFrame frame=this;

Client04(String s){

super(s); Container con=this.getContentPane();

con.setLayout(new GridLayout(2,1));panel1=new Panel08(); panel2=new Panel09(); con.add(panel1);con.add(panel2);

panel2.button1.addActionListener(this); panel2.button2.addActionListener(this); this.setVisible(true); this.pack();} public void actionPerformed(ActionEvent e){

public void zhuanzhang(){

if(panel1.textA.getText().equals(\"\")||panel1.textB.getText().equals(\"\"))

{JOptionPane.showMessageDialog(frame,\" 请输入欲转账号、金额!\"); return; }

String url = \"jdbc:mysql://localhost/BankAccountSystem\";// 程序直接使用当前类目 try{

Connection con=DriverManager.getConnection(url,\"root\

Statement sql=con.createStatement(); String cno=panel1.textA.getText(); if(e.getActionCommand().equals(\"确定\")){

zhuanzhang();// 程序根据输入账号调用数据库,修改对应金额数。 this.setVisible(false);new Client01(\"用户取款系统\"); } this.setVisible(false); new Client01(\"用户取款系统\");} }

else if(e.getActionCommand()==\"取消\"){

录下的数据库文件

String ql=Panel01.textB.getText(); Class.forName(\"com.mysql.jdbc.Driver\"); ResultSet ss=sql.executeQuery(\"select cno from card where cno=\"+cno+\"\");

String yjine=panel1.textB.getText(); int shjin=Integer.parseInt(yjine);

if(ss.next()){

ResultSet rs=sql.executeQuery(\"select cjine from card where cno=\"+ql+\"\"); if(rs.next()){

String queryjine=rs.getString(1); int qyjine=Integer.parseInt(queryjine); if(shjinint newcjine=qyjine-shjin;int newcjine2=qyjine+shjin; String newjine=String.valueOf(newcjine); String newjine2=String.valueOf(newcjine2);

sql.executeUpdate(\"update card set cjine='\"+newjine+\"'where cno=\"+ql+\"\"); sql.executeUpdate(\"update card set cjine='\"+newjine2+\"'where cno=\"+cno+\"\"); JOptionPane.showMessageDialog(frame,\" 操作已成功,谢谢使用!\");

this.setVisible(false);new

Client01(\"用户取款系统\");

}

else{JOptionPane.showMessageDialog(null,\" 请重新输入金额!\警告!\

JOptionPane.YES_NO_OPTION);

panel1.textB.setText(\"\");return;

}

con.close(); frame.repaint();}

con.close();

frame.repaint();}else{JOptionPane.showMessageDialog(null,\"

}}

该用户不存在,请重新输入。\警告!\

}catch(Exception ex) {ex.printStackTrace();}

class bankSystem04{

public static void main(String []args){ new Client04(\"用户转账服务\"); } }

//transferAccount.java

致谢

四年的大学生活即将画上一个句号,大学生活一晃而过,回首走过的岁月,心中充满感慨,当这篇论文完成的时候,心里不由自主的浮现出一种感激之情,所有帮过我的人在脑海一一浮现。首先诚挚的感谢我的论文指导老师严文祥老师。他在忙碌的教学工作中抽出时间来审查修改我的论文。老师在我的论文写作过程中给予我的悉心指导!在论文的选题、论文的组织、科学研究方法等各方面,老师都给予了极为细心的指导,给了我非常大的鼓励。还有教过我的所有的老师们,你们严谨细致、一丝不苟的作风一直是我学习的榜样。

当然这篇论文的完成也离不开同学的帮助,在整个设计过程中,不少同学都给我提出过很多建设性的方法,同时也积极帮我查阅资料,正是他们的帮助,才使我在完成论文的过程中少走了很多弯路,最终顺利的完成了这篇论文。

在此,由衷感谢老师、同学对我的帮助。 谢谢!

因篇幅问题不能全部显示,请点此查看更多更全内容