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
280 trang |
Chia sẻ: tueminh09 | Ngày: 07/02/2022 | Lượt xem: 437 | Lượt tải: 0
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");
}