影碟出租管理系统.docx
《影碟出租管理系统.docx》由会员分享,可在线阅读,更多相关《影碟出租管理系统.docx(16页珍藏版)》请在冰豆网上搜索。
影碟出租管理系统
影碟出租管理系统
影碟出租店分布在每个城市的大街小巷,虽然经营的范围相同,但是进货管道、订货、管理以及出租等方面存在着一定的差异。
在正常的运营中总是面对着大量光盘信息、租借信息、归还信息。
因此管理上纷繁复杂。
以及了解各个环节的信息变更有利于提高管理以及经营的效率。
1系统设计
1.1系统功能分析
系统开发的总体任务是实现各种信息的系统化、规范化和自动化。
系统主要功能分析是在系统开发总体任务的基础上完成的。
本实例中的影碟管理系统主要是应用在普通的影碟出租店,它需要完成以下主要功能:
★影碟管理:
包括影片入库、影片预览、旧影片删除以及用户口令的修改;
★影碟租借:
包括租借影碟、归还影碟以及浏览借出的影片;
★影碟查询:
包括按片名查询、按日期查询以及按主演查询;
★月租管理:
包括等级月租用户和查看月租用户;
★统计销量帮助
1.2功能模块设计
对上述各项功能进行集中、分块,按照结构化程序设计的要求,得到如图1所示的影碟出租管理系统功能模块图。
图1 影碟出租管理系统功能模块图。
2数据库设计
设计数据库时应该充分了解用户各个方面的需求,包括现有的以及将来可能增加的需求,数据库设计包括以下步骤:
●数据库需求分析
●数据库概念结构设计
●数据库逻辑结构设计
2.1数据库需求分析
用户需求具体体现在对各种信息的提供、保存、更新和查询,这就要求数据库结构能充分满足各种信息的输入和输出。
手机基本数据、数据结构数据处理的流程,组成一份详细的数据字典为后面的具体设计打下基础。
仔细分析调查有关影碟管理信息需求的基础上,将得到如图2的数据处理流程。
针对一般影碟管理系统的需求,并通过对影碟管理工作过程的内容和数据流程分析设计出下面的数据项和数据结构:
◆影片信息:
包括影碟编号、影碟名称、张数、演员、日期、价格及说明;
◆用户信息:
包括用户编号、用户姓名、注册时间、电话号码、月押金、罚金;
◆租借信息:
包括影碟编号、借出日期、应还日期、押金、租金、罚金;
◆出租影片信息:
日期、租出影片、租金。
图2 影碟出租管理系统功能模块关系图
2.2数据库概念结构设计
得到上面得数据项和数据结构以后,就可以设计出能够满足用户需求的各种实体以及他们之间的关系为以后的逻辑结构打下基础
根据设计规划出实体集有:
影片信息实体、用户信息实体、租借信息实体、出租影片信息实体,各实体的具体描述ER图如下:
图3 ER图
2.3数据逻辑结构设计
基于上面实体之间的关系,即可形成数据库中的表之间的关系。
数据逻辑结构设计就是把数据库概念结构转化为具体的DBMS(SQL2000)数据库所支持的实际数据模型。
影碟管理系统数据库中的各个表格的设计结果如下面的表格所示:
表2.3.1影碟信息Vedioinfo
列名
数据类型
是否为空
说明
Discid
Char(8)
NO
影碟编号(主键)
Discname
Char(30)
YES
影碟名称
Number
int
YES
张数
Star
Char(30)
YES
演员
Duydata
datetime
YES
日期
Price
real
YES
价格
Ibstract
Char(50)
YES
说明
表2.3.2 用户信息表Userinfo
列名
数据类型
是否为空
说明
Id
Char(8)
NO
用户编号(主键)
Name
Char(8)
YES
用户姓名
Register
datetime
YES
注册时间
Deposit
int
YES
月金
Number
int
YES
张数
Phone
Char(12)
YES
电话
Returndata
datetime
YES
到期日期
表2.3.3出租信息表Returned
列名
数据类型
是否为空
说明
Discid
Char(8)
NO
影碟信息(主键)
Loandate
datetime
YES
借出日期
Returndate
datetime
YES
应还日期
Deposit
Char(10)
YES
押金
Hire
int
YES
租金
Fine
int
YES
罚金
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="高级管理员"then
m_main.m_影碟管理.m_修改口令.enabled=enabled
endif
close(w_login)
else
messagebox("警告","口令有误,请重新输入")
sle_1.text=""
endif
在上图“取消”按钮的clicked事件中写入(其他的“取消”事件都是关闭窗口,故不再累述)
close(parent)
4.1.2口令修改窗口设计
创建“修改密码”窗口并布局好控件后,在上图“确定”按钮的clicked事件中写入
stringis_password
selectpassword
into:
is_password
fromispassword
wherename=:
ddlb_1.text;
ifis_password=sle_old.textthen
ifsle_new.text=sle_new2.textthen
updateispassword
setpassword=:
sle_new.text
wherename=:
ddlb_1.text;
messagebox("提示","修改成功!
")
sle_old.text=""
sle_new.text=""
sle_new2.text=""
return
else
messagebox("警告","两次输入新口令不一样")
sle_new.text=""
sle_new2.text=""
return
endif
else
messagebox("警告","原口令错误")
sle_old.text=""
return
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
into:
is_discid
fromVideoinfo
wherediscid=:
ll_id;
ifem_discid.text=""then
messagebox("警告","请输入编号")
em_discid.setfocus()
return
endif
ifis_discid<>0then
messagebox("警告","编号重复,请重新输入")
em_discid.setfocus()
return
endif
is_name=sle_name.text
ifis_name=""then
messagebox("警告","请输入影碟名称")
sle_name.setfocus()
return
endif
is_number=integer(em_number.text)
ifis_number=0then
messagebox("警告","请输入影片的盘数信息")
em_number.setfocus()
return
endif
ifsle_star.text=""then
messagebox("警告","请输入主演信息")
sle_star.setfocus()
return
endif
is_star=sle_star.text
ifisdate(em_date.text)then
is_duydate=date(em_date.text)
else
messagebox("警告","请输入正确的日期格式")
em_date.setfocus()
return
endif
ifem_price.text=""then
messagebox("警告","请输入价格")
em_date.setfocus()
return
endif
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<>0then
rollback;
else
commit;
endif
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=""then
messagebox("警告","请用户编号!
")
sle_1.setfocus()
return
endif
is_discid=sle_2.text
ifis_discid=""then
messagebox("警告","请影碟编号!
")
sle_2.setfocus()
return
endif
is_times=integer(sle_3.text)
ifsle_3.text=""then
messagebox("警告","请租借天数!
")
sle_3.setfocus()
return
endif
insertintoLends
(Id, Discid, Times)
Values (:
is_id, :
is_discid, :
is_times)
commit;
ifSQLCA.sqlcode<>0then
rollback;
else
commit;
endif
messagebox("提示","租借信息输入数据库中")
sle_1.text=""
sle_2.text=""
sle_3.text=""
4.4.2归还影碟窗口设计
在“影碟租借”窗口跳到“影碟归还”,在上图“确定”按钮的clicked事件中写入(显示该用户的租借信息)
stringis_id
longrow,row_count
is_id=sle_4.text
ifis_id=""then
messagebox("提示","请输入用户编号")
endif
dw_1.setfilter("Id='"+is_id+"'")
dw_1.filter()
dw_1.retrieve()
row_count=dw_1.rowcount()
ifrow_count<1then
messagebox("提示","对不起,暂无此用户")
endif
在上图“归还”按钮的clicked事件中写入
intnow_row,ret
now_row=dw_1.getrow()
dw_1.deleterow(now_row)
ret=messagebox("提示","确定要归还?
",question!
yesno!
2)
ifret=2then
dw_1.retrieve()
return
else
dw_1.update()
return
endif
4.5查询模块设计
4.5.1按片名查询窗口设计
创建“按片名查询”窗口并布局好控件后,在上图“查询”按钮的clicked事件中写入
stringlp_name
longrow,row_count
lp_name=sle_name.text
dw_1.setfilter("Discname='"+lp_name+"'")
dw_1.filter()
dw_1.retrieve()
row_count=dw_1.rowcount()
ifrow_count<1then
messagebox("提示","对不起暂无此影片")
endif
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
into:
lid
fromUserinfo
whereid=:
is_id;
ifem_id.text=""orlid<>""then
messagebox("警告","编号重复,请重新输入")
em_id.setfocus()
return
endif
ifsle_name.text=""orisnull(sle_name.text)then
messagebox("警告","请输入用户姓名")
sle_name.setfocus()
return
endif
is_name=sle_name.text
ifsle_phone.text=""orisnull(sle_phone.text)then
messagebox("警告","请输入联系电话")
sle_phone.setfocus()
return
endif
is_phone=sle_phone.text
ifem_deposit.text=""orisnull(em_deposit.text)then
messagebox("警告","请输入押金")
em_deposit.setfocus()
return
endif
is_deposit=integer(em_deposit.text)
ifisdate(sle_date.text)then
is_startdate=date(sle_date.text)
else
messagebox("警告","请输入日期")
sle_date.setfocus()
return
endif
is_enddate=date(year(is_startdate),month(is_startdate)+1,day(is_startdate))
insertintoUserinfo
(Id, Name, Phone, Register, Deposit, Returndate, Number)
VALUES(
:
is_id, :
is_name, :
is_phone, :
is_startdate, :
is_deposit, :
is_enddate, 0);
em_id.text=string(integer(is_id)+1)
sle_name.text=""
sle_phone.text=""
sle_name.setfocus()
4.6.2删除月租用户窗口设计
创建“修改月租用户”窗口并布局好控件后,在上图“删除”按钮的clicked事件中写入
intnow_row,ret
now_row=dw_1.getrow()
dw_1.deleterow(now_row)
ret=messagebox("提示","是否要删除",question!
yesno!
2)
ifret=2then
dw_1.retrieve()
return
else
dw_1.update()
return
endif
在上图“修改”按钮的clicked事件中写入
intnow_row,ret
ret=messagebox("提示","是否修改",question!
yesno!
2)
ifret=1then
dw_1.update()
return
endif
5编译和发布
完成以上设计和实施后,在数据库中装载一定量的数据,然后最终对整个程序运行一遍。
单击FILE---NEW---PROJECT---APPLICATIONWIZARD,然后按期默认就可以创建可执行文件了。
你还可以桌面创建一个快键方式,并改变成你想要的图标(如下图所示)。
6.总结和收获
1.由于加入软件学院冰峰工作室,未能按正常安排时间上机,在此向老师表示歉意。
但此次课程设计都是我利用课下时间自己独立完成,并没有因为时间紧而放低要求。
2.权限管理。
数据库用SQL2000实现,但未对其用户权限做过多设置,而是通过菜单来实现。
当以高级管理员身份登录时,其拥有全部的权限,所以菜单上的功能使对其可用的。
当以普通用户身份登录时,则某些菜单功能对其隐藏,通过这可以实现权限管理。
3.数据类型不匹配。
SQL2000中Datatime与PB中不匹配,参阅相关的资料仍无法解决,所以有关Datatime变量未实现。
同时由于原例中租借管理功能未详细讲解实现过程,此版本为自己设计的实现。