1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo Đề tài quản lý rạp chiếu phim bằng winform Áp dụng công nghệ entity framework 6

49 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Quản lý rạp chiếu phim bằng winform áp dụng công nghệ entity framework 6
Tác giả Trần Tiến Đạt, Nguyễn Thành Danh, Lê Trương Ngọc Hải
Người hướng dẫn Nguyễn Minh Đạo
Trường học Trường Đại Học Sư Phạm Kỹ Thuật TP. HCM
Thể loại Báo cáo đề tài
Năm xuất bản 2022
Thành phố TP. HCM
Định dạng
Số trang 49
Dung lượng 3,33 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • PHẦN 1. TỔNG QUAN CHUNG (4)
    • 1.1 Mục đích đề tài (4)
    • 1.2 Yêu cầu đề tài (4)
    • 1.3 Mô tả đề tài (4)
  • PHẦN 2. PHÂN TÍCH THIẾT KẾ HỆ THỐNG (5)
    • 2.1. Thiết lập biểu đồ ngữ cảnh (5)
    • 2.2. Lập biểu đồ phân rã: nhóm dần các chức năng (6)
    • 2.3 Lập biểu đồ phân rã chức năng (6)
    • 2.4 Biểu đồ luồng dữ liệu (7)
    • 2.5 ERD (10)
  • PHẦN 3. CHI TIẾT CODE VÀ CHỨC NĂNG (11)
    • I. Model (11)
    • II. Giao diện và code quản lý khách hàng (15)
    • II. Quản lý phim (20)
    • III. Quản lý nhân viên (26)
    • IV. Đặt vé (35)
    • V. Phân tích (42)
  • PHẦN 4 HƯỚNG DẪN SỬ DỤNG (47)

Nội dung

- Vé sẽ lưu thông tin về số ghế và suất chiếu,mỗi vé có một mã định danh duynhất Chức năng: + Quản lý đối tượng phim, suất chiếu, khách hàng, nhân viên Thêm, xóa, sửa, tìmkiếm.. Lập biểu

TỔNG QUAN CHUNG

Mục đích đề tài

Phần mềm quản lý rạp phim quy mô vừa được thiết kế để hỗ trợ nhân viên trong việc quản lý nhân sự, phim, suất chiếu, khách hàng và vé Nó còn tích hợp chức năng phân tích dữ liệu và cho phép xuất file ra bên ngoài, giúp theo dõi tình hình kinh doanh hiệu quả Giao diện của phần mềm được tối ưu hóa để mang lại trải nghiệm trực quan cho người dùng.

Yêu cầu đề tài

-Phân tích hệ thống và thiết kế CSDL phù hợp

- Áp dụng các kiến thức về OOP – Lập trình windows

- Xây dựng phần mềm giao diện hiện đại trực quan.

- Tiếp cận CSDL theo hướng Code First.

Mô tả đề tài

Một rạp phim DHD yêu cầu 1 hệ thống có thể quản lý được việc kinh doanh như sau:

Khách hàng là đối tượng quan trọng cần được quản lý, trong đó mỗi khách hàng sẽ có một số điện thoại duy nhất Bên cạnh đó, thông tin của khách hàng còn bao gồm tên, ngày sinh và giới tính.

Mỗi nhân viên sẽ được cấp một mã định danh riêng, cùng với các thông tin quan trọng cần lưu trữ như tên, ngày sinh, giới tính, tài khoản, mật khẩu, công việc và tiền lương.

- Thông tin về phim cần lưu sẽ là mã phim, tên, phân loại, mô tả chi tiết của

- Suất chiếu có một mã duy nhất quản lý thông tin về thời gian chiếu, có một mã phim và mã phòng tương ứng.

- Phòng chiếu có các thông tin như tên, mã phòng, và số ghế.

- Vé sẽ lưu thông tin về số ghế và suất chiếu,mỗi vé có một mã định danh duy nhất

+ Quản lý đối tượng phim, suất chiếu, khách hàng, nhân viên (Thêm, xóa, sửa, tìm kiếm).

+Phân tích dữ liệu kinh doanh

+ Xuất dữ liệu ra file Excel.

PHÂN TÍCH THIẾT KẾ HỆ THỐNG

