BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP HỒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN ***** ᴥ ᴥ ***** BÁO CÁO ĐỀ TÀI HỆ THỐNG QUẢN LÝ HỌC TẬP BÁO CÁO MÔN HỌC HỆ QUẢN TRỊ ORACLE Giảng viên hướng[.]
BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP HỒ CHÍ MINH KHOA CƠNG NGHỆ THƠNG TIN ***** ᴥ ᴥ ***** BÁO CÁO ĐỀ TÀI HỆ THỐNG QUẢN LÝ HỌC TẬP BÁO CÁO MÔN HỌC HỆ QUẢN TRỊ ORACLE Giảng viên hướng dẫn: Nguyễn Đình Thành Sinh viên thực hiện: 2001200621 – Hồ Đình Luân 2001206980 – Trần Hồng Thơng 2001202071 - Tiêu Hữu Hậu 2001200290 – Phùng Đức Quang 2001207111 – Trần Thanh Nhạc TP HCM, NĂM 2023 BẢNG ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN CÔNG VIỆC NHĨM ST Người thực Nhiệm vụ % đóng góp Hồ Đình Ln Code, Trigger 22% Trần Hồng Thông Word, Chỉnh sửa, Function, Procduce 18% Tiêu Hữu Hậu Word, Chỉnh sửa, Function, Procduce 20% Phùng Đức Quang Code, Trigger 22% Trần Thanh Nhạc Chỉnh sửa, Function, Procduce 18% T MỞ ĐẦU Trong trường học công tác quản lý học tập sinh viên đóng vai trị quan trọng, phản ánh chất lượng dạy học trường trình theo dõi đánh giá kết lao động thầy trị Nếu đánh giá giúp cho Ban giám hiệu cách hiệu kích thích phong trào thi đua dạy, ngược lại lại đánh giá khơng ảnh hưởng tiêu cực đến chất lượng giảng dạy thầy kết học tập trò Hiện nay, trường quản lý điểm hồ sơ, phải xử lý lượng lớn đống sổ sách giấy tờ cơng việc tính tốn điểm sinh viên điều làm phương pháp thủ công đơn chếm lớn thời gian cơng sức Mặc dù công sức bỏ lớn hiệu cơng việc lại khơng cao sai sót lớn Dẫn đến tình trạng khơng cơng đánh giá học sinh với ảnh hưởng tiêu cực đến chất lượng giảng dạy nhà trường Để hạn chế thiếu sót trên, phần mềm quản lý học tập giúp phận quản lý khắc phục, giải cơng việc cách thuận lợi, nhanh chóng tránh sai sót q trình xử lý điểm học sinh CHƯƠNG TỔNG QUAN 1.1 GIỚI THIỆU Cùng với phát triển xã hội cơng nghệ thơng tin triển khai ứng dụng địa bàn toàn quốc, dần tiến tới tin học hóa tất hoạt động lĩnh vực ngành nghề Máy tính thực công cụ đáng tin cậy thiếu mọt hoạt động xã hội thời đại thơng tin Chính việc quản lý học tập trường phải tin học hóa tồn bộ, khơng cịn phải theo lối thủ cơng việc khai thác thông tin chiếm nhiều thời gian lưu trữ 1.2 MỤC ĐÍCH – Giảm bới thời gian ghi chép, khơng gây nhầm lẫn, thiếu xác – Thực tìm kiếm sửa liệu thuận tiện – Tận dụng tối khả tính có – Mọi cơng việc cập nhật, điều chỉnh, tìm kiếm, tra cứu điều thực nhanh chóng, xác, tiết kiệm thời gian 1.3 PHẠM VI ĐỀ TÀI a Cập nhật thông tin: - Cập nhật thông tin sinh viên - Cập nhật thông tin giáo viên b Lưu thông tin: - Lưu thông tin học sinh - Lưu thơng tin giáo viên CHƯƠNG PHÂN TÍCH Một người dùng đăng kí, đăng nhập, đăng xuất tài khoản Admin tạo lớp học, sửa hay xóa lớp học Mỗi Admin quản lí lớp tạo Admin thêm học sinh, giáo viên vào lớp học, lớp học có nhiều giáo viên giảng dạy Mỗi giáo viên tham gia dạy nhiều lớp, với mơn Mỗi học sinh thuộc lớp Mỗi người dùng thêm, sửa, xóa thơng tin thân Giáo viên xem thơng tin lớp dạy, danh sách học sinh lớp Học sinh xem thơng tin lớp học 2.1 Các đối tượng liệu cần lưu, thuộc tính GiaoVien(MaGiaoVien, TenGV, GioiTinh, NgaySinh, QueQuan, SDT, TrinhDo, Email, idTaiKhoan) GiangDay(MaGiaoVien, MaLopHoc, MonHoc) LopHoc(MaLopHoc, TenLopHoc, DiaDiem, idAdmin) Admin(idAdmin, Email, idTaiKhoan) TaiKhoan(idTaiKhoan, TenTaiKhoan, MatKhau) SinhVien(MaSV, TenSV, GioiTinh , NgaySinh, QueQuan, Email, MaLopHoc, idTaiKhoan) 2.2 Mối liên kết đối tượng 1-1 (một-một): Quan hệ giáo viên - tài khoản, sinh viên - tài khoản, admin tài khoản 1-1 1-n (một-nhiều): Quan hệ lớp học - học sinh 1-n n-n (nhiều nhiều): Quan hệ giáo viên - lớp học n-n 2.3 Các nghiệp vụ Các tác nhân hệ thống: Admin, giáo viên, học sinh Các chức chính: Admin: o Thêm, sửa, xóa lớp học o Thêm học sinh, giáo viên vào lớp học Giáo viên, học sinh: o Thêm, sửa, xóa thơng tin cá nhân o Xem thơng tin lớp dạy (hoặc học) 2.4 Các ràng buộc cần có Khóa chính(MaGiaoVien, MaLopHoc, idAdminid, TaiKhoan, MaSV) Khóa ngoại(idTaiKhoan, idAdmin, idTaiKhoan, MaLopHoc, idTaiKhoan) 2.5 Các ràng buộc ngữ nghĩa Giới tính giáo viên sinh viện thuộc giá trị “Nam” “Nữ” Tuổi sinh viên phải lớn 18 CHƯƠNG THIẾT KẾ HỆ THỐNG 3.1 Bảng a Admin b Class c Student d Student_subject e Subject f Teacher g User 3.2 Thủ tục a Admin create PROCEDURE procInsertAdmin( EMAIL IN VARCHAR2, USER_ID IN NUMBER, OUTPUT OUT VARCHAR2) IS x NUMBER := 0; BEGIN IF EMAIL IS NULL THEN OUTPUT := 'ERROR, COLUMN EMAIL IS NOT NULL'; RETURN; END IF; IF USER_ID IS NULL THEN OUTPUT := 'ERROR, COLUMN USER_ID IS NOT NULL'; RETURN; END IF; SELECT COUNT(*) INTO x FROM USER_ u WHERE U.ID = USER_ID; IF (x = 0) THEN OUTPUT := 'ERR, USER DOES NOT EXIST'; RETURN; END IF; IF OUTPUT IS NULL THEN INSERT INTO ADMIN_ (EMAIL, USER_ID) VALUES(EMAIL, USER_ID); IF SQL %FOUND THEN COMMIT; OUTPUT := 'SUCCESS, ADD ADMIN'; DBMS_OUTPUT.PUT_LINE('SUCCESS, ADD ADMIN'); ELSE OUTPUT := 'ERROR, ADD ADMIN'; DBMS_OUTPUT.PUT_LINE('ERROR, ADD ADMIN'); END IF; END IF; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('ERROR, ADD ADMIN'); DBMS_OUTPUT.PUT_LINE('SQLCODE = ' || SQLCODE ||'SQLERRM = '' ' || SQLERRM || ''''); ROLLBACK; RAISE; END; b Class create PROCEDURE procInsertClass( CLASS_NAME IN VARCHAR2, ADDRESS IN VARCHAR2, ADMIN_ID IN NUMBER, OUTPUT OUT VARCHAR2) IS x NUMBER := 0; BEGIN IF CLASS_NAME IS NULL THEN OUTPUT := 'ERROR, COLUMN CLASS_NAME IS NOT NULL'; RETURN; END IF; IF ADDRESS IS NULL THEN OUTPUT := 'ERROR, COLUMN ADDRESS IS NOT NULL'; RETURN; END IF; IF ADMIN_ID IS NULL THEN OUTPUT := 'ERROR, COLUMN ADDRESS IS NOT NULL'; RETURN; END IF; SELECT COUNT(*) INTO x FROM ADMIN_ a WHERE a.ID = ADMIN_ID; IF (x = 0) THEN OUTPUT := 'ERROR, ADMIN DOES NOT EXIST'; RETURN; END IF; IF OUTPUT IS NULL THEN INSERT INTO CLASS_ (CLASS_NAME, ADDRESS, ADMIN_ID) VALUES (CLASS_NAME, ADDRESS, ADMIN_ID); IF SQL%FOUND THEN COMMIT; OUTPUT := 'SUCCESS, ADD CLASS'; DBMS_OUTPUT.PUT_LINE('SUCCESS, ADD CLASS'); ELSE OUTPUT := 'ERROR, ADD CLASS'; DBMS_OUTPUT.PUT_LINE('ERROR, ADD CLASS'); END IF; END IF; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('ERROR, ADD CLASS'); DBMS_OUTPUT.PUT_LINE('SQLCODE = ' || SQLCODE ||' SQLERRM = ''' || SQLERRM || ''''); ROLLBACK; RAISE; END; 3.3 Function a Tính điểm trung bình SS create function FUNC_mediumScore(STUDENT_ID_IN IN NUMBER) return FLOAT is mediumScore FLOAT := 0; STUDENT_SUBJECT_%rowtype; CURSOR LIST_SS IS SELECT SS.* FROM DEMO.STUDENT_ S JOIN STUDENT_SUBJECT_ SS on S.ID = SS.STUDENT_ID WHERE SS.STATUS = AND S.ID = STUDENT_ID_IN; countRow NUMBER := 0; begin OPEN LIST_SS; LOOP FETCH LIST_SS INTO SS; EXIT WHEN LIST_SS%NOTFOUND; mediumScore := mediumScore + ((SS.TEST_SCORE * 0.3) + (SS.FINAL_EXAM_SCORE * 0.7)); countRow := countRow + 1; END LOOP; CLOSE LIST_SS; IF countRow = then countRow := 1; end if; RETURN mediumScore / countRow; end; b Tính điểm trung bình cao S create FUNCTION FUNC_TALLESTMEDIUMSCORE(CLASS_ID_IN IN NUMBER) RETURN FLOAT IS tallestMediumScore FLOAT := 0; STUDENT_%ROWTYPE; mediumScore FLOAT := 0; CURSOR LIST_S IS SELECT S.* FROM STUDENT_ S JOIN CLASS_ C ON C.ID = S.CLASS_ID WHERE C.ID = CLASS_ID_IN; BEGIN OPEN LIST_S; LOOP FETCH LIST_S INTO S; EXIT WHEN LIST_S%NOTFOUND; mediumScore := DEMO.FUNC_MEDIUMSCORE(S.ID); IF ( mediumScore > tallestMediumScore) THEN tallestMediumScore := mediumScore; END IF; END LOOP; CLOSE LIST_S; RETURN tallestMediumScore; END; 3.4 Trigger a Kiểm tra tuổi create trigger TEACHER_AGE_CHECK before insert or update on TEACHER_ for each row DECLARE difference NUMBER; BEGIN SELECT EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM :new.DATE_OF_BIRTH) into difference FROM DUAL; dbms_output.put_line('Tuổ i là: ' || difference); IF (difference < 18) THEN dbms_output.put_line('Chưa đủ 18 tuổ i'); raise_application_error(-20000, 'Chưa đủ 18 tuổ i'); END IF; END; b Kiểm tra email create trigger TEACHER_EMAIL_CHECK before insert or update on TEACHER_ for each row DECLARE T TEACHER_%ROWTYPE; CURSOR LIST_T IS SELECT T.* FROM TEACHER_ T; BEGIN OPEN LIST_T; LOOP FETCH LIST_T INTO T; EXIT WHEN LIST_T%NOTFOUND; IF(T.EMAIL = :NEW.EMAIL) THEN DBMS_OUTPUT.PUT_LINE('EMAIL ALREADY EXISTS'); DELETE FROM USER_ U WHERE U.ID = :NEW.USER_ID; IF SQL%FOUND THEN DBMS_OUTPUT.PUT_LINE('SUCCESS, DELETE AUTO USER'); ELSE DBMS_OUTPUT.PUT_LINE('ERROR, DELETE AUTO USER'); END IF; RAISE_APPLICATION_ERROR(-20000, 'EMAIL ALREADY EXISTS'); END IF; END LOOP; CLOSE LIST_T; END;