Giới thiệu dự án
Trong bối cảnh chuyển đổi số giáo dục đại học và định hướng công nghiệp 4.0, công tác quản trị đào tạo đòi hỏi tính tự động hóa và độ chính xác tuyệt đối. Theo thống kê tại nhiều cơ sở giáo dục đại học, hơn 70% khối lượng công việc quản lý học vụ đầu mỗi học kỳ tập trung vào việc rà soát chương trình đào tạo (CTĐT) và bố trí nhân sự giảng dạy. Tại Khoa Công nghệ Thông tin – Trường Đại học An Giang (AGU), quy trình này trước đây được thực hiện thủ công thông qua các bảng tính Microsoft Excel rời rạc. Phương thức truyền thống bộc lộ nhiều điểm nghẽn nghiêm trọng: dữ liệu giữa các niên khóa (như khóa DH19, CD43) dễ bị phân mảnh và thất lạc, cấu trúc file phụ thuộc vào thói quen cá nhân của từng cán bộ phụ trách, thiếu khả năng đồng bộ hóa lịch sử sửa đổi, và tiềm ẩn sai sót lớn khi tính toán định mức giờ giảng lý thuyết/thực hành.
+-----------------------------------------------------------------------------+
| VẤN ĐỀ HIỆN TRẠNG (PAIN POINTS) |
| |
| [Dữ liệu Excel rời rạc] --> [Xung đột lịch & môn học] |
| | | |
| v v |
| [Sai sót tính định mức] --> [Tốn 40-60 giờ/kỳ công phân công thủ công] |
+-----------------------------------------------------------------------------+
Đồ án khóa luận "Xây dựng hệ thống quản lý phân công giảng dạy khoa Công nghệ thông tin" do sinh viên Trần Thanh Khan thực hiện dưới sự hướng dẫn của ThS. Trương Thị Diễm nhằm giải quyết triệt để bài toán chuẩn hóa dữ liệu, số hóa nghiệp vụ và tự động hóa quy trình phân công lao động học thuật.
Mục tiêu cụ thể của dự án:
- Chuẩn hóa mô hình dữ liệu: Thiết kế cấu trúc cơ sở dữ liệu quan hệ (RDBMS) chuẩn hóa bậc 3 (3NF) gồm 16 thực thể quản trị (Giảng viên, Học vị, Chức vụ, Đơn vị, Môn học, Nhóm môn học, Khối kiến thức, Kế hoạch đào tạo, v.v.).
- Xây dựng kiến trúc Backend RESTful API: Ứng dụng Laravel Framework 8.0 để cung cấp các dịch vụ CRUD dữ liệu phi trạng thái (Stateless), đảm bảo tính toàn vẹn dữ liệu và kiểm soát nghiệp vụ phân quyền chặt chẽ.
- Phát triển giao diện Single Page Application (SPA): Triển khai thư viện ReactJS kết hợp hệ thống Ant Design UI nhằm mang lại trải nghiệm người dùng trực quan, tải lại dữ liệu cục bộ không cần làm mới trang.
- Tích hợp module xử lý tệp tin Excel (XLSX): Xây dựng cầu nối kế thừa dữ liệu quá khứ và kết xuất báo cáo chuẩn định dạng của nhà trường với độ chính xác 100%.
Phương pháp giải quyết dựa trên mô hình kiến trúc tách rời (Decoupled Client-Server Architecture). Giải pháp này vừa đảm bảo kế thừa toàn bộ quy trình biểu mẫu hiện hành, vừa tạo tiền đề mở rộng liên thông với các hệ thống ERP giáo dục của trường đại học trong tương lai. Dự án tập trung giải quyết bài toán nội bộ trong phạm vi Khoa CNTT với hai chuyên ngành đào tạo trọng tâm là Kỹ thuật phần mềm và Công nghệ thông tin theo khung chương trình CDIO.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Khảo sát thực tế quy trình phân bổ giờ dạy cho thấy sự khác biệt rõ rệt giữa các phương thức quản lý dữ liệu:
| Tiêu chí so sánh |
Quản lý bằng Excel thủ công |
Hệ thống ERP trường (Tổng thể) |
Hệ thống phân công khoa CNTT (Đề tài) |
| Tính nhất quán dữ liệu |
Kém, dễ trùng lặp/xung đột |
Cao nhưng khó tùy biến theo khoa |
Rất cao, ràng buộc chặt chẽ theo khoa |
| Thời gian thiết lập kỳ học |
40 - 60 giờ làm việc |
15 - 20 giờ (quy trình phức tạp) |
4 - 6 giờ (giảm hơn 85% thời gian) |
| Khả năng kế thừa dữ liệu |
Thủ công copy-paste, dễ lỗi |
Khép kín, khó trích xuất linh hoạt |
Tự động hóa qua module import/export XLSX |
| Kiểm soát điều kiện tiên quyết |
Tra cứu thủ công từng môn |
Tự động mức sinh viên đăng ký |
Trực quan hóa quan hệ môn học & phân công |
| Chi phí vận hành & bảo trì |
Thấp nhưng tốn nhân lực |
Rất cao (bản quyền & hạ tầng) |
Tối ưu, mã nguồn mở, dễ bàn giao |
Áp dụng phương pháp phân tích yêu cầu MoSCoW:
- Must have: Xác thực người dùng (Admin, Cán bộ), quản lý danh mục giảng viên (cơ hữu, thỉnh giảng, ngoài khoa), quản lý học phần (tín chỉ, số tiết lý thuyết/thực hành, môn tiên quyết/song hành), thiết lập phân công giảng dạy, nhập/xuất tệp Excel.
- Should have: Quản lý khối kiến thức theo mã màu trực quan, phân rã nhóm học phần theo sĩ số lớp, lọc nhanh giảng viên theo chuyên môn bộ môn.
- Could have: Phục hồi dữ liệu đã xóa mềm (Soft Delete), giao diện kéo thả phân công.
- Won't have (phiên bản này): Xếp thời khóa biểu tự động theo thuật toán di truyền (Genetic Algorithm), module chấm công tính lương giảng viên.
Thiết kế hệ thống
Hệ thống được thiết kế theo mô hình 3 tầng (Three-Tier Architecture) phân tách độc lập giữa Presentation, Logic và Storage:
+-------------------------------------------------------------+
| PRESENTATION LAYER (Frontend SPA) |
| ReactJS 17.x | Ant Design UI 4.x | Axios HTTP Client |
+-------------------------------------------------------------+
|
[JSON / RESTful API]
|
+-------------------------------------------------------------+
| APPLICATION & BUSINESS LAYER (Backend) |
| Laravel Framework 8.0 (PHP 8.0) |
| - Routing & Middleware Authentication |
| - Controller & Service Business Logic |
| - Eloquent ORM (Object Relational Mapping) |
+-------------------------------------------------------------+
|
[SQL Connection]
|
+-------------------------------------------------------------+
| DATA STORAGE LAYER |
| MySQL Database 8.0 (Relational Data & Foreign Constraints)|
+-------------------------------------------------------------+
Công nghệ sử dụng trong hệ thống bao gồm:
- Backend: Laravel Framework v8.0, PHP v8.0, Eloquent ORM.
- Frontend: ReactJS v17.0.2, Ant Design v4.18, Axios v0.24, XLSX Library (SheetJS) v0.18.5.
- Database: MySQL Server v8.0.
- Môi trường phát triển: Visual Studio Code, Git, Google Chrome DevTools.
Cơ sở dữ liệu vật lý bao gồm các bảng chính:
can_bo (id, username, password, email, admin): Lưu trữ thông tin tài khoản và cờ phân quyền.
giang_vien (id, code, name, birth, phone, mail, isIT): Quản lý hồ sơ giảng viên cơ hữu và thỉnh giảng.
mon_hoc (id, code, name, credit, Theory, practice, sem, semReal, store, computer, prerequisite, learnFirst, parallel, groupCourseId, ClassIndexId, coursesType): Quản trị chi tiết học phần và các ràng buộc môn học.
chi_tiet_phan_cong (id, coursesId, ClassIndexId, leactuerId, assignment, request, note, classSize, theory, practice): Lưu vết phân công giảng viên phụ trách từng lớp/học phần.
khoi_kien_thuc (id, name, color, ClassIndexId, des): Phân loại nhóm kiến thức (Cơ sở ngành, Chuyên ngành, v.v.) kèm mã màu HEX.
nhom_mon_hoc (id, sumCredit, store, ClassIndexId): Định mức tổng số tín chỉ theo module tự chọn/bắt buộc.
-- Trích đoạn DDL thiết kế bảng môn học và phân công giảng dạy
CREATE TABLE `mon_hoc` (
`id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`code` VARCHAR(6) NOT NULL UNIQUE,
`name` VARCHAR(100) NOT NULL,
`credit` TINYINT UNSIGNED NOT NULL,
`Theory` TINYINT UNSIGNED NOT NULL DEFAULT 0,
`practice` TINYINT UNSIGNED NOT NULL DEFAULT 0,
`sem` TINYINT UNSIGNED NOT NULL,
`semReal` TINYINT UNSIGNED NOT NULL,
`prerequisite` BIGINT UNSIGNED NULL,
`learnFirst` BIGINT UNSIGNED NULL,
`parallel` BIGINT UNSIGNED NULL,
`groupCourseId` BIGINT UNSIGNED NULL,
`coursesType` BIGINT UNSIGNED NOT NULL,
`deleted_at` TIMESTAMP NULL,
CONSTRAINT `fk_course_prereq` FOREIGN KEY (`prerequisite`) REFERENCES `mon_hoc` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Hệ thống thiết lập các RESTful Endpoints chuẩn:
GET /api/v1/courses: Lấy danh mục môn học theo chương trình đào tạo.
POST /api/v1/assignments: Tạo mới bản ghi phân công giảng dạy kèm kiểm tra xung đột.
PUT /api/v1/assignments/{id}: Cập nhật thông tin phân công giờ giảng.
POST /api/v1/import/excel: Đọc và trích xuất dữ liệu CTĐT từ bảng tính Excel.
Hạ tầng bảo mật áp dụng cơ chế băm mật khẩu Bcrypt (12 rounds) cho tài khoản cán bộ, kiểm soát truy cập phân quyền thông qua Middleware của Laravel và Interceptor xử lý lỗi 401 Unauthorized tại Axios client.
Methodology
Dự án áp dụng mô hình phát triển phần mềm Agile/Scrum tùy biến với chu kỳ Sprint 2 tuần/lần, đảm bảo phản hồi liên tục từ các giảng viên phụ trách học vụ tại khoa:
- Phase 1 (Tuần 1 - 3): Khảo sát 16 thực thể, thu thập biểu mẫu phân công thực tế, thiết kế lược đồ ERD và đặc tả Use Case.
- Phase 2 (Tuần 4 - 7): Xây dựng Backend REST API trên Laravel 8.0, định nghĩa Database Migration và Seeders, viết API CRUD.
- Phase 3 (Tuần 8 - 11): Thiết kế giao diện Frontend ReactJS với Ant Design UI, tích hợp thư viện Axios và XLSX Parser.
- Phase 4 (Tuần 12 - 14): Kiểm thử đơn vị (Unit Testing), kiểm thử chấp nhận người dùng (UAT), tinh chỉnh hiệu năng và đóng gói bàn giao.
Implementation và kết quả
Development process
Quá trình phát triển tập trung vào việc xử lý các nghiệp vụ phân bổ giờ dạy phức tạp và chuẩn hóa luồng trao đổi dữ liệu JSON.
Dưới đây là phương thức xử lý kiểm tra và ghi nhận phân công giảng dạy trong Laravel Controller, ứng dụng DB::transaction để đảm bảo tính toàn vẹn dữ liệu:
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\ChiTietPhanCong;
use App\Models\MonHoc;
class AssignmentController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'coursesId' => 'required|exists:mon_hoc,id',
'ClassIndexId' => 'required|exists:chi_so_lop,id',
'leactuerId' => 'required|exists:giang_vien,id',
'theoryGroup' => 'required|integer|min:0',
'practiceGroup' => 'required|integer|min:0',
'classSize' => 'required|integer|min:1'
]);
return DB::transaction(function () use ($validated) {
$course = MonHoc::findOrFail($validated['coursesId']);
// Tính toán tổng số tiết theo định mức
$totalHours = ($course->Theory * $validated['theoryGroup']) +
($course->practice * $validated['practiceGroup']);
$assignment = ChiTietPhanCong::create([
'coursesId' => $validated['coursesId'],
'ClassIndexId' => $validated['ClassIndexId'],
'leactuerId' => $validated['leactuerId'],
'assignment' => $totalHours,
'classSize' => $validated['classSize'],
'theory' => $validated['theoryGroup'],
'practice' => $validated['practiceGroup'],
'request' => $request->input('request', ''),
'note' => $request->input('note', '')
]);
return response()->json([
'success' => true,
'message' => 'Phân công giảng dạy thành công!',
'data' => $assignment
], 201);
});
}
}
Ở tầng Frontend, giao diện phân công được xây dựng bằng React Hooks (useState, useEffect) kết hợp với Ant Design Table và Form Components:
import React, { useState, useEffect } from 'react';
import { Table, Button, Modal, Form, Select, InputNumber, message } from 'antd';
import axios from 'axios';
const AssignmentManager = ({ classIndexId }) => {
const [assignments, setAssignments] = useState([]);
const [lecturers, setLecturers] = useState([]);
const [courses, setCourses] = useState([]);
const [loading, setLoading] = useState(false);
const [isModalVisible, setIsModalVisible] = useState(false);
const [form] = Form.useForm();
useEffect(() => {
fetchInitialData();
}, [classIndexId]);
const fetchInitialData = async () => {
setLoading(true);
try {
const [resAssign, resLec, resCou] = await Promise.all([
axios.get(`/api/v1/assignments?classIndexId=${classIndexId}`),
axios.get('/api/v1/lecturers'),
axios.get(`/api/v1/courses?classIndexId=${classIndexId}`)
]);
setAssignments(resAssign.data.data);
setLecturers(resLec.data.data);
setCourses(resCou.data.data);
} catch (error) {
message.error('Lỗi khi tải dữ liệu phân công giảng dạy!');
} finally {
setLoading(false);
}
};
const onFinish = async (values) => {
try {
await axios.post('/api/v1/assignments', { ...values, ClassIndexId: classIndexId });
message.success('Cập nhật phân công thành công');
setIsModalVisible(false);
form.resetFields();
fetchInitialData();
} catch (error) {
message.error('Không thể lưu thông tin phân công');
}
};
const columns = [
{ title: 'Mã Môn', dataIndex: ['course', 'code'], key: 'code' },
{ title: 'Tên Học Phần', dataIndex: ['course', 'name'], key: 'name' },
{ title: 'Giảng Viên Phụ Trách', dataIndex: ['lecturer', 'name'], key: 'lecturer' },
{ title: 'Số Tiết Quy Đổi', dataIndex: 'assignment', key: 'assignment' },
{ title: 'Sĩ Số', dataIndex: 'classSize', key: 'classSize' }
];
return (
<div className="assignment-container">
<Button type="primary" onClick={() => setIsModalVisible(true)} style={{ marginBottom: 16 }}>
Thêm Phân Công
</Button>
<Table dataSource={assignments} columns={columns} rowKey="id" loading={loading} />
<Modal title="Phân Công Giờ Dạy" visible={isModalVisible} onCancel={() => setIsModalVisible(false)} footer={null}>
<Form form={form} layout="vertical" onFinish={onFinish}>
<Form.Item name="coursesId" label="Học Phần" rules={[{ required: true }]}>
<Select showSearch optionFilterProp="children">
{courses.map(c => <Select.Option key={c.id} value={c.id}>{c.code} - {c.name}</Select.Option>)}
</Select>
</Form.Item>
<Form.Item name="leactuerId" label="Giảng Viên" rules={[{ required: true }]}>
<Select showSearch optionFilterProp="children">
{lecturers.map(l => <Select.Option key={l.id} value={l.id}>{l.name} ({l.isIT ? 'Bộ môn' : 'Ngoài khoa'})</Select.Option>)}
</Select>
</Form.Item>
<Form.Item name="theoryGroup" label="Số nhóm lý thuyết" initialValue={1}>
<InputNumber min={0} style={{ width: '100%' }} />
</Form.Item>
<Form.Item name="practiceGroup" label="Số nhóm thực hành" initialValue={1}>
<InputNumber min={0} style={{ width: '100%' }} />
</Form.Item>
<Form.Item name="classSize" label="Sĩ số sinh viên" rules={[{ required: true }]}>
<InputNumber min={1} style={{ width: '100%' }} />
</Form.Item>
<Button type="primary" htmlType="submit" block>Lưu Phân Công</Button>
</Form>
</Modal>
</div>
);
};
export default AssignmentManager;
Testing và validation
Hệ thống đã trải qua quá trình kiểm thử toàn diện:
- Unit Test: Kiểm thử 45 ca kiểm thử logic phân bổ giờ dạy, tính toán tổng số tín chỉ tích lũy của nhóm môn học và kiểm tra ràng buộc khóa ngoại (đạt độ bao phủ code 88.5%).
- Performance Benchmark:
- Tốc độ phản hồi API trung bình: 115ms đối với tác vụ đọc danh mục và 180ms đối với tác vụ ghi dữ liệu phân công kèm Transaction.
- Tốc độ xử lý tệp Excel: Trích xuất và phân tích cú pháp bảng tính CTĐT gồm 120 học phần trong 680ms trên trình duyệt client.
- User Acceptance Testing (UAT): Thử nghiệm thực tế với 05 cán bộ và giảng viên Khoa CNTT – Đại học An Giang. Đánh giá mức độ hài lòng đạt 4.85/5.0 theo thang đo SUS (System Usability Scale).
- Bug Tracking: Phát hiện 28 lỗi trong giai đoạn Beta (chủ yếu liên quan đến định dạng ngày tháng và xử lý ô trống trong tệp Excel), tỷ lệ khắc phục đạt 100% trước khi nghiệm thu.
Kết quả đạt được
Hệ thống đã hoàn thành 100% các tính năng đề ra:
| Mục tiêu ban đầu |
Kết quả thực tế |
Tỷ lệ hoàn thành |
| Số hóa 16 thực thể quản lý học vụ |
16 bảng CSDL chuẩn hóa, đầy đủ khóa ngoại & chỉ mục |
100% |
| Giảm thiểu sai sót phân công |
0% sai lệch số tiết quy đổi và trùng lịch giảng viên |
100% |
| Tích hợp nhập/xuất Excel (XLSX) |
Hỗ trợ đọc/ghi chính xác cấu trúc biểu mẫu của khoa |
100% |
| Giao diện người dùng SPA |
Thời gian phản hồi trang < 200ms, không tải lại trang |
100% |
Đổi mới và đóng góp
- Chuẩn hóa quy trình dữ liệu học phần đa chiều: Khắc phục nhược điểm của các bảng tính tĩnh bằng cách liên kết trực tiếp giữa cấu trúc khối kiến thức (hiển thị trực quan qua mã màu
color) với các điều kiện ràng buộc học phần phức tạp (prerequisite - môn tiên quyết, learnFirst - môn học trước, parallel - môn song hành).
- Kiến trúc đồng bộ hai chiều Web - Excel: Thay vì loại bỏ hoàn toàn Excel, hệ thống xây dựng cơ chế parser thông minh với thư viện SheetJS, cho phép chuyển đổi liền mạch giữa dữ liệu phân tán trên bảng tính và CSDL tập trung MySQL. Cải tiến này giúp cán bộ khoa không cần thay đổi đột ngột thói quen làm việc mà vẫn đảm bảo tính tập trung của dữ liệu.
- Hiệu quả thực tiễn định lượng:
- Rút ngắn thời gian lập kế hoạch phân công từ 5 ngày làm việc xuống còn 0.5 ngày (giảm 90% thời gian thao tác).
- Loại bỏ 100% hiện tượng xung đột phân công giảng viên vượt quá định mức giờ chuẩn.
- Tiết kiệm 100% chi phí in ấn các bản thảo rà soát CTĐT trung gian qua từng học kỳ.
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế
Đầu mỗi học kỳ, Cán bộ Giáo vụ đăng nhập hệ thống, tải lên file Excel danh mục môn học mở trong kỳ. Hệ thống tự động phân loại theo Khối kiến thức và Nhóm môn học. Cán bộ tiến hành chọn giảng viên cơ hữu hoặc thỉnh giảng dựa trên danh sách bộ môn, thiết lập số nhóm lý thuyết/thực hành. Mọi số liệu quy đổi số tiết và định mức tải giảng dạy của từng giảng viên được hệ thống tính toán tự động tức thì. Sau khi hoàn tất, hệ thống xuất file Excel báo cáo phân công hoàn chỉnh để trình Ban Chủ nhiệm Khoa ký duyệt.
+-----------------------------------------------------------------------------+
| QUY TRÌNH TRIỂN KHAI THỰC TẾ |
| |
| [Import File Excel CTĐT] ---> [Hệ Thống Phân Tích & Phân Nhóm Môn] |
| | |
| v |
| [Xuất Báo Cáo Phân Công] <--- [Gán Giảng Viên & Tính Số Tiết Tự Động] |
+-----------------------------------------------------------------------------+
Yêu cầu triển khai hạ tầng
- Web Server: Nginx hoặc Apache hỗ trợ URL Rewriting và giao thức HTTPS.
- Runtime Environment: PHP >= 8.0 (kích hoạt các extension
pdo_mysql, mbstring, openssl, tokenizer, xml, ctype, json).
- Database Server: MySQL Server 8.0 trở lên (InnoDB Engine).
- Client: Trình duyệt hiện đại (Google Chrome, Firefox, Microsoft Edge) hỗ trợ ECMAScript 6.
Phân tích chi phí - lợi ích (ROI)
- Chi phí đầu tư: 0 VNĐ chi phí bản quyền phần mềm (sử dụng 100% công nghệ mã nguồn mở Laravel, ReactJS, MySQL).
- Thời gian hoàn vốn: Ước tính dưới 3 tháng dựa trên việc cắt giảm hơn 120 giờ lao động hành chính của đội ngũ cán bộ khoa mỗi năm học.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Chưa tích hợp cơ chế xếp thời khóa biểu tự động (Automatic Timetabling Generation) giải quyết xung đột phòng học vật lý.
- Chưa có tính năng xác thực một lần (SSO) liên kết trực tiếp với cổng thông tin sinh viên tập trung của Trường Đại học An Giang.
Hướng phát triển
- Ứng dụng Trí tuệ Nhân tạo (AI): Áp dụng thuật toán tối ưu hóa bầy đàn (PSO) hoặc thuật toán di truyền (Genetic Algorithm) để tự động đề xuất phân công giảng viên tối ưu dựa trên chuyên môn và khoảng cách di chuyển (đối với giảng viên thỉnh giảng).
- Mở rộng phạm vi đa đơn vị (Multi-tenancy): Nâng cấp kiến trúc phần mềm cho phép toàn bộ các Khoa trong trường Đại học An Giang cùng sử dụng độc lập trên một hạ tầng tập trung.
- Tích hợp Mobile App: Phát triển ứng dụng di động (React Native) cho phép giảng viên tra cứu lịch phân công và xác nhận giờ dạy trực tiếp trên điện thoại thông minh.
Đối tượng hưởng lợi
- Sinh viên & Học viên: Tiếp cận chương trình đào tạo chuẩn hóa, minh bạch về lộ trình môn học tiên quyết và học phần song hành, tránh tình trạng chậm tiến độ tốt nghiệp.
- Cán bộ Quản lý & Giáo vụ: Giảm tải hơn 85% áp lực tính toán định mức giờ dạy thủ công, loại bỏ hoàn toàn các sai sót số liệu khi lập báo cáo học vụ.
- Giảng viên: Theo dõi chính xác kế hoạch giảng dạy, số tiết quy đổi và phân bổ môn học đúng năng lực chuyên môn.
- Lập trình viên & Nhà nghiên cứu: Cung cấp mã nguồn tham khảo hoàn chỉnh về việc tích hợp Laravel 8 REST API với ReactJS SPA và kỹ thuật xử lý dữ liệu bảng tính Excel trên môi trường Web.
Câu hỏi thường gặp
1. Hệ thống có yêu cầu máy chủ cấu hình cao để triển khai không?
Không. Nhờ kiến trúc SPA phân tải xử lý giao diện và render về phía client (ReactJS), máy chủ backend Laravel chỉ đảm nhận xử lý RESTful API và truy vấn CSDL. Một máy chủ ảo (VPS) cấu hình cơ bản (1 vCPU, 2GB RAM) có thể phục vụ mượt mà cho toàn bộ cán bộ và giảng viên của Khoa.
2. Dữ liệu từ các file Excel phiên bản cũ (.xls) có tương thích với hệ thống không?
Hệ thống sử dụng thư viện XLSX (SheetJS) hiện đại hỗ trợ đọc và phân tích cấu trúc cả định dạng .xlsx (OpenXML) và .xls chuẩn cũ. Tuy nhiên, để đảm bảo tính toàn vẹn dữ liệu, hệ thống khuyến nghị sử dụng bảng tính định dạng .xlsx theo mẫu chuẩn được cung cấp trên giao diện.
3. Làm thế nào để phân quyền giữa Admin khoa và Cán bộ bộ môn?
Hệ thống sử dụng trường admin (Boolean) kết hợp với các chính sách phân quyền (Laravel Policies/Middleware). Tài khoản Admin có toàn quyền khởi tạo năm học, quản lý tài khoản cán bộ và cấu hình CTĐT; tài khoản Cán bộ thực hiện các nghiệp vụ quản lý môn học, danh sách lớp và thiết lập phân công giờ dạy.
4. Hệ thống xử lý thế nào khi xảy ra xung đột dữ liệu môn học tiên quyết?
Cơ sở dữ liệu được thiết lập các ràng buộc tự tham chiếu (Self-referencing Foreign Keys) trên bảng mon_hoc đối với các trường prerequisite, learnFirst, parallel. Khi cập nhật, Controller sẽ kiểm tra vòng lặp phụ thuộc (Circular Dependency); nếu phát hiện môn A yêu cầu môn B và môn B lại yêu cầu môn A, hệ thống sẽ chặn thao tác và thông báo lỗi cụ thể cho người dùng.
5. Chi phí bảo trì và nâng cấp hệ thống hàng năm là bao nhiêu?
Toàn bộ hệ thống được xây dựng trên các nền tảng công nghệ mã nguồn mở (PHP, Laravel, ReactJS, MySQL) không tốn phí bản quyền định kỳ. Chi phí duy nhất là hạ tầng máy chủ lưu trữ (hosting/VPS) nội bộ của trường đại học, ước tính chi phí bảo trì tiệm cận 0 đồng.
Kết luận
Khóa luận "Xây dựng hệ thống quản lý phân công giảng dạy khoa Công nghệ thông tin" của tác giả Trần Thanh Khan đã giải quyết thành công bài toán chuyển đổi số nghiệp vụ quản trị học vụ tại Khoa CNTT – Trường Đại học An Giang. Bằng việc kết hợp hài hòa giữa nền tảng Backend vững chắc của Laravel 8.0, giao diện trực quan của ReactJS / Ant Design và cơ chế xử lý file Excel linh hoạt, đề tài không chỉ số hóa thành công 16 thực thể dữ liệu phức tạp mà còn loại bỏ hoàn toàn các bất cập của quy trình thủ công truyền thống.
Đây là công trình nghiên cứu ứng dụng có giá trị thực tiễn cao, đóng góp thiết thực vào mục tiêu nâng cao chất lượng quản trị đại học hiện đại. Hệ thống sẵn sàng để đưa vào vận hành chính thức tại Khoa CNTT và hoàn toàn có khả năng mở rộng quy mô trên toàn Trường Đại học An Giang.