Lập biểu đồ phân rã: nhóm dần các chức năng

STT Các chức năng chi tiết Nhóm lần

Quản lý rạp chiếu phim

16 Thu thập thông tin về vé Đặt vé

18 Lương phải trả cho nhân viên trong tháng

Phân tích dữ liệu kinh doanh

19 Top những phim được xem nhiều trong năm

20 Doanh thu của rạp trong tháng

21 Số lượng vé bán trong ngày

Lập biểu đồ phân rã chức năng

Biểu đồ luồng dữ liệu

6 Phân tích dữ liệu kinh doanh

ERD

CHI TIẾT CODE VÀ CHỨC NĂNG

Model

Lưu trữ các giá trị là số ghế.

Lớp MovieTheaterContext kế thừa từ lớp DbContext, cho phép tương tác với cơ sở dữ liệu MovieTheaterDB Các thuộc tính DbSet trong lớp này ánh xạ tới các bảng và view trong cơ sở dữ liệu.

Cấu hình mapping các lớp bằng Fluent API.Ví dụ với model Movie:

+ Đầu tiên sẽ gọi modelBuilder.Entity.

To establish a one-to-many relationship using Type Builder, utilize HasMany with ScheduleMovie The WithOptional method allows the MovieId property to be null when a ScheduleMovie entity is created Additionally, implement HasForeignKey to create a foreign key for the MovieId entity Similarly, apply the Type Builder WithRequired to ensure that the mapped column in the database cannot be null.

Giao diện và code quản lý khách hàng

Giao diện quản lý khách hàng.

1 Chức năng tìm kiếm khách hàng:

Tìm kiếm khách hàng bằng cách nhập số điện thoại và nhấn tìm kiếm Thông tin khách hàng sẽ được hiển thị qua các Textbox tương ứng.

Và gán dữ liệu khách hàng tìm thấy qua biến Customerselect.

Sau khi nhấn vào "Thêm khách hàng", Form Thêm khách hàng sẽ xuất hiện để nhập dữ liệu Đầu tiên, khai báo biến Cus dưới dạng model Customer và sử dụng context MovieTheaterContext Sau khi gán giá trị từ các Textbox vào biến Cus, sử dụng phương thức Add của context để thêm dữ liệu Cuối cùng, lưu giá trị thay đổi bằng cách gọi phương thức SaveChanges Khi nhấn xác nhận, dữ liệu sẽ được thêm vào thành công.

3 Xóa, sửa khách hàng: Đầu tiên sẽ khai báo biến request để lấy giá trị trả về khi nhấn nút Sửa hoặc Cập nhật Khi nhấn nút sửa request sẽ trả về 1 và 2 khi nhấn nút Xóa.

Và dưới đây là hàm để sử dụng khi xóa và sửa.

Khi nhấn nút Sửa, biến request sẽ được thiết lập bằng 1 để thực thi lệnh xóa Một thông báo sẽ xuất hiện hỏi “Bạn có chắc thay đổi dữ liệu?” Nếu chọn “Ok”, hệ thống sẽ tìm khách hàng theo số điện thoại bằng hàm Find(phoneCustomer) và sau đó cập nhật dữ liệu của khách hàng dựa trên thông tin đã nhập trong TextBox.

Khi nhấn nút xóa, biến request sẽ trả về giá trị 2 Hệ thống sẽ kiểm tra xem khách hàng có tồn tại hay không; nếu không, sẽ hiển thị thông báo cho người dùng Nếu khách hàng được tìm thấy, Transaction DeleteCustomerUseTrans sẽ được thực hiện, bắt đầu bằng việc xóa tất cả vé của khách hàng trước khi xóa dữ liệu khách hàng Sau đó, dữ liệu sẽ được lưu lại bằng lệnh SaveChanges Nếu một trong hai công việc không thành công, hệ thống sẽ thực hiện Rollback để khôi phục dữ liệu Hàm sẽ trả về giá trị false nếu xóa thất bại, và thông báo “Xóa thất bại”; nếu thành công, thông báo sẽ là “Xóa thành công”.

Quản lý phim

Giao diện quản lý phim.

