Luận án Nghiên cứu xây dựng mô hình quản lý toàn diện trường đại học urp (university resource planning) ứng dụng trong các trường đại học ở Việt Nam - Thử nghiệm tại trường đại học kinh tế, đại học Huế

Trong quá trình triển khai mô hình URP tại Trường Đại học Kinh tế Huế, các bài học kinh nghiệm của thế giới khi ứng dụng ERP vào quản lý trường đại học mà tác giả đã nghiên cứu và đúc kết trong chương 2 đã được vận dụng một cách hiệu quả và đem lại nhiều lợi ích thiết thực. Một là, Ban Giám hiệu Nhà trường có tầm nhìn và quyết tâm rất lớn trong việc triển khai các hệ thống thông tin quản lý theo mô hình URP nhằm hoàn thiện công tác quản lý. Nhà trường đã có Quyết định số 231/QĐ-ĐHKT-TCHC về việc thành lập Ban chỉ đạo triển khai ứng dụng CNTT do Phó Hiệu trưởng Trương Tấn Quân làm Trưởng ban và các thành viên gồm lãnh đạo của các phòng ban liên quan và các khoa có chuyên môn trong lĩnh vực này như Phòng Tổ chức Hành chính, Phòng Kế hoạch - Tài chính, Phòng Đào tạo Đại học, Phòng Đào tạo Sau đại học, Trung tâm Thông tin thư viện và Khoa Hệ thống thông tin kinh tế .vv . Đây là bộ phận thường trực giải quyết mọi vấn đề triển khai URP và đưa ra các quyết định tức thời giải quyết các vướng mắc nảy sinh trong quá trình thực hiện

