信息080108112黄露银行储蓄管理数据库课程设计.docx

上传人:b****7 文档编号:9409436 上传时间:2023-02-04 格式:DOCX 页数:26 大小:81.39KB
下载 相关 举报
信息080108112黄露银行储蓄管理数据库课程设计.docx_第1页
第1页 / 共26页
信息080108112黄露银行储蓄管理数据库课程设计.docx_第2页
第2页 / 共26页
信息080108112黄露银行储蓄管理数据库课程设计.docx_第3页
第3页 / 共26页
信息080108112黄露银行储蓄管理数据库课程设计.docx_第4页
第4页 / 共26页
信息080108112黄露银行储蓄管理数据库课程设计.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

信息080108112黄露银行储蓄管理数据库课程设计.docx

《信息080108112黄露银行储蓄管理数据库课程设计.docx》由会员分享,可在线阅读,更多相关《信息080108112黄露银行储蓄管理数据库课程设计.docx(26页珍藏版)》请在冰豆网上搜索。

信息080108112黄露银行储蓄管理数据库课程设计.docx

信息080108112黄露银行储蓄管理数据库课程设计

 

《数据库原理及应用》课程设计报告

 

专业:

信息管理与信息系统

班级:

信息0801

学号:

081204112

姓名:

黄露

题目名称:

银行储蓄业务管理系统

完成日期:

2011.3.11

 

一、系统定义…………………………………………………..3

二、需求分析…………………………………………………..3

(一)系统综合需求

(二)系统逻辑模型

1.数据流图:

2.数据字典

三、系统设计…………………………………………………...5

(一)概念结构设计

E-R图:

(二)逻辑结构设计

四、详细设计……………………………………………………6

(一)开发平台及工具

(二)数据库分析

五、源程序清单……………………………………………13

六、设计心得…………………………………………………………18

 

一、系统定义:

银行是一个国家正常运转必不可缺的机构,当今社会,几乎是每个人都会涉及到储蓄业务,为此,为方便用户查询和使用各种业务,可用计算机为工具对查询管理为一体的各种服务。

当然,这样的一个银行储蓄业务系统就应运而生了。

本系统是一个简单的储蓄系统,可以对储户的信息进行查询修改以及删除。

二、需求分析:

(一)系统综合需求

本系统是银行用户的存取款系统。

主要功能是管理各个用户存取款的相关数据。

储户填写的存款单或取款单输入系统,如果是存款,则系统记录存款人姓名,住址(或电话号码),身份证号码,存款类型,存款金额,存款日期等信息,并打印存单给储户;如果是取款,则需要输入帐号、取款金额等信息,核对正确后系统打印出清单给储户。

(二)系统逻辑模型

1.数据流图:

图1-1系统数据流图

2.数据字典

数据名字:

注册申请表

数据来源:

储户

数据目的:

储户信息

数据组成:

姓名+密码+住址+身份证号码

 

数据名字:

储户信息表

数据来源:

储户

数据目的:

身份验证

数据组成:

姓名+密码+住址+身份证号码+现有金额

 

数据名字:

利息清单

数据来源:

系统

数据目的:

储户

数据组成:

利息+姓名+取款时间

 

数据名字:

存单

数据来源:

存款信息表

数据目的:

储户

数据组成:

姓名+到期时间+存入类型+存入时间+利率+存入金额

 

数据名字:

取款单

数据来源:

储户

数据目的:

储户信息表

数据组成:

姓名+到期时间+存入类型+存入时间+利率+取款金额+身份证号

 

数据名字:

存款单

数据来源:

储户

数据目的:

存款信息表

数据组成:

姓名+到期时间+存入类型+存入时间+利率+存入金额+身份证号

 

表1.1系统数据字典

三、系统设计:

(一)概念结构设计

E-R图:

(二)逻辑结构设计

四、详细设计

(一)开发平台及工具

●开发工具MicrosoftVisualC++6.0

●DBMS:

MicrosoftSQLServer2000

●建模工具:

MicrosoftVisio,word编辑器

说明:

为了方便的实现系统以及个人熟悉程度的因素,选择了VC++6.0的开发平台。

在Windows平台上我们所学过的就只有MSSQLServer了,所以采用SQLServer2000来进行开发。

(二)银行储蓄业务数据库分析

1)本系统由三张表组成,具体如下:

表名

属性(字段)名

储户表

账号、身份证号、姓名、性别、身高、地址、存款余额

存款单表