1 Tìm kiếm phim: Đầu tiên sẽ khai báo 1 delegate là hàm UpdateMoivesData Khai báo tiên biến DelefateUpdate ủy thác hàm UpdateMoviesData.

Biến movies để lưu trữ danh sách phim lựa chọn Biến movieSelected là phim lựa

Hàm ByteArraytoImage chuyển đổi giá trị byte từ cơ sở dữ liệu thành hình ảnh poster và tải lên Form các poster của bộ phim Trong cơ sở dữ liệu, poster được lưu trữ dưới dạng byte.

Hàm ShowMoiveInPanel sẽ chọn bộ dữ liệu phim từ danh sách đã được khởi tạo dựa trên vị trí index Tiếp theo, hàm ByteArrayToImage được sử dụng để tải poster của bộ phim đó lên.

Hàm này sẽ lấy các bộ dữ liệu từ thực thể Movies trong dbcontext và chuyển đổi chúng thành danh sách Giá trị index sẽ được gán bằng 0, đại diện cho vị trí đầu tiên trong danh sách Cuối cùng, Poster của bộ phim đầu tiên sẽ được tải lên Form.

Trên giao diện, người dùng có thể tìm kiếm phim bằng cách sử dụng các mũi tên Khi nhấn vào mũi tên trái hoặc phải, dữ liệu của phim tiếp theo sẽ được tải theo thứ tự trong danh sách Hai hàm này có chức năng thay đổi giá trị của chỉ số (index), xác định vị trí của phim trong danh sách đã được khởi tạo.

2 Xem chi tiết và cập nhật phim.

Khi bấm vào nút Chi tiết sẽ hiện lên form FilDetail.

Form FilmDetail sẽ hiển thị toàn bộ thông tin của bộ phim đã được chọn Để thay đổi thông tin phim, người dùng chỉ cần chỉnh sửa trực tiếp trên các Textbox tương ứng.

Sau khi bạn chỉnh sửa thông tin và nhấn Cập nhật, một thông báo sẽ xuất hiện hỏi “Bạn có chắc thay đổi dữ liệu?” Nếu bạn nhấn “OK”, quá trình chỉnh sửa sẽ được thực hiện.

Đầu tiên, sử dụng hàm Find để tìm kiếm phim đã chỉnh sửa trong danh sách Tiếp theo, cập nhật dữ liệu của phim đó với những thông tin mới Cuối cùng, thực hiện lưu dữ liệu bằng cách sử dụng lệnh SaveChanges.

Tương tự với hàm ByteArraytoImage hàm này sẽ đổi kiểu hình ảnh thành dạng byte để lưu vào cơ sở dữ liệu với hình ảnh đã thay đổi.

Và có thể thay đổi của poster phim Khi nhấn vào poster phim có thể thay đổi poster với định dạng file là jpg.

3 Thêm phim Ứng dụng 3 hàm ImagetoByteArray và ByteArraytoImage và Thêm hình ảnh như trên.

Sau khi nhấn Thêm phim Dữ liệu sẽ được thêm vào cơ sở dữ liệu với những dữ liệu tương ứng trên Textbox

Quản lý nhân viên

Khai báo đối tương queryData ,fileExcel và 1 biến request

Khi vào giao diện quản lý nhân viên sẽ tải lên datagrid view dữ liệu của thực thể nhân viên.

Khi nhấn vào nút thêm nhân viên, tất cả các Textbox sẽ được làm rỗng, ngoại trừ Textbox ID sẽ tự động hiển thị giá trị "Auto" do ID sẽ tăng lên tự động khi thêm dữ liệu Đồng thời, biến request sẽ được gán giá trị bằng 2.

Khi thực hiện yêu cầu với giá trị bằng 2, các câu lệnh sau sẽ được thực hiện Đầu tiên, giá trị của các biến sẽ được gán từ các Textbox tương ứng, sau đó sử dụng biến context Tiếp theo, khai báo biến Employee với các thuộc tính tương ứng Cuối cùng, sử dụng phương thức Add để thêm dữ liệu và phương thức SaveChanges để lưu lại những thay đổi vừa thực hiện.

