数据库原理及应用课程设计文档分析.docx
《数据库原理及应用课程设计文档分析.docx》由会员分享,可在线阅读,更多相关《数据库原理及应用课程设计文档分析.docx(34页珍藏版)》请在冰豆网上搜索。
数据库原理及应用课程设计文档分析
<基于数据库的ATM机存取款系统>
数据库原理及应用课程设计文档
学号
姓名
专业班级
指导教师
日期
1概述
数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效的存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。
SQL数据库的安全性
①、计算机系统的三类安全性问题
1.所谓计算机系统安全性,是指为计算机系统建立和采用的各种安全保护措施,以保护计算机系统中的硬件、软件、及数据,防止其偶然或恶意的原因是系统遭到破坏,数据遭到更改或泄露等。
2.技术安全:
计算机系统中采用具有一定安全性的硬件、软件来实现对计算机系统及其所存数据的安全保护,当计算机系统受到无意或恶意的攻击时仍能保证系统正常运行,保证系统内的数据不增加、不丢失、不泄露。
3.管理安全:
由于管理不善导致的计算机设备和数据介质的物理破坏、丢失等软硬件意外故障以及场地的意外事故等安全问题。
4.政策法律:
政府部门建立的有关计算机犯罪、数据安全保密的法律准则和政策法规、法令。
②、数据库安全性控制
1.用户标识与鉴别:
用户标识、口令。
2.存取控制:
定义用户权限,并将用户权限登记到数据字典中、合法权限检查。
1.1课程设计目标
为用户和各种应用系统提供一个信息基础设施和高效率的运行环境
SQL数据库的实际应用
①、SQL包括了所有对数据库的操作,主要是由4个部分组成:
1.数据定义:
这一部分又称为“SQLDDL”,定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引4部分。
2.数据操纵:
这一部分又称为“SQLDML”,其中包括数据查询和数据更新两大类操作,其中数据更新又包括插入、删除和更新三种操作。
3.数据控制:
对用户访问数据的控制有基本表和视图的授权、完整性规则的描述,事务控制语句等。
4.嵌入式SQL语言的使用规定:
规定SQL语句在宿主语言的程序中使用的规则。
②、在如今的互联网系统中主要存在B-S模式和C-S模式,B-S模式指的是浏览器服务器模式,C-S模式指的是客户服务器模式。
两者的相同部分就是SERVER服务器,SERVER服务器是指的专用计算机,它拥有大容量存储设备和高性能计算功能,用于存储复杂的用户数据,这些复杂臃繁的数据以关系模型存储也就是二维表的形式存储,各二维表之间以相同的字段形成联系,这样存储的好处是具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
在这些专用计算机运行着位于用户与操作系统之间的一层数据管理软件。
数据库管理系统和操作系统一样是计算机的基础软件,也是一个大型复杂的软件系统,其主要功能包括数据定义,数据组织、存储和管理,数据操纵功能,数据库的事务管理和运行管理,DBMS与另一个DBMS或文件系统的数据转换功能,异构数据库之间的互访和互操作功能等。
而数据库系统是指的在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。
1.2课程设计要求
使用SqlServer2005和java语言等技术完成ATM存取款系统,具体要求如下:
1.能从信息需求,处理需求,安全性等方面对系统进行需要分析,并能分析出系统的功能模块
2能从需要分析里抽象出系统中主要的实体及关联关系,并画出对应的E-R图
3.能从E-R图里抽象出系统的数据库表,并对数据库表用规范化理论优化并评价,使得所有数据库表最低达到第三范式
4.设计并实现ATM机登录,存款,取款,转账以及查看余额功能,系统设计要实用,编程简练、规范,可用,功能全面
5.提交系统使用说明书
1.3项目人员分工
姓名
组员分工
AA
数据库的建立以及辅助组员完成各个模块(参与数据库设计的讨论)
BB
数据库转账、取款及修改密码存储过程的编写及前后台的链接(参与数据库设计的讨论)
CC
文档的实现及数据库中表的建立(参与数据库设计讨论)
DD
前台界面的设计及实现(参与数据库设计的讨论)
XX
PPT的制作及存款和查询存储过程的实现(参与数据库设计的讨论)
FXX
数据库中表约束及表关系的建立(参与数据库设计的讨论)
1.4参考资料
数据库系统概论(第四版)高等教育出版社
JAVA2实用教程(第四版)清华教育出版社
SqlServer2000管理与应用开发教程人民邮电出版社
2系统分析和设计
2.1开发背景
ATM机管理系统是银行业务流程过程中十分重要且必备的环节之一,在银行业务流程当中起着承上启下的作用,其重要性不言而喻。
但是,目前许多银行在具体的一些业务流程处理过程中仍然使用手工操作的方式来实施,不仅费时、费力,效率低下,而且无法达到理想的效果。
本文针对上述问题,采用软件工程的开发原理,依据软件流程过程规范,按照需求分析、概要设计、详细设计、程序编码、测试、软件应用、软件维护等过程开发了一个银行ATM机管理系统系统。
2.2需求分析
1.数据库设计:
对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各个用户的应用需求,包括信息管理要求和数据操作要求。
2.数据库设计的特点:
数据库建设的基本规律:
“三分技术,七分管理,十二分基础数据”;机构(数据)设计和行为(处理)设计相结合。
3.数据库设计方法:
计算机的基础知识,软件工程的原理和方法,程序设计的方法和技巧,数据库的基本知识,数据库设计技术,应用领域知识。
4.数据库设计的基本步骤:
需求分析,概念结构设计,逻辑结构设计,物理结构设计,数据库实施,数据库运行和维护。
4)SQL作为后台数据库与前台开发工具的结合
前台开发工具用于做前台页面,设计出可视化的图形界面,使不同权限的用户都便于操作整个系统。
而前台页面与后台数据库连接最关键的地方则在于SQL语句。
各种开发语言都提供了其连接数据库的类,通过这些类的相应方法实现连接数据库、对数据源的各种操作,包括查询、插入、删除、更新操作、返回操作结果等。
当点击图形界面相应的控件时,通过监听触发产生相应的SQL语句,然后执行SQL语句将返回的结构显示在图形界面上。
5)SQL查询命令的应用
SQL提供select语句进行数据库的查询,该语句具有灵活的使用方式和丰富的功能。
分为:
1.单表查询2.连接查询3.嵌套查询4.集合查询。
6)SQL在VB、ASP或其他自选语言中的实际应用
数据库安全性分析
1.用户标识与鉴别:
用户标识、口令。
2.存取分析:
定义用户权限,合法权限检查。
2.3系统总体结构
系统的模块划分为如图所示,分别为:
用户登录、ATM机存款、ATM机取款、ATM机查询余额、ATM转账功能(chat)5个模块。
每个模块负责相应的功能。
系统采用JAVA技术实现对数据库的访问操作,使用SQLServer2005作为后台数据库。
1用户登录模块
提供用户账号登录界面,输入用户账号,密码进行登录。
2ATM机存款模块
③ATM机取款模块
3数据库结构设计
3.1数据流图
3.2数据库E-R图
数据库逻辑设计
3.3.1用户表
用户表(用户编号,姓名,密码,身份证号,性别,地址,电话)
字段名
数据类型
长度
约束
能否为空
默认值
用户编号
int
主键
否
姓名
nvarchar
50
否
性别
nchar
2
否
男
身份证号
nvarchar
50
否
电话
varchar
50
否
地址
nvarchar
50
否
3.3.2银行卡表
银行卡信息(Account)(卡号,密码,货币类型,存款类型,开户日期,开户金额,余额,是否挂失,顾客编号)
字段名
数据类型
长度
约束
能否为空
默认值
卡号
varchar
20
主键
否
密码
varchar
6
否
货币类型
varchar
20
否
RMB
存款类型
varchar
2
否
活期
开户日期
timestamp
否
系统时间
开户金额
double
否
0
余额
Double
否
0
是否挂失
varchar
2
否
0(正常)
顾客编号
varchar
20
外键
是
3.3.3交易记录表
交易记录表(交易编码,卡号,目标卡号,操作类型号,时间,备注)
字段名
数据类型
长度
约束
能否为空
默认值
交易编号
int
主键
否
卡号
nvarchar
50
否
目标卡号
nvarchar
50
否
操作类型号
int
否
时间
nchar
10
否
系统时间
备注
nvarchar
50
是
3.3.4管理员表
管理员信息(管理员编号,姓名,类型号,操作类型)
字段名
数据类型
长度
约束
能否为空
默认值
管理员编号
integer
主键
否
姓名
varchar
20
否
类型号
int
否
操作类型
nvarchar
50
否
总结:
以上数据库表结构逻辑设计满足表结构三大范式,设计出合理的关系型数据库表结构,应用环境和现实世界的具体情况合理地选择数据库模式
4实施
4.1项目运行环境描述
前台——JAVA(Myeclipse)
后台——数据库(Sqlsever2005)
4.2主要功能实现代码
存储过程主代码:
创建用户
USE[ATM]
GO
/******Object:
StoredProcedure[dbo].[create_user]ScriptDate:
12/30/201312:
22:
14******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
ALTERproc[dbo].[create_user]
@timenvarchar(50),
@IDcardnvarchar(50),
@namenvarchar(50),
@passwordnvarchar(50),
@person_cardnvarchar(50),
@sexint,
@moneyfloat,
@addressnvarchar(50),
@telnvarchar(50)
as
insert用户表values(@IDcard,@name,@password,@person_card,@sex,@money,@address,@tel)
insert交易记录values(@IDcard,@IDcard,4,@time)
return1
登陆
USE[ATM]
GO
/******Object:
StoredProcedure[dbo].[log_in]ScriptDate:
12/30/201312:
23:
44******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
ALTERPROCEDURE[dbo].[log_in]
@idcardnvarchar(50),
@codenvarchar(50),
@passflagintOUTPUT
AS
DECLARE@numint
SET@num=0
SELECT@num=COUNT(*)FROM用户表where@idcard=卡号AND@code=密码
IF(@num>0)
BEGIN
SET@passflag=1
END
ELSE
BEGIN
SET@passflag=0
END
查询
USE[ATM]
GO
/******Object:
StoredProcedure[dbo].[quary]ScriptDate:
12/30/201312:
24:
23******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
ALTERprocedure[dbo].[quary]
@IDcardnvarchar(50)
as
select*from用户表
where卡号=@IDcard
存款
USE[ATM]
GO
/******Object:
StoredProcedure[dbo].[savemoney]ScriptDate:
12/30/201312:
24:
53******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
ALTERprocedure[dbo].[savemoney]
(@savemoneyfloat,
@IDcardnvarchar(50),
@timenvarchar(50)
)
as
begintransaction
declare@errorsumint
set@errorsum=0
update用户表set余额=余额+@savemoney
where卡号=@IDcard
set@errorsum=@errorsum+@@ERROR
insertinto交易记录values(@IDcard,@IDcard,2,@time)
set@errorsum=@errorsum+@@ERROR
if(@errorsum<>0)
begin
--print'交易失败,回滚事务'
rollbacktransaction
return-1
end
else
begin
--print'交易成功,提交事务,写入硬盘,永久的保存'
committransaction
return1
end
--print'查看存款后的余额'
select*from用户表
取款
USE[ATM]
GO
/******Object:
StoredProcedure[dbo].[take_money]ScriptDate:
12/30/201312:
25:
14******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
ALTERproc[dbo].[take_money]
--@output_valuenvarchar(50)OUTPUT,
@intput_moneyfloat,
@input_src_idnvarchar(50),
@input_aim_idnvarchar(50),
@savemoneyfloat,
@timenvarchar(50)
as
begintransaction
declare@errorsumint
set@errorsum=0
declare@tempnvarchar(50)
declare@select_moneynvarchar(50)
select@temp=卡号from用户表
where卡号=@input_aim_id
if(@tempisnotnull)
begin
select@select_money=余额from用户表
where卡号=@input_src_id
if(@select_money>=@intput_money)
begin
update用户表set余额=余额-@intput_money
where卡号=@input_src_id
set@errorsum=@errorsum+@@ERROR
insertinto交易记录values(@input_src_id,@input_aim_id,2,@time)
set@errorsum=@errorsum+@@ERROR
end
else
begin
set@errorsum=@errorsum+1
--print'余额不足'
end
end
else
begin
--print'用户不存在,交易失败,回滚事务'
return0
end
if@errorsum<>0
begin
--set@output_value='交易失败,回滚事务'
rollbacktransaction
return-1
end
else
begin
--set@output_value='交易成功,提交事务,写入硬盘,永久的保存'
--print'交易成功,提交事务,写入硬盘,永久的保存'
committransaction
return1
end
--print'查看转账后的余额'
--select*from用户表
转账
USE[ATM]
GO
/******Object:
StoredProcedure[dbo].[trans_money]ScriptDate:
12/30/201312:
25:
33******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
ALTERproc[dbo].[trans_money]
@intput_moneyfloat,
@input_src_idnvarchar(50),
@input_aim_idnvarchar(50),
@savemoneyfloat,
@timenvarchar(50)
as
begintransaction
declare@errorsumint
set@errorsum=0
declare@select_moneynvarchar(50)
select@select_money=余额from用户表
where卡号=@input_src_id
if(@select_money>=@intput_money)
begin
update用户表set余额=余额-@intput_money
where卡号=@input_src_id
set@errorsum=@errorsum+@@ERROR
update用户表set余额=余额+@intput_money
where卡号=@input_aim_id
set@errorsum=@errorsum+@@ERROR
insertinto交易记录values(@input_src_id,@input_aim_id,3,@time)
set@errorsum=@errorsum+@@ERROR
end
else
begin
return0
--print'余额不足'
end
if@errorsum<>0
begin
--print'交易失败,回滚事务'
rollbacktransaction
return-1
end
else
begin
--print'交易成功,提交事务,写入硬盘,永久的保存'
committransaction
return1
end
--print'查看转账后的余额'
--select*from用户表
修改密码
USE[ATM]
GO
/******Object:
StoredProcedure[dbo].[update_password]ScriptDate:
12/30/201312:
25:
52******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
ALTERproc[dbo].[update_password]
@passwordnvarchar(50),
@IDcardnvarchar(50)
as
update用户表
set密码=@password
where卡号=@Idcard
java登陆代码:
packagebankPack;
importjava.awt.Image;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.MouseAdapter;
importjava.awt.event.MouseEvent;
importjava.sql.SQLException;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JLabel;
importjavax.swing.JOptionPane;
importjavax.swing.JPasswordField;
importjavax.swing.JTextField;
importjavax.swing.WindowConstants;
importjavax.swing.SwingUtilities;
importjavax.swing.border.LineBorder;
importbankImpl.BankDao;
importbankentity.UserTbl;
/**
*ThiscodewaseditedorgeneratedusingCloudGarden'sJigloo
*SWT/SwingGUIBuilder,whichisfreefornon-commercial
*use.IfJiglooisbeingusedcommercially(ie,byacorporation,
*companyorbusinessforanypurposewhatever)thenyou
*shouldpurchasealicenseforeachdeveloperusingJigloo.
*Pleasevisitfordetail