当前位置:文档之家› 影碟出租管理系统

影碟出租管理系统

影碟出租管理系统
影碟出租管理系统

影碟出租管理系统

影碟出租店分布在每个城市的大街小巷,虽然经营的范围相同,但是进货管道、订货、管理以及出租等方面存在着一定的差异。在正常的运营中总是面对着大量光盘信息、租借信息、归还信息。因此管理上纷繁复杂。以及了解各个环节的信息变更有利于提高管理以及经营的效率。

1系统设计

1.1系统功能分析

系统开发的总体任务是实现各种信息的系统化、规范化和自动化。系统主要功能分析是在系统开发总体任务的基础上完成的。本实例中的影碟管理系统主要是应用在普通的影碟出租店,它需要完成以下主要功能:

★影碟管理:包括影片入库、影片预览、旧影片删除以及用户口令的修改;

★影碟租借:包括租借影碟、归还影碟以及浏览借出的影片;

★影碟查询:包括按片名查询、按日期查询以及按主演查询;

★月租管理:包括等级月租用户和查看月租用户;

★统计销量帮助

1.2功能模块设计

对上述各项功能进行集中、分块,按照结构化程序设计的要求,得到如图1所示的影碟出租管理系统功能模块图。

图1 影碟出租管理系统功能模块图。

2数据库设计

设计数据库时应该充分了解用户各个方面的需求,包括现有的以及将来可能增加的需求,数据库设计包括以下步骤:

●数据库需求分析

●数据库概念结构设计

●数据库逻辑结构设计

2.1数据库需求分析

用户需求具体体现在对各种信息的提供、保存、更新和查询,这就要求数据库结构能充分满足各种信息的输入和输出。手机基本数据、数据结构数据处理的流程,组成一份详细的数据字典为后面的具体设计打下基础。

仔细分析调查有关影碟管理信息需求的基础上,将得到如图2的数据处理流程。

针对一般影碟管理系统的需求,并通过对影碟管理工作过程的内容和数据流程分析设计出下面的数据项和数据结构:

◆影片信息:包括影碟编号、影碟名称、张数、演员、日期、价格及说明;

◆用户信息:包括用户编号、用户姓名、注册时间、电话号码、月押金、罚金;

◆租借信息:包括影碟编号、借出日期、应还日期、押金、租金、罚金;

◆出租影片信息:日期、租出影片、租金。

图2 影碟出租管理系统功能模块关系图

2.2数据库概念结构设计

得到上面得数据项和数据结构以后,就可以设计出能够满足用户需求的各种实体以及他们之间的关系为以后的逻辑结构打下基础

根据设计规划出实体集有:影片信息实体、用户信息实体、租借信息实体、出租影片信息实体,各实体的具体描述ER图如下:

图3 ER图

2.3数据逻辑结构设计

基于上面实体之间的关系,即可形成数据库中的表之间的关系。数据逻辑结构设计就是

把数据库概念结构转化为具体的DBMS(SQL 2000)数据库所支持的实际数据模型。

影碟管理系统数据库中的各个表格的设计结果如下面的表格所示:

表2.3.1影碟信息Vedioinfo

表2.3.2 用户信息表Userinfo

3数据库的实现

4、应用程序的设计

4.1登录窗口设计

4.1.1用户登陆窗口设计

登录窗口的创建创建是依次单击FILE---NEW---WINDOWS,然后命名为w_login,(其他窗口创建类似,故不再累述)

在上图“确定”按钮的clicked事件中写入

string password,is_password

password=sle_1.text

if ddlb_1.text="" then

messagebox("提示","请选择操作级别")

return

end if

select password

into:is_password

from ispassword

where name=:ddlb_1.text;

if password =is_password then

open(w_main)

if ddlb_1.text="高级管理员" then

m_main.m_影碟管理.m_修改口令.enabled=enabled

end if

close(w_login)

else

messagebox("警告","口令有误,请重新输入")

sle_1.text=""

end if

在上图“取消”按钮的clicked事件中写入(其他的“取消”事件都是关闭窗口,故不再累述)

close(parent)

