实验报告打印版.docx

上传人:b****3 文档编号:11219447 上传时间:2023-05-29 格式:DOCX 页数:26 大小:1.44MB
下载 相关 举报
实验报告打印版.docx_第1页
第1页 / 共26页
实验报告打印版.docx_第2页
第2页 / 共26页
实验报告打印版.docx_第3页
第3页 / 共26页
实验报告打印版.docx_第4页
第4页 / 共26页
实验报告打印版.docx_第5页
第5页 / 共26页
实验报告打印版.docx_第6页
第6页 / 共26页
实验报告打印版.docx_第7页
第7页 / 共26页
实验报告打印版.docx_第8页
第8页 / 共26页
实验报告打印版.docx_第9页
第9页 / 共26页
实验报告打印版.docx_第10页
第10页 / 共26页
实验报告打印版.docx_第11页
第11页 / 共26页
实验报告打印版.docx_第12页
第12页 / 共26页
实验报告打印版.docx_第13页
第13页 / 共26页
实验报告打印版.docx_第14页
第14页 / 共26页
实验报告打印版.docx_第15页
第15页 / 共26页
实验报告打印版.docx_第16页
第16页 / 共26页
实验报告打印版.docx_第17页
第17页 / 共26页
实验报告打印版.docx_第18页
第18页 / 共26页
实验报告打印版.docx_第19页
第19页 / 共26页
实验报告打印版.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

实验报告打印版.docx

《实验报告打印版.docx》由会员分享,可在线阅读,更多相关《实验报告打印版.docx(26页珍藏版)》请在冰点文库上搜索。

实验报告打印版.docx

实验报告打印版

理工大学

课程设计报告

 

课程名称数据库系统概论

设计题目银行账户管理系统

学生姓名

学号

专业班级计算机科学与技术

指导教师

 

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();

}

}

五.测试数据

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2