01 介绍

一个有会员制的电影院购票系统。具有会员注册功能,可区分会员和散客两种身份,实现会员及折扣管理。购票具有挑选电影场次,选择座位和查看电影信息等功能。

  • 查看电影详情、获取排片信息。
  • 选择场次座位,完成支付,获取取票信息。
  • 注册成为影院会员,享受优惠折扣。

代码获取

关注我们的公众号!在后台回复【CSTK】不包括【】即可获取。

02 设计思路

在功能设计上,一个电影院购票系统,首先需要具备最基础的功能:影片选择、场次选择和座位选择。在用户提交选择后,会需要支付模块提示用户付款并完成出票。为了吸引用户,我们增加了会员的注册和登录模块,为会员用户提供折扣。

注册与购票的支付我们的处理是预留一个接口,当做简单模拟,实际使用可以调用支付宝或微信的支付接口。

在界面设计上,我们为系统添加了好看的背景图片。通过Detail栏展示用户信息与折扣,通过Hot Movie栏在最吸引眼球展示热映电影的海报,提高用户的购买欲望。最后,作为主要部分的座位选择栏简介明了,座位之间间隔明显,有效的防止用户错误操作。

03 具体设计

通过三层架构来完成影院购票系统的开发,将真个业务应用划分为:界面层(UI层)、业务逻辑层(BLL层)、数据访问层(DAL层)。对于复杂的系统分层让结构清晰,便于对系统进行整体的理解、把握;而且便于维护,将各部分之间的相互影响的程度降低到最小,系统基本的架构可以通过工具自动生成代码。当数据库发生改变时,只用重新生成代码,改动业务逻辑层的部分代码即可。在实施的过程中,难点在于将三层结构进行划分,掌握各层之间的设计思路以及调用关系,下面内容就结合代码展示具体实现过程。

1) Model层( 封装数据,使数据在三层中传输)

例如Movie:

  1. namespace Model
  2. {
  3. public class Movie
  4. {
  5. [Key]
  6. public int MovieID { get; set; }
  7. public string MovieName{ get; set; } /// 电影名称
  8. public string Actor { get; set; } /// 主演
  9. public string Director { get; set; }/// 导演名
  10. public int Duration { get; set; } //时长
  11. public string MovieType { get; set; }/// 电影类型
  12. public string Poster{ get; set; } /// 海报图片名
  13. }
  14. }

2) DAL层(提供基本的数据访问)

实现代码(以Movies为例):

  1. namespace DAL
  2. {
  3. public class MovieDAL
  4. {
  5. public static List<Movie> GetAllMovies()
  6. {
  7. var MoviesQuery = from m in CinemaDbContext.CDbContext.Movies
  8. select m;
  9. return MoviesQuery.ToList();
  10. }
  11. public static Movie GetMovieByMovieID(int mID)
  12. {
  13. return CinemaDbContext.CDbContext.Movies.Find(mID);
  14. }
  15. }
  16. }

3) BLL层(负责处理业务逻辑,在本次的系统开发中,包括了与用户和影票信息相关的处理)

实现代码(以TicketBLL为例):

  1. namespace BLL
  2. {
  3. public class TicketBLL
  4. {
  5. public static bool AddTickets(List<Ticket> tickets)
  6. {
  7. return true;
  8. }
  9. }
  10. }

4) UI层(负责显示和采集用户操作)

系统总共包含五个界面,分别为:用户登录界面、用户注册界面、影院主页、票务信息确认界面以及支付界面。同时,使用Winform皮肤插件来实现对系统界面整体风格的把控。下面将以界面的为单位来对其实现过程进行描述:

  • 用户登录界面

用户将身份信息写入文本框后,用其输入的信息创建新的customer对象,通过调用BLL层的功能将输入内容与用户信息比对,最后用判断语句激活弹窗反馈登陆结果,登陆成功后进入到售票系统首页。

  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. Customer cLogin = new Customer
  4. {
  5. UserName = this.textBox1.Text,
  6. PassWord = this.textBox2.Text
  7. };
  8. if (CustomerBLL.Login(cLogin))
  9. {
  10. MessageBox.Show("登录成功");
  11. MainForm mainForm = new MainForm();
  12. mainForm.customerVIP = cLogin;
  13. mainForm.Show();
  14. this.Visible = false;
  15. }
  16. else
  17. {
  18. MessageBox.Show("登录失败");
  19. }
  20. }

同时,用户可以点击注册按钮,跳转到注册界面完成新用户的注册。

  1. private void button3_Click(object sender, EventArgs e)
  2. {
  3. UserRegisterForm userRegisterForm = new UserRegisterForm();
  4. userRegisterForm.Show();
  5. this.Visible = false;
  6. }
  • 用户注册界面