2 Cập nhật nhân viên Đầu tiên sẽ sử dụng event Cell_click để chọn bộ dữ liệu cần chỉnh sửa trên data gridview Khi đó bộ dữ liệu sẽ đưa lên với những Textbox tương ứng.

Sau đó nhấn vào Cập nhật thì biến request lúc này sẽ có giá trị bằng 1.

Khi request có giá trị bằng 1 sẽ thực hiện những câu lệnh sau.

31 Đầu tiên sẽ hỏi người dùng có muốn thay đổi dữ liệu không.

Khi người dùng nhấn “OK” để xác nhận thay đổi dữ liệu, trước tiên sử dụng lệnh Find để tìm nhân viên theo mã số tương ứng Tiếp theo, khởi tạo biến context và biến Employee, gán giá trị cho biến Employee từ các biến đã khởi tạo để cập nhật giá trị cho textbox Sau đó, sử dụng phương thức Add để thêm dữ liệu và cuối cùng gọi phương thức SaveChanges để lưu thay đổi Nếu thành công, thông báo “Đã lưu” sẽ hiển thị, ngược lại sẽ là “Kiểm tra dữ liệu”.

3 Xóa nhân viên Đầu tiên sẽ chọn bộ dữ liệu nhân viên cần xóa bằng event Click_Cell.

Sau đó nhấn vào Xóa Biến request sẽ gán giá trị bằng 3.

Sau khi thực hiện yêu cầu bằng 3, hệ thống sẽ tìm bộ dữ liệu có Id tương ứng với giá trị trong Textbox ID Tiếp theo, phương thức Remove sẽ được sử dụng để xóa bộ dữ liệu đó.

IV QUẢN LÝ SUẤT CHIẾU

Giao diện quản lí suất chiếu

1 Chức năng tìm kiếm suất chiếu:

2 Chức năng thêm, cập nhật suất chiếu

Giao diện thêm, cập nhật suất

Để thêm suất trong data gridview, người dùng cần nhấn vào một dòng bất kỳ và click chuột phải để hiển thị ContextStripMenu, sau đó chọn mục "Thêm dữ liệu" Một form sẽ xuất hiện để nhập dữ liệu mới Đầu tiên, khai báo các biến tương ứng với các thuộc tính trong thực thể, trong đó biến schedule được khai báo dưới dạng model ScheduleMovies và sử dụng context MovieTheaterContext Sau khi gán giá trị cho biến schedule, sử dụng phương thức Add của context để thêm dữ liệu và cuối cùng lưu lại các thay đổi bằng cách gọi phương thức SaveChanges.

Để cập nhật dữ liệu, ta chọn dòng cần sửa và nhấn vào Cập nhật Đầu tiên, tạo các biến tương ứng với thuộc tính của thực thể Sử dụng phương thức Attach của context để thêm và sửa đổi dữ liệu Cuối cùng, lưu lại các giá trị đã thay đổi bằng cách sử dụng SaveChanges.

Để xóa dữ liệu, người dùng cần chọn dòng muốn xóa và nhấn nút "Xóa dữ liệu" Nếu chưa chọn dòng, hệ thống sẽ thông báo "Vui lòng chọn dòng cần thực hiện" Nếu đã chọn, hệ thống sẽ hỏi "Có chắc muốn xóa " và sau khi xác nhận, dữ liệu sẽ được xóa bằng phương thức Attach và Delete Cuối cùng, người dùng cần lưu giá trị thay đổi bằng cách nhấn "SaveChanges".

*Sau khi thực hiện các phương thức trên để dữ liệu được cập nhật lại vào trong datagridview thì ta vui lòng nhấn nút Tải lại.

Đặt vé

1 Chức năng tìm kiếm suất Để tìm kiếm suất chiếu trong ngày ta cần nhấn chọn vào các comboBox bên trái đang hiển thị ngày tháng hiện tại để chọn thời điểm muốn đặt sau đó nhấn vào nút Lọc theo ngày để tiến hành lọc suất Sau khi lọc thì hệ thống sẽ hiện thì các suất có trong ngày đó lên trên data gridview, từ đó ta có thể tiến hành thực hiện chức năng đặt vé.

