影院售票系统(2)
昨天上的少了个枚举图,补下
电影类型
public enum MovieType
{
Comedy,War,Romance,
Action,Cartoon,
Thriller,Adventure
}
一 先实现左边treeview的加载功能
就是左边那个。
treeview控件加载的是xml文件里的内容,感觉挺绕的。上代码
//初始化TreeView
public void InitTreeView()
{
this.treeView1.BeginUpdate();
this.treeView1.Nodes.Clear();
string movieName = null;
TreeNode movieNode = null;
foreach (ScheduleItem item in c.Schedule.Items.Values)
{
if (movieName != item.Movie.MovieName)
{
movieNode = new TreeNode(item.Movie.MovieName);
this.treeView1.Nodes.Add(movieNode);
}
TreeNode timeNode = new TreeNode(item.Time);
movieNode.Nodes.Add(timeNode);
movieName = item.Movie.MovieName;
}
this.treeView1.EndUpdate();
}
这里的c是影院类Cinema的实例化对象,我们要调的是Cinema类的Schedule类型的对象
public Schedule Schedule { get; set; } ; 在构造函数里将其实例化。
Schedule类的 LoadItems()方法解析了xml文件,并且存到了本类的
public Dictionary<string, ScheduleItem> Items 集合里,所以读取Items集合数据前先要加载LoadItems()方法。
二. 根据treeview点击加载右边的电影项目,这个比较简单,根据选择的节点作为钥匙key,调用Items集合key这个的值,然后一一赋予到label上面
//treeview事件,加载不同的电影海报
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
this.panel1.Visible = true;
TreeNode t = treeView1.SelectedNode;
if (t == null)
{
return;
}
if (t.Level != 1)
{
return;
}
key = t.Text;
this.label2.Text = c.Schedule.Items[key].Movie.MovieName;
this.label9.Text = c.Schedule.Items[key].Movie.Director;
this.label10.Text = c.Schedule.Items[key].Movie.Actor;
this.label11.Text = c.Schedule.Items[key].Movie.MovieType.ToString();
this.label12.Text = c.Schedule.Items[key].Time;
this.label13.Text = c.Schedule.Items[key].Movie.Price.ToString();
this.pictureBox1.Image = Image.FromFile(c.Schedule.Items[key].Movie.Poster);
// this.label13.Text = c.schedu.Items[key].Movie.Actor;
//清空座位
ClearSeat();
//遍历该场电影的座位销售情况
foreach (Ticket ticket in c.SoldTickets)
{
foreach (Seat seat in c.Seats.Values)
{
if ((ticket.ScheduleItem.Time == key)
&& (ticket.Seat.SeatNum == seat.SeatNum))
{
seat.Color = Color.Red;
}
}
}
UpdateSeat();
}
ClearSeat()和UpdateSeat()后面再讲,用于更新订票的座位情况的。