存款单号、金额、存款方式、账号、存款日期

取款单表

取款单号、金额、取款方式、账号、取款日期

系统表基本信息

2)表间关系如下:

一个存款单或取款单属于一个用户,一个用户可以拥有多次存款单或取款单。

用户通过存款操作与存款单建立联系,通过取款操作与取款单建立联系。

3)数据准备

前期准备工作:

以system账户登录,创建新账户

createuserdyidentifiedbylyjn;

grantdbatody;

connectdy/dy@orcl;

各个表的具体信息和创建表的代码如下:

储户表(luser)

字段(属性)含义

字段(属性)名

字段(属性)类型

账号

acnum

VARCHAR(5)

身份证号

id

NUMBER

姓名

name

VARCHAR2(20)

性别

sex

VARCHAR2

(2)

身高

height

NUMBER(3,2)

地址

address

VARCHAR2(20)

存款余额(亿)

Balance(billion)

INT

创建储户表的代码如下:

CREATETABLEluser

acnumVARCHAR2(5)NOTNULL,

idNUMBERNOTNULL,

nameVARCHAR2(20)NOTNULL,

sexVARCHAR2

(2)CHECK(sexIN('男','女')),

heightNUMBER(3,2)NOTNULL,

addressVARCHAR2(20)NOTNULL,

balanceINTNOTNULL

);

ALTERTABLEluser

添加主键约束

ADDCONSTRAINTXPKluserPRIMARYKEY(acnum);

存款单表(depositslip)

字段(属性)含义

字段(属性)名

字段(属性)类型

存款单号

dps_num

NUMBER

账号

acnum

VARCHAR2(5)

存款时间

dps_time

TIMESTAMP

金额(亿)

money

INT

存款方式

dps_way

VARCHAR2(10)

创建存款单表的代码如下:

CREATETABLEdepositslip

dps_numNUMBERNOTNULL,

moneyINTCHECK(money>=0),

dps_wayVARCHAR2(10)NOTNULL,

acnumVARCHAR2(5)NOTNULL,

dps_timeTIMESTAMPNULL

);

ALTERTABLEdepositslip

添加主键约束

ADDCONSTRAINTXPKdepositslipPRIMARYKEY(dps_num,acnum);

ALTERTABLEdepositslip

在depositslip表中的acnum字段中添加外键约束

ADD(CONSTRAINTR_5FOREIGNKEY(acnum)REFERENCESluser(acnum));

取款单表(drawslip)

字段(属性)含义

字段(属性)名

字段(属性)类型

取款单号

dw_num

NUMBER

账号

acnum

VARCHAR2(5)

取款时间

dw_time

TIMESTAMP

金额(亿)

Money

INT

取款方式

dw_way

VARCHAR2(10)

创建取款单表的代码如下:

CREATETABLEdrawslip

dw_numNUMBERNOTNULL,

moneyINTCHECK(money>=0),

dw_wayVARCHAR2(10)NOTNULL,

acnumVARCHAR2(5)NOTNULL,

dw_timeTIMESTAMPNULL

);

ALTERTABLEdrawslip

添加主键约束

ADDCONSTRAINTXPKdrawslipPRIMARYKEY(dw_num,acnum);

ALTERTABLEdrawslip

在drawslip表中的acnum字段中添加外键约束

ADD(CONSTRAINTR_6FOREIGNKEY(acnum)REFERENCESluser(acnum));

4)插入(insert)数据

1、插入储户表(luser)数据

insertintoluser(ACNUM,ID,NAME,SEX,HEIGHT,ADDRESS,BALANCE)

values('00001',3422101,'刘忠田','男',1.72,'北京市朝阳区',345);

insertintoluser(ACNUM,ID,NAME,SEX,HEIGHT,ADDRESS,BALANCE)

values('00002',3422102,'周正义','男',1.78,'天津市宝坻区',123);

insertintoluser(ACNUM,ID,NAME,SEX,HEIGHT,ADDRESS,BALANCE)

values('00003',3422103,'陈光标','男',1.80,'南京市新街口',333);

insertintoluser(ACNUM,ID,NAME,SEX,HEIGHT,ADDRESS,BALANCE)

values('00004',3422104,'张茵','女',1.65,'上海市黄浦区',234);

insertintoluser(ACNUM,ID,NAME,SEX,HEIGHT,ADDRESS,BALANCE)

values('00005',3422105,'陈丽华','女',1.70,'香港市旺角区',111);

