ATM系统设计报告[00原创]

来源:互联网 发布:淘宝广告图片怎么做的 编辑:程序博客网 时间:2024/04/23 20:03

 

 

云南大学软件学院期末大作业

The Final Course Report of 2006 Spring Term

School of Software, Yunnan University

 

 

 

 

 

 

 

The object-oriented programming with Java

    

The ATM and Pizza Sale Projects

 

Lecturer: Michael Zheng

Team members

 

Id

Name

Role

Phone

E-mail

Work Description

Score

20051120217

丁亮

Project Leader, Programmer

86-0871-5038552

DL88250@gmail.com

 

架构设计;类设计、实现与测试;服务器/客户端的部署;文档同步

 

20051120094

赵禹

Test Group Leader

86-13698774617

zyofzy@gmail.com

客户端的部署与测试,类功能性测试

 

20041120291

李成

Test Group Member

15808717032

licheng@mail.ynu.edu.cn

类功能性测试

 

20051120142

尹烨誉

Test Group Member

13888035146

yuyangmeiling@yahoo.com.cn

类功能性测试

 

 


ATM 项目成绩评估

 

总分:50                   日期:       评估人:

评估项

评估标准

成绩分值

总成绩

系统功能

Basic - 实现系统基本功能

1.    用户(银行卡)登陆验证(6

2.  帐户余额查询(6

3.  转帐(6

4.  取款(6

5.  修改密码(6

6.  历史交易事务查询(6

Robust - 程序在各测试条件下正常运行,包括处理各Error Condition

 

30

 

界面

用户界面具一致性、友好、美观、易用

10

 

设计

代码

测试

设计清晰合理。系统构架、设计模型合理,各模块/类职责明确、关系合理,接口合理。

源代码书写风格良好,注解清晰,程序易读。 代码逻辑清晰,数据结构(Data Structure)合理,接口(Interface)合理

有计划进行测试,测试充分、完善,保证系统满足功能及非功能性需求。

10

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1Overview

本次课题项目是基于Java平台设计一个运行在PC上的ATM系统。用户使用该系统可以进行银行帐号的管理,例如在线支付支付、转帐、查询等。

(1) 用户界面

           用户界面我们采用的是IBM的窗口组件SWT进行的设计与实现。这样使得GUI界面本地话让使用各种操作系统(Linux, Windows XP/VistaMacMotif)的用户感到更为亲切,有效地增强了用户体验。

(2) 服务模式

           本系统采用传统的C/S模式进行架构,具体采用瘦客户端”/“胖服务器模式。这样可以减少部署与维护客户端带来的不便,服务的升级可以更有效率,但是同时也在一定程度降低了客户端的相应速度,增加了服务器的负载。在实现这一设计的时候我们采用的是Java RMI技术,可以有效、稳定地进行服务对象的传输。

(3) 数据的存储

          本系统采用MySQL数据库进行数据存储,因为MySQL比较轻便,功能也足够能满足需求,而且它是开源且免费的!

(4) 总体架构

            下面是本系统的总体架构图:

 

5RMI简介

              远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程序语法规则和在本地机上对象间的方法调用的语法规则一样。下面是RMI的架构图:


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2Functionalities

(1) 系统需要有确认用户(系统检验客户个人账户是否与客户的账户上记载的账户一致)功能,账户要有密码保护功能,只有输入相应的密码才可以进入该账户,登陆界面中密码框须使用‘*’保护。

(2) 用户登录后,进入服务选择界面,浏览各种服务,选择所需要的服务。服务包括(取款,存款,查询余额,转账,修改密码)

1.         取款:

a)         进入取款后选择账户类型(活期账户,定期账户,信用卡帐户),选好账户类型后,提示该ATM机一次能取款的最大金额-2000

b)         该用户的一个帐户(用户可能有多个帐户)一天取款累计的最大金额为5000

c)         用户选择取款后,选取系统界面上的固定金额(500100015002000),或是输入要取的金额,进行取款

d)         若是取款金额大于余额,提示余额不足

e)         若是所取金额大于ATM机一次能取款的最大金额2000,给出提示,重新输入取款金额或是选择退卡

f)          若是一天所取累计金额大于该帐户一天取款累计金额(5000)的限制,给出提示信息,重新输入取款金额或是选择退卡

