1. Trang chủ
  2. » Luận Văn - Báo Cáo

Ứng dụng thuật toán tô màu đồ thị cho bài toán xếp lịch thi

51 35 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Ứng Dụng Thuật Toán Tô Màu Đồ Thị Cho Bài Toán Xếp Lịch Thi
Tác giả Đặng Tố Lộc
Người hướng dẫn ThS. Trần Thị Kim Oanh
Trường học Trường Đại Học Vinh
Chuyên ngành Kỹ Sư Công Nghệ Thông Tin
Thể loại báo cáo đồ án tốt nghiệp
Năm xuất bản 2017
Thành phố Nghệ An
Định dạng
Số trang 51
Dung lượng 1,58 MB

Cấu trúc

  • 1. Lý do chọn đề tài (5)
  • 2. Đối tƣợng và phạm vi nghiên cứu (5)
  • 3. Cách tiếp cận đề tài (6)
  • 4. Mục tiêu đề tài (6)
  • 5. Dự kiến kết quả đạt đƣợc (6)
  • CHƯƠNG 1. BÀI TOÁN TÔ MÀU ĐỒ THỊ (7)
    • 1.1. Nêu bài toán tô màu đồ thị (7)
    • 1.2. Thuật toán (7)
    • 1.3. Giải quyết bài toán (8)
    • 1.4. Các ứng dụng của thuật toán tô màu đồ thị (9)
  • CHƯƠNG 2. ÁP DỤNG BÀI TOÁN TÔ MÀU ĐỒ THỊ ĐỂ GIẢI QUYẾT BÀI TOÁN XẾP LỊCH THI (10)
    • 2.1. Bài toán xếp lịch thi theo tín chỉ ở trường Đại học (10)
    • 2.2. Quy bài toán xếp lịch thi về bài toán tô màu đồ thị (10)
    • 2.3. Thuật toán xếp lịch thi (11)
    • 2.4. Khung chương trình (13)
  • CHƯƠNG 3.XÂY DỰNG CHƯƠNG TRÌNH XẾP LỊCH THI (14)
    • 3.1. Công cụ sử dụng để xây dựng chương trình (14)
    • 3.2. Giao diện của chương trình và hướng dẫn sử dụng (15)
      • 3.2.1. Chức năng tạo tài khoản, đăng nhập (15)
      • 3.2.2. Chức năng đổi mật khẩu (16)
      • 3.2.3. Chức năng load tập tin (17)
      • 3.2.4. Chức năng quản lý phòng (17)
      • 3.2.5. Chức năng quản lý bậc học (18)
      • 3.2.6. Chức năng quản lý giờ thi (19)
      • 3.2.8. Chức năng chọn phòng (21)
      • 3.2.9. Chức năng xếp lịch (23)
      • 3.2.10. Chức năng lưu kết quả ra file excel (24)
      • 3.2.11. Chức năng in ấn (24)
    • 3.3. Cài đặt thuật toán (25)
    • 3.4. Kết luận (50)
      • 3.4.1. Kết quả đạt đƣợc (50)
      • 3.4.2. Khó khăn gặp phải (50)
      • 3.4.3. Hướng phát triển (50)
  • TÀI LIỆU THAM KHẢO (51)

Nội dung

Đối tƣợng và phạm vi nghiên cứu

Đối tƣợng nghiên cứu cụ thể là thuật toán tô màu về đồ thị, bài toán tô màu và ứng dụng thuật toán tô màu để xếp lịch thi

Lý thuyết đồ thị, mặc dù đã phát triển từ lâu, nhưng vẫn có nhiều ứng dụng hiện đại Đồ thị được định nghĩa là tập hợp các đỉnh và các cạnh nối giữa chúng Tô màu đồ thị là quá trình gán màu cho các đỉnh sao cho không có hai đỉnh kề nhau cùng màu Bài toán xếp lịch thi có thể được mô hình hóa thành bài toán tô màu đồ thị, trong đó các đỉnh đại diện cho các môn thi và hai môn thi kề nhau nếu có sinh viên tham gia cả hai Mỗi thời điểm thi được biểu thị bằng một màu khác nhau.

Đề tài nghiên cứu tập trung vào việc xếp lịch thi cho Viện Kỹ thuật và Công nghệ của Trường Đại học Vinh Nghiên cứu này sẽ áp dụng các phương pháp xếp lịch thi trong môi trường đại học, từ đó thiết kế và phát triển phần mềm xếp lịch thi trên máy tính, sử dụng thuật toán tô màu đồ thị để tối ưu hóa quy trình.

Cách tiếp cận đề tài

Bài viết này cung cấp cái nhìn tổng quát về thuật toán tô màu, đồng thời ứng dụng thuật toán này để phát triển chương trình xếp lịch thi trong viện Kỹ thuật và Công nghệ Phần mềm được yêu cầu không có yêu cầu nghiệp vụ quá cao.

