您的当前位置:首页正文

电影订票系统

2023-12-11 来源:钮旅网
电影 订 票 系 统

组长:王润森

组员:尹佩珊、谢楚璇、吴绮玲 2013年12月10日星期二

1

完成日期:

目录

1系统使用说明及软件基本功能 ...................................................................................................... 2 1.1用户 ................................................................................................................................................ 2

1.1.1用户注册 ............................................................................................................................... 2 1.1.2用户登陆 ............................................................................................................................... 3 1.1.3浏览电影 ............................................................................................................................... 3 1.1.4用户资料管理 ....................................................................................................................... 4 1.1.5浏览电影简介 ....................................................................................................................... 4 1.1.6 观看预告片 ............................................................................................................................ 5 1.1.7订购电影 ................................................................................................................................. 5 1.2管理员 ............................................................................................................................................ 6 1.2.1后台用户登录 ....................................................................................................................... 6 1.2.2后台管理员主页 ................................................................................................................... 6 1.2.3增加电影 ................................................................................................................................. 7 1.2.4更新电影页面 ......................................................................................................................... 7 1.2.5删除电影 ............................................................................................................................... 10 1.2.6座位管理 ............................................................................................................................... 11 1.2.7现场订票 ............................................................................................................................... 12 1.2.8插入预告片 ........................................................................................................................... 13 1.3功能结构图 .................................................................................................................................. 13

2数据库设计 .................................................................................................................................. 14 2.1数据字典 ...................................................................................................................................... 14 2.1.1数据项................................................................................................................................... 14 2.1.2数据结构 ............................................................................................................................... 15 2.2结构设计 ...................................................................................................................................... 15 2.2.1概念结构设计 ....................................................................................................................... 15 2.2.2逻辑结构设计 ....................................................................................................................... 15 2.2.3物理结构设计 ....................................................................................................................... 15 3关键代码描述 ............................................................................................................................... 20 3.1动态生成上映电影信息 .............................................................................................................. 20 3.2选座窗口使用DATAGRIDVIEW控件显示座位信息 ....................................................................... 20 3.3控制电影排期时间,避免冲突 .................................................................................................. 20 3.4模拟交易过程 .............................................................................................................................. 21 4系统报告测试 ............................................................................................................................... 21 4.1存在问题以及解决方案 .............................................................................................................. 21 4.2不足 .............................................................................................................................................. 22 5小组详细分工 ............................................................................................................................... 22

2

1系统使用说明及软件基本功能

1.1用户

1.1.1用户注册

功能介绍:

为用户提供一个注册会员的友好界面。

使用说明:

输入注册信息,包括用户名,用户密码,昵称,性别,邮箱,手机号码,邮箱,QQ号码。输入完成后点注册按钮完成注册。如果信息填写的格式不对,则无法完成注册,并返回提示信息。

图1-1-1用户注册界面

3

1.1.2用户登陆

功能介绍:

为用户提供一个登录界面。

使用说明:

输入帐号、密码均正确,才登录成功,否则登录失败,若用户名或者密码为空,则返回提示信息。

图1-1-2用户登录界面

1.1.3浏览电影

功能介绍:

通过一个友好的欢迎界面显示可订票的电影信息,待上映的电影信息等。

使用说明:

电影按时间先后进行排列,用户可以了解各电影的放映顺序。页面左上角显示订票入口和修改个人信息入口。

4

图1-1-3电影的界面

1.1.4用户资料管理

功能介绍:

为用户提供修改个人资料的界面

使用说明:

此界面提供用户个人信息(包括用户名,用户密码,昵称,性别,邮箱,手机号码,邮箱,QQ号码)的完善与修改。用户密码采用的是MD5加密算法,修改密码时会弹出密码修改对话框,用户需要输入原始密码,新密码,还要进行新密码确认,若原始密码错误,则返回提示信息并无法进行密码修改。

5

图1-1-4用户资料管理界面

1.1.5浏览电影简介

功能介绍:

为用户提供一个电影简介的页面,用户可以选择订购该影片,购买的票数,放映时间,放映厅都会在此页面显示。

使用说明:

用户可以查看电影库中所正在上映电影的介绍(包括导演,主演,时长,语言,类型,上映时间,票价,简介),可以在线订购。当用户点击选票按钮时,用户将被转到所选电影订购页面。