4.1.2口令修改窗口设计

创建“修改密码”窗口并布局好控件后,在上图“确定”按钮的clicked事件中写入

string is_password

select password

into:is_password

from ispassword

where name=:ddlb_1.text;

if is_password=sle_old.text then

if sle_new.text=sle_new2.text then

update ispassword

set password=:sle_new.text

where name=:ddlb_1.text;

messagebox("提示","修改成功!")

sle_old.text=""

sle_new.text=""

sle_new2.text=""

return

else

messagebox("警告","两次输入新口令不一样")

sle_new.text=""

sle_new2.text=""

return

end if

else

messagebox("警告","原口令错误")

sle_old.text=""

return

end if

在“取消”按钮写入(即将表单清空,类似功能不在累述)

sle_old.text=""

sle_new.text=""

sle_new2.text=""

4.2主窗口设计

4.2.1菜单设计

登录窗口的创建创建是依次单击FILE---NEW---PB Object---MENU,然后命名为m_main,

如图所示,创建相应的菜单。如果向实现某一菜单的功能(即跳转到相应的页面),则在clicked 事件中写入

opensheet(w_add,w_main,6,original!)

4.2.2应用程序主窗口设计

新建一窗口后,将菜单m_main添加进来即可。

4.3影碟管理模块设计

4.3.1影碟入库窗口设计

创建“新片入库”窗口并布局好控件后,在上图“确定”按钮的clicked事件中写入

int is_number

double is_max,is_discid,ll_id

string is_name,is_star

date is_duydate

double is_price

ll_id=double(em_discid.text)

select discid

into:is_discid

from Videoinfo

where discid=:ll_id;

if em_discid.text="" then

messagebox("警告","请输入编号")

em_discid.setfocus()

return

end if

if is_discid<>0 then

messagebox("警告","编号重复,请重新输入")

em_discid.setfocus()

return

end if

is_name=sle_name.text

if is_name="" then

messagebox("警告","请输入影碟名称")

sle_name.setfocus()

return

end if

is_number=integer(em_number.text)

if is_number=0 then

messagebox("警告","请输入影片的盘数信息")

em_number.setfocus()

return

end if

if sle_star.text="" then

messagebox("警告","请输入主演信息")

sle_star.setfocus()

return

end if

is_star=sle_star.text

if isdate(em_date.text) then

is_duydate=date(em_date.text)

else

messagebox("警告","请输入正确的日期格式")

em_date.setfocus()

return

end if

if em_price.text="" then

messagebox("警告","请输入价格")

em_date.setfocus()

return

end if

is_price=double(em_price.text)

insert into Videoinfo

(discid, discname, number, star, duydate, price, ibstract)

values

(:ll_id, :is_name, :is_number, :is_star, :is_duydate, :is_price, :mle_ibstract.text)

commit;

if SQLCA.sqlcode<>0 then

rollback;

else

commit;

end if

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事件中写入int is_times

string is_id,is_discid

is_id=sle_1.text

if is_id="" then

messagebox("警告","请用户编号!")

sle_1.setfocus()

return

end if

is_discid=sle_2.text

if is_discid="" then

messagebox("警告","请影碟编号!")

sle_2.setfocus()

return

end if

is_times=integer(sle_3.text)

if sle_3.text="" then

messagebox("警告","请租借天数!")

sle_3.setfocus()

return

end if

insert into Lends

(Id, Discid, Times)

Values (:is_id, :is_discid, :is_times)

commit;

if SQLCA.sqlcode<>0 then

rollback;

else

commit;

end if

messagebox("提示","租借信息输入数据库中")

sle_1.text=""

sle_2.text=""

sle_3.text=""

4.4.2归还影碟窗口设计

在“影碟租借”窗口跳到“影碟归还”,在上图“确定”按钮的clicked事件中写入(显示该用户的租借信息)

string is_id

long row,row_count

is_id=sle_4.text

if is_id="" then

messagebox("提示","请输入用户编号")

end if

dw_1.setfilter("Id='"+is_id+"'")

dw_1.filter()

dw_1.retrieve()

row_count=dw_1.rowcount()

