实验报告打印版.docx
《实验报告打印版.docx》由会员分享,可在线阅读,更多相关《实验报告打印版.docx(26页珍藏版)》请在冰豆网上搜索。
实验报告打印版
。
。
。
。
理工大学
课程设计报告
课程名称数据库系统概论
设计题目银行账户管理系统
学生姓名
学号
专业班级计算机科学与技术
指导教师
2012年9月12日
目录
1绪论
1.1选题目的及意义……………………………………………1
1.2设计内容……………………………………………………1
2需求分析
2.1功能需求……………………………………………………1
2.2数据需求……………………………………………………1
2.3其他需求……………………………………………………1
3数据库设计
3.1概念结构设计………………………………………………2
3.2逻辑结构设计………………………………………………2
3.3物理结构设计………………………………………………2
4系统功能设计……………………………………………………4
5系统实现
5.1开发环境………………………………………………4
5.2主要功能的运行结果及代码…………………………4
6总结…………………………………………………………18
参考文献
摘要
随着信息技术在管理上越来越深入而广泛的应用,信息管理系统的实施在技术上已逐步成熟。
信息管理系统是一个不断发展的新型学科,任何一个单位要生存要发展,要高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的信息管理系统。
银行管理系统是典型的信息管理系统。
银行管理系统工作繁琐,包含大量数据信息数据,因此就需要一个完善的银行管理系统来实现这些数据的有效管理。
本系统的主要任务就是对银行内银行业务员、储户的个人信息,储户存取款信息的统一管理,从而方便业务员操作,也满足了储户需求。
这次课程设计时间紧迫,加上自己本身能力也十分有限,只能完成银行管理系统中的少量功能,所以该系统还有很多有待扩充及完善的地方,有不妥善的地方还请老师指点。
这次课程设计只是达到训练、牢固知识的目的,熟悉数据库的前台和后台编程、VC++的控件、如何访问数据库等方面的知识,所以实现的功能也很有限,待以后随着知识的积累,慢慢地扩充完善该系统。
本系统采用了可视化的集成开发环境JAVA编辑用户操作界面、以SQLSever2005为后台数据库并以CRecordSet类访问数据库信息的管理系统,该系统能够完成ATM功能,银行业务功能,用户管理系统(用户账号的建立、用户存取款)等基本功能。
一.设计目的
银行账户管理是银行业务流程中十分重要的且必备的环节,由于银行有大量数据需要处理,全部采用人工方式明显不现实:
这不仅需要花费很高的成本,而且处理事务的效率和质量都存在很大的问题,出于这些问题的考虑,使用计算机来处理这类问题就成为一个相当理想的方案。
利用计算机可以极大地降低成本,更重要的是可以几乎没有错误地高效地处理所有的事务,所以做一款基于银行账户管理方面的系统是十分必要的。
本次课程设计通过对《银行账户管理系统》中银行业务流程的基本实现以及用户环节的事务处理,旨在体验数据库设计和实现的基本过程中掌握数据库模式的设计、分析和实现方法,了解数据库应用系统软件开发的一般过程。
二.设计内容
分别完成银行业务功能、ATM功能和用户管理功能,并设计数据库以支持这些功能的实现,最后通过代码进行具体实现以及数据库链接。
所用数据库:
SQLServer2005
开发语言:
Java
数据库设计:
使用了六张表,分别为:
管理员表(admin)、ATM机表(ATM)、ATM机出纳
表(ATMOutIn)、银行柜台出纳表(BankOutIn)、银行卡表(card)、用户
表(users)。
三个触发器,分别为:
冻结用户账号操作(userstatus_update)、
ATM机存取款操作(ATMOutIn_insert)和
银行存取款操作(BankOutIn_insert)。
一个视图、一个虚表:
用户操作查询
(allInfo(userId,cunquTime,cunquAddress,cunquMoney,cunq
uSummary,balanceMoney))。
银行业务功能:
设置管理员账号,赋予管理员权限以实现开户、销户、存款、取款、查询、办卡和挂失功能。
ATM功能:
ATM机连接系统数据库,实现用户登录、存(取)款以及用户查询功能。
用户管理:
通过登录功能获得系统数据库中自己的用户信息,并有权限修改系统允许用
户修改的信息。
三.概要设计
1.功能模块图;
2.各个模块详细的功能描述。
银行业务功能:
Ø管理员登录
在数据库中添加管理员数据,管理员可登录系统并有权限完成与用户相关所有操作。
Ø开户
收集用户信息,为用户分配账号并通过程序在系统数据库中添加用户信息。
Ø销户
根据账号在数据库中查找用户,确认用户身份信息后,管理员通过程序删除数据库中用户信息。
Ø存款
根据卡号在数据库中查找用户,依据存入金额,管理员通过程序修改数据库中用户的金额信息。
Ø取款
根据卡号在数据库中查找用户,通过密码确认用户,依据取出金额,经判断取出金额合法后(不大于余额),管理员通过程序修改数据库中用户的金额信息。
Ø查询
以用户卡号、账号或身份证号之一为关键字,在数据库中查找用户,依据业务需求显示用户信息(开户人信息、用户近期操作记录)。
Ø办卡
为用户账号绑定卡号,由管理员通过程序将卡号以及用户设置的密码存入系统数据库相应用户信息中。
Ø挂失
根据账号在数据库中查找用户,用户提供登录密码确认用户身份信息后,管理员通过程序将数据库中用户卡状态信息由“使用”改为“冻结”。
ATM功能:
Ø登录
ATM机依据用户卡号和密码在系统数据库中查询用户信息,在信息匹配的情况下进入用户操作界面。
Ø存款
ATM机依据用户存入金额,通过程序修改数据库中用户的金额信息。
Ø取款
ATM机依据取出金额,通过对比本机余额和数据库中用户余额,若金额合法则通过程序修改数据库中用户的金额信息,否则弹出错误信息。
用户管理:
Ø登录
依据用户账号和密码由管理员或ATM机在系统数据库中查询用户信息,在信息匹配的情况下用户获得用户管理权限。
Ø查询个人信息
打印数据库中记录的用户个人信息。
Ø修改个人信息
收集用户新信息,由管理员操作,修改数据库中用户拥有修改权限的相应数据。
Ø查询近期操作
依据用户提供所要查询时间范围,由管理员或ATM机通过程序查询系统数据库中用户的操作记录。
四.详细设计
1.功能函数的调用关系图
用户类
卡查询
操作
卡密修改
操作
卡操作记录
查询近期操作
用户管理
登录方法
用户信息
查询
2.重点设计及编码
数据库设计:
createdatabaseaccount
useaccount
createtableusers
(
userIdvarchar(10)notnull,/*用户账号,主键*/
userNamevarchar(10)notnull,/*用户名*/
userPasswordvarchar(10)notnull,/*密码*/
idNovarchar(20)notnull,/*身份证号码,唯一*/
userMoneynumeric(10,2)default0,/*总金额,不能小于零*/
userStatusvarchar(4)check(userStatus='使用'oruserStatus='冻结')default'使用',/*用户状态(使用,冻结),默认是使用中*/
userAddressvarchar(30)notnull,/*用户地址*/
startTimeDateTime,/*开户时间,应该是开户时的系统时间,不应该人为输入*/
primarykey(userId),/*设置主键*/
)
--用户的状态一旦变成冻结状态,那么卡也应该不能使用
createtriggeruserstatus_update
onusers
afterupdate
as
ifupdate(userStatus)
begin
if(selectuserStatusfrominserted)='冻结'
updatecardsetcardStatus='冻结'whereuserId=(selectuserIdfromdeleted)
if(selectuserStatusfrominserted)='使用'
updatecardsetcardStatus='使用'whereuserId=(selectuserIdfromdeleted)
end
createtablecard
(
cardIdvarchar(20)primarykey,/*卡号,主键*/
userIdvarchar(10)notnull,/*用户账号,外键,参照users表的userId*/
cardPasswordvarchar(10)notnull,/*卡密码*/
cardStatusvarchar(5)check(cardStatusin('使用','冻结','挂失'))default'使用',/*卡状态(使用,冻结,挂失),默认是使用*/
--cardMoneynumeric(10,2)check(cardMoney>=0),
foreignkey(userId)referencesusers(userId)
ondeletecascade/*当删除用户帐号时,他的卡号会及联删除*/
)
--管理员表
createtableadmin
(
adminIdvarchar(10)notnullprimarykey,/*操作员号码,主键*/
adminNamevarchar(10)notnull,/*操作员名字*/
adminPasswordvarchar(20)notnull,/*操作员密码*/
BankAddressvarchar(20)notnull/*操作员所在银行地址*/
)
insertintoadminvalues('001','许莉莉','123','工商银行长安分行')
--创建一个ATM表,至少应该含有编号以及ATM机里的总金额
createtableATM
(ATMIdvarchar(10)primarykey,/*ATM机ID*/
ATMMoneynumeric(20,2)check(ATMMoney>=0),/*ATM机里的总钱数,不允许用户的取款数大于它的总钱数,所以它的总钱数不能小于*/
ATMAddressvarchar(20)/*ATM机的地点*/
)
insertintoATMvalues('000',10000,'长安区')
insertintoATMvalues('111',50000,'长安区')
--用户ATM机存取款信息表
createtableATMOutIn
(
ATMIdvarchar(10),/*取款机号,外键,参照ATM表的ATMId*/
cardIdvarchar(20)notnull,/*用户卡号,外键,参照card表的cardId*/
ATMTimeDateTime,/*在ATM机存取款时间(应该是进行存取款时的系统时间*/
ATMCunQunumeric(10,2),/*ATM机存款金额*/
ATMSummaryvarchar(30),/*存取款摘要*/
balanceMoneynumeric(10,2)default0,/*经过操作后账号中的金额*/
foreignkey(ATMId)referencesATM(ATMId)ondeletecascade,
foreignkey(cardId)referencescard(cardId)ondeletecascade
)
--创建一个触发器,当产生这一信息时,账号上的钱也会随之改动
createtriggerATMOutIn_insert
onATMOutIn
afterinsert
as
declare@num_rowsint
select@num_rows=@@rowcount
if@num_rows=0/*未插入成功*/
return
if@num_rows>0/*数据插入成功*/
begin
updateuserssetuserMoney=userMoney+(selectATMCunQufromInserted)whereuserIdin(selectuserIdfromcardc,insertediwherec.cardId=i.cardId)
updateATMsetATMMoney=ATMMoney+(selectATMCunQufromInserted)whereATMIdin(selectATMIdfrominserted)/*对应的atm机的总金额也会随之改变*/
declare@balanceMoneynumeric(10,2)/*账号余额*/
select@balanceMoney=(selectuserMoneyfromuserswhereuserIdin(selectuserIdfromcardc,insertediwherec.cardId=i.cardId))
updateATMOutInsetbalanceMoney=(@balanceMoney)wherecardIdin(selectcardIdfrominserted)andatmtimein(selectatmtimefrominserted)/*完成了账号金额的修改,再将新的金额插入到信息表中,就是剩余的总余额了(注意修改的只是一个账号此次的操作*/
end
--用户银行存取款信息信息表
createtableBankOutIn
(
adminIdvarchar(10)notnull,/*操作员号码,外键,参照操作员表的adminId*/
cardIdvarchar(20)notnull,/*用户卡号,外键,参照用户信息表*/
BankTimeDateTime,/*银行存款时间*/
BankCunQunumeric(10,2),/*银行存款*/
BankSummaryvarchar(30),
balanceMoneynumeric(10,2)default0,/*经过操作后账号中的金额*/
foreignkey(adminId)referencesadmin(adminId)ondeletecascade,
foreignkey(cardId)referencescard(cardId)ondeletecascade
)
--创建一个触发器,当插入这条数据时会自动修改users表里的金额信息
createtriggerBankOutIn_insert
onBankOutIn
forinsert
as
declare@num_rowsint
select@num_rows=@@rowcount
if@num_rows=0/*未插入成功*/
return
if@num_rows>0/*数据插入成功*/
begin
updateuserssetuserMoney=userMoney+(selectBankCunQufromInserted)whereusers.userId=(selectuserIdfromcardc,insertediwherec.cardId=i.cardId)
declare@balanceMoneynumeric(10,2)
select@balanceMoney=(selectuserMoneyfromuserswhereuserId=(selectuserIdfromcardc,insertediwherec.cardId=i.cardId))
updateBankOutInsetbalanceMoney=(@balanceMoney)wherecardId=(selectcardIdfrominserted)andbanktime=(selectbanktimefrominserted)/*完成了账号金额的修改,再将新的金额插入到信息表中,就是剩余的总余额了(要注意这个信息总额的唯一性)*/
end
--总信息可以用其它的表推出,建一个视图,一个虚表,来综合他们的信息
createviewallInfo(userId,cunquTime,cunquAddress,cunquMoney,cunquSummary,balanceMoney)
as
selectuserId,bankTime,BankAddress,bankCunqu,bankSummary,balanceMoney
frombankoutinb,admina,cardc
whereb.adminId=a.adminIdandc.cardId=b.cardId
union
selectuserId,ATMTime,ATMAddress,ATMCunqu,ATMSummary,balanceMoney
fromatmoutina,cardc,ATMatm
wherec.cardId=a.cardIdanda.atmid=atm.atmid
数据库链接:
packagecom.connection;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
/**
*定义一个数据库的连接及关闭资源的类
*@authorAdministrator
*
*/
publicclassDBConnection{
/**
*创建数据库的链接
*@return返回一个数据库的链接
*/
publicstaticConnectiongetConnection(){
Connectionconn=null;
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");//加载数据库驱动
Stringurl="jdbc:
microsoft:
sqlserver:
//localhost:
1433;databaseName=account";
Stringusername="sa";//数据库用户名
Stringpassword="1126";//数据库密码
conn=DriverManager.getConnection(url,username,password);//获得数据库的链接
}catch(ClassNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnconn;
}
/**
*关闭数据库资源
*@paramobj数据库打开的资源对象(在此处用Object,因为链接数据库是会打开多个资源)
*/
publicstaticvoidcloseObject(Objectobj){
if(obj!
=null){
if(objinstanceofResultSet){
try{
((ResultSet)obj).close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
if(objinstanceofPreparedStatement){
try{
((PreparedStatement)obj).close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
-
if(objinstanceofConnection){
try{
((Connection)obj).close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
}
}
程序入口函数:
packagecom.main;
importcom.frame.MainFrame;
publicclassBegin{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
newMainFrame();
}
}
五.测试数据