分享 | C#編寫的電影售票系統(tǒng)(附源碼+數(shù)據(jù)庫)
最近疫情真的很可怕,大家要注意保護好自己,響應(yīng)國家的號召。盡量不出門,可以利用這個時間好好充實自己。
也希望武漢和中國能盡快好起來,大家都健健康康,相安無事。
01 介紹
這個是小編上學(xué)期的C#課程結(jié)課作業(yè),是小組完成的。這次一并分享出來啦。嗯……為什么界面這么少女心呢,并不是小編有一顆少女心,而是因為UI部分是同組的女生負責(zé)設(shè)計的。

我們做的是一個有會員制的電影院購票系統(tǒng)。具有會員注冊功能,可區(qū)分會員和散客兩種身份,實現(xiàn)會員及折扣管理。購票具有挑選電影場次,選擇座位和查看電影信息等功能:




代碼獲取
關(guān)注我們的公眾號!
在后臺回復(fù)【CSTK】不包括【】即可獲取。
02 設(shè)計思路
在功能設(shè)計上,一個電影院購票系統(tǒng),首先需要具備最基礎(chǔ)的功能:影片選擇、場次選擇和座位選擇。
在用戶提交選擇后,需要支付模塊提示用戶付款并完成出票。為了吸引用戶,我們增加了會員的注冊和登錄模塊,為會員用戶提供折扣。
注冊與購票的支付我們的處理是預(yù)留一個接口,當(dāng)做簡單模擬,實際使用可以調(diào)用支付寶或微信的支付接口。
在界面設(shè)計上,我們?yōu)橄到y(tǒng)添加了好看的背景圖片。通過Detail欄展示用戶信息與折扣,通過Hot Movie欄在最吸引眼球展示熱映電影的海報,提高用戶的購買欲望。
最后,作為主要部分的座位選擇欄簡介明了,座位之間間隔明顯,有效的防止用戶錯誤操作。
03 具體設(shè)計
通過三層架構(gòu)來完成影院購票系統(tǒng)的開發(fā),將真?zhèn)€業(yè)務(wù)應(yīng)用劃分為:界面層(UI層)、業(yè)務(wù)邏輯層(BLL層)、數(shù)據(jù)訪問層(DAL層)。
對于復(fù)雜的系統(tǒng)分層讓結(jié)構(gòu)清晰,便于對系統(tǒng)進行整體的理解、把握;而且便于維護,將各部分之間的相互影響的程度降低到最小,系統(tǒng)基本的架構(gòu)可以通過工具自動生成代碼。當(dāng)數(shù)據(jù)庫發(fā)生改變時,只用重新生成代碼,改動業(yè)務(wù)邏輯層的部分代碼即可。
在實施的過程中,難點在于將三層結(jié)構(gòu)進行劃分,掌握各層之間的設(shè)計思路以及調(diào)用關(guān)系,下面內(nèi)容就結(jié)合代碼展示具體實現(xiàn)過程。
1) Model層
這層的作用是封裝數(shù)據(jù),使數(shù)據(jù)在三層中傳輸。例如Movie:
namespace Model{ public class Movie { [Key] public int MovieID { get; set; } public string MovieName{ get; set; } /// 電影名稱 public string Actor { get; set; } /// 主演 public string Director { get; set; }/// 導(dǎo)演名 public int Duration { get; set; } //時長 public string MovieType { get; set; }/// 電影類型 public string Poster{ get; set; } /// 海報圖片名 }}2) DAL層
這一層提供基本的數(shù)據(jù)訪問,實現(xiàn)代碼(以Movies為例):
namespace DAL{ public class MovieDAL { public static List GetAllMovies() { var MoviesQuery = from m in CinemaDbContext.CDbContext.Movies select m; return MoviesQuery.ToList(); }
public static Movie GetMovieByMovieID(int mID){ return CinemaDbContext.CDbContext.Movies.Find(mID); } }}3) BLL層
這一層負責(zé)處理業(yè)務(wù)邏輯,在本次的系統(tǒng)開發(fā)中,包括了與用戶和影票信息相關(guān)的處理。實現(xiàn)代碼(以TicketBLL為例):
namespace BLL{ public class TicketBLL { public static bool AddTickets(List tickets) { return true; } }}
4) UI層
這一層負責(zé)顯示和采集用戶操作。系統(tǒng)總共包含五個界面,分別為:用戶登錄界面、用戶注冊界面、影院主頁、票務(wù)信息確認界面、支付界面以及取票信息界面。
同時,使用Winform皮膚插件來實現(xiàn)對系統(tǒng)界面整體風(fēng)格的把控。下面將以界面的為單位來對其實現(xiàn)過程進行描述:
》用戶登錄界面
用戶將身份信息寫入文本框后,用其輸入的信息創(chuàng)建新的customer對象,通過調(diào)用BLL層的功能將輸入內(nèi)容與用戶信息比對,最后用判斷語句激活彈窗反饋登陸結(jié)果,登陸成功后進入到售票系統(tǒng)首頁。
同時,用戶可以點擊注冊按鈕,跳轉(zhuǎn)到注冊界面完成新用戶的注冊。
用戶將身份信息寫入文本框后,用其輸入的信息創(chuàng)建新的customer對象,通過調(diào)用BLL層的服務(wù)將新的用戶信息寫入數(shù)據(jù)庫,最后用判斷語句激活彈窗對注冊結(jié)果予以反饋。
04 數(shù)據(jù)庫設(shè)計
數(shù)據(jù)庫采用的是SQLSERVER,可以復(fù)制下面的腳本到查詢框執(zhí)行,即可得到數(shù)據(jù)庫和樣本數(shù)據(jù)。
系統(tǒng)中采用DbContext方式直接連接數(shù)據(jù)庫。一個DbContext映射了所有的數(shù)據(jù)庫表。具體代碼如下:
namespace Model{public class CinemaDbContext : DbContext{public static CinemaDbContext CDbContext = new CinemaDbContext();public CinemaDbContext() : base("data source=.\\SQLSERVER1;initial catalog=Cinema;Integrated Security=SSPI;") //構(gòu)造函數(shù),指定數(shù)據(jù)庫名稱的約定連接{//Code first會在第一次ef查詢的時候會對__MigrationHistory訪問,是為了檢查數(shù)據(jù)庫和model是否匹配,以保證ef能正常運行Database.SetInitializer(null); }//public BookDbContext() : base("Data Source=.;Initial Catalog=Students;Integrated Security=SSPI;") { }//DbSet是一個模版類,<>中代表的是模版類中的實體類public DbSetCustomers { get; set; } public DbSetHalls { get; set; } public DbSetMovies { get; set; } public DbSetSchedules { get; set; } public DbSetTickets { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder){//取消復(fù)數(shù)表名慣例modelBuilder.Conventions.Remove(); ????????}}}
各表的設(shè)計如下:
Customer表:保存注冊用戶的用戶名和密碼,建議加密后保存。
Hall表:保存每個影廳的信息,包括一行的座位數(shù)和一列的座位數(shù)。
Movie表:保存電影的信息,電影名,類型,演員等。
Schedule表:保存電影院的排片信息,包括價格,放映時間等。
Ticket表:保存電影票的信息,包括排片信息,具體座位等。
》數(shù)據(jù)庫腳本
TIP:直接復(fù)制源代碼說明文件中的數(shù)據(jù)庫腳本到SQLSERVER中執(zhí)行即可得到數(shù)據(jù)庫和相應(yīng)的數(shù)據(jù)。調(diào)整一下代碼即可連接到程序中使用。
腳本文件附錄在源代碼的README文件最后。

