首页
IT
登录
6mi
u
盘
搜
搜 索
IT
论学习的重要性之--影院售票系统
论学习的重要性之--影院售票系统
xiaoxiao
2021-03-25
87
首先,
是主窗体的搭建。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 影院售票系统 { public partial class FrmMain : Form { public FrmMain() { InitializeComponent(); } Cinema cinema = new Cinema(); Dictionary<string, Label> lables = new Dictionary<string, Label>(); int ticket = 0; string key = null; private void Form1_Load(object sender, EventArgs e) { this.label11.Text = ""; this.label10.Text = ""; this.label16.Text = ""; this.label14.Text = ""; this.label13.Text = ""; this.label12.Text = ""; this.label15.Text = ""; this.textBox1.Enabled = false; this.comboBox1.Enabled = false; this.radioButton1.Checked = true; cinema = new Cinema(); //初始化放映厅座位 ZuoWei(); cinema.Load(); } private void InitTreeView() { treeView1.BeginUpdate(); treeView1.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); treeView1.Nodes.Add(movieNode); } TreeNode timeNode = new TreeNode(item.Time); movieNode.Nodes.Add(timeNode); movieName = item.Movie.MovieName; } treeView1.EndUpdate(); } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { TreeNode node = treeView1.SelectedNode; if(node== null) return; if(node.Level!=1)return; key = node.Text; //将电影详细信息显示出来 this.label16.Text = cinema.Schedule.Items[key].Movie.MovieName; this.label10.Text = cinema.Schedule.Items[key].Movie.Director; this.label11.Text = cinema.Schedule.Items[key].Movie.Actor; this.label14.Text = cinema.Schedule.Items[key].Movie.Price.ToString(); this.label13.Text = cinema.Schedule.Items[key].Time; this.label12.Text = cinema.Schedule.Items[key].Movie.MovieType.ToString(); this.pictureBox2.Image = Image.FromFile(cinema.Schedule.Items[key].Movie.Poster); this.label15.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(); } private void ClearSeat() { foreach (Seat seat in cinema.Seats.Values) { seat.Color = Color.Yellow; } } //更新座位状态 private void UpdateSeat() { foreach (string key in cinema.Seats.Keys) { lables[key].BackColor = cinema.Seats[key].Color; } } // 赠票 private void radioButton2_CheckedChanged(object sender, EventArgs e) { this.textBox1.Enabled = true; this.comboBox1.Enabled = false; this.comboBox1.Text = ""; //设置-- 优惠价 this.label15.Text = "0"; } //学生票 private void radioButton3_CheckedChanged(object sender, EventArgs e) { this.textBox1.Enabled = false; this.textBox1.Text = ""; this.comboBox1.Enabled = true; this.comboBox1.Text = "7"; //根据当前选中的电影,设置“优惠价” if (this.label8.Text!="") { int price = int.Parse(this.label14.Text); int discount = int.Parse(this.comboBox1.Text); this.label15.Text = (price*discount/10).ToString(); } } //普通票 private void radioButton1_CheckedChanged(object sender, EventArgs e) { this.textBox1.Enabled = false; this.textBox1.Text = ""; this.comboBox1.Enabled = false; this.comboBox1.Text = ""; this.label15.Text = ""; } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (this.label14.Text !="") { int price = int.Parse(this.label8.Text); int discount = int.Parse(this.comboBox1.Text); this.label15.Text = (price * discount / 10).ToString(); } } //选择 "继续销售" //判断放映列表是否为空 //if (cinema.Schedule.Items.Count == 0) //{ // cinema.Schedule.LoadItems(); //} //InitTreeView(); private void lblSeat_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(this.label16.Text)) { MessageBox.Show("您还没选择电影", "提示"); return; } ticket++; try { string seatNum = ((Label)sender).Text.ToString(); string customerName = this.textBox1.Text.ToString(); int discount = 0; string type = ""; if (this.radioButton3.Checked) { type = "student"; if (this.comboBox1.Text == null) { MessageBox.Show("请输入折扣数", "提示"); return; } else { discount = int.Parse(this.comboBox1.Text); } } else if (this.radioButton2.Checked) { if (String.IsNullOrEmpty(this.textBox1.Text)) { MessageBox.Show("请输入赠票者姓名", "提示"); return; } else { type = "free"; } } //调用工具类创建票 Ticket newTicket = TicketUtil.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.Question); if (result == DialogResult.Yes) { cinema.Seats[seatNum].Color = Color.Red; UpdateSeat(); newTicket.CalcPrice(); cinema.SoldTickets.Add(newTicket); label15.Text = newTicket.Price.ToString(); newTicket.Print(); } else if (result == DialogResult.No) { return; } } else { //显示当前售出票的信息 foreach (Ticket ticket0 in cinema.SoldTickets) { //判断是否为同场次、同电影、同座位号 if (ticket0.Seat.SeatNum == seatNum && ticket0.ScheduleItem.Time == treeView1.SelectedNode.Text && ticket0.ScheduleItem.Movie.MovieName == treeView1.SelectedNode.Parent.Text) { ticket0.Show(); } } } } catch (Exception ex) { MessageBox.Show(ex.ToString()); throw; } } public void ZuoWei() { Label label; Seat seat; for (int i = 1; i <= 5; i++) { for (int j = 1; j <= 5; j++) { label = new Label(); //设置座位号 label.Text = i.ToString() + "-" + j.ToString(); //设置背景颜色 label.BackColor = Color.Yellow; //设置尺寸 label.Size = new System.Drawing.Size(50, 25); //设置位置 label.Location = new Point((j*100), (i*60)); label.TextAlign = ContentAlignment.MiddleCenter; //所有的标签都绑定到同一事件 // tabControl1.TabPages[0].Controls.Add(label); tabPage2.Controls.Add(label); label.Click += new System.EventHandler(lblSeat_Click); lables.Add(label.Text, label); //实例化一个座位 seat = new Seat(j.ToString() + "-" + i.ToString(), Color.Yellow); //保存的座位集合 cinema.Seats.Add(seat.SeatNum, seat); } } } private void 继续售票ToolStripMenuItem_Click(object sender, EventArgs e) { // 判断放映列表是否为空 if (cinema.Schedule.Items.Count == 0) { cinema.Schedule.LoadItems(); } InitTreeView(); } private void 获取新列表ToolStripMenuItem_Click(object sender, EventArgs e) { Schedule sche=new Schedule(); cinema.Schedule = sche; cinema.Schedule.LoadItems(); cinema.SoldTickets.Clear(); InitTreeView(); } private void 购票ToolStripMenuItem_Click(object sender, EventArgs e) { } private void 保存ToolStripMenuItem_Click(object sender, EventArgs e) { cinema.Save(); } private void FrmMain_FormClosing(object sender, FormClosingEventArgs e) { DialogResult close; close = MessageBox.Show("是否保存当前销售状态?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information); if (close == DialogResult.Yes) { //退出时保存Cinema对象 cinema.Save(); } }
其次,六个类的建立,
以及XML文件的解析。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; namespace 影院售票系统 { public class Schedule { public Dictionary<string, ScheduleItem> Items = new Dictionary<string, ScheduleItem>(); public Schedule() { Items = new Dictionary<string, ScheduleItem>(); } public void LoadItems() { if (Items == null) Items = new Dictionary<string, ScheduleItem>(); Items.Clear(); XmlDocument myXml = new XmlDocument(); myXml.Load("ShowList.xml"); XmlNode feednode = myXml.DocumentElement; //中间变量 string movieName = null; string playBill = null; string director = null; string actor = null; string movieType = null; string price = null; foreach (XmlNode node in feednode.ChildNodes) { if (node.Name == "Movie") { foreach (XmlNode subNode in node.ChildNodes) { switch (subNode.Name) { case "Name": movieName = subNode.InnerText; break; case "Poster": playBill = subNode.InnerText; break; case "Director": director = subNode.InnerText; break; case "Actor": actor = subNode.InnerText; break; case "Type": movieType = subNode.InnerText; break;
case "Price": price = subNode.InnerText; break; case "Schedule": foreach (XmlNode scheduleNode in subNode.ChildNodes) { ScheduleItem item = new ScheduleItem(); item.Time = scheduleNode.InnerText; item.Movie.MovieName = movieName; item.Movie.Poster = playBill; item.Movie.Director = director; item.Movie.Actor = actor; item.Movie.MovieType = (MovieType) Enum.Parse(typeof (MovieType), movieType); item.Movie.Price = int.Parse(price); Items.Add(item.Time, item); } break; } } } } } } }
打印售票信息:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 影院售票系统 { public class StudentTicket:Ticket { public int Discount { get; set; } public StudentTicket(ScheduleItem scheduleitem, Seat seat, int discount) : base(scheduleitem, seat) { this.Discount = discount; } public override void CalcPrice() { this.Price = this.ScheduleItem.Movie.Price * Discount / 10; } public override void Print() { string fileName = this.ScheduleItem.Time.Replace(":", "-") + " " + this.Seat.SeatNum + ".txt"; FileStream fs = new FileStream(fileName, FileMode.Create); StreamWriter sw = new StreamWriter(fs); sw.WriteLine("***************************"); sw.WriteLine(" 青鸟影院 (学生)"); sw.WriteLine("---------------------------"); sw.WriteLine(" 电影名:\t{0}", this.ScheduleItem.Movie.MovieName); sw.WriteLine(" 时间: \t{0}", this.ScheduleItem.Time); sw.WriteLine(" 座位号:\t{0}", this.Seat.SeatNum); sw.WriteLine(" 价格: \t{0}", this.Price.ToString()); sw.WriteLine("***************************"); sw.Close(); fs.Close(); } public override void Show() { MessageBox.Show("已售出!\n\n" + this.Discount + "折学生价"); } } }
转载请注明原文地址: https://ju.6miu.com/read-20437.html
技术
最新回复
(
0
)