2、插入存款单表(depositslip)数据

insertintodepositslip(DPS_NUM,ACNUM,MONEY,DPS_TIME,DPS_WAY)

values(98001,'00001',120,to_date('08-08-2009','dd-mm-yyyy'),'整存整取');

insertintodepositslip(DPS_NUM,ACNUM,MONEY,DPS_TIME,DPS_WAY)

values(98002,'00001',300,to_date('10-08-2009','dd-mm-yyyy'),'整存整取');

insertintodepositslip(DPS_NUM,ACNUM,MONEY,DPS_TIME,DPS_WAY)

values(98003,'00002',100,to_date('12-08-2009','dd-mm-yyyy'),'整存零取');

insertintodepositslip(DPS_NUM,ACNUM,MONEY,DPS_TIME,DPS_WAY)

values(98004,'00002',150,to_date('12-09-2009','dd-mm-yyyy'),'整存零取');

 

insertintodepositslip(DPS_NUM,ACNUM,MONEY,DPS_TIME,DPS_WAY)

values(98005,'00003',200,to_date('15-08-2009','dd-mm-yyyy'),'零存整取');

insertintodepositslip(DPS_NUM,ACNUM,MONEY,DPS_TIME,DPS_WAY)

values(98006,'00003',100,to_date('14-09-2009','dd-mm-yyyy'),'零存整取');

insertintodepositslip(DPS_NUM,ACNUM,MONEY,DPS_TIME,DPS_WAY)

values(98007,'00003',80,to_date('23-09-2009','dd-mm-yyyy'),'零存整取');

insertintodepositslip(DPS_NUM,ACNUM,MONEY,DPS_TIME,DPS_WAY)

values(98008,'00004',80,to_date('23-08-2009','dd-mm-yyyy'),'零存零取');

insertintodepositslip(DPS_NUM,ACNUM,MONEY,DPS_TIME,DPS_WAY)

values(98009,'00004',180,to_date('24-09-2009','dd-mm-yyyy'),'零存零取');

insertintodepositslip(DPS_NUM,ACNUM,MONEY,DPS_TIME,DPS_WAY)

values(98010,'00005',190,to_date('24-08-2009','dd-mm-yyyy'),'通知存款');

insertintodepositslip(DPS_NUM,ACNUM,MONEY,DPS_TIME,DPS_WAY)

values(98011,'00005',210,to_date('30-09-2009','dd-mm-yyyy'),'通知存款');

3、插入取款单表(drawslip)数据

insertintodrawslip(DW_NUM,ACNUM,MONEY,DW_TIME,DW_WAY)

values(52001,'00001',75,to_date('08-08-2010','dd-mm-yyyy'),'柜台');

insertintodrawslip(DW_NUM,ACNUM,MONEY,DW_TIME,DW_WAY)

values(52002,'00002',27,to_date('08-09-2010','dd-mm-yyyy'),'取款机');

 

insertintodrawslip(DW_NUM,ACNUM,MONEY,DW_TIME,DW_WAY)

values(52003,'00002',100,to_date('12-10-2010','dd-mm-yyyy'),'柜台');

insertintodrawslip(DW_NUM,ACNUM,MONEY,DW_TIME,DW_WAY)

values(52004,'00003',47,to_date('15-08-2010','dd-mm-yyyy'),'取款机');

insertintodrawslip(DW_NUM,ACNUM,MONEY,DW_TIME,DW_WAY)

values(52005,'00004',26,to_date('12-09-2010','dd-mm-yyyy'),'取款机');

insertintodrawslip(DW_NUM,ACNUM,MONEY,DW_TIME,DW_WAY)

values(52006,'00005',100,to_date('23-09-2010','dd-mm-yyyy'),'柜台');

insertintodrawslip(DW_NUM,ACNUM,MONEY,DW_TIME,DW_WAY)

values(52007,'00005',150,to_date('10-10-2010','dd-mm-yyyy'),'柜台');

insertintodrawslip(DW_NUM,ACNUM,MONEY,DW_TIME,DW_WAY)

values(52008,'00005',39,to_date('31-10-2010','dd-mm-yyyy'),'取款机');

5)索引

建立索引遵循的规律:

1.建立在where子句经常引用的列上,

2.经常需要排序的列上,

3.连接属性列上等

在存款单表的存款单号字段和账号字段建立组合索引

CREATEUNIQUEINDEXXPKdepositslipONdepositslip

