数据库课程设计 银行储蓄管理系统.docx
《数据库课程设计 银行储蓄管理系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计 银行储蓄管理系统.docx(23页珍藏版)》请在冰点文库上搜索。
数据库课程设计银行储蓄管理系统
《数据库系统概论》
课程设计报告
设计题目:
银行储蓄管理系统
姓名:
学号:
班级:
设计起止时间:
需求分析:
在对软件工程相关知识学习之后,我们对设计软件有了基本的认识和一些应用技能。
在数据库的课程设计中,我们计划做一个小型的银行储蓄管理系统,包括了基本的存取转,和管理员对日常工作的管理功能。
功能设计:
(1).客户:
包括存款,取款,转账,查询余额,查看流水,密码修改功能
(2).管理员:
新增用户,删除用户,查看用户,员工绩效,VIP用户判别,储备金预警分析。
3.功能流程图:
详细设计:
1.E-R图模型
2.根据E-R图设计关系表
(1).银行信息表(bank)
字段名
字段类型及长度
允许空
主键
说明
Bid
nchar(9)
no
PK
银行号
Bname
nchar(20)
no
银行名
Bmoney
numeric(20,3)
no
银行余额
(2).客户信息表(custom)
字段名
字段类型及长度
允许空
主键
说明
Cid
nchar(9)
no
PK
客户ID
Cname
nchar(10)
no
客户姓名
Cpass
nchar(10)
no
密码
Ctime
nchar(20)
no
注册时间
Bid
nchar(9)
no
所在银行行号
外码(Bank(Bid))
Crmoney
numeric(10,3)
no
账户余额
Cphone
nchar(11)
no
客户电话
(3).员工(管理员)表(staff)
字段名
字段类型及长度
允许空
主键
说明
Sid
nchar(9)
no
PK
员工ID
Sname
nchar(10)
no
员工姓名
Spass
nchar(10)
no
登陆密码
SItime
nchar(20)
no
入行时间
Sphone
nchar(11)
no
联系电话
(4).流水信息表
字段名
字段类型及长度
允许空
主键
说明
Oid
nchar(9)
no
PK
流水号
Cid
nchar(9)
no
客户ID外码(Custom(Cid))
Bid
nchar(9)
no
银行ID外码(Bank(Bid))
Sid
nchar(9)
no
员工ID外码(Staff(Sid))
Otype
smallint
no
操作类型
Otime
nchar(20)
no
操作时间
Omoney
numeric(10,3)
yes
交易金额
OBmoney
numeric(10,3)
yes
上次余额
OAmoney
numeric(10,3)
yes
账户余额
三个实体:
bank,staff,custom
一个联系:
operate
关系图:
SQL语句:
/*建表*/
createtableBank
(Bidnchar(9)primarykey,
Bnamenchar(20)notnull,
Bmoneynumeric(20,3)notnull
)
createtableCustom
(Cidnchar(9)notnull,
Cnamenchar(10)notnull,
Cpassnchar(10)notnull,
Ctypesmallintnotnull,
Ctimenchar(20)notnull,
Ccodenchar(18)notnull,
Bidnchar(9)notnull,
Crmoneynumeric(10,3)notnull,
Cphonenchar(11)notnull,
primarykey(Cid),
foreignkey(Bid)referencesBank(Bid)/*在客户表中以Bank表的主码作为一个外键,并对他进行级联更新*/
onupdatecascade,
)
createtableStaff
(Sidnchar(9)primarykey,/*在列级定义主码*/
Snamenchar(10)notnull,
Spassnchar(10)notnull,
SItimenchar(20)notnull,
Sphonenchar(11)notnull
)
createtableOperate
(Oidnchar(9)notnull,
Cidnchar(9)notnull,
Bidnchar(9)notnull,
Sidnchar(9)notnull,
Otypenchar(10)notnull,
Otimenchar(20)notnull,
Oflagsmallintnotnull,
Omoneynumeric(10,3),
OBmoneynumeric(10,3),
OAmoneynumeric(10,3),
primarykey(Oid,Cid,Sid),
foreignkey(Cid)referencesCustom(Cid)/*以用户表主码为一个外键,进行级联删除*/
ondeletecascade,
foreignkey(Sid)referencesStaff(Sid)/*以员工表的主码作为外键,当删除引起冲突的时候,拒绝删除*/
ondeletenoaction,
foreignkey(Bid)referencesBank(Bid)
onupdatecascade
)
insertintoBankvalues('00001','中国银行小寨分行',10000)
updateBanksetBname='中国银行经开分行'whereBid='00002'
select*fromBank;
deletefromBankwhereBid='1'orBid='2';
insertintoCustomvalues('6505001','花花','111',0,'2012/12/10/08:
26:
00','610424199310100002','00001','1500','14345678912')
insertintoStaffvalues('7985000','自助服务','111','2002/01/07','12331654613')
deletefromCustomwhereBid='2';
insertintoOperatevalues('2406002','6505001','00001','7985001','哈哈','2012年12月18日14时12分',0,0,2900,2900)
insertintoOperatevalues('2406005','6505007','00001','7985001','嘿嘿','2012年12月18日14时12分',0,0,2900,2900)
select*fromCustom;
select*fromOperate;
select*fromStaff;
select*fromBank;
deletefromOperate
droptableCustom
droptableBank
droptableStaff;
droptableOperate;
select*fromBank;
deletefromOperatewhereOid='6505001'
dropviewBMoney;
createviewBMoney
as
selectOmoney
fromOperate
whereOflag=0andOmoney>2000andOtype='取款';
createviewBInMoney
as
fromOperate
whereOflag=0andOmoney>2000andOtype='存款';
createviewVIP
as
selectCtype
fromCustom
whereCtype=1;
selectcount(*)fromBMoney;
selectcount(*)fromBInMoney;
selectcount(*)fromVIP;
updateBanksetBmoney='10000'whereBid='00001';
updateBanksetBmoney='+bmoney'whereBid='"+Bid+"'";
updateBanksetBmoney='10200.000000'whereBid='00001'
程序代码:
客户部分:
a.voidCClientDlg:
:
OnButtonIn()//存款函数
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CInDlgInDlg;
if(InDlg.DoModal()==IDOK)
{doubletemp,temp1;
ADOConnado;
CStringsql="select*fromCustomwhereCname='"+Cname+"'";
_RecordsetPtrResultSet=ado.GetRecordSet((_bstr_t)sql);
CStringstr=(LPCTSTR)(_bstr_t)ResultSet->GetCollect("Crmoney");
CStringbid=(LPCTSTR)(_bstr_t)ResultSet->GetCollect("Bid");
CStringstr4=(LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cid");
CStringstr2=str;//将交易前钱数暂存
temp=atof(str);
temp1=(double)InDlg.m_InNum;
temp+=temp1;
str.Format("%f",temp);
CStringstr3=str;//暂存交易后金额
sql="updateCustomsetCrmoney='"+str+"'"+"whereCname='"+Cname+"'";
ado.ExecuteSQL((_bstr_t)sql);
sql="selectcount(*)numfromOperate";
ResultSet=ado.GetRecordSet((_bstr_t)sql);
intnum=atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("num"));
str="240600";CStringOid,Cid,Sid,Bid,Otime,Omoney,OAmoney,OBmoney;
Oid.Format("%d",++num);Oid=str+Oid;
Sid="7985001";Bid=bid;doubletemp2;
sql="select*fromBankwhereBid='"+Bid+"'";
ResultSet=ado.GetRecordSet((_bstr_t)sql);
CStringbmoney=(LPCTSTR)(_bstr_t)ResultSet->GetCollect("Bmoney");
temp2=atof(bmoney);temp2+=temp1;bmoney.Format("%f",temp2);
sql="updateBanksetBmoney='"+bmoney+"'whereBid='"+Bid+"'";
ado.ExecuteSQL((_bstr_t)sql);
CStringOtype="存款";CStringm_time;CTimetime;
time=CTime:
:
GetCurrentTime();
m_time=time.Format("%Y年%m月%d日%X");Otime=m_time;intflag=0;
Omoney.Format("%f",temp1);OAmoney=str2;OBmoney=str3;
sql.Format("insertintoOperatevalues('%s','%s','%s','%s','%s','%s',%d,%s,%s,%s)",Oid,str4,Bid,Sid,Otype,m_time,flag,Omoney,OAmoney,OBmoney);ado.ExecuteSQL((_bstr_t)sql);ado.ExitConnect();}}
b.voidCClientDlg:
:
OnButtonGet()//取款函数
{//TODO:
Addyourcontrolnotificationhandlercodehere
CGetDlgGetDlg;;
if(GetDlg.DoModal()==IDOK)
{doubletemp,temp1;
ADOConnado;
CStringsql="select*fromCustomwhereCname='"+Cname+"'";
_RecordsetPtrResultSet=ado.GetRecordSet((_bstr_t)sql);
CStringstr=(LPCTSTR)(_bstr_t)ResultSet->GetCollect("Crmoney");
CStringbid=(LPCTSTR)(_bstr_t)ResultSet->GetCollect("Bid");
CStringstr4=(LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cid");CStringstr2=str;//将交易前钱数暂存temp=atof(str);
temp1=(double)GetDlg.m_GetNum;
if(temp>temp1)
{temp-=temp1;str.Format("%f",temp);CStringstr3=str;//暂存交易后金额
sql="updateCustomsetCrmoney='"+str+"'"+"whereCname='"+Cname+"'";
ado.ExecuteSQL((_bstr_t)sql);
sql="selectcount(*)numfromOperate";
ResultSet=ado.GetRecordSet((_bstr_t)sql)intnum=atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("num"));
str="240600";
CStringOid,Cid,Sid,Bid,Otime,Omoney,OAmoney,OBmoney;
Oid.Format("%d",++num);
Oid=str+Oid;Sid="7985001"Bid=bid;doubletemp2;
sql="select*fromBankwhereBid='"+Bid+"'";
ResultSet=ado.GetRecordSet((_bstr_t)sql);
CStringbmoney=(LPCTSTR)(_bstr_t)ResultSet->GetCollect("Bmoney");
temp2=atof(bmoney);temp2-=temp1;
bmoney.Format("%f",temp2);
sql="updateBanksetBmoney='"+bmoney+"'whereBid='"+Bid+"'";
ado.ExecuteSQL((_bstr_t)sql);
CStringOtype="取款";CStringm_time;CTimetime;
time=CTime:
:
GetCurrentTime();
m_time=time.Format("%Y年%m月%d日%X");
Otime=m_time;intflag=0;
Omoney.Format("%f",temp1);OAmoney=str2;
OBmoney=str3;sql.Format("insertintoOperatevalues('%s','%s','%s','%s','%s','%s',%d,%s,%s,%s)",Oid,str4,Bid,Sid,Otype,m_time,flag,Omoney,OAmoney,OBmoney);ado.ExecuteSQL((_bstr_t)sql);
ado.ExitConnect();}else{AfxMessageBox("账户余额不足!
");}}}
c.voidCClientDlg:
:
OnButtonTurn()
{/TODO:
Addyourcontrolnotificationhandlercodehere
CTurnDlgTurnDlg;
if(TurnDlg.DoModal()==IDOK)
{ADOConnado;
CStringsql="select*fromCustom";
_RecordsetPtrResultSet=ado.GetRecordSet((_bstr_t)sql);
intflag=0;
while(!
ResultSet->adoEOF)
CStringTCusId=(LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cid");
CStringTCusMon=(LPCTSTR)(_bstr_t)ResultSet->GetCollect("Crmoney");//收钱客户在操作前的余额
CStringstr5=TCusMon;TCusId.Remove('');
if(TCusId==TurnDlg.m_TurnId)
{doubletemp,temp1;
sql="select*fromCustomwhereCname='"+Cname+"'";
ResultSet=ado.GetRecordSet((_bstr_t)sql);
CStringstr=(LPCTSTR)(_bstr_t)ResultSet->GetCollect("Crmoney");
CStringbid=(LPCTSTR)(_bstr_t)ResultSet->GetCollect("Bid");
CStringstr4=(LPCTSTR)(_bstr_t)ResultSet->GetCollect("Cid");
CStringstr2=str;//将交易前钱数暂存temp=atof(str);
temp1=(double)TurnDlg.m_TurnNum;if(temp>temp1)
{flag=1;
temp-=temp1;//住客户钱数减少str.Format("%f",temp);
CStringstr3=str;//暂存交易后金额
sql="updateCustomsetCrmoney='"+str+"'"+"whereCname='"+Cname+"'";
do.ExecuteSQL((_bstr_t)sql);temp=atof(TCusMon);//收钱客户钱数增加temp+=temp1;
TCusMon.Format("%f",temp);sql="updateCustomsetCrmoney='"+TCusMon+"'"+"whereCid='"+TCusId+"'";
ado.ExecuteSQL((_bstr_t)sql);sql="selectcount(*)numfromOperate";
ResultSet=ado.GetRecordSet((_bstr_t)sql);
intnum=atoi((LPCTSTR)(_bstr_t)ResultSet->GetCollect("num"));
str="240600";CStringOid,Cid,Sid,Bid,Otime,Omoney,OAmoney,OBmoney;
intOtype;Oid.Format("%d",++num);Oid=str+Oid;
Sid="7985001";Bid=bid;Otype=2;CStringm_time;CTimetime;
time=CTime:
:
GetCurrentTime();m_time=time.Format("%Y年%m月%d日%X");Otime=m_time;Omoney.Format("%f",temp1);
OAmoney=str2;OBmoney=str3;
sql.Format("insertintoOperatevalues('%s','%s','%s','%s',%d,'%s',%s,%s,%s)",Oid,str4,Bid,Sid,Otype,m_time,Omoney,OAmoney,OBmoney);ado.ExecuteSQL((_bstr_t)sql);
sql.Format("insertintoOperatevalues('%s','%s','%s','%s',%d,'%s',%s,%s,%s)",TCusId,str4,Bid,Sid,Otype,m_time,Om