资源描述
电影售票预定系统档案
一.摘 要
随着人们生活水平的不断提高,人们生活的消费和需求也越来越旺盛。电影院售票系统可以实现影片的登记和电影票的购买, 可以方便 的进行电影以及实时影票信息的查询等,从而做到方便的售票操作, 方便了工作人员的同时也让顾客能够轻轻松松地买票, 我们的宗旨是 一个字:快! ;两个字:便捷。因此,该系统主要根据实际需求,划分了电影信息管理,每场电影的坐位信息管理,每个电影的预定情况,并选用Visual Studio .NET 2008开发工具和 SQL Server 2005数据库,采用B/S模式实现了从客户来访、报价、订购等多个环节数据的跟踪管理服务,基本上满足了电影销售管理流程。
关键词:销售管理;B/S模式;数据库;.NET
1.2 定义:
查询:对数据库的操作的一种,用于搜索数据信息。
插入:对数据库的操作的一种,用于将数据存入数据库中。
更新:对数据库的操作的一种,用于更改数据库中的数据信息。
软件结构图:反映软件系统的功能模块之间的关系的数据图。
二.电影售票预定系统的需求分析
2.1系统需求
本电影售票预定系统是一个协助影院进行全面管理的一个信息管理系统。本管理系统在实现上应满足以下需求:
1.能达到网站和影院间的无缝链接和数据的共享。
2.为系统提供数据支持。
3.不同级别的用户拥有相应的权限使用该系统,从而大大提高了系统的安全性和管理效率。
首先将电影信息入库,然后影院通过与客户的交易活动,将相关信息存入库,然后影院通过销售信息的查询获得电影票销售的情况,通过库存查询获得影院目前的剩票情况。由此可分析系统需要达到以下目标:
1. 能很好地完成电影票售前管理。售前管理包括影院信息,电影场次,电影片名信息的入库作业。
2. 能详细地记录影院和客户的交易过程,即订票或退票的情况。
3. 能详细地记录电影场次跟票数量的关系,即某场的电影和剩余票的关系。
4. 能及时准确地获得影院和市场的需求。即通过对电影场次,片名及票务销售的情况信息查询获得相应的结果,以备公司作为参考,从而安排更好的电影场次。
5. 能够对各场电影票销售的情况进行相应的记录。包括对订票,退票,修改等。
6. 能够对不同权限的用户进行合理的管理。包括添加用户,删除用户,用户账号和密码管理等。
2.2数据字典描述
数据字典是各累数据描述的集合。对数据库设计来讲,数据字典是进行详细的数据收集和数据分析所获得的主要结果。
数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程5个部分。其中数据项是最小的组成单位,若干个数据项可以组成一个数据结构,数据字典对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。
数据字典是关于数据库中数据的描述,即元数据,而不是数据本身。数据本身将存在物理数据库中,由数据库系统管理。数据字典有助于这些数据的进一步管理和控制,为设计人员和数据库管理员在数据库设计、实现和运行阶段控制有关数据提供依据。
2.3 程序描述
各功能详细描述:
本系统主要用于电影票预订,所以提供了以下几个子功能:用户注册,用户登陆,电影详细内容,生成订单,退订订单,付款,以及后台方面的电影的添加,以及电影的查询等后台功能。
1、用户注册:新用户可以通过注册会员来登陆。
2、用户登陆:登陆后的会员才能进行购票,查询订单。
3、电影详细内容:点击进入后可以查看电影的详细信息。包括:时长,价格,上映的时间等。
4、生成订单:该项功能提供用户选择购买电影票的数量,及取消订单等操作。
5、退订功能:会员可以选择是否取消已经生成的电影订单。
6、付款:此页面用户可以选择付款方式,并最终确定订单的生成。
7、后台电影的添加:该功能只有机场管理员有权力操作,管理员可以通过影院电影场次的安排来增加电影的内容,信息等操作。
三.概念结构设计
3.1软件结构:
电影售票预定系统
数据输入
数据输出
数据输入
页面信息录入
用户登陆
登陆信息
数据录入
数据信息
数据信息
数据信息
数据处理、查询
数据判断
数据信息
准备SQL
判断查询
数据库操作
数据信息
判断信息
判断结果
数据信息
返回订单等
确定错误原因
返回影片信息
生产订单
显示错误原因
确定订单
数据信息
3.2 E-R图向关系模型转换:
电影售票预定系统的基本E-R图
下面分别介绍表的结构:
1 电影表结构
编号
字段名称
结构类型
大小
说明
1
电影编号
Int
主键
2
电影名
char
20
主键
3
价格
Money
不允许为空
4
时长
Char
10
不允许为空
5
上映时间
Datetime
允许为空
6
电影简介
Char
200
不允许为空
7
票数
Int
不允许为空
8
图片
Char
60
不允许为空
2 订单表结构
编号
字段名称
结构类型
大小
说明
1
订单编号
Int
主键
2
会员名
char
20
不允许为空
3
订单日期
Datetime
20
不允许为空
4
发货方式
Char
20
不允许为空
5
付款方式
Char
20
不允许为空
6
总金额
Float
不允许为空
7
是否发货
Bit
不允许为空
8
备注
Next
允许为空
3 购物车表结构
编号
字段名称
结构类型
大小
说明
1
购物车编号
Int
不允许为空
2
会员名
Char
12
外键
3
电影编号
Int
不允许为空
4
数量
Int
不允许为空
4 管理员表结构
编号
字段名称
结构类型
大小
说明
1
用户名
Char
20
不允许为空
2
密码
Char
32
不允许为空
3
权限
Int
不允许为空
5 会员表结构
编号
字段名称
结构类型
大小
说明
1
会员名
Char
12
不允许为空
2
名字
Char
20
不允许为空
3
密码
Char
32
不允许为空
4
性别
Char
2
允许为空
5
出生日期
Datetime
允许为空
6
联系地址
nchar
60
不允许为空
7
联系电话
Char
13
不允许为空
8
邮政编码
Char
6
不允许为空
6 详细订单表结构
编号
字段名称
结构类型
大小
说明
1
订单编号
Int
外键
2
会员名
Char
12
不允许为空
3
电影编号
Int
不允许为空
4
数量
Int
不允许为空
3.3 源程序代码
创建数据库 电影售票
创建6个表,两个视图
创建电影表
USE [电影售票]
GO
/****** 对象: Table [dbo].[电影表] 脚本日期: 12/23/2011 15:57:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[电影表](
[电影编号] [int] NOT NULL,
[电影名] [char](20) NULL,
[价格] [money] NULL,
[时长] [char](10) NULL,
[上映时间] [datetime] NULL,
[电影简介] [char](200) NULL,
[票数] [int] NULL,
[图片] [char](60) NULL
) ON [PRIMARY]
创建订单表
CREATE TABLE [dbo].[订单表](
[订单编号] [int] NOT NULL,
[会员名] [char](20) NULL,
[订单日期] [datetime] NULL,
[发货方式] [char](20) NULL,
[付款方式] [char](20) NULL,
[总金额] [float] NULL,
[是否发货] [bit] NULL,
[备注] [ntext] NULL,
CONSTRAINT [PK_订单表] PRIMARY KEY CLUSTERED
(
[订单编号] 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]
创建购物车表
CREATE TABLE [dbo].[购物车表](
[购物车编号] [int] NOT NULL,
[会员名] [char](12) NULL,
[电影编号] [int] NULL,
[数量] [int] NULL,
CONSTRAINT [PK_购物车表] PRIMARY KEY CLUSTERED
(
[购物车编号] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
创建管理员表
CREATE TABLE [dbo].[管理员表](
[用户名] [char](20) NOT NULL,
[密码] [char](32) NULL,
[权限] [int] NULL
) ON [PRIMARY]
创建会员表
CREATE TABLE [dbo].[会员表](
[会员名] [char](12) NOT NULL,
[名字] [char](20) NULL,
[密码] [char](32) NULL,
[性别] [char](2) NULL,
[出生日期] [datetime] NULL,
[联系地址] [nchar](60) NULL,
[联系电话] [char](13) NULL,
[邮政编码] [char](6) NULL,
CONSTRAINT [PK_会员表] PRIMARY KEY CLUSTERED
(
[会员名] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
创建详细订单表
CREATE TABLE [dbo].[详细订单表](
[订单编号] [int] NULL,
[会员名] [char](12) NULL,
[电影编号] [int] NULL,
[数量] [int] NULL
) ON [PRIMARY]
创建购物车视图
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER VIEW [dbo].[购物车视图]
AS
SELECT dbo.购物车表.购物车编号, dbo.购物车表.会员名, dbo.购物车表.电影编号, dbo.购物车表.数量, dbo.电影表.电影名, dbo.电影表.价格
FROM dbo.购物车表INNER JOIN
dbo.电影表ON dbo.购物车表.电影编号= dbo.电影表.电影编号
创建详细订单视图
ALTER VIEW [dbo].[详细订单视图]
AS
SELECT dbo.订单表.订单编号, dbo.订单表.会员名, dbo.订单表.发货方式, dbo.订单表.订单日期, dbo.订单表.付款方式, dbo.订单表.是否发货, dbo.订单表.备注,
dbo.详细订单表.数量, dbo.详细订单表.电影编号, dbo.电影表.电影名, dbo.电影表.价格, dbo.订单表.总金额
FROM dbo.订单表INNER JOIN
dbo.详细订单表ON dbo.订单表.订单编号= dbo.详细订单表.订单编号INNER JOIN
dbo.电影表ON dbo.详细订单表.电影编号= dbo.电影表.电影编号
存储过程
ALTER procedure [dbo].[添加电影计划]
@电影编号int,
@电影名char(20),
@价格money,
@时长char(10),
@上映时间datetime,
@电影简介char(200),
@票数int,
@图片char(60),
@返回值char(50)output
as
begin
if (select COUNT(*) from 电影表where 电影编号=@电影编号)>0
set @返回值='库中已有,请先重新信息'
return -1
end
insert into 电影表
values(@电影编号,@电影名,@价格,@时长,@上映时间,@电影简介,@票数,@图片);
set @返回值='添加成功'
return 1
网页界面
定义一个DB类
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
/// <summary>
/// DB 的摘要说明
/// </summary>
public class DB
{
public SqlConnection Con = new SqlConnection();
public SqlCommand Com = new SqlCommand();
public SqlDataAdapter Da = new SqlDataAdapter();
public DataSet Ds = new DataSet();
public DB()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//定义一个用于返回数据库连接字符串的方法
public String GetConnectionString()
{
String ConStr;
ConStr = @"Data Source=.\SQL2005;Initial Catalog=电影售票;Persist Security Info=True;User ID=sa;Password=sql2005";
return ConStr;
}
//定义一个用于返回数据集的公共查询方法
public DataSet GetDataTableBySql(String SqlStr)
{
Con.ConnectionString = GetConnectionString();
Com.Connection = Con;
Com.CommandText = SqlStr;
Da.SelectCommand = Com;
try
{
Ds.Clear();
Con.Open();
Da.Fill(Ds);
Con.Close();
}
catch (SqlException)
{
Con.Close();
}
return Ds;
}
public bool GetBoolBySql(String SqlStr)
{
Con.ConnectionString = GetConnectionString();
Com.Connection = Con;
Com.CommandText = SqlStr;
Da.SelectCommand = Com;
try
{
Ds.Clear();
Con.Open();
Da.Fill(Ds);
Con.Close();
}
catch (SqlException)
{
Con.Close();
}
if (Ds.Tables [0].Rows.Count !=0)
return true ;
else
return false ;
}
//定义一个用于返回执行数据更新操作是否成功标志的方法
public Boolean UpdateDataBySql(String SqlStr)
{
Con.ConnectionString = GetConnectionString();
Com.Connection = Con;
Com.CommandText =SqlStr;
try
{
Con.Open();
Com.ExecuteNonQuery();
Con.Close();
return true;
}
catch (SqlException)
{
Con.Close();
return false;
}
}
}
主界面有购物车,订单查询,账号登陆,电影信息显示,管理员登陆
账号登陆
protected void Button1_Click(object sender, EventArgs e)
SqlStr = "select * from 会员表 where 会员名='" + this.TextBox1.Text + "' and 密码='" + this.TextBox2.Text + "'";
Ds = db.GetDataTableBySql(SqlStr);
try
{
if (Ds.Tables[0].Rows.Count == 0)
{
this.Label1.Text = "用户名或密码错误,请重试!";
this.TextBox1.Focus();
}
else
{
this.Label1.Text ="用户 "+this.TextBox1.Text + " 恭喜您登录成功!";
Session["UserName"] = this.TextBox1.Text;
}
}
catch (Exception)
{
this.Label1.Text = "没有得到任何数据,请重试!";
}
}
注册用户
protected void btn_Register_Click(object sender, EventArgs e)
{
String Md5_User_Pwd = FormsAuthentication.HashPasswordForStoringInConfigFile(this.txt_User_Pwd.Text, "MD5");
DB db = new DB();
SqlConnection conn = new SqlConnection(@"Data Source=.\SQL2005;Initial Catalog=电影售票;Persist Security Info=True;User ID=sa;Password=sql2005");
conn.Open();
String SqlStr = "insert into 会员表(会员名,密码,名字,性别,出生日期,联系地址,邮政编码,联系电话)"
+ "values('" + this.txt_User_Name.Text + "','" + Md5_User_Pwd + "','" + this.txt_Rel_Name.Text + "',"
+ "'" + this.DDL_Sex.SelectedItem.Text + "','" + this.DDL_Year.SelectedItem.Text + "-" + this.DDl_Month.SelectedItem.Text + "-" + this.DDL_Day.SelectedItem.Text + "',"
+ "'" + this.txt_Address.Text + "','" + this.txt_Postalcode.Text + "','" + this.txt_Tel.Text + "')";
Boolean InsertResult;
SqlCommand cmd = new SqlCommand(SqlStr, conn);
int i = Convert.ToInt32(cmd.ExecuteNonQuery());
if (i==1)
{
this.Labinfo.Text = "恭喜您注册成功!";
}
else
{
this.Labinfo.Text = "对不起,注册失败,请重试!";
this.txt_User_Name.Focus ();
}
}
显示电影
register.aspx;
<asp:DataList ID="DataList1" runat="server" RepeatColumns="5" Width="768px"
onselectedindexchanged="DataList1_SelectedIndexChanged" >
<ItemTemplate>
<table>
<tr>
<td width="110" valign="top" height="112">
<a href ='ticketdetails.aspx?ticketid=<%# DataBinder.Eval(Container.DataItem,"电影编号")%>'>
<img width =80 height =110 src ='<%# DataBinder.Eval(Container.DataItem,"图片") %>'></a>
</td>
</tr>
<tr>
<td width="110" valign="top" height="50">
<a href ='ticketdetalis.aspx?ticketid=<%# DataBinder.Eval(Container.DataItem,"电影编号")%>'>
<%# DataBinder.Eval(Container.DataItem,"电影名") %></a>
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
数据库调用cs代码
SqlStr = "select * from 电影表";
Ds = db.GetDataTableBySql(SqlStr);
try
{
if (Ds.Tables[0].Rows.Count != 0)
{
this.DataList1.DataSource = Ds.Tables[0].DefaultView;
this.DataList1.DataBind();
}
}
catch (Exception)
{
Response.Write("<script>alert('没有获得任何数据,请检查!')</script>");
}
电影详细介绍
ticketdetalis.aspx
if (Page.IsPostBack == false)
{
Ticket_ID = Request.QueryString.Get(0).ToString().Trim();
SqlStr = "select * from 电影表 where 电影编号=" + Ticket_ID;
Ds = db.GetDataTableBySql(SqlStr);
try
{
if (Ds.Tables[0].Rows.Count != 0)
{
this.Repeater1.DataSource = Ds.Tables[0].DefaultView;
this.Repeater1.DataBind();
Session["ticket_id"] = Ticket_ID;
}
}
catch (Exception)
{
Response.Write("<script>alert('没有获得任何数据,请检查!')</script>");
}
}
购物车调用。Net的数据库控件
<asp:DataList ID="DataList1" runat="server"
OnDeleteCommand="DataList1_DeleteCommand" DataKeyField="电影编号"
OnUpdateCommand="DataList1_UpdateCommand" BackColor="LightGoldenrodYellow"
BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black"
onselectedindexchanged="DataList1_SelectedIndexChanged">
<HeaderTemplate >
<table border="1">
<tr>
<td>电影编号</td>
<td>电影名称</td>
<td>价格</td>
<td>数量</td>
<td>修改数量</td>
<td>删除</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%# DataBinder.Eval(Container.DataItem ,"电影编号") %></td>
<td><%# DataBinder.Eval(Container.DataItem ,"电影名") %></td>
<td><%# DataBinder.Eval(Container.DataItem ,"价格") %></td>
<td><asp:TextBox ID="count" runat="server" Text ='<%# DataBinder.Eval(Container.DataItem ,"数量") %>' Width="30"></asp:TextBox></td>
<td><asp:Button ID="Mod" runat ="server" Text ="修改数量" CommandName ="Update"/></td>
<td><asp:Button ID="Del" runat ="server" Text ="删除" CommandName= "Delete"/></td>
</tr>
</ItemTemplate>
<FooterTemplate></table></FooterTemplate>
<FooterStyle BackColor="Tan" />
<SelectedItemStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
<AlternatingItemStyle BackColor="PaleGoldenrod" />
<HeaderStyle BackColor="Tan" Font-Bold="True" />
</asp:DataList>
使用.NET数据库控件
if (Page.IsPostBack == false)
{
Ticket_ID = Request.QueryString.Get(0).ToString().Trim();
SqlStr = "select * from 电影表 where 电影编号=" + Ticket_ID;
Ds = db.GetDataTableBySql(SqlStr);
try
{
if (Ds.Tables[0].Rows.Count != 0)
{
this.Repeater1.DataSource = Ds.Tables[0].DefaultView;
this.Repeater1.DataBind();
Session["ticket_id"] = Ticket_ID;
}
}
catch (Exception)
{
Response.Write("<script>alert('没有获得任何数据,请检查!')</script>");
}
}
价格结算
public partial class order : System.Web.UI.Page
{
String SqlStr;
DB db = new DB();
展开阅读全文