数据库大作业一卡通课程设计.docx

上传人:b****6 文档编号:6553253 上传时间:2023-01-07 格式:DOCX 页数:17 大小:30.82KB
下载 相关 举报
数据库大作业一卡通课程设计.docx_第1页
第1页 / 共17页
数据库大作业一卡通课程设计.docx_第2页
第2页 / 共17页
数据库大作业一卡通课程设计.docx_第3页
第3页 / 共17页
数据库大作业一卡通课程设计.docx_第4页
第4页 / 共17页
数据库大作业一卡通课程设计.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

数据库大作业一卡通课程设计.docx

《数据库大作业一卡通课程设计.docx》由会员分享,可在线阅读,更多相关《数据库大作业一卡通课程设计.docx(17页珍藏版)》请在冰豆网上搜索。

数据库大作业一卡通课程设计.docx

数据库大作业一卡通课程设计

数据库应用大作业

实验报告

课程名称:

Oracle数据库试验

实验项目:

校园一卡通的设计与实现

姓名:

任秀虎

学号:

13101192

班级:

软件开发技术

校园一卡通的设计与实现

一、引言:

1.1背景

一卡通网校园一卡通系统是数字化校园的基础工程,是数字化校园中有机的、重要的组成部分。

为数字化校园提供了全面的数据采集平台,结合学校的管理信息系统和网络,形成全校范围的数字空间和共享环境。

为学校管理人员提供具有开放性、灵活性、面向学校的应用服务管理平台、是管理科学化的必要前提和基本途径。

以校园一卡通系统为平台,实现以人为本,并可充分利用银行的金融服务,实现“一卡在手,走遍校园”,必将满足学校数字化建设的需求及目的。

1.2简要需求说明

有多个校区,每个校区都有自己独立的服务器,校区间通过宽带连接,校园卡在校区间可通用,前提是服务器之间数据要同步。

针对学校的实际情况,校园一卡通可以实现以下几个方面的功能:

1 电子钱包功能:

校区内的所有的食堂,都可以使用一卡通进行交易。

2 管理(身份识别)功能:

校内使用的各种证卡均可由校园一卡通代替,实现图书馆、电子阅览室、学生公寓、考勤的身份识别一卡通。

实现校内所有重要场所的出入门禁管理。

3 .金融功能:

学生可以使用与校园卡关联的银行卡进行存取款、转账结算等金融业务

1.3系统需求:

中心数据库:

oracle11g

操作系统:

Windowsxp,Linux

内存要求:

不小于2G

交换空间:

不小于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

D:

\ORACLE\ORADATA\ORCL\CONTROL02.CTL

D:

\ORACLE\ORADATA\ORCL\CONTROL03.CTL

2.3数据库重做日志文件配置:

D:

\ORACLE\ORADATA\ORCL\REDO01.LOG

D:

\ORACLE\ORADATA\ORCL\REDO02.LOG

D:

\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

信息卡号

储蓄卡号

储蓄密码

储蓄折号

转账金额

身份证号

仅用来作为一卡通用户进行转账时的用户安全验证

Createtablesave_money

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,

P_show_messageOUTvarchar2

)returnboolean

Is

V_bank_moneynumber(10,2);

Begin

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,'yyyy-mm-dd

   hh:

mi:

ss'),0,p_posid);

P_show_message='用户'||p_userid||‘转账成功!

’;

Returntrue;

Else

P_show_message='用户'||p_userid||‘转账失败!

’;

Retrunfalse;

Endif

Else

P_show_message=‘输入金额非法!

’;

Returnfalse;

Endif

EndFun_hand_tansfer

自动充值存储过程:

Proc_auto_transfer

CreateorreplaceprocedureProc_auto_transfer

Is

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!

=0then

Updateinfo_card----更新一卡通信息表

Setcard_leftmoney=card_leftmoney+v_money

Wherecard_num=v_user_id;

Insertintosave_money-----记录转账信息

Values(v_user_id,v_money,to_char(sysdate,'yyyy-mm-ddhh:

mi:

ss'),0,'0000');

Endif

Fetchauto_transfer_cursorintov_user_id,v_money;

Endloop;

Closeauto_transfer_cursor;

Commit;

EndProc_auto_transfer

银行卡接口函数:

Fun_bank_interface

CreateorreplacefunctionFun_bank_interface

(p_tansfer_numINnumber,

P_tansfer_accountidINvarchar2,

P_tansfer_accountpasswordINvarchar2,

P_show_messageOUTvarchar2

)returnnumber

Is

V_moneynumber(10,2);

Begin

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

AndP_tansfer_accountpassword=bank_account_bankpassword;

Update

P_show_message='转账成功!

';

Returnp_tansfer_num;

Else

P_show_message=‘转账失败!

’;

Return0;

Endif

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,

P_show_messageOUTvarchar2

)returnboolean

Is

V_leftmoneynumber(10,2);

Begin

Selectcard_leftmoney

Intov_leftmoney

Frominfo_card

Wherecard_num=p_user_id;

Ifv_leftmoney>p_consume_moneythen

Updateinfo_card

Setcard_leftmoney=card_leftmoney-p_consume_money

Wherecard_num=p_user_id;

Insertintoconsume_info

Values(p_user_id,p_consume_money,to_char(sysdate,'yyyy-mm-dd

hh:

mi:

ss'),p_terminal_id);

P_show_message='用户'||p_user_id||'消费成功!

';

Returntrue;

Else

P_show_message=‘用户’||p_user_id||'消费失败!

';

Returnfalse;

Endi

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

当前位置:首页 > 党团工作 > 思想汇报心得体会

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

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