用户将身份信息写入文本框后,用其输入的信息创建新的customer对象,通过调用BLL层的服务将新的用户信息写入数据库,最后用判断语句激活弹窗对注册结果予以反馈。

  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. PayForm payform = new PayForm(true);
  4. payform.ShowDialog();
  5. //Thread.Sleep(7000);
  6. //payform.Visible = false;
  7. Customer cRegister = new Customer
  8. {
  9. UserName = this.textBox1.Text,
  10. PassWord = this.textBox2.Text
  11. };
  12. if (CustomerBLL.Register(cRegister))
  13. {
  14. MessageBox.Show("注册成功");
  15. UserLoginForm userLoginForm = new UserLoginForm();
  16. userLoginForm.Show();
  17. this.Visible = false;
  18. }
  19. else
  20. {
  21. MessageBox.Show("注册失败");
  22. }
  23. }
  • 排片详情获取
  1. /// <summary>
  2. /// 初始化TreeView控件
  3. /// </summary>
  4. private void InitTreeView()
  5. {
  6. tvMovies.BeginUpdate();
  7. tvMovies.Nodes.Clear();
  8. TreeNode movieNode = null;
  9. foreach(Movie m in MovieDAL.GetAllMovies())
  10. {
  11. movieNode = new TreeNode(m.MovieName);
  12. tvMovies.Nodes.Add(movieNode);
  13. foreach (Schedule s in ScheduleDAL.GetSchedulesByMovieID(m.MovieID))
  14. {
  15. TreeNode timeNode = new TreeNode(s.DateTime);
  16. timeNode.Name = s.ScheduleID.ToString();
  17. movieNode.Nodes.Add(timeNode);
  18. }
  19. }
  20. tvMovies.EndUpdate();
  21. }
  • 影厅初始化
  1. /// <summary>
  2. /// 初始化放映厅座位
  3. /// </summary>
  4. /// <param name="seatRow">行数</param>
  5. /// <param name="seatCol">列数</param>
  6. /// <param name="tb"></param>
  7. //普通厅放映
  8. private void InitSeatsCheckBox(int seatRow, int seatCol, TabPage tb, Dictionary<string, CheckBox> ckBox, Dictionary<string, Seat> cSeats)
  9. {
  10. CheckBox checkBox;
  11. Seat seat;
  12. for (int i = 0; i < seatRow; i++) /* 加载一号放映厅的位置*/
  13. {
  14. for (int j = 0; j < seatCol; j++)
  15. {
  16. checkBox = new CheckBox();
  17. //设置背景颜色
  18. checkBox.BackColor = Color.LightBlue;
  19. //设置字体
  20. checkBox.Font = font1; //new System.Drawing.Font("宋体", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point,((byte)(134)));
  21. //设置尺寸
  22. checkBox.AutoSize = false;
  23. checkBox.Size = new System.Drawing.Size(60, 25);
  24. //设置座位号
  25. checkBox.Text = (j+1).ToString() + "-" + (i+1).ToString();
  26. checkBox.TextAlign = ContentAlignment.MiddleCenter;
  27. //设置位置
  28. checkBox.Location = new Point(60 + (i * 90), 60 + (j * 60));
  29. //所有的标签都绑定到同一事件
  30. //checkBox.Click += new System.EventHandler(lblSeat_Click);
  31. tb.Controls.Add(checkBox);
  32. ckBox.Add(checkBox.Text, checkBox);
  33. //实例化一个座位
  34. seat = new Seat(checkBox.Text, Color.LightBlue);
  35. //保存的座位集合
  36. cSeats.Add(seat.SeatNum, seat);
  37. }
  38. }
  39. Label lb = new Label();
  40. lb.BackColor = Color.LightGray;
  41. lb.Font = font1; //设置尺寸
  42. lb.AutoSize = false;
  43. lb.Size = new System.Drawing.Size(100, 25);
  44. //
  45. lb.Text = "荧幕中央";
  46. lb.TextAlign = ContentAlignment.MiddleCenter;
  47. //设置位置
  48. lb.Location = new Point(310, 20);
  49. tb.Controls.Add(lb);
  50. }
  • 购票
  1. private void tvMovies_AfterSelect(object sender, TreeViewEventArgs e)
  2. {
  3. /// <summary>
  4. /// 选择一场电影事件
  5. /// </summary>
  6. /// <param name="sender"></param>
  7. /// <param name="e"></param>
  8. TreeNode node = tvMovies.SelectedNode;
  9. if (node == null) return;
  10. if (node.Level != 1) return;
  11. int sID = int.Parse(node.Name);
  12. Schedule s = null;
  13. Movie m = null;
  14. s= ScheduleDAL.GetScheduleByScheduleID(sID);
  15. if (s == null)
  16. {
  17. MessageBox.Show("s should not be null");
  18. return;
  19. }
  20. m = MovieDAL.GetMovieByMovieID(s.MovieID);
  21. if (m == null)
  22. {
  23. MessageBox.Show("m should not be null");
  24. return;
  25. }
  26. //将详细信息显示
  27. this.lblMovieName.Text = m.MovieName;
  28. this.lblDirector.Text = m.Director;
  29. this.lblActor.Text = m.Actor;
  30. this.lblPrice.Text = s.Price.ToString();
  31. this.lblTime.Text = s.DateTime;
  32. this.lblType.Text = m.MovieType;
  33. this.picMovie.Image = Image.FromFile(m.Poster);
  34. if(this.customerVIP != null)
  35. {
  36. this.lblCalcPrice.Text = (s.Price * 0.8).ToString();
  37. }
  38. else
  39. {
  40. this.lblCalcPrice.Text = lblPrice.Text;
  41. }
  42. otherHallIDs.Clear();
  43. foreach (int hID in AllHallIDs)
  44. {
  45. if (hID == s.HallID)
  46. {
  47. continue;
  48. }
  49. otherHallIDs.Add(hID);
  50. }
  51. //清空座位
  52. ReSetSeats(s.HallID);
  53. //遍历该场电影的座位销售情况
  54. foreach (Ticket t in TicketDAL.GetTicketsByScheduleID(sID))
  55. {
  56. foreach (Seat seat in seats[s.HallID].Values)
  57. {
  58. if (t.DetailSeat == seat.SeatNum)
  59. {
  60. seat.Color = Color.LightCoral;
  61. }
  62. }
  63. }
  64. UpdateSeats(s.HallID);
  65. tbSeat.SelectedTab = tbSeat.TabPages[s.HallID-1];
  66. }
  • 购票信息确认界面
  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. if (String.IsNullOrEmpty(this.lblMovieName.Text))
  4. {
  5. MessageBox.Show("您还没选择电影!", "提示");
  6. return;
  7. }
  8. int hID = tbSeat.SelectedIndex + 1;
  9. TreeNode node = tvMovies.SelectedNode;
  10. if (node == null) return;
  11. if (node.Level != 1) return;
  12. int sID = int.Parse(node.Name);
  13. double totalCost = 0;
  14. List<Ticket> selectSeats = new List<Ticket>();
  15. string confireInfo = "您选择的电影票信息如下,请确认:\n\n";
  16. foreach(CheckBox cb in checkBoxs[hID].Values)
  17. {
  18. if (cb.Checked && cb.Enabled == true)
  19. {
  20. selectSeats.Add(new Ticket(sID, cb.Text));
  21. confireInfo += "电影名:" + lblMovieName.Text + " 场次:" + lblTime.Text + " 大厅:" + hID + " 座位:"+cb.Text+"\n";
  22. totalCost += double.Parse(lblCalcPrice.Text);
  23. }
  24. }
  25. if (selectSeats.Count < 1)
  26. {
  27. MessageBox.Show("您没有选择任何座位!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  28. return;
  29. }
  30. confireInfo += "\n总金额:" + totalCost.ToString()+" 元";
  31. if (MessageBox.Show(confireInfo, "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
  32. {
  33. PayIsSuccess = false;
  34. PayForm pf = new PayForm(false);
  35. pf.Owner = this;
  36. pf.payMoney = totalCost;
  37. pf.ShowDialog();
  38. //支付成功
  39. if (PayIsSuccess)
  40. {
  41. //保存到数据库成功
  42. if (TicketDAL.AddTickets(selectSeats))
  43. {
  44. //生成取票码
  45. //更新位置信息
  46. foreach (Ticket t in selectSeats)
  47. {
  48. Seat s = null;
  49. if(seats[hID].TryGetValue(t.DetailSeat, out s))
  50. {
  51. s.Color = Color.LightCoral;
  52. }
  53. }
  54. //更新UI
  55. UpdateSeats(hID);
  56. TicketForm tf = new TicketForm();
  57. tf.Owner = this;
  58. tf.ticketCode = DateTime.Now.ToFileTimeUtc().ToString();
  59. tf.ShowDialog();
  60. }
  61. }
  62. }
  63. }
  • 支付界面(获取购票信息,计算总票价,提示支付)
  1. private void TicketForm_Load(object sender, EventArgs e)
  2. {
  3. label2.Text = ticketCode;
  4. Image qr = getqrcode(ticketCode);
  5. imageList1.Images.Add(qr);
  6. imageList1.ImageSize = new Size(150, 150);
  7. pictureBox1.Image = imageList1.Images[0];
  8. }
  9. public Image getqrcode(string content)
  10. {
  11. var encoder = new QrEncoder(ErrorCorrectionLevel.M);
  12. QrCode qrCode = encoder.Encode(content);
  13. GraphicsRenderer render = new GraphicsRenderer(new FixedModuleSize(12, QuietZoneModules.Two), Brushes.Black, Brushes.White);//如需改变二维码大小,调整12即可
  14. DrawingSize dSize = render.SizeCalculator.GetSize(qrCode.Matrix.Width);
  15. Bitmap map = new Bitmap(dSize.CodeWidth, dSize.CodeWidth);
  16. Graphics g = Graphics.FromImage(map);
  17. render.Draw(g, qrCode.Matrix);
  18. return map;
  19. }
  • 取票信息界面(包括取票二维码以及取票序列号的实现)
  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. MainForm m = (MainForm)Owner;
  4. m.PayIsSuccess = true;
  5. this.Close();
  6. }
  7. private void PayForm_Load(object sender, EventArgs e)
  8. {
  9. label1.Text = payMoney.ToString();
  10. }

05 数据库设计

数据库采用的是SQLSERVER,可以复制下面的脚本到查询框执行,即可得到数据库和样本数据。

系统中采用DbContext方式直接连接数据库。各表的设计如下:

  • Customer

  • Hall

  • Movie

  • Schedule

  • Ticket

数据库脚本:

  1. USE [master]
  2. GO
  3. /****** Object: Database [U201715959] Script Date: 12/12/2019 17:34:20 ******/
  4. IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'U201715959')
  5. BEGIN
  6. CREATE DATABASE [U201715959] ON PRIMARY
  7. ( NAME = N'U201715959', FILENAME = N'D:\Database\U201715959\U201715959.mdf' , SIZE = 3072KB , MAXSIZE = 716800KB , FILEGROWTH = 1024KB )
  8. LOG ON
  9. ( NAME = N'U201715959_log', FILENAME = N'D:\Database\U201715959\U201715959_log.ldf' , SIZE = 1024KB , MAXSIZE = 204800KB , FILEGROWTH = 10%)
  10. END
  11. GO
  12. ALTER DATABASE [U201715959] SET COMPATIBILITY_LEVEL = 100
  13. GO
  14. IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
  15. begin
  16. EXEC [U201715959].[dbo].[sp_fulltext_database] @action = 'enable'
  17. end
  18. GO
  19. ALTER DATABASE [U201715959] SET ANSI_NULL_DEFAULT OFF
  20. GO
  21. ALTER DATABASE [U201715959] SET ANSI_NULLS OFF
  22. GO
  23. ALTER DATABASE [U201715959] SET ANSI_PADDING OFF
  24. GO
  25. ALTER DATABASE [U201715959] SET ANSI_WARNINGS OFF
  26. GO
  27. ALTER DATABASE [U201715959] SET ARITHABORT OFF
  28. GO
  29. ALTER DATABASE [U201715959] SET AUTO_CLOSE OFF
  30. GO
  31. ALTER DATABASE [U201715959] SET AUTO_CREATE_STATISTICS ON
  32. GO
  33. ALTER DATABASE [U201715959] SET AUTO_SHRINK OFF
  34. GO
  35. ALTER DATABASE [U201715959] SET AUTO_UPDATE_STATISTICS ON
  36. GO
  37. ALTER DATABASE [U201715959] SET CURSOR_CLOSE_ON_COMMIT OFF
  38. GO
  39. ALTER DATABASE [U201715959] SET CURSOR_DEFAULT GLOBAL
  40. GO
  41. ALTER DATABASE [U201715959] SET CONCAT_NULL_YIELDS_NULL OFF
  42. GO
  43. ALTER DATABASE [U201715959] SET NUMERIC_ROUNDABORT OFF
  44. GO
  45. ALTER DATABASE [U201715959] SET QUOTED_IDENTIFIER OFF
  46. GO
  47. ALTER DATABASE [U201715959] SET RECURSIVE_TRIGGERS OFF
  48. GO
  49. ALTER DATABASE [U201715959] SET DISABLE_BROKER
  50. GO
  51. ALTER DATABASE [U201715959] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
  52. GO
  53. ALTER DATABASE [U201715959] SET DATE_CORRELATION_OPTIMIZATION OFF
  54. GO
  55. ALTER DATABASE [U201715959] SET TRUSTWORTHY OFF
  56. GO
  57. ALTER DATABASE [U201715959] SET ALLOW_SNAPSHOT_ISOLATION OFF
  58. GO
  59. ALTER DATABASE [U201715959] SET PARAMETERIZATION SIMPLE
  60. GO
  61. ALTER DATABASE [U201715959] SET READ_COMMITTED_SNAPSHOT OFF
  62. GO
  63. ALTER DATABASE [U201715959] SET HONOR_BROKER_PRIORITY OFF
  64. GO
  65. ALTER DATABASE [U201715959] SET READ_WRITE
  66. GO
  67. ALTER DATABASE [U201715959] SET RECOVERY FULL
  68. GO
  69. ALTER DATABASE [U201715959] SET MULTI_USER
  70. GO
  71. ALTER DATABASE [U201715959] SET PAGE_VERIFY CHECKSUM
  72. GO
  73. ALTER DATABASE [U201715959] SET DB_CHAINING OFF
  74. GO
  75. EXEC sys.sp_db_vardecimal_storage_format N'U201715959', N'ON'
  76. GO
  77. USE [U201715959]
  78. GO
  79. /****** Object: Table [dbo].[Customer] Script Date: 12/12/2019 17:34:21 ******/
  80. IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Customer]') AND type in (N'U'))
  81. DROP TABLE [dbo].[Customer]
  82. GO
  83. /****** Object: Table [dbo].[Hall] Script Date: 12/12/2019 17:34:21 ******/
  84. IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Hall]') AND type in (N'U'))
  85. DROP TABLE [dbo].[Hall]
  86. GO
  87. /****** Object: Table [dbo].[Movie] Script Date: 12/12/2019 17:34:21 ******/
  88. IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Movie]') AND type in (N'U'))
  89. DROP TABLE [dbo].[Movie]
  90. GO
  91. /****** Object: Table [dbo].[Schedule] Script Date: 12/12/2019 17:34:21 ******/
  92. IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Schedule]') AND type in (N'U'))
  93. DROP TABLE [dbo].[Schedule]
  94. GO
  95. /****** Object: Table [dbo].[Ticket] Script Date: 12/12/2019 17:34:21 ******/
  96. IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Ticket]') AND type in (N'U'))
  97. DROP TABLE [dbo].[Ticket]
  98. GO
  99. /****** Object: User [U201715959] Script Date: 12/12/2019 17:34:20 ******/
  100. IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'U201715959')
  101. DROP USER [U201715959]
  102. GO
  103. /****** Object: User [U201715959] Script Date: 12/12/2019 17:34:20 ******/
  104. IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'U201715959')
  105. CREATE USER [U201715959] FOR LOGIN [U201715959] WITH DEFAULT_SCHEMA=[dbo]
  106. GO
  107. /****** Object: Table [dbo].[Ticket] Script Date: 12/12/2019 17:34:21 ******/
  108. SET ANSI_NULLS ON
  109. GO
  110. SET QUOTED_IDENTIFIER ON
  111. GO
  112. IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Ticket]') AND type in (N'U'))
  113. BEGIN
  114. CREATE TABLE [dbo].[Ticket](
  115. [TicketID] [int] IDENTITY(1,1) NOT NULL,
  116. [ScheduleID] [int] NULL,
  117. [DetailSeat] [nvarchar](50) NULL,
  118. CONSTRAINT [PK_Ticket] PRIMARY KEY CLUSTERED
  119. (
  120. [TicketID] ASC
  121. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  122. ) ON [PRIMARY]
  123. END
  124. GO
  125. SET IDENTITY_INSERT [dbo].[Ticket] ON
  126. INSERT [dbo].[Ticket] ([TicketID], [ScheduleID], [DetailSeat]) VALUES (1, 5, N'1-1')
  127. INSERT [dbo].[Ticket] ([TicketID], [ScheduleID], [DetailSeat]) VALUES (2, 5, N'1-2')
  128. INSERT [dbo].[Ticket] ([TicketID], [ScheduleID], [DetailSeat]) VALUES (3, 1, N'3-4')
  129. INSERT [dbo].[Ticket] ([TicketID], [ScheduleID], [DetailSeat]) VALUES (4, 5, N'1-3')
  130. INSERT [dbo].[Ticket] ([TicketID], [ScheduleID], [DetailSeat]) VALUES (5, 5, N'3-1')
  131. INSERT [dbo].[Ticket] ([TicketID], [ScheduleID], [DetailSeat]) VALUES (6, 18, N'1-1')
  132. INSERT [dbo].[Ticket] ([TicketID], [ScheduleID], [DetailSeat]) VALUES (7, 4, N'1-1')
  133. INSERT [dbo].[Ticket] ([TicketID], [ScheduleID], [DetailSeat]) VALUES (8, 4, N'1-2')
  134. INSERT [dbo].[Ticket] ([TicketID], [ScheduleID], [DetailSeat]) VALUES (9, 5, N'1-4')
  135. INSERT [dbo].[Ticket] ([TicketID], [ScheduleID], [DetailSeat]) VALUES (10, 5, N'1-5')
  136. INSERT [dbo].[Ticket] ([TicketID], [ScheduleID], [DetailSeat]) VALUES (11, 5, N'1-6')
  137. INSERT [dbo].[Ticket] ([TicketID], [ScheduleID], [DetailSeat]) VALUES (12, 5, N'2-6')
  138. SET IDENTITY_INSERT [dbo].[Ticket] OFF
  139. /****** Object: Table [dbo].[Schedule] Script Date: 12/12/2019 17:34:21 ******/
  140. SET ANSI_NULLS ON
  141. GO
  142. SET QUOTED_IDENTIFIER ON
  143. GO
  144. IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Schedule]') AND type in (N'U'))
  145. BEGIN
  146. CREATE TABLE [dbo].[Schedule](
  147. [ScheduleID] [int] IDENTITY(1,1) NOT NULL,
  148. [MovieID] [int] NULL,
  149. [HallID] [int] NULL,
  150. [Price] [int] NULL,
  151. [DateTime] [nvarchar](50) NULL,
  152. CONSTRAINT [PK_Schedule] PRIMARY KEY CLUSTERED
  153. (
  154. [ScheduleID] ASC
  155. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  156. ) ON [PRIMARY]
  157. END
  158. GO
  159. SET IDENTITY_INSERT [dbo].[Schedule] ON
  160. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (1, 4, 1, 32, N'12-06 9:30')
  161. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (2, 2, 1, 35, N'12-06 10:40')
  162. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (3, 3, 1, 45, N'12-06 13:10')
  163. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (4, 5, 1, 38, N'12-06 15:30')
  164. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (5, 1, 1, 35, N'12-06 18:00')
  165. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (6, 5, 1, 40, N'12-06 20:10')
  166. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (7, 3, 1, 36, N'12-06 22:30')
  167. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (8, 3, 2, 36, N'12-06 9:25')
  168. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (9, 5, 2, 36, N'12-06 11:30')
  169. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (10, 4, 2, 40, N'12-06 13:30')
  170. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (11, 2, 2, 36, N'12-06 15:40')
  171. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (12, 2, 2, 40, N'12-06 17:55')
  172. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (13, 3, 2, 36, N'12-06 20:10')
  173. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (14, 1, 2, 36, N'12-06 10:20')
  174. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (15, 5, 3, 100, N'12-06 13:30')
  175. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (16, 3, 3, 100, N'12-06 15:30')
  176. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (17, 2, 3, 100, N'12-06 20:05')
  177. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (18, 1, 3, 100, N'12-05 10:30')
  178. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (19, 4, 3, 100, N'12-05 15:30')
  179. INSERT [dbo].[Schedule] ([ScheduleID], [MovieID], [HallID], [Price], [DateTime]) VALUES (20, 5, 3, 100, N'12-05 20:20')
  180. SET IDENTITY_INSERT [dbo].[Schedule] OFF
  181. /****** Object: Table [dbo].[Movie] Script Date: 12/12/2019 17:34:21 ******/
  182. SET ANSI_NULLS ON
  183. GO
  184. SET QUOTED_IDENTIFIER ON
  185. GO
  186. IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Movie]') AND type in (N'U'))
  187. BEGIN
  188. CREATE TABLE [dbo].[Movie](
  189. [MovieID] [int] IDENTITY(1,1) NOT NULL,
  190. [MovieName] [nvarchar](50) NULL,
  191. [Actor] [nvarchar](50) NULL,
  192. [Director] [nvarchar](50) NULL,
  193. [Duration] [int] NULL,
  194. [MovieType] [nvarchar](50) NULL,
  195. [Poster] [nvarchar](50) NULL,
  196. CONSTRAINT [PK_Movie] PRIMARY KEY CLUSTERED
  197. (
  198. [MovieID] ASC
  199. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  200. ) ON [PRIMARY]
  201. END
  202. GO
  203. SET IDENTITY_INSERT [dbo].[Movie] ON
  204. INSERT [dbo].[Movie] ([MovieID], [MovieName], [Actor], [Director], [Duration], [MovieType], [Poster]) VALUES (1, N'海蒂和爷爷', N'阿努克·斯特芬', N'阿兰·葛斯彭纳', 111, N'剧情、家庭', N'海蒂和爷爷.jpg')
  205. INSERT [dbo].[Movie] ([MovieID], [MovieName], [Actor], [Director], [Duration], [MovieType], [Poster]) VALUES (2, N'海上钢琴师', N'蒂姆·罗斯', N'吉赛贝·托纳多雷', 125, N'剧情', N'海上钢琴师.jpg')
  206. INSERT [dbo].[Movie] ([MovieID], [MovieName], [Actor], [Director], [Duration], [MovieType], [Poster]) VALUES (3, N'冰雪奇缘2', N'安娜、艾莎', N'詹妮弗·李', 112, N'喜剧,冒险', N'冰雪奇缘.jpg')
  207. INSERT [dbo].[Movie] ([MovieID], [MovieName], [Actor], [Director], [Duration], [MovieType], [Poster]) VALUES (4, N'夏目友人帐', N'井上和彦', N'大森贵弘', 106, N'妖怪,治愈,温暖', N'夏目友人帐.jpg')
  208. INSERT [dbo].[Movie] ([MovieID], [MovieName], [Actor], [Director], [Duration], [MovieType], [Poster]) VALUES (5, N'利刃出鞘', N'丹尼尔·克雷格', N'莱恩·约翰逊', 130, N'喜剧 、悬疑 、犯罪', N'利刃出鞘.jpg')
  209. SET IDENTITY_INSERT [dbo].[Movie] OFF
  210. /****** Object: Table [dbo].[Hall] Script Date: 12/12/2019 17:34:21 ******/
  211. SET ANSI_NULLS ON
  212. GO
  213. SET QUOTED_IDENTIFIER ON
  214. GO
  215. IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Hall]') AND type in (N'U'))
  216. BEGIN
  217. CREATE TABLE [dbo].[Hall](
  218. [HallID] [int] IDENTITY(1,1) NOT NULL,
  219. [rowsCount] [int] NULL,
  220. [colsCount] [int] NULL,
  221. CONSTRAINT [PK_Hall] PRIMARY KEY CLUSTERED
  222. (
  223. [HallID] ASC
  224. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  225. ) ON [PRIMARY]
  226. END
  227. GO
  228. SET IDENTITY_INSERT [dbo].[Hall] ON
  229. INSERT [dbo].[Hall] ([HallID], [rowsCount], [colsCount]) VALUES (1, 7, 4)
  230. INSERT [dbo].[Hall] ([HallID], [rowsCount], [colsCount]) VALUES (2, 7, 4)
  231. INSERT [dbo].[Hall] ([HallID], [rowsCount], [colsCount]) VALUES (3, 7, 4)
  232. SET IDENTITY_INSERT [dbo].[Hall] OFF
  233. /****** Object: Table [dbo].[Customer] Script Date: 12/12/2019 17:34:21 ******/
  234. SET ANSI_NULLS ON
  235. GO
  236. SET QUOTED_IDENTIFIER ON
  237. GO
  238. IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Customer]') AND type in (N'U'))
  239. BEGIN
  240. CREATE TABLE [dbo].[Customer](
  241. [CustomerID] [int] IDENTITY(1,1) NOT NULL,
  242. [UserName] [nvarchar](50) NULL,
  243. [PassWord] [nvarchar](50) NULL,
  244. CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED
  245. (
  246. [CustomerID] ASC
  247. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  248. ) ON [PRIMARY]
  249. END
  250. GO
  251. SET IDENTITY_INSERT [dbo].[Customer] ON
  252. INSERT [dbo].[Customer] ([CustomerID], [UserName], [PassWord]) VALUES (1, N'张三', N'123456')
  253. INSERT [dbo].[Customer] ([CustomerID], [UserName], [PassWord]) VALUES (2, N'小兔子', N'123456')
  254. INSERT [dbo].[Customer] ([CustomerID], [UserName], [PassWord]) VALUES (3, N'lalala', N'123')
  255. INSERT [dbo].[Customer] ([CustomerID], [UserName], [PassWord]) VALUES (4, N'可爱宋', N'123456')
  256. INSERT [dbo].[Customer] ([CustomerID], [UserName], [PassWord]) VALUES (5, N'可爱郝', N'123456')
  257. INSERT [dbo].[Customer] ([CustomerID], [UserName], [PassWord]) VALUES (6, N'小名', N'123')
  258. INSERT [dbo].[Customer] ([CustomerID], [UserName], [PassWord]) VALUES (7, N'Angela', N'1234567')
  259. INSERT [dbo].[Customer] ([CustomerID], [UserName], [PassWord]) VALUES (8, N'小张', N'123')
  260. INSERT [dbo].[Customer] ([CustomerID], [UserName], [PassWord]) VALUES (9, N'123', N'123')
  261. INSERT [dbo].[Customer] ([CustomerID], [UserName], [PassWord]) VALUES (10, N'12345', N'123')
  262. INSERT [dbo].[Customer] ([CustomerID], [UserName], [PassWord]) VALUES (11, N'445', N'234')
  263. INSERT [dbo].[Customer] ([CustomerID], [UserName], [PassWord]) VALUES (12, N'黎明', N'111')
  264. INSERT [dbo].[Customer] ([CustomerID], [UserName], [PassWord]) VALUES (13, N'Lina', N'666666')
  265. INSERT [dbo].[Customer] ([CustomerID], [UserName], [PassWord]) VALUES (14, N'酷酷酷', N'111')
  266. SET IDENTITY_INSERT [dbo].[Customer] OFF

干货 | C#开发的电影售票系统的更多相关文章

  1. 「影院售票系统」 · Java Swing + MySQL JDBC开发

    目录 文档说明: 一.语言和环境 二.实现功能 三.数据库设计 四.具体要求及推荐实现步骤 五.注意事项 六.评分标准 实现代码: 一.数据库: 二.Java Swing: com.ynavc.Bea ...

  2. C#总结项目《影院售票系统》编写总结一

    C#学习经历从基本语法结构到窗体再到面向对象终于走完了.NET初级程序员的道路,做为品德优良好学生更不能落下课程的总结项目-某某鸟<影院售票系统>.用了大概一天半的时间做完这个练手项目,先 ...

  3. C#编写影院售票系统(A project with a higher amount of gold )

    项目需求: 影院售票系统 1.基础设施 放映厅 座位集合 2.一个海报------------>放映计划 3.售票设置----------->观影 领域模型:程序中提炼出的实体 4.从电影 ...

  4. C#编写影院售票系统(A project with a higher amount of gold )(2:相关代码)

    此篇文章为项目代码,,,需要项目需求 ,思路分析与窗体效果请访问:http://www.cnblogs.com/lsy131479/p/8367304.html 项目类图: 影院类: using Sy ...

  5. 轻松应对并发问题,简易的火车票售票系统,Newbe.Claptrap 框架用例,第一步 —— 业务分析

    Newbe.Claptrap 框架非常适合于解决具有并发问题的业务系统.火车票售票系统,就是一个非常典型的场景用例. 本系列我们将逐步从业务.代码.测试和部署多方面来介绍,如何使用 Newbe.Cla ...

  6. COGS247. 售票系统[线段树 RMQ]

    247. 售票系统 ★★☆   输入文件:railway.in   输出文件:railway.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 某次列车途经C个城市,城市 ...

  7. RP4412开发板在Android系统编译生成ramdisk-uboot.img

    荣品RP4412开发板在android系统编译的时候,怎么生成ramdisk-uboot.img生成流程分析: mkimage -A arm -O linux -T ramdisk -C none - ...

  8. 使用SharePoint Designer定制开发员工工作日志系统实例!

    昨天已介绍了一篇<使用SharePoint Designer定制开发专家库系统实例!>,今天继续来介绍使用SharePoint Designer定制开发员工工作日志系统实例,主要功能包括填 ...

  9. Google 开发新的开源系统 Fuchsia

    google 最新os 下载 https://github.com/fuchsia-mirror/magenta 本文转自:http://www.oschina.net/news/76094/goog ...

随机推荐

  1. Pyarm的Pyqt的配置

    相关连接: Python PyQt 安装python3.4 x64到c盘根目录. 安装PyQt5-5.5.1-gpl-Py3.4-Qt5.5.1-x64.exe 安装pycharm-professio ...

  2. java面试题错题集(牛客网错题)

    一.关于Object类的说法正确 Java中所有的类都直接或间接继承自Object,无论是否明确的指明,无论其是否是抽象类. Object的equals方法,只有一句话,return this==ob ...

  3. 排队看病(PriorityQueue自定义排序)

    看病要排队这个是地球人都知道的常识. 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的.0068所去的医院有三个医生(汗,这么少)同时看病.而看病的人病情有轻重,所以不能根据简单的先来先服 ...

  4. C# MVC扩展方法

    控制方法 : 在不修改类原来代码的情况下,给类扩展方法 https://www.cnblogs.com/jxsimon/articles/5043654.html https://www.cnblog ...

  5. Java的多态-进阶

    Java的多态——进阶 总括 Parent p = new Child(); 反之,Child() c = new Parent(); 会报错. 当使用多态方式调用方法时,首先检查父类中是否有该方法. ...

  6. 2.7.5 元素定位(主推xpath、cssSelector) ❀❀❀

    定位方式选择: 1. 当页面元素有id属性时,最好尽量用id来定位.但由于现实项目中很多程序员其实写的代码并不规范,会缺少很多标准属性,这时就只有选择其他定位方法. 2. xpath很强悍,但定位性能 ...

  7. js bug

    1 加载模块脚本失败:服务器以非JavaScript MIME类型“text/html”响应. 描述:ES6 import Class时路径出错,少一个 / ,添上即可

  8. bitset 位运算

    1. 判断一个数是否是2的方幂n > 0 && ((n & (n - 1)) == 0 ) 解释((n & (n-1)) == 0): 如果A&B==0, ...

  9. css全站字体,中文英文不同,粗细统一

    @font-face { font-family: vwfont; src: url(/shop-m/public/fonts/VWText-Regular.otf); } @font-face { ...

  10. 问题 A: 【贪心】排队接水

    问题 A: [贪心]排队接水 时间限制: 1 Sec  内存限制: 128 MB[命题人:外部导入] 题目描述 有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种 ...