影碟出租管理系统Word文档格式.docx
《影碟出租管理系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《影碟出租管理系统Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
◆租借信息:
包括影碟编号、借出日期、应还日期、押金、租金、罚金;
◆出租影片信息:
日期、租出影片、租金。
图2
影碟出租管理系统功能模块关系图
2.2数据库概念结构设计
得到上面得数据项和数据结构以后,就可以设计出能够满足用户需求的各种实体以及他们之间的关系为以后的逻辑结构打下基础
根据设计规划出实体集有:
影片信息实体、用户信息实体、租借信息实体、出租影片信息实体,各实体的具体描述ER图如下:
图3
ER图
2.3数据逻辑结构设计
基于上面实体之间的关系,即可形成数据库中的表之间的关系。
数据逻辑结构设计就是把数据库概念结构转化为具体的DBMS(SQL2000)数据库所支持的实际数据模型。
影碟管理系统数据库中的各个表格的设计结果如下面的表格所示:
表2.3.1影碟信息Vedioinfo
列名
数据类型
是否为空
说明
Discid
Char(8)
NO
影碟编号(主键)
Discname
Char(30)
YES
影碟名称
Number
int
张数
Star
演员
Duydata
datetime
日期
Price
real
价格
Ibstract
Char(50)
表2.3.2
用户信息表Userinfo
Id
用户编号(主键)
Name
用户姓名
Register
注册时间
Deposit
月金
Phone
Char(12)
电话
Returndata
到期日期
表2.3.3出租信息表Returned
影碟信息(主键)
Loandate
借出日期
Returndate
应还日期
Char(10)
押金
Hire
租金
Fine
罚金
3数据库的实现
4、应用程序的设计
4.1登录窗口设计
4.1.1用户登陆窗口设计
登录窗口的创建创建是依次单击FILE---NEW---WINDOWS,然后命名为w_login,(其他窗口创建类似,故不再累述)
在上图“确定”按钮的clicked事件中写入
stringpassword,is_password
password=sle_1.text
ifddlb_1.text="
"
then
messagebox("
提示"
"
请选择操作级别"
)
return
endif
selectpassword
into:
is_password
fromispassword
wherename=:
ddlb_1.text;
ifpassword=is_passwordthen
open(w_main)
ifddlb_1.text="
高级管理员"
m_main.m_影碟管理.m_修改口令.enabled=enabled
endif
close(w_login)
else
警告"
口令有误,请重新输入"
sle_1.text="
在上图“取消”按钮的clicked事件中写入(其他的“取消”事件都是关闭窗口,故不再累述)
close(parent)
4.1.2口令修改窗口设计
创建“修改密码”窗口并布局好控件后,在上图“确定”按钮的clicked事件中写入
stringis_password
ifis_password=sle_old.textthen
ifsle_new.text=sle_new2.textthen
updateispassword
setpassword=:
sle_new.text
wherename=:
修改成功!
sle_old.text="
sle_new.text="
sle_new2.text="
else
两次输入新口令不一样"
endif
原口令错误"
在“取消”按钮写入(即将表单清空,类似功能不在累述)
sle_old.text="
sle_new.text="
sle_new2.text="
4.2主窗口设计
4.2.1菜单设计
登录窗口的创建创建是依次单击FILE---NEW---PBObject---MENU,然后命名为m_main,
如图所示,创建相应的菜单。
如果向实现某一菜单的功能(即跳转到相应的页面),则在clicked事件中写入
opensheet(w_add,w_main,6,original!
4.2.2应用程序主窗口设计
新建一窗口后,将菜单m_main添加进来即可。
4.3影碟管理模块设计
4.3.1影碟入库窗口设计
创建“新片入库”窗口并布局好控件后,在上图“确定”按钮的clicked事件中写入
intis_number
doubleis_max,is_discid,ll_id
stringis_name,is_star
dateis_duydate
doubleis_price
ll_id=double(em_discid.text)
selectdiscid
is_discid
fromVideoinfo
wherediscid=:
ll_id;
ifem_discid.text="
请输入编号"
em_discid.setfocus()
ifis_discid<
>
0then
编号重复,请重新输入"
is_name=sle_name.text
ifis_name="
请输入影碟名称"
sle_name.setfocus()
is_number=integer(em_number.text)
ifis_number=0then
请输入影片的盘数信息"
em_number.setfocus()
ifsle_star.text="
请输入主演信息"
sle_star.setfocus()
is_star=sle_star.text
ifisdate(em_date.text)then
is_duydate=date(em_date.text)
请输入正确的日期格式"
em_date.setfocus()
ifem_price.text="
请输入价格"
is_price=double(em_price.text)
insertintoVideoinfo
(discid,
discname,number,star,duydate,price,ibstract)
values
(:
ll_id,:
is_name,:
is_number,:
is_star,:
is_duydate,:
is_price,:
mle_ibstract.text)
commit;
ifSQLCA.sqlcode<
rollback;
commit;
messagebox("
影片已经添加!
sle_name.text="
sle_star.text="
mle_ibstract.text="
em_discid.text=string(ll_id+1)
4.3.2影片预览窗口设计
此功能直接用按片名查询窗口来实现,故在此不累述。
4.3.3旧片删除窗口设计
创建“旧片删除”窗口并布局好控件后,在上图“删除”按钮的clicked事件中写入
dw_1.deleterow(dw_1.getrow())
在上图“修改”按钮的clicked事件中写入
dw_1.update()
4.4影碟租借模块设计
4.4.1租借影碟窗口设计
创建“影碟租借”窗口并布局好控件后,在上图“租借”按钮的clicked事件中写入
intis_times
stringis_id,is_discid
is_id=sle_1.text
ifis_id="
请用户编号!
sle_1.setfocus()
is_discid=sle_2.text
ifis_discid="
请影碟编号!
sle_2.setfocus()
is_times=integer(sle_3.text)
ifsle_3.text="
请租借天数!
sle_3.setfocus()
insertintoLends
(Id,
Discid,
Times)
Values
(:
is_id,
:
is_discid,
:
is_times)
租借信息输入数据库中"
sle_1.text="
sle_2.text="
sle_3.text="
4.4.2归还影碟窗口设计
在“影碟租借”窗口跳到“影碟归还”,在上图“确定”按钮的clicked事件中写入(显示该用户的租借信息)
stringis_id
longrow,row_count
is_id=sle_4.text
请输入用户编号"
dw_1.setfilter("
Id='
+is_id+"
'
dw_1.filter()
dw_1.retrieve()
row_count=dw_1.rowcount()
ifrow_count<
1then
对不起,暂无此用户"
在上图“归还”按钮的clicked事件中写入
intnow_row,ret
now_row=dw_1.getrow()
dw_1.deleterow(now_row)
ret=messagebox("
确定要归还?
question!
yesno!
2)
ifret=2then
dw_1.retrieve()
dw_1.update()
4.5查询模块设计
4.5.1按片名查询窗口设计
创建“按片名查询”窗口并布局好控件后,在上图“查询”按钮的clicked事件中写入
stringlp_name
lp_name=sle_name.text
Discname='
+lp_name+"
对不起暂无此影片"
4.5.2按主演查询窗口设计
“按主演查询”与“按片名查询”实现方式相同,故在此不再累述。
4.5.3按日期查询窗口设计
“按时间查询”与“按片名查询”实现方式相同,故在此不再累述。
(注:
PB和SQL2000Datatime类型不匹配)
4.6月租管理管理模块设计
4.6.1登记月租用户窗口设计
创建“月租用户登记”窗口并布局好控件后,在上图“查询”按钮的clicked事件中写入
stringis_id,is_name,is_phone,lid
dateis_startdate,is_enddate
intis_deposit
is_id=em_id.text
select
Id
lid
fromUserinfo
whereid=:
is_id;
ifem_id.text="
orlid<
em_id.setfocus()
ifsle_name.text="
orisnull(sle_name.text)then
请输入用户姓名"
ifsle_phone.text="
orisnull(sle_phone.text)then
请输入联系电话"
sle_phone.setfocus()
is_phone=sle_phone.text
ifem_deposit.text="
orisnull(em_deposit.text)then
请输入押金"
em_deposit.setfocus()
is_deposit=integer(em_deposit.text)
ifisdate(sle_date.text)then
is_startdate=date(sle_date.text)
请输入日期"
sle_date.setfocus()
is_enddate=date(year(is_startdate),month(is_startdate)+1,day(is_startdate))
insertintoUserinfo
Name,
Phone,
Register,
Deposit,
Returndate,
Number)
VALUES(
is_name,
is_phone,
is_startdate,
is_deposit,
is_enddate,
0);
em_id.text=string(integer(is_id)+1)
sle_phone.text="
sle_name.setfocus()
4.6.2删除月租用户窗口设计
创建“修改月租用户”窗口并布局好控件后,在上图“删除”按钮的clicked事件中写入
是否要删除"
是否修改"
ifret=1then
5编译和发布
完成以上设计和实施后,在数据库中装载一定量的数据,然后最终对整个程序运行一遍。
单击FILE---NEW---PROJECT---APPLICATIONWIZARD,然后按期默认就可以创建可执行文件了。
你还可以桌面创建一个快键方式,并改变成你想要的图标(如下图所示)。
6.总结和收获
1.由于加入软件学院冰峰工作室,未能按正常安排时间上机,在此向老师表示歉意。
但此次课程设计都是我利用课下时间自己独立完成,并没有因为时间紧而放低要求。
2.权限管理。
数据库用SQL2000实现,但未对其用户权限做过多设置,而是通过菜单来实现。
当以高级管理员身份登录时,其拥有全部的权限,所以菜单上的功能使对其可用的。
当以普通用户身份登录时,则某些菜单功能对其隐藏,通过这可以实现权限管理。
3.数据类型不匹配。
SQL2000中Datatime与PB中不匹配,参阅相关的资料仍无法解决,所以有关Datatime变量未实现。
同时由于原例中租借管理功能未详细讲解实现过程,此版本为自己设计的实现。