大型数据库课程设计报告.docx
《大型数据库课程设计报告.docx》由会员分享,可在线阅读,更多相关《大型数据库课程设计报告.docx(30页珍藏版)》请在冰点文库上搜索。
大型数据库课程设计报告
大型数据库
课程设计报告
学院:
信息科学与工程学院
专业班级:
计科0705
姓名:
田蜜
学号:
0902070520
指导老师:
盛津芳
2010年12月12日
目录
1、实验要求…………………………………………………………3
2、需求分析…………………………………………………………4
3、概念结构设计……………………………………………………11
4、逻辑结构设计……………………………………………………13
5、数据库实施………………………………………………………15
6、实验总结…………………………………………………………26
7、参考资料………………………………………………………28
第一章实验要求
§1.1引言
随着数据处理的不断进步和计算机网络的迅速发展,使数据库应用系统不仅在功能而且在结构上都有了深刻的变化,而且运用在生活的每一个方面。
通过学习关系代数,关系演算,函数依赖,关系模式分解,关系模式的规范化让我们建立了扎实的关系数据库理论基础。
而在掌握基本理论的基础上掌握关系数据库的设计方法,掌握现代信息系统的开发方法也显得尤为必要。
目前在关系数据库中用得最多的SQL数据库,开发数据库的语言工具很多人用JAVA。
所以对于计算机专业的学生来说掌握数据库应用的基本技术,熟悉编程语言与SQL数据库的结合运用是我们计算机专业学生之必备本领。
本次课程设计是以银行管理系统为模拟模型,运用JAVA编程语言结合SQL数据库所开发系统。
§1.2内容概要
此次课程设计针对设计要求主要要做以下工作,根据要求提炼数据库所需的信息,弄清楚数据库要实现的功能,及其完整性和安全性要求。
由需求分析和依赖关系确立实体集及关系表。
结合与用户的交互信息搭建友善的界面,根据功能的不同确立不同的模块,合理运用JAVA语言和调用SQL语句达到数据库操作的目的。
信息提取与处理见第二章内容;概念结构设计见第三章内容;逻辑机构设计见第四章内容;具体功能分析及代码详见第五章内容。
本次课程设计开发环境:
(一)硬件平台
基于Windows操作系统的一台普通台式PC机
(二)操作系统
Windows7Ultimate,32bit
DirectXversion:
11.0
(三)软件平台
MyEclipse7.0
MicrosoftSQLServer2008
第二章需求分析
§2.1信息要求
1)客户信息
对于客户我们应该知道他的客户号,客户名,信用度,最大的经济支付能力。
2)存款功能
对于一个客户,他在一个银行有且只有一个存款账号。
但可在不同的银行都有存款,所以对于一个账号,我们需要知道其所在银行类型,账号,密码,存款额,最近存款日期。
(假定存款利率都一样)
3)取款和透支功能
对于客户取款,我们要知道他在用哪个卡型取款,即哪个银行,同时应该验证身份信息(卡号,密码)要知道该卡上的存款额,及此次的取款额。
根据卡上的金额与所取金额的差值决定是否属于透支类型。
若属于透支类型,需要知道客户以前的透支记录,即哪张卡上(卡型)什么时间透支多少金额。
若可以透支需根据客户的信誉度和经济能力确定用户的最大可透支额,用户根据其信息来透支所需金额。
4)贷款功能
我们需要知道贷款类别,然后根据客户的信誉度和经济承受能力来确定最大可贷多少款子给客户。
同时我们应该给客户一个贷款号,根据其贷款的年数来确定客户的贷款利率,对于贷款我们还应该保存其贷款时间,还贷时间等。
根据题目要求,整个银行系统分为两大部分,用户操作界面部分和管理员操作界面部分,而用户操作部分,又包含存款、取款、贷款、还贷和转账五个小部分;管理员操作界面分为查询、开户和销户三个部分;另外整个系统涉及到用户和管理员的登录,因此需要有一个登录界面,登录时若用户名为普通用户则进入普通用户主操作界面,若用户名为管理员用户名,则转入管理员操作界面。
由此,以下给出整个系统需要从数据库中获取的信息内容及数据库中存储的数据:
表3-1管理员信息表
字段名称
数据类型
可否为空
约束条件
用户名
Varchar
NOTNULL
主键
密码
Varchar
NOTNULL
无
表3-2存/取款信息表
字段名称
数据类型
可否为空
约束条件
账号
Varchar
NOTNULL
主键
卡号
Varchar
NOTNULL
外码
银行类型
Varchar
NOTNULL
无
密码
Varchar
NOTNULL
无
存款额
Float
NOTNULL
无
存款日期
Datetime
NOTNULL
无
表3-3客户信息表
字段名称
数据类型
可否为空
约束条件
客户号
Varchar
NOTNULL
主键
客户名
Varchar
NOTNULL
无
信用度
Varchar
NOTNULL
无
支付能力
Varchar
NOTNULL
无
表3-4还/贷款信息表
字段名称
数据类型
可否为空
约束条件
贷款号
Varchar
NOTNULL
主码
卡号
Varchar
NOTNULL
外码
信誉度
Varchar
NOTNULL
无
贷款利率
Varchar
NOTNULL
无
贷款时间
Datetime
NOTNULL
无
还贷时间
Datetime
NOTNULL
无
§2.2处理要求
系统整体分为两大部分,管理员和用户操作,而用户操作部分细分成存款、贷款等五个部分,整个系统的操作流图如下:
1
2
2.1
1.2.1登录界面
用户或者管理员登录系统时,系统将用户输入的用户名和密码与数据库中的用户名密码进行对比,如果验证成功则允许登录,否则弹出错误,提示用户重新输入,其操作流图如下:
图1登录界面操作流图
1.2.2管理员界面
如果输入的用户名和密码为管理员权限,则登录为管理员,并打开管理员界面,并授予管理权限,允许管理员进行开户、销户和查询,本次课程设计只实现了开户与销户,课程设计要求的组合查询和模糊查询没有实现,管理员界面的操作流图如下:
图2管理员界面操作流图
1.2.3用户操作界面
用户操作界面中,细分为存款、取款、贷款、还贷和转账等五个部分,主操作界面的模块图如下:
图3主操作界面操作流图
1.2.3.1存款,用户可直接点击查询按钮进行查询,也可以输入要存入的金额并点击确定,系统将会更新数据库中用户的余额,其操作流图如下:
图4存款界面操作流图
1.2.3.2取款,用户在取款前后均可查询可用余额,若用户输入相应取款金额并点击确定,系统将查询数据库中account表格中相应用户的balance判断用户余额是否充足,如果余额充足,则允许取款并更新数据库中信息,如果余额不足,系统根据用户信用额度判断用户是否满足透支要求,如果能够透支则同样允许用户取款,如果用户的信用额度不能满足用户的取款要求,则提示用户“信用额度不够,取款请求不被允许”,其操作流图如下:
图5取款界面操作流图
1.2.3.3贷款,用户可随时查询其信用额度,也可以输入贷款金额和时间后查询其贷款的利率,当用户确定要贷款时,系统将会查询数据库用户输入的贷款金额是否在用户的信用额度允许的贷款金额范围之内,如果超过贷款金额,则提示用户贷款不成功,信用额度不够,否则更新数据库,其操作流图如下:
图6贷款界面操作流图
1.2.3.4还贷操作相对简单,用户首先需要查询当前贷款金额,然后执行还贷操作后,系统将更新数据库内容,其操作流图如下:
图7还贷界面操作流图
1.2.3.5转账,用户随时可以查询当前可用余额,转账时系统要求用户输入要转入的对方账号和要转账的金额,然后系统将根据当前用户余额判定是否余额充足,如果用户余额大于要转账的金额,则执行转账并更新数据库,否则提示用户余额不足,其操作流图如下:
图8转账界面操作流图
§2.3安全性与完整性要求
2.3.1数据库安全性
数据库的安全性是指在信息系统的不同层次保护数据库,防止未授权的数据访问,避免数据的泄漏、不合法的修改或对数据的破坏。
安全性问题不是数据库系统所独有的,它来自各个方面,其中既有数据库本身的安全机制如用户认证、存取权限、视图隔离、跟踪与审查、数据加密、数据完整性控制、数据访问的并发控制、数据库的备份和恢复等方面,也涉及到计算机硬件系统、计算机网络系统、操作系统、组件、Web服务、客户端应用程序、网络浏览器等。
本次课程设计,对于数据库安全性的考虑几乎没有,仍然使用数据库管理员权限与数据库服务器进行连接(此次使用的是MicrosoftSQLServer的管理员sa),在客户端功能控制不合理的情况下,可能使操作人员访问到超出其访问权限的数据。
但是,此次课程设计由于这方面知识有眼,仍然沿用了SQLServer的sa管理员,授予用户对数据库的所有权、修改、更新以及删除的权限。
2.3.2数据库完整性
数据库的完整性的基本含义是指数据库中数据的正确性、有效性和相容性,其主要目的是防止错误的数据进入数据库。
正确性是指数据的合法性,例如数值型数据只能含有数字而不能含有字母。
有效性是指数据是否属于所定义域的有效范围。
相容性是指表示同一事实的两个数据应当一致,不一致即是不相容。
SQLServer数据库提供了一套完整的完整性策略,如下表:
完整性约束
定义方式
SQLServer支持情况
静态约束
固有约束
数据模型固有
属性原子性
隐式约束
数据库定义语言(DDL)
表本身的完整性约束
实体完整性约束、唯一约束、CHECK约束、非空约束、默认约束
表间的约束
参照完整性约束、触发器
显式约束
过程化定义
存储过程、函数
断言
不支持
触发器
支持
动态约束
过程化定义
存储过程、函数
触发器
支持
第三章概念结构设计
§3.1基本E-R图
1)实体集及属性描述:
实体1:
customer(客户)
属性:
customer_idnametrust_abi(信誉度)pay_abi(经济能力)
实体2:
bank(银行)
属性:
card_type(卡型-银行名称)adressasset(银行现存款)
实体3:
fund_bill(存款单)
属性:
card_typecard_nokeywordfortune_amount(存款金额)deposite_date
实体4:
loan_pack(贷款)
属性:
loan_pack_no(贷款号)card_type(银行)loan_moneypayoff_dateborrow_daterest_money(为了支持分期付款而设立的)rate(贷款利率)
实体5:
overdraft(透支)
属性:
card_typecard_noamountdate(透支的时间)
实体6:
fetch_depo_log(存款/取款日志)
属性:
card_typedatamountdep_fet(存款/取款)
实体7:
payoff_pro(还贷日志)
属性:
loan_pack_nopayback_nopayback_amountcard_type
第四章逻辑结构设计
关系数据库是表的集合,在报告需求分析阶段,已经给出了整个系统的数据库表格内容,下面将更进一步地给出整个系统的逻辑结构设计图,如下:
图13表login
图14表loan
图15表depositor
图16表customer
图17表branch
图18表borrower
第五章数据库实施
§5.1登录模块的功能模块分析及代码讲解
5.1.1功能模块和功能概要
登录模块,用于验证客户或者管理员的用户名和密码,与大多数登录界面相似,系统要求使用者输入相应的用户名和密码,然后系统将查询数据库中用户名和密码,并将其与用户输入的用户名和密码进行比较,如果验证成功则允许登录并转入相应的操作界面,如果验证失败,则弹出警告,要求用户重新输入。
5.1.2结合源代码和操作界面详细分析
登录界面如下:
图9登录界面
登录时,首先调用查询数据库的语句,查询数据库中用户名和密码与用户输入是否一致,如果验证成功,则允许登录,否则提示重新输入,其核心代码如下:
if((txtUserName.getText().trim().equals("admin"))&&(txtPwd.getText().trim().equals("admin")))
{
JOptionPane.showMessageDialog(null,"您好,AdministratorWelcome~!
");
dispose();//关闭登录窗口
newAdminFrame();//调出管理员操作窗口
}
else
{
DatabaseOperatemyLogin=newDatabaseOperate();
s=myLogin.login(txtUserName.getText().trim());
if((txtUserName.getText().trim().equals(s[2].trim()))&&(txtPwd.getText().trim().equals(s[3].trim())))
{
JOptionPane.showMessageDialog(null,"欢迎~普通用户,登录成功~!
");
dispose();//关闭登录窗口
newMainFrame();//调出主操作窗口
}else
{
JOptionPane.showMessageDialog(null,"用户名或密码错误,请重新登录!
","警告",JOptionPane.ERROR_MESSAGE);
}
}
§5.2管理员模块的功能模块分析及代码讲解
5.2.1功能模块和功能概要
管理员模块,主要用于管理整个银行系统,主要分为开户、销户和查询三个小模块,其中开户模块首先要求管理员输入将要开户的用户的基本信息(如姓名、居住城市等),然后系统将自动为客户生成一个唯一的卡号,一个存款账号和一个贷款账号并存入数据库中;销户模块,首先要求管理员输入将要注销的客户的卡号,然后系统如果判断出该客户的贷款金额大于存款金额则要求客户还清贷款,否则提示销户不成功;查询模块,由于此次课程设计时间有限,没有完成,本人计划在完成报告后,个人解决这个问题。
5.2.2结合源代码和操作界面详细分析
1)管理员主界面,如下图:
图10管理员界面
2)开户过程,管理员模块,三个模块中开户过程相当比较复杂,需要用户输入完整的信息,然后系统将为用户产生三个账号,一个唯一识别用户的卡号,一个存款的账号和一个贷款账号,然后将整个信息写入数据库中,整个过程如下:
图11开户界面
当用户输入完信息,并点击“确认”按钮的时候,系统将完整显示用户的信息,包括系统自动生成的三个卡号,如下图:
图12开户成功
开户过程其部分代码如下:
if(txtPwd1.getText().trim().equals(txtPwd2.getText().trim()))//判断用户两次输入的密码是否相同
{
//系统自动生成卡号、存款账号和贷款账号
DatabaseOperatemakeNum=newDatabaseOperate();
//生成以1开头的5位随机数作为卡号
intpcn=(int)(Math.random()*100)+10000;
Card_number=makeNum.CnPreclude(Integer.toString(pcn));
ID[0]=Card_number;
//生成以2开头的3位随机数作为存款账号
intpan=(int)(Math.random()*100)+200;
Account_number=makeNum.depositorNum(Integer.toString(pan));
ID[1]=Account_number;
//生成以3开头的3位随机数作为贷款账号
intpln=(int)(Math.random()*100)+300;
Loan_number=makeNum.borrowerNum(Integer.toString(pln));
ID[2]=Loan_number;
//将生成的卡号以及用户输入的信息写入数据库中
info[0]=customer_name.getText().trim();
info[1]=customer_city.getText().trim();
info[2]=customer_street.getText().trim();
info[3]=Card_style;
info[4]=Credit;
info[5]=txtPwd1.getText().trim();
Balance=balance.getText().trim();
DatabaseOperateinsertTable=newDatabaseOperate();
StringsqlLogin="insertintologin(customer_name,card_style,card_number,password)"+"values('"+info[0]+"','"+info[3]+"','"+ID[0]+"','"+info[5]+"')";
StringsqlAccount="insertintoaccount(account_number,branch_name,balance)"+"values('"+ID[1]+"','"+Branch_name+"','"+Balance+"')";
StringsqlBorrower="insertintoborrower(customer_name,loan_number,card_number)"+"values('"+info[0]+"','"+ID[2]+"','"+ID[0]+"')";
StringsqlCustomer="insertintocustomer(customer_name,customer_street,customer_city,credit)"+"values('"+info[0]+"','"+info[2]+"','"+info[1]+"','"+Credit+"')";
StringsqlDepositor="insertintodepositor(customer_name,account_number,card_number)"+"values('"+info[0]+"','"+ID[1]+"','"+ID[0]+"')";
StringsqlLoan="insertintoloan(loan_number,branch_name,amount)"+"values('"+ID[2]+"','"+Branch_name+"','"+0+"')";
insertTable.Insert(sqlLogin,ID,info);
insertTable.Insert(sqlAccount,ID,info);
insertTable.Insert(sqlBorrower,ID,info);
insertTable.Insert(sqlCustomer,ID,info);
insertTable.Insert(sqlDepositor,ID,info);
insertTable.Insert(sqlLoan,ID,info);
dispose();
newOpenAccountSuccess(ID,info,Balance);
}else
{
JOptionPane.showMessageDialog(null,"您再次输入的密码不一致,请重新输入!
!
");
}
此段代码,首先生成三个随机数,然后调用三个方法,分别查询数据库中三个表格,将生成随机数与数据库中已经存在的卡号进行对比,如果数据库中存在这个生成的随机数,则将该随机数加一再比较,直到找到数据库中没有的卡号为止。
3)销户过程,用户首先输入卡号并查询出账户中的余额和账户的贷款,如果账户余额大于账户贷款,则允许管理员销户;否则,提示用户还清贷款后再进行销户操作,销户界面如下图:
图13销户界面
§5.3客户模块的功能模块分析及代码讲解
5.3.1功能模块和功能概要
客户模块细分为五个小模块:
存款、取款、贷款、还贷和转账,存款、取款、转账时用户可随时点击“查询”按钮查询当前可用余额,取款时系统将判断用户的余额、用户是否可透支以及可透支额度,贷款时用户可查询当前信用额度,在输入相应信息后可计算出贷款利率,贷款时系统将根据用户的信用额度判断用户是否还可以继续贷款,转账时,系统将判断当前可用余额是否大于要转账的金额,如果余额大于要转账的金额则转账成功,否则提示用户余额不足。
5.3.2结合源代码和操作界面详细分析
1)用户主操作界面,可跳转到五个细小的模块,如下图:
图14主操作界面
2)存款模块,用户存款时可查询当前可用余额,在输入存款金额后,程序将调用更新数据库的方法,更新数据库中的信息,其界面如下:
图15存款界面
3)取款模块,取款时用户可随时查询当前可用余额,如果用户输入的要取款的金额大于当前可用余额(用户存款金额与可透支金额之和),则允许用户取款,并打印取款凭条,如下图;
图16取款成功
否则,则弹出警告,提示用户取款失败,原因是由于用户余额不足或者透支金额不足,如下图:
图17取款失败
4)贷款模块,用户可查询其当前信息额度,在输入贷款金额与时间后可计算贷款年利率,然后用户判断是否允许用户贷款,如下图:
图18贷款界面
5)还贷模块,还贷时,用户首先需要查询要还贷的金额,然后还清贷款,系统将自动更新数据库,将用户贷款清零,如下图:
图19还贷界面
6)转账模块,转账之前用户可查询当前可用余额,在输入对方账号和转账金额确认后,如果余额充足,则转账成功,如下图:
图20转账成功
如果余额不足,则弹出警告,提示用户卡上余额不足,如下图:
图21转账失败
转账模块,系统首先判