Mục tiêu đề tài

 Nghiên cứu thuật toán tô màu đồ thị

Ứng dụng thuật toán tô màu đồ thị giúp xây dựng chương trình xếp lịch thi hiệu quả với hai tiêu chí chính: phân bổ thời gian thi đồng đều cho các môn học trong một hệ thống và đảm bảo rằng các môn thi sử dụng chung phòng thi không diễn ra đồng thời Điều này giúp rải đều thời gian thi cho tất cả sinh viên, tạo điều kiện thuận lợi cho việc ôn tập và tham gia kỳ thi.

 Dữ liệu thực nghiệm lấy tại viện Kỹ thuật và Công nghệ.

Dự kiến kết quả đạt đƣợc

Chương trình xếp lịch thi tại Viện Kỹ thuật và Công nghệ, Trường Đại học Vinh, cung cấp các chức năng quản lý phòng thi, bậc học và giờ thi hiệu quả Hệ thống này giúp tối ưu hóa quy trình tổ chức thi, đảm bảo sự sắp xếp hợp lý và thuận tiện cho sinh viên và giảng viên.

Phần nghiên cứu sẽ trình bày tổng quan về thuật toán tô màu đồ thị, đồng thời nêu rõ ứng dụng của các kết quả nghiên cứu này trong các khoa tại trường đại học.

BÀI TOÁN TÔ MÀU ĐỒ THỊ

Nêu bài toán tô màu đồ thị

Đồ thị bao gồm các đỉnh được kết nối bởi các cạnh, và việc xác định đối tượng cần quan tâm giữa các đỉnh và cạnh là rất quan trọng Lý thuyết đồ thị đã được ứng dụng rộng rãi để giải quyết nhiều vấn đề trong cuộc sống, trong đó bài toán tô màu đồ thị là một ví dụ tiêu biểu.

Trong đồ thị vô hướng G=(E,V), với E là tập hợp các cạnh và V là số đỉnh, bài toán tô màu đồ thị yêu cầu gán màu cho mỗi đỉnh sao cho không có hai đỉnh kề nhau được gán cùng một màu.

Hình 1 Ví dụ tô màu đồ thị

Thuật toán

 Output: Đồ thị G=(E,V) có các đỉnh đã đƣợc tô màu

Bước1: Lập danh sách các đỉnh của đồ thị E’:=[v1,v2,…,vn] được sắp xếp theo thứ tự bậc giảm dần:

Bước 2: Tô màu i cho đỉnh đầu tiên trong danh sách Duyệt lần lượt các đỉnh tiếp theo và tô màu i cho đỉnh không kề đỉnh đã đƣợc tô màu i

Bước 3: Nếu tất cả các đỉnh đã được tô màu thì kết thúc, đồ thị được tô bằng i màu Ngược lại, sang bước 4

Bước 4: Loại khỏi E’ các đỉnh đã tô màu Sắp xếp lại các đỉnh trong E’ theo thứ tự bậc giảm dần Đặt i: = i + 1 và quay lại bước 2.

Giải quyết bài toán

Cho đồ thi G=(E,V) E là tập hợp các cạnh của đồ thị V là tập hợp các đỉnh của đồ thị V={v1,v 2 ,v 3 ,v 4 ,v 5 ,v 6 }

Hình 2: Đồ thị khi chưa được tô màu

Sắp xếp các đỉnh theo thứ tự bậc giảm dần d(v 2 ) > d(v 3 ) > d(v 4 ) > d(v 5 ) > d(v 6 ) > d(v 1 )

Bước 2: Tô màu I cho đỉnh v 2

Và tô màu I cho đỉnh không kề đỉnh v 2 là đỉnh v 6

Bước 3: Xét các bậc của các đỉnh còn lại chưa được tô màu d(v 1 )=0 ; d(v 3 )=2; d(v 4 )=2; d(v 5 )=2

Sắp xếp bậc của chúng giảm dần d(v )> d(v )> d(v )> d(v )

Và cũng tô màu II cho đỉnh v1 và v 5 ( không kề đỉnh v 3 )

Bước 4: Tô màu III cho đỉnh v 4 còn lại

Vậy ta tô Màu I cho đỉnh v 2 , v 6

Hình 3: Đồ thị sau khi tô màu tô màu

Các ứng dụng của thuật toán tô màu đồ thị

- Xếp lịch thi cho trường Đại học

- Bài toán điều khiển đèn nút giao thông

- Bài toán phân chia tần số

ÁP DỤNG BÀI TOÁN TÔ MÀU ĐỒ THỊ ĐỂ GIẢI QUYẾT BÀI TOÁN XẾP LỊCH THI

Bài toán xếp lịch thi theo tín chỉ ở trường Đại học