if row_count<1 then

messagebox("提示","对不起,暂无此用户")

end if

在上图“归还”按钮的clicked事件中写入

int now_row,ret

now_row=dw_1.getrow()

dw_1.deleterow(now_row)

ret=messagebox("提示","确定要归还?",question!,yesno!,2)

if ret=2 then

dw_1.retrieve()

return

else

dw_1.update()

return

end if

4.5查询模块设计

4.5.1按片名查询窗口设计

创建“按片名查询”窗口并布局好控件后,在上图“查询”按钮的clicked事件中写入string lp_name

long row,row_count

lp_name=sle_name.text

dw_1.setfilter("Discname='"+lp_name+"'")

dw_1.filter()

dw_1.retrieve()

row_count=dw_1.rowcount()

if row_count<1 then

messagebox("提示","对不起暂无此影片")

end if

4.5.2按主演查询窗口设计

“按主演查询”与“按片名查询”实现方式相同,故在此不再累述。

4.5.3按日期查询窗口设计

“按时间查询”与“按片名查询”实现方式相同,故在此不再累述。(注:PB和SQL 2000Datatime类型不匹配)

4.6月租管理管理模块设计

4.6.1登记月租用户窗口设计

创建“月租用户登记”窗口并布局好控件后,在上图“查询”按钮的clicked事件中写入string is_id,is_name,is_phone,lid

date is_startdate,is_enddate

int is_deposit

is_id=em_id.text

select Id

into:lid

from Userinfo

where id=:is_id;

if em_id.text="" or lid<>"" then

messagebox("警告","编号重复,请重新输入")

em_id.setfocus()

return

end if

if sle_name.text="" or isnull(sle_name.text) then

messagebox("警告","请输入用户姓名")

sle_name.setfocus()

return

end if

is_name=sle_name.text

if sle_phone.text="" or isnull(sle_phone.text) then

messagebox("警告","请输入联系电话")

sle_phone.setfocus()

return

end if

is_phone=sle_phone.text

if em_deposit.text="" or isnull(em_deposit.text) then

messagebox("警告","请输入押金")

em_deposit.setfocus()

return

end if

is_deposit=integer(em_deposit.text)

if isdate(sle_date.text) then

is_startdate=date(sle_date.text)

else

messagebox("警告","请输入日期")

sle_date.setfocus()

return

end if

is_enddate=date(year(is_startdate),month(is_startdate)+1,day(is_startdate))

insert into Userinfo

(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事件中写入int now_row,ret

now_row=dw_1.getrow()

dw_1.deleterow(now_row)

ret=messagebox("提示","是否要删除",question!,yesno!,2)

if ret=2 then

dw_1.retrieve()

return

else

dw_1.update()

return

end if

在上图“修改”按钮的clicked事件中写入

int now_row,ret

ret=messagebox("提示","是否修改",question!,yesno!,2)

if ret=1 then

dw_1.update()

return

end if

5编译和发布

完成以上设计和实施后,在数据库中装载一定量的数据,然后最终对整个程序运行一遍。单击FILE---NEW---PROJECT---APPLICATION WIZARD, 然后按期默认就可以创建可执行文件了。

你还可以桌面创建一个快键方式,并改变成你想要的图标(如下图所示)。

6.总结和收获

1.由于加入软件学院冰峰工作室,未能按正常安排时间上机,在此向老师表示歉意。但此次课程设计都是我利用课下时间自己独立完成,并没有因为时间紧而放低要求。

2.权限管理。数据库用SQL 2000实现,但未对其用户权限做过多设置,而是通过菜单来实现。当以高级管理员身份登录时,其拥有全部的权限,所以菜单上的功能使对其可用的。当以普通用户身份登录时,则某些菜单功能对其隐藏,通过这可以实现权限管理。

3. 数据类型不匹配。SQL 2000 中Datatime与PB中不匹配,参阅相关的资料仍无法解决,所以有关Datatime变量未实现。同时由于原例中租借管理功能未详细讲解实现过程,此版本为自己设计的实现。

相关主题
文本预览
相关文档 最新文档