分享 | C#編寫的電影售票系統(附源碼+資料庫)

  • 2020 年 2 月 25 日
  • 筆記

最近疫情真的很可怕,大家要注意保護好自己,響應國家的號召。盡量不出門,可以利用這個時間好好充實自己。

也希望武漢和中國能儘快好起來,大家都健健康康,相安無事。

01 介紹

這個是小編上學期的C#課程結課作業,是小組完成的。這次一併分享出來啦。嗯……為什麼介面這麼少女心呢,並不是小編有一顆少女心,而是因為UI部分是同組的女生負責設計的。

我們做的是一個有會員制的電影院購票系統。具有會員註冊功能,可區分會員和散客兩種身份,實現會員及折扣管理。購票具有挑選電影場次,選擇座位和查看電影資訊等功能:

》查看電影詳情、獲取排片資訊。

》選擇場次座位,完成支付,獲取取票資訊。

》註冊成為影院會員,享受優惠折扣。

程式碼獲取

關注我們的公眾號!

在後台回復【CSTK】不包括【】即可獲取。

02 設計思路

在功能設計上,一個電影院購票系統,首先需要具備最基礎的功能:影片選擇、場次選擇和座位選擇。

在用戶提交選擇後,需要支付模組提示用戶付款並完成出票。為了吸引用戶,我們增加了會員的註冊和登錄模組,為會員用戶提供折扣。

註冊與購票的支付我們的處理是預留一個介面,當做簡單模擬,實際使用可以調用支付寶或微信的支付介面。

在介面設計上,我們為系統添加了好看的背景圖片。通過Detail欄展示用戶資訊與折扣,通過Hot Movie欄在最吸引眼球展示熱映電影的海報,提高用戶的購買慾望。

最後,作為主要部分的座位選擇欄簡介明了,座位之間間隔明顯,有效的防止用戶錯誤操作。

03 具體設計

通過三層架構來完成影院購票系統的開發,將真箇業務應用劃分為:介面層(UI層)、業務邏輯層(BLL層)、數據訪問層(DAL層)。

對於複雜的系統分層讓結構清晰,便於對系統進行整體的理解、把握;而且便於維護,將各部分之間的相互影響的程度降低到最小,系統基本的架構可以通過工具自動生成程式碼。當資料庫發生改變時,只用重新生成程式碼,改動業務邏輯層的部分程式碼即可。

在實施的過程中,難點在於將三層結構進行劃分,掌握各層之間的設計思路以及調用關係,下面內容就結合程式碼展示具體實現過程。

1) Model層

這層的作用是封裝數據,使數據在三層中傳輸。例如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; }/// 導演名          public int    Duration { get; set; } //時長          public string MovieType { get; set; }/// 電影類型          public string Poster{ get; set; } /// 海報圖片名      }  }

2) DAL層

這一層提供基本的數據訪問,實現程式碼(以Movies為例):

namespace DAL  {      public class MovieDAL      {          public static List<Movie> 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層

這一層負責處理業務邏輯,在本次的系統開發中,包括了與用戶和影票資訊相關的處理。實現程式碼(以TicketBLL為例):

namespace BLL  {      public class TicketBLL      {          public static bool AddTickets(List<Ticket> tickets)  {              return true;          }      }  }  

4) UI層

這一層負責顯示和採集用戶操作。系統總共包含五個介面,分別為:用戶登錄介面、用戶註冊介面、影院主頁、票務資訊確認介面、支付介面以及取票資訊介面。

同時,使用Winform皮膚插件來實現對系統介面整體風格的把控。下面將以介面的為單位來對其實現過程進行描述:

》用戶登錄介面

用戶將身份資訊寫入文本框後,用其輸入的資訊創建新的customer對象,通過調用BLL層的功能將輸入內容與用戶資訊比對,最後用判斷語句激活彈窗回饋登陸結果,登陸成功後進入到售票系統首頁。

同時,用戶可以點擊註冊按鈕,跳轉到註冊介面完成新用戶的註冊。

》用戶註冊介面

用戶將身份資訊寫入文本框後,用其輸入的資訊創建新的customer對象,通過調用BLL層的服務將新的用戶資訊寫入資料庫,最後用判斷語句激活彈窗對註冊結果予以回饋。

》主介面

排片詳情通過TreeView控制項進行展示。影廳通過多個CheckBox組成,主要是為了能讓用戶一次性購買多張票。

》購票資訊確認介面

在選定座位後,進行系統進行核算總的金額,然後顯示所選座位資訊以及應付的價錢。提示用戶是否進行付款。

》支付介面

獲取購票資訊,計算總票價,提示支付,顯示支付的二維碼等並判斷是否支付成功。

》取票資訊介面

包括取票二維碼以及取票序列號的實現,支付成功後彈出取票碼。

04 資料庫設計

資料庫採用的是SQLSERVER,可以複製下面的腳本到查詢框執行,即可得到資料庫和樣本數據。

系統中採用DbContext方式直接連接資料庫。一個DbContext映射了所有的資料庫表。具體程式碼如下:

namespace Model  {      public class CinemaDbContext : DbContext      {          public static CinemaDbContext CDbContext = new CinemaDbContext();            public CinemaDbContext() : base("data source=.\SQLSERVER1;initial catalog=Cinema;Integrated Security=SSPI;") //構造函數,指定資料庫名稱的約定連接          {              //Code first會在第一次ef查詢的時候會對__MigrationHistory訪問,是為了檢查資料庫和model是否匹配,以保證ef能正常運行              Database.SetInitializer<CinemaDbContext>(null);          }            //public BookDbContext() : base("Data Source=.;Initial Catalog=Students;Integrated Security=SSPI;") { }            //DbSet是一個模版類,<>中代表的是模版類中的實體類          public DbSet<Customer> Customers { get; set; }          public DbSet<Hall> Halls { get; set; }          public DbSet<Movie> Movies { get; set; }          public DbSet<Schedule> Schedules { get; set; }          public DbSet<Ticket> Tickets { get; set; }            protected override void OnModelCreating(DbModelBuilder modelBuilder)          {              //取消複數表名慣例              modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.PluralizingTableNameConvention>();          }      }  }

各表的設計如下:

Customer表:保存註冊用戶的用戶名和密碼,建議加密後保存。

Hall表:保存每個影廳的資訊,包括一行的座位數和一列的座位數。

Movie表:保存電影的資訊,電影名,類型,演員等。

Schedule表:保存電影院的排片資訊,包括價格,放映時間等。

Ticket表:保存電影票的資訊,包括排片資訊,具體座位等。

》資料庫腳本

TIP:直接複製源程式碼說明文件中的資料庫腳本到SQLSERVER中執行即可得到資料庫和相應的數據。調整一下程式碼即可連接到程式中使用。

腳本文件附錄在源程式碼的README文件最後。