Các trường đại học hiện nay áp dụng hệ thống học tín chỉ, cho phép sinh viên nhận bằng tốt nghiệp khi tích lũy đủ số tín chỉ từ các môn học quy định Việc học và thi không diễn ra theo lớp mà dựa trên từng môn học cụ thể Hàng năm, nhà trường công bố danh sách các môn học để sinh viên tự đăng ký theo ngành học của mình Cuối kỳ hoặc cuối năm, nhà trường tổ chức thi cho các môn đã giảng dạy, với mỗi môn thi diễn ra trong một ngày, nhưng có thể tổ chức nhiều môn thi trong cùng một ngày.

Để đảm bảo sinh viên có thể đăng ký thi nhiều môn, lịch thi cần được sắp xếp sao cho các môn thi không diễn ra cùng ngày.

Mỗi sinh viên cần tham gia thi một số môn học, vì vậy việc lập lịch thi hợp lý là rất quan trọng Lịch thi phải đảm bảo không có hai môn thi nào diễn ra cùng một thời điểm, đồng thời cần phân bố thời gian thi một cách đều đặn để sinh viên có thể chuẩn bị tốt nhất cho từng môn.

Mỗi đợt thi chỉ giới hạn trong một khoảng thời gian nhất định.Trong một ngày, một phòng có thể tổ chức nhiều ca thi.

Quy bài toán xếp lịch thi về bài toán tô màu đồ thị

 Lập đồ thị có các đỉnh là các môn thi, các đỉnh liền kề là các đỉnh đƣợc thi cùng thời điểm

 Màu tô cho đồ thị ở đây là các thời điểm thi tương ứng

 Mỗi môn thi là một đỉnh

 Hai môn thi cùng ngày thi thì đƣợc nối cùng nhau một cạnh(cung)

Mỗi một sinh viên thi một số môn thi Các đỉnh của đồ thị ở đây là các môn thi Thời điểm thi gồm có(ngày thi, ca thi)

Ca thi gồm có 4 ca (7h, 9h, 13h, 15h)

Th1: Giống ngày thi,giống phòng thi thì khác ca thi

Th2:Giống ngày thi,giống ca thi thì khác phòng thi (vì tránh cho sinh viên thi trùng lịch một lúc hai môn nên ca thi ta không dùng)

Th3: Khác ngày thi giống ca thi phòng thi.

Thuật toán xếp lịch thi

 Input: danh sách các môn thi, danh sách phòng thi, ngày thi

 Output: danh sách các môn thi đã đƣợc lên lịch theo ca thi, phòng thi

 Bước 1: gom nhóm các môn thi theo nhóm sao cho các môn không được phép thi trùng nhau thành một nhóm

 Bước 2: thiết lập đồ thị cho toàn bộ các môn thi: hai môn thi cùng nhóm được nối với nhau

 Bước 3: Áp dụng thuật toán tô màu để các thời điểm thi cho các môn thi

Ví dụ: Có 5 môn học A ,B , C, D, E cần xếp lịch thi

Khoảng thời gian thi 2 ngày 1/6/201 và2/6/2017

Cách làm: Ngày thi đƣợc chọn

Chọn phòng thi cho các môn A B C D E

E 2/6 A1101 Áp dụng thuật toán tô màu ta đƣợc

Khung chương trình

-Đầu tiên sẽ có một danh sách môn cần sắp lịch

-Mỗi môn có một bậc học, một hình thức thi riêng

-Mỗi môn trong danh sách gồm có: Mã học phần, tên học phần, số tín chỉ, số sinh viên dự thi, hình thức thi

-Bước đầu gom các môn cùng bậc học lại với nhau

- Sau đó cài đặt khoảng thời gian thi, ca thi, phòng thi

-Sau đó chọn phòng các môn cùng bậc học

-Xếp lịch nếu hai môn cùng phòng thì ƣu tiên cho môn có nhiều thời gian hơn.

DỰNG CHƯƠNG TRÌNH XẾP LỊCH THI

Công cụ sử dụng để xây dựng chương trình

Microsoft Visual Studio 2010 Ultimate là phiên bản mạnh mẽ nhất, cung cấp bộ công cụ tích hợp đa chức năng để phát triển phần mềm cho doanh nghiệp và tổ chức.

Hệ thống công cụ này tối ưu hóa quy trình phát triển ứng dụng, mang đến môi trường tích hợp giúp nâng cao kỹ năng như mô hình hóa, viết mã, gõ lỗi và kiểm thử Visual Studio 2010 Ultimate đơn giản hóa các công việc chung, hỗ trợ các nhóm làm việc và giao tiếp hiệu quả hơn.

 Microsoft Visual Studio 2010 Ultimate đảm bảo chất lƣợng phần mềm và đồng thời có cái nhìn trực quan về chu trình phát triển ứng dụng

Microsoft Excel là chương trình xử lý bảng tính nằm trong bộ Microsoft