6

图1-1-5电影简介界面

1.1.6 观看预告片

功能介绍:

为用户提供观看预告片功能。

使用说明:

点击此按钮,用户可以观看电影的预告片,以此决定是否购票。

7

图1-1-6观看预告片

1.1.7订购电影

功能介绍:

为用户提供选择观看座位,订购电影票的界面。

使用说明:

用户可以选择灰色座位,红色座位表示不可选,黄色座位表示已选。点击确认购买时,当用户选择完之后,将被转到售票处结算,并自动扣除金额。完成支付后,用户会收到支付成功短信,可凭借短信到前台取票。用户可点击取消订座按钮取消订座,但无法取消别人所订的票。

8

图1-1-7电影订票界面

1.2管理员

1.2.1后台用户登录

功能介绍:

后台用户即系统管理员,系统管理员将通过专有的入口登录到该系统,对用户不可见。

使用说明:

管理员通过输入账号、密码进入系统管理界面,成功登陆之后,可对电影票的信息进行操作、管理及对电影进行更新等操作。

1.2.2后台管理员主页

功能介绍:

为管理员提供一个对电影信息的综合管理平台

使用说明:

电影按时间先后进行排列,管理员可以了解各电影的放映顺序,每部电影下方均提供更新和删除入口。页面左上角显示现场购票入口、修改个人信息入口和增加电影入口。

9

图1-2-1管理员界面

1.2.3增加电影

功能介绍:

为管理员提供一个增加电影的界面

使用说明:

点击“增加电影”按钮进入该页面,填写电影的详细信息,上传电影海报,点击下方“增加”按钮即可成功增加一部电影。

图1-2-2管理员增加电影的界面

10

1.2.4更新电影页面

功能介绍:

为管理员提供一个可以修改电影详细信息、更新电影上映场次的界面。

使用说明:

1. 点击电影下方“更新”按钮进入该页面,可以对电影详细信息进行修改,修改完毕点击“更新”按钮即可保存。通过下方对放映厅的选择和对上映日期和开始时间(结束时间会根据电影时长自动进行更新)的填写,点击“新增”按钮及可增加该电影的上映场次。 【假如上映时间在当前时间之前,则提示管理员重新输入。】

图1-2-3管理员更新电影的界面(1)

2. 若要删除该电影的某个上映场次,点击该上映场次的“删除”按钮即可成功删除。【假如已有订座,则无法删除。】

11

图1-2-4管理员更新电影的界面(2)

3. 若填写了新增的上映场次,没有点击“新增”按钮,却点击了“删除”按钮,则会弹出“没有更新…怎么删除…”的提醒窗口。

12

图1-2-5管理员更新电影的界面(3)

1.2.5删除电影

功能介绍:

为管理员提供一个删除电影的入口

使用说明:

点击待删除电影下方的“删除”按钮,在弹出的窗口中点击“是”即可成功删除该电影。【假如已有订座则无法删除,若所有排期均无订座,则可连同电影、排期一同删除。】

13

图1-2-6管理员删除电影的界面

1.2.6座位管理

功能介绍:

为管理员提供一个管理座位的界面

使用说明:

1. 若管理员发现某个座位是不可用的,则选中该座位,点击右下角“设置为不可用”

按钮,即可把该座位设置为不可用,颜色显示为红色。

14

图1-2-7座位管理界面(1)

2. 若需要把某个不可用的座位设置为可用,即选中该座位,点击右下角“设置为不可用”按钮,即可把该座位设置为可用,颜色显示为灰色。

图1-2-8座位管理界面(2)

1.2.7 插入预告片

功能介绍:

15

管理员可插入预告片供观众观看。

使用说明:

点击“插入预告片”按钮进入该页面,从本机中选中视频便可将视频文件名插入到数据库里面,并复制预告片文件到本目录下。

图1-2-9插入预告片

1.2.8现场订票

功能介绍:

为管理员提供一个替用户现场选票的页面。

使用说明:

点击“购票”按钮进入该页面,选中座位,点击下方“订座”按钮成功购票,在弹出的窗口中点击“确定”按钮即可。该座位颜色改为黄色,意为该座位以被选中。

16

