Tuy nhiên, nhiều rạp chiếu phim vẫn áp dụng phương pháp quản lý thủ công, dẫn đến nhiều bất cập như tốn thời gian và công sức trong việc lưu trữ thông tin phim, suất chiếu, và khách hàng
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOAKHOA CÔNG NGHỆ THÔNG TIN
ĐỒ ÁN
ĐỒ ÁN CƠ SỞ LẬP TRÌNH
QUẢN LÍ RẠP CHIẾU PHIM
GIẢNG VIÊN HD: TS NGUYỄN NĂNG HÙNG VÂN
SINH VIÊN THỰC HIỆN:
Hồ Khang Hy LỚP:23T_NHAT2 Nhóm: 23NH16B Trần Xuân Bách LỚP:23T_NHAT2 Nhóm: 23NH16B
Đà Nẵng, 12/2024
Trang 2MỤC LỤC
MỤC LỤC i
DANH MỤC HÌNH ẢNH iii
LỜI MỞ ĐẦU 1
1 TỔNG QUAN ĐỀ TÀI 2
2 CƠ SỞ LÝ THUYẾT 4
2.1 Ý tưởng 4
2.2 Cơ sở lý thuyết 4
3 TỔ CHỨC CẤU TRÚC DỮ LIỆU VÀ THUẬT TOÁN 6
3.1 Phát biểu bài toán 6
3.2 Cấu trúc dữ liệu 6
3.3 Thuật toán 10
4 CHƯƠNG TRÌNH VÀ KẾT QUẢ 13
4.1 Ngôn ngữ cài đặt 13
4.2 Các thư viện được sử dụng trong chương trình 14
4.3 Kết quả 18
4.3.1 Giao diện đăng nhập của chương trình 18
4.3.2 Giao diện chính của chương trình 19
4.3.3 Kết quả thực thi của chương trình 26
4.3.4 Nhận xét 27
5 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 27
5.1 Kết luận 27
5.2 Hướng phát triển 27
TÀI LIỆU THAM KHẢO 28
i Trần Xuân Bách – Hồ Khang Hy 23.99B
Trang 3ĐỒ ÁN CƠ SỞ LẬP TRÌNH
DANH MỤC HÌNH ẢNH
Hình 1 Minh họa cấu trúc dữ liệu stack 4
Hình 2 Sơ đồ tổ chức chương trình quản lí rạp chiếu phim 12
Hình 3 Thông tin của phim 15
Hình 4 Thông tin nhân viên 15
Hình 5 Thông tin của nhân viên phòng 15
Hình 6 Thông tin của quản lý 16
Hình 7 Thông tin ghế ngồi của 1 phòng 16
Hình 8 Giao diện đăng nhập của chương trình 17
Hình 9 Giao diện chính của chương trình khi đăng nhập với tư cách Room Staff 17 Hình 10 Giao diện chính của chương trình khi đăng nhập với tư cách Ticket Staff 18
Hình 11 Giao diện chính của chương trình khi đăng nhập với tư cách Manager 18
Hình 12 Tìm và kiểm tra vé khách hàng thông qua ID vé 19
Hình 13 Xem bảng giờ của tất cả các phim trong ngày 19
Hình 14 Nhập tên khách hàng 20
Hình 15 Chọn phim cho khách hàng 20
Hình 16 Chọn suất chiếu của phim theo yêu cầu khách hàng 20
Hình 17 Hiển thị các ghế khả dụng trong suất chiếu khách hàng chọn 21
Hình 18 Cập nhật và xác nhận trạng thái ghế của phòng 21
Hình 19 Hiện ra các lựa chọn để thao tác với phòng 22
Hình 20 Hiển thị tình trạng các ghế của phòng theo ID và suất chiếu 22
Hình 21 Duyệt và hiển thị doanh thu của một phim theo ID 22
Hình 22 Hiển thị các lựa chọn để thao tác với phim 23
Hình 23 Nhập thông tin của phim mới 23
Hình 24 Chỉnh sửa thông tin phim dựa theo ID phim 23
Hình 25 Lựa chọn những thông tin cần được thay đổi 24
Trang 4Hình 26 Lựa chọn các chức năng them,sửa xoá nhân viên 24 Hình 27 File chương trình dùng để lưu thông tin vé khách hàng 24 Hình 28 Dữ liệu các vé của khách hang 25
iii Trần Xuân Bách – Hồ Khang Hy 23.99B
Trang 5ĐỒ ÁN CƠ SỞ LẬP TRÌNH
LỜI MỞ ĐẦU
Báo cáo Đồ án lập trình tính toán là kết quả của quá trình cố gắng không ngừngcủa nhóm chúng em với sự giúp đỡ, động viên khích lệ của thầy, bạn bè Qua lời mởđầu chúng em xin gửi lời cảm ơn tới giảng viên hướng dẫn, người đã tận tụy giúp đỡ
và tạo điều kiện thuận lợi về tài liệu, quy trình thực hiện Đồ án lập trình tính toántrong thời gian học tập - nghiên cứu vừa qua
Chúng em xin tỏ lòng kính trọng và biết ơn sâu sắc đối với thầy TS Nguyễn Năng Hùng Vân - giảng viên Khoa Công Nghệ Thông Tin của Trường Đại học Bách Khoa -Đại học Đà Nẵng đã giúp đỡ chúng em về tài liệu tham khảo để có thể hoàn thành tốt Báo cáo Dự án cơ sở lập trình Và chúng em cũng xin chân thành cảm ơn cô đã nhiệt tình hướng dẫn trong việc lựa chọn đề tài nghiên cứu, hướng tiếp cận và chỉnh sửa những thiếu sót trong quá trình thực hiện Trong quá trình thực hiện, khó tránh khỏi sai sót, rất mong các thầy, cô bỏ qua và giúp chúng em hoàn thiện hơn Đồng thời do trình độ lý luận cũng như kinh nghiệm thực tế còn hạn chế nên bài báo cáo không thể tránh khỏi những thiếu sót, chúng em rất mong nhận được ý kiến đóng góp từ phía thầy, cô để chúng em học thêm được nhiều kinh nghiệm và sẽ hoàn thành tốt hơn.Ngôn ngữ C++ là một sự phát triển mạnh mẽ của C Trong C++ chẳng những đưavào tất cả khái niệm, công cụ của lập trình hướng đối tượng mà còn đưa vào nhiều khảnăng mới mẻ cho hàm Trong khuôn khổ của Dự án cơ sở lập trình này chúng em xin
sử dụng các kiến thức mà thấy cô đã trang bị và sự tìm tòi từ sách vở và bạn bè để cóthể làm rõ một phần những khó khăn của các bạn sinh viên trong quá trình học tập.Chúng em xin chân thành cảm ơn!
Trang 61 TỔNG QUAN ĐỀ TÀI
Trong thời đại kỹ thuật số phát triển nhanh chóng ngày nay, công nghệ thông tin đãtrở thành một phần không thể thiếu trong cuộc sống hàng ngày, từ giao tiếp, giải trí đến quản lý công việc Trong lĩnh vực giải trí, quản lý rạp chiếu phim là một trong những ứng dụng phổ biến và có giá trị cao Tuy nhiên, nhiều rạp chiếu phim vẫn áp dụng phương pháp quản lý thủ công, dẫn đến nhiều bất cập như tốn thời gian và công sức trong việc lưu trữ thông tin phim, suất chiếu, và khách hàng; dễ xảy ra sai sót trong quá trình quản lý và tính toán; làm giảm trải nghiệm của khách hàng do phải chờđợi lâu Với những hạn chế đó, chúng tôi đã tìm hiểu và nghiên cứu để đề xuất một giải pháp thông qua việc phát triển Ứng dụng Quản lý Rạp Chiếu Phim Với mục tiêu cung cấp một hệ thống nhanh chóng, chính xác, và tiện lợi, chúng tôi tin rằng ứng dụng này sẽ giúp tiết kiệm thời gian và công sức trong quản lý, nâng cao hiệu quả vận hành rạp chiếu phim, và gia tăng sự hài lòng của khách hàng Hệ thống sẽ hỗ trợ quản
lý thông tin các bộ phim bao gồm tên phim, thể loại, thời lượng, suất chiếu, và phòng chiếu; quản lý tài khoản nhân viên nhằm phân quyền và đảm bảo an toàn thông tin; tính toán doanh thu từ các suất chiếu phim; hỗ trợ tìm kiếm và hiển thị thông tin chi tiết phim một cách nhanh chóng, đồng thời cung cấp giao diện thân thiện, dễ sử dụng,
và trực quan Chúng tôi hy vọng rằng đây sẽ là công cụ đắc lực cho các rạp chiếu phim trong việc tối ưu hóa quy trình quản lý và nâng cao chất lượng dịch vụ
1.MỤC ĐÍCH THỰC HIỆN ĐỀ TÀI
Nghiên cứu, sáng tạo và vận dụng các kiến thức đã học, để xây dựng và phát triểnchương trình, ứng dụng giải quyết các vấn đề trong cuộc sống, cụ thể là ứng dụngquản lí rạp chiếu phim, hỗ trợ nhân viên thuận tiện, dễ dàng hơn
2.MỤC TIÊU ĐỀ TÀI
Cho phép người dùng (nhân viên/ quản lý) đưa vào thông tin các bộ phim, với các thao tác đọc và ghi file, nhập tài khoản nhân viên để bắt đầu,tính toán và hiển thị chi tiết thông tin phim cho người sử dụng bằng các kỹ năng, kiến thức đã học…
3.PHẠM VI VÀ ĐỐI TƯỢNG NGHIÊN CỨU
- Tìm hiểu cấu trúc dữ liệu (mảng, class,stack), thao tác làm việc với file và các thuật toán cần thiết để viết một chương trình/ứng dụng
- Liên kết các kiến thức đã học, nghiên cứu để xây dựng bài toán hoàn chỉnh nhất
4.PHƯƠNG PHÁP NGHIÊN CỨU
Trang 82 CƠ SỞ LÝ THUYẾT.
2.1 Ý tưởng
- Khi bắt đầu công việc,nhân viên nhập vào tài khoản và mật khẩu để bắt đầu quản lí
- Chương trình tự động quét tất cả thông tin phim,nhân viên,phòng chiếu và ghi vàochương trình
- Tại đây,nhân viên có thể chỉnh sửa,cập nhật nhanh thông tin phim
- Nhân viên có thể đặt vé cho khách hàng
- Chương trình sẽ tự động phân bổ suất chiếu của các bộ phim vào khung giờ hợp lí.-Thống kê doanh số theo từng bộ phim
2.2 Cơ sở lý thuyết
2.2.1 Cấu trúc dữ liệu Stack với Pointer Array
Pointer Array: Là một mảng mà mỗi phần tử của nó là một con trỏ Con trỏ
này có thể trỏ đến một vùng nhớ chứa giá trị, thay vì lưu trữ trực tiếp giá trị trong mảng
Đỉnh Stack (top): Là biến chỉ số theo dõi vị trí cao nhất (đỉnh) của stack.
Kích thước cố định (MAX_SIZE): Là giới hạn số phần tử mà stack có thể
chứa
Hình 1 Minh họa cấu trúc dữ liệu stack
2.2.2 Thao tác với file
Thư viện <iostream>:
Trang 9fprintf: Xuất dữ liệu theo định dạng.
fscanf: Nhập dữ liệu theo định dạng
Các thao tác với file như đọc, ghi (fopen, fclose, fprintf)
Thư viện < iomanip>
Ý nghĩa:
Thư viện này được sử dụng để định dạng đầu ra dữ liệu
Cung cấp các hàm hỗ trợ định dạng số thập phân, căn lề, độ rộng, v.v
Công dụng:
std::setw: Đặt độ rộng của trường in
std::setprecision: Đặt số chữ số thập phân
std::fixed: In số thập phân theo định dạng cố định
std::left, std::right: Căn lề trái/phải
2.2.3 Tạo ra các lớp tổng quát
Class Template (Template lớp)
Ý nghĩa:
Là các lớp có thể hoạt động với nhiều kiểu dữ liệu khác nhau
Thay vì viết nhiều lớp riêng biệt cho từng kiểu dữ liệu, ta viết một lớp duy nhấtdùng template parameter
Trang 103 TỔ CHỨC CẤU TRÚC DỮ LIỆU VÀ THUẬT TOÁN
3.1 Phát biểu bài toán
Input:
Một file thông tin các bộ phim, trong file mỗi dòng tương ứng là: mã phim tên phimtên đạo diễn thể loại thời lượng điểm số lượng suất chiếu 1 ngày. Một file thông tin nhân viên, trong file mỗi dòng tương ứng là tên đăng nhậpmậtkhẩumã nhân viên tên nhân viên giới tính ngày sinh số điện thoại địa chỉchức vụ
bool push(T* value);
bool push(const T&);
T* pop();
T* peek() const;
T& getAt(int index) const {return *arr[index];}
int getTop() const {return top;};
bool isEmpty() const;
bool isFull() const;
void display();
void add(const char*);
T* findById(string);
void sortById();
void edit(const char*);
void Delete(const char*);
};
Trang 11ĐỒ ÁN CƠ SỞ LẬP TRÌNH
b Class Movie
-Ý nghĩa các biến:
+ id: Mã phim
+ name: Tên phim
+ director: Đạo diễn
string genre;
public:
Movie();
Movie(const string&, const string&, const string&,
const string&, int, double,int );
~Movie();
string getid() const; double getrating() const;
string getname() const; int getduration() const;
string getdirector() const; int getShowTime() const;
string getgenre() const;
void set(const string&, const string&, const string&,
const string&, const int&,const double&, int &);
void setid(const string&); void setShowTime(const int&);
void setname(const string&); void setrating(const double&); void setdirector(const string&); void setduration(const int&);
void setgenre(const string&);
string role;
public:
Staff();
~Staff(){}
Staff(const string&, const string&, const string&, const string&,
bool, const string&, const string&, const string&, const string&); string getusername() const;
string getpassword() const;
string getid() const;
string getname() const;
bool getgender() const;
string getbirth() const;
string getphonenumber() const;
string getaddress() const;
string getrole() const;
void setpassword(const string&);
void setPhoneNumber(const string&);
void setAddress(const string&);
virtual void displayInfo() const = 0;
Trang 12+name:Tên nhân viên
+role: Chức vụ
+gender: Giới tính
+birth: Ngày sinh
+phonenumber: Số điện thoại
class RoomStaff : public Staff{
double getrating(){return rating;}
void setrating(double& Rating) {rating = Rating;}
void displayInfo() const;
class Manager : public Staff{
Trang 13ĐỒ ÁN CƠ SỞ LẬP TRÌNH
Class Manager kế thừa từ class Staff
3.3 Thuật toán
Thuật toán của bài toán quản lý bưu kiện được thể hiện qua:
3.3.1 Thuật toán phân phối suất chiếu
Bước 1: Khởi tạo biến top, filmIndex, dex, totalShowTime và mảng a[] chứa số lượng
số chiếu trong 1 ngày của các bộ phim
Khai báo mảng m[7][5] tương ứng với 5 phòng và mỗi ngày 1 phòng chiếu tối đa 7 suất
Bước 2: Lặp qua từng suất chiếu (i là thứ tự chiếu, j là phòng chiếu):
Vòng lặp i từ 0 đến 6 (tương ứng 7 suất chiếu/ngày)
Vòng lặp j từ 0 đến 4 (tương ứng 5 phòng chiếu)
Bước 3: Bỏ qua phim hết suất chiếu:
Nếu a[filmIndex]==0 , tăng filmIndex (vòng tròn với %( top+1 ) để chuyển sang phim kế tiếp
Bước 4: Phân bổ suất chiếu:
Gán m[i][j]= stackMovie.getAt(filmIndex).getid() (gán ID phim vào suất chiếu)
Giảm a[filmIndex] để cập nhật số suất chiếu còn lại
Bước 5 Kiểm tra điều kiện dừng:
Tăng dex++ Nếu dex-> totalShowTime, dừng hàm (return)
Bước 6 Chuyển sang phim kế tiếp:
Tăng filmIndex lên phim kế tiếp (vòng tròn với %(top +1))
3.3.2.Thuật toán thêm phim.
Bước 1: Tạo ID mới bằng cách tìm ID lớn nhất trong stackMovie sau đó thêm 1 đơn vị
Bước 2: Nhập thông tin phim mới:
Tiêu đề (title) ,đạo diễn (director), thể loại (genre), thời lượng
(duaration) ,đánh giá (rating), và số suất chiếu (showTime) từ người dùng
Bước 3: Tạo đối tượng phim mới:
Bước 3.1: Gán ID mới (newID) cho phim vừa nhập
Bước 3.2: Khởi tạo đối tượng Movie với các thông tin vừa nhập và ID mới.Bước 4: Thêm phim vào stack:
Trang 14Gọi hàm push() để thêm phim mới vào stack.
Bước 5: Ghi lại danh sách phim vào file:
Mở file filename ở chế độ ghi
3.3.3 Thuật toán chỉnh sửa thông tin phim.
Bước 1: Tìm phim theo ID ,Gọi hàm findByID() để tìm phim trong stack
Nếu không tìm thấy, thông báo và kết thúc hàm
Bước 2: Nhập số lượng thuộc tính cần sửa.Yêu cầu người dùng nhập số lượng thuộc tính muốn chỉnh sửa
Bước 3: Vòng lặp sửa thuộc tính Lặp qua số lượng thay đổi người dùng yêu cầu: Hiển thị danh sách các thuộc tính có thể chỉnh sửa Nhập lựa chọn thuộc tính Cập nhật giá trị mới cho thuộc tính được chọn
Bước 4: Sắp xếp lại stack Gọi hàm sortByID() để đảm bảo stack được sắp xếp theoID
Bước 5: Ghi thông tin vào file
Mở file dữ liệu chính (filename) và ghi lại toàn bộ thông tin của các phim trong stack
3.3.4.Thuật toán xoá phim
Bước 1 Tìm phim theo ID Nhập ID cần xóa, tìm trong stack Nếu không tìm thấy,thoát
Bước 2 Xóa phim.(gọi hàm delete) Tìm và xóa phim khỏi mảng
Bước 3 Ghi lại dữ liệu vào file Cập nhật file với danh sách các phim còn lại trongstack
3.3.5.Thuật toán gán thời gian chiếu
Bước 1 Xác định freetime Tùy vào tổng suất chiếu, chọn thời gian nghỉ giữa cácsuất
Bước 2 Khởi tạo thời gian: Bắt đầu từ 8:00 sáng (28800 giây).
Bước 3 Duyệt phòng và suất chiếu:
Với mỗi phòng (5 phòng),Với mỗi suất chiếu (7 suất):
Lưu thời gian bắt đầu vào mảng h[i][j].Cộng 2 giờ phim và freetime để tính giờ tiếp theo
10Trần Xuân Bách– Hồ Khang Hy 23.16B
Trang 154.1.2 Lý do chọn C++
Hiệu suất cao: C++ tối ưu hóa khả năng truy cập bộ nhớ và xử lý dữ liệu, phù
hợp với các ứng dụng cần xử lý khối lượng lớn thông tin, như hệ thống quản lý rạp chiếu phim
Trang 16Hỗ trợ lập trình hướng đối tượng: C++ cung cấp các khái niệm như lớp
(class), đối tượng (object), kế thừa (inheritance), và đa hình (polymorphism), giúp tổ chức mã nguồn rõ ràng và dễ bảo trì
1 Sơ đồ tổ chức chương trình chính
Hình 2 Sơ đồ tổ chức chương trình quản lí rạp chiếu phim.
4.2 Các thư viện được sử dụng trong chương trình
Khai báo thư viện
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <string.h>
4.2 1 Các nguyên mẫu hàm được xây dựng trong chương trình.
12Trần Xuân Bách– Hồ Khang Hy 23.16B
Trang 17char*, Stack<Manager>&); Đọc thông tin của quản lý
void readMovieFromFile(const char*,
Stack<Movie>&); Đọc thông tin chi tiết của phim
Stack<Movie>& stackMovie, string
Trang 18int a[20],string id,int SuatChieuMua);
void InVe(const string& ticketId); Hàm in vé chiếu phim
Hàm đăng nhập tài khoảng nhân viên
interFace(stackMovie,
stackRoomStaff, stackTicketStaff,
stackManager, stackRoom);
Hàm giao diện các thao tác xử lí
4.2.2 Thiết kế file cơ sở dữ liệu đầu vào
- Tên file: Movie.txt
- Cấu trúc file: Mỗi entry của file gồm 7 trường:
ID phim, Tên phim, đạo diễn, thể loại, thời gian, điểm, số suất chiếu trong 1 ngày
Nội dung như sau:
Hình 3 Thông tin của phim
- Tên file:TicketStaffIfno.txt
- Cấu trúc file : Mỗi entry của file gồm 10 trường:
Tên đăng nhập, mật khẩu, Tên nhân viên, giới tính, ngày sinh, số điện thoại, địa chỉ, chức vụ, điểm.
Nội dung như sau:
14Trần Xuân Bách– Hồ Khang Hy 23.16B