数据库大作业一卡通课程设计Word格式.docx
《数据库大作业一卡通课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《数据库大作业一卡通课程设计Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
不小于8G
工作站操作系统:
Windows2000/XP等
系统容量:
系统帐户容量10万,可以扩充
子系统接入数量:
128个,可以扩充
网络设置:
根据学校建筑布局结合现有走线管道,并为安全性考虑,提供两种一卡通网络的组建方案:
(1)在现有校园主干网中分一个VLAN(虚拟局域网),将所有一卡通系统的计算机全部接入这个VLAN,以达到一卡通网络与校园网逻辑上分开互相不能访问。
(2)利用现有管道重新铺设线路并添置新的网络设置(交换机、集线器等),将一卡通系统组成一个单独的网络,这样在物理上与校园网分开。
校区互联:
应用代理服务器机制,代理服务器只接受用户的查询并转发服务器中的数据,在代理服务器上运行专用的软件,定时负责与各个校区的服务器交换数据。
例图如下:
1.4系统设计原则:
安全、可靠、高效、易扩展
1.5设计背景:
项目名称:
校园一卡通系统
用户:
大学或高级中学
1.6参考资料:
1.《oracle10g:
ProgramwithPL/SQL》
2.《数据库系统概论》
3.CSDN有关Oracle数据库资料
二、数据库的物理结构设计
2.1数据库设计:
●全局数据库名称:
orcl
●数据库字符集选择:
采用UTF8字符集
●数据库的DB_FILES设置使用默认的值200
●OLTP类型:
db_block_size用比较小的取值范围:
2048或4096
2.2数据库控制文件配置:
D:
\ORACLE\ORADATA\ORCL\CONTROL01.CTL
\ORACLE\ORADATA\ORCL\CONTROL02.CTL
\ORACLE\ORADATA\ORCL\CONTROL03.CTL
2.3数据库重做日志文件配置:
\ORACLE\ORADATA\ORCL\REDO01.LOG
\ORACLE\ORADATA\ORCL\REDO02.LOG
\ORACLE\ORADATA\ORCLREDO03.LOG
三、数据库的逻辑结构设计
3.1有关表空间的设计与实现:
1、管理员信息表:
admin_info记录系统管理者的有关信息,权限分三级,用数字1,2,3来表示,权限大小递减
用户编号
姓名
密码
权限
Createtableadmin_info
(admin_idvarchar2(20)constraintadmin_info_pkprimarykey,
admin_namevarchar2(20)notnull,
admin_passwordvarchar2(15)notnull,
admin_privilegenumber
(1)
);
2、用户信息表:
user_info记录学生用户的有关信息
信息卡号
性别
院系/部门
用户编号为学号或教职工编号
Createtableuser_info
(user_numvarchar2(20)constraintstudent_info_pkprimarykey,
user_namevarchar2(20)notnull,
user_card_idvarchar2(20)notnull,
user_sexvarchar2(4)notnull,
user_departmentvarchar2(30)notnull,
Constraintuser_info_fkforeignkey(user_card_id)
referencesuser_info(user_num)
3、一卡通信息表:
info_card记录一卡通用户的有关信息
剩余金额
密码
挂失
0表示为非挂失状态,1表示为挂失状态
Createtableinfo_card
(card_numvarchar2(20)primarykey,
card_user_idvarchar2(20),
card_leftmoneynumber(10,2),
card_passwordvarchar2(20)notnull,
card_lostednumber
(1)notnulldefault(0),
Constraintinfo_card_fkforeignkey(card_user_id)
referencesinfo_card(card_num)
4、流水帐消费记录表:
consume_info记录用户消费情况
消费金额
消费日期
终端号
Createtableconsume_info
(consume_numvarchar2(20)notnull,
consume_moneynumber(10,2)notnull,
consume_datevarchar2(20)notnull,
concume_machine_idnumber(3)notnull
5、存款/转账记录表:
save_money记录学生存款的情况
存款金额
存款日期
存款类型
操作员编号
此表记录学生存现、转账情况。
如果是转账:
存款类型为0
如果是存现:
存款类型为1
操作员编号为POS机的编号(自动编号为0000)
Createtablesave_money
(
save_user_idvarchar2(20)primarykey,
save_moneynumber(10,2)notnull,
save_datevarchar2(20)notnull,
save_typenumber
(1)notnulldefault(0),
save_operator_idvarchar2(6)notnull
6、连接银行卡和一卡通的中间记录表(银校表):
bank_campus
储蓄卡号
储蓄密码
储蓄折号
转账金额
身份证号
仅用来作为一卡通用户进行转账时的用户安全验证
bank_campus_useridvarchar2(20)primarykey,
bank_campus_banknumvarchar2(30)notnull,
bank_campus_bankpasswordvarchar2(6)notnull,
bank_campus_bankbookvarchar2(30)notnull,
Bank_campus_transfernumber(10,2)notnulldefault(50.00),
bank_campus_idcardvarchar2(20)notnull
7、假设用户在银行开的账户表如下:
bank_account
用户姓名
剩余金额
Createtablebank_account
bank_account_bankbookidvarchar2(30)primarykey,
bank_account_banknumvarchar2(30)notnull,
bank_account_bankpasswordvarchar2(6)notnull,
bank_account_namevarchar2(20)notnull,
Bank_account_leftmoneynumber(10,2)notnull,
bank_account_idcardvarchar2(20)notnull
8、退款销户记录表:
remove_user_info用于记录退款销户情况
退款金额
退款日期
操作类型
操作员
Createtableremove_user_info
remove_useridvarchar2(20)primarykey,
remove_moneynumber(10,2)notnull,
remove_datevarchar2(20)notnull,
remove_typenumber
(1)notnull,
remove_operatorvarchar2(10)notnull
);
3.2有关表索引的设计与实现:
1.对学生用户表按院系/部门建立索引:
index_student
Createindexindex_student
onuser_info(user_department);
2.对一卡通信息表的挂失字段建立索引:
index_card_lost
Createindexindex_card_lost
oninfo_card(card_losted);
3.3有关视图的设计与实现:
1、终端交易记录视图:
view_terminal_record
交易金额
Createorreplaceviewview_terminal_record
(terminal_id,terminal_trademoney,terminal_date)
As
selectconcume_machine_id,sum(consume_money),consume_date
Fromconsume_info
Whereconcume_machine_id=&
p_terminal_id
Orderbyconcume_machine_id,to_date(consume_date,'
DD-Mon-YY'
3.4PL/SQL程序实现(存储过程和函数)
在用户存在且一卡通没有挂失的条件下实现
1、存现函数:
Fun_save_money用来完成对一卡通现金的存储,存款不成功返回值为False,存现成功则返回为True
CreateorreplacefunctionFun_save_money
(
P_useridINinfo_card.Card_num%TYPE,
p_save_moneyINinfo_card.Card_leftmoney%TYPE,
P_operatoridINvarchar2,
P_show_messageOUTvarchar2
)returnboolean
Is
Begin
Ifp_save_money>
0then
Updateinfo_card
Setcard_leftmoney=card_leftmoney+p_save_money
Wherecard_num=p_userid;
Insertintosave_money
Values(p_userid,p_save_money,to_char(sysdate,'
yyyy-mm-dd
hh:
mi:
ss'
),1,p_operatorid);
P_show_message='
用户'
||p_userid||‘存现成功!
’;
Returntrue;
Else
P_show_message=‘存款金额非法!
’;
Retrunfalse;
Endif
EndFun_save_money;
2、转账函数:
Fun_hand_transfer和Proc_auto_transfer用来从银行储蓄卡里面向一卡通里充值,可以自动充值也可手动充值。
当一卡通余额不足10元时系统可以自动向一卡通充值(默认值50元,可以修改),用户也可手动用储蓄卡向一卡通充值。
手动充值函数:
Fun_hand_transfer
CreateorreplacefunctionFun_hand_transfer
(
P_posidINnumber,
p_tansfer_moneyINbank_campus.bank_campus_transfer%TYPE,
P_useridINbank_campus.bank_campus_userid%TYPE,
P_bank_account_numINbank_campus.bank_campus_banknum%TYPE,
P_bank_account_pswINbank_campus.bank_campus_bankpassword%TYPE,
)returnboolean
V_bank_moneynumber(10,2);
Ifp_tansfer_money>
0then
V_bank_money=
Fun_bank_interface(p_tansfer_money,P_bank_account_num,P_bank_account_psw);
Ifv_bank_money!
=0then
Updatetable_info_card----更新一卡通信息表
Setcard_leftmoney=card_leftmoney+v_bank_money
Wherecard_num=p_userid;
Insertintosave_money-----记录转账信息
Values(p_userid,p_tansfer_money,to_char(sysdate,'
),0,p_posid);
P_show_message='
||p_userid||‘转账成功!
Else
||p_userid||‘转账失败!
Endif
P_show_message=‘输入金额非法!
Returnfalse;
EndFun_hand_tansfer
自动充值存储过程:
Proc_auto_transfer
CreateorreplaceprocedureProc_auto_transfer
V_moneynumber(10,2);
V_addmoneynumber(10,2);
V_user_idvarchr2(20);
V_bank_cardidvarchar2(30);
V_bank_pswvarchar2(6);
Cursorauto_transfer_cursoris
Selectcard_num,card_leftmoney
Frominfo_card
Wherecard_leftmoney<
10.00
Orderbycard_leftmoney;
Begin
Openauto_transfer_cursor;
Fetchauto_transfer_cursorintov_user_id,v_money;
Whileauto_transfer_cursor%foundloop
Selectbank_campus_banknum,bank_campus_bankpassword,Bank_campus_transfe
IntoV_bank_cardid,V_bank_psw,V_addmoney
Frombank_campus
Wherebank_campus_userid=v_user_id;
V_money=Fun_bank_interface(V_addmoney,V_bank_cardid,V_bank_psw);
Ifv_money!
Updateinfo_card----更新一卡通信息表
Setcard_leftmoney=card_leftmoney+v_money
Wherecard_num=v_user_id;
Values(v_user_id,v_money,to_char(sysdate,'
yyyy-mm-ddhh:
),0,'
0000'
Endloop;
Closeauto_transfer_cursor;
Commit;
EndProc_auto_transfer
银行卡接口函数:
Fun_bank_interface
CreateorreplacefunctionFun_bank_interface
(p_tansfer_numINnumber,
P_tansfer_accountidINvarchar2,
P_tansfer_accountpasswordINvarchar2,
)returnnumber
Selectbank_account_leftmoney
Intov_money
Frombank_account
WhereP_tansfer_accountid=bank_account_banknum
AndP_tansfer_accountpassword=bank_account_bankpassword;
If(p_tansfer_num>
0andv_money-ptansfer_num>
0)then
Updatebank_account
SetBank_account_leftmoney=bank_account_leftmoney-p_tansfer_num
WhereP_tansfer_accountid=bank_account_banknum
Update
转账成功!
'
;
Returnp_tansfer_num;
P_show_message=‘转账失败!
Return0;
EndFun_bank_interface;
3、就餐消费函数:
Fun_consume
CreateorreplacefunctionFun_consume
(p_user_idINinfo_card.card_num%TYPE,
P_consume_moneyINconsume_info.consume_money%TYPE,
P_terminal_idINconsume_info.concume_machine_id%TYPE,
V_leftmoneynumber(10,2);
Selectcard_leftmoney
Intov_leftmoney
Wherecard_num=p_user_id;
Ifv_leftmoney>
p_consume_moneythen
Updateinfo_card
Setcard_leftmoney=card_leftmoney-p_consume_money
Insertintoconsume_info
Values(p_user_id,p_consume_money,to_char(sysdate,'
yyyy-mm-dd
hh:
),p_terminal_id);
P_show_message='
||p_user_id||'
消费成功!
P_show_message=‘用户’||p_user_id||'
消费失败!
Endi