图1-2-10 现场订票界面

1.3功能结构图

图1-3-1用户功能结构

17

图1-3-2管理员功能结构

2数据库设计

2.1数据字典

2.1.1数据项

客户信息表(customers)

字段 c_id c_passward c_name sex phone email qq 类型 varchar(20) varchar(20) varchar(20) varchar(2) varchar(30) varchar(40) varchar(20) 允许为空 否 否 否 是 否 是 是 电影信息表(films)

字段 f_id f_name star director

是否为主键 主键 否 否 否 否 否 否 描述 客户账号 客户密码 客户名字 客户性别 客户电话 客户邮箱 客户qq号 类型 int varchar(50) varchar(100) varchar(30) 允许为空 否 否 是 是 是否为主键 主键 否 否 否 描述 电影编号 电影名 主演 导演 18

duration languages f_type descriptions price poster startdate prevue_path varchar(10) varchar(20) varchar(50) varchar(1000) int image date varchar(500) 是 是 是 是 是 是 是 是

否 否 否 否 否 否 否 否 片长 语言 类型 简介 价格 电影海报 上映日期 预告片 排期信息表(schedules)

字段 sch_id f_id h_id dates start_hr start_min end_hr end_min 类型 int int int date varchar(2) varchar(2) varchar(2) varchar(2) 允许为空 否 是 否 否 否 否 否 否

座位信息表(seats)

字段 s_id sch_id row col isActive 类型 int int int int bit 允许为空 否 否 是 是 是

订单信息表(orders)

字段 o_id c_id sch_id s_id dates 类型 int varchar(20) Int Int date 允许为空 否 否 否 否 否 否 是否为主键 主键 外键 外键 外键 否 否 描述 订单编号 客户账号 排期编号 座位编号 支付方式 订单日期 是否为主键 主键 外键 否 否 否 描述 座位编号 排期编号 第i排 第i列 是否已订 是否为主键 主键 外键 否 否 否 否 否 否 描述 排期编号 电影编号 放映厅号 放映日期 放映开始的小时 放映开始的分钟 放映结束的小时 放映结束的分钟 way_of_payment varchar(40) 19

2.1.2数据结构

数据结构名 customers films schedules seats orders 组成 c_id、c_password、c_name、sex、phone、email、qq f_id、f_name、star、director、duration、languages、f_type、descriptions、price、poster、startdate、prevue_path sch_id、f_id、h_id、dates、start_hr、start_min、end_hr、end_min s_id、sch_id、row、col、isActive o_id、c_id、sch_id、s_id、way_of_payment、dates 2.2结构设计

2.2.1概念结构设计 E-R图

20

2.2.2逻辑结构设计 关系模式

customers(c_id、c_password、c_name、sex、phone、email、qq) films(f_id、f_name、star、director、duration、languages、f_type、descriptions、price、poster、

startdate、prevue_path)

schedules(sch_id、f_id、h_id、dates、start_hr、start_min、end_hr、end_min) seats(s_id、sch_id、h_id、row、col、isActive)

orders(o_id、c_id、sch_id、s_id、way_of_payment、dates)

2.2.3物理结构设计

建表代码 USE [master] GO

/****** Object: Database [CinemaBookingSystem] Script Date: 12/07/2013 14:40:28 ******/

CREATE DATABASE [CinemaBookingSystem] GO

USE [CinemaBookingSystem] GO

/****** Object: Table [dbo].[films] Script Date: 12/07/2013 14:37:50 ******/ SET ANSI_NULLS ON GO

SET QUOTED_IDENTIFIER ON GO

SET ANSI_PADDING ON GO

