1、影碟出租管理系统影碟出租管理系统 影碟出租店分布在每个城市的大街小巷,虽然经营的范围相同,但是进货管道、订货、管理以及出租等方面存在着一定的差异。在正常的运营中总是面对着大量光盘信息、租借信息、归还信息。因此管理上纷繁复杂。以及了解各个环节的信息变更有利于提高管理以及经营的效率。1系统设计1.1系统功能分析 系统开发的总体任务是实现各种信息的系统化、规范化和自动化。系统主要功能分析是在系统开发总体任务的基础上完成的。本实例中的影碟管理系统主要是应用在普通的影碟出租店,它需要完成以下主要功能: 影碟管理:包括影片入库、影片预览、旧影片删除以及用户口令的修改; 影碟租借:包括租借影碟、归还影碟以及
2、浏览借出的影片; 影碟查询:包括按片名查询、按日期查询以及按主演查询; 月租管理:包括等级月租用户和查看月租用户; 统计销量 帮助1.2功能模块设计 对上述各项功能进行集中、分块,按照结构化程序设计的要求,得到如图1所示的影碟出租管理系统功能模块图。图1 影碟出租管理系统功能模块图。2数据库设计 设计数据库时应该充分了解用户各个方面的需求,包括现有的以及将来可能增加的需求,数据库设计包括以下步骤: 数据库需求分析 数据库概念结构设计 数据库逻辑结构设计2.1数据库需求分析 用户需求具体体现在对各种信息的提供、保存、更新和查询,这就要求数据库结构能充分满足各种信息的输入和输出。手机基本数据、数据
3、结构数据处理的流程,组成一份详细的数据字典为后面的具体设计打下基础。 仔细分析调查有关影碟管理信息需求的基础上,将得到如图2的数据处理流程。针对一般影碟管理系统的需求,并通过对影碟管理工作过程的内容和数据流程分析设计出下面的数据项和数据结构: 影片信息:包括影碟编号、影碟名称、张数、演员、日期、价格及说明; 用户信息:包括用户编号、用户姓名、注册时间、电话号码、月押金、罚金; 租借信息:包括影碟编号、借出日期、应还日期、押金、租金、罚金; 出租影片信息:日期、租出影片、租金。图2 影碟出租管理系统功能模块关系图2.2数据库概念结构设计 得到上面得数据项和数据结构以后,就可以设计出能够满足用户需
4、求的各种实体以及他们之间的关系为以后的逻辑结构打下基础根据设计规划出实体集有:影片信息实体、用户信息实体、租借信息实体、出租影片信息实体,各实体的具体描述ER图如下:图3 ER图2.3数据逻辑结构设计 基于上面实体之间的关系,即可形成数据库中的表之间的关系。数据逻辑结构设计就是把数据库概念结构转化为具体的DBMS(SQL 2000)数据库所支持的实际数据模型。影碟管理系统数据库中的各个表格的设计结果如下面的表格所示:表2.3.1影碟信息Vedioinfo列名数据类型是否为空说明DiscidChar(8)NO影碟编号(主键)DiscnameChar(30)YES影碟名称NumberintYES张
5、数StarChar(30)YES演员DuydatadatetimeYES日期PricerealYES价格IbstractChar(50)YES说明表2.3.2 用户信息表Userinfo列名数据类型是否为空说明IdChar(8)NO用户编号(主键)NameChar(8)YES用户姓名RegisterdatetimeYES注册时间DepositintYES月金NumberintYES张数PhoneChar(12)YES电话ReturndatadatetimeYES到期日期表2.3.3 出租信息表Returned列名数据类型是否为空说明DiscidChar(8)NO影碟信息(主键)Loandate
6、datetimeYES借出日期ReturndatedatetimeYES应还日期DepositChar(10)YES押金HireintYES租金FineintYES罚金3数据库的实现4、应用程序的设计4.1登录窗口设计4.1.1用户登陆窗口设计 登录窗口的创建创建是依次单击FILE-NEW-WINDOWS,然后命名为w_login,(其他窗口创建类似,故不再累述)在上图“确定”按钮的clicked事件中写入string password,is_passwordpassword=sle_1.textif ddlb_1.text= then messagebox(提示,请选择操作级别) retur
7、nend ifselect passwordinto:is_passwordfrom ispasswordwhere 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事件中写入(其他的“取消”事件都是关闭窗口,故不再累述)clo
8、se(parent)4.1.2口令修改窗口设计创建“修改密码”窗口并布局好控件后,在上图“确定”按钮的clicked事件中写入string is_passwordselect passwordinto:is_passwordfrom ispasswordwhere name=:ddlb_1.text;if is_password=sle_old.text then if sle_new.text=sle_new2.text then update ispasswordset password=:sle_new.text where name=:ddlb_1.text; messagebox(提
9、示,修改成功!) sle_old.text= sle_new.text= sle_new2.text= return else messagebox(警告,两次输入新口令不一样) sle_new.text= sle_new2.text= return end ifelse messagebox(警告,原口令错误) sle_old.text= returnend if在“取消”按钮写入(即将表单清空,类似功能不在累述)sle_old.text=sle_new.text=sle_new2.text=4.2主窗口设计4.2.1菜单设计 登录窗口的创建创建是依次单击FILE-NEW-PB Object
10、-MENU,然后命名为m_main,如图所示,创建相应的菜单。如果向实现某一菜单的功能(即跳转到相应的页面),则在clicked事件中写入opensheet(w_add,w_main,6,original!)4.2.2应用程序主窗口设计新建一窗口后,将菜单m_main添加进来即可。4.3影碟管理模块设计4.3.1影碟入库窗口设计 创建“新片入库”窗口并布局好控件后,在上图“确定”按钮的clicked事件中写入int is_numberdouble is_max,is_discid,ll_idstring is_name,is_stardate is_duydatedouble is_price
11、ll_id=double(em_discid.text)select discidinto:is_discidfrom Videoinfowhere discid=:ll_id;if em_discid.text= then messagebox(警告,请输入编号) em_discid.setfocus() returnend ifif is_discid0 then messagebox(警告,编号重复,请重新输入) em_discid.setfocus() returnend ifis_name=sle_name.textif is_name= then messagebox(警告,请输入
12、影碟名称) sle_name.setfocus() returnend ifis_number=integer(em_number.text)if is_number=0 then messagebox(警告,请输入影片的盘数信息) em_number.setfocus() returnend ifif sle_star.text= then messagebox(警告,请输入主演信息) sle_star.setfocus() returnend ifis_star=sle_star.textif isdate(em_date.text) then is_duydate=date(em_dat
13、e.text)else messagebox(警告,请输入正确的日期格式) em_date.setfocus() returnend ifif em_price.text= then messagebox(警告,请输入价格) em_date.setfocus() returnend ifis_price=double(em_price.text)insert into Videoinfo(discid, discname, number, star, duydate, price, ibstract)values(:ll_id, :is_name, :is_number, :is_star,
14、:is_duydate, :is_price, :mle_ibstract.text)commit;if SQLCA.sqlcode0 then rollback;else commit;end ifmessagebox(警告,影片已经添加!)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.delete
15、row(dw_1.getrow()在上图“修改”按钮的clicked事件中写入dw_1.update()4.4影碟租借模块设计4.4.1租借影碟窗口设计 创建“影碟租借”窗口并布局好控件后,在上图“租借”按钮的clicked事件中写入int is_timesstring is_id,is_discidis_id=sle_1.textif is_id= then messagebox(警告,请用户编号!) sle_1.setfocus() returnend ifis_discid=sle_2.textif is_discid= then messagebox(警告,请影碟编号!) sle_2.
16、setfocus() returnend ifis_times=integer(sle_3.text)if sle_3.text= then messagebox(警告,请租借天数!) sle_3.setfocus() returnend ifinsert into Lends(Id, Discid, Times)Values (:is_id, :is_discid, :is_times)commit;if SQLCA.sqlcode0 then rollback;else commit;end ifmessagebox(提示,租借信息输入数据库中)sle_1.text=sle_2.text=
17、sle_3.text=4.4.2归还影碟窗口设计 在“影碟租借”窗口跳到“影碟归还”,在上图“确定”按钮的clicked事件中写入(显示该用户的租借信息)string is_idlong row,row_countis_id=sle_4.textif is_id= then messagebox(提示,请输入用户编号)end ifdw_1.setfilter(Id=+is_id+)dw_1.filter()dw_1.retrieve()row_count=dw_1.rowcount()if row_count1 then messagebox(提示,对不起,暂无此用户)end if在上图“归还
18、”按钮的clicked事件中写入int now_row,retnow_row=dw_1.getrow()dw_1.deleterow(now_row)ret=messagebox(提示,确定要归还?,question!,yesno!,2)if ret=2 then dw_1.retrieve() returnelse dw_1.update() returnend if4.5查询模块设计4.5.1按片名查询窗口设计 创建“按片名查询”窗口并布局好控件后,在上图“查询”按钮的clicked事件中写入string lp_namelong row,row_countlp_name=sle_name.
19、textdw_1.setfilter(Discname=+lp_name+)dw_1.filter()dw_1.retrieve()row_count=dw_1.rowcount()if row_count1 then messagebox(提示,对不起暂无此影片)end if4.5.2按主演查询窗口设计 “按主演查询”与“按片名查询”实现方式相同,故在此不再累述。4.5.3按日期查询窗口设计 “按时间查询”与“按片名查询”实现方式相同,故在此不再累述。(注:PB和SQL 2000Datatime类型不匹配)4.6月租管理管理模块设计4.6.1登记月租用户窗口设计 创建“月租用户登记”窗口并布
20、局好控件后,在上图“查询”按钮的clicked事件中写入string is_id,is_name,is_phone,liddate is_startdate,is_enddateint is_depositis_id=em_id.textselect Idinto:lidfrom Userinfowhere id=:is_id;if em_id.text= or lid then messagebox(警告,编号重复,请重新输入) em_id.setfocus() returnend ifif sle_name.text= or isnull(sle_name.text) then messa
21、gebox(警告,请输入用户姓名) sle_name.setfocus() returnend ifis_name=sle_name.textif sle_phone.text= or isnull(sle_phone.text) then messagebox(警告,请输入联系电话) sle_phone.setfocus() returnend ifis_phone=sle_phone.textif em_deposit.text= or isnull(em_deposit.text) then messagebox(警告,请输入押金) em_deposit.setfocus() retur
22、nend ifis_deposit=integer(em_deposit.text)if isdate(sle_date.text) then is_startdate=date(sle_date.text)else messagebox(警告,请输入日期) sle_date.setfocus() returnend ifis_enddate=date(year(is_startdate),month(is_startdate)+1,day(is_startdate)insert into Userinfo(Id, Name, Phone, Register, Deposit, Returnd
23、ate, 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,retnow_row=dw_1.getrow()dw_1.deleterow(now_row)ret=messa
24、gebox(提示,是否要删除,question!,yesno!,2)if ret=2 then dw_1.retrieve() returnelse dw_1.update() returnend if在上图“修改”按钮的clicked事件中写入int now_row,retret=messagebox(提示,是否修改,question!,yesno!,2)if ret=1 then dw_1.update() returnend if5编译和发布 完成以上设计和实施后,在数据库中装载一定量的数据,然后最终对整个程序运行一遍。单击FILE-NEW-PROJECT-APPLICATION WIZ
25、ARD, 然后按期默认就可以创建可执行文件了。你还可以桌面创建一个快键方式,并改变成你想要的图标(如下图所示)。6.总结和收获 1.由于加入软件学院冰峰工作室,未能按正常安排时间上机,在此向老师表示歉意。但此次课程设计都是我利用课下时间自己独立完成,并没有因为时间紧而放低要求。 2.权限管理。数据库用SQL 2000实现,但未对其用户权限做过多设置,而是通过菜单来实现。当以高级管理员身份登录时,其拥有全部的权限,所以菜单上的功能使对其可用的。当以普通用户身份登录时,则某些菜单功能对其隐藏,通过这可以实现权限管理。 3. 数据类型不匹配。SQL 2000 中Datatime与PB中不匹配,参阅相关的资料仍无法解决,所以有关Datatime变量未实现。同时由于原例中租借管理功能未详细讲解实现过程,此版本为自己设计的实现。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1