C#影院售票系統(tǒng)畢業(yè)設(shè)計(jì)(1)
C#學(xué)習(xí)經(jīng)歷從基本語(yǔ)法結(jié)構(gòu)到窗體再到面向?qū)ο蠼K于走完了.NET初級(jí)程序員的道路,用了大概一天半的時(shí)間做完這個(gè)練手項(xiàng)目《影院售票系統(tǒng)》,先上效果截圖一張
抽出時(shí)間做些這個(gè)對(duì)目前的我來(lái)說(shuō)算不小的項(xiàng)目。
用到的知識(shí)點(diǎn)有:面向?qū)ο笏枷搿reeView、XML讀取、File文件流、泛型集合,這里面對(duì)我來(lái)說(shuō)難度最大的是面向?qū)ο笈c泛型集合的結(jié)合,看來(lái)學(xué)習(xí)一門(mén)編程語(yǔ)言的難點(diǎn)還是在設(shè)計(jì)思想上。
再來(lái)介紹一下項(xiàng)目需求:在影片列表中選擇某個(gè)時(shí)段的一場(chǎng)電影,單擊座位選擇一個(gè)種類的電影票,并創(chuàng)建電影,計(jì)算價(jià)格并打印影票信息,然后該座位被置為紅色表示已經(jīng)售出。
影院每天更新放映列表,系統(tǒng)支持實(shí)時(shí)查看,包括電影放映場(chǎng)次時(shí)間、電影概況。
影院提供三類影票:普通票、贈(zèng)票和學(xué)生票(贈(zèng)票免費(fèi);學(xué)生票有折扣)
允許用戶查看某場(chǎng)次座位的售出情況
支持購(gòu)票,并允許用戶選座
用戶可以選擇場(chǎng)次、影票類型及空閑座位進(jìn)行購(gòu)票,并打印電影票
系統(tǒng)可以保存銷售情況,并允許對(duì)其進(jìn)行恢復(fù)
一、問(wèn)題分析
1.系統(tǒng)開(kāi)發(fā)步驟
(1)明確需求
(2)設(shè)計(jì)類
(3)創(chuàng)建項(xiàng)目
(4)確定編碼順序
1.主窗體
2.查看新放映列表
3.查看電影介紹
4.查看影票票價(jià)
5.查看放映廳座位
6.購(gòu)票和打印電影票
7.繼續(xù)購(gòu)票
(5)測(cè)試
二、類的設(shè)計(jì)
獻(xiàn)上這9個(gè)類的代碼,根據(jù)依賴編寫(xiě)類的順序,不能完全按照上面順序
1.Seat:保存影院的座位信息,主要屬性如下
座位號(hào)(SeatNum):string類型
座位賣出狀態(tài)顏色(Color):System.Drawing.Color類型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
namespace 影院售票系統(tǒng)
{
/// <summary>
/// 保存影院的座位信息
/// </summary>
public class Seat
{
public Seat() { }
public Seat(string seatNum,Color color)
{
this.SeatNum = seatNum;
this.Color = color;
}
private string _seatNum;
/// <summary>
/// 座位號(hào)
/// </summary>
public string SeatNum
{
get { return _seatNum; }
set { _seatNum = value; }
}
private Color _color;
/// <summary>
/// 座位賣出狀態(tài)顏色
/// </summary>
public Color Color
{
get { return _color; }
set { _color = value; }
}
}
}
2.Movie:電影類
電影名(MovieName):string類型
海報(bào)圖片路徑(Poster):string類型
導(dǎo)演名(Director):string類型
主演(Actor):string類型
電影類型(MovieType):MovieType自定義枚舉類型
定價(jià)(Price):int類型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 影院售票系統(tǒng)
{
/// <summary>
/// 電影類
/// </summary>
public class Movie
{
private string _movieName;
/// <summary>
/// 電影名
/// </summary>
public string MovieName
{
get { return _movieName; }
set { _movieName = value; }
}
private string _poster;
/// <summary>
/// 海報(bào)圖片名
/// </summary>
public string Poster
{
get { return _poster; }
set { _poster = value; }
}
private string _director;
/// <summary>
/// 導(dǎo)演名
/// </summary>
public string Director
{
get { return _director; }
set { _director = value; }
}
private string _actor;
/// <summary>
/// 主演
/// </summary>
public string Actor
{
get { return _actor; }
set { _actor = value; }
}
private int _price;
/// <summary>
/// 定價(jià)
/// </summary>
public int Price
{
get { return _price; }
set { _price = value; }
}
/// <summary>
/// 電影類型
/// </summary>
public MovieType MovieType { get; set; }
}
/// <summary>
/// 電影類型,1喜劇2戰(zhàn)爭(zhēng)3愛(ài)情
/// </summary>
public enum MovieType
{
/// <summary>
/// 動(dòng)作片
/// </summary>
Action = 0,
/// <summary>
/// 戰(zhàn)爭(zhēng)片
/// </summary>
War = 1,
/// <summary>
/// 愛(ài)情片
/// </summary>
Comedy = 2
}
}
3.Ticket:電影票父類,保存電影票信息
放映場(chǎng)次(ScheduleItem):ScheduleItem自定義類
所屬座位對(duì)象(Seat):Seat自定義類型
票價(jià)(Price):int類型
計(jì)算票價(jià)的虛方法CalcPrice()
打印售票信息的虛方法Print()
顯示當(dāng)前售出票信息的虛方法Show()
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace 影院售票系統(tǒng)
{
/// <summary>
/// 電影票父類
/// </summary>
public class Ticket
{
public Ticket() { }
public Ticket(ScheduleItem sch,Seat seat)
{
this.ScheduItem = sch;
this.Seat = seat;
}
private Seat _seat = new Seat();
/// <summary>
/// 所屬座位
/// </summary>
public Seat Seat
{
get { return _seat; }
set { _seat = value; }
}
private int _price;
/// <summary>
/// 票價(jià)
/// </summary>
public int Price
{
get { return _price; }
set { _price = value; }
}
/// <summary>
/// 放映場(chǎng)次
/// </summary>
public ScheduleItem ScheduItem { get; set; }
/// <summary>
/// 計(jì)算票價(jià)
/// </summary>
public virtual void CalcPrice()
{
this.Price = ScheduItem.Movie.Price;
}
/// <summary>
/// 打印售票信息
/// </summary>
public virtual void Print()
{
string info = string.Format("************************************************\n\t青鳥(niǎo)影院\n------------------------------------------------\n電影名:\t{0}\n時(shí)間:\t{1}\n座位號(hào):\t{2}\n價(jià)格:\t{3}\n************************************************", this.ScheduItem.Movie.MovieName, this.ScheduItem.Time, this.Seat.SeatNum, this.Price);
MessageBox.Show(info);
//存到文件中
string fileName = this.ScheduItem.Time.Replace(":", "-")+" "+this.Seat.SeatNum+".txt";
FileStream fs = new FileStream(fileName,FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
sw.Write(info);
sw.Close();
fs.Close();
}
/// <summary>
/// 顯示當(dāng)前售票信息
/// </summary>
public virtual void Show()
{
string info = string.Format("已售出!\n普通票!");
MessageBox.Show(info);
}
}
}
4.StudentTicket:學(xué)生票子類,繼承父類Ticket
學(xué)生票的折扣(Discount):int類型
重寫(xiě)父類計(jì)算票價(jià)CalcPrice
重寫(xiě)父類打印售票信息的Print()
重寫(xiě)父類顯示當(dāng)前出票信息的Show()方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace 影院售票系統(tǒng)
{
/// <summary>
/// 學(xué)生票
/// </summary>
public class StudentTicket : Ticket
{
public StudentTicket() { }
public StudentTicket(ScheduleItem sch, Seat seat, int discount)
: base(sch, seat)
{
this.Discount = discount;
}
private int _discount;
/// <summary>
/// 學(xué)生票的折扣
/// </summary>
public int Discount
{
get { return _discount; }
set { _discount = value; }
}
/// <summary>
/// 計(jì)算學(xué)生票價(jià)
/// </summary>
public override void CalcPrice()
{
this.Price =this.ScheduItem.Movie.Price* Discount / 10;
}
/// <summary>
/// 打印學(xué)生票的售票信息
/// </summary>
public override void Print()
{
string info = string.Format("************************************************\n\t青鳥(niǎo)影院(學(xué)生)\n------------------------------------------------\n電影名:\t{0}\n時(shí)間:\t{1}\n座位號(hào):\t{2}\n價(jià)格:\t{3}\n************************************************", this.ScheduItem.Movie.MovieName, this.ScheduItem.Time, this.Seat.SeatNum, this.Price);
MessageBox.Show(info);
//存到文件中
string fileName = this.ScheduItem.Time.Replace(":", "-") + " " + this.Seat.SeatNum + ".txt";
FileStream fs = new FileStream(fileName, FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
sw.Write(info);
sw.Close();
fs.Close();
}
/// <summary>
/// 顯示當(dāng)前售出票信息
/// </summary>
public override void Show()
{
string info = string.Format("已售出!\n{0}折學(xué)生票!",this.Discount);
MessageBox.Show(info);
}
}
}
5.FreeTicket:贈(zèng)票子類,繼承父類Ticket
獲得贈(zèng)票者的名字屬性(CustomerName):string類型
重寫(xiě)父類計(jì)算票價(jià)CalcPrice()
重寫(xiě)父類打印售票信息Print()
重寫(xiě)父類顯示當(dāng)前出票信息Show()
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace 影院售票系統(tǒng)
{
/// <summary>
/// 贈(zèng)票
/// </summary>
public class FreeTicket:Ticket
{
public FreeTicket() { }
public FreeTicket(ScheduleItem sch,Seat seat,string name)
{
this.Seat = seat;
this.CustomerName = name;
this.ScheduItem = sch;
}
private string _customerName;
/// <summary>
/// 獲得贈(zèng)票者的名字
/// </summary>
public string CustomerName
{
get { return _customerName; }
set { _customerName = value; }
}
/// <summary>
/// 計(jì)算票價(jià)
/// </summary>
public override void CalcPrice()
{
this.Price = 0;
}
/// <summary>
/// 打印售票信息
/// </summary>
public override void Print()
{
string info = string.Format("************************************************\n\t青鳥(niǎo)影院(贈(zèng)票)\n------------------------------------------------\n電影名:\t{0}\n時(shí)間:\t{1}\n座位號(hào):\t{2}\n姓名:\t{3}\n************************************************", this.ScheduItem.Movie.MovieName, this.ScheduItem.Time, this.Seat.SeatNum, this.CustomerName);
MessageBox.Show(info);
//存到文件中
string fileName = this.ScheduItem.Time.Replace(":", "-") + " " + this.Seat.SeatNum + ".txt";
FileStream fs = new FileStream(fileName, FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
sw.Write(info);
sw.Close();
fs.Close();
}
/// <summary>
/// 顯示當(dāng)前售出票信息
/// </summary>
public override void Show()
{
MessageBox.Show("已售出!\n贈(zèng)票!");
}
}
}
6.ScheduleItem:影院每天計(jì)劃放映計(jì)劃的場(chǎng)次,保存每場(chǎng)電影的信息
放映時(shí)間屬性(Time):string類型
本場(chǎng)所放映電影屬性(Movie):Movie自定義類型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 影院售票系統(tǒng)
{
/// <summary>
/// 影院每天計(jì)劃放映的場(chǎng)次,保存每場(chǎng)電影的信息
/// </summary>
public class ScheduleItem
{
private string _time;
/// <summary>
/// 放映時(shí)間
/// </summary>
public string Time
{
get { return _time; }
set { _time = value; }
}
private Movie _movie = new Movie();
/// <summary>
/// 本場(chǎng)放映的電影
/// </summary>
public Movie Movie
{
get { return _movie; }
set { _movie = value; }
}
private List<Ticket> _soldTickets=new List<Ticket>();
private Dictionary<string, Seat> _seats=new Dictionary<string,Seat>();
/// <summary>
/// 本場(chǎng)次的座位狀態(tài)
/// </summary>
public Dictionary<string, Seat> Seats
{
get { return _seats; }
set { _seats = value; }
}
}
}
7.Schedule:放映計(jì)劃類
放映場(chǎng)次屬性(Items):自定義泛型集合Dictionary<string,ScheduleItem>
讀取XML文件獲取放映計(jì)劃集合的LoadItems()方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace 影院售票系統(tǒng)
{
/// <summary>
/// 放映計(jì)劃類,保存影院當(dāng)天的放映計(jì)劃集合
/// </summary>
public class Schedule
{
/// <summary>
/// 放映場(chǎng)次
/// </summary>
public Dictionary<string, ScheduleItem> Items = new Dictionary<string, ScheduleItem>();
/// <summary>
/// 讀取XML文件獲取放映計(jì)劃集合
/// </summary>
public void LoadItems()
{
Items.Clear();
XmlDocument xml = new XmlDocument();
xml.Load("ShowList.xml");
XmlElement root = xml.DocumentElement;
foreach (XmlNode item in root.ChildNodes)
{
Movie movie = new Movie();
movie.MovieName = item["Name"].InnerText;
movie.Poster = item["Poster"].InnerText;
movie.Director = item["Director"].InnerText;
movie.Actor = item["Actor"].InnerText;
switch (item["Type"].InnerText)
{
case "Action":
movie.MovieType = MovieType.Action;
break;
case "War":
movie.MovieType = MovieType.War;
break;
case "Comedy":
movie.MovieType = MovieType.Comedy;
break;
}
movie.Price = Convert.ToInt32(item["Price"].InnerText);
if (item["Schedule"].HasChildNodes)
{
foreach (XmlNode item2 in item["Schedule"].ChildNodes)
{
ScheduleItem schItem = new ScheduleItem();
schItem.Time = item2.InnerText;
schItem.Movie = movie;
Items.Add(schItem.Time, schItem);
}
}
}
}
}
}
8.Cinema:影院類,保存放映計(jì)劃和座位類
座位集合屬性(Seat):自定義泛型集合Dictionary<string,Seat>
放映計(jì)劃Schedule:Schedule自定義類型
已售出電影票的集合(SoldTicket):自定義泛型集合List<Ticket>
保存和讀取售票情況的Save()和Load()方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 影院售票系統(tǒng)
{
/// <summary>
/// 影院類
/// </summary>
public class Cinema
{
private Dictionary<string, Seat> _seats = new Dictionary<string, Seat>();
/// <summary>
/// 座位集合
/// </summary>
public Dictionary<string, Seat> Seats
{
get { return _seats; }
set { _seats = value; }
}
private Schedule _schedule = new Schedule();
/// <summary>
/// 放映計(jì)劃
/// </summary>
public Schedule Schedule
{
get { return _schedule; }
set { _schedule = value; }
}
private List<Ticket> _soldTickets=new List<Ticket>();
/// <summary>
/// 已經(jīng)售出的票
/// </summary>
public List<Ticket> SoldTickets
{
get { return _soldTickets; }
set { _soldTickets = value; }
}
/// <summary>
/// 保存售票信息到文件中
/// </summary>
public void Save()
{
//Save和Load的代碼在窗體的代碼實(shí)現(xiàn)了
}
/// <summary>
/// 從文件中讀取售票信息
/// </summary>
public void Load() { }
}
}
9.工具類
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 影院售票系統(tǒng)
{
/// <summary>
/// 工具類
/// </summary>
public class TicketUtil
{
/// <summary>
/// 創(chuàng)建電影票
/// </summary>
/// <returns></returns>
public static Ticket CreateTicket(ScheduleItem sch,Seat seat,int discount,string customerName,string type)
{
Ticket ticket=null;
switch (type)
{
case "StudentTicket":
ticket = new StudentTicket(sch,seat,discount);
break;
case "FreeTicket":
ticket = new FreeTicket(sch,seat,customerName);
break;
default:
ticket = new Ticket(sch,seat);
break;
}
return ticket;
}
}
}
下篇文章將繼續(xù)更新,內(nèi)容有電影院座位的動(dòng)態(tài)繪制、電影信息綁定到窗體中展現(xiàn)出來(lái),希望大家不要走開(kāi),有什么地方需要改進(jìn)的歡迎大家指出,共同探討進(jìn)步。
上一篇:C#判斷三角形的類型
欄 目:C#教程
下一篇:C#影院售票系統(tǒng)畢業(yè)設(shè)計(jì)(3)
本文標(biāo)題:C#影院售票系統(tǒng)畢業(yè)設(shè)計(jì)(1)
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/6862.html
您可能感興趣的文章
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已安裝軟件變化的方法
- 01-10C#實(shí)現(xiàn)自定義windows系統(tǒng)日志的方法
- 01-10C#實(shí)現(xiàn)寫(xiě)系統(tǒng)日志的方法
- 01-10C#實(shí)現(xiàn)基于加減按鈕形式控制系統(tǒng)音量及靜音的方法
- 01-10C#影院售票系統(tǒng)畢業(yè)設(shè)計(jì)(2)
- 01-10C#影院售票系統(tǒng)畢業(yè)設(shè)計(jì)(3)
- 01-10C#影院售票系統(tǒng)畢業(yè)設(shè)計(jì)(4)
- 01-10Unity3d獲取系統(tǒng)時(shí)間
- 01-10使用C#實(shí)現(xiàn)讀取系統(tǒng)配置文件的代碼實(shí)例講解
- 01-10Windows系統(tǒng)中使用C#讀取文本文件內(nèi)容的小示例


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁(yè)無(wú)法打開(kāi)的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過(guò)重寫(xiě)Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法


