ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
ĐỒ ÁN 1
PHÁT TRIỂN ỨNG DỤNG HỖ TRỢ QUẢN LÝ SINH VIÊN THỰC TẬP DOANH
NGHIỆP VÀ GỢI Ý ĐỊNH HƯỚNG NGHỀ NGHIỆP
GV HƯỚNG DẪN:
Nguyễn Thị Thanh Trúc
SV THỰC HIỆN:
Lê Thế Phúc – 20521764
Nguyễn Nhật Hồng Qn – 20521790
TP. HỒ CHÍ MINH, 2023
LỜI CẢM ƠN
Lời đầu tiên, em xin được gửi lời cảm ơn chân thành đến cô với sự giúp đỡ,
giảng dạy nhiệt tình trong suốt quá trình thực hiện đồ án của môn học này. Đối với
đề tài này, ban đầu cơng việc thực hiện gặp rất nhiều khó khăn vì chưa hiểu rõ được
chi tiết của một quy trình thực tập của sinh viên là như thế nào. Tuy nhiên, với sự
tận tâm và phân tích tỉ mỉ, dễ hiểu của cơ đã giúp nhóm chúng em có được cái nhìn
rõ hơn về vấn đề mình đang cần phải giải quyết. Trong suốt q trình thực hiện, cơ
ln theo dõi tiến độ thực hiện và đưa ra những góp ý bổ ích giúp cho cơng việc
thực hiện của nhóm trở nên đơn giản hơn rất nhiều so với trước đó. Mặc dù thời
gian của mơn học là khơng nhiều, nhưng những kiến thức mà chúng em nhận được
là rất lớn. Qua đó, em xin thay mặt nhóm để gửi đến cơ lời cảm ơn sâu sắc với
những gì cơ đã truyền đạt cho chúng em. Em xin chân thành cảm ơn.
TP.Hồ Chí Minh, tháng 7 năm 2023
MỤC LỤC
Chương 1: Tổng quan
1
1.1.
Mục tiêu đề tài
1
1.2.
Đối tượng nghiên cứu
1
1.3.
Hướng nghiên cứu
1
Chương 2: Cơ sở lý thuyết và Công nghệ sử dụng
2.1.
Cơ sở lý thuyết
3
3
2.1.1.
Thuật tốn Tìm kiếm nhị phân (Binary Search)
3
2.1.2.
Thuật tốn Sắp xếp nhanh (Quick Sort)
5
2.1.3.
Recommendation System
7
2.2.
Cơng nghệ sử dụng
10
2.2.1.
Tổng quan cơng nghệ sử dụng
10
2.2.2.
Tìm hiểu cơng nghệ
10
Chương 3: Phân tích bài tốn
20
3.1.
Danh sách các u cầu phần mềm
20
3.2.
Phân tích thiết kế
22
3.2.1.
Use Cases Diagram
22
3.2.2.
Sequence Diagram
54
Chương 4: Thiết kế
4.1.
Thiết kế dữ liệu
4.1.1.
Cơ sở dữ liệu
60
60
60
4.1.2.
4.2.
Mô tả
Thiết kế giao diện
Chương 5: Tổng kết
60
76
79
5.1.
Kết luận
79
5.2.
Hướng phát triển
79
Chương 1: Tổng quan
1.1.
Mục tiêu đề tài
Xây dựng ứng dụng “Quản lý sinh viên thực tập doanh nghiệp và gợi ý định
-
hướng nghề nghiệp” nhằm giúp sinh viên và nhà trường có thể quản lý, đồng
bộ thơng tin, thuận tiện theo dõi quá trình thực tập, giấy tờ hay các bước đăng
ký thực tập tại doanh nghiệp. Hỗ trợ giảng viên hướng dẫn thực tập đơn giản
hóa các thao tác quản lý và tạo điều kiện tốt nhất cho sinh viên thực tập hiệu
quả.
Phát triển ứng dụng với các chức năng đáp ứng đầy đủ yêu cầu người dùng và
-
linh hoạt để phục vụ cho nhiều hệ thống hơn, gợi ý định hướng nghề nghiệp
giúp bản thân sinh viên biết được thơng tin những ngành mình có thể theo đuổi
trong tương lai.
1.2.
Đối tượng nghiên cứu
Đối tượng được nghiên cứu chính trong đề tài là sinh viên đang trong giai đoạn
phù hợp để đăng ký thực tập doanh nghiệp.
Bên cạnh đó, đối tượng khơng thể thiếu là giảng viên hướng dẫn và người quản
lý. Đây cũng là các đối tượng mà nhóm hướng đến trong q trình nghiên cứu
và thực hiện đề tài.
1.3.
Hướng nghiên cứu
Tìm hiểu về quy trình thực tập của các trường Đại học, Cao đẳng hiện nay.
Tìm hiểu về mơ hình Quản lý sinh viên.
Khảo sát sinh viên về những vấn đề thường gặp, gây khó khăn cho q trình
đăng ký thực tập.
Tìm hiểu về các ứng dụng gợi ý hướng nghiệp hiện nay: JobWay, …
1
Xây dựng các yêu cầu cơ bản và cần thiết cho ứng dụng.
Phân tích chi tiết cho từng u cầu bài tốn.
Tìm hiểu về kiến trúc phần mềm Client – Server.
Tìm hiểu Figma để thiết kế UI cho ứng dụng.
Phát triển ứng dụng trên nền tảng ElectronJS.
Sử dụng Trello để quản lý tiến trình thực hiện.
Sử dụng Google Drive để lưu trữ tài liệu.
Cài đặt ứng dụng bằng IDE Visual Studio Code.
2
Chương 2: Cơ sở lý thuyết và Công nghệ sử dụng
2.1.
Cơ sở lý thuyết
2.1.1. Thuật tốn Tìm kiếm nhị phân (Binary Search)
a.
Ý tưởng thuật tốn
Thuật tốn tìm kiếm nhị phân hoạt động trên các mảng đã được
sắp xếp. Thuật toán bắt đầu bằng việc so sánh một phần tử
đứng chính giữa mảng với giá trị cần tìm. Nếu bằng nhau, vị
trí của nó trong mảng sẽ được trả về. Nếu giá trị cần tìm nhỏ
hơn phần tử này, quá trình tìm kiếm tiếp tục ở nửa nhỏ hơn
của mảng. Nếu giá trị cần tìm lớn hơn phần tử ở giữa, quá trình
tìm kiếm tiếp tục ở nửa lớn hơn của mảng. Bằng cách này, ở
mỗi phép lặp thuật tốn có thể loại bỏ nửa mảng mà giá trị cần
tìm chắc chắn khơng xuất hiện.
b.
Các bước thực hiện
Giả sử mảng tìm kiếm bao gồm các phần tử nằm trong left
(chỉ số của phần tử đầu mảng) và right (chỉ số của phần tử
cuối mảng). Các bước của giải thuật như sau:
Các bước thực hiện
Bước 1
Chi tiết
Gán left = 0; right = n – 1
mid =
Bước 2
𝑙𝑒𝑓𝑡+𝑟𝑖𝑔ℎ𝑡
2
(mid là chỉ số của
phần tử giữa mảng)
3
So sánh a[mid] với x (giá trị cần tìm
kiếm):
+ a[mid] = x Tìm thấy giá trị
Dừng thuật tốn và trả về
kết quả tìm thấy giá trị trong
mảng
+ a[mid] > x Gán right = mid
– 1 Tìm kiếm x trong
mảng con a[left], …, a[mid –
1]
+ a[mid] < x Gán left = mid
+ 1 Tìm kiếm x trong
mảng con a[mid + 1], …,
a[right]
Nếu left ≤ right thì lặp lại bước 2.
Ngược lại thì dừng thuật toán
Bước 3
c.
Độ phức tạp
Trường hợp
Số lần so sánh
Tốt nhất
1
Xấu nhất
log2(n)
4
𝑛
log2( )
Trung bình
2
2.1.2. Thuật tốn Sắp xếp nhanh (Quick Sort)
a. Ý tưởng thuật toán
Thuật toán sẽ chọn ra một phần tử trong mảng để làm điểm đánh dấu
gọi là pivot. Sau khi chọn được điểm đánh dấu, nó sẽ chia mảng đó
thành hai mảng con bằng cách so sánh với pivot đã chọn. Một mảng
sẽ bao gồm các phần tử nhỏ hơn hoặc bằng pivot và mảng cịn lại
ln lớn hơn hoặc bằng pivot.
Sau đó, q trình này được lặp lại đủ số lần cho đến khi các mảng
nhỏ có thể được sắp xếp một cách dễ dàng để tạo ra một tập dữ liệu
được sắp xếp đầy đủ.
b. Các bước thực hiện
Các bước thực hiện
Bước 1
Chi tiết
Gán left là vị trí đầu danh sách bên trái,
right là vị trí đầu danh sách bên phải
Nếu left ≥ right thì kết thúc (danh sách
chỉ có 1 phần tử). Ngược lại thì:
Bước 2
Bước 2.1: Chọn tùy ý một phần tử
a[k] trong danh sách (left ≤ k ≤
right) mà tại đó x = a[k]; i = left; j =
right
5
Bước 2.2: Tìm kiếm và đổi chỗ cặp
phần tử a[i], a[j] nằm sai chỗ:
o a[i] < x i++
o a[i] > x j-o Nếu i ≤ j thì đổi chỗ a[i] và a[j]
o i++; j- Bước 2.3: Nếu i ≤ j thì lặp lại bước
2.2
Nếu left < i thì gọi đệ quy để phân
hoạch danh sách con a[left], …, a[j]
Bước 3
Nếu i < right thì gọi đệ quy để phân
hoạch danh sách con a[i], …,
a[right]
c. Độ phức tạp
Trường hợp
Số lần so sánh
Tốt nhất
1
Xấu nhất
nlog(n)
Trung bình
n2
6
2.1.3. Recommendation System
Recommendation System là hệ thống dựa vào “sở thích” của người
dùng trong q khứ, để dự đốn “sở thích” của người dùng trong
tương lại và thực hiện gợi ý cho người dùng. Để hệ thống hoạt động
tốt thì việc trước tiên đó chính là phản hồi từ người dùng.
Recommendation System được chia thành 2 nhóm lớn: Hệ thống dựa
trên nội dung (Content – based system) và Hệ thống lọc cộng tác
(Collaborative system)
Hệ thống dựa trên nội dung (Content – based system):
o Là một hệ thống gợi ý đề xuất các sản phẩm hoặc nội dung tương
tự với nội dung mà người đã thích hoặc tìm kiếm trước đó, dựa
trên thuộc tính của các sản phẩm đó. Q trình thực hiện hệ thống
gợi ý dựa trên nội dung được thực hiện theo các bước sau:
Các bước thực hiện
Chi tiết
Thu thập dữ liệu: Thu thập thông tin về
Bước 1
thuộc tính của các sản phẩm, bao gồm
tên, mô tả, thể loại, tác giả, đạo diễn,
đánh giá của người dùng, …
Xác định đặc trưng của sản phẩm:
Phân tích các thuộc tính của sản phẩm
Bước 2
để xác định các đặc trưng của sản
phẩm đó, ví dụ thể loại, đạo diễn, diễn
viên, …
7
Xây dựng mơ hình: Sử dụng các thuật
tốn máy học để xây dựng mơ hình
dựa trên các đặc trưng của sản phẩm.
Bước 3
Các thuật toán phổ biến được sử dụng
trong hệ thống bao gồm Vector Space
Model, Term Frequency-Inverse
Document Frequency và Latent
Semantic Analysis
Tạo các gợi ý: Sử dụng mô hình để
đưa ra các gợi ý cho người dùng dựa
trên các sản phẩm đã được người
Bước 4
dùng thích hoặc tìm kiếm trước đó.
Các sản phẩm đó có các đặc trưng
tương tự với các sản phẩm đã được
người dùng thích hoặc tìm kiếm sẽ
được đề xuất cho người dùng
Đánh giá và cải tiến: Đánh giá hiệu
quả của hệ thống bằng cách sử dụng
các phương pháp đánh giá như độ
chính xác, độ phủ, độ đa dạng, … Sau
Bước 5
đó, cải tiến hệ thống bằng cách tối ưu
hoaas các tham số của mơ hình hoặc
bổ sung các thuộc tính mới của sản
phẩm để tăng độ chính xác và hiệu
quả của hệ thống
8
o Minh họa:
Hình 2.1: Hình ảnh minh họa về Content – based system
-
Hệ thống lọc cộng tác (Collaborative system):
o Là một hệ thống gợi ý đề xuất sản phẩm cho người dùng dựa trên
sự tương đồng giữa người dùng và lịch sử sử dụng sản phẩm của
họ. Hệ thống lọc cộng tác gồm hai loại: Lọc dựa trên người dùng
(User-based Collaborative) và Lọc dựa trên sản phẩm (Item-based
Collaborative)
o Quá trình thực hiện hệ thống lọc cộng tác bao gồm các bước sau:
Các bước thực hiện
Chi tiết
Xây dựng ma trận đánh giá: Tạo một
ma trận với người dùng ở hàng và sản
Bước 1
phẩm ở cột, mỗi phần tử trong ma trận
là đánh giá của người dùng đó với sản
phẩm tương ứng
Tính tốn độ tương đồng giữa các
Bước 2
người dùng: Sử dụng các phương pháp
đo độ tương đồng. Ví dụ như Cosine
9
Similarity để tính tốn độ tương đồng
giữa các người dùng
Đưa ra các gợi ý: Sử dụng độ tương
Bước 3
đồng giữa các người dùng để đưa ra
các gợi ý sản phẩm cho người dùng
o Minh họa:
Hình 2.2: Hình ảnh minh họa về Collaborative system
2.2.
Công nghệ sử dụng
2.2.1. Tổng quan công nghệ sử dụng
o Front-end:
− Thư viện Javascript: ReactJS
− SCSS
− Javascript Framework: ElectronJS
o Back-end:
− NodeJS (Express)
− MySQL
2.2.2. Tìm hiểu cơng nghệ
a. Thư viện ReactJS
10
Là một thư viện mã nguồn mở được Facebook xây dựng và phát
triển. Thư viện này được sử dụng để tạo các ứng dụng trang
Web hấp dẫn với hiệu quả cao, tốc độ tải trang nhanh.
Các đặc trưng của ReactJS: JSX, Components, One-way Data
Binding, Virtual DOM, Simplicity, Performance.
Hình 2.3: Hình ảnh khái quát về các tính năng của
ReactJS
JSX: Viết tắt của Javascript XML. Là phần cú pháp mở rộng
của Javascript và được sử dụng bởi ReactJS.
Components: Ứng dụng ReactJS được tạo ra từ các components
và mỗi component sẽ có logic, cách xử lý, điều khiển riêng biệt.
Vì thế, nó có tính tái sử dụng và điều này giúp cho hệ thống dễ
phát triển, bảo trì và rà sốt lỗi trên các dự án lớn.
11
One-way Data Binding: ReactJS được thiết kế theo luồng dữ
liệu một chiều hay One-way Data Binding. Flux là một mẫu
kiến trúc giúp dữ liệu của chúng ta luôn giữ theo một chiều.
Điều này tạo tính linh hoạt và tính hiệu quả hơn cho ứng dụng.
Virtual DOM: Là sự đại diện cho đối tượng DOM gốc và hoạt
động theo cơ chế One-way Data Binding. Người dùng không
cần thao tác trực tiếp trên Real DOM mà vẫn có thể thấy được
các sự thay đổi của nó. Bởi vì Virtual DOM đóng vai trị như là
một model và view nên sự thay đổi một trong hai sẽ kéo theo
thành phần còn lại cũng sẽ thay đổi. Bất cứ khi nào có một sự
thay đổi trong ứng dụng, toàn bộ UI sẽ được re-rendered lại
trong Virtual DOM và sau đó nó sẽ kiểm tra sự khác biệt giữa
DOM trước đó và DOM mới vừa thay đổi. Khi hoàn thành, Real
DOM chỉ cập nhật lại những thành phần thực sự thay đổi và giữ
nguyên phần còn lại.
Simplicity: ReactJS sử dụng JSX để tạo cho ứng dụng trở nên
đơn giản và việc code trở nên dễ hiểu hơn. Như đã biết, ReactJS
được phát triển dựa trên nền tảng component nê có thể tái sử
dụng lại các component khi cần thiết. Điều này giúp việc học và
sử dụng ReactJS trở nên đơn giản hơn.
−
Performance: ReactJS được biết đến với hiệu suất vô cùng tuyệt
vời. Đặc trưng này giúp nó trở nên hiệu quả hơn rất nhiều
frameworks hiện nay. Bởi vì ReactJS quản lý một Virtual DOM
(tồn tại hồn tồn trong bộ nhớ). Do đó, khi tạo mới một
component, chúng ta không viết trực tiếp trên Real DOM mà
12
thay vào đó là viết trên Virtual DOM. Điều này giúp cho hiệu
năng mượt mà và nhanh hơn rất nhiều
b. ElectronJS Framework
ElectronJS là một runtime framework cho phép người dùng tạo
ứng dụng chạy trên nền tảng máy tính sử dụng HTML, CSS và
Javascript. Đây là sự kết hợp giữa 2 công nghệ đang vô cùng
phổ biến hiện nay là NodeJS và Chromium.
Thành phần kiến trúc: Chromium, NodeJS và Custom APIs.
Hình 2.5: Hình ảnh mơ tả thành phần kiến trúc của
Electron
+ Chromium: Chịu trách nhiệm tạo và hiển thị các trang
của Web. Nội dung Web được hiển thị trong Rendering
process của ElectronJS và nhờ mơi trường Chromium,
chúng ta có quyền truy cập đến tất cả APIs của trình
duyệt và cơng cụ phát triển.
+ NodeJS: Cho phép truy cập vào vùng hệ thống.
ElectronJS chạy trên nền tảng NodeJS trong chính Main
13
process của nó. Điều đó giúp chúng ta truy cập vào toàn
bộ chức năng của NodeJS như tương tác với file hệ
thống, hệ điều hành, …
+ Custom APIs: Cho phép các nhà phát triển tạo những
trải nghiệm trên máy tính một cách đơn giản và làm việc
dễ dàng với các chức năng có sẵn. ElectronJS có một
API dễ dàng để có thẻ sử dụng các thư viện mà giúp
thực hiện các công việc như tạo và hiển thị menu, hiển
thị các thơng báo, làm việc với bàn phím, …
Cách hoạt động: ElectronJS bao gồm 2 tiến trình là main
process và rendering process
+ Main process: Chịu trách nhiệm gửi và nhận các yêu
cầu từ phía Client, chuyển đổi dữ liệu giữa các cửa sổ
khác nhau và là nơi quản lý tất cả bộ nhớ trong hệ thống.
Có thể nói đây là trung tâm trao đổi dữ liệu của mọi cửa
sổ trong ứng dụng.
+ Rendering process: Chịu trách nhiệm hiển thị giao diện
của ứng dụng, tương tác trực tiếp với người dùng, xử lý
các sự kiện và gửi yêu cầu tới Main Process.
14
Hình 2.6: Hình ảnh mơ tả quy trình hoạt động của
Electron
Các đặc trưng nổi bật của ElectronJS:
+ Tính bảo mật.
+ Khả năng truy cập ở cấp độ thấp.
+ Khả năng truy cập vào phần cứng.
+ Tính tái sử dụng.
+ Hiệu năng cao.
+ Tiết kiệm chi phí và thời gian.
+ Có sẵn Module để đóng gói ứng dụng.
c. NodeJS
NodeJS là một nền tảng hướng máy chủ được xây dựng trên
cơ chế Javascript của Chrome. Nó giúp cho việc xây dựng ứng
dụng trở nên nhanh và dễ dàng mở rộng hơn.
15
Thành phần kiến trúc: Requests, NodeJS Server, Event Queue,
Thread Pool, Event Loop, External Resources.
Các thành phần quan trọng của NodeJS được mơ tả qua sơ đồ
dưới đây:
Hình 2.7: Hình ảnh khái quát các thành phần quan trọng trong
NodeJS
Các đặc trưng của NodeJS:
+ Asynchronous and Event Driven: Tất cả APIs của thư
viện NodeJS đều bất đồng bộ. NodeJS dựa trên máy
chủ và không đợi cho tới khi một API trả về dữ liệu.
Máy chủ chuyển đến API tiếp theo sau khi gọi nó và sẽ
có một cơ chế thơng báo sự kiên của NodeJS giúp máy
chủ nhận được phản hồi từ API trước đó đã gọi.
16
+ Single Threaded, Highly Scalable: NodeJS sử dụng mơ
hình đơn luồng với các sự kiện lặp. Cơ chế sự kiện giúp
máy chủ phản hồi và tạo tính mở rộng cao cho máy chủ.
NodeJS sử dụng chương trình đơn luồng và các chương
trình tương tự để cung cấp dịch vụ với số lượng lớn các
yêu cầu hơn so với nhiều máy chủ truyền thống như
Apache HTTP.
+ No Buffering: Các ứng dụng NodeJS không bao giờ sử
dụng bộ đệm cho dữ liệu.
d.
MySQL
MySQL là hệ quản trị cơ sở dữ liệu tự do nguồn mở phổ biến
nhất thế giới và được các nhà phát triển rất ưa chuộng trong
quá trình phát triển ứng dụng. Vì MySQL là hệ quản trị cơ
sở dữ liệu tốc độ cao, ổn định và dễ sử dụng, có tính khả
chuyển, hoạt động trên nhiều hệ điều hành cung cấp một hệ
thống lớn các hàm tiện ích rất mạnh. Với tốc độ và tính bảo
mật cao, MySQL rất thích hợp cho các ứng dụng có truy cập
CSDL trên internet. Người dùng có thể tải về MySQL miễn
phí từ trang chủ.
MySQL được sử dụng cho việc bổ trợ Node.js, PHP, Perl, và
nhiều ngôn ngữ khác, làm nơi lưu trữ những thông tin trên
các trang web viết bằng NodeJs, PHP hay Perl, …
Ưu điểm:
+
Linh hoạt và dễ dùng: Quá trình cài đặt tương đối đơn
giản.
17
+
Hiệu năng cao: Dù dữ liệu của bạn lớn như thế nào thì
MySQL cũng đáp ứng với tốc độ cao, mượt mà kể cả
big data của các trang thương mại điện tử hoặc những
hoạt động kinh doanh nặng nề liên quan đến cơng nghệ
thơng tin.
+
An tồn: MySQL đảm bảo được tiêu chuẩn bảo mật rất
cao.
Nhược điểm:
+
MySQL có thể bị khai thác để chiếm quyền điều khiển.
+
Dù có thể quản lí dữ liệu với số lượng lớn nhưng
MySQL vẫn không đủ khả năng tích hợp quản lí dữ liệu
khổng lồ và mang tính hệ thống cao như: hệ thống siêu
thị trên tồn quốc, ngân hàng, quản lý thơng tin dân số
cả nước, …
Tầm quan trọng:
+
Là cơ sở dữ liệu tốc độ cao, ổn định nhất hiện nay trên
thị trường.
+
Độ bảo mật thơng tin cao.
+
MySQL mặc dù có những tính năng cao nhưng sử dụng
lại đơn giản, ít phức tạp.
+
Hồn tồn miễn phí vì đây là một mã nguồn mở. Tuy
nhiên, trong trường hợp bạn cần được hỗ trợ từ
MySQL, bạn vẫn phải trả phí.
+
Được hỗ trợ từ cơng đồng vì rất nhiều thành viên.
18
+
Hoạt động trên nhiều hệ điều hành
19
Chương 3: Phân tích bài tốn
3.1.
Danh sách các u cầu phần mềm
20
21