Phần mềm Microsoft Office được thiết kế để ghi lại và trình bày thông tin dưới dạng bảng, thực hiện tính toán và tạo ra các số liệu thống kê trực quan từ Excel Bảng tính trong Excel bao gồm nhiều ô được tạo bởi các dòng và cột, cho phép người dùng nhập dữ liệu và lập công thức tính toán Excel nổi bật với nhiều tính năng ưu việt và giao diện thân thiện, giúp người dùng dễ dàng thao tác.

Giao diện của chương trình và hướng dẫn sử dụng

3.2.1 Chức năng tạo tài khoản, đăng nhập

Hình 2 Mẫu đăng kí tài khoản

Hình 3 Mẫu đăng nhập hệ thống

Khi chương trình được khởi động lần đầu, người dùng sẽ được phép tạo tài khoản trên hệ thống Tuy nhiên, từ những lần sử dụng sau, người dùng bắt buộc phải đăng nhập để tiếp tục sử dụng chương trình.

3.2.2 Chức năng đổi mật khẩu Ấn vào biểu tượng “Đổi mật khẩu” ta được mẫu đổi mật khẩu dưới đây

Hình 4 Mẫu đổi mật khẩu

Chức năng này cho phép người dùng thay đổi mật khẩu trong quá trình sử dụng để bảo đảm an toàn thông tin

3.2.3 Chức năng load tập tin Ấn vào biểu tƣợng “Load tập tin” ta đƣợc mẫu load tập tin

3.2.4 Chức năng quản lý phòng Ấn vào biểu tƣợng” Quản lý phòng” ta đƣợc mẫu quản lý phòng thi

Hình 5 Mẫu quản lý phòng

Chức năng quản lý phòng thực hành cho phép người dùng nhập tên và sức chứa của phòng, đồng thời cung cấp nút xóa để loại bỏ các phòng không còn sử dụng, nút lưu để hoàn tất cài đặt, và nút thoát để rời khỏi mà không lưu thay đổi.

3.2.5 Chức năng quản lý bậc học Ấn vào biểu tƣợng “Quản lý bậc học” ta đƣợc mẫu quản lý bậc học sẽ hiện ra

Hình 6 Mẫu quản lý bậc học

Chức năng này cho phép người dùng nhập tên bậc học vào ô textbox để thêm vào danh sách Các nút xóa bên cạnh mỗi bậc học cho phép loại bỏ những bậc học không còn quản lý Để hoàn tất cài đặt bậc học, người dùng cần nhấn lưu để lưu lại thay đổi, hoặc nhấn thoát để rời khỏi.

3.2.6 Chức năng quản lý giờ thi Ấn vào biểu tƣợng” Quản lý giờ thi” ta đƣợc mẫu quản lý giờ thi

Hình 7 Mẫu quản lý giờ thi

Chức năng quản lý thời gian thi cho phép người dùng chọn ngày bắt đầu và kết thúc của mùa thi Người dùng chỉ cần click để chương trình tự động lấy ra các giờ thi trong khoảng thời gian đã chọn, với quy tắc mỗi ngày sẽ có 4 ca thi vào các khung giờ 7h, 9h, 13h và 15h Mỗi giờ thi trong danh sách đều có nút xóa để loại bỏ những giờ không hợp lệ.

3.2.7 Chức năng chọn nhóm Ấn vào biểu tƣợng “ chọn nhóm” ta đƣợc giao diện “mẫu chọn nhóm”

Hình 8 Mẫu chọn nhóm cho các môn thi

Chức năng chọn nhóm trong chương trình cho phép người dùng dễ dàng lập danh sách môn thi, từ đó có thể chọn nhóm thủ công cho từng môn bằng cách nhấn vào nút chọn, hoặc sử dụng chế độ tự động để chương trình phân nhóm cho các môn thi Hiện tại, chức năng tự động chỉ hỗ trợ phân nhóm cho hai loại hình là đại học và cao đẳng.

3.2.8 Chức năng chọn phòng Ấn vào biểu tƣợng” chọn phòng” ta đƣợc mẫu lên form CHỌN PHÒNGTHI Để thực hiện gán phòng thi cho các môn thi, nhấn tích chọn phòng rồi sau đó ấn nút “Ok”

Nút chấp nhận để lưu lại những thay đổi của người dùng và hủy để thoát khỏi cài đặt mà không lưu lại những thay đổi

3.2.9 Chức năng xếp lịch Ấn vào biểu tƣợng “xếp lịch” ta đƣợc mẫu xếp lịch

Hình 10 Mẫu xếp lịch thi

Sau khi lựa chọn nhóm và phòng thực hành cho các môn thi, người dùng chỉ cần nhấn nút Xếp Lịch để chương trình tự động gán thời gian thi cho từng môn.

3.2.10 Chức năng lưu kết quả ra file excel

Sau khi xếp lịch, Có thể ấn vào “Lưu excel” chương trình cho phép lưu kết quả lại dưới dạng file excel để tiện xem lại