g)         信用卡帐户可透支取款,透支额为2000元,其他帐户不允许透支取款

h)         取款后,给出提示选择退卡或是继续服务

i)           定期账户取款,如定期账户没有到期,一次取款交易收取手续费10元,从余额中扣除

j)           活期账户取款,如当月取款交易数累计不大于5次(<=5),无交易手续费,如超过5次,一次取款交易收取手续费2元,从余额中扣除

k)         信用卡帐户取款,业务规则无(不用实现)

l)           完成后用户可选择退卡或是继续选择服务

2. 存款:(不要实现,提供菜单选项即可)

3. 查询余额:

a)         选择帐户后,进入查询余额后,显示界面信息包括如下:

显示账户信息

 

显示实际余额

 

显示可取款数额(5000减去当天已取款数)

 

b)         完成后用户可选择退卡或是继续选择服务

4. 转账:

c)         进入转账后,(用下拉框,给出该客户所有帐户)用户选择转帐帐户源(该客户的一个帐户),及转帐目标账户(该客户的另一个帐户),以及转帐数额

d)         如转帐数额大于该帐户余额,给出提示信息,要求用户重新输入转帐数额

e)         转账服务按所转账的1%收取手续费,从余额中扣除,(若是余额不足,转账服务取消),转账一次的金额不能超过1万元

f)          完成后用户可选择退卡或是继续选择服务

g)         转帐交易包括两个交易事务,即从一帐户中取款和另一帐户中取款,这两个交易事务(Transaction)信息须记录到数据库。

5. 修改密码:

h)         进入修改密码选项,提示输入老密码,新密码,再次输入新密码进行确认修改

i)           修改密码完成后选择退卡或是继续服务

6. 查询历史事务(Transactions)记录:

j)           进入查询历史交易选项,交易指取款、转帐、汇入帐户款等,应提供不同查询条件(例如最近的交易、近一个月交易,过去一年交易等),查询结果应包括交易类型、发生时间、数额)

其他:

·所有发生的交易(Transaction),包括取款、转帐交易中取款和存入的交易事务,须记录到数据库(提示:包括1。帐,号2。交易类型-取款或存款,3。数额, 4。时间-年月日小时分钟)。

3Interface

 

4Design

   (1) DV模式简述

本次课题项目中,我们主要的架构是采用MVC(Model-View-Controller)模式的一个变种——DV(Document/View)模式。其中:

(a)  Document有两个核心类作为实现,BankAccount及其派生类与Transactions类。分别处理存取事务、转帐事务、交易历史事务查询等。

(b)  View就是客户端界面的表示。在做客户端界面的时候,考虑到ATM应该是以单窗口进行各种模块功能的提供,所以我们使用了Composite模式进行界面的设计,让整个ATM用户界面可以表示部分-整体层次结构。

这样的架构设计再加上RMI技术的运用,我们实现了用户界面代码与业务逻辑处理代码的完整分离,极大方便了需求变更引起的代码维护。

(2) 数据存储功能设计

         在服务端,采用单身模式专门设计了一个SqlStatementsManager类,负责数据库驱动管理、连接以及所有SQL语句的实现。这样做的好处是把和数据存储层有关联的功能集中起来,方便了数据库专家对SQL语句进行维护。这也使得业务逻辑层和数据存储层得到了明显的分离,当业务逻辑变更的时候可以把代码的改写程度降到最小,方便了以后代码的维护。

(1) ServerPackage视图:

(2)  Server Class Design

a) account包内:

 

 

 

 

 

 

 

 

 

 

b) server包内:

 

 

c) loginProcess包内:

d) transactions包内:

 

 

e) util包内:

 

 

f) sqlManager包内:

 

 

 

3ClientPackage视图:

(4)  Client Class Design

ui包内:

 

 

  

 

 

 

(6) Database Design

(1) E-R图设计

 