CREATE TABLE [dbo].[films]( [f_id] [int] IDENTITY(1,1) NOT NULL, [f_name] [varchar](50) NOT NULL, [star] [varchar](100) NULL, [director] [varchar](30) NULL, [duration] [varchar](10) NULL, [languages] [varchar](20) NULL, [f_type] [varchar](50) NULL, [descriptions] [varchar](1000) NULL, [price] [int] NULL, [poster] [image] NULL, [startdate] [date] NULL, [prevue_path] [varchar](500) NULL,

21

CONSTRAINT [PK__films__2911CBED03317E3D] PRIMARY KEY CLUSTERED ( [f_id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO

SET ANSI_PADDING OFF GO

/****** Object: Table [dbo].[customers] Script Date: 12/07/2013 14:37:50 ******/ SET ANSI_NULLS ON GO

SET QUOTED_IDENTIFIER ON GO

SET ANSI_PADDING ON GO

CREATE TABLE [dbo].[customers]( [c_id] [varchar](20) NOT NULL, [c_password] [varchar](20) NOT NULL, [c_name] [varchar](20) NOT NULL, [sex] [varchar](2) NULL, [phone] [varchar](30) NOT NULL, [email] [varchar](40) NULL, [qq] [varchar](20) NULL, PRIMARY KEY CLUSTERED ( [c_id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO

SET ANSI_PADDING OFF GO

/****** Object: Table [dbo].[schedules] Script Date: 12/07/2013 14:37:50 ******/ SET ANSI_NULLS ON GO

SET QUOTED_IDENTIFIER ON GO

SET ANSI_PADDING ON GO

CREATE TABLE [dbo].[schedules]( [sch_id] [int] IDENTITY(1,1) NOT NULL, [f_id] [int] NOT NULL, [h_id] [int] NULL,

22

[dates] [date] NULL, [start_hr] [varchar](2) NULL, [start_min] [varchar](2) NULL, [end_hr] [varchar](2) NULL, [end_min] [varchar](2) NULL,

CONSTRAINT [PK__schedule__9A5C8C7C1367E606] PRIMARY KEY CLUSTERED ( [sch_id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO

SET ANSI_PADDING OFF GO

/****** Object: Table [dbo].[seats] Script Date: 12/07/2013 14:37:50 ******/ SET ANSI_NULLS ON GO

SET QUOTED_IDENTIFIER ON GO

CREATE TABLE [dbo].[seats]( [sch_id] [int] NOT NULL, [s_id] [int] IDENTITY(1,1) NOT NULL, [row] [int] NULL, [col] [int] NULL, [isActive] [bit] NULL,

CONSTRAINT [PK__seats__2F3684F40EA330E9] PRIMARY KEY CLUSTERED ( [s_id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO

/****** Object: Table [dbo].[orders] Script Date: 12/07/2013 14:37:50 ******/ SET ANSI_NULLS ON GO

SET QUOTED_IDENTIFIER ON GO

SET ANSI_PADDING ON GO

CREATE TABLE [dbo].[orders]( [o_id] [int] IDENTITY(1,1) NOT NULL, [c_id] [varchar](20) NOT NULL, [way_of_payment] [varchar](40) NOT NULL, [dates] [date] NOT NULL,

23

[sch_id] [int] NOT NULL, [s_id] [int] NOT NULL,

CONSTRAINT [PK__orders__904BC20E619B8048] PRIMARY KEY CLUSTERED ( [o_id] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO

SET ANSI_PADDING OFF GO

/****** Object: Check [CK__customers__sex__1DB06A4F] Script Date: 12/07/2013 14:37:50 ******/

ALTER TABLE [dbo].[customers] WITH CHECK ADD CHECK (([sex]='男'? OR [sex]='女')) GO

/****** Object: Check [CK__customers__sex__2F10007B] Script Date: 12/07/2013 14:37:50 ******/

ALTER TABLE [dbo].[customers] WITH CHECK ADD CHECK (([sex]= '男'? OR [sex]='女')) GO

/****** Object: Check [CK__schedules__end_h__173876EA] Script Date: 12/07/2013 14:37:50 ******/ ALTER TABLE [dbo].[schedules] WITH CHECK ADD CONSTRAINT [CK__schedules__end_h__173876EA] CHECK (([end_hr]>=(0) AND [end_hr]<(24))) GO

ALTER TABLE [dbo].[schedules] CHECK CONSTRAINT [CK__schedules__end_h__173876EA] GO

/****** Object: Check [CK__schedules__end_m__182C9B23] Script Date: 12/07/2013 14:37:50 ******/ ALTER TABLE [dbo].[schedules] WITH CHECK ADD CONSTRAINT [CK__schedules__end_m__182C9B23] CHECK (([end_min]>=(0) AND [end_min]<(60))) GO

ALTER TABLE [dbo].[schedules] CHECK CONSTRAINT [CK__schedules__end_m__182C9B23] GO

/****** Object: Check [CK__schedules__start__15502E78] Script Date: 12/07/2013 14:37:50 ******/ ALTER TABLE [dbo].[schedules] WITH CHECK ADD CONSTRAINT [CK__schedules__start__15502E78] CHECK (([start_hr]>=(0) AND [start_hr]<(24))) GO

ALTER TABLE [dbo].[schedules] CHECK CONSTRAINT [CK__schedules__start__15502E78] GO

/****** Object: Check [CK__schedules__start__164452B1] Script Date: 12/07/2013 14:37:50 ******/ ALTER TABLE [dbo].[schedules] WITH CHECK ADD CONSTRAINT [CK__schedules__start__164452B1] CHECK (([start_min]>=(0) AND [start_min]<(60)))

24

GO

ALTER TABLE [dbo].[schedules] CHECK CONSTRAINT [CK__schedules__start__164452B1] GO

/****** Object: ForeignKey [FK__orders__c_id__6383C8BA] Script Date: 12/07/2013 14:37:50 ******/

ALTER TABLE [dbo].[orders] WITH CHECK ADD CONSTRAINT [FK__orders__c_id__6383C8BA] FOREIGN KEY([c_id])

REFERENCES [dbo].[customers] ([c_id]) ON DELETE CASCADE GO

ALTER TABLE [dbo].[orders] CHECK CONSTRAINT [FK__orders__c_id__6383C8BA] GO

/****** Object: ForeignKey [FK__orders__s_id__656C112C] Script Date: 12/07/2013 14:37:50 ******/

ALTER TABLE [dbo].[orders] WITH CHECK ADD CONSTRAINT [FK__orders__s_id__656C112C] FOREIGN KEY([s_id])

REFERENCES [dbo].[seats] ([s_id]) ON DELETE CASCADE GO

ALTER TABLE [dbo].[orders] CHECK CONSTRAINT [FK__orders__s_id__656C112C] GO

/****** Object: ForeignKey [FK__orders__sch_id__6477ECF3] Script Date: 12/07/2013 14:37:50 ******/

ALTER TABLE [dbo].[orders] WITH CHECK ADD CONSTRAINT [FK__orders__sch_id__6477ECF3] FOREIGN KEY([sch_id])

REFERENCES [dbo].[schedules] ([sch_id]) ON DELETE CASCADE GO

ALTER TABLE [dbo].[orders] CHECK CONSTRAINT [FK__orders__sch_id__6477ECF3] GO

/****** Object: ForeignKey [FK__schedules__f_id__1920BF5C] Script Date: 12/07/2013 14:37:50 ******/ ALTER TABLE [dbo].[schedules] WITH CHECK ADD CONSTRAINT [FK__schedules__f_id__1920BF5C] FOREIGN KEY([f_id]) REFERENCES [dbo].[films] ([f_id]) ON DELETE CASCADE GO

ALTER TABLE [dbo].[schedules] CHECK CONSTRAINT [FK__schedules__f_id__1920BF5C] GO

/****** Object: ForeignKey [FK_seats_schedules] Script Date: 12/07/2013 14:37:50 ******/ ALTER TABLE [dbo].[seats] WITH CHECK ADD CONSTRAINT [FK_seats_schedules] FOREIGN KEY([sch_id])

REFERENCES [dbo].[schedules] ([sch_id]) GO

25

ALTER TABLE [dbo].[seats] CHECK CONSTRAINT [FK_seats_schedules] GO

3关键代码描述

3.1动态生成上映电影信息

先将所有电影加载到DataTable里面,再使用foreach从DataTable里面取出电影信息,每取得一条电影信息,则new一个放置电影海报的PictureBox和Text为电影名的Button(若身份为管理员,则还有更新和删除按钮)。手动设置控件的各种属性和事件,使用条件判断语句:if (xGap + x * (pb.Width + xGap) + pb.Width > panelOfGroupBox.Width)实现当电影在一行内放不下时(即大于panel的宽度),自动更改后面电影的Location,并且panel停靠在父窗口gb_Movies上,gb_Movies的Dock属性为Fill,并且窗体默认最大化且不能更改,从而实现了在不同屏幕大小的计算机上运行都能有同样的效果(不会超出显示屏的宽度)。并能实现鼠标移动到图片上时放大图片效果和点击图片或按钮弹出电影详细信息窗口。

3.2选座窗口使用DataGridView控件显示座位信息

1. 由于考虑到直接将图片转化为二进制数据存进数据库作为座位的使用情况带来操作上的不方便以及空间上的浪费,本系统使用bit类型来储存座位使用的3种情况,分别是可选(Null表示)、不可选(0表示)、已选(1表示),其中“不可选”状态由管理员设定以灵活地使用座位(防止座位不存在或座位维修却被用户选中的情况的发生)。

2. 在显示座位使用情况下,本系统使用DataGridView控件,在窗体弹出后立即载入该排期的详细信息(包括电影名、放映厅以及上映时间),并通过以上信息从数据库里面取出该排期的座位情况,再根据座位使用情况在DataGridView的单元格上增加图片,并根据座位的数量动态增加DataGridView的行数(1行10个座位,超出则新增一行)。

3. 当用户选了座位后,重新加载座位表更新座位信息,并在选座中加入了并发控制,一旦发现冲突,立刻回滚。

3.3控制电影排期时间,避免冲突

1. 更新或新增电影排期前,先调用CheckScheduleRepetition()函数,从数据库里面取出上映

26

日期和放映厅都相同而且满足一下3个条件之一的数据:

①新增电影的开始时间在已存在电影的开始时间和结束时间之间;(新增电影的开始时间可等于已存在电影的结束时间,但不能等于已存在电影的开始时间。)

代码:(datediff(mi,cast(convert(varchar(10),start_hr+':'+start_min+':00',108) as datetime),cast(convert(varchar(10),@StartHour+':'+@StartMinute+':00',108) as datetime))>=0 and

datediff(mi,cast(convert(varchar(10),End_hr+':'+End_min+':00',108) as datetime),cast(convert(varchar(10),@StartHour+':'+@StartMinute+':00',108) as datetime))<0)

②新增电影的结束时间在已存在电影的开始时间和结束时间之间;(新增电影的结束时间可等于已存在电影的开始时间,但不能等于已存在电影的结束时间。)

代码:(datediff(mi,cast(convert(varchar(10),end_hr+':'+end_min+':00',108) as datetime),cast(convert(varchar(10),@EndHour+':'+@EndMinute+':00',108) as datetime))<=0 and

datediff(mi,cast(convert(varchar(10),Start_hr+':'+Start_min+':00',108) as datetime),cast(convert(varchar(10),@EndHour+':'+@EndMinute+':00',108) as datetime))>0)

③新增电影的开始时间在已存在电影的开始时间之前而且新增电影的结束时间在已存在电影的结束时间之后。

代码:(datediff(mi,cast(convert(varchar(10),end_hr+':'+end_min+':00',108) as datetime),cast(convert(varchar(10),@EndHour+':'+@EndMinute+':00',108) as datetime))>0 and

datediff(mi,cast(convert(varchar(10),Start_hr+':'+Start_min+':00',108) as datetime),cast(convert(varchar(10),@StartHour+':'+@StartMinute+':00',108) as datetime))<0)

若取出来的count大于0,则电影排期存在冲突,弹出对话框提示管理员。(只能由管理员添加电影排期。)

2. 由于数据库的开始小时和分钟采用字符串类型,因此需要使用函数

cast(convert(varchar(10),Hour+':'+Minute+':00',108) as datetime)来将字符串转化为datetime类型,再用datediff函数进行比较。

27

3.4模拟交易过程

1. 为了模拟交易的过程,用户在确定了订单信息并确认支付后,本系统新开一个线程弹出一个窗口显示“正在支付…”并让系统睡眠1.5秒,然后更改Label信息为“正在发送短信…”并再次睡眠1.5秒,然后再将订单信息增加进数据库,并弹出“支付成功,你的订单号是XXX,可凭借短信到前台取票”信息。

2. 假如登录者是管理员admin,则不执行该线程,直接弹出对话框“现场选座成功,你的订单号是XXX”信息。

4系统报告测试

4.1存在问题以及解决方案

1. 注册和更新同时判断用户是否存在

解决方案:将判断用户是否存在的函数BLL.Register.userRepetition(string account)从BLL

层分离出来,单独加在注册中。

2. 电影排期时间冲突

解决方案:调用CheckScheduleRepetition()函数,从数据库里面取出上映日期和放映厅

都相同而且满足一下3个条件之一的数据:

①新增电影的开始时间在已存在电影的开始时间和结束时间之间;(新增电影的开始时间可等于已存在电影的结束时间,但不能等于已存在电影的开始时间。)

代码:(datediff(mi,cast(convert(varchar(10),start_hr+':'+start_min+':00',108) as datetime),cast(convert(varchar(10),@StartHour+':'+@StartMinute+':00',108) as datetime))>=0 and

datediff(mi,cast(convert(varchar(10),End_hr+':'+End_min+':00',108) as datetime),cast(convert(varchar(10),@StartHour+':'+@StartMinute+':00',108) as datetime))<0)

②新增电影的结束时间在已存在电影的开始时间和结束时间之间;(新增电影的结束时间可等于已存在电影的开始时间,但不能等于已存在电影的结束时间。)

28

代码:(datediff(mi,cast(convert(varchar(10),end_hr+':'+end_min+':00',108) as datetime),cast(convert(varchar(10),@EndHour+':'+@EndMinute+':00',108) as datetime))<=0 and

datediff(mi,cast(convert(varchar(10),Start_hr+':'+Start_min+':00',108) as datetime),cast(convert(varchar(10),@EndHour+':'+@EndMinute+':00',108) as datetime))>0)

③新增电影的开始时间在已存在电影的开始时间之前而且新增电影的结束时间在已存在电影的结束时间之后。

代码:(datediff(mi,cast(convert(varchar(10),end_hr+':'+end_min+':00',108) as datetime),cast(convert(varchar(10),@EndHour+':'+@EndMinute+':00',108) as datetime))>0 and

datediff(mi,cast(convert(varchar(10),Start_hr+':'+Start_min+':00',108) as datetime),cast(convert(varchar(10),@StartHour+':'+@StartMinute+':00',108) as datetime))<0)

若取出来的count大于0,则电影排期存在冲突,弹出对话框提示管理员。(只能由管理员添加电影排期。)

3. 鼠标放在图片上没放大却隐藏

解决方案:不使用另外一个PictureBox覆盖原本PictureBox,直接修改原本PictureBox大

小,并设置pb.SizeMode = PictureBoxSizeMode.StretchImage,即可使图片随PictureBox增大而增大。

4. 电影不按上映时间降序排列

解决方案:放弃原先在数据库中orderby desc的想法,直接在取电影信息的时候在结尾

加上orderby desc即可。

5. 用户可取消他人订单

解决方案:在取消前调用函数BLL.Main.OrderCustomerFind(scheduleInfo.ScheduleID,

seatInfo.SeatID)取出该座位订购者和当前用户id是否一致,否则不能取消订单。

6.管理员可设置一个已选座位不可用

解决方案:在用户订座以后,立刻设置该座位的“设置为不可用”按钮的enable属性为

29

false,则当管理员按下任何已选座位时,“设置为不可用”按钮均不可用。当管理员设置了一个座位为不可用成功后,订座和取消按钮均不可用。

7. 每新增一个电影的排期,座位增加问题

解决方案:每新增一个电影的排期,则采用一个循环自动增加50个该排期的座位,

IsActive属性均设置为NULL。

4.2不足

1. 一个订单只能订一个座位 2. 没有实现支付和发送短信功能

3. 刷新电影时延大,系统运行有点慢(测试机器cpu为Intel i3-2310M,主频2.1GHz,若

在I5 cpu(实验室机器)中测试,则无延迟效果。)

4. 没有分离管理员和前台登记者,没有分离客户和管理员信息表,即客户和管理员信息存

储在同一张表中

5. 订票系统规模较小,只有3个放映厅,而且每个放映厅的座位固定为50个

5小组详细分工

组员 王润森 尹佩珊 谢楚璇 吴绮玲 分工  编写C#代码业  业务逻辑设计  数据库设计(设计E-R图)  业务逻辑设计  优化数据库设计  文档编辑  生成建表代码  文档编辑 得分 95 90 75 75 30

因篇幅问题不能全部显示,请点此查看更多更全内容