Ta ấn vào biểu tưởng “In kết quả ”Sau khi xếp lịch chương trình cho phép in ra kết quả xếp lịch.

Cài đặt thuật toán

Code GioThi.cs using System; using System.Collections.Generic; using System.Text; namespace DataAccess

{ } publicstring Ngay, Gio; public GioThi(string ngay, string gio)

Code Lenlichthi.cs using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Threading; namespace DataAccess

{ privateDanhSachMonThi DsMonThi; publicDanhSachMonThi DsMonThiDaXep = newDanhSachMonThi(); List DSGioThi; public LenLichThi(DanhSachMonThi dsmt, List dst) {

Thread TienTrinh; frmProcess frm; void ShowProcess()

} publicbool DuocPhepTo(MonThi mt, int tiet)

{ string s = DSGioThi[tiet].Gio.Trim(); if (mt.DungPhongMay)

} privatebool GioDaDung(MonThi mThi, int tiet)

{ return mThi.DSTietDaTo.Contains(tiet);

DsMonThi.ThemTietDaTo(mt, DSGioThi.IndexOf(mt.Tiet));

{ if (DsMonThi.SoLuongMau > DSGioThi.Count) returnBatLoi.ThongBao2("Số lượng giờ thi sử dụng không đủ để xếp lịch Vui lòng kiểm tra lại"); try

TienTrinh.Start(); int TietXep = 0; while (DsMonThi.Length > 0)

DsMonThi.SortGiam(); if (DuocPhepTo(DsMonThi[0], TietXep))

DsMonThi.SetGio(DsMonThi[0], DSGioThi[TietXep]);

MonThi mt2 = DsMonThi[i]; if (!GioDaDung(DsMonThi[i], TietXep) && DuocPhepTo(DsMonThi[i], TietXep))

DsMonThi.SetGio(mt2, DSGioThi[TietXep]);

Code Monthi.cs using System; using System.Collections.Generic; using System.Text; namespace DataAccess

{ string mamh; publicbool DungPhongMay; publicstring Mamh

{ get { return mamh; } set { mamh = value; }

} publicList DSMonCungNhom = newList(); publicList DSTietDaTo = newList(); publicGioThi Tiet; public MonThi(string mamh)

Code Phong.cs using System; using System.Collections.Generic; using System.Text; namespace DataAccess

{ publicstring TenPhong; publicint SoCho; public Phong(string ten, int sl)

Code XuLyDataGridview.cs using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Data; namespace DataAccess

CreateComboboxColumn(String HeaderText, List items)

DataGridViewComboBoxColumn objColumn newDataGridViewComboBoxColumn(); objColumn.HeaderText = HeaderText; objColumn.MaxDropDownItems = 10; objColumn.FlatStyle = FlatStyle.Standard; foreach (Phong st in items) objColumn.Items.Add(st.TenPhong); return objColumn;

DataGridViewTextBoxColumn objText newDataGridViewTextBoxColumn(); objText.HeaderText = HeaderText; objText.ReadOnly = true; return objText;

DataGridViewButtonColumn objBot newDataGridViewButtonColumn(); objBot.HeaderText = objBot.Text = HeaderText; objBot.UseColumnTextForButtonValue = true; return objBot;

CreateComboboxColumn(String HeaderText, List items)

DataGridViewComboBoxColumn objColumn newDataGridViewComboBoxColumn(); objColumn.HeaderText = HeaderText; objColumn.MaxDropDownItems = 10; objColumn.FlatStyle = FlatStyle.Standard; foreach (string st in items) objColumn.Items.Add(st); return objColumn;

DataGridViewCheckBoxColumn objColumn newDataGridViewCheckBoxColumn(); objColumn.HeaderText = HeaderText; objColumn.Width = 100; objColumn.FlatStyle = FlatStyle.Standard; return objColumn;

} publicstaticvoid LoadData(DataGridView grwDanhSach, string FileName)

DataTable tb = Excel.Import(FileName); tb.Columns.Add("NHÓM"); grwDanhSach.DataSource = tb; grwDanhSach.Visible = true;

} publicstaticDataTable GetTable(string[] arrayvalue, DataTable main)

DataTable kq = AddColumns(arrayvalue); for (int i = 0; i < main.Rows.Count; i++)

{ kq.Rows.Add(i + 1); foreach (string st in arrayvalue) kq.Rows[i][st] = main.Rows[i][st]; } return kq;

DataTable tb = newDataTable(); tb.Columns.Add("STT"); foreach (string st in HeadText) tb.Columns.Add(st); return tb;

} publicstaticDataGridViewRow GetRow(string MaHP, DataGridView grwDanhSach)

{ foreach (DataGridViewRow r in grwDanhSach.Rows) if (Convert.ToString(r.Cells[1].Value) == MaHP) return r; returnnull;

} publicstaticvoid ShowData(DanhSachMonThi dsmt, DataGridView grwDanhSach, int ColumnNgay, int ColumnGio)

{ foreach (MonThi mt in dsmt.ds)

DataGridViewRow r = GetRow(mt.Mamh, grwDanhSach); r.Cells[ColumnNgay].Value = mt.Tiet.Ngay; r.Cells[ColumnGio].Value = mt.Tiet.Gio;

} publicstaticvoid ShowData(DanhSachMonThi dsmt, DataGridView grwDanhSach, string ColumnNgay, string ColumnGio)

{ foreach (MonThi mt in dsmt.ds)

DataGridViewRow r = GetRow(mt.Mamh, grwDanhSach); r.Cells[ColumnNgay].Value = mt.Tiet.Ngay; r.Cells[ColumnGio].Value = mt.Tiet.Gio;

} publicstaticvoid ShowData(DataGridView src, DataGridView dst, int columnsrc, int columndst)

DataTable sou = (DataTable)src.DataSource; foreach (DataRow r in sou.Rows)

GetRow(r[1].ToString(), dst).Cells[columndst].Value = r[columnsrc].ToString();

} publicstaticvoid ShowData(DataGridView src, DataGridView dst, string columnsrc, string columndst)

DataTable sou = (DataTable)src.DataSource; foreach (DataRow r in sou.Rows)

GetRow(r[1].ToString(), dst).Cells[columndst].Value = r[columnsrc].ToString();

{ foreach (DataGridViewColumn c in dgr.Columns) c.ReadOnly = true;

The provided code snippet is part of a C# application named "XepLichThi," which utilizes various namespaces such as System, System.Windows.Forms, and DevComponents.DotNetBar It includes essential libraries for data handling, user interface components, and threading, indicating a focus on developing a Windows Forms application that likely involves scheduling or organizing exams.

Thread TienTrinh; publicdelegatevoidHienThi(string Text); void ShowText(string Text)

Thread.Sleep(2000); this.Invoke(newHienThi(ShowText), "");

{ this.Invoke(newHienThi(ShowText), Text);

} privatevoid frmXepLichThi_Load(object sender, EventArgs e)

{ pnTitle.Left = (this.Width - pnTitle.Width) / 2; rtMain.Select(); lblTime.Text = DuLieu.GetDay(); if (XuLyXml.DaTaoTaiKhoan())

Active_Form(false); else if (BatLoi.DgResul("Ứng dụng chƣa đăng kí tài khoản, bạn có muốn tạo tài khoản kô"))

Active_Form(false); btnDangNhap.Text = "Tạo tài khoản";

#region RibonControl privatevoid rtChucNang_Click(object sender, EventArgs e)

ShowStatus("Vui lòng đăng nhập để sử dụng chương trinh");

} privatevoid btnExpand_Click(object sender, EventArgs e)

{ if (ribon.Expanded) ribon.Expanded = false; btnExpand.Image = XepLichThi.Properties.Resources.a;

{ btnExpand.Image = XepLichThi.Properties.Resources.col; ribon.Expanded = true;

} privatevoid ribbonTabItem_DClick(object sender, EventArgs e)

{ btnExpand.Image = XepLichThi.Properties.Resources.col;

{ btnExpand.Image = XepLichThi.Properties.Resources.a;

#region Chuc nang===================== privatevoid btnDangNhap_TextChanged(object sender, EventArgs e)

{ if (btnDangNhap.Text == "Đăng Nhập")

{ this.btnDangNhap.Image global::XepLichThi.Properties.Resources.open_key_icon; btnDoiMatKhau.Enabled = false;

{ this.btnDangNhap.Image global::XepLichThi.Properties.Resources.Button_Log_Off_icon; btnDoiMatKhau.Enabled = true;

} void Active_Form(bool active)

Đăng nhập thành công! Nút Đăng Nhập đã chuyển thành Đăng Xuất Nếu bậc học chưa được cài đặt, hệ thống sẽ hỏi người dùng có muốn cài đặt hay không Nếu đồng ý, cửa sổ quản lý bậc học sẽ được mở ra để người dùng thực hiện cài đặt.

} else this.btnDangNhap.Text = "Đăng Nhập";

} privatevoid btnThoatCT_Click(object sender, EventArgs e)

DialogResult rs = MessageBox.Show("Thoát khỏi chương trình", "Thoát chương trình", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (rs == DialogResult.OK)

Application.Exit(); privatevoid btnLoadFile_Click(object sender, EventArgs e)

DialogResult rs = op.ShowDialog(); try

XuLyDataGridView.LoadData(grwDanhSach, op.FileName); grwDanhSach.Columns[2].Width = 300; btnChonNhom.Enabled = btnXuatExcel.Enabled btnInKetQua.Enabled = true; btnChonPhong.Enabled = btnXepLichThi.Enabled = false;

ShowStatus("Load Dữ Liệu Thành Công");

BatLoi.ThongBao2("Lỗi! Không thể load dữ liệu từ file đã chọn");

} privatevoid btnXuatExcel_Click(object sender, EventArgs e)

BatLoi.ThongBao2("Chưa có dữ liệu để lưu"); return;

DataColumn c = ((DataTable)grwDanhSach.DataSource).Columns["NHÓM"]; ((DataTable)grwDanhSach.DataSource).Columns.Remove(c); Excel.Export((DataTable)grwDanhSach.DataSource, saveFileName, "KẾT QUẢ XẾP LỊCH THI");

((DataTable)grwDanhSach.DataSource).Columns.Add(c);

ShowStatus("Lưu Kết Quả Thành Công");

ShowStatus("Đã xảy ra lỗi Dữ liệu chưa được lưu");

} privatevoid btnInKetQua_Click(object sender, EventArgs e)

DataGridViewColumn c = grwDanhSach.Columns["NHÓM"]; grwDanhSach.Columns.Remove(c); pr.print(grwDanhSach); grwDanhSach.Columns.Add(c);

} privatevoid btnDangXuat_Click(object sender, EventArgs e)

{ frmDangNhap frm = newfrmDangNhap(); if (frm.ShowDialog() == DialogResult.OK)

Active_Form(true); btnDangNhap.Text = "Đăng Xuất";

} privatevoid btnDangNhap_Click(object sender, EventArgs e)

{ if (btnDangNhap.Text == "Đăng Nhập")

Active_Form(false); btnDangNhap.Text = "Đăng Nhập"; btnXepLichThi.Enabled = btnXuatExcel.Enabled btnInKetQua.Enabled = grwDanhSach.Visible = false;

} privatevoid btnXepLichThi_Click(object sender, EventArgs e)

LenLichThi llt = newLenLichThi(DsMonThi(), GioThi.GetAll);

XuLyDataGridView.ShowData(llt.DsMonThiDaXep, grwDanhSach, "NGÀY",

} privatevoid btnQlNhom_Click(object sender, EventArgs e)

{ frmQlBacHoc ql = newfrmQlBacHoc(); ql.ShowDialog();

} privatevoid btnQlPhong_Click(object sender, EventArgs e)

{ frmQlPhongHoc ql = newfrmQlPhongHoc(); ql.ShowDialog();

} privatevoid btnQlGioThi_Click(object sender, EventArgs e)

{ frmQlTiet qlt = newfrmQlTiet(); qlt.ShowDialog();

} privatevoid btnDoiMatKhau_Click(object sender, EventArgs e)

{ frmDoiMatKhau frm = newfrmDoiMatKhau(); frm.ShowDialog();

{ frmDangKi frm = newfrmDangKi(); if (frm.ShowDialog() == DialogResult.OK)

{ btnDangNhap.Text = "Tạo tài khoản";

#region DataGridView====================== privatevoid grwDanhSach_CellMouseMove(object sender, DataGridViewCellMouseEventArgs e)

{ grwDanhSach.CurrentCell grwDanhSach.Rows[e.RowIndex].Cells[e.ColumnIndex];

DanhSachMonThi Dsmt = newDanhSachMonThi(newList()); foreach (DataGridViewRow r in grwDanhSach.Rows) if (Convert.ToString(r.Cells["NHÓM"].Value) != "")

MonThi mt = newMonThi(Convert.ToString(r.Cells["MÃ HP"].Value)); string phong1 Convert.ToString(((DataGridViewTextBoxCell)r.Cells["PHÒNG"]).Value); string nhom1 = Convert.ToString(r.Cells["NHÓM"].Value); foreach (DataGridViewRow r2 in grwDanhSach.Rows)

In this code snippet, the values from the "NHÓM" and "PHÒNG" cells are converted to strings, and a check is performed to see if either the group or room values are duplicates using the KiemTraTrung method If a duplicate is found, the method ThemMonCungNhom is called to add the corresponding item from the second row of the data grid.

#endregion privatevoid btnChonNhom_Click(object sender, EventArgs e)

DataTable kq = XuLyDataGridView.GetTable(newstring[] { "MÃ HP", "TÊN HỌC PHẦN", "LỚP", "NHÓM" }, (DataTable)grwDanhSach.DataSource); frmChonNhom fcn = newfrmChonNhom(kq); if (fcn.ShowDialog() == DialogResult.OK)

XuLyDataGridView.ShowData(fcn.dgrDanhSach, grwDanhSach, "NHÓM",

"NHÓM"); btnChonPhong.Enabled = btnXepLichThi.Enabled = true;

{ for (int i = 0; i < tb.Rows.Count; i++) if (tb.Rows[i]["HT THI"].ToString().ToLower().CompareTo("Thi Máy".ToLower()) != 0

&& tb.Rows[i]["HT THI"].ToString().ToLower().CompareTo("Vấn Đáp".ToLower()) != 0

&& tb.Rows[i]["HT THI"].ToString().ToLower().CompareTo("Tự luận".ToLower()) != 0)

} privatevoid btnChonPhong_Click(object sender, EventArgs e)

DataTable kq = XuLyDataGridView.GetTable(newstring[] { "MÃ HP", "TÊN HỌC PHẦN", "SỐ SV", "HT THI", "PHÕNG" }, (DataTable)grwDanhSach.DataSource);

MonXepPhong(kq); frmChonPhong fcp = newfrmChonPhong(kq); if (fcp.ShowDialog() == DialogResult.OK)

XuLyDataGridView.ShowData(fcp.dgrDanhSach, grwDanhSach, "PHÒNG",

} privatevoid grwDanhSach_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)

In the given code, when the column index is 8, it checks if the value is not null and can be parsed into a DateTime object If successful, it converts the value to a short time string format Similarly, for column index 7, it performs a null check and attempts to parse the value into a DateTime object, returning it in a short date string format.

} publicvoid frmFormMain_SizeChanged(object sender, EventArgs e)

{ if (this.WindowState != FormWindowState.Maximized &&this.WindowState

!= FormWindowState.Minimized) this.WindowState = FormWindowState.Maximized;

} privatevoid btnLuuBieuMau_Click(object sender, EventArgs e)

SaveFileDialog sv = newSaveFileDialog(); sv.FileName = "BieuMau.xls"; sv.Filter = "Excel Worksheet|*.xls;*.xlsx"; if (sv.ShowDialog() == DialogResult.OK)

BinaryWriterbw; if (File.Exists(sv.FileName))

File.Delete(sv.FileName); bw = newBinaryWriter(fs); bw.Write(global::XepLichThi.Properties.Resources.BieuMau, 0, global::XepLichThi.Properties.Resources.BieuMau.Length); bw.Flush(); bw.Close();

} privatevoid btnHuongDanSuDung_Click(object sender, EventArgs e)

{ if (File.Exists("Help.chm"))

Process.Start("Help.chm"); else

BatLoi.ThongBao2("Lỗi: Không tìm thấy file Help.chm");

Kết luận

Sau một thời gian dài nghiên cứu và phát triển ứng dụng, mặc dù gặp không ít khó khăn, chúng tôi đã hoàn thành chương trình với những kết quả đáng ghi nhận.

- Nghiên cứu lý thuyết đồ thị và đã hiểu rõ đƣợc một số vấn đề liên quan đến đồ thị và thuật toán tô màu đồ thị

Dựa trên lý thuyết thuật toán tô màu đồ thị, bài viết đề xuất một thuật toán xếp lịch thi, trong đó các môn thi được biểu diễn bằng các nút và thời điểm thi tương ứng với các màu được tô.

- Xây dựng hoàn chỉnh chương trình xếp lịch thi

Sinh viên năm cuối thường bắt đầu tìm hiểu về đề tài khoa học, điều này mang lại sự mới mẻ nhưng cũng gặp phải nhiều khó khăn do phải nghiên cứu từ đầu và có thể còn nhiều thiếu sót trong quá trình thực hiện.

- Các chức năng của chương trình chưa thật sự linh động, có thể gây khó khăn cho người sử dụng

- Chƣa có kinh nghiệm nhiều trong việc thiết lập phần mềm ứng dụng và kiến thức còn nhiều hạn chế

- Tính bảo mật dữ liệu của chương trình còn thô sơ

Một số chức năng trong chương trình vẫn chưa được tối ưu hóa hoàn toàn Tôi đang nỗ lực cải tiến chương trình để tự động hóa quy trình xếp lịch, bao gồm tự động phân nhóm, xếp phòng thực hành, và đặc biệt là phân bổ thời gian thi một cách công bằng cho tất cả sinh viên.

Ngày đăng: 01/08/2021, 10:36

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1]Nguyễn Văn Ba, Phát triển hệ thống hướng đối tượng với UML, ĐHBKHN, 2004 Sách, tạp chí
Tiêu đề: Phát triển hệ thống hướng đối tượng với UML
[2]Nguyễn Minh Hiệp, Giáo trình Công cụ &amp; Môi trường lập trình 1, Đại học Đà Lạt, 2009 Sách, tạp chí
Tiêu đề: Giáo trình Công cụ & Môi trường lập trình 1
[3] Phạm Hữu Khang, Lập trình C#, NXB Lao động xã hội, 2006 Sách, tạp chí
Tiêu đề: Lập trình C#
Nhà XB: NXB Lao động xã hội
[4] Trần Nguyên Phong,SQL Server 2000, ĐHKH Huế, 2004 Sách, tạp chí
Tiêu đề: SQL Server 2000
[5] Nguyễn Tô Thành, Nguyễn Đức Nghĩa,Giáo trình toán rời rạc, ĐHBKHN, 1994 Sách, tạp chí
Tiêu đề: Giáo trình toán rời rạc

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN