?? mainform.cs
字號:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace MyCinema
{
public partial class MainForm : Form
{
Cinema cinema;
Dictionary<string, Label> labels = new Dictionary<string, Label>();
int ticket = 0;
string key = null;
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
this.lblActor.Text = "";
this.lblDirector.Text = "";
this.lblMovieName.Text = "";
this.lblPrice.Text = "";
this.lblTime.Text = "";
this.lblType.Text = "";
this.lblCalcPrice.Text = "";
this.txtCustomer.Enabled = false;
this.cmbDisCount.Enabled = false;
this.rdoNormal.Checked = true;
cinema = new Cinema();
InitSeats(7, 5, tpCinema);
//初始化座位
cinema.Load();
}
/// <summary>
/// 初始化座位
/// </summary>
/// <param name="seatRow">行數</param>
/// <param name="seatLine">列數</param>
/// <param name="tb"></param>
private void InitSeats(int seatRow,int seatLine,TabPage tb)
{
Label label;
Seat seat;
for (int i = 0; i < seatRow; i++)
{
for (int j = 0; j < seatLine; j++)
{
label = new Label();
label.BackColor = Color.Yellow;
label.AutoSize = false;
label.Font = new System.Drawing.Font("宋體", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point,((byte)(134)));
label.Location = new System.Drawing.Point(59, 60);
label.Name = "lbl" + (j + 1).ToString() + "_" + (i + 1).ToString();
label.Size = new System.Drawing.Size(50, 25);
//設置座位號
label.Text = (j + 1).ToString() + "-" + (i + 1).ToString();
label.TextAlign = ContentAlignment.MiddleCenter;
label.Location = new Point(60 + (i * 90), 60 + (j * 60));
//所有的標簽都綁定到同一事件
label.Click += new System.EventHandler(lblSeat_Click);
tb.Controls.Add(label);
labels.Add(label.Text, label);
//實例化一個座位
seat = new Seat((j + 1).ToString() + "-" + (i + 1).ToString(), Color.Yellow);
//保存的座位集合
cinema.Seats.Add(seat.SeatNum, seat);
}
}
}
private void tsmiMovies_Click(object sender, EventArgs e)
{
//判斷放映列表是否為空
if (cinema.Schedule.Items.Count == 0)
{
cinema.Schedule.LoadItems();
}
InitTreeView();
}
private void tsmiNew_Click(object sender, EventArgs e)
{
cinema.Schedule.LoadItems();
cinema.SoldTickets.Clear();
InitTreeView();
}
/// <summary>
/// 初始化TreeView控件
/// </summary>
private void InitTreeView()
{
tvMovies.BeginUpdate();
tvMovies.Nodes.Clear();
string movieName = null;
TreeNode movieNode = null;
foreach (ScheduleItem item in cinema.Schedule.Items.Values)
{
if (movieName != item.Movie.MovieName)
{
movieNode = new TreeNode(item.Movie.MovieName);
tvMovies.Nodes.Add(movieNode);
}
TreeNode timeNode = new TreeNode(item.Time);
movieNode.Nodes.Add(timeNode);
movieName = item.Movie.MovieName;
}
tvMovies.EndUpdate();
}
/// <summary>
/// 選擇一場電影事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tvMovies_AfterSelect(object sender, TreeViewEventArgs e)
{
TreeNode node = tvMovies.SelectedNode;
if (node == null) return;
if (node.Level != 1) return;
key = node.Text;
//將詳細信息顯示
this.lblMovieName.Text = cinema.Schedule.Items[key].Movie.MovieName;
this.lblDirector.Text = cinema.Schedule.Items[key].Movie.Director;
this.lblActor.Text = cinema.Schedule.Items[key].Movie.Actor;
this.lblPrice.Text = cinema.Schedule.Items[key].Movie.Price.ToString();
this.lblTime.Text = cinema.Schedule.Items[key].Time;
this.lblType.Text = cinema.Schedule.Items[key].Movie.MovieType.ToString();
this.picMovie.Image = Image.FromFile(cinema.Schedule.Items[key].Movie.Poster);
this.lblCalcPrice.Text = "";
//清空座位
ClearSeat();
//遍歷該場電影的座位銷售情況
foreach (Ticket ticket in cinema.SoldTickets)
{
foreach (Seat seat in cinema.Seats.Values)
{
if ((ticket.ScheduleItem.Time == key)
&&(ticket.Seat.SeatNum == seat.SeatNum))
{
seat.Color = Color.Red;
}
}
}
UpdateSeat();
}
/// <summary>
/// 清空座位
/// </summary>
private void ClearSeat()
{
foreach (Seat seat in cinema.Seats.Values)
{
seat.Color = Color.Yellow;
}
}
/// <summary>
/// 更新座位狀態(tài)
/// </summary>
private void UpdateSeat()
{
foreach (string key in cinema.Seats.Keys)
{
labels[key].BackColor = cinema.Seats[key].Color;
}
}
/// <summary>
/// 點擊一個座位
/// 買票事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lblSeat_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(this.lblMovieName.Text))
{
MessageBox.Show("您還沒選擇電影");
return;
}
ticket++;
try
{
string seatNum = ((Label)sender).Text.ToString();
string customerName = this.txtCustomer.Text.ToString();
int discount = 0;
string type = "";
if (this.rdoStudent.Checked)
{
type = "student";
if (this.cmbDisCount.Text == null)
{
MessageBox.Show("請輸入折扣數");
return;
}
else
{
discount = int.Parse(this.cmbDisCount.Text);
}
}
else if (this.rdoFree.Checked)
{
if (String.IsNullOrEmpty(this.txtCustomer.Text))
{
MessageBox.Show("請輸入贈票者姓名");
return;
}
else
{
type = "free";
}
}
//調用工廠創(chuàng)建票
Ticket newTicket = TicketFactory.CreateTicket(cinema.Schedule.Items[key], cinema.Seats[seatNum],
discount, customerName, type);
if (cinema.Seats[seatNum].Color == Color.Yellow)
{
//打印
DialogResult result;
result = MessageBox.Show("是否購買?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (result == DialogResult.Yes)
{
cinema.Seats[seatNum].Color = Color.Red;
UpdateSeat();
cinema.SoldTickets.Add(newTicket);
newTicket.CalcPrice();
lblCalcPrice.Text = newTicket.Price.ToString();
newTicket.Print();
}
else if (result == DialogResult.No)
{
return;
}
}
else
{
MessageBox.Show("已售出.");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void rdoVip_CheckedChanged(object sender, EventArgs e)
{
this.txtCustomer.Enabled = true;
this.cmbDisCount.Enabled = false;
this.cmbDisCount.Text = "";
}
private void rdoStudent_CheckedChanged(object sender, EventArgs e)
{
this.txtCustomer.Enabled = false;
this.txtCustomer.Text = "";
this.cmbDisCount.Enabled = true;
this.cmbDisCount.Text = "5";
}
private void rdoNormal_CheckedChanged(object sender, EventArgs e)
{
this.cmbDisCount.Enabled = false;
this.txtCustomer.Text = "";
this.txtCustomer.Enabled = false;
this.cmbDisCount.Text = "";
}
private void tsmiExit_Click(object sender, EventArgs e)
{
//退出時序列化Cinema對象
cinema.Save();
this.Dispose();
}
private void tsmiSave_Click(object sender, EventArgs e)
{
cinema.Save();
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult close;
close = MessageBox.Show("是否保存當前銷售狀態(tài)?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (close == DialogResult.Yes)
{
cinema.Save();
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -