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
1.Overview
本次课题项目是基于Java平台设计一个运行在PC上的ATM系统。用户使用该系统可以进行银行帐号的管理,例如在线支付支付、转帐、查询等。
(1) 用户界面
用户界面我们采用的是IBM的窗口组件SWT进行的设计与实现。这样使得GUI界面本地话,让使用各种操作系统(Linux, Windows XP/Vista,Mac,Motif)的用户感到更为亲切,有效地增强了用户体验。
(2) 服务模式
本系统采用传统的C/S模式进行架构,具体采用“瘦客户端”/“胖服务器”模式。这样可以减少部署与维护客户端带来的不便,服务的升级可以更有效率,但是同时也在一定程度降低了客户端的相应速度,增加了服务器的负载。在实现这一设计的时候我们采用的是Java RMI技术,可以有效、稳定地进行服务对象的传输。
(3) 数据的存储
本系统采用MySQL数据库进行数据存储,因为MySQL比较轻便,功能也足够能满足需求,而且它是开源且免费的!
(4) 总体架构
(5)RMI简介
远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程序语法规则和在本地机上对象间的方法调用的语法规则一样。下面是RMI的架构图:
2.Functionalities
(1) 系统需要有确认用户(系统检验客户个人账户是否与客户的账户上记载的账户一致)功能,账户要有密码保护功能,只有输入相应的密码才可以进入该账户,登陆界面中密码框须使用‘*’保护。
(2) 用户登录后,进入服务选择界面,浏览各种服务,选择所需要的服务。服务包括(取款,存款,查询余额,转账,修改密码)。
1. 取款:
a) 进入取款后选择账户类型(活期账户,定期账户,信用卡帐户),选好账户类型后,提示该ATM机一次能取款的最大金额-2000元
b) 该用户的一个帐户(用户可能有多个帐户)一天取款累计的最大金额为5000。
c) 用户选择“取款”后,选取系统界面上的固定金额(500,1000,1500,2000),或是输入要取的金额,进行取款
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。时间-年月日小时分钟)。
3.Interface
4.Design
(1) DV模式简述
本次课题项目中,我们主要的架构是采用MVC(Model-View-Controller)模式的一个变种——DV(Document/View)模式。其中:
(a) Document有两个核心类作为实现,BankAccount及其派生类与Transactions类。分别处理存取事务、转帐事务、交易历史事务查询等。
(b) View就是客户端界面的表示。在做客户端界面的时候,考虑到ATM应该是以单窗口进行各种模块功能的提供,所以我们使用了Composite模式进行界面的设计,让整个ATM用户界面可以表示部分-整体层次结构。
这样的架构设计再加上RMI技术的运用,我们实现了用户界面代码与业务逻辑处理代码的完整分离,极大方便了需求变更引起的代码维护。
(2) 数据存储功能设计
在服务端,采用单身模式专门设计了一个SqlStatementsManager类,负责数据库驱动管理、连接以及所有SQL语句的实现。这样做的好处是把和数据存储层有关联的功能集中起来,方便了数据库专家对SQL语句进行维护。这也使得业务逻辑层和数据存储层得到了明显的分离,当业务逻辑变更的时候可以把代码的改写程度降到最小,方便了以后代码的维护。
(1) Server的Package视图:
(2) Server Class Design
a) account包内:
b) server包内:
c) loginProcess包内:
d) transactions包内:
e) util包内:
f) sqlManager包内:
(3)Client的Package视图:
(4) Client Class Design
ui包内:
(6) Database Design
(1) E-R图设计
(2) 表设计
·AccountType表
该表为帐户类型表,用于区别帐户帐号是属于哪个帐户类型的
·CreditAccount表
该表为信用卡帐户表,用于记录信用卡帐户相关信息
·CurrentAccount表
该表为活期帐户表,用于记录活期帐户相关信息
·DepositAccount表
该表为定期帐户表,用于记录定期帐户相关信息
·DepositWithdraw表
该表为帐户存取表,用于对帐户的存取进行记录
·Transfer表
该表为转帐表,用于对帐户的转帐进行记录
·LoginAccount表
该表为登录验证表,用于用户登录的身份验证
5.Test
本次课题项目的测试是使用开源的测试框架——JUnit进行的。
JUnit下载http://www.junit.org, 版本:
在cn.edu.ynu.sei.atm.server.test包下有两个测试类
对cn.edu.ynu.sei.atm.sqlManager.SqlStatementsManager / cn.edu.ynu.sei.atm.util.DataFormatChecker类进行测试。
这样做测试设计主要是考虑到SqlStatementsManager类是一个核心类,所有的数据存取都是通过它的实例完成的,所以它的正确性关系重大。而DataFormatChecker类的实例负责的是对接入数据的格式、类型的正确性检测,同样是非常关键的。所以,我们对这两个类进行了严格的单元测试,以保证和他们有关联的类实例的功能正确性。
单元测试之后,我们还做了集成测试,主要是测试在任何时刻网络连接失败、服务器当机情况、接入数据格式、类型异常等处理。测试结果符合需求中要求的系统健壮性与稳定性。
6.Depolyment
在部署的时候我们将业务逻辑的实现与数据存储部署于一台服务器上,操作系统:GNU/Linux (Ubuntu 7.04);客户端暂时部署于Windows XP(SP2)。在服务器上使用的JRE版本为:Java(TM) SE Runtime Environment (build
在客户端上使用的JRE版本为:Java(TM) SE Runtime Environment (build
客户端主文件夹内容如下:
|-- - 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/ 下载。
7.Learned from this project
在本次课题项目中,我们学习到了一些软件架构方面的知识,并将它们用于了实际的项目中。具体说来,使用了MVC、Composite、Singleton等设计模式,还学习了Java RMI分布式计算模式,JUnit测试框架的使用。在GUI编程方面,我们学习并使用了IBM的SWT(IBM标准窗口组件)进行开发,让Java做的应用程序在GUI上有更好的外观和性能表现。在此基础上,我们将可能进一步学习CORBA,RMI-IIOP,以及在实际中任何编程时做JUnit测试,提高软件质量。在做Desktop Application的GUI方面我们将进一步学习Eclipse RCP,并考虑支持Plugins的设计,我们认为这在以后是相当有用和必要的。
总之,通过这个课题项目的设计与实现,我们基本掌握了Java开发一个小型分布式系统于GUI设计的方法与步骤,在一定程度上掌握了应用软件开发的基本流程,让我们对Java程序设计产生了浓厚的兴趣 :-)
- ATM系统设计报告[00原创]
- ATM系统开发日志[1] [00原创]
- ATM系统开发日志[2] [00原创]
- ATM系统开发日志[3] [00原创]
- ATM系统开发日志[4] [00原创]
- ATM系统开发日志[5] [00原创]
- ATM系统实现[5]——注意事项窗口[00原创]
- ATM系统实现[10]——转帐窗口[00原创]
- ATM系统实现[11]——取款窗口[00原创]
- ATM系统实现[12]——抽象转户类[00原创]
- ATM系统实现[15]——身份验证类[00原创]
- ATM系统实现[18]——数据管理类[00原创]
- ATM系统实现[19]——服务端[00原创]
- 综合设计 ATM系统
- ATM系统实现[1]——用户登录界面[00原创]
- ATM系统实现[2]——密码修改窗口[00原创]
- ATM系统实现[3]——余额查询窗口[00原创]
- ATM系统实现[4]——帐户选择窗口[00原创]
- Linux Kernel Development (中文译名Linux 内核设计与实现) 勘误 (第一版和第二版)
- IT“圣经”
- 【WCE】使用事件日志服务(二)
- 结构体中指向函数的指针
- spring入门编程问题集锦
- ATM系统设计报告[00原创]
- 爱 VS 喜欢
- Fedora 7和Ubuntu 7的结合(一安装篇)
- 初恋的二十五个瞬间
- Fedora 7和Ubuntu 7的结合(二配置篇)
- .NET Compact Framework使用P/Invoke服务
- Sun CDC based JRE framework
- GPLv3:大教堂和集市的新一轮对抗
- 关于测试