




已阅读5页,还剩67页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
银行账目管理系统设计毕业论文目 录第一章 引言11.1 开发背景11.2 开发意义11.3 章节安排2第二章 系统需求分析32.1银行账目管理系统的需求32.2用户对系统的期望32.3编程语言和运行环境介绍32.3.1 Java语言32.3.2 Eclipse开发平台42.3.3 ORACLE数据库5第三章 功能模块设计63.1银行账目管理功能模块63.2功能模块介绍6第四章 系统设计84.1总体设计84.1.1 数据库表84.1.2 几种布局94.1.3 类关系114.1.4 客户端和服务器之间的通信134.2 详细设计154.2.1操作主界面设计154.2.2开户面板的设计与实现164.2.3登录面板的设计与实现174.2.4交易面板的设计与实现184.2.5信息修改面板的设计与实现224.2.6忘记密码面板的设计与实现234.2.7查询面板的设计与实现234.2.8统计面板的设计与实现254.2.9销户面板的设计与实现26第五章 测试285.1Java运行平台简介285.2系统测试285.2.1 用户开户功能285.2.2 交易功能295.2.3 信息修改335.2.4 查询335.2.5 统计34致 谢35参考文献36附 录37II第一章 引言1.1 开发背景随着科技发展和社会进步,尤其是计算机大范围的普及,计算机应用逐渐由大规模科学计算的海量数据处理转向大规模的事务处理和对工作流的管理,这就产生了以台式计算机为核心的管理信息系统在大规模的事务处理和对工作流的管理等方面的应用,在银行账目管理之中的应用日益增加。近年来我国信息产业发展迅速,手工管理方式在银行账目管理等需要大量事务处理的应用中已显得不相适应,采用IT技术提高服务质量和管理水平势在必行。目前,对外开放必然趋势使银行业直面外国银行巨头的直接挑战,因此,银行必须提高其工作效率,改善其工作环境。这样,账户管理的信息化势在必行。在传统的银行账户管理中,其过程往往是很复杂的,繁琐的,账户管理以入账和出账两项内容为核心,在此过程中又需要经过若干道手续,因为整个过程都需要手工操作,效率十分低下,且由于他们之间关联复杂,统计和查询的方式各不相同;且会出现信息的重复传递问题,因此该过程需要进行信息化,以利用计算机进行账目管理。系统开发的整体任务是实现银行账户管理的系统化、规范化、自动化和智能化,从而达到提高企业管理效率的目的。1.2 开发意义随着社会的进步和计算机技术的发展,尤其是网络技术的飞速进步,信息观念已经深入人心。信息科学作为当代社会中的重要一环在国民经济中起着举足轻重的作用。在中国经济蓬勃发展的今天,越来越庞大的储蓄用户数目和资金流通量对银行账目管理的可靠性每天都在进行苛刻的考验。建立和发展功能较完善的银行账目管理系统,不仅可以服务客户、联系客户、吸引客户、稳定客户,巩固银行业务经营基础,而且通过服务社会,可以塑造银行自身的市场形象,体现银行的综合实力还能够提高银行的存款总量;通过提供高效,优质的业务,吸引更多的客户来银行办理业务,从而扩大了银行的客户群,加强了银行和客户的业务联系,也会带动其他业务的发展。总之,现代商业银行的竞争和发展,已突破传统业务的框架,为了提高银行的业务竞争能力,扩大客户群,培育新的利润增长点,务必大力改良其账目管理系统,因此建立一个功能齐全可靠的账目管理系统成为银行当前业务发展的迫切之需。1.3 章节安排第二章对此系统的需求分析,对系统的一些功能概述。第三章对此系统的功能模块的介绍。第四章是对此系统的详细设计,以及部分重要代码。第五章是对系统的测试,以及编程过程中遇到的一些问题以及解决办法。第二章 系统需求分析2.1银行账目管理系统的需求通过与银行工作人员交流了解:随着银行业务的推陈出新以及这些业务为客户带来的便利,使银行吸引了越来越多的客户,一切都使银行账目的管理越来越重要。银行账目管理系统是针对银行账目的日常管理而设计。银行操作系统不仅要求操作方便而且要求界面简洁,它需要实现用户开户、账目管理、信息修改、忘记密码、查询、统计以及销户等功能。其中账目管理包括存款、取款、申请贷款、还贷款和设置透支额度的功能。用户可以通过不同的方式来查询需要的信息。通过该系统的设计实现,使银行部门更好地进行业务管理,为客户提供更佳优质的服务。2.2用户对系统的期望银行对账目管理系统的要求主要有以下几个方面:(1)系统能够完成银行账目管理系统的主要功能;(2)系统界面简洁,容易操作;(3)具有一定的稳定性,安全性;(4)访问速度快。2.3编程语言和运行环境介绍2.3.1 Java语言银行账目管理系统采用Java语言进行编程。Java语言是一种很优秀的语言,是目前软件设计中极为壮健的编程语言,只要提供了Java解释器,Java编写的软件在执行码上兼容。Java作为一种程序设计语言,它简单、面向对象、不依赖于机器的结构、具有可移植性、安全性、并且提供了并发的机制,具有很高的性能。其次,它最大限度地利用了网络,Java的小应用程序(applet)可在网络上运行而不受CPU和环境的限制。另外,Java还提供了丰富的类库,使程序设计者可以很方便地建立自己的系统。通过分析Java的特点,进一步指出它所具有的优点。Java语言有下面一些特点:简单、面向对象、与平台无关、解释执行、多线程、安全、动态性。(1) 简单:Java语言是一种面向对象的语言,它通过提供最基本的方法来完成指定的任务,只需理解一些基本的概念,就可以用它编写出适合于各种情况的应用程序。Java略去了运算符重载、多重继承等模糊的概念,并且通过实现自动垃圾回收,大大简化了程序设计者的内存管理工作。(2) 面向对象:Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。对象中封装了它的状态变量以及相应的方法,实现了模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。(3) 与平台无关:Java解释器生成与体系结构无关的字节码指令,只要安装了Java运行时系统,Java程序就可在任意的处理器上运行。这些字节码指令对应于Java虚拟机中的表示,Java解释器得到字节码后,对它进行转换,使之能够在不同的平台运行。(4) 解释型:Java解释器直接对Java字节码进行解释执行。字节码本身携带了许多编译时信息,使得连接过程更加简单。(5) 多线程:Java还有一特点就是内置对多线程的支持。多线程支持完成多个任务。(6) 安全:用于网络、分布环境下的Java必须要防止病毒的入侵。Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止程序员使用“特洛伊”木马等欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。(7) 动态:Java的设计使它适合于一个不断发展的环境。在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行。并且Java通过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和扩展性。2.3.2 Eclipse开发平台Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。虽然大多数用户很乐于将Eclipse当作Java集成开发环境(IDE)来使用,但Eclipse的目标却不仅限于此。Eclipse还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于Java开发工具。尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;例如,支持诸如C/C+、COBOL、PHP等编程语言的插件已经可用,或预计将会推出。Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。基于Eclipse的应用程序的一个突出例子是IBM Rational Software Architect,它构成了IBM Java开发工具系列的基础。从2006年起,Eclipse基金会每年都会安排同步发布(simultaneous release)。至今,同步发布主要在6月进行,并且会在接下来的9月及2月释放出SR1及SR2版本。2.3.3 ORACLE数据库ORACLE 是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的语言操纵大量有规律数据的集合。是目前最流行的客户/服务器(CLIENT/SERVER)体系结构的数据库之一。ORACLE数据库在逻辑上是由许多表空间构成。主要分为系统表空间和非系统表空间。非系统表空间内存储着各项应用的数据、索引、程序等相关信息。我们准备上马一个较大的ORACLE应用系统时,应该创建它所独占的表空间,同时定义物理文件的存放路径和所占硬盘的大小。Oracle数据库跟其他的数据库一样,具有数据库系统的通用性:(1) 数据库管理系统。我们知道,所谓的数据库就是一些结构化的数据的联合体,要提供对这些数据的存取、增加、修改、删除或更加复杂的数据抽取等操作,需要有一个支撑系统,这就是数据库管理系统(DBMS),Oracle完全具有这方面的功能。(2) 关系型数据库管理系统。在数据库的发展历程中,曾出现过多种不同形式的数据库系统,但关系型数据库管理系统(RDBMS)以其优越性而被广为采用,象现在几种广泛使用的数据库全为关系型数据库。同样,Oracle也是关系型的数据库系统,支持标准的结构化查询语言(Structured Query Language)。(3) 开放源码数据库。同商业性的数据库相比,这是Oracle最大的特点。Oracle的源码是公开的,这就意味着任何人,只要遵守GPL的规则都可以对Oracle的源码使用、修改以符合自己特殊的需求。(4) 技术特点。Oracle是C/S架构的服务器,服务器端是多线程的,为客户端提供了不同的程序接口和链接库,如C、C+、Java、Perl、PHP、Tcl等,也提供了简单的管理工具。第三章 功能模块设计3.1银行账目管理功能模块银行账目管理系统用户开户信息修改忘记密码查询统计销户用户登录存款取款申请贷款还贷款设置透支额度用户姓名身份证号联系电话家庭住址贷款信用账户信用账户贷款储蓄账户储蓄账户总账户图3.1 银行账目管理系统模块图3.2功能模块介绍银行账目管理系统包括七个模块,分别为用户开户、账目管理、信息修改、忘记密码、查询、统计和销户。其具体的功能如下:(1)用户开户:新建一个账户,为其指定一个唯一的账号来标志该用户。(2)账目管理:账户分为四种类型,分别是储蓄账户、信用账户、贷款储蓄账户和贷款信用账户。用户成功登录之后,储蓄账户可以存款和取款;信用账户可以存款、取款和设置透支额度;贷款储蓄账户可以存款、取款、申请贷款和还贷款;贷款信用账户可以存款、取款、申请贷款、还贷款和设置透支额度。(3)信息修改:选择一个存在的账户,然后输入密码经确认后进入用户信息窗口,可对里面的账户类型、账户密码、用户姓名、身份证号、家庭住址、联系电话和电子邮箱进行修改,而账号和账户上的金额不能被用户修改。(4)忘记密码:选择一个存在的账户,输入新密码和密码重复,密码前后一致即可更改该账户的密码。(5)查询:按照指定方式进行查找账户信息,包括按姓名、身份证号和电话进行查找,也可以按照地址进行模糊查找。(6)统计:对银行的数据进行统计,如对账户数量的统计。(7)销户:将指定用户的账号删除。用户输入密码经过验证成功后,把账户的余额全部取出,最后删除该账户。第四章 系统设计4.1总体设计4.1.1 数据库表account表用来存放账户的信息,包括账户类型(type)、账号(id)、密码(password)、账户姓名(name)、身份证号(personId)、家庭住址(address)、联系电话(phone)、电子邮箱(email)、账户余额(balance)等8个字段,其中,账号是主键。账户类型、账号和账户余额为数字类型,其它的字段为字符串类型,所有的字段都不能为空。如表4.1所示。表4.1:account字符名数据类型是否允许空备注typenumber否账户类型idnumber否账号(主键)passwordvarchar2(50)否账户密码namevarchar2(30)否账户姓名personIdvarchar2(30)否身份证号addressvarchar2(50)否家庭地址phonevarchar2(30)否联系电话emailvarchar2(50)否电子邮箱balancenumber否账户余额loan_account表是用来存放贷款账户贷款额的信息,包括账号(id)和贷款额(loan)两个字段,其中,账号是主键。账号和贷款额这两个字段都是数字类型,都不能为空。如表4.2所示。表4.2:loan_account字符名数据类型是否允许空备注idnumber否账号(主键)loannumber否贷款额credit_account表是用来存放信用账户透支额度的信息,包括账号(id)和透支额度(ceiling)两个字段,其中,账号是主键。账号和透支额度这两个字段都是数字类型,都不能为空。如表4.3所示。表4.3:credit_account字符名数据类型是否允许空备注idnumber否账号(主键)ceilingnumber否透支额度count_account表是用来存放各种账户类型的人数,包括储蓄账户人数(cSaving)、信用账户人数(cCredit)、贷款储蓄账户人数(cLoanSaving)和贷款信用账户人数(cLoanCredit)。表中四个字段都是数字类型,都不能为空。如表4.4所示。表4.4:count_account字符名数据类型是否允许为空备注cSavingnumber否储蓄账户人数cCreditnumber否信用账户人数cLoanSavingnumber否贷款储蓄账户人数cLoanCreditnumber否贷款信用账户人数4.1.2 几种布局(1) BorderLayout布局BorderLayout布局是Window容器的默认布局。JFrame、JDialog都是Window类的间接子类,他们的内容面板的默认布局都是BorderLayout布局。BorderLayout布局也是一种简单的布局策略,如果一个容器使用这种布局,那么容器空间简单地划分为东、西、南、北、中五个区域,中间的区域最大。每加入一个组件都应该指明把这个组件添加在哪个区域中,区域由BorderLayout中的静态常量CENTER、NORTH、SOUTH、WEST、EAST表示。例如,一个使用BorderLayout布局的容器con,可以使用add()方法将一个组件b添加到中心区域:con.add(b, BorderLayout.CENTER);或con.add(BorderLayout.CENTER,b);添加到某个区域的组件将占据整个这个区域。每个区域只能放置一个组件,如果向某个已放置组件的区域再放置一个组件,那么先前的组件将被后者替换。使用BorderLayout布局的容器最多能添加5个组件,如果容器中需要添加的组件超过5个,就必须使用容器的嵌套或改用其他布局策略。(2) GridLayout布局GridLayout是使用较多的布局编辑器,其基本布局策略是把容器划分成若干行若干列的网格区域,组件就位于这些划分出来的小格中。GridLayout比较灵活,划分多少网格由程序自由控制,而且组件定位比较精确。使用GridLayout布局编辑器的一般步骤如下:使用GridLayout的构造方法GridLayout(int m,int n)创建布局对象,指定划分网格的行数m和列数n。例如:GridLayout grid=new GridLayout(10,8);使用GridLayout布局的容器调用方法add()将组件加入容器,组件进入容器的顺序将按照第一行第一个、第一行第二个第一行最后一个、第二行第一个最后一行第一个最后一行最后一个。使用GridLayout布局的容器最多可添加m*n个组件。GridLayout布局中每个网格都是相同大小,并且强制组件与网格的大小相同。由于GridLayout布局中每个网格都是相同大小,并且强制组件与网格的大小相同,使得容器中容器中的每个组件也都是相同的大小,显得很不自然。为了克服这个缺点,可以使用容器嵌套。例如,一个容器使用GridLayout布局,将容器分为三行一列的网格,那么可以把另一个容器添加到某个网格中,而添加的这个容器又可以设置为GridLayout布局、FlowLayout布局、CardLayout布局或BorderLayout布局等。利用这种嵌套方法,可以设计出符合一定需要的布局。(3) CardLayout布局使用CardLayout容器可以容纳多个组件,但实际上同一时刻容器只能从这些组件中选出一个来显示,就像一叠“扑克牌”每次只能显示最上面的一张一样,这个被显示的组件将占据所有的容器空间。JTabbedPane创建的对象是一个轻容器,称为选项卡窗格。JTabbedPane窗格的默认布局是CardLayout布局,并且自带一些选项卡(不需用户添加),这些选项卡与用户添加到JTabbedPane窗格中的组件相对应,也就是说,当用户向JTabbedPane窗格添加一个组件时,JTabbedPane窗格就会自动指定给该组件一个选项卡,单击该选项卡,JTabbedPane窗格将显示对应的组件。选项卡窗格自带的选项卡默认在该选项卡窗格的顶部,从左到右一次排列,选项卡的顺序和所对应的组件的顺序相同。JTabbedPane窗格可以使用add(String text,Component c);方法将组件c添加到JTabbedPane窗格中,并指定和组件c对应的选项卡的文本提示是text。使用JTabbedPane窗格的构造方法public JTabbedPane(int tabPlacement)创建的选项卡窗格的选项卡的位置由参数tabPlacement指定,该参数的有效值为JTabbedPane.TOP、JTabbedPane.BOTTOM、JTabbedPane.LEFT、JTabbedPane.RIGHT。4.1.3 类关系SavingAccount类和CreditAccount类都继承了Account类,Account类中有一个final修饰的存款方法deposit(double money)和一个抽象的取款方法withdraw(double money),SavingAccount类和CreditAccount类实现了取款方法。LoanSavingAccount类和LoanCreditAccount类分别继承了SavingAccount类和CreditAccount类,LoanSavingAccount类和LoanCreditAccount类都继承了Loanable接口,在Loanable接口中有贷款方法requestLoan(double money)、还贷方法payLoan(double money)和得到贷款的方法getLoan(),LoanSavingAccount和LoanCreditAccount类都实现了这三种方法。定义了10个面板类,分别是图片面板PicturePanel、注册面板RegisterPanel、登录面板LoginPanel、交易面板BusinessPanel、登录修改面板LoginModifyPanel、修改信息面板ModifyPanel、新密码面板NewPassPanel、查询面板InquiryPanel、统计面板StatisticsPanel和销户面板CancelPanel。BAMClient类中定义了这10个面板类的变量,并且将这10个面板类的变量以CardLayout布局格式存入一个JFrame窗体中,当用户单击窗体中的按钮时,就显示相应的面板,当用户单击这些面板中的按钮时,就调用相应的方法。BAMClient类定义的方法有:/ 窗体中部分对象监听方法public void addListeners() / 1、开户public void register() / 2、登录public void login() / 3、交易public void business() / 4、登录修改信息public void loginModify() / 5、修改信息public void modify() / 6、忘记密码public void newPass() / 7、查询public void inquiry() / 8、统计public void statistics() / 9、销户public void cancel() BAMServer类是服务器的一个类,在该类里声明了线程类ServerThread的变量,当客户端和服务器连接建立时,就调用ServerThread中的run()方法。run()方法负责判断客户端发来的操作类型是什么,是注册、登录、取款等等,并且获取操作的信息,如账号,然后根据操作类型调用Bank类中相应的方法,由Bank类负责将数据写进数据库、从数据库中将信息取出和更新数据库中的信息。Bank类中的方法有:/ 根据id获取Account对象public Account getAccount(long id) / 注册public Account registerAccount(int type,String password,String name,String personId,String address,String phone,String email,double balance) / 将账户信息写进数据库public void writeToDB(Account account) / 登录public Account loginAccount(long id) / 存款public Account depositAccount(long id,double money) / 取款public Account withdrawAccount(long id,double money) throws BusinessException / 设置透支额度public Account setCeilingAccount(long id,double money) / 贷款public Account requestLoan(long id,double money) / 还贷public Account payLoan(long id,double money) throws BalanceNotEnoughException,LoanException / 修改信息public int modifyAccount(int type,long id,String password,String name,String personId,String address,String phone,String email) / 忘记密码public Account newPassAccount(long id,String password) / 查询public LinkedList inquiry(int ok,String key) / 统计public HashMap statistics() / 销户public int cancelAccount(long id,String password) 4.1.4 客户端和服务器之间的通信IP地址标识Internet上的计算机,端口号标识正在计算机上运行的进程(程序)。端口号与IP地址的组合得出一个网络套接字(Socket)。端口号被规定为一个16位的整数065535。其中,01023被预先定义的服务通信占用(如telnet占用端口23,http占用端口80等)。除非我们需要访问这些特定服务,否则就应该使用102465535这些端口中的某一个进行通信,以免发生端口冲突。当两个程序需要通信时,他们可以通过使用Socket类建立套接字对象并连接在一起。比如,有人让你去“中山广场邮局”,你可能反问“我去做什么”,因为他没有告诉你“端口”,你不知处理何种业务。他说“中山广场邮局,8号窗口”,那么你到达地址“中山广场邮局”,找到“8号”窗口,就知道8号窗口处理特快专递业务,而且必须有个先决条件,就是你到达“中山广场邮局8号窗口”时,该窗口必须有一位业务员在等待客户,否则就无法建立通信业务。(1)套接字连接需要注意的是,从套接字连接中读取数据与从文件中读取数据有着很大的不同,尽管二者都是输入流。从文件中读取数据时,所有的数据都已经在文件中了。而使用套接字连接时,可能在另一端数据发送出来之前,就已经开始试着读取了,这就会堵塞本线程,直到该读取方法成功读取到信息,本线程才继续执行后续的操作。连接建立后,服务器端的套接字对象调用getInetAddress()方法可以获取一个InetAddress对象,该对象含有客户端的IP地址和域名。同样,客户端的套接字对象调用getInetAddress()方法可以获取一个InetAddress对象,该对象含有服务器端的IP地址和域名。(2)套接字关闭套接字调用close()方法可以关闭双方的套接字连接,只要一方关闭连接就会导致对方发生IOException异常。代码如下:public class BAMServer / 服务端public static void main(String args) ServerSocket server=null;try server=new ServerSocket(9007);Socket socket=server.accept();ServerThread thread=new ServerThread(socket);thread.start(); catch (IOException e) e.printStackTrace();public class ServerThread extends Thread Socket socket;ObjectInputStream in;ObjectOutputStream out;public ServerThread(Socket socket) this.socket=socket;public void run() try out=new ObjectOutputStream(socket.getOutputStream();/ 注意out和in的先后顺序in=new ObjectInputStream(socket.getInputStream();while(true) catch (IOException e) public class BAMClient / 客户端ObjectInputStream in;ObjectOutputStream out;public BAMClient() Socket clientSocket;try clientSocket=new Socket(localhost,9007);in=new ObjectInputStream(clientSocket.getInputStream();out=new ObjectOutputStream(clientSocket.getOutputStream(); catch (UnknownHostException e) e.printStackTrace(); catch (IOException e) e.printStackTrace();4.2 详细设计4.2.1操作主界面设计在操作主界面,可以进行的操作包括用户开户、用户登录、信息修改、忘记密码、查询、统计和销户,界面简洁易于操作,如图3所示。在设计银行账目管理系统的操作主界面时,第一步利用public class MainPanel extends JPanel来定义一个主面板类MainPanel,然后在里面定义所需要的全部变量,变量为private类型。主面板类MainPanel包括8个JButton按钮。可以通过调用get()方法得到相应的按钮,例如,得到用户开户按钮的get()方法为:public JButton getRegisterButton() return registerButton;第二步利用public class PicturePanel extends JPanel 来定义一个图片面板类PicturePanel。第三步定义一个BAMClient类,定义一个JFrame窗体变量bamFrame,再定义左右两个面板,leftPanel和rightPanel。左面板添加主面板类,右面板添加图片面板。并且设置左面板的颜色为白色,设置右面板的布局方式为CardLayout。第四步定义一个addListeners()方法,利用public void addActionListener(ActionListener)方法向每一个按钮增加动作监视器。图4.2 操作主界面示意图4.2.2开户面板的设计与实现单击系统操作主界面中的“用户开户”按钮,进入注册面板,如图4.3所示。为了使得用户的成功注册,第一步利用public class RegisterPanel extends JPanel 来定义一个注册面板类RegisterPanel。用户注册需要填写的信息包括账户类型、账户密码、用户姓名、身份证号、家庭住址、联系电话和电子邮箱。账户类型是一个下拉列表(JComboBox)变量。下拉列表是用户十分熟悉的一个组件。用户可以在下拉列表看到第一个选项和它旁边的箭头按钮,当用户单击箭头按钮时,选项列表打开。选项列表包含四个选项,分别是储蓄账户、信用账户、贷款储蓄账户和贷款信用账户,用户注册时可以根据自己的需要选择相应的账户类型。JComboBox类的变量可以通过调用public void addItem(Object anObject)增加选项。账户密码和密码重复都是JPasswordField类型的变量。使用JTextField类的子类JPasswordField可以建立一个密码框对象。密码框可以使用setEchoChar(char c)设置回显字符(默认的回显字符是*),char getPassword()方法返回密码框中的密码。用户姓名、身份证号、家庭住址、联系电话和电子邮箱都是JTextField类型的变量。JComponent类的子类JTextField是专门用来建立文本框的,即JTextField类创建的一个对象就是一个文本框。用户可以在文本框中输入单行的文本。提交和返回按钮都是JButton类型的变量。JButton类是专门用来建立按钮的,即JButtton类创建的一个对象就是一个按钮。JButton类的构造方法Button(String text)创建名字是text的按钮。第二步定义一个消息类(Message),Message类有两个私有的成员变量,int类型的operation和HashMap类型的data,operation用来识别操作的类型,data用来保存操作的信息。以用户开户为例,operation的值设置为1,data保存了账户类型、账户密码、用户姓名、身份证号、家庭住址、联系电话和电子邮箱的信息。第三步为注册面板中的“提交”和“返回”按钮增加监视器,当单击“提交”按钮时,调用在BAMClient类中定义的方法register(),定义一个Message类对象,设置操作类型operation为1,data保存收集到的信息。在将收集的信息存入Message类对象之前,必须确保所有的注册项都不为空,联系电话和电子邮箱符合一定的格式要求。第四步通过ObjectOutputStream输出流将Message类对象发送到服务器,服务器收到Message对象之后,判断操作类型是1,要执行的操作是用户开户,则调用Bank类的registerAccount()方法。第五步定义一个账户类(Account),Account类的一个对象就是一个账户,Account类包含一个账户的信息有账户的类型,整型0表示储蓄账户,1表示信用账户,2表示贷款储蓄账户,3表示贷款信用账户。用户注册时并不需要自己填写账号,账号是系统自动生成的。第六步将Message中的信息取出,定义一个Account类对象,再将该对象写进数据库。图4.3 开户示意图4.2.3登录面板的设计与实现单击系统操作主界面中的“用户登录”按钮,进入登录面板,如图4.4所示。登录面板的布局是BorderLayout布局。当用户单击登录面板中的确定按钮时,在BAMClient类中调用login()方法,首先判断账号id是否为空,判断两个String类型的变量是否相等,用public equals(String)方法,代码如下:if(.equals(id) ,如果写出if(id.equals() ,那么当用户登录时,没有输入账号id时,即id=null,就会出现空指针异常。id不为空的情况下再判断密码是否为空,判断方法和判断id是否为空一样,当账号和密码都不为空的情况下,定义一个Message类的对象,设置操作类型operation值为2,只需将用户输入的id存入Message类对象的data中即可,然后通过输出流将Messaage类的这个对象写出,发送给服务器。当服务器接收到Message类的对象时,取出对象里面的操作类型operation和信息数据data中的账号id,然后调用Bank类的方法public Account loginAccount(long id) 为了方便在Bank类中定义了public Account getAccount(long id) 方法,该方法实现的功能是根据id获取相应Account对象。首先判断数据库中账号为id的账户是否存在,只有在该账户存在的情况下,才将该账户的信息从服务器中取出,放入一个Account对象中,然后返回该对象,如果该账户不存在,就返回null。loginAccount()方法直接返回得到getAccount()方法返回的内容。return getAccount(id); 服务器通过输出流ObjectOutputStream将得到的对象或null返回给客户端,客户端用输入流ObjectInputStream接收发送过来的对象Object object = in.readObject();如果object=null,提示“账户不存在!”,否则判断返回的Account类的对象的密码和输入的密码是否一致,如果不一致提示密码有误,请重新输入,否则提示“登录成功!”,显示出交易面板。图4.4 登录示意图4.2.4交易面板的设计与实现用户成功注册或登录之后,就会显示交易面板。交易面板显示账户的账号、姓名、账户余额、信用额度和贷款额,如图4.5所示。交易面板中定义了一个方法,可以根据账户的类型设置组件,把不需要的组件变灰。存款和取款是每个账户都应该有的基本功能,如果一个账户是贷款账户,那么该账户还具有申请贷款和还贷款的功能,如果一个账户是信用账户,那么该账户还具有设置透支额度的功能。交易面板还定义了一个方法将账户的信息显示在界面上。当用户单击交易面板中的提交按钮时,调用BAMClient类中的business()方法,该方法得到该用户的账户id、选择的交易类型action和输入交易的金额money,并将这些信息放入一个Message对象,通过输出流发送给服务器,服务器接收到以后,得到相应的信息,判断交易类型,根据交易类型,执行Bank中相应的方法。交易类型是存款,调用Bank类中的depositAccount(long id,double money)方法。存款方法首先根据id得到相应的Account类对象,然后调用Account类的deposit(double money)方法,最后更新数据库中该账户的余额并将得到的Account对象返回。交易类型是取款,调用Bank类中的withdrawAccount(long id,double money)方法。取款方法首先根据id得到相应的Account类对象,然后调用Account类的withdraw(double money),Account类中该方法是一个抽象的方法,因为不同的账户类型取款的方法不一样,如果是信用账户,那么该账户可以透支。如果账户的余额不足或透支额度不足会抛出交易异常BalanceNotEnoughException。最后更新数据库中该账户的余额并将得到的Account对象返回。交易类型是设置透支额度,调用Bank类中的setCeilingAccount(long id,double money)方法;该方法只针对信用账户,首先根据id得到相应的Account类对象,然后调用CreditAccount类的setCeiling(double ceiling)方法,最后更新数据库中的credit_account表中该账户的记录并将得到的Account对象返回。交易类型是申请贷款,调用Bank类中的requestLoan(long id,double money)方法。首先根据id得到相应的Account类对象,然后调用接口Loanable中的requestLoan(double money)方法,最后更新数据库中的loan_account表中该账户的记录并将得到的Account对象返回。交易类型是还贷款,调用Bank类中的payLoan(long id,double money)方法。首先根据id得到相应的Account类对象,然后调用接口Loanable中的payLoan(double money)方法,如果账户的余额不足或透支额度不足会抛出交易异常BalanceNotEnoughException。最后更新数据库中的loan_account表中该账户的记录并将得到的Account对象返回。返回的Account对象通过输出流发给客户端,客户端中调用show(Account account)方法显示账户的余额、信用额度和贷款额。图4.5 交易示意图/ 存款public Account depositAccount(long id,double money) Account account=getAccount(id);account.deposit(money);String sql=update account set balance=+account.getBalance()+ where id=+id+;con.exeUpdate(sql);return account;/ 取款public Account withdrawAccount(long id,double money) throws BusinessException Account account=getAccount(id);account.withdraw(money);String sql=update account set balance=+account.getBalance()+ where id=+id+;con.exeUpdate(sql);return account;/ 设置透支额度public Account setCeilingAccount(l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心理压力释放规定
- 品牌服饰全球市场拓展实施方案
- 医疗机构再注册申请表
- 离婚协议书范本与子女抚养及财产分割法律效力
- 离婚后子女抚养费支付及生活费用分担协议
- 专业评估机构参与下的精装修二手房买卖合同详规
- 精装修住宅租赁附加服务协议书
- 生态住宅区物业权益转让与生态保护协议
- 精准离婚协议书:婚后存款及财产分割操作指南
- 离婚赡养协议书(父母赡养金支付模板)
- 充电站运营管理制度(参考模板)
- 体育与健康教学设计《手倒立前滚翻》
- NISP一级考前模拟训练题库200题(含答案)
- JJG 20-2001标准玻璃量器
- 2024外研版初中英语单词表汇总(七-九年级)中考复习必背
- 《大数据平台部署与运维》课程标准(含课程思政)
- 英语中的时间表达(示范课例)
- 脊柱外科进修汇报
- 《史记》上册注音版
- 苏州大学文学院语言学纲要课程笔记
- 危重症患者护理文书书写规范-课件
评论
0/150
提交评论