(2) 表设计

 

·AccountType

该表为帐户类型表,用于区别帐户帐号是属于哪个帐户类型的

 

 

  

·CreditAccount

该表为信用卡帐户表,用于记录信用卡帐户相关信息

 

 

  

·CurrentAccount

该表为活期帐户表,用于记录活期帐户相关信息

 

 

 

·DepositAccount

该表为定期帐户表,用于记录定期帐户相关信息

 

 

 

·DepositWithdraw

该表为帐户存取表,用于对帐户的存取进行记录

 

 

 

 

 

 

 

 

 

·Transfer

该表为转帐表,用于对帐户的转帐进行记录

 

 

 

 

·LoginAccount

该表为登录验证表,用于用户登录的身份验证

 

 

 

5Test

本次课题项目的测试是使用开源的测试框架——JUnit进行的。

JUnit下载http://www.junit.org 版本:4.3.1

cn.edu.ynu.sei.atm.server.test包下有两个测试类

cn.edu.ynu.sei.atm.sqlManager.SqlStatementsManager / cn.edu.ynu.sei.atm.util.DataFormatChecker类进行测试。

这样做测试设计主要是考虑到SqlStatementsManager类是一个核心类,所有的数据存取都是通过它的实例完成的,所以它的正确性关系重大。而DataFormatChecker类的实例负责的是对接入数据的格式、类型的正确性检测,同样是非常关键的。所以,我们对这两个类进行了严格的单元测试,以保证和他们有关联的类实例的功能正确性。

单元测试之后,我们还做了集成测试,主要是测试在任何时刻网络连接失败、服务器当机情况、接入数据格式、类型异常等处理。测试结果符合需求中要求的系统健壮性与稳定性。

 

6Depolyment

在部署的时候我们将业务逻辑的实现与数据存储部署于一台服务器上,操作系统:GNU/Linux (Ubuntu 7.04);客户端暂时部署于Windows XP(SP2)。在服务器上使用的JRE版本为:Java(TM) SE Runtime Environment (build 1.6.0-b105)。下面是客户端的部署:

在客户端上使用的JRE版本为:Java(TM) SE Runtime Environment (build 1.5.0* / 1.6.0*)

客户端主文件夹内容如下:

|-- - ATMClient.jar                      主程序及相关Classes

|-- - lib                                           支持库文件夹

|   |-- - jface.jar                        SWT/JFace窗口组件

|   |-- - stub.jar                         RMI远程对象存根文件

|   |-- - swt.jar                         SWT/JFace窗口组件

|-- - swt-awt-win32-3236.dll                   SWT/JFace Win32动态连接库(下同)

|-- - swt-gdip-win32-3236.dll

|-- - swt-wgl-win32-3236.dll

|-- - swt-win32-3236.dll

如果要部署其他操作系统平台下的ATM客户端,只需把lib目录下的swt.jar替换成对应平台的版本(jface.jar无需改变)swt-*.dll替换成对应平台的支持库(例如Linux下是swt-*.so)即可。这些库都可以在 http://www.eclipse.org/swt/ 下载。

 

7Learned from this project

        在本次课题项目中,我们学习到了一些软件架构方面的知识,并将它们用于了实际的项目中。具体说来,使用了MVCCompositeSingleton设计模式,还学习了Java RMI分布式计算模式,JUnit测试框架的使用。在GUI编程方面,我们学习并使用了IBMSWTIBM标准窗口组件)进行开发,让Java做的应用程序在GUI上有更好的外观和性能表现。在此基础上,我们将可能进一步学习CORBARMIIIOP,以及在实际中任何编程时做JUnit测试,提高软件质量。在做Desktop ApplicationGUI方面我们将进一步学习Eclipse RCP,并考虑支持Plugins的设计,我们认为这在以后是相当有用和必要的。

        总之,通过这个课题项目的设计与实现,我们基本掌握了Java开发一个小型分布式系统于GUI设计的方法与步骤,在一定程度上掌握了应用软件开发的基本流程,让我们对Java程序设计产生了浓厚的兴趣 :-)

 

原创粉丝点击