pdf280 trang | Chia sẻ: tueminh09 | Ngày: 07/02/2022 | Lượt xem: 313 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Luận án Nghiên cứu xây dựng mô hình quản lý toàn diện trường đại học urp (university resource planning) ứng dụng trong các trường đại học ở Việt Nam - Thử nghiệm tại trường đại học kinh tế, đại học Huế, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
con.Information); } #region[Khoa] void Loadkhoaphong() { gridControl3.DataSource = newBLL_KhoaPhong().Loadkhoaphong(); } - 57 - void ThemKhoaPhong() { KhoaPhong kp = newKhoaPhong(); kp.MaKhoaPhong = txtMaKhoaPhong.Text; kp.TenKhoaPhong = txtTenKhoaPhong.Text; newBLL_KhoaPhong().Themkhoaphong(kp); Loadkhoaphong(); XtraMessageBox.Show("Thêm thành công khoa phòng mới", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); ResetKhoaPhong(); } void SuaKhoaPhong() { KhoaPhong kp = newKhoaPhong(); kp.MaKhoaPhong = txtMaKhoaPhong.Text; kp.TenKhoaPhong = txtTenKhoaPhong.Text; newBLL_KhoaPhong().Suakhoaphong(kp); Loadkhoaphong(); XtraMessageBox.Show("Sửa thông tin khoa phòng thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); } void XoaKhoaPhong() { KhoaPhong kp = newKhoaPhong(); kp.MaKhoaPhong = txtMaKhoaPhong.Text; newBLL_KhoaPhong().Xoakhoaphong(kp); Loadkhoaphong(); XtraMessageBox.Show("Xóa khoa phòng thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); ResetKhoaPhong(); } #region[Khai báo thiết bị mới] void Loadlloaithietbi() { cbloaithietbi.DataSource = newBLL_ThietBi().Loadloaithietbi(); cbloaithietbi.DisplayMember = "TenLoaiThietBi"; cbloaithietbi.ValueMember = "MaLoaiThietBi"; } void SinhMaTuDong(string maloaithietbi) { int ma; ThietBi tb=newThietBi(); tb.MaLoaiThietBi=maloaithietbi; DataTable dt = newBLL_ThietBi().Loadmathietbi_Sinhtudong(tb); if (dt.Rows.Count == 0) ma = 0; else { //MessageBox.Show(dt.Rows.Count.ToString()); string maxid = newBLL_ThietBi().Loadmathietbi_Sinhtudong(tb).Rows[0][0].ToString(); string laymaxid = maxid.Remove(0, maxid.Length - 4); string laymaconlai = maxid.Remove(maxid.Length - 4); ma = int.Parse(laymaxid); } txtmathietbi.Text = string.Format("{0}MTB{1}",maloaithietbi, Masub(ma + 1)); } - 58 - string Masub(int ma) { if (ma.ToString().Length == 1) masubthietbi = string.Format("0000{0}", ma.ToString()); else if (ma.ToString().Length == 2) masubthietbi = string.Format("000{0}", ma.ToString()); else if (ma.ToString().Length == 3) masubthietbi = string.Format("00{0}", ma.ToString()); else if (ma.ToString().Length == 4) masubthietbi = string.Format("0{0}", ma.ToString()); return masubthietbi; } privatevoid cbloaithietbi_SelectedIndexChanged(object sender, EventArgs e) { try { SinhMaTuDong(cbloaithietbi.SelectedValue.ToString()); } catch { } } void Themkhaibaothietbi() { ThietBi tb = newThietBi(); tb.MaThietBi = txtmathietbi.Text; tb.TenThietBi = txttenthietbi.Text; tb.DonViTinh = txtdonvitinh.Text; //tb.Mat = 0; //tb.Hong = 0; //tb.DangMuon = 0; //tb.ThanhLi = 0; //tb.SoLuong = 0; tb.MaLoaiThietBi = cbloaithietbi.SelectedValue.ToString(); newBLL_ThietBi().Themthietbi(tb); XtraMessageBox.Show("Khai báo thành công thiết bị mới", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); } - 59 - Người học Quản lý Hồ sơ Cán bộ Phòng Quản lý Thông tin sinh viên Thông tin cập nhật Hồ sơ trúng tuyển Yêu cầu xử lý Thông tin phản hồi Sơ yếu lý lịch Thông tin tài khoản Thông tin lớp chuyên ngành Mật khẩu thay đổi Danh sách lớp chuyên ngành Danh sách tài khoản Danh sách người học lớp chuyên ngành Yêu cầu xử lý Thông tin phản hồi Thông tin điều chỉnh Thông tin phân quyền Danh sách phân quyền PHỤ LỤC 5: QUÁ TRÌNH PHÂN TÍCH, THIẾT KẾ, XÂY DỰNG CHỨC NĂNG QUẢN LÝ HỒ SƠ * Sơ đồ ngữ cảnh của chức năng Quản lý hồ sơ: v - 60 - Người học Cán bộ Phòng Quản lý Người học Cán bộ Phòng Quản lý Tài khoản Hồ sơ người học Lớp chuyên ngành Thông tin gia đình Thông tin chính sách 1.0. Quản lý Tài khoản 2.0. Quản lý Thông tin cá nhân 3.0. Quản lý Hồ sơ trúng tuyển Danh sách trúng tuyển 4.0. Quản lý thông tin gia đình 5.0. Quản lý Thông tin chính sách Danh sách Tài khoản Danh sách phân quyền Thông tin tài khoản Thông tin phân quyền Đổi mật khẩu Thông tin phản hồi Yêu cầu xử lý Yêu cầu xử lý Thông tin phản hồi Hồ sơ người học Thông tin cập nhật Người học Thông tin phản hồi Sơ yếu lý lịch Hồ sơ người học Yêu cầu xử lý Thông tin phản hồi Hồ sơ sinh viên Thông tin cập nhật Yêu cầu xử lý Thông tin phản hồi Yêu cầu xử lý Thông tin phản hồi Hồ sơ sinh viên Thông tin cập nhật Yêu cầu xử lý Thông tin phản hồi Yêu cầu xử lý Thông tin phản hồi * Sơ đồ luồng dữ liệu DFD của chức năng Quản lý hồ sơ: - 61 - * Thiết kế cơ sở dữ liệu: Qua phân tích bài toán và các đầu vào, đầu ra thu thập được, kết hợp với các sơ đồ chức năng BFD, sơ đồ luồng dữ liệu DFD, tác giả xác định các tập thực thể và mối quan hệ giữa chúng. Trên cơ sở chuẩn hóa các tập thực thể và các mối quan hệ đó, tác giả thu được các bảng dữ liệu cho chức năng Quản lý Hồ sơ. Cụ thể: - Bảng Sinh viên Tên bảng: SINHVIEN Mục đích: lưu trữ thông tin chung về người học Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaSinhVien nvarchar 32 Mã sinh viên, người học MaNganh nvarchar 32 Mã ngành mà người học theo học MaChuyenNganh nvarchar 32 Mã chuyên ngành người học theo học TinhTrang int 4 Tình trạng hiện tại của người học MaKhoaHoc nvarchar 32 Mã khóa học người học theo học - Bảng Thông tin cá nhân Tên bảng: THONGTINCANHAN Mục đích: lưu trữ thông tin chi tiết về người học Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaSinhVien nvarchar 32 Mã sinh viên, người học Anh nvarchar 256 Ảnh của người học HoVaDem nvarchar 64 Họ và chữ đệm của người học Ten nvarchar 64 Tên của người học GioiTinh bit 1 Giới tính của người học NgaySinh datetime 8 Ngày sinh của người học NoiSinh nvarchar 64 Nơi sinh của người học - 62 - HoKhau nvarchar(64) 64 Hộ khẩu của người học DiaChiThuongTru nvarchar(256) 256 Địa chỉ thường trú của người học DiaChiTamTru nvarchar(256) 256 Địa chỉ tạm trú của người học DanToc nvarchar(64) 64 Dân tộc của người học TonGiao nvarchar(64) 64 Tôn giáo của người học SoDienThoai nvarchar(16) 16 Số điện thoại của người học KhuVuc nvarchar(32) 32 Khu vực sinh sống của người học DoiTuong nvarchar(32) 32 Đối tượng ưu tiên của người học NhomUuTien nvarchar(32) 32 Nhóm ưu tiên của người học NamTuyenSinh int 4 Năm tuyển sinh của người học NganhThiTuyen nvarchar(32) 32 Ngành thi tuyển của người học KhoiDuThi nvarchar(32) 32 Khối dự thi của người học MonMot nvarchar(16) 16 Môn thi thứ nhât của người học MonHai nvarchar(16) 16 Môn thi thứ hai của người học MonBa nvarchar(16) 16 Môn thi thứ ba của người học DiemMonMot real 4 Điểm môn thi thứ nhất của người học DiemMonHai real 4 Điểm môn thi thứ hai của người học DiemMonBa real 4 Điểm môn thi thứ ba của người học - Bảng Hồ sơ sinh viên Tên bảng: HOSOSINHVIEN Mục đích: lưu trữ thông tin chi tiết về việc lưu trữ hồ sơ của người học Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaHoSoSinhVien int 4 Mã sinh viên, người học MaSinhVien nvarchar 32 Ảnh của người học TenHoSo nvarchar 64 Họ và chữ đệm của người học MaLoaiHoSo int 4 Tên của người học - 63 - DuongDan nvarchar 256 Giới tính của người học - Bảng Loại hồ sơ sinh viên Tên bảng: LOAIHOSOSINHVIEN Mục đích: lưu trữ thông tin chi tiết về việc lưu trữ hồ sơ của người học Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaLoaiHoSoSinhVien int 4 Mã loại hồ sơ người học TenLoaiHoSoSinhVien nvarchar 128 Tên loại hồ sơ người học - Bảng Thông tin chính trị Tên bảng: THONGTINCHINHTRI Mục đích: lưu trữ thông tin tham gia các hoạt động chính trị của người học Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaChinhTri bigint 8 Mã tổ chức chính trị MaSinhVien nvarchar 32 Mã người học TenChinhTri nvarchar 64 Tên tổ chức chính trị NgayVao datetime 8 Ngày tham gia tổ chức chính trị - Bảng Người thân Tên bảng: NGUOITHAN Mục đích: lưu trữ thông tin về người thân của người học Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaNguoiThan int 8 Mã người thân MaSinhVien nvarchar 32 Mã người học HoTen nvarchar 128 Họ và tên người thân NgheNghiep nvarchar 64 Nghề nghiệp của người thân MoiQuanHe nvarchar 64 Mối quan hệ với người học DiaChiLienLac nvarchar 256 Địa chỉ liên lạc của người thân SoDienThoaiLienHe nvarchar 16 Số điện thoại liên hệ - 64 - - Bảng Chính sách sinh viên Tên bảng: CHINHSACHSINHVIEN Mục đích: lưu trữ thông tin về chính sách của người học Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaChinhSach int 4 Mã loại chính sách của người học MaSinhVien nvarchar 32 Mã người học DoiTuongChinhSach nvarchar 32 Đối tượng chính sách người học MienHocPhi real 4 Số tiền miễn, giảm học phí - Bảng Quyền người dùng Tên bảng: QUYENNGUOIDUNG Mục đích: lưu trữ thông tin về quyền truy cập hệ thống của người dùng Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaQuyenNguoiDung nvarchar 128 Mã quyền người dùng TenQuyenNguoiDung nvarchar Max Tên quyền người dùng MoTaQuyenNguoiDung nvarchar Max Mô tả quyền người dùng - Bảng Quyền nhóm tài khoản Tên bảng: QUYENNHOMTAIKHOAN Mục đích: lưu trữ thông tin về quyền người dùng cấp cho các nhóm tài khoản Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaNhomTaiKhoan int 4 Mã nhóm tài khoản người dùng MaQuyenNguoiDung nvarchar 128 Mã quyền người dùng - Bảng Nhóm tài khoản Tên bảng: NHOMTAIKHOAN Mục đích: lưu trữ thông tin về các nhóm tài khoản cấp cho người dùng - 65 - Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaNhomTaiKhoan int 4 Mã nhóm tài khoản người dùng TenNhomTaiKhoan nvarchar 32 Tên nhóm tài khoản người dùng Mối quan hệ giữa các bảng dữ liệu của chức năng Quản lý hồ sơ, sau khi đã được chuẩn hóa như ở trên, được thể hiện qua mô hình dữ liệu quan hệ như sau: CHINHSACHSINHVIEN MaChinhSach MaSinhVien DoiTuongChinhSach MienHocPhi HOSOSINHVIEN MaHoSoSinhVien MaSinhVien TenHoSo MaLoaiHoSo DuongDan LOAIHOSOSINHVIEN MaLoaiHoSoSinhVien TenLoaiHoSoSinhVien NGUOITHAN MaNguoiThan MaSinhVien HoTen NgheNghiep MoiQuanHe DiaChiLienLac SoDienThoaiLienHe NHOMTAIKHOAN MaNhomTaiKhoan TenNhomTaiKhoan QUYENNGUOIDUNG MaQuyenNguoiDung TenQuyenNguoiDung MoTaQuyenNguoiDung QUYENNHOMTAIKHOAN MaNhomTaiKhoan MaQuyenNguoiDung SINHVIEN MaSinhVien MaNganh MaChuyenNganh TinhTrang MaKhoaHoc TAIKHOAN MaTaiKhoan MatKhau Email MaNhomTaiKhoan THONGTINCANHAN MaSinhVien Anh HoVaDem Ten GioiTinh NgaySinh NoiSinh HoKhau DiaChiThuongTru DiaChiTamTru DanToc TonGiao SoDienThoai KhuVuc DoiTuong NhomUuTien NamTuyenSinh NganhThiTuyen KhoiDuThi MonMot MonHai MonBa DiemMonMot DiemMonHai DiemMonBa THONGTINCHINHTRI MaChinhTri MaSinhVien TenChinhTri NgayVao - 66 - * Thiết kế mã nguồn: publicclassSinhVienController : Controller { ApplicationUnit app = newApplicationUnit(); DataContext db = newDataContext(); publicActionResult DanhSach(string maloptruyenthong) { return View(db.SinhVien.ToList()); } publicActionResult DanhSachSinhVienChoNhapHoc(string NganhTuyenSinh, int? NamThiTuyen) { ViewBag.NganhTuyenSinh = newSelectList(db.NganhHoc, "MaNganh", "TenNganh"); if (!String.IsNullOrEmpty(NganhTuyenSinh) && NamThiTuyen.HasValue) { ViewBag.NamThi = NamThiTuyen.Value; var source = from p in db.ThongTinCaNhan where p.NganhThiTuyen == NganhTuyenSinh && p.NamTuyenSinh == NamThiTuyen.Value && !p.SinhVien.SinhVienLopTruyenThong.Any() select p; return View(source.ToList()); } else return View(newList()); } publicActionResult NhapHoc(string masinhvien) { ThongTinCaNhan sv = db.ThongTinCaNhan.Find(masinhvien); ViewBag.MaLopTruyenThong = newSelectList(db.LopTruyenThong.Where(p => p.ChuyenNganh.NganhHoc.MaNganh == sv.NganhThiTuyen), "MaLopTruyenThong", "TenLopTruyenThong"); ViewBag.MaSinhVien = masinhvien; return PartialView(); } [HttpPost] [ValidateAntiForgeryToken] publicActionResult NhapHoc(SinhVienLopTruyenThong svltt) { if (ModelState.IsValid) { db.SinhVienLopTruyenThong.Add(svltt); svltt.SinhVien.TinhTrang = 1; try { db.SaveChanges(); return Json(new { success = true }); } catch (Exception e) - 67 - { ModelState.AddModelError("", e.Message); } } return View(svltt); } publicActionResult ChiTietHocTap(string id = null) { TaiKhoan taikhoan = Session["TAIKHOAN"] asTaiKhoan; if (taikhoan == null || !taikhoan.HasRole("SINHVIEN_XEM")) { return RedirectToAction("DangNhap", "TaiKhoan"); } ViewBag.EnableGuiYeuCauPhucKhao = taikhoan.HasRole("YEUCAUPHUCKHAO_GUI"); ViewBag.EnableGuiYeuCauSuaDiemRenLuyen = taikhoan.HasRole("YEUCAUSUADIEMRENLUYEN_GUI"); if (id != null) { KLTN.Models.SinhVien sinhvien = db.SinhVien.Where(t => t.MaSinhVien == id).FirstOrDefault(); if (sinhvien != null) { if (taikhoan.MaNhomTaiKhoan == 3 && !sinhvien.SinhVienLopTruyenThong.Where(t => t.LopTruyenThong.MaGiangVien == taikhoan.MaTaiKhoan).Any()) { return RedirectToAction("DangNhap", "TaiKhoan"); } return View(sinhvien); } } Response.Redirect(Url.Action("_404", "Error"), false); return View(); } publicActionResult ThongTinSinhVien(string masinhvien) { ViewData["MaSinhVien"] = masinhvien; ThongTinCaNhan ttcn = db.ThongTinCaNhan.Find(masinhvien); ViewBag.NoiSinh = newSelectList(DuLieuTinh.Danhsachtinh().AsEnumerable(), "TenTinh", "TenTinh", ttcn.NoiSinh); ViewBag.DanToc = newSelectList(DuLieuTinh.Danhsachdantoc().AsEnumerable(), "TenDanToc", "TenDanToc", ttcn.DanToc); ViewBag.TonGiao = newSelectList(DuLieuTinh.Danhsachtongiao().AsEnumerable(), "TenTonGiao", "TenTonGiao", ttcn.TonGiao); ViewBag.KhuVuc = newSelectList(DuLieuTinh.Danhsachkhuvuc().AsEnumerable(), "TenKhuVuc", "TenKhuVuc", ttcn.KhuVuc); - 68 - ViewBag.DoiTuong = newSelectList(DuLieuTinh.Danhsachdoituong().AsEnumerable(), "TenDoiTuong", "TenDoiTuong", ttcn.DoiTuong); ViewBag.NhomUuTien = newSelectList(DuLieuTinh.Danhsachuutien(), "TenNhom", "TenNhom", ttcn.NhomUuTien); return View(app.SinhVien.GetById(masinhvien)); } publicActionResult ThongTinCaNhan(string masinhvien) { ThongTinCaNhan ttcn = db.ThongTinCaNhan.Find(masinhvien); ViewBag.NoiSinh = newSelectList(DuLieuTinh.Danhsachtinh().AsEnumerable(), "TenTinh", "TenTinh"); return PartialView(db.ThongTinCaNhan.Find(masinhvien)); } publicActionResult ThemThongTinCaNhan() { ViewBag.HoKhau = newSelectList(DuLieuTinh.Danhsachtinh(), "TenTinh", "TenTinh"); ViewBag.NganhThiTuyen = newSelectList(db.NganhHoc.AsEnumerable(), "MaNganh", "TenNganh"); return PartialView(); } [HttpPost] [ValidateAntiForgeryToken] publicActionResult ThemThongTinCaNhan(ThongTinCaNhan ttcn) { ViewBag.HoKhau = newSelectList(DuLieuTinh.Danhsachtinh(), "TenTinh", "TenTinh"); ViewBag.NganhThiTuyen = newSelectList(db.NganhHoc.AsEnumerable(), "MaNganh", "TenNganh"); if (ModelState.IsValid) { long stt = 1000 + db.ThongTinCaNhan.LongCount(p => p.NamTuyenSinh == ttcn.NamTuyenSinh && p.NganhThiTuyen == ttcn.NganhThiTuyen) + 1; ttcn.MaSinhVien = ttcn.NamTuyenSinh.ToString().Remove(0, 2) + "K" + ttcn.NganhThiTuyen + stt; db.ThongTinCaNhan.Add(ttcn); SinhVien sv = newSinhVien(); sv.MaNganh = ttcn.NganhThiTuyen; sv.MaSinhVien = ttcn.MaSinhVien; sv.TinhTrang = 0; sv.MaKhoaHoc = db.KhoaHoc.FirstOrDefault(p => p.NamBatDau == ttcn.NamTuyenSinh).MaKhoaHoc; db.SinhVien.Add(sv); try { db.SaveChanges(); return Json(new { success = true }); } catch (Exception e) { ModelState.AddModelError("", e.Message); } return RedirectToAction("ThongTinSinhVien", new { masinhvien = ttcn.MaSinhVien }); } - 69 - else { return View(ttcn); } } publicActionResult ThemNguoiThan(string masinhvien) { ViewBag.MoiQuanHe = newSelectList(DuLieuTinh.Quanhethannhan(), "TenMoiQuanHe", "TenMoiQuanHe"); ViewData["MaSinhVien"] = masinhvien; return PartialView(); } [HttpPost] [ValidateAntiForgeryToken] publicActionResult ThemThongTinFromExcel(HttpPostedFileBase file) { if (file != null&& file.ContentLength > 0) { try { string path = Path.Combine(Server.MapPath("~/Uploads"), Path.GetFileName(file.FileName)); file.SaveAs(path); var excel = newExcelQueryFactory(path); var dataContent = from c in excel.Worksheet("Sheet1") select c; if (dataContent != null) { foreach (var a in dataContent) { try { ThongTinCaNhan ttcn = newThongTinCaNhan(); ttcn.HoVaDem = a["ho"]; ttcn.Ten = a["ten"]; ttcn.GioiTinh = a["phai"].Value.ToString() == "0" ? false : true; ttcn.NgaySinh = (DateTime)a["ngaysinh"].Value; ttcn.HoKhau = a["hokhau"]; ttcn.KhuVuc = a["khuvuc"]; ttcn.DoiTuong = a["doituong"]; ttcn.NhomUuTien = a["nhom_ut"]; ttcn.MonMot = a["mon1"]; ttcn.MonHai = a["mon2"]; ttcn.MonBa = a["mon3"]; ttcn.DiemMonMot = float.Parse(a["diem1"]); ttcn.DiemMonHai = float.Parse(a["diem2"]); ttcn.DiemMonBa = float.Parse(a["diem3"]); ttcn.NamTuyenSinh = int.Parse(a["namts"].ToString()); ttcn.NganhThiTuyen = a["nganh"]; long stt = 1000 + db.ThongTinCaNhan.LongCount(p => p.NamTuyenSinh == ttcn.NamTuyenSinh && p.NganhThiTuyen == ttcn.NganhThiTuyen) + 1; ttcn.MaSinhVien = ttcn.NamTuyenSinh.ToString().Remove(0, 2) + "K" + ttcn.NganhThiTuyen + stt; db.ThongTinCaNhan.Add(ttcn); - 70 - SinhVien sv = newSinhVien(); sv.MaNganh = ttcn.NganhThiTuyen; sv.MaSinhVien = ttcn.MaSinhVien; sv.TinhTrang = 0; sv.MaKhoaHoc = db.KhoaHoc.FirstOrDefault(p => p.NamBatDau == ttcn.NamTuyenSinh).MaKhoaHoc; db.SinhVien.Add(sv); db.SaveChanges(); } catch { break; } } return RedirectToAction("DanhSachSinhVienChoNhapHoc"); } else return View(); } catch (Exception ex) { ViewBag.ThongBao = "Error:" + ex.Message.ToString(); return View(); } } else { ViewBag.ThongBao = "Bạn chưa chọn đường dẫn"; return View(); } } publicJsonResult KetQuaHocTap(string id = null) { bool success = false; string xaxisLabel = null; List ticks = newList(); object[] data = null; if (id != null) { KLTN.Models.SinhVien sinhvien = db.SinhVien.Where(t => t.MaSinhVien == id).FirstOrDefault(); if (sinhvien != null) { success = true; // x axis label xaxisLabel = "Học kỳ"; int period_counter = 0; List gioi = newList(); List kha = newList(); List trungbinh = newList(); List yeu = newList(); List kem = newList(); - 71 - //int n = 0; //int year = sinhvien.ThongTinCaNhan.NamTuyenSinh; KLTN.Models.LopHocPhanDangKy tmp = sinhvien.LopHocPhanDangKy.Where(t => t.DiemThiMot.HasValue).OrderByDescending(a => a.LopHocPhan.NamHoc.NamBatDau).OrderByDescending(b => b.LopHocPhan.HocKy).FirstOrDefault(); if (tmp != null) { foreach (var tmpnamhoc in db.NamHoc.Where(t => t.NamBatDau >= sinhvien.ThongTinCaNhan.NamTuyenSinh && t.NamBatDau <= tmp.LopHocPhan.NamHoc.NamBatDau).OrderBy(r => r.NamBatDau).ToList()) { // counters int data1, data2, data3, data4, data5; data1 = data2 = data3 = data4 = data5 = 0; ticks.Add(newobject[] { period_counter, String.Format("HK{0} {1}", 1, tmpnamhoc.TenNamHoc) }); foreach (var tmpsinhviendk in sinhvien.LopHocPhanDangKy.Where(t => t.TinhVaoKetQuaHocTap == 1 && t.DiemThiMot.HasValue && t.LopHocPhan.MaNamHoc == tmpnamhoc.MaNamHoc && t.LopHocPhan.HocKy == 1).ToList()) { int total = (tmpsinhviendk.LopHocPhan.HocPhan.SoTinChi.HasValue) ? tmpsinhviendk.LopHocPhan.HocPhan.SoTinChi.Value : 0; float? total_point = 0f; if (tmpsinhviendk.DiemThiHai != null) { total_point += (tmpsinhviendk.DiemChuyenCan * tmpsinhviendk.LopHocPhan.HeSoChuyenCan + tmpsinhviendk.DiemQuaTrinh * tmpsinhviendk.LopHocPhan.HeSoQuaTrinh + tmpsinhviendk.DiemThiHai * tmpsinhviendk.LopHocPhan.HeSoThi); } else { total_point += (tmpsinhviendk.DiemChuyenCan * tmpsinhviendk.LopHocPhan.HeSoChuyenCan + tmpsinhviendk.DiemQuaTrinh * tmpsinhviendk.LopHocPhan.HeSoQuaTrinh + tmpsinhviendk.DiemThiMot * tmpsinhviendk.LopHocPhan.HeSoThi); } if (KLTN.Models.Common.TinhDiemChu(total_point) == "A") { data1 += total; } elseif (KLTN.Models.Common.TinhDiemChu(total_point) == "B") { data2 += total; } elseif (KLTN.Models.Common.TinhDiemChu(total_point) == "C") { data3 += total; } elseif (KLTN.Models.Common.TinhDiemChu(total_point) == "D") { data4 += total; } elseif (KLTN.Models.Common.TinhDiemChu(total_point) == "F") { data5 += total; - 72 - } } gioi.Add(newobject[] { period_counter, data1 }); kha.Add(newobject[] { period_counter, data2 }); trungbinh.Add(newobject[] { period_counter, data3 }); yeu.Add(newobject[] { period_counter, data4 }); kem.Add(newobject[] { period_counter, data5 }); // counter for year period_counter++; data1 = data2 = data3 = data4 = data5 = 0; if (tmp.LopHocPhan.HocKy == 2 || tmpnamhoc.MaNamHoc != tmp.LopHocPhan.MaNamHoc) { ticks.Add(newobject[] { period_counter, String.Format("HK{0} {1}", 2, tmpnamhoc.TenNamHoc) }); foreach (var tmpsinhviendk in sinhvien.LopHocPhanDangKy.Where(t => t.TinhVaoKetQuaHocTap == 1 && t.DiemThiMot.HasValue && t.LopHocPhan.MaNamHoc == tmpnamhoc.MaNamHoc && t.LopHocPhan.HocKy == 2).ToList()) { int total = (tmpsinhviendk.LopHocPhan.HocPhan.SoTinChi.HasValue) ? tmpsinhviendk.LopHocPhan.HocPhan.SoTinChi.Value : 0; float? total_point = 0f; if (tmpsinhviendk.DiemThiHai != null) { total_point += (tmpsinhviendk.DiemChuyenCan * tmpsinhviendk.LopHocPhan.HeSoChuyenCan + tmpsinhviendk.DiemQuaTrinh * tmpsinhviendk.LopHocPhan.HeSoQuaTrinh + tmpsinhviendk.DiemThiHai * tmpsinhviendk.LopHocPhan.HeSoThi); } else { total_point += (tmpsinhviendk.DiemChuyenCan * tmpsinhviendk.LopHocPhan.HeSoChuyenCan + tmpsinhviendk.DiemQuaTrinh * tmpsinhviendk.LopHocPhan.HeSoQuaTrinh + tmpsinhviendk.DiemThiMot * tmpsinhviendk.LopHocPhan.HeSoThi); } if (KLTN.Models.Common.TinhDiemChu(total_point) == "A") { data1 += total; } elseif (KLTN.Models.Common.TinhDiemChu(total_point) == "B") { data2 += total; } elseif (KLTN.Models.Common.TinhDiemChu(total_point) == "C") { data3 += total; } elseif (KLTN.Models.Common.TinhDiemChu(total_point) == "D") { data4 += total; } elseif (KLTN.Models.Common.TinhDiemChu(total_point) == "F") { data5 += total; } - 73 - } gioi.Add(newobject[] { period_counter, data1 }); kha.Add(newobject[] { period_counter, data2 }); trungbinh.Add(newobject[] { period_counter, data3 }); yeu.Add(newobject[] { period_counter, data4 }); kem.Add(newobject[] { period_counter, data5 }); // counter for year period_counter++; } } } data = newobject[] { new { data = gioi, label = "A" }, new { data = kha, label = "B" }, new { data = trungbinh, label = "C" }, new { data = yeu, label = "D" }, new { data = kem, label = "F" } }; } } dynamic json = new { success, data, xaxisLabel, ticks }; return Json(json, JsonRequestBehavior.AllowGet); } } - 74 - NGƯỜI HỌC CÁN BỘ QUẢN LÝ GIẢNG VIÊN QUẢN LÝ ĐĂNG KÝ TÍN CHỈ Thông tin người học Danh sách đăng ký Danh sách đăng ký cập nhật Thông tin đăng ký Thông tin học phần Thông tin lớp học phần Chương trình đào tạo Thời khóa biểu Thời gian đăng ký Danh sách học phần Danh sách lớp học phần Chương trình đào tạo Danh sách điều chỉnh lớp - học phần Yêu cầu xử lý Thông tin phản hồi Thô ng tin giảng viên Thô ng tin họ c phần Thô ng tin lớp chính q uy Thời khó a biểu giảng dạy Thô ng tin lớp họ c phần PHỤ LỤC 6: QUÁ TRÌNH PHÂN TÍCH, THIẾT KẾ, XÂY DỰNG CHỨC NĂNG QUẢN LÝ ĐĂNG KÝ TÍN CHỈ * Sơ đồ ngữ cảnh của chức năng Quản lý đăng ký tín chỉ: - 75 - 1.0 Quản lý thông tin cá nhân 2.0 Đăng kí tín chỉ 3.0 Tra cứu thông tin học phần 6.0 Quản lý người học/ Giảng viên 5.0 Quản lý lớp học phần4.0 Tra cứu thông tin đào tạo 7.0 Quản lý chương trình đào tạo 8.0 Quản lý đăng kí 9.0 Quản lý văn bản Người học Giảng viênNGUOIHOC Thông tin cá nhân Danh sách môn đăng kí Thông tin yêu cầu Dữ liệu người học Thông tin cá nhân Thông tin tài khoản GIANGVIEN Dữ liệu giảng viên Thông tin cá nhân Thông tin tài khoản HOCPHANLOPHOCPHAN Thời khóa biểu Dữ liệu Người học lớp học phần Thông tin học phần/ lớp học phần Dữ liệu lớp học phần Dữ liệu học phần Người học KHUNGCHUONG TRINH Thông tin Ngành/ Chuyên ngành Thông tin chương trình đào tạo Thông tin Ngành/ Chuyên ngành . Chương trình đào tạo Cán bộ quản lý Danh sách văn bản Danh sách SV/GV Thông tin Điều chỉnh Lớp học phần Cán bộ quản lý Thông tin về Học phần NGUOIHOC GIANGVIEN Dữ liệu người học Dữ liệu giảng viên HOCPHAN Dữ liệu học phần Thông tin Chuyên ngành Thông tin ngành Thông tin chương trình đào tạo NGANH CHUYENNGAN H KHUNGCHUONGTRINH Dữ liệu chương trình Đào tạo Dữ liệu Chuyên ngành Dữ liệu ngành LOPHOCPHAN Thông tin thay đổi Danh sách điều chỉnh Danh sách đăng kí Thời gian đăng kí LOPHOCPHAN Tài liệu * Sơ đồ luồng dữ liệu DFD của chức năng Quản lý đăng ký tín chỉ: - 76 - * Thiết kế cơ sở dữ liệu: Qua phân tích bài toán cũng như các sơ đồ ngữ cảnh và sơ đồ luồng dữ liệu, có thể xác định các tập thực thể và các mối quan hệ giữa các tập thực thể trong chức năng Quản lý đăng ký tín chỉ. Tiến hành chuẩn hóa các tập thực thể và các mối quan hệ giữa chúng, tác giả thu được các bảng dữ liệu như sau: - Bảng Ngành học Tên bảng: NGANHHOC Mục đích: lưu trữ thông tin về ngành học Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaNganh nvarchar 32 Mã ngành đào tạo TenNganh nvarchar 64 Tên ngành đào tạo MaKhoa nvarchar 32 Mã khoa đảm nhận ngành đào tạo - Bảng Bộ môn Tên bảng: BOMON Mục đích: lưu trữ thông tin bộ môn của trường Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaBoMon nvarchar 32 Mã bộ môn TenBoMon nvarchar 64 Tên bộ môn MaKhoa nvarchar 32 Mã khoa - Bảng Chuyên ngành Tên bảng: CHUYENNGANH Mục đích: lưu trữ thông tin về chuyên ngành đào tạo Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaChuyenNganh nvarchar 32 Mã chuyên ngành đào tạo TenChuyenNganh nvarchar 64 Tên chuyên ngành đào tạo MaNganh nvarchar 32 Mã ngành SoTinChiToiThieu int 4 Số tín chỉ tối thiểu SoTinChiBatBuoc int 4 Số tín chỉ bắt buộc - 77 - - Bảng Khối kiến thức Tên bảng: KHOIKIENTHUC Mục đích: lưu trữ thông tin chi tiết về khối kiến thức liên quan đến chuyên ngành đào tạo Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaKhoiKienThuc nvarchar 32 Mã khối kiến thức TenKhoiKienThuc nvarchar 64 Tên khối kiến thức SoTinChiBatBuoc int 4 Số tín chỉ bắt buộc với khối kiến thức MaChuyenNganh nvarchar 32 Mã chuyên ngành đào tạo - Bảng Khung chương trình Tên bảng: KHUNGCHUONGTRINH Mục đích: lưu trữ thông tin chi tiết về khung chương trình gắn với khối kiến thức liên quan đến chuyên ngành đào tạo Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaKhungChuongTrinh int 4 Mã khung chương trình MaKhoiKienThuc nvarchar 32 Mã khối kiến thức MaHocPhan nvarchar 32 Mã học phần HocKy int 4 Học kỳ giảng dạy BatBuoc int 4 Bắt buộc MaKhoaHoc nvarchar 32 Mã khóa học - Bảng Học phần Tên bảng: HOCPHAN Mục đích: lưu trữ thông tin chi tiết về học phần Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaHocPhan nvarchar 32 Mã học phần TenHocPhan nvarchar 64 Tên học phần SoTinChi int 4 Số tín chỉ - 78 - SoTietLyThuyet int 4 Số tiết lý thuyết SoTietThucHanh int 4 Số tiết thực hành HeSoChuyenCan real 4 Hệ số điểm chuyên cần HeSoQuaTrinh real 4 Hệ số điểm quá trình HeSoThi real 4 Hệ số điểm thi - Bảng Điều kiện học phần Tên bảng: DIEUKIENHOCPHAN Mục đích: lưu trữ thông tin chi tiết về học phần điều kiện tiên quyết Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaHocPhan nvarchar 32 Mã học phần MaHocPhanDieuKien nvarchar 32 Mã học phần điều kiện - Bảng Lớp học phần Tên bảng: LOPHOCPHAN Mục đích: lưu trữ thông tin chi tiết về lớp học phần được mở Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaLopHocPhan int 4 Mã lớp học phần TenLopHocPhan nvarchar 128 Tên lớp học phần MaHocPhan nvarchar 32 Mã học phần NamHoc int 4 Năm học MaGiangVien nvarchar 32 Mã giảng viên TrangThai int 4 Trạng thái lớp học phần SoSinhVienToiDa int 4 Số sinh viên tối đa HocKy int 4 Học kỳ HeSoChuyenCan real 4 Hệ số điểm chuyên cần HeSoQuaTrinh real 4 Hệ số điểm quá trình HeSoThi real 4 Hệ số điểm thi - Bảng Điều kiện đăng ký - 79 - Tên bảng: DIEUKIENDANGKY Mục đích: lưu trữ thông tin chi tiết về điều kiện đăng ký học phần Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaDieuKienDangKy int 4 Mã điều kiện đăng ký MaLopHocPhan int 4 Mã lớp học phần MaNganh nvarchar 32 Mã ngành MaChuyenNganh nvarchar 32 Mã chuyên ngành MaKhoaHoc nvarchar 32 Mã khóa học NgayBatDau datetime 8 Ngày bắt đầu NgayKetThuc datetime 8 Ngày kết thúc - Bảng Thời gian học phần Tên bảng: THOIGIANHOCPHAN Mục đích: lưu trữ thông tin chi tiết về thời gian diễn ra học phần Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaThoiGianHocPhan int 4 Mã thời gian học phần MaLopHocPhan int 4 Mã lớp học phần MaPhongHoc nvarchar 32 Mã phòng học Thu int 4 Thứ ngày trong tuần TietBatDau int 4 Tiết bắt đầu TietKetThuc int 4 Tiết kết thúc ThoiGianBatDau datetime 8 Thời gian bắt đầu ThoiGianKetThuc datetime 8 Thời gian kết thúc - Bảng Lớp học phần đăng ký Tên bảng: LOPHOCPHANDANGKY Mục đích: lưu trữ thông tin chi tiết về học phần đã đăng ký của người học Thuộc tính Kiểu dữ liệu Kích thước Diễn giải - 80 - MaSinhVien nvarchar 32 Mã sinh viên MaLopHocPhan int 4 Mã lớp học phần DiemChuyenCan real 4 Điểm chuyên cần DiemQuaTrinh real 4 Điểm quá trình DiemThiMot real 4 Điểm thi lần một DiemThiHai real 4 Điểm thi lần hai MaGiangVienChamThiMot nvarchar 32 Mã GV chấm thi lần một MaGiangVienChamThiHai nvarchar 32 Mã GV chấm thi lần hai SoBaoDanhMot int 4 Số báo danh thi lần một SoBaoDanhHai int 4 Số báo danh thi lần hai TinhVaoKetQuaHocTap int 4 Tính vào kết quả học tập NgayDangKy datetime 8 Ngày đăng ký học phần - Bảng Thời gian đăng ký Tên bảng: THOIGIANDANGKY Mục đích: lưu trữ thông tin chi tiết về thời gian đăng ký học phần Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaThoiGianDangKi int 4 Mã thời gian đăng ký ThoiGianBatDau datetime 8 Thời gian bắt đầu đăng ký ThoiGianKetThuc datetime 8 Thời gian kết thúc đăng ký DotDangKy int 4 Đợt đăng ký - Bảng Khóa học Tên bảng: KHOAHOC Mục đích: lưu trữ thông tin chi tiết về khóa học Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaKhoaHoc nvarchar 32 Mã khóa học TenKhoaHoc nvarchar 64 Tên khóa học - 81 - NamBatDau int 4 Năm bắt đầu NamKetThuc int 4 Năm kết thúc Ngoài ra còn có các bảng dữ liệu khác như: KHOA, SINHVIEN, PHONGHOC đã giới thiệu ở các phụ lục trước. Mối quan hệ giữa các bảng dữ liệu của chức năng Quản lý đăng ký tín chỉ được thể hiện trong lược đồ dữ liệu quan hệ dưới đây: - 82 - * Thiết kế mã nguồn: publicpartialclassFormMain : DevExpress.XtraEditors.XtraForm - 83 - { HocPhanBLL hpbll = newHocPhanBLL(); LopHocPhan_BLL lhpbll = newLopHocPhan_BLL(); KhoaHoc_BLL khbll = newKhoaHoc_BLL(); NganhHoc_BLL nhbll = newNganhHoc_BLL(); ChuyenNganh_BLL cnbll = newChuyenNganh_BLL(); public FormMain() { InitializeComponent(); } privatevoid Form1_Load(object sender, EventArgs e) { xTPQuanLy.Visible = false; } privatevoid butDanhSachHocPhan_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { xTPQuanLy.Visible = true; xTPHocPhan.PageVisible = true; xTPQuanLy.TabPages.Add(xTPHocPhan); gcHocPhan.DataSource = hpbll.DanhSachHocPhan(); xTPQuanLy.SelectedTabPage = xTPHocPhan; } privatevoid barButtonItem3_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { DataTable dt = lhpbll.DanhSachLopHocPhan(); int[] list = newint[10000]; int k = 0; for (int i = 0; i < dt.Rows.Count-1; i++) { DataRow dr= dt.Rows[i]; DataRow dr1 = dt.Rows[i+1]; if (dr[0].ToString() == dr1[0].ToString()) { dr1[3] = dr[3] + "\n" + dr1[3]; list[k] = i + 1; k++; } } for (int j = 0; j < list.Length; j++) { if(list[j] >0) dt.Rows.Remove(dt.Rows[j]); } xTPQuanLy.Visible = true; xTPLopHocPhan.PageVisible = true; xTPQuanLy.TabPages.Add(xTPLopHocPhan); gcLopHocPhan.DataSource = dt; xTPQuanLy.SelectedTabPage = xTPLopHocPhan; } privatevoid barButtonItem5_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { - 84 - xTPQuanLy.Visible = true; xTPThoiGianDangKi.PageVisible = true; xTPQuanLy.TabPages.Add(xTPThoiGianDangKi); DataTable dt = newDataTable(); dt = lhpbll.DanhSachLopHocPhan(); int[] list = newint[10000]; int k = 0; for (int i = 0; i < dt.Rows.Count - 1; i++) { DataRow dr = dt.Rows[i]; DataRow dr1 = dt.Rows[i + 1]; if (dr[0].ToString() == dr1[0].ToString()) { dr1[3] = dr[3] + "\n" + dr1[3]; list[k] = i + 1; k++; } } for (int j = 0; j < list.Length; j++) { if (list[j] > 0) dt.Rows.Remove(dt.Rows[j]); } gcThoiGianDangKi.DataSource = dt; xTPQuanLy.SelectedTabPage = xTPThoiGianDangKi; dateBatDau.Properties.VistaDisplayMode = DefaultBoolean.True; dateBatDau.Properties.VistaEditTime = DefaultBoolean.True; dateKetThuc.Properties.VistaDisplayMode = DefaultBoolean.True; dateKetThuc.Properties.VistaEditTime = DefaultBoolean.True; lkuKhoaHocTGDK.Properties.DataSource = khbll.DanhSachKhoaHoc(); lkuKhoaHocTGDK.Properties.ValueMember = "MaKhoaHoc"; lkuKhoaHocTGDK.Properties.DisplayMember = "TenKhoaHoc"; lkuNganhHocTGDK.Properties.DataSource = nhbll.DanhSachNganhHoc(); lkuNganhHocTGDK.Properties.ValueMember = "MaNganh"; lkuNganhHocTGDK.Properties.DisplayMember = "TenNganh"; try { lkuChuyenNganhTGDK.Properties.DataSource = cnbll.DanhSachChuyenNganh(lkuNganhHocTGDK.EditValue.ToString()); lkuChuyenNganhTGDK.Properties.ValueMember = "MaChuyenNganh"; lkuChuyenNganhTGDK.Properties.DisplayMember = "TenChuyenNganh"; } catch { } } privatevoid btnThoiGianDangKi_Click(object sender, EventArgs e) { for (int i = 0; i < gvThoiGianDangKi.RowCount; i++) { gvThoiGianDangKi.FocusedRowHandle = i; bool IsAbsent = Convert.ToBoolean(gvThoiGianDangKi.GetFocusedRowCellValue("Chon")); if (IsAbsent == true) MessageBox.Show(i.ToString()); } } privatevoid lkuNganhHocTGDK_EditValueChanged(object sender, EventArgs e) { try - 85 - { lkuChuyenNganhTGDK.Properties.DataSource = cnbll.DanhSachChuyenNganh(lkuNganhHocTGDK.EditValue.ToString()); lkuChuyenNganhTGDK.Properties.ValueMember = "MaChuyenNganh"; lkuChuyenNganhTGDK.Properties.DisplayMember = "TenChuyenNganh"; } catch { } } privatevoid btnDangNhap_Click(object sender, EventArgs e) { k++; if (k > 5) { string mac = GetMacAddress(); newMacAddress_BLL().InsertMac(mac, Dns.GetHostName()); MessageBox.Show("Máy tính này đã bị cấm đăng nhập! Vui lòng liên hệ quản lý để mở khóa !!!"); Application.Exit(); } else if (txtmatkhau.Text == "") { MessageBox.Show("Nhập mật khẩu !"); txtmatkhau.Focus(); } else { dn = newTaiKhoan_DAL().LayNguoiDung(txttendangnhap.Text, TaiKhoan_DAL.Md5Encrypt(txtmatkhau.Text)); if (dn != null) { newTaiKhoan_DAL().GiamSLDN(txttendangnhap.Text.Trim()); if (dn.IdTrangThai == true) { frm.ShowDialog(); string hoten = newTaiKhoan_DAL().LayTenCanBo(dn.MaTaiKhoan); k = 0; } else { MessageBox.Show(String.Format("Email {0} đã bị khóa, vui lòng liên hệ quản lý để mở khóa tài khoản !!!", txttendangnhap.Text)); } } else { int kte = newTaiKhoan_DAL().TimKiemEmail(txttendangnhap.Text.Trim()); if (kte > 0) { if (newTaiKhoan_DAL().TimKiemSLDN(txttendangnhap.Text.Trim()) > 0) { MessageBox.Show(String.Format("Email {0} đã bị khóa, vui lòng liên hệ quản lý để mở khóa tài khoản !!!", txttendangnhap.Text)); newTaiKhoan_DAL().KhoaTK(txttendangnhap.Text.Trim()); Application.Exit(); } else - 86 - { newTaiKhoan_DAL().TangSLDN(txttendangnhap.Text.Trim()); MessageBox.Show("Đăng nhập thất bại !"); txtmatkhau.Focus(); } } else { MessageBox.Show("Đăng nhập thất bại !"); txttendangnhap.Focus(); } } } } } - 87 - PHỤ LỤC 7: QUÁ TRÌNH PHÂN TÍCH, THIẾT KẾ, XÂY DỰNG CHỨC NĂNG QUẢN LÝ ĐIỂM * Sơ đồ ngữ cảnh của chức năng Quản lý điểm: Quản lý điểmThông tin lớp học phần Thông tin học kỳ Yêu cầu thống kê kết quả học tập Người học Giảng viên phụ trách lớp học phần Giảng viên cố vấn Yêu cầu điều chỉnh điểm rèn luyện Yêu cầu phúc khảo Kết quả học tập cá nhân Kết quả yêu cầu phúc khảo Thông tin lớp học phần Thông tin giảng viên Thông tin người học Thông tin chuyên ngành Yêu cầu sửa điểm học phần Bảng điểm lớp học phần K ết quả yêu cầu sửa điểm Kết quả học tập cá nhân Kết quả học tập tập thể Thông tin lớp truyền thống - 88 - * Sơ đồ luồng dữ liệu DFD của chức năng Quản lý điểm: Giảng viên cố vấn học tập Người học Cán bộ Phòng Đào tạo Giảng viên cố vấn học tập Sinh viên Giảng viên phụ trách môn học Cán bộ Phòng Đào tạo Giảng viên Điểm rèn luyện Dữ liệu yêu cầu sửa điểm rèn luyện Dữ liệu yêu cầu sửa điểm học phần Điểm học phần Dữ liệu lớp học phần Dữ liệu học phần Người học Dữ liệu đăng ký lớp học phần 1.0. Quản lý điểm học phần 2.0. Quản lý điểm rèn luyện 3.0. Quản lý điểm thi 4.0. Tính điểm trung bình 5.0. Quản lý thi lại, học lại 6.0. Quản lý phúc khảo Yêu cầu xử lý Danh sách lớp học phần Thông tin giảng viên Yêu cầu xử lý Thông tin phản hồi Yêu cầu xử lý Thông tin phản hồi Thông tin điểm học phần Thông tin sửa điểm học phần Thông tin lớp học phần Thông tin đăng ký lớp học phần Thông tin học phần Thông tin người học Yêu cầu xử lý Thông tin phản hồi Yêu cầu xử lýThông tin phản hồi Yêu cầu xử lý Yêu cầu xử lý Thông tin phản hồi Thông tin sinh viên Thông tin phản hồi Thông tin yêu cầu xử lý Yêu cầu đã được xử lýThông tin người học Thông tin học phần Thông tin đăng ký Yêu cầu xử lý Kết quả xử lý Yêu cầu xử lý Kết quả xử lý Yêu cầu xử lý Kết quả xử lý Yêu cầu xử lý Kết quả xử lý Thông báo thi lại, học lại Yêu cầu xử lý Kết quả xử lý Danh sách thi lại, học lại Đơn phúc khảo Thông tin phúc khảo Yêu cầu xử lý Kết quả phúc khảo Điểm thi lại, học lại Danh sách phúc khảo Điểm phúc khảo Kết quả xử lý Điểm học phần Điểm rèn luyện Giảng viên phụ trách môn học Yêu cầu xử lý - 89 - * Thiết kế cơ sở dữ liệu: Tiến hành chuẩn hóa các tập thực thể và các mối quan hệ của chức năng Quản lý điểm, tác giả thu được các bảng dữ liệu như sau: - Bảng Lớp truyền thống Tên bảng: LOPTRUYENTHONG Mục đích: lưu trữ thông tin về lớp truyền thống Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaLopTruyenThong nvarchar(32) 32 Mã lớp truyền thống TenLopTruyenThong nvarchar(64) 64 Tên lớp truyền thống MaChuyenNganh nvarchar(32) 32 Mã chuyên ngành lớp truyền thống MaNganh nvarchar(32) 32 Mã ngành lớp truyền thống MaKhoaHoc nvarchar(32) 32 Mã khóa học MaLopTruong nvarchar(32) 32 Mã người học là lớp trưởng MaLopPho nvarchar(32) 32 Mã người học là lớp phó MaBiThu nvarchar(32) 32 Mã người học là bí thư MaPhoBiThu nvarchar(32) 32 Mã người học là phó bí thư MaGiangVien nvarchar(32) 32 Mã giảng viên phụ trách lớp học - Bảng Sinh viên thuộc lớp truyền thống Tên bảng: SINHVIENLOPTRUYENTHONG Mục đích: lưu trữ thông tin về sinh viên thuộc các lớp truyền thống Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaSinhVien nvarchar 32 Mã người học MaLopTruyenThong nvarchar 32 Mã lớp truyền thống ThoiGianBatDau datetime 8 Thời gian bắt đầu - Bảng Yêu cầu phúc khảo Tên bảng: YEUCAUPHUCKHAO - 90 - Mục đích: lưu trữ thông tin về yêu cầu phúc khảo của sinh viên Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaYeuCauPhucKhao int 4 Mã yêu cầu phúc khảo MaSinhVien nvarchar 32 Mã người học MaGiangVien nvarchar 32 Mã giảng viên DiemCu real 4 Điểm cũ DiemMoi real 4 Điểm mới GhiChu nvarchar max Ghi chú MaLopHocPhan int 4 Mã lớp học phần MaCanBoDaoTao nvarchar 32 Mã cán bộ đào tạo DotThi int 4 Đợt thi TrangThai int 4 Trạng thái xử lý NgayXuLiYeuCau datetime 8 Ngày xử lý yêu cầu phúc khảo NgayGuiYeuCau datetime 8 Ngày gửi yêu cầu phúc khảo - Bảng Yêu cầu sửa điểm học phần Tên bảng: YEUCAUSUADIEMHOCPHAN Mục đích: lưu trữ thông tin về yêu cầu sửa điểm học phần của sinh viên Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaYeuCauSuaDiemHocPhan int 4 Mã yêu cầu sửa điểm MaSinhVien nvarchar 32 Mã người học MaCanBoDaoTao nvarchar 32 Mã cán bộ đào tạo MaLopHocPhan int 4 Mã lớp học phần LyDo nvarchar max Lý do yêu cầu sửa điểm DiemChuyenCanCu real 4 Điểm chuyên cần cũ DiemChuyenCanMoi real 4 Điểm chuyên cần mới DiemQuaTrinhCu real 4 Điểm quá trình cũ DiemQuaTrinhMoi real 4 Điểm quá trình mới - 91 - TrangThai int 4 Trạng thái xử lý NgayXuLiYeuCau datetime 8 Ngày xử lý yêu cầu NgayGuiYeuCau datetime 8 Ngày gửi yêu cầu - Bảng Yêu cầu điều chỉnh điểm rèn luyện Tên bảng: YEUCAUDIEUCHINHDIEMRENLUYEN Mục đích: lưu trữ thông tin chi tiết về yêu cầu điều chỉnh điểm rèn luyện của người học Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaYeuCauSuaDiemRenLuyen int 4 Mã yêu cầu sửa điểm rèn luyện của người học MaSinhVien nvarchar 32 Mã người học LyDo nvarchar max Lý do điều chỉnh điểm DiemCu real 4 Điểm cũ DiemMoi real 4 Điểm mới HocKy int 4 Học kỳ MaNamHoc int 4 Năm học MaCanBoDaoTao nvarchar 32 Mã cán bộ đào tạo MaCanBoNhapDiem nvarchar 32 Mã cán bộ nhập điểm TrangThai int 4 Trạng thái xử lý NgayXuLiYeuCau datetime 8 Ngày xử lý yêu cầu NgayGuiYeuCau datetime 8 Ngày gửi yêu cầu - Bảng Cán bộ đào tạo Tên bảng: CANBODAOTAO Mục đích: lưu trữ thông tin của cán bộ thuộc phòng Đào tạo xử lý các quy trình nghiệp vụ liên quan đến chức năng Quản lý điểm Thuộc tính Kiểu dữ liệu Kích thước Diễn giải MaCanBoDaoTao nvarchar 32 Mã cán bộ đào tạo - 92 - TenCanBoDaoTao nvarchar 64 Tên cán bộ đào tạo - 93 - Một số bảng dữ liệu khác đã trình bày ở các phụ lục trước. Mối quan hệ giữa các bảng dữ liệu của chức năng Quản lý điểm được thể hiện trong lược đồ dữ liệu quan hệ dưới đây: GIANGVIEN MaGiangVien TenGiangVien MaKhoa HOCPHAN MaHocPhan TenHocPhan SoTinChi SoTietLyThuyet SoTietThucHanh HeSoChuyenCan HeSoQuaTrinh HeSoThi LOPTRUYENTHONG MaLopTruyenThong TenLopTruyenThong MaChuyenNganh MaNganh MaKhoaHoc MaLopTruong MaLopPho MaBiThu MaPhoBiThu MaGiangVien SINHVIENLOPTRUYENTHONG MaSinhVien MaLopTruyenThong ThoiGianBatDau CHUYENNGANH MaChuyenNganh TenChuyenNganh MaNganh SoTinChiToiThieu SoTinChiBatBuoc KHOAHOC MaKhoaHoc TenKhoaHoc NamBatDau NamKetThuc LOPHOCPHAN MaLopHocPhan TenLopHocPhan MaHocPhan NamHoc MaGiangVien TrangThai SoSinhVienToiDa HocKy HeSoChuyenCan HeSoQuaTrinh HeSoThi LOPHOCPHANDANGKY MaSinhVien MaLopHocPhan DiemChuyenCan DiemQuaTrinh DiemThiMot DiemThiHai MaGiangVienChamThiMot MaGiangVienChamThiHai SoBaoDanhMot SoBaoDanhHai TinhVaoKetQuaHocTap NgayDangKy YEUCAUPHUCKHAO MaYeuCauPhucKhao MaSinhVien MaGiangVien DiemCu DiemMoi GhiChu MaLopHocPhan MaCanBoDaoTao DotThi TrangThai NgayXuLiYeuCau NgayGuiYeuCau YEUCAUSUADIEMHOCPHAN MaYeuCauSuaDiemHocPhan MaSinhVien MaCanBoDaoTao MaLopHocPhan LyDo DiemChuyenCanCu DiemChuyenCanMoi DiemQuaTrinhCu DiemQuaTrinhMoi TrangThai NgayXuLiYeuCau NgayGuiYeuCau YEUCAUDIEUCHINHDIEMRENLUYEN MaYeuCauSuaDiemRenLuyen MaSinhVien LyDo DiemCu DiemMoi HocKy MaNamHoc MaCanBoDaoTao MaCanBoNhapDiem TrangThai NgayXuLiYeuCau NgayGuiYeuCau THONGTINCANHAN MaSinhVien Anh HoVaDem Ten GioiTinh NgaySinh NoiSinh HoKhau DiaChiThuongTru DiaChiTamTru DanToc TonGiao SoDienThoai KhuVuc DoiTuong NhomUuTien NamTuyenSinh NganhThiTuyen KhoiDuThi MonMot MonHai MonBa DiemMonMot DiemMonHai DiemMonBa SINHVIEN MaSinhVien MaNganh MaChuyenNganh TinhTrang MaKhoaHoc NAMHOC MaNamHoc TenNamHoc NamBatDau NamKetThuc NGANHHOC MaNganh TenNganh MaKhoa CANBODAOTAO MaCanBoDaoTao TenCanBoDaoTao - 94 - * Thiết kế mã nguồn: publicclassYeuCauSuaDiemHocPhanController : Controller { // // GET: /YeuCauSuaDiemHocPhan/ privateDataContext db = newDataContext(); [Authorize(Roles = "YCSUADIEMHOCPHAN_XEM")] publicActionResult DanhSach(string p = null, string hk = null, string masv = null, string manh = null, string mahp = null, string magv = null, string tt = null, string sort = null, string order = null) { // Message if (Session["success"] != null) { ViewBag.success = Session["success"] asString; Session["success"] = null; } if (Session["errorWarning"] != null) { ViewBag.errorWarning = Session["errorWarning"]; Session["errorWarning"] = null; } // Paging params int page; int limit = 20; if ((p == null) || (!int.TryParse(p, out page)) || page < 1) { page = 1; } // Url string url = Url.Action("DanhSach", "YeuCauSuaDiemHocPhan"); url += "?p={0}"; // Data IQueryable data = db.YeuCauSuaDiemHocPhan; // Filter TaiKhoan taikhoan = Session["TAIKHOAN"] asTaiKhoan; if (taikhoan != null&& taikhoan.MaNhomTaiKhoan == 3) { data = data.Where(t => t.LopHocPhan.MaGiangVien == taikhoan.MaTaiKhoan); } if (mahp != null&& mahp != "") { data = data.Where(t => t.LopHocPhan.MaHocPhan == mahp); url += "&mahp=" + mahp; } //if (masv != null && masv != "") //{ // data = data.Where(t => t.MaSinhVien == masv); // url += "&masv=" + masv; //} - 95 - if (magv != null) { data = data.Where(t => t.LopHocPhan.MaGiangVien == magv); url += "&magv=" + magv; } int trangthai; if (tt != null&&int.TryParse(tt, out trangthai)) { data = data.Where(t => t.TrangThai == trangthai); url += "&tt=" + trangthai; } int hocky; if (hk != null&&int.TryParse(hk, out hocky)) { data = data.Where(t => t.LopHocPhan.HocKy == hocky); url += "&hk=" + hocky; } int manamhoc; if (manh != null&&int.TryParse(manh, out manamhoc)) { data = data.Where(t => t.LopHocPhan.MaNamHoc == manamhoc); url += "&manh=" + manamhoc; } // Sort & Order ViewBag.sort = sort; switch (sort) { case"malhp": if (order != null&& order == "desc") { data = data.OrderByDescending(t => t.MaLopHocPhan); ViewBag.order = "desc"; } else { data = data.OrderBy(t => t.MaLopHocPhan); ViewBag.order = "asc"; } break; case"tenhp": if (order != null&& order == "desc") { data = data.OrderByDescending(t => t.LopHocPhan.HocPhan.TenHocPhan); ViewBag.order = "desc"; } else { data = data.OrderBy(t => t.LopHocPhan.HocPhan.TenHocPhan); ViewBag.order = "asc"; } break; case"tengv": if (order != null&& order == "desc") - 96 - { data = data.OrderByDescending(t => t.LopHocPhan.GiangVien.TenGiangVien); ViewBag.order = "desc"; } else { data = data.OrderBy(t => t.LopHocPhan.GiangVien.TenGiangVien); ViewBag.order = "asc"; } break; case"tt": if (order != null&& order == "desc") { data = data.OrderByDescending(t => t.TrangThai); ViewBag.order = "desc"; } else { data = data.OrderBy(t => t.TrangThai); ViewBag.order = "asc"; } break; case"nggui": if (order != null&& order == "desc") { data = data.OrderByDescending(t => t.NgayGuiYeuCau); ViewBag.order = "desc"; } else { data = data.OrderBy(t => t.NgayGuiYeuCau); ViewBag.order = "asc"; } break; case"masv": if (order != null&& order == "desc") { data = data.OrderByDescending(t => t.MaSinhVien); ViewBag.order = "desc"; } else { data = data.OrderBy(t => t.MaSinhVien); ViewBag.order = "asc"; } break; default: data = data.OrderByDescending(t => t.NgayGuiYeuCau); break; } // Paging ViewBag.maxBtnShow = 3; int total = data.Count(); if (((page - 1) * limit) > total) page = 1; int last = total / limit + 1; - 97 - ViewBag.url = url; ViewBag.pagination = total > limit; ViewBag.total = total; ViewBag.current = page; ViewBag.last = last; ViewBag.from = (page - 1) * limit + 1; ViewBag.to = page * limit; if (page == last) ViewBag.to = total; return View(data.Skip((page - 1) * limit).Take(limit).ToList()); } [Authorize(Roles = "YCSUADIEMHOCPHAN_GUI")] publicActionResult Gui(string masv = null, string malhp = null) { TaiKhoan taikhoan = Session["TAIKHOAN"] asTaiKhoan; if (taikhoan == null || taikhoan.MaNhomTaiKhoan != 3) { return RedirectToAction("DangNhap", "TaiKhoan"); } string masinhvien = masv; int malophocphan; if (masinhvien != null&&int.TryParse(malhp, out malophocphan)) { LopHocPhanDangKy lophocphandangky = db.LopHocPhanDangKy.Where(p => p.MaSinhVien == masinhvien && p.MaLopHocPhan == malophocphan).FirstOrDefault(); if (taikhoan.MaTaiKhoan != lophocphandangky.LopHocPhan.MaGiangVien) { return RedirectToAction("DangNhap", "TaiKhoan"); } if (lophocphandangky.LopHocPhan.MaGiangVien != taikhoan.MaTaiKhoan) { return RedirectToAction("DangNhap", "TaiKhoan"); } if (lophocphandangky != null) { return View(lophocphandangky); } } return RedirectToAction("_404", "Error"); }

Các file đính kèm theo tài liệu này:

  • pdfluan_an_nghien_cuu_xay_dung_mo_hinh_quan_ly_toan_dien_truong.pdf
  • pdfLA_NguyenThanhTuan_Sum.pdf
  • pdfLA_NguyenThanhTuan_TT.pdf
  • docxNguyenThanhTuan_E.docx
  • docxNguyenThanhTuan_V.docx
Luận văn liên quan