Để thực hiện chức năng đặt vé, người dùng cần chọn suất chiếu trên data gridview và nhập số điện thoại trước khi nhấn nút đặt vé Mã suất chiếu và số điện thoại sẽ được truyền vào form Booking để tiến hành đặt vé.

Trong phần khai báo biến cho form, NoSeat đại diện cho tên các ghế Số điện thoại, suất chiếu và phim được truyền từ form trước đó QueryData được sử dụng để thực hiện truy vấn nâng cao, và cuối cùng là giá đặt vé.

StatusSeatAva giúp kiểm tra cơ sở dữ liệu để xác định vé nào đã được đặt, với màu của nút ghế đã đặt sẽ thay đổi và nút sẽ bị tắt để ngăn người dùng chọn lại Để đặt một ghế trống, người dùng cần thêm giá trị Enum tại vị trí ghế mong muốn, sau đó hiển thị ở góc bên trái ghế đã chọn và tăng giá tương ứng Quy trình này cũng áp dụng cho các ghế khác.

Do người dùng có thể đặt nhiều vé cùng một lúc, nếu một vé không được đặt thành công thì toàn bộ quá trình sẽ bị thất bại Vì vậy, chúng ta cần sử dụng Transaction để đảm bảo tính toàn vẹn Mỗi vé sẽ được lưu trữ vị trí của nó.

Trong QueryData, chúng ta thực hiện truy vấn GetDataFilmAndSchedule để lấy ghế trống Đầu tiên, ta truyền vào ngày cần xem suất chiếu và so sánh với ngày hiện tại, đảm bảo ngày hiện tại lớn hơn 00:00:00 và nhỏ hơn 00:00:00 ngày hôm sau Chúng ta kết hợp ScheduledMovie với Movies để lấy dữ liệu mong muốn Biến noseat được sử dụng để đếm số lượng vé đã đặt, trong khi biến data giúp tính số ghế còn khả dụng.

Phân tích

Giao diện Form Phân tích

Bên trong Form Analystic Biến dateRequest dùng để truyền giá trị ngày tháng từ form DateInput để truy vấn dữ liệu

Biến funcDate là 1 biến delegate tham chiếu các hàm tương ứng để cho form DateInput gọi tùy theo yêu cầu của người dùng

Giao diện để chọn ngày xem các chức năng

1 Chức năng xem số lượng vé bán trong ngày

Chúng ta thực hiện tương tự như truy vấn GetDataFilmAndSchedule, nhưng thay vì lấy số ghế khả dụng, chúng ta sẽ lấy số vé đã đặt để từ đó xác định thông tin về số vé bán trong ngày.

2 Chức năng xem doanh thu của rạp trong tháng Đầu tiên ta khởi tạo biến numtickets để lấy ra số vé của suất chiếu Sau đó ta tiến hành kết numtickets với ScheduleMovies và Movies sao cho tháng cần tìm bằng với tháng của Begindate để lấy ra Tên phim, Số vé, Tổng doanh thu và Tháng đó.

3 Chức năng Top những phim được xem nhiều trong năm

Chức năng xem doanh thu của rạp trong năm tương tự như chức năng xem doanh thu theo tháng, nhưng cần thay đổi Begindate.Month thành Begindate.Year Sau đó, thông tin về Tên Phim, Số vé và Năm sẽ được lấy ra và sắp xếp giảm dần theo số lượng vé.

4 Xem lương phải trả cho nhân viên trong tháng

HƯỚNG DẪN SỬ DỤNG

The source code is stored on GitHub at the repository tdatIT/ProjectMovieTheatreEF6, which features a project focused on cinema management developed by Trần Tiến Đạt, Lê Trương Ngọc Hải, and Nguyễn Thành Danh, utilizing NET Framework 4.7.2 and Entity Framework 6 You can access it at github.com.

Sử dụng các chức năng theo hướng dẫn ở mục Chi tiết chức năng.

1 Kết nối cơ sở dữ liệu:

Bước 1: Chọn vào mục App.config

Bước 2: Đổi chuỗi connectionString thành tên Server name của máy người dùng.

Bước 1: Kết nối với cơ sở dữ liệu

Khi khởi động hệ thống sẽ bắt đầu kết nối với cơ sở dữ liệu

Ngày đăng: 30/06/2025, 08:35

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w