(dps_numASC,acnumASC);

在存款单表的账号字段建立索引

CREATEINDEXXIF1depositslipONdepositslip

(acnumASC);

在取款单表的取款单号字段和账号字段建立组合索引

CREATEUNIQUEINDEXXPKdrawslipONdrawslip

(dw_numASC,acnumASC);

在取款单表的账号字段建立索引

CREATEINDEXXIF1drawslipONdrawslip

(acnumASC);

在储户表的账户字段上建立索引,方便查询

CREATEUNIQUEINDEXXPKluserONluser

(acnumASC);

6)触发器

1、插入存款,对应储户表的相应储户的余额(balance)增加插入记录包含的金额数(money)

CREATEORREPLACETRIGGEROperatingDps

AFTERINSERTONdepositslip

FOREACHROW

DECLARE

n_acVARCHAR2(5);

n_moINT;

BEGIN

n_ac:

=:

new.acnum;

n_mo:

=:

new.money;

updatelusersetbalance=balance+n_mowhereluser.acnum=n_ac;

ENDOperatingDps;

2、删除存款,对应储户表的相应储户的余额(balance)减去所删除记录的金额数(money)

CREATEORREPLACETRIGGEROperatingDps2

AFTERDELETEONdepositslip

FOREACHROW

DECLARE

o_acVARCHAR2(5);

o_moINT;

BEGIN

o_ac:

=:

old.acnum;

o_mo:

=:

old.money;

updatelusersetbalance=balance-o_mowhereluser.acnum=o_ac;

ENDOperatingDps2;

3、插入取款,对应储户表的相应储户的余额(balance)减少插入记录包含的金额数(money)

CREATEORREPLACETRIGGEROperatingDw

AFTERINSERTONdrawslip

FOREACHROW

DECLARE

n_acVARCHAR2(5);

n_moINT;

BEGIN

n_ac:

=:

new.acnum;

n_mo:

=:

new.money;

updatelusersetbalance=balance-n_mowhereluser.acnum=n_ac;

ENDOperatingDw;

4、删除取款,对应储户表的相应储户的余额(balance)加上所删除记录的金额数(money)

CREATEORREPLACETRIGGEROperatingDw2

AFTERDELETEONdrawslip

FOREACHROW

DECLARE

o_acVARCHAR2(5);

o_moINT;

BEGIN

o_ac:

=:

old.acnum;

o_mo:

=:

old.money;

updatelusersetbalance=balance+o_mowhereluser.acnum=o_ac;

ENDOperatingDw2;

5、插入的取款金额(money)大于对应用户的余额(balance)时,系统报错

CREATEORREPLACETRIGGEROperatingDw3

AFTERinsertONdrawslip

FOREACHROW

DECLARE

n_acVARCHAR2(5);

n_moINT;

n_baINT;

BEGIN

n_ac:

=:

new.acnum;

n_mo:

=:

new.money;

selectbalanceinton_bafromluserwhereacnum=n_ac;

ifn_mo>n_bathen

RAISE_APPLICATION_ERROR(-20000,'存款余额不足!

请重新插入存款!

');

endif;

ENDOperatingDw3;

五、源程序清单

#include

#include

#include

usingnamespacestd;

constintMax=100;

voidWait();

classUser//用户类的声明

{

public:

User()

{

CurrentAcount=0;//初始化当前的账户

}

voidResert1(User*u,doubleA)

{

u->CurrentAcount=u->CurrentAcount+A;

}

voidResert2(User*u,doubleA)

{

u->CurrentAcount=u->CurrentAcount-A;

}

char*getname()//取得用户名

{

returnname;

}

longgetNum()//取得帐户号

{

returnNum;

}

doublegetCurrentAcount()

{

returnCurrentAcount;

}

voidoutput()//输出相关信息

{

cout<<"用户名:

"<

cout<<"账号:

"<

cout<<"余额:

"<

}

voidaddUser(char*name,longNum)

{

strcpy(this->name,name);

this->Num=Num;

}

voidDeposit(User*u,doubleAcount)//存款

{

u->Resert1(u,Acount);

}

voidout(User*u,doubleacount)//取款

{

if(acount>u->getCurrentAcount())

{

cout<<"余额不足.\n";

}

else

{

cout<<"请及时取走你的钞票.\n";

u->Resert2(u,acount);

}

}

voidLocate(User*u)//查询余额

{

u->output();

}

private:

charname[20];

longNum;

doubleCurre

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

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1