C#影院售票系統(tǒng)畢業(yè)設(shè)計(jì)(3)
前一篇文章《C#影院售票系統(tǒng)畢業(yè)設(shè)計(jì)(2)》中總結(jié)了動態(tài)繪制控件、票類型的切換以及數(shù)據(jù)在窗體中的展現(xiàn)。今天繼續(xù)總結(jié)!
本文總結(jié)項(xiàng)目中最核心的部分--購票、座位顏色狀態(tài)的改變及場次座位狀態(tài)的顯示。
分析:
1.在選中時間(場次)后更新出座位狀態(tài)(label實(shí)現(xiàn)),售出的為紅色,未售出的顯示為黃色。
2.已售出提示已經(jīng)售出并不進(jìn)行任何操作,未售出的詢問是否購買。
3.根據(jù)選擇的是普通票、贈票、還是學(xué)生票分別創(chuàng)建不同的票對象
如果選擇贈票則需要檢測贈送者否填寫
如果選擇的是學(xué)生票需要檢測折扣是否選擇
4.獲取選中座位的座位號,調(diào)用工具類的CreateTicket()方法創(chuàng)建對應(yīng)選中類型的票,普通票則直接使用Ticket類創(chuàng)建
5.用戶選擇購買后將座位集合的顏色改成紅色;重新使用票類的計(jì)算價格方法;將售出的票加入到Cinema類中的SoldTickets集合中;更新座位顏色狀態(tài),上代碼詳解
try { //獲取當(dāng)前被點(diǎn)擊座位標(biāo)簽的座位號(Text屬性) string seatNum = ((Label)sender).Text.ToString(); //贈送者名字 string customerName = this.txtGiver.Text.ToString(); //折扣 int discount = 0; //票的類型 string type = ""; //如果學(xué)生票是選中的 if (this.rdoStuTicket.Checked) { type = "StudentTicket"; if (this.cboDiscount.Text == null) { MessageBox.Show("請輸入折扣數(shù)!", "提示"); return; } else { discount = int.Parse(this.cboDiscount.Text); } } //如果贈票是選中的 else if (this.rdoGiveTicket.Checked) { if (string.IsNullOrEmpty(this.txtGiver.Text)) { MessageBox.Show("請輸入贈票者姓名!", "提示"); return; } type = "FreeTicket"; } //創(chuàng)建票 使用工具類的靜態(tài)方法 Ticket newTicket = TicketUtil.CreateTicket(cinema.Schedule.Items[key], cinema.Seats[seatNum], discount, customerName, type); //如果當(dāng)前座位的顏色是黃色-待售出 if (cinema.Seats[seatNum].Color == Color.Yellow) { //詢問 DialogResult result = MessageBox.Show("是否購買?", "提示", MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { //重新計(jì)算票價 newTicket.CalcPrice(); //將票加入到已經(jīng)售出票的集合 cinema.SoldTickets.Add(newTicket); //更新座位顏色狀態(tài) UpdateSeat(); lblPreferentialPrice.Text = newTicket.Price.ToString(); newTicket.Print(); //使座位集合的顏色狀態(tài)改變 cinema.Seats[seatNum].Color = Color.Red; } } //如果是已經(jīng)售出的票 else { //顯示當(dāng)前售票信息 foreach (Ticket ticket0 in cinema.SoldTickets) { //已售出票集合的座位號等于當(dāng)前點(diǎn)擊座位號 并且 選中的時間等于售出票的場次的時間 并且 售出票的場次計(jì)劃中電影名字等于TreeView選中時間的父節(jié)點(diǎn)也就是電影名稱 if (ticket0.Seat.SeatNum == seatNum && ticket0.ScheduItem.Time == treeView1.SelectedNode.Text && ticket0.ScheduItem.Movie.MovieName == treeView1.SelectedNode.Parent.Text) { ticket0.Show(); } } } } catch (Exception ex) { MessageBox.Show("請先選擇場次!" + ex.Message); }
這里面需要調(diào)用座位顏色更新的一個方法UpdateSeat(),先將Seats集合和labels集合的顏色初始化,也就是重置顏色為黃色,再根據(jù)售出票集合的信息將售出座位的顏色置為紅色
//重置labels集合label的顏色 foreach (string lkey in labels.Keys) { labels[lkey].BackColor = Color.Yellow; } //重置座位集合顏色 foreach (string key in cinema.Seats.Keys) { cinema.Seats[key].Color = Color.Yellow; } //遍歷售出票集合 foreach (Ticket ticket in cinema.SoldTickets) { //如果場次一致,并且電影名字一致 if (ticket.ScheduItem.Time == this.treeView1.SelectedNode.Text && ticket.ScheduItem.Movie.MovieName == this.lblName.Text) { //重新更改顏色 labels[ticket.Seat.SeatNum].BackColor = Color.Red; cinema.Seats[ticket.Seat.SeatNum].Color = Color.Red; } }
這樣就實(shí)現(xiàn)了購買票后座位顏色狀態(tài)的改變。
然后再根據(jù)選中的TreeView的時間(場次)節(jié)點(diǎn)刷新每場的中已經(jīng)售出的票。
就是之前第二篇的treeView1_AfterSelect這個事件,調(diào)用我們的UpdateSeat方法就行了,這樣每選擇一個場次就會更新一次座位售出情況。
以上就是本文的全部內(nèi)容,最后一篇文章《C#影院售票系統(tǒng)畢業(yè)設(shè)計(jì)(4)》繼續(xù)實(shí)現(xiàn)對銷售信息的本地保存、以及每次打開時載入上次的保存的銷售信息,并對整個項(xiàng)目做整體總結(jié)。
希望小編整理的這一系列文章對大家的學(xué)習(xí)有所幫助,希望大家可以喜歡。
相關(guān)文章
Unity輸出帶點(diǎn)擊跳轉(zhuǎn)功能的Log實(shí)現(xiàn)技巧詳解
這篇文章主要為大家介紹了Unity輸出帶點(diǎn)擊跳轉(zhuǎn)功能的Log實(shí)現(xiàn)技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11詳解C# 匿名對象(匿名類型)、var、動態(tài)類型 dynamic
隨著C#的發(fā)展,該語言內(nèi)容不斷豐富,開發(fā)變得更加方便快捷,C# 的鋒利盡顯無疑。下面通過本文給大家分享C# 匿名對象(匿名類型)、var、動態(tài)類型 dynamic,需要的的朋友參考下吧2017-09-09詳解C#如何將枚舉以下拉數(shù)據(jù)源的形式返回給前端
這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)將枚舉以下拉數(shù)據(jù)源的形式返回給前端,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-06-06