You are on page 1of 75

TRƯỜNG ĐẠI HỌC AN GIANG

KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO
LẬP TRÌNH .NET

CHỦ ĐỀ 1
XÂY DỰNG PHẦN MỀM QUẢN LÝ SINH VIÊN

GVHD: Ths. Phạm Hữu Dũng


NHÓM THỰC HIỆN: NHÓM 11
DTH185460 - Bùi Nhật Trường Linh
DTH185437 - Trương Như Ý
DTH185235 - Nguyễn Thị Huỳnh Anh

An Giang, 2020
PHÂN CÔNG CÔNG VIỆC

Tên thành viên Lớp MSSV Nhiệm vụ Tỷ lệ

Bùi Nhật Trường Linh DH19TH1 DTH185460 Thiết kế code, sửa 100%
lỗi

Trương Như Ý DH19TH1 DTH85437 Thiết kế cơ sở dữ 100%


liệu, code, word

Nguyễn Thị Huỳnh Anh DH19TH1 DTH185235 Powerpoint, giao 100%


diện chương
trình, code

Trang 1
LỜI NÓI ĐẦU
Ngày nay, cùng với sự phát triển về mọi mặt của xã hội, ngành công nghệ thông
tin đã trở thành một nhu cầu không thể thiếu trong đời sống con người. Phần mềm tin
học được ứng dụng rộng rãi trong quản lí, học tập,.. Nó giúp cho người sử dụng có
được những thông tin nhanh chóng và chính xác từ đó mà chất lượng công việc đạt
hiệu quả cao.
Bài toán “Quản lí sinh viên” nhằm giải quyết và đáp ứng một cách hiệu quả các
nhu cầu về mặt quản lí thông tin trong các trường Đại học. Tin học hóa trong công tác
quản lí nhằm giảm bớt sức lao động của con người, tiết kiệm được thời gian, độ chính
xác cao, gọn nhẹ, và tiện lợi hơn rất nhiều so với việc làm thủ công quản lí trên giấy tờ
như trước đây. Tin học hóa giúp thu hẹp không gian lưu trữ, tránh được thất lac dữ
liệu, tự động hệ thống hóa và cụ thể hóa các thông tin theo nhu cầu của con người.
Là một đề tài mang tính thực tiễn cao, nhóm em đã đưa ra được những nhận
xét, đánh giá tổng thể và từ đó đưa ra hệ thống mới có nhiều chức năng áp dụng cho
công tác quản lí dựa trên sự hỗ trợ của máy tính. Với vố kiến thức đã học tại trường,
sự đam mê tin học chúng e đã xây dựng hệ thống “Quản lí sinh viên” với các chức
năng đăng nhập, thêm, xóa, sửa, tìm kiếm, thống kê. Hệ thống được xây dựng trên
ngôn ngữ C# và quản lí dữ liệu được xây dựng trên hệ quản trị cơ sở dữ liệu Microsoft
SQL server 2014.
Sau quá trình học tập và rèn luyện tại khoa Công nghệ thông tin trường Đại học
An Giang chúng em đã được trang bị các kiến thức cơ bản, các kỹ năng thực tế để có
thể hoàn thành đồ án môn học của mình. Đặc biệt, chúng em xin gửi lời cảm ơn chân
thành đến thầy Phạm Hữu Dũng đã quan tâm hướng dẫn truyền đạt những kiến thức và
kinh nghiệm cho chúng em trong suốt thời gian học tập bộ môn Lập trình.Net.
Trong quá trình làm đồ án môn không tránh khỏi được những sai sót, chúng em
mong nhận được sự góp ý của quý thầy để được hoàn thiện hơn.

An Giang, 2020.

Trang 2
MỤC LỤC
I./ MỤC ĐÍCH YÊU CẦU CỦA ĐỒ ÁN....................................................................5
1./ MỤC ĐÍCH.........................................................................................................5
2./ YÊU CẦU............................................................................................................5
II./ NGƯỜI DÙNG......................................................................................................5
III./ PHÂN TÍCH THIẾT KẾ HỆ THỐNG..............................................................5
1. Đặc tả chi tiết hệ thống........................................................................................5
2. Phân tích...............................................................................................................6
3. Thiết kế hệ thống..................................................................................................8
2./ Thiết kế code......................................................................................................11
IV./ GIAO DIỆN CHƯƠNG TRÌNH.......................................................................62
1./ Giao diện............................................................................................................62
2./ Các chức năng chính.........................................................................................70
V./ CHƯƠNG TRÌNH ĐÃ LÀM ĐƯỢC................................................................74
1./ Khả năng nhập, xuất.........................................................................................74
2./ Khả năng lưu trữ...............................................................................................74
3./ Khả năng tìm kiếm, thống kê...........................................................................74
4./ Phân quyền người sử dụng...............................................................................74
VI./ HƯỚNG PHÁT TRIỂN.....................................................................................74
VII./ TÀI LIỆU THAM KHẢO................................................................................75

Trang 3
NỘI DUNG BÁO CÁO
I./ MỤC ĐÍCH YÊU CẦU CỦA ĐỒ ÁN
1./ MỤC ĐÍCH
Đồ án “Quản lí sinh viên” nhằm giải quyết và đáp ứng một cách hiệu quả các
nhu cầu về mặt quản lí thông tin trong các trường Đại học. Tin học hóa trong công tác
quản lí nhằm giảm bớt sức lao động của con người, tiết kiệm được thời gian, độ chính
xác cao, gọn nhẹ và tiện lợi hơn rất nhiều so với việc làm thủ công trên giấy tờ như
trước. Tin học hóa giúp thu hẹp không gian lưu trữ, tránh được việc thất lạc dữ liệu, tự
động hệ thống hóa và cụ thể hóa các thông tin theo nhu cầu của con người.

2./ YÊU CẦU


- Giao diện và các thành phần bố trí hợp lí, rõ ràng tạo sự tiện lợi cho người quản lý.
- Người quản lý dễ dàng tìm kiếm, thêm, xóa, sửa thông tin.
- Cập nhật dữ liệu nhanh chóng, kịp thời.
- Phần mềm cho phép lưu trữ lượng lớn thông tin.

II./ NGƯỜI DÙNG


Người dùng được chia làm hai đối tượng chính: quản lý hệ thống (cán bộ phụ
trách) và người truy cập hệ thống (sinh viên ) để xem thông tin.
- Người quản lý hệ thống: có quyền đăng nhập, đăng xuất, thêm, xóa, chỉnh
sửa , tìm kiếm, thống kê, quản lý toàn bộ thông tin hệ thống.
- Người truy cập hệ thống: là những người cần lấy thông tin cần thiết từ hệ
thống, và đối tượng này khi truy cập vào hệ thống để xem thông tin cần có tài
khoản. Đối tương này chỉ có quyền truy nhập xem thông tin chứ không thể cập
nhật,sửa đổi thông tin trong hệ thống.

III./ PHÂN TÍCH THIẾT KẾ HỆ THỐNG


1. Đặc tả chi tiết hệ thống
a./ Quản lí sinh viên
- Sinh viên có nhu cầu học ở trường thì phòng đào tạo sẽ tiến hành kiểm tra và thêm
mới hồ sơ của sinh viên vào hệ thống. Hệ thống sẽ nhập danh sách sinh viên có sẵn
tại phòng đào tạo, thêm sửa thông tin sinh viên, và xóa sinh viên trong trường hợp
sinh viên bị thôi học hoặc nguyên nhân nào đó.
- Mỗi sinh viên phải có Mã sinh viên để phân biệt sinh viên này với sinh viên khác.
- Sinh viên gồm: họ tên, phái, ngày sinh, địa chỉ, số điện thoại, niên khóa.
- Một sinh viên thì có thể học ít nhất một môn nào đó, nhưng một môn học thì có thể
có nhiều sinh viên theo học.

Trang 4
- Sinh viên học môn nào thì kết quả môn học đó phải có lần thi và điểm thi của môn
đó.
b./ Quản lí môn học
- Môn học là đơn vị học tập của từng sinh viên. Muốn cho một sinh viên nào đó học
môn này, thì cần phải có thông tin về môn học này trong danh sách các môn học của
trường.
- Môn học gồm: Mã môn học, tên môn học, số tín chỉ.
- Một môn học thì được mở bởi 1 hoặc nhiều khoa, nhưng một khoa thì có thể mở
nhiều môn học
d./ Quản lí khoa
- Khoa gồm: Mã khoa, tên khoa.
- Một khoa thì có nhiều lớp, nhưng một lớp thì chỉ thuộc một khoa.
e./ Quản lí lớp
- Lớp học là đơn vị cơ bản để quản lí sinh viên trong trường Đại học tùy theo từng
trường mà trong lớp học chỉ có sinh viên học theo khoa khác nhau.
- Lớp gồm: Mã lớp, tên lớp, sĩ số.
- Một sinh viên thì chỉ thuộc một lớp, nhưng một lớp thì có nhiều sinh viên học.

2. Phân tích
a./ Sơ đồ phân rã chức năng

c./ Sơ đồ ERD

Trang 5
Trang 6
d./ Sơ đồ quan hệ giữa các thực thể

3. Thiết kế hệ thống
a./ Thiết kế cơ sở dữ liệu
 Bảng sinh viên

Tên thuộc tính Kiểu dữ liệu Ràng buộc Mô tả

MaSV Nvarchar(10) Primary key Mã sinh viên

TenSV Nvarchar(40) Not null Họ tên

Phai Nvarchar(5) Phái

NgaySinh Date Ngày sinh

Sdt Char(10) Số điện thoại

Diachi Nvarchar(50) Địa chỉ

NienKhoa Nvarchar(9) Niên khóa

MaLop Nvarchar(10) Foreign key Mã lớp

Trang 7
- Bảng môn học

Tên thuộc tính Kiểu dữ liệu Ràng buộc Mô tả

MaMH Nvarchar(10) Prinmary key Mã môn học

TenMH Nvarchar(40) Not null Tên môn học

- Bảng Kết quả

Tên thuộc tính Kiểu dữ liệu Ràng buộc Mô tả

MaSV Nvarchar(10) Primary key Mã sinh viên

MaMH Nvarchar(10) Primary key Mã môn học

LanThi Int Primary key Lần thi

DiemThi Float Điểm thi

- Bảng Khoa

Tên thuộc tính Kiểu dữ liệu Ràng buộc Mô tả

MaKhoa Nvarchar(10) Primary key Mã khoa

TenKhoa Nvarchar(40) Not null Tên khoa

Trang 8
- Bảng Lớp

Tên thuộc tính Kiểu dữ liệu Ràng buộc Mô tả

MaLop Nvarchar(10) Primary key Mã lớp

TenLop Nvarchar(40) Not null Tên lớp

SiSo Int Sỉ số

MaKhoa Nvarchar(10) Foreign key Mã khoa

- Bảng Khoa- Môn học

Tên thuộc tính Kiểu dữ liệu Ràng buộc Mô tả

MaKhoa Nvarchar(10) Primary key Mã khoa

MaMH Nvarchar(10) Primary key Mã môn học

SoTinChi Int Số tín chỉ

SoTiet Int Số tiết

Trang 9
- Bảng người dùng

Tên thuộc tính Kiểu dữ liệu Ràng buộc Mô tả

TaiKhoan Nvarchar(20) Primary key Tài khoản

MatKhau Nvarchar(20) Not null Mật khẩu

Quyen Nvarchar(20) Not null Quyền

2./ Thiết kế code


a./ Form Đăng nhập
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace QLSV
{
public partial class frmDangNhap : Form
{
public frmDangNhap()
{
InitializeComponent();
}

private void btnDangNhap_Click(object sender, EventArgs e)


{
SqlConnection con = new SqlConnection
(@"Data Source=DESKTOP-G1BJ8OS;Initial Catalog=QLSV;Integrated
Security=True");
con.Open();
string sql = "Select * From NguoiDung where TaiKhoan='" + txtTenDN.Text + "' and
MatKhau='" + txtMatKhau.Text + "' and Quyen='Admin'";
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataReader data = cmd.ExecuteReader();
if (data.Read() == true)

Trang 10
{
MessageBox.Show("Đăng nhập thành công với quyền Admin", "Thông báo");
frmMain frm = new frmMain();
frm.Show();
this.Hide();

cmd.Dispose();
data.Close();
data.Dispose();
}
else
{
cmd.Dispose();
data.Close();
data.Dispose();
string sql1 = "Select * From NguoiDung where TaiKhoan='" + txtTenDN.Text + "'
and MatKhau='" + txtMatKhau.Text + "' and Quyen='User'";
SqlCommand cmd1 = new SqlCommand(sql1, con);
SqlDataReader data1 = cmd1.ExecuteReader();
if (data1.Read() == true)
{
MessageBox.Show("Đăng nhập thành công với quyền User", "Thông báo");
frmMain frm = new frmMain();

frm.Show();
frm.AnButton();
frm.MnuItemDanhMuc.Enabled = false;
frm.mnuItemQuanli.Enabled = false;
this.Hide();
}
else
MessageBox.Show("Tài khoản hoặc mật khẩu không chính xác", "Thông báo");
}

private void btnThoat_Click(object sender, EventArgs e)


{
DialogResult tr;
tr = MessageBox.Show("Bạn có muốn thoát chương trình hay không", "Thông báo",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (tr == DialogResult.Yes)
Application.Exit();
}
}
}
b./ Form Main (Giao diện chính)
using System;
using System.Collections.Generic;

Trang 11
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace QLSV
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
}

private void mnuExit_Click(object sender, EventArgs e)


{
DialogResult tr;
tr = MessageBox.Show("Bạn có muốn thoát chương trình hay không", "Thông báo",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (tr == DialogResult.Yes)
Application.Exit();
}

private void mnuDX_Click(object sender, EventArgs e)


{
frmDangNhap frm = new frmDangNhap();
frm.Show();
this.Hide();
//mnuDN.Enabled = true;
//editMenu.Enabled = false;
//mnuDoiMK.Enabled = false;
MnuItemDanhMuc.Enabled = false;
mnuItemQuanli.Enabled = false;
//mnuWindows.Enabled = false;
mnuItemThongKe.Enabled = false;

//menuBarToolStripMenuItem.Checked = false;
}

private void btnQLSinhVien_Click(object sender, EventArgs e)


{
//this.Hide();
frmQLSinhVien qlsv = new frmQLSinhVien();
qlsv.ShowDialog();
}

Trang 12
private void btnQLKhoa_Click(object sender, EventArgs e)
{
frmQLKhoa qlsv = new frmQLKhoa();
qlsv.ShowDialog();
}

private void btnQLLop_Click(object sender, EventArgs e)


{
frmQLLop qlsv = new frmQLLop();
qlsv.ShowDialog();
}

private void btnQLMonHoc_Click(object sender, EventArgs e)


{
frmQLMonHoc qlsv = new frmQLMonHoc();
qlsv.ShowDialog();
}

private void btnQLKetQua_Click(object sender, EventArgs e)


{
frmQLKetQua qlsv = new frmQLKetQua();
qlsv.ShowDialog();
}

private void btnQLKhoaMon_Click(object sender, EventArgs e)


{
frmQLKhoaMon qlsv = new frmQLKhoaMon();
qlsv.ShowDialog();
}

private void mnuThongtinSV_Click(object sender, EventArgs e)


{
frmQLSinhVien qlsv = new frmQLSinhVien();
qlsv.hien();
qlsv.ShowDialog();
}

private void mnuMon_Click(object sender, EventArgs e)


{
frmQLMonHoc qlsv = new frmQLMonHoc();
qlsv.ShowDialog();
}

private void mnuKhoa_Click(object sender, EventArgs e)


{
frmQLKhoa qlk = new frmQLKhoa();
qlk.ShowDialog();
}

private void mnuLop_Click(object sender, EventArgs e)

Trang 13
{
frmQLLop qll = new frmQLLop();
qll.ShowDialog();
}

private void mnuSV_Click(object sender, EventArgs e)


{
frmQLSinhVien qlsv = new frmQLSinhVien();
qlsv.ShowDialog();
}

private void mnuKetQua_Click(object sender, EventArgs e)


{
frmQLKetQua qlkq = new frmQLKetQua();
qlkq.ShowDialog();
}

private void mnuKhoaMon_Click(object sender, EventArgs e)


{
frmQLKhoaMon qlkm = new frmQLKhoaMon();
qlkm.ShowDialog();
}

private void mnuDSSV_Click(object sender, EventArgs e)


{
frmQLLop qll = new frmQLLop();
qll.Hien();
qll.ShowDialog();
}
public void AnButton()
{
btnQLKetQua.Enabled = false;
btnQLKhoa.Enabled = false;
btnQLKhoaMon.Enabled = false;
btnQLLop.Enabled = false;
btnQLSinhVien.Enabled = false;
btnQLMonHoc.Enabled = false;
}
private void mnuTroGiup_Click(object sender, EventArgs e)
{
MessageBox.Show("----Quy tắt khi nhập thông tin----\n" +
"-Mã sinh viên: gồm 9 kí tự (3 kí tự đầu từ A->Z, 6 kí tự sau là số 0->9)\n" +
"-Mã lớp: gồm 6 hoặc 7 kí tự (2 kí tự đầu từ A->Z, 2 kí tự kế số từ 0->9, 3 hoặc 2 kí
tự cuối là A->Z)\n" +
"-Mã khoa: ít hơn 10 kí tự (đây là tên viết tắt chữ cái đầu của tên khoa\n" +
"-Mã môn học:6 kí tự(3 kí tự đầu từ A->Z, 3 kí tự cuối là số 0->9 \n","Trợ giúp");
}

private void mnuKetQuaThi_Click(object sender, EventArgs e)


{

Trang 14
frmQLKetQua kq = new frmQLKetQua();
kq.Hien();
kq.ShowDialog();

}
}
}

b./ Form Quản lí môn học


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Text.RegularExpressions;

namespace QLSV
{
public partial class frmQLMonHoc : Form
{
public frmQLMonHoc()
{
InitializeComponent();
}
DataSet ds = new DataSet("dsQLMonHoc");
SqlDataAdapter daMonHoc;

private void frmQLMonHoc_Load(object sender, EventArgs e)


{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = (@"Data Source=DESKTOP-G1BJ8OS;Initial
Catalog=QLSV;Integrated Security=True");

// Dữ liệu datagrid Danh sách tên Khoa


string sQueryMonHoc = @"select *from MonHoc";
daMonHoc = new SqlDataAdapter(sQueryMonHoc, conn);
daMonHoc.Fill(ds, "tblDSMonHoc");
dgDSMonHoc.DataSource = ds.Tables["tblDSMonHoc"];

//đặt tiêu đề tiếng Việt, định độ rộng cho các trường


dgDSMonHoc.Columns["MaMH"].HeaderText = "Mã môn học";
dgDSMonHoc.Columns["MaMH"].Width = 100;
dgDSMonHoc.Columns["TenMH"].HeaderText = "Tên môn học";

Trang 15
dgDSMonHoc.Columns["TenMH"].Width = 180;

// Command Thêm môn học


string sThemMH = @"insert into MonHoc values(@MaMH, @TenMH)";
SqlCommand cmThemMH = new SqlCommand(sThemMH, conn);
cmThemMH.Parameters.Add("@MaMH", SqlDbType.NVarChar, 10, "MaMH");
cmThemMH.Parameters.Add("@TenMH", SqlDbType.NVarChar, 40, "TenMH");
daMonHoc.InsertCommand = cmThemMH;

//Command Xóa môn học


string sXoaMH = @"delete from MonHoc where MaMH = @MaMH";
SqlCommand cmXoaMH = new SqlCommand(sXoaMH, conn);
cmXoaMH.Parameters.Add("@MaMH", SqlDbType.NVarChar, 10, "MaMH");
daMonHoc.DeleteCommand = cmXoaMH;

//Command Sửa Khoa


string sSuaMH = @"update MonHoc set TenMH=@TenMH where
MaMH=@MaMH";
SqlCommand cmSuaMH = new SqlCommand(sSuaMH, conn);
cmSuaMH.Parameters.Add("@MaMH", SqlDbType.NVarChar, 10, "MaMH");
cmSuaMH.Parameters.Add("@TenMH", SqlDbType.NVarChar, 40, "TenMH");
daMonHoc.UpdateCommand = cmSuaMH;

//sửa thuộc tính cho datagid SelectionMode = FullRowSelect


}

public void ClearField()


{
txtMaMH.ResetText();
txtTenMH.ResetText();
}

private void btnSua_Click(object sender, EventArgs e)


{
if (this.dgDSMonHoc.SelectedRows.Count > 0)
{
DataGridViewRow dr = dgDSMonHoc.SelectedRows[0];
txtMaMH.Enabled = false;
dgDSMonHoc.BeginEdit(true);
if(txtMaMH.Text!="" && txtTenMH.Text!="")
{
//khong dc sua ma mon hoc
txtMaMH.Text=dr.Cells["MaMH"].Value.ToString();
dr.Cells["TenMH"].Value = txtTenMH.Text;
dgDSMonHoc.EndEdit();
MessageBox.Show("Mã môn học không được sửa");
MessageBox.Show("Đã cập nhật", "Thông báo");
}
else
{

Trang 16
MessageBox.Show("Vui lòng nhập đầy đủ dữ liệu", "Thông báo");
}
}
else
{
MessageBox.Show("Chọn dòng để sửa", "Thông báo");
}
}

private void btnXoa_Click(object sender, EventArgs e)


{
if (this.dgDSMonHoc.SelectedRows.Count > 0)
{
dgDSMonHoc.Rows.RemoveAt(this.dgDSMonHoc.SelectedRows[0].Index);
}
else
{
MessageBox.Show("Chọn dòng để xóa", "Thông báo");
}
}

private void btnLuu_Click(object sender, EventArgs e)


{
try
{

daMonHoc.Update(ds, "tblDSMonHoc");// cập nhật cơ sở dữ liệu


MessageBox.Show("Đã lưu!", "Thông báo");
dgDSMonHoc.Refresh();
}
catch
{
return;
}
}

private void btnThoat_Click(object sender, EventArgs e)


{
DialogResult tr;
tr = MessageBox.Show("Bạn có muốn thoát hay không", "Thông báo",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (tr == DialogResult.Yes)
this.Close();
}

private void dgDSMonHoc_Click(object sender, EventArgs e)


{
//click dòng hiển thị tương ứng lên groupbox
DataGridViewRow d = dgDSMonHoc.SelectedRows[0];
txtMaMH.Text = d.Cells["MaMH"].Value.ToString();

Trang 17
txtTenMH.Text = d.Cells["TenMH"].Value.ToString();
txtMaMH.Enabled = true;
}

private void btnHuy_Click(object sender, EventArgs e)


{
DialogResult tr;
tr = MessageBox.Show("Xác nhận hủy các thay đổi", "Thông báo",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (tr == DialogResult.OK)
{
ds.Tables["tblDSMonHoc"].RejectChanges();
MessageBox.Show("Đã hủy");
dgDSMonHoc.Refresh();
}
}

private void btnThemmoi_Click_1(object sender, EventArgs e)


{
// Kiểm tra dữ liệu hợp lệ:
// - các trường không bỏ trống
// - makhoa không trùng
// Thêm 1 dòng vào bảng tblDSKhoa
DataRow row = ds.Tables["tblDSMonHoc"].NewRow();
DataTable tb = ds.Tables["tblDSMonHoc"];
string ktrmamh = txtMaMH.Text;
ktrmamh = Regex.Replace(ktrmamh, @"\s+", "");
int maxlength = 6;
if (ktrmamh != "")
{
if (ktrmamh.Length == maxlength)
{
string locdulieu = "";
locdulieu = "MaMH ='" + ktrmamh + "'";
DataRow[] rows = tb.Select(locdulieu);
////
if (rows.Length > 0)
{
MessageBox.Show("Mã môn học bị trùng", "Thông báo");
txtMaMH.Focus();

}
else
{
row["MaMH"] = ktrmamh;
string ktrtenmh = txtTenMH.Text;
ktrtenmh = Regex.Replace(ktrtenmh, @"\s+", " ");
ktrtenmh.Trim();
if (ktrtenmh != "" && ktrtenmh != " ")
{

Trang 18
row["TenMH"] = ktrtenmh;
ds.Tables["tblDSMonHoc"].Rows.Add(row);
ClearField();

}
else
{
MessageBox.Show("Tên môn học không được để trống!!");
txtTenMH.ResetText();
txtTenMH.Focus();
}
}
}
else
{
MessageBox.Show("Mã môn học có 6 ký tự(không bao gồm khoảng trắng)!!!");
txtMaMH.ResetText();
txtMaMH.Focus();
}
}
else
{
MessageBox.Show("Mã môn học không được để trống!!");
txtMaMH.Focus();
txtMaMH.ResetText();
}
}
}
}
c./ Form quản lí sinh viên
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.Sql;
using System.Diagnostics;
using System.Data.OleDb;
using System.Text.RegularExpressions;

Trang 19
namespace QLSV
{
public partial class frmQLSinhVien : Form
{
public frmQLSinhVien()
{
InitializeComponent();
}
DataSet ds = new DataSet("dsQLSinhVien");
SqlDataAdapter daLop;
SqlDataAdapter daSinhVien;
phuongthucsp pt = new phuongthucsp();

private void frmQLSinhVien_Load(object sender, EventArgs e)


{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = (@"Data Source=DESKTOP-G1BJ8OS;Initial
Catalog=QLSV;Integrated Security=True");

// Dữ liệu combobox tên Lớp


string sQueryLop = @"select * from Lop";
daLop = new SqlDataAdapter(sQueryLop, conn);
daLop.Fill(ds, "tblLop");
cboLop.DataSource = ds.Tables["tblLop"];
cboLop.DisplayMember = "TenLop";
cboLop.ValueMember = "MaLop";

// Dữ liệu datagrid Danh sách sinh viên


string sQuerySinhVien = @"select n.*,c.TenLop from SinhVien n, Lop c where
n.MaLop=c.MaLop";
daSinhVien = new SqlDataAdapter(sQuerySinhVien, conn);
daSinhVien.Fill(ds, "tblDSSinhVien");
dgDSSinhVien.DataSource = ds.Tables["tblDSSinhVien"];

Trang 20
// … đặt tiêu đề tiếng Việt, định độ rộng cho các trường
dgDSSinhVien.Columns["MaSV"].HeaderText = "Mã SV";
dgDSSinhVien.Columns["MaSV"].Width = 95;
dgDSSinhVien.Columns["TenSV"].HeaderText = "Tên SV";
dgDSSinhVien.Columns["TenSV"].Width = 140;
dgDSSinhVien.Columns["Phai"].HeaderText = "Phái";
dgDSSinhVien.Columns["Phai"].Width = 40;
dgDSSinhVien.Columns["NgaySinh"].HeaderText = "Ngày sinh";
dgDSSinhVien.Columns["NgaySinh"].Width = 100;
dgDSSinhVien.Columns["Sdt"].HeaderText = "Số ĐT";
dgDSSinhVien.Columns["Sdt"].Width = 90;
dgDSSinhVien.Columns["DiaChi"].HeaderText = "Địa chỉ";
dgDSSinhVien.Columns["DiaChi"].Width = 150;
dgDSSinhVien.Columns["NienKhoa"].HeaderText = "Niên khóa";
dgDSSinhVien.Columns["NienKhoa"].Width = 100;
dgDSSinhVien.Columns["TenLop"].HeaderText = "Tên lớp";
dgDSSinhVien.Columns["TenLop"].Width = 100;
dgDSSinhVien.Columns["MaLop"].Visible = false;

// Command Thêm sinh viên

string sThemSV = @"insert into SinhVien values(@MaSV,


@TenSV,@Phai,@NgaySinh,@Sdt,@DiaChi,@NienKhoa,@MaLop)";
SqlCommand cmThemSV = new SqlCommand(sThemSV, conn);

cmThemSV.Parameters.Add("@MaSV", SqlDbType.NVarChar, 10, "MaSV");


cmThemSV.Parameters.Add("@TenSV", SqlDbType.NVarChar, 40, "TenSV");
cmThemSV.Parameters.Add("@Phai", SqlDbType.NVarChar, 5, "Phai");
cmThemSV.Parameters.Add("@NgaySinh", SqlDbType.SmallDateTime,40,
"NgaySinh");
cmThemSV.Parameters.Add("@Sdt", SqlDbType.Char, 10, "Sdt");
cmThemSV.Parameters.Add("@DiaChi", SqlDbType.NVarChar, 50, "DiaChi");
cmThemSV.Parameters.Add("@NienKhoa", SqlDbType.NVarChar, 9, "NienKhoa");
cmThemSV.Parameters.Add("@MaLop", SqlDbType.NVarChar, 10, "MaLop");
daSinhVien.InsertCommand = cmThemSV;

Trang 21
//Command Xóa sinh viên

string sXoaSV= @"delete from SinhVien where MaSV = @MaSV";


SqlCommand cmXoaSV = new SqlCommand(sXoaSV,conn);
cmXoaSV.Parameters.Add("@MaSV", SqlDbType.NVarChar, 10, "MaSV");
daSinhVien.DeleteCommand = cmXoaSV;

//Command Sửa sinh viên

string sSuaSV = @"update SinhVien set MaSV=@MaSV,TenSV=@TenSV,


Phai=@Phai,NgaySinh=@NgaySinh,Sdt=@Sdt,DiaChi=@DiaChi,NienKhoa=@NienKhoa,M
aLop=@MaLop where MaSV=@MaSV";
SqlCommand cmSuaSV = new SqlCommand(sSuaSV, conn);

cmSuaSV.Parameters.Add("@MaSV", SqlDbType.NVarChar, 10, "MaSV");


cmSuaSV.Parameters.Add("@TenSV", SqlDbType.NVarChar, 40, "TenSV");
cmSuaSV.Parameters.Add("@Phai", SqlDbType.NVarChar, 5, "Phai");
cmSuaSV.Parameters.Add("@NgaySinh", SqlDbType.SmallDateTime,40,
"NgaySinh");
cmSuaSV.Parameters.Add("@Sdt", SqlDbType.Char, 10, "Sdt");
cmSuaSV.Parameters.Add("@DiaChi", SqlDbType.NVarChar, 50, "DiaChi");
cmSuaSV.Parameters.Add("@NienKhoa", SqlDbType.NVarChar, 9, "NienKhoa");
cmSuaSV.Parameters.Add("@MaLop", SqlDbType.NVarChar, 10, "MaLop");
daSinhVien.UpdateCommand = cmSuaSV;

//sửa thuộc tính cho datagid SelectionMode = FullRowSelect

private void dgSinhVien_Click(object sender, EventArgs e)


{

//click dòng hiển thị tương ứng lên groupbox


DataGridViewRow dr = dgDSSinhVien.SelectedRows[0];
txtMaSV.Text = dr.Cells["MaSV"].Value.ToString();

Trang 22
txtHoTen.Text = dr.Cells["TenSV"].Value.ToString();
if (dr.Cells["Phai"].Value.ToString() == "Nam")
{
radNam.Checked = true;
}
else
{
radNu.Checked = true;
}
dtpNgaySinh.Text = dr.Cells["NgaySinh"].Value.ToString();
txtDiaChi.Text = dr.Cells["DiaChi"].Value.ToString();
txtSdt.Text = dr.Cells["Sdt"].Value.ToString();
txtNienKhoa.Text = dr.Cells["NienKhoa"].Value.ToString();
cboLop.Text = dr.Cells["TenLop"].Value.ToString();
cboLop.SelectedValue = dr.Cells["MaLop"].Value.ToString();
txtMaSV.Enabled = true;
}

private void btnThemmoi_Click(object sender, EventArgs e)


{

// Kiểm tra dữ liệu hợp lệ (SV tự viết):


// - các trường không bỏ trống
// - masv không trùng
// Thêm 1 dòng vào bảng tblSinhVien

DataRow row = ds.Tables["tblDSSinhVien"].NewRow();


DataTable tb = ds.Tables["tblDSSinhVien"];
string ktrsdt = txtSdt.Text;
row["NgaySinh"] = dtpNgaySinh.Text;
int maxlength = 10;
ktrsdt = Regex.Replace(ktrsdt, @"\s+", "");
if (ktrsdt != "")
{
if (ktrsdt.Length == maxlength)

Trang 23
{
if (pt.IsNumber(ktrsdt) == true)
{
row["Sdt"] = txtSdt.Text;///SDT ghi chú sai cần sửa
string ktrmasv = txtMaSV.Text;
ktrmasv = Regex.Replace(ktrmasv, @"\s+", "");
string locdulieu = "";
locdulieu = "MaSV ='" + ktrmasv + "'";
DataRow[] rows = tb.Select(locdulieu);
if (ktrmasv != "")
{
////
if (rows.Length > 0)
{
MessageBox.Show("Mã sinh viên bị trùng", "Thông báo");
txtMaSV.Focus();

}
else
{
row["MaSV"] = ktrmasv;
string ktrhoten = txtHoTen.Text;
ktrhoten = Regex.Replace(ktrhoten, @"\s+", " ");
ktrhoten.Trim();
if (ktrhoten != "" && ktrhoten != " ")
{
row["TenSV"] = ktrhoten;

if (radNu.Checked == true)
{
row["Phai"] = "Nữ";
}
else
{
row["Phai"] = "Nam";

Trang 24
}
string ktrdiachi = txtDiaChi.Text;
ktrdiachi = Regex.Replace(ktrdiachi, @"\s+", " ");
ktrdiachi.Trim();
if (ktrdiachi != "" && ktrdiachi != " ")
{
row["DiaChi"] = ktrdiachi;
if (txtNienKhoa.Text != "")
{
row["NienKhoa"] = txtNienKhoa.Text;
var item =
this.cboLop.GetItemText(this.cboLop.SelectedItem);///lấy item trong cbb
string test;
test = cboLop.Text;
if (test != item || test == "")
{
MessageBox.Show("Hãy chọn tên lớp có sẵn!!", "Thông Báo");
cboLop.ResetText();
}
else
{
row["MaLop"] = cboLop.SelectedValue;
row["TenLop"] = cboLop.Text;
ds.Tables["tblDSSinhVien"].Rows.Add(row);

ClearFields();
}
}
else
{
MessageBox.Show("Niên khóa không được trống!!", "Thông
Báo");
}
}
else
{

Trang 25
MessageBox.Show("Địa chỉ không được để trống!!!");
txtDiaChi.ResetText();
}
}
else
{
MessageBox.Show("Họ tên không được để trống!!!");
txtHoTen.ResetText();
}
}
/////
}
else
{
MessageBox.Show("Mã số sinh viên không được để trống!!!");
txtMaSV.ResetText();
}
}
else
{
MessageBox.Show("SDT Không được đánh kí tự ngoài số vào!!");
txtSdt.ResetText();
}
}
else
{
MessageBox.Show("SDT có 10 số!!!");
}
}
else
{
MessageBox.Show("SDT không được để trống");
}
}

Trang 26
private void btnXoa_Click(object sender, EventArgs e)
{

if (this.dgDSSinhVien.SelectedRows.Count > 0)
{
dgDSSinhVien.Rows.RemoveAt(this.dgDSSinhVien.SelectedRows[0].Index);

}
else
{
MessageBox.Show("Chọn dòng để xóa", "Thông báo");
}
}

private void btnSua_Click(object sender, EventArgs e)


{
if (this.dgDSSinhVien.SelectedRows.Count > 0)
{
DataGridViewRow dr = dgDSSinhVien.SelectedRows[0];
dgDSSinhVien.BeginEdit(true);
txtMaSV.Enabled = false;
txtMaSV.Text = dr.Cells["MaSV"].Value.ToString();
if (txtHoTen.Text!=""&&txtDiaChi.Text!=""&&txtSdt.Text!="" &&
txtNienKhoa.Text!="")
{

var item = this.cboLop.GetItemText(this.cboLop.SelectedItem);///lấy item trong


cbb
string test;
test = cboLop.Text;
if (test != item || test == "")
{
MessageBox.Show("Hãy chọn tên lớp có sẵn!!", "Thông Báo");
cboLop.ResetText();
}
else

Trang 27
{
dr.Cells["TenSV"].Value = txtHoTen.Text;
if (radNu.Checked == true)
{
dr.Cells["Phai"].Value = "Nữ";
}
else
{
dr.Cells["Phai"].Value = "Nam";
}
dr.Cells["NgaySinh"].Value = dtpNgaySinh.Text;
dr.Cells["Sdt"].Value = txtSdt.Text;
dr.Cells["DiaChi"].Value = txtDiaChi.Text;
dr.Cells["NienKhoa"].Value = txtNienKhoa.Text;
dr.Cells["MaLop"].Value = cboLop.SelectedValue;
dr.Cells["TenLop"].Value = cboLop.Text;
dgDSSinhVien.EndEdit();
MessageBox.Show("Không cho phép sửa mã sinh viên", "Thông báo");
MessageBox.Show("Đã cập nhật", "Thông báo");
}
}
else
{
MessageBox.Show("Vui lòng nhập đủ thông tin!!!");
}
}
}
//Xóa trắng textbox
private void ClearFields()
{
txtMaSV.ResetText();
txtHoTen.ResetText();
dtpNgaySinh.ResetText();
txtDiaChi.ResetText();
txtSdt.ResetText();

Trang 28
txtNienKhoa.ResetText();
cboLop.ResetText();
}

private void btnLuu_Click(object sender, EventArgs e)


{

try
{
daSinhVien.Update(ds, "tblDSSinhVien");// cập nhật cơ sở dữ liệu
MessageBox.Show("Đã lưu!", "Thông báo");
//ds.Tables["tblDSSinhVien"].AcceptChanges();
dgDSSinhVien.Refresh();
}
catch
{
return;
}
}

private void btnHuy_Click(object sender, EventArgs e)


{
DialogResult tr;
tr = MessageBox.Show("Xác nhận hủy các thay đổi", "Thông báo",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if(tr==DialogResult.OK)
{
ds.Tables["tblDSSinhVien"].RejectChanges();
MessageBox.Show("Đã hủy");
dgDSSinhVien.Refresh();

Trang 29
private void btnThoat_Click(object sender, EventArgs e)
{
DialogResult tr;
tr = MessageBox.Show("Bạn có muốn thoát hay không", "Thông báo",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (tr == DialogResult.Yes)
this.Close();
}
public void CheckButton()
{
btnThemmoi.Enabled = false;
btnSua.Enabled = false;
btnXoa.Enabled = false;
btnLuu.Enabled = false;
btnHuy.Enabled = false;
}
public void hien()
{
grQLSV.Enabled = false;
CheckButton();

}
private void btnTimKiem_Click(object sender, EventArgs e)
{
string str1;
string str = txtTimKiem.Text;
int maxlength = 9;
int a = 0;
DataTable tb = ds.Tables["tblDSSinhVien"];
if (str.Length>maxlength||str.Length<maxlength)
{
MessageBox.Show("MSSV bao gồm 9 kí tự");
txtTimKiem.ResetText();
txtTimKiem.Focus();
}

Trang 30
else
{
for (int i = 0; i < str.Length; i++)
{
str1 = str.Substring(i, 1);
if (str1 == " ")
a++;
}
if(a!=0)
{
MessageBox.Show("MSSV chỉ bao gồm chữ và số!!!");
txtTimKiem.ResetText();
txtTimKiem.Focus();
}
else
{
string locdulieu = "MaSV ='" + str + "'";
DataRow[] rows = tb.Select(locdulieu);
tb = ((DataTable)dgDSSinhVien.DataSource).Clone();
for (int i = 0; i < rows.Length; i++)
{
DataRow row = tb.NewRow();
row[0] = rows[i].ItemArray[0].ToString();
row[1] = rows[i].ItemArray[1].ToString();
row[2] = rows[i].ItemArray[2].ToString();
row[3] = rows[i].ItemArray[3].ToString();
row[4] = rows[i].ItemArray[4].ToString();
row[5] = rows[i].ItemArray[5].ToString();
row[6] = rows[i].ItemArray[6].ToString();
row[7] = rows[i].ItemArray[7].ToString();
row[8] = rows[i].ItemArray[8].ToString();
tb.Rows.Add(row);
}
dgDSSinhVien.DataSource = tb;
if (rows.Length <1)

Trang 31
MessageBox.Show("Không tìm thấy");
}
}
}
}
}
d./ Form quản lí Lớp
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Text.RegularExpressions;

namespace QLSV
{
public partial class frmQLLop : Form
{
public frmQLLop()
{
InitializeComponent();
}
DataSet ds = new DataSet("dsQLLop");
SqlDataAdapter daLop;
phuongthucsp pt = new phuongthucsp();
private void frmQLLop_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = (@"Data Source=DESKTOP-G1BJ8OS;Initial
Catalog=QLSV;Integrated Security=True");

Trang 32
// Dữ liệu combobox tên khoa
string sQueryKhoa = @"select * from Khoa";
daLop = new SqlDataAdapter(sQueryKhoa, conn);
daLop.Fill(ds, "tblKhoa");
cboTenKhoa.DataSource = ds.Tables["tblKhoa"];
cboTenKhoa.DisplayMember = "TenKhoa";
cboTenKhoa.ValueMember = "MaKhoa";

// Dữ liệu datagrid Danh sách tên Lop


string sQueryLop = @"select n.*,c.TenKhoa from Lop n, Khoa c where
n.MaKhoa=c.MaKhoa;";
daLop = new SqlDataAdapter(sQueryLop, conn);
daLop.Fill(ds, "tblDSLop");
dgDSLop.DataSource = ds.Tables["tblDSLop"];

//đặt tiêu đề tiếng Việt, định độ rộng cho các trường


dgDSLop.Columns["MaLop"].HeaderText = "Mã lớp";
dgDSLop.Columns["MaLop"].Width = 100;
dgDSLop.Columns["TenLop"].HeaderText = "Tên lớp";
dgDSLop.Columns["TenLop"].Width = 180;
dgDSLop.Columns["SiSo"].HeaderText = "Sỉ số";
dgDSLop.Columns["SiSo"].Width = 50;
dgDSLop.Columns["TenKhoa"].HeaderText = "Tên khoa";
dgDSLop.Columns["TenKhoa"].Width = 180;
dgDSLop.Columns["MaKhoa"].Visible = false;

// Command Thêm Lớp


string sThemLop = @"insert into Lop values(@MaLop,
@TenLop,@SiSo,@MaKhoa)";
SqlCommand cmThemLop = new SqlCommand(sThemLop, conn);
cmThemLop.Parameters.Add("@MaLop", SqlDbType.NVarChar, 10, "MaLop");
cmThemLop.Parameters.Add("@TenLop", SqlDbType.NVarChar,40, "TenLop");
cmThemLop.Parameters.Add("@SiSo", SqlDbType.NVarChar, 80, "SiSo");
cmThemLop.Parameters.Add("@MaKhoa", SqlDbType.NVarChar, 40, "MaKhoa");
daLop.InsertCommand = cmThemLop;

Trang 33
//Command Xóa Lớp
string sXoaLop = @"delete from Lop where MaLop = @MaLop";
SqlCommand cmXoaLop = new SqlCommand(sXoaLop, conn);
cmXoaLop.Parameters.Add("@MaLop", SqlDbType.NVarChar, 10, "MaLop");
daLop.DeleteCommand = cmXoaLop;

//Command Sửa Lớp


string sSuaLop = @"update Khoa set TenLop=@TenLop,MaKhoa=@MaKhoa where
MaLop=@MaLop";
SqlCommand cmSuaLop = new SqlCommand(sSuaLop, conn);
cmSuaLop.Parameters.Add("@MaLop", SqlDbType.NVarChar, 10, "MaLop");
cmSuaLop.Parameters.Add("@TenLop", SqlDbType.NVarChar, 40, "TenLop");
cmSuaLop.Parameters.Add("@SiSo", SqlDbType.NVarChar, 80, "SiSo");
cmSuaLop.Parameters.Add("@MaKhoa", SqlDbType.NVarChar, 40, "MaKhoa");
daLop.UpdateCommand = cmSuaLop;

//sửa thuộc tính cho datagid SelectionMode = FullRowSelect


//đu lieu combobox chon khoa
cboChonKhoa.DataSource = ds.Tables["tblKhoa"];
cboChonKhoa.DisplayMember = "TenKhoa";
cboChonKhoa.ValueMember = "MaKhoa";

private void btnThemmoi_Click(object sender, EventArgs e)


{
// Kiểm tra dữ liệu hợp lệ (SV tự viết):
// - các trường không bỏ trống
// - malop không trùng
// Thêm 1 dòng vào bảng tblDSLop

DataRow row = ds.Tables["tblDSLop"].NewRow();


string ktrmalop = txtMaLop.Text;
ktrmalop = Regex.Replace(ktrmalop, @"\s+", "");

Trang 34
int maxlength = 6;
DataTable tb = ds.Tables["tblDSLop"];
string locdulieu = "MaLop='" + txtMaLop.Text + "'";
DataRow[] rows = tb.Select(locdulieu);
if (ktrmalop != "")
{
if (ktrmalop.Length == maxlength || ktrmalop.Length == maxlength+1)
{
if(rows.Length>0)
{
MessageBox.Show("Mã lớp bị trùng", "Thông báo");
txtMaLop.ResetText();
txtMaLop.Focus();
}
else
{
row["MaLop"] = txtMaLop.Text;
string ktrtenlop = txtTenLop.Text;
ktrtenlop = Regex.Replace(ktrtenlop, @"\s+", " ");
ktrtenlop.Trim();
if (ktrtenlop != "" && ktrtenlop != " ")
{
row["TenLop"] = txtTenLop.Text;
row["SiSo"] = nbSiSo.Text;
var item =
this.cboTenKhoa.GetItemText(this.cboTenKhoa.SelectedItem);///lấy item trong cbb
string test;
test = cboTenKhoa.Text;
if (test != item || test == "")
{
MessageBox.Show("Hãy chọn tên khoa có sẵn!!", "Thông Báo");
cboTenKhoa.ResetText();
}
else
{

Trang 35
row["TenKhoa"] = cboTenKhoa.Text;
row["MaKhoa"] = cboTenKhoa.SelectedValue;
ds.Tables["tblDSLop"].Rows.Add(row);
}
}
else
{
MessageBox.Show("Tên lớp không được để trống!!!");
txtTenLop.ResetText();
}
}
}
else
{
MessageBox.Show("Mã lớp có 6 hoặc 7 ký tự!!!");
txtMaLop.ResetText();
txtMaLop.Focus();
}
}
else
{
MessageBox.Show("Mã lớp không được để trống!!!");
}
}

private void btnSua_Click(object sender, EventArgs e)


{
if (this.dgDSLop.SelectedRows.Count > 0)
{
//txtMaLop.Enabled = false;
DataGridViewRow dr = dgDSLop.SelectedRows[0];
dgDSLop.BeginEdit(true);
txtMaLop.Enabled = false;
txtMaLop.Text=dr.Cells["MaLop"].Value.ToString();
//ma p ko dc sua

Trang 36
var item = this.cboTenKhoa.GetItemText(this.cboTenKhoa.SelectedItem);///lấy
item trong cbb
string test;
test = cboTenKhoa.Text;
if (test != item || test == "")
{
MessageBox.Show("Hãy chọn tên khoa có sẵn!!", "Thông Báo");
cboTenKhoa.ResetText();
}
else
{
dr.Cells["TenLop"].Value = txtTenLop.Text;
dr.Cells["SiSo"].Value = nbSiSo.Value;
dr.Cells["MaKhoa"].Value = cboTenKhoa.SelectedValue;
dr.Cells["TenKhoa"].Value = cboTenKhoa.Text;
dgDSLop.EndEdit();
MessageBox.Show("Mã lớp không được phép sửa");
MessageBox.Show("Đã cập nhật", "Thông báo");
}
}
else
{
MessageBox.Show("Chọn dòng để sửa", "Thông báo");
}
}

private void btnXoa_Click(object sender, EventArgs e)


{
if (this.dgDSLop.SelectedRows.Count > 0)
{
dgDSLop.Rows.RemoveAt(this.dgDSLop.SelectedRows[0].Index);
}
else
{
MessageBox.Show("Chọn dòng để xóa", "Thông báo");

Trang 37
}
}

private void btnLuu_Click(object sender, EventArgs e)


{
try
{

daLop.Update(ds, "tblDSLop");// cập nhật cơ sở dữ liệu


MessageBox.Show("Đã lưu!", "Thông báo");
dgDSLop.Refresh();
}
catch
{
return;
}
}

private void btnThoat_Click(object sender, EventArgs e)


{
DialogResult tr;
tr = MessageBox.Show("Bạn có muốn thoát hay không", "Thông báo",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (tr == DialogResult.Yes)
this.Close();
}

private void dgDSLop_Click(object sender, EventArgs e)


{
//click dòng hiển thị tương ứng lên groupbox
DataGridViewRow dr = dgDSLop.SelectedRows[0];
txtMaLop.Text = dr.Cells["MaLop"].Value.ToString();
txtTenLop.Text = dr.Cells["TenLop"].Value.ToString();
nbSiSo.Text = dr.Cells["SiSo"].Value.ToString();
cboTenKhoa.SelectedValue = dr.Cells["MaKhoa"].Value.ToString();

Trang 38
txtMaLop.Enabled = true;
}

//tính tổng sinh viên theo khoa


public void TongSVMoiKhoa()
{
DataTable tb = ds.Tables["tblDSLop"];
string locdulieu = "";
locdulieu = "MaKhoa ='" + cboChonKhoa.SelectedValue + "'";
DataRow[] rows = tb.Select(locdulieu);
////
if (rows.Length > 0)
{
tb = ((DataTable)dgDSLop.DataSource).Clone();
for (int i = 0; i < rows.Length; i++)
{
DataRow row = tb.NewRow();
row[0] = rows[i].ItemArray[0].ToString();
row[1] = rows[i].ItemArray[1].ToString();
row[2] = rows[i].ItemArray[2].ToString();
row[3] = rows[i].ItemArray[3].ToString();
row[4] = rows[i].ItemArray[4].ToString();
tb.Rows.Add(row);
}

dgDSLop.DataSource = tb;
int sum = Convert.ToInt32(tb.Compute("SUM(SiSo)", string.Empty));
lblTongSV.Text ="Tổng SV: "+ sum.ToString();
}
}
public void Hien()
{
btnLuu.Enabled = false;
btnHuy.Enabled = false;
btnSua.Enabled = false;

Trang 39
btnThemmoi.Enabled = false;
btnXoa.Enabled = false;
grLop.Enabled = false;
}
private void btnTinhTong_Click(object sender, EventArgs e)
{
TongSVMoiKhoa();
}
}
}
e./ Form quản lí Khoa
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace QLSV
{
public partial class frmQLKhoa : Form
{
public frmQLKhoa()
{
InitializeComponent();
}
DataSet ds = new DataSet("dsQLKhoa");
SqlDataAdapter daKhoa;

private void frmQLKhoa_Load(object sender, EventArgs e)


{

SqlConnection conn = new SqlConnection();


conn.ConnectionString = (@"Data Source=DESKTOP-G1BJ8OS;Initial
Catalog=QLSV;Integrated Security=True");

// Dữ liệu datagrid Danh sách tên Khoa


string sQueryKhoa = @"select *from Khoa";
daKhoa = new SqlDataAdapter(sQueryKhoa, conn);
daKhoa.Fill(ds, "tblDSKhoa");

Trang 40
dgDSKhoa.DataSource = ds.Tables["tblDSKhoa"];

//đặt tiêu đề tiếng Việt, định độ rộng cho các trường


dgDSKhoa.Columns["MaKhoa"].HeaderText = "Mã Khoa";
dgDSKhoa.Columns["MaKhoa"].Width = 100;
dgDSKhoa.Columns["TenKhoa"].HeaderText = "Tên Khoa";
dgDSKhoa.Columns["TenKhoa"].Width = 180;

// Command Thêm Khoa


string sThemKhoa = @"insert into Khoa values(@MaKhoa, @TenKhoa)";
SqlCommand cmThemKhoa = new SqlCommand(sThemKhoa, conn);
cmThemKhoa.Parameters.Add("@MaKhoa", SqlDbType.NVarChar, 10, "MaKhoa");
cmThemKhoa.Parameters.Add("@TenKhoa", SqlDbType.NVarChar, 40,
"TenKhoa");
daKhoa.InsertCommand = cmThemKhoa;

//Command Xóa Khoa


string sXoaKhoa = @"delete from Khoa where MaKhoa = @MaKhoa";
SqlCommand cmXoaKhoa = new SqlCommand(sXoaKhoa, conn);
cmXoaKhoa.Parameters.Add("@MaKhoa", SqlDbType.NVarChar, 10, "MaKhoa");
daKhoa.DeleteCommand = cmXoaKhoa;

//Command Sửa Khoa


string sSuaKhoa = @"update Khoa set TenKhoa=@TenKhoa where
MaKhoa=@MaKhoa";
SqlCommand cmSuaKhoa = new SqlCommand(sSuaKhoa, conn);
cmSuaKhoa.Parameters.Add("@MaKhoa", SqlDbType.NVarChar, 10, "MaKhoa");
cmSuaKhoa.Parameters.Add("@TenKhoa", SqlDbType.NVarChar, 40, "TenKhoa");
daKhoa.UpdateCommand = cmSuaKhoa;

//sửa thuộc tính cho datagid SelectionMode = FullRowSelect


//du lieu combobox chon khoa(thong ke)
}

private void dgDSKhoa_Click(object sender, EventArgs e)


{
//click dòng hiển thị tương ứng lên groupbox
DataGridViewRow d = dgDSKhoa.SelectedRows[0];
txtMaKhoa.Text = d.Cells["MaKhoa"].Value.ToString();
txtTenKhoa.Text = d.Cells["TenKhoa"].Value.ToString();
txtMaKhoa.Enabled = true;
}
private void btnThemmoi_Click(object sender, EventArgs e)
{
// Kiểm tra dữ liệu hợp lệ (SV tự viết):
// - các trường không bỏ trống
// - makhoa không trùng
// Thêm 1 dòng vào bảng tblDSKhoa
DataRow row = ds.Tables["tblDSKhoa"].NewRow();
DataTable tb = ds.Tables["tblDSKhoa"];

Trang 41
if(txtMaKhoa.Text!="" && txtTenKhoa.Text!="")
{
string locdulieu = "";
locdulieu = "MaKhoa ='" + txtMaKhoa.Text + "'";
DataRow[] rows = tb.Select(locdulieu);
////
if (rows.Length > 0)
{
MessageBox.Show("Mã khoa bị trùng", "Thông báo");
txtMaKhoa.Focus();

}
else
{
row["MaKhoa"] = txtMaKhoa.Text;
row["TenKhoa"] = txtTenKhoa.Text;
ds.Tables["tblDSKhoa"].Rows.Add(row);
}
}
else
{
MessageBox.Show("Vui lòng nhập đầy đủ dữ liệu", "Thông báo");
}

private void btnSua_Click(object sender, EventArgs e)


{
if (this.dgDSKhoa.SelectedRows.Count > 0)
{
DataGridViewRow dr = dgDSKhoa.SelectedRows[0];

dgDSKhoa.BeginEdit(true);

if(txtTenKhoa.Text !="")
{
//ma khoa khong dc sua
txtMaKhoa.Enabled = false;
txtMaKhoa.Text = dr.Cells["MaKhoa"].Value.ToString();
//dr.Cells["MaKhoa"].Value = txtMaKhoa.Text;
dr.Cells["TenKhoa"].Value = txtTenKhoa.Text;
dgDSKhoa.EndEdit();
MessageBox.Show("Đã cập nhật", "Thông báo");

}
else
{
MessageBox.Show("Vui lòng nhập đầy đủ dữ liệu", "Thông báo");
}
}

Trang 42
else
{
MessageBox.Show("Chọn dòng để sửa", "Thông báo");
}
}

private void btnXoa_Click(object sender, EventArgs e)


{
if (this.dgDSKhoa.SelectedRows.Count > 0)
{
dgDSKhoa.Rows.RemoveAt(this.dgDSKhoa.SelectedRows[0].Index);
}
else
{
MessageBox.Show("Chọn dòng để xóa", "Thông báo");
}
}

private void btnLuu_Click(object sender, EventArgs e)


{
try
{

daKhoa.Update(ds, "tblDSKhoa");// cập nhật cơ sở dữ liệu


MessageBox.Show("Đã lưu!", "Thông báo");
dgDSKhoa.Refresh();
}
catch
{
return;
}
}

private void btnThoat_Click(object sender, EventArgs e)


{
DialogResult tr;
tr = MessageBox.Show("Bạn có muốn thoát hay không", "Thông báo",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (tr == DialogResult.Yes)
this.Close();
}

private void btnHuy_Click(object sender, EventArgs e)


{
DialogResult tr;
tr = MessageBox.Show("Xác nhận hủy các thay đổi", "Thông báo",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (tr == DialogResult.OK)
{
ds.Tables["tblDSKhoa"].RejectChanges();

Trang 43
MessageBox.Show("Đã hủy");
dgDSKhoa.Refresh();
}
}
}
}
f./ Form quản lí kết quả
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace QLSV
{
public partial class frmQLKetQua : Form
{
public frmQLKetQua()
{
InitializeComponent();
}
DataSet ds = new DataSet("dsQLKetQua");
SqlDataAdapter daMon;
SqlDataAdapter daSinhVien;
SqlDataAdapter daKetQua;

private void frmQLKetQua_Load(object sender, EventArgs e)


{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = (@"Data Source=DESKTOP-G1BJ8OS;Initial
Catalog=QLSV;Integrated Security=True");

Trang 44
// Dữ liệu combobox tên Mon Hoc
string sQueryMonHoc = @"select * from MonHoc";
daMon = new SqlDataAdapter(sQueryMonHoc, conn);
daMon.Fill(ds, "tblMonHoc");
cboTenMH.DataSource = ds.Tables["tblMonHoc"];
cboTenMH.DisplayMember = "TenMH";
cboTenMH.ValueMember = "MaMH";
// Dữ liệu combobox tên sinh viên
string sQuerySinhVien = @"select * from SinhVien";
daSinhVien= new SqlDataAdapter(sQuerySinhVien, conn);
daSinhVien.Fill(ds, "tblSinhVien");
cboTenSV.DataSource = ds.Tables["tblSinhVien"];
cboTenSV.DisplayMember = "TenSV";
cboTenSV.ValueMember = "MaSV";

// Dữ liệu datagrid Danh sách Kết quả


string sQueryKhoaMon = @"select n.*,c.TenSV,d.TenMH from KetQua n, SinhVien
c, MonHoc d where n.MaSV=c.MaSV and n.MaMH=d.MaMH";
daKetQua = new SqlDataAdapter(sQueryKhoaMon, conn);
daKetQua.Fill(ds, "tblDSKetQua");
dgDSKetQua.DataSource = ds.Tables["tblDSKetQua"];

//đặt tiêu đề tiếng Việt, định độ rộng cho các trường


dgDSKetQua.Columns["TenSV"].HeaderText = "Tên sinh viên";
dgDSKetQua.Columns["TenSV"].Width = 150;
dgDSKetQua.Columns["TenMH"].HeaderText = "Tên môn học";
dgDSKetQua.Columns["TenMH"].Width = 150;
dgDSKetQua.Columns["LanThi"].HeaderText = "Lần thi";
dgDSKetQua.Columns["LanThi"].Width = 50;
dgDSKetQua.Columns["DiemThi"].HeaderText = "Điểm thi";
dgDSKetQua.Columns["DiemThi"].Width = 80;
dgDSKetQua.Columns["MaSV"].Visible = false;
dgDSKetQua.Columns["MaMH"].Visible = false;

// Command Thêm Kết quả

Trang 45
string sThemKetQua = @"insert into KetQua values(@MaSV,
@TenSV,@MaMH,@TenMH,@LanThi,@DiemThi)";
SqlCommand cmThemKetQua = new SqlCommand(sThemKetQua, conn);
cmThemKetQua.Parameters.Add("@MaSV", SqlDbType.NVarChar, 10, "MaSV");
cmThemKetQua.Parameters.Add("@TenSV", SqlDbType.NVarChar, 40, "TenSV");
cmThemKetQua.Parameters.Add("@MaMH", SqlDbType.NVarChar, 10, "MaMH");
cmThemKetQua.Parameters.Add("@TenMH", SqlDbType.NVarChar, 40, "TenMH");
cmThemKetQua.Parameters.Add("@LanThi", SqlDbType.NVarChar, 10, "LanThi");
cmThemKetQua.Parameters.Add("@DiemThi", SqlDbType.NVarChar, 40,
"DiemThi");
daKetQua.InsertCommand = cmThemKetQua;

//Command Xóa Kết quả


string sXoaKetQua = @"delete from KetQua where MaSV = @MaKhoa and
MaMH=@MaMH and LanThi=@LanThi";
SqlCommand cmXoaKetQua = new SqlCommand(sXoaKetQua, conn);
cmXoaKetQua.Parameters.Add("@MaSV", SqlDbType.NVarChar, 10, "MaSV");
cmXoaKetQua.Parameters.Add("@MaMH", SqlDbType.NVarChar, 10, "MaMH");
cmXoaKetQua.Parameters.Add("@LanThi", SqlDbType.NVarChar, 10, "LanThi");
daKetQua.DeleteCommand = cmXoaKetQua;

//Command Sửa kết quả


string sSuaKetQua = @"update KetQua set TenSV=@TenSV where
MaKhoa=@MaKhoa";
SqlCommand cmSuaKetQua = new SqlCommand(sSuaKetQua, conn);
cmSuaKetQua.Parameters.Add("@MaSV", SqlDbType.NVarChar, 10, "MaSV");
cmSuaKetQua.Parameters.Add("@TenSV", SqlDbType.NVarChar, 40, "TenSV");
cmSuaKetQua.Parameters.Add("@MaMH", SqlDbType.NVarChar, 10, "MaMH");
cmSuaKetQua.Parameters.Add("@TenMH", SqlDbType.NVarChar, 40, "TenMH");
cmSuaKetQua.Parameters.Add("@LanThi", SqlDbType.NVarChar, 10, "LanThi");
cmSuaKetQua.Parameters.Add("@DiemThi", SqlDbType.NVarChar, 90, "DiemThi");
daKetQua.UpdateCommand = cmSuaKetQua;
//sửa thuộc tính cho datagid SelectionMode = FullRowSelect
}

private void dgDSKetQua_Click(object sender, EventArgs e)

Trang 46
{
//click dòng hiển thị tương ứng lên groupbox
DataGridViewRow dr = dgDSKetQua.SelectedRows[0];
cboTenSV.SelectedValue = dr.Cells["MaSV"].Value.ToString();
cboTenSV.Text = dr.Cells["TenSV"].Value.ToString();
cboTenMH.SelectedValue = dr.Cells["MaMH"].Value.ToString();
cboTenMH.Text = dr.Cells["TenMH"].Value.ToString();
txtDiemThi.Text = dr.Cells["DiemThi"].Value.ToString();
cboLanThi.Text = dr.Cells["LanThi"].Value.ToString();
cboTenSV.Enabled = true;
cboTenMH.Enabled = true;
}

private void btnThemmoi_Click(object sender, EventArgs e)


{
// Kiểm tra dữ liệu hợp lệ
// - các trường không bỏ trống
// - malanthi không trùng
// Thêm 1 dòng vào bảng tblDSKetQua
DataRow row = ds.Tables["tblDSKetQua"].NewRow();
DataTable tb = ds.Tables["tblDSKetQua"];
if (cboTenSV.Text!="" && cboTenMH.Text!="" && txtDiemThi.Text!="" &&
cboLanThi.Text!="")
{
string locdulieu = "";
locdulieu = "MaSV ='" + cboTenSV.SelectedValue + "' and
MamH='"+cboTenMH.SelectedValue+"' and LanThi='"+cboLanThi.Text+"'";

DataRow[] rows = tb.Select(locdulieu);


//kiem tra trung
if (rows.Length > 0)
{
MessageBox.Show("Tên sinh viên, môn học và lần thi bị trùng", "Thông báo");
}
else
{

Trang 47
var item1 = this.cboTenSV.GetItemText(this.cboTenSV.SelectedItem);///lấy item
trong cbb
string test1;
test1 = cboTenSV.Text;
if (test1 != item1 || test1 == "")
{
MessageBox.Show("Hãy chọn tên sinh viên có sẵn!!", "Thông Báo");
cboTenSV.ResetText();
}
else
{
row["MaSV"] = cboTenSV.SelectedValue;
row["TenSV"] = cboTenSV.Text;
var item2 = this.cboTenMH.GetItemText(this.cboTenMH.SelectedItem);///lấy
item trong cbb
string test2;
test2 = cboTenMH.Text;
if (test2 != item2 || test2 == "")
{
MessageBox.Show("Hãy chọn tên môn học có sẵn!!", "Thông Báo");
cboTenMH.ResetText();
}
else
{

row["MaMH"] = cboTenMH.SelectedValue;
row["TenMH"] = cboTenMH.Text;
row["LanThi"] = cboLanThi.Text;
row["DiemThi"] = txtDiemThi.Text;
ds.Tables["tblDSKetQua"].Rows.Add(row);
ClearField();
}
}

Trang 48
}
else
{
MessageBox.Show("Vui lòng nhập đầy đủ dữ liệu", "Thông báo");
}
}
public void ClearField()
{
cboTenSV.ResetText();
cboTenMH.ResetText();
cboLanThi.ResetText();
txtDiemThi.ResetText();
}
private void btnSua_Click(object sender, EventArgs e)
{
if (this.dgDSKetQua.SelectedRows.Count > 0)
{
DataGridViewRow dr = dgDSKetQua.SelectedRows[0];
dgDSKetQua.BeginEdit(true);
cboTenMH.Enabled = false;
cboTenSV.Enabled = false;
cboTenSV.SelectedValue=dr.Cells["MaSV"].Value.ToString();
cboTenSV.Text=dr.Cells["TenSV"].Value.ToString();
cboTenMH.SelectedValue=dr.Cells["MaMH"].Value.ToString();
cboTenMH.Text=dr.Cells["TenMH"].Value.ToString();
//masv va ma mh ko dc sua
dr.Cells["DiemThi"].Value = txtDiemThi.Text;
dr.Cells["LanThi"].Value = cboLanThi.Text;
dgDSKetQua.EndEdit();
MessageBox.Show("Đã cập nhật", "Thông báo");
}
else
{
MessageBox.Show("Chọn dòng để sửa", "Thông báo");
}

Trang 49
}

private void btnXoa_Click(object sender, EventArgs e)


{
if (this.dgDSKetQua.SelectedRows.Count > 0)
{
dgDSKetQua.Rows.RemoveAt(this.dgDSKetQua.SelectedRows[0].Index);
}
else
{
MessageBox.Show("Chọn dòng để xóa", "Thông báo");
}
}

private void btnLuu_Click(object sender, EventArgs e)


{
try
{

daKetQua.Update(ds, "tblDSKetQua");// cập nhật cơ sở dữ liệu


MessageBox.Show("Đã lưu!", "Thông báo");
dgDSKetQua.Refresh();
}
catch
{
return;
}
}

private void btnThoat_Click(object sender, EventArgs e)


{
DialogResult tr;
tr = MessageBox.Show("Bạn có muốn thoát hay không", "Thông báo",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (tr == DialogResult.Yes)

Trang 50
this.Close();
}

private void btnHuy_Click(object sender, EventArgs e)


{
DialogResult tr;
tr = MessageBox.Show("Xác nhận hủy các thay đổi", "Thông báo",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (tr == DialogResult.OK)
{
ds.Tables["tblDSKetQua"].RejectChanges();
MessageBox.Show("Đã hủy");
dgDSKetQua.Refresh();
}
}
public void CheckButton()
{
btnThemmoi.Enabled = false;
btnSua.Enabled = false;
btnXoa.Enabled = false;
btnLuu.Enabled = false;
btnHuy.Enabled = false;
}
public void Hien()
{
grQLKQ.Enabled = false;
CheckButton();

}
private void btnHienKQ_Click(object sender, EventArgs e)
{
string str1;
string str = txtNhapMaSV.Text;
int maxlength = 9;
int a = 0;

Trang 51
DataTable tb = ds.Tables["tblDSKetQua"];
if (str.Length > maxlength || str.Length < maxlength)
{
MessageBox.Show("MSSV bao gồm 9 kí tự");
txtNhapMaSV.ResetText();
txtNhapMaSV.Focus();
}
else
{
for (int i = 0; i < str.Length; i++)
{
str1 = str.Substring(i, 1);
if (str1 == " ")
a++;
}
if (a != 0)
{
MessageBox.Show("MSSV chỉ bao gồm chữ và số!!!");
txtNhapMaSV.ResetText();
txtNhapMaSV.Focus();
}
else
{
string locdulieu = "MaSV ='" + str + "'";
DataRow[] rows = tb.Select(locdulieu);
tb = ((DataTable)dgDSKetQua.DataSource).Clone();
for (int i = 0; i < rows.Length; i++)
{
DataRow row = tb.NewRow();
row[0] = rows[i].ItemArray[0].ToString();
row[1] = rows[i].ItemArray[1].ToString();
row[2] = rows[i].ItemArray[2].ToString();
row[3] = rows[i].ItemArray[3].ToString();
row[4] = rows[i].ItemArray[4].ToString();
row[5] = rows[i].ItemArray[5].ToString();

Trang 52
tb.Rows.Add(row);
}
dgDSKetQua.DataSource = tb;
if (rows.Length < 1)
MessageBox.Show("Không tìm thấy");
}
}
}
}
}
f./ Form quản lí khoa- môn học
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace QLSV
{
public partial class frmQLKhoaMon : Form
{
public frmQLKhoaMon()
{
InitializeComponent();
}
DataSet ds = new DataSet("dsQLKhoaMon");
private SqlDataAdapter daKhoaMon;
private SqlDataAdapter daKhoa;
private SqlDataAdapter daMonHoc;

Trang 53
phuongthucsp pt = new phuongthucsp();
private void frmQLKhoaMon_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = (@"Data Source=DESKTOP-G1BJ8OS;Initial
Catalog=QLSV;Integrated Security=True");

// Dữ liệu combobox tên Khoa


string sQueryKhoa = @"select * from Khoa";
daKhoa = new SqlDataAdapter(sQueryKhoa, conn);
daKhoa.Fill(ds, "tblKhoa");
cboTenKhoa.DataSource = ds.Tables["tblKhoa"];
cboTenKhoa.DisplayMember = "TenKhoa";
cboTenKhoa.ValueMember = "MaKhoa";
// Dữ liệu combobox tên Môn học
string sQueryMonHoc = @"select * from MonHoc";
daMonHoc = new SqlDataAdapter(sQueryMonHoc, conn);
daMonHoc.Fill(ds, "tblMonHoc");
cboTenMon.DataSource = ds.Tables["tblMonHoc"];
cboTenMon.DisplayMember = "TenMH";
cboTenMon.ValueMember = "MaMH";

// Dữ liệu datagrid Danh sách tên Khoa- Mon Hoc


string sQueryKhoaMon = @"select n.*,c.TenKhoa,d.TenMH from KhoaMon n, Khoa
c, MonHoc d where n.MaKhoa=c.MaKhoa and n.MaMH=d.MaMH;";
daKhoaMon = new SqlDataAdapter(sQueryKhoaMon, conn);
daKhoaMon.Fill(ds, "tblDSKhoaMon");
dgDSKhoaMon.DataSource = ds.Tables["tblDSKhoaMon"];

//đặt tiêu đề tiếng Việt, định độ rộng cho các trường


dgDSKhoaMon.Columns["MaKhoa"].Visible = false;
dgDSKhoaMon.Columns["TenKhoa"].HeaderText = "Tên khoa";
dgDSKhoaMon.Columns["TenKhoa"].Width = 150;
dgDSKhoaMon.Columns["MaMH"].Visible = false;
dgDSKhoaMon.Columns["TenMH"].HeaderText = "Tên môn học";
dgDSKhoaMon.Columns["TenMH"].Width = 150;

Trang 54
dgDSKhoaMon.Columns["SoTinChi"].HeaderText = "Số tín chỉ";
dgDSKhoaMon.Columns["SoTinChi"].Width = 80;
dgDSKhoaMon.Columns["SoTiet"].HeaderText = "Số tiết";
dgDSKhoaMon.Columns["SoTiet"].Width = 50;

// Command Thêm Khoa-Môn học


string sThemKhoaMon = @"insert into KhoaMon values(@MaKhoa,
@TenKhoa,@MaMH,@TenMH,@SoTinChi,@SoTiet)";
SqlCommand cmThemKhoaMon = new SqlCommand(sThemKhoaMon, conn);
cmThemKhoaMon.Parameters.Add("@MaKhoa", SqlDbType.NVarChar, 10,
"MaKhoa");
cmThemKhoaMon.Parameters.Add("@TenKhoa", SqlDbType.NVarChar, 40,
"TenKhoa");
cmThemKhoaMon.Parameters.Add("@MaMH", SqlDbType.NVarChar, 10,
"MaMH");
cmThemKhoaMon.Parameters.Add("@TenMH", SqlDbType.NVarChar, 40,
"TenMH");
cmThemKhoaMon.Parameters.Add("@SoTinChi", SqlDbType.NVarChar, 10,
"SoTinChi");
cmThemKhoaMon.Parameters.Add("@SoTiet", SqlDbType.NVarChar, 40, "SoTiet");
daKhoa.InsertCommand = cmThemKhoaMon;

//Command Xóa
string sXoaKhoaMon = @"delete from Khoa where MaKhoa = @MaKhoa and
MaMH=@MaMH";
SqlCommand cmXoaKhoaMon = new SqlCommand(sXoaKhoaMon, conn);
cmXoaKhoaMon.Parameters.Add("@MaKhoa", SqlDbType.NVarChar, 10,
"MaKhoa");
cmXoaKhoaMon.Parameters.Add("@MaMH", SqlDbType.NVarChar, 10, "MaMH");
daKhoa.DeleteCommand = cmXoaKhoaMon;

//Command Sửa
string sSuaKhoaMon = @"update Khoa set TenKhoa=@TenKhoa where
MaKhoa=@MaKhoa";
SqlCommand cmSuaKhoaMon = new SqlCommand(sSuaKhoaMon, conn);
cmSuaKhoaMon.Parameters.Add("@MaKhoa", SqlDbType.NVarChar, 10,
"MaKhoa");

Trang 55
cmSuaKhoaMon.Parameters.Add("@TenKhoa", SqlDbType.NVarChar, 40,
"TenKhoa");
cmSuaKhoaMon.Parameters.Add("@MaMH", SqlDbType.NVarChar, 10, "MaMH");
cmSuaKhoaMon.Parameters.Add("@TenMH", SqlDbType.NVarChar, 40,
"TenMH");
cmSuaKhoaMon.Parameters.Add("@SoTinChi", SqlDbType.NVarChar, 10,
"SoTinChi");
cmSuaKhoaMon.Parameters.Add("@SoTiet", SqlDbType.NVarChar, 90, "SoTiet");
daKhoa.UpdateCommand = cmSuaKhoaMon;
//sửa thuộc tính cho datagid SelectionMode = FullRowSelect

}
private void btnSua_Click(object sender, EventArgs e)
{
if (this.dgDSKhoaMon.SelectedRows.Count > 0)
{

DataGridViewRow dr = dgDSKhoaMon.SelectedRows[0];
if (txtSoTiet.Text != "" && txtSoTinChi.Text != "")
{
dgDSKhoaMon.BeginEdit(true);
//ten khoa va ten mon ko dc sua
cboTenKhoa.Enabled = false;
cboTenMon.Enabled = false;
cboTenKhoa.SelectedValue = dr.Cells["MaKhoa"].Value.ToString();
cboTenKhoa.Text = dr.Cells["TenKhoa"].Value.ToString();
cboTenMon.SelectedValue = dr.Cells["MaMH"].Value.ToString();
cboTenMon.Text = dr.Cells["TenMH"].Value.ToString();
if (pt.IsNumber(txtSoTinChi.Text) == true && pt.IsNumber(txtSoTinChi.Text)
== true)
{
dr.Cells["SoTinChi"].Value = txtSoTinChi.Text;
dr.Cells["SoTiet"].Value = txtSoTiet.Text;
dgDSKhoaMon.EndEdit();
MessageBox.Show("Tên môn và tên khoa không được sửa");
MessageBox.Show("Đã cập nhật", "Thông báo");

Trang 56
}
else
{
MessageBox.Show("Vui lòng nhập số!!", "Thông Báo");
}
}
else
{
MessageBox.Show("Các trường không được bỏ trống");
}
}
else
{
MessageBox.Show("Chọn dòng để sửa", "Thông báo");
}
}

private void btnXoa_Click(object sender, EventArgs e)


{
if (this.dgDSKhoaMon.SelectedRows.Count > 0)
{
dgDSKhoaMon.Rows.RemoveAt(this.dgDSKhoaMon.SelectedRows[0].Index);
}
else
{
MessageBox.Show("Chọn dòng để xóa", "Thông báo");
}
}

private void btnLuu_Click(object sender, EventArgs e)


{
try
{

daKhoaMon.Update(ds, "tblDSKhoaMon");// cập nhật cơ sở dữ liệu

Trang 57
MessageBox.Show("Đã lưu!", "Thông báo");
dgDSKhoaMon.Refresh();
}
catch(Exception)
{
MessageBox.Show("Lỗi truy vấn dữ liệu. Vui lòng kiểm tra lại thông tin","Thông
báo");
}
}

private void btnThoat_Click(object sender, EventArgs e)


{
DialogResult tr;
tr = MessageBox.Show("Bạn có muốn thoát hay không", "Thông báo",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (tr == DialogResult.Yes)
this.Close();
}

private void dgDSKhoaMon_Click(object sender, EventArgs e)


{
//click dòng hiển thị tương ứng lên groupbox
DataGridViewRow dr = dgDSKhoaMon.SelectedRows[0];
cboTenKhoa.SelectedValue = dr.Cells["MaKhoa"].Value.ToString();
cboTenKhoa.Text = dr.Cells["TenKhoa"].Value.ToString();
cboTenMon.SelectedValue = dr.Cells["MaMH"].Value.ToString();
cboTenMon.Text = dr.Cells["TenMH"].Value.ToString();
txtSoTinChi.Text = dr.Cells["SoTinChi"].Value.ToString();
txtSoTiet.Text = dr.Cells["SoTiet"].Value.ToString();
cboTenKhoa.Enabled = true;
cboTenMon.Enabled = true;
}

private void btnHuy_Click(object sender, EventArgs e)


{

Trang 58
DialogResult tr;
tr = MessageBox.Show("Xác nhận hủy các thay đổi", "Thông báo",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (tr == DialogResult.OK)
{
ds.Tables["tblDSKhoaMon"].RejectChanges();
MessageBox.Show("Đã hủy");
dgDSKhoaMon.Refresh();
}
}

private void btnThemmoi_Click(object sender, EventArgs e)


{
DataRow row = ds.Tables["tblDSKhoaMon"].NewRow();
if (cboTenKhoa.Text != "" && cboTenMon.Text != "" && txtSoTiet.Text != "" &&
txtSoTinChi.Text != "")
{
DataTable tb = ds.Tables["tblDSKhoaMon"];
string locdulieu = "MaKhoa='" + cboTenKhoa.SelectedValue + "' and MaMH='" +
cboTenMon.SelectedValue + "'";
DataRow[] rows = tb.Select(locdulieu);
if (rows.Length > 0)
{
MessageBox.Show("Mã lớp, mã môn bị trùng", "Thông báo");
}
else
{
var item = this.cboTenKhoa.GetItemText(this.cboTenKhoa.SelectedItem);///lấy
item trong cbb
string test;
test = cboTenKhoa.Text;
if (test != item || test == "")
{
MessageBox.Show("Hãy chọn tên khoa có sẵn!!", "Thông Báo");
cboTenKhoa.ResetText();
}

Trang 59
else
{
row["MaKhoa"] = cboTenKhoa.SelectedValue;
row["TenKhoa"] = cboTenKhoa.Text;
var item1 =
this.cboTenMon.GetItemText(this.cboTenMon.SelectedItem);///lấy item trong cbb
string test1;
test1 = cboTenMon.Text;
if (test1 != item1 || test1 == "")
{
MessageBox.Show("Hãy chọn tên môn học có sẵn!!", "Thông Báo");
cboTenMon.ResetText();
}
else
{
row["TenMH"] = cboTenMon.Text;
row["MaMH"] = cboTenMon.SelectedValue;
if (pt.IsNumber(txtSoTinChi.Text) == true &&
pt.IsNumber(txtSoTinChi.Text)==true)
{
row["SoTinChi"] = txtSoTinChi.Text;
row["SoTiet"] = txtSoTiet.Text;
ds.Tables["tblDSKhoaMon"].Rows.Add(row);
}
else
{
MessageBox.Show("Vui lòng nhập số!!", "Thông Báo");
}
}
}
}
}
else
{
MessageBox.Show("Các trường không được để trông", "Thông báo");
}

Trang 60
}
}
}

IV./ GIAO DIỆN CHƯƠNG TRÌNH


1./ Giao diện
a./ Form Đăng nhập

Mô tả chức năng:
-Khi người dùng thực hiện đăng nhập tên và mật khẩu đúng với quyền của mình rồi
click vào button thì sẽ xuất hiện thông báo báo cho người dùng biết đăng
nhập thành công.

- Nếu người dùng nhập sai tên đăng nhập hay mật khẩu thì sẽ xuất hiện thông báo báo
người dùng nhập sai và yêu cầu nhập lại.

- Nếu muốn thoát thì chỉ cần click vào button để xác nhận và thoát khỏi
chương trình.
b./ Form Main(giao diện chính)

Trang 61
Mô tả chức năng:
- Khi đăng nhập thành công, form main(giao diện chính) xuất hiện tùy theo quyền của
mỗi user mà sẽ có thể thực hiện các chức năng khác nhau của chương trình.
- Form gồm các chức năng chính sau:
+ Menu Hệ thống: đăng nhập, đăng xuất, thoát khỏi chương trình. Khi người dùng
click vào menu đăng xuất thì sẽ thoát khỏi form main và trở về form đăng nhập ban
đầu. Khi click menu Thoát thì sẽ xuất hiện thông báo xác nhận thoát chương trình hay
không.

+ Menu danh mục: quản lí khoa, lớp, môn học. Khi click vào từng menu sẽ lập tức
xuất hiện form tương ứng với từng menu.

+ Menu quản lí: quản lí sinh viên, kết quả, khoa- môn học (tương tự menu danh mục).

Trang 62
+Menu tìm kiếm: tìm kiếm thông tin sinh viên theo mã sinh viên và tìm kiếm kết quả
thi.

+Menu thống kê: thống kê danh sách sinh viên theo khoa

+Menu trợ giúp: một số quy tắc khi nhập dữ liệu vào hệ thống.

Ngoài ra form còn có thêm 6 button để người dùng tiện sử dụng như: quản lí sinh viên,
lớp, khoa, môn học, khoa-môn, kết quả. Chức năng thực hiện tương tự như menu.

c./Form quản lí Sinh viên

Trang 63
Mô tả:
- Khi người dùng click vào menuitem hay button quản lí sinh viên thì sẽ hiện lên form
như hình.
- Form gồm có các chức năng thêm, sửa(Mã sinh viên không được phép sửa), xóa, lưu,
hủy dữ liệu và thoát form.
-Ngoài ra, form còn có chức năng tìm kiếm sinh viên theo mã sinh viên được tích hợp
ngay trong form để người dùng tiện kiểm tra thông tin của từng sinh viên.
d./ Form quản lí Khoa

Trang 64
Mô tả:
- Khi người dùng click vào menuitem danh mục khoa hay button quản lí khoa thì sẽ
hiện lên form như hình.
- Form gồm có các chức năng thêm, sửa(Mã khoa không được phép sửa), xóa, lưu, hủy
dữ liệu và thoát form.
e./ Form quản lí Lớp

Trang 65
Mô tả:
- Khi người dùng click vào menuitem danh mục lớp hay button quản lí lớp học thì sẽ
hiện lên form như hình.
- Form gồm có các chức năng thêm, sửa(Mã lớp không được phép sửa), xóa, lưu, hủy
dữ liệu và thoát form.
-Ngoài ra, form còn có chức năng thống kê sinh viên theo khoa được tích hợp ngay
trong form để người dùng tiện thống kê tổng số sinh viên học tập tại khoa.
f./ Form Khoa-Môn học

Trang 66
Mô tả:
- Khi người dùng click vào menuitem hay button quản lí khoa-môn học thì sẽ hiện lên
form như hình.
- Form gồm có các chức năng thêm, sửa(Tên khoa và tên môn học không được phép
sửa), xóa, lưu, hủy dữ liệu và thoát form.
g./ Quản lí môn học

Trang 67
Mô tả:
- Khi người dùng click vào menuitem danh mục môn học hay button quản lí môn học
thì sẽ hiện lên form như hình.
- Form gồm có các chức năng thêm, sửa(Mã môn học không được phép sửa), xóa, lưu,
hủy dữ liệu và thoát form.
h./ Form Kết quả

Trang 68
Mô tả:
- Khi người dùng click vào menuitem hay button quản lí kết quả thì sẽ hiện lên form
như hình.
- Form gồm có các chức năng thêm, sửa(Tên sinh viên và tên môn không được phép
sửa), xóa, lưu, hủy dữ liệu và thoát form.
-Ngoài ra, form còn có chức năng tìm kiếm kết quả thi dựa vào việc nhập mã sinh viên
để tìm kiếm, được tích hợp ngay trong form để người dùng tiện tìm kiếm kết quả của
từng sinh viên.

2./ Các chức năng chính


a./ Các yêu cầu chức năng
- Yêu cầu lưu trữ
 Lưu trữ thông tin người dùng
 Lưu trữ thông tin sinh viên
 Lưu trữ thông tin khoa
 Lưu trữ thông tin lớp
 Lưu trữ thông tin môn học
- Yêu cầu nghiệp vụ
 Quản lí người dùng
 Quản lí sinh viên
 Quản lí khoa

Trang 69
 Quản lí lớp
 Quản lí môn học
 Quản lí kết quả
 Quản lí khoa-môn học
- Yêu cầu báo biểu
 Thống kê sinh viên
b./ Chi tiết chức năng
- Khi người dùng nhập các thông tin trong form ,tất cả các trường đều không được để
trống, nếu có sẽ thông báo cho người dùng biết.

- Khi click vào nút chương trình sẽ kiểm tra xem mã sinh viên có trùng
với cơ sở dữ liệu không? Nếu trùng sẽ có thông báo “Mã bị trùng”. Ngược lại ”Thêm
mới thành công”.

- Khi người dùng click vào nút . Trước khi xóa 1 trường nào đó mà người
dùng chưa click chọn thì sẽ có thông báo “chọn dòng để xóa”. Ngược lai “xóa thành
công”.

- Khi người dùng click vào nút . Nếu như thông tin được người dùng thay
đổi(ngoại trừ mã không được phép sửa) thì sẽ được cập nhật.

- Khi người dùng click vào nút mọi sự thay đổi thêm, sửa, xóa sẽ được
cập nhật vào CSDL.

- Khi người dùng click vào nút , mọi thay đổi sẽ trở về dữ liệu ban đầu
của CSDL trước khi bấm nút lưu.

- Khi người dùng click vào nút thì sẽ xuất hiện thông báo xác nhận xem
người dùng có muốn thoát form hay không, nếu có thì click “OK” form sẽ đóng và trở
lại giao diện chính của chương trình.
- Chức năng tìm kiếm:
+ Khi người dùng click vào menu item “tìm kiếm thông tin sinh viên theo mã sinh
viên”:

Form QLSinhVien xuất hiện. Tại ô tìm kiếm người dùng nhập vào mã sinh viên sau đó
click nút tìm kiếm hệ thống sẽ lọc ra thông tin của sinh viên nếu người dùng
nhập đúng mã sinh viên. Ngược lại sẽ thông báo “không tìm thấy”.

Trang 70
+ Khi người dùng click vào menu tìm kiếm kết quả thi.

Form QlKetQua xuất hiện. Tại ô tìm kiếm người dùng nhập vào mã sinh viên sau đó
click nút tìm kiếm hệ thống sẽ lọc ra kết quả thi của sinh viên nếu người dùng
nhập đúng mã sinh viên. Ngược lại sẽ thông báo “không tìm thấy”.

Trang 71
-Chức năng thống kê:
+ Khi người dùng click vào menu Thống kê danh sách SV khoa

Form QLLopHoc xuất hiện. Ở đây người dùng sẽ chọn khoa ở combobox nếu muốn

tính tổng số sinh viên thuộc khoa đó. Sau đó click nút sẽ hiện kết quả ở
label “Tổng SV:” và trả về danh sách lớp thuộc khoa đã chọn.

Trang 72
V./ CHƯƠNG TRÌNH ĐÃ LÀM ĐƯỢC
1./ Khả năng nhập, xuất
- Có thể nhập một số lượng lớn thông tin.
- Xử lí thêm, xóa, sửa, lưu, hủy dữ liệu cách đơn giản, nhanh chóng đảm bảo an toàn
và đồng bộ.

2./ Khả năng lưu trữ


- Có khả năng lưu trữ lượng lớn thông tin.
- Tránh bị thất lạc

3./ Khả năng tìm kiếm, thống kê


- Tìm kiếm thông tin, kết quả, thống kê danh sách nhanh chóng.

4./ Phân quyền người sử dụng


- Tùy theo quyền mà người sử dụng sẽ có thể thực hiện các chức năng khác nhau

VI./ HƯỚNG PHÁT TRIỂN


- Có thể quản lí thông tin sinh viên, khoa, lớp, ngành, hệ đào tạo, niên khóa... chi tiết
và đầy đủ hơn nếu phát triển thêm các dữ liệu đó trong database.
- Chương trình có thể thêm nhiều chức năng khác như quản lí ngành, quản lí giảng
viên, quản lí điểm, tìm kiếm,...

Trang 73
VII./ TÀI LIỆU THAM KHẢO
[1]google, https://laptrinhvb.net/bai-viet/devexpress/---Csharp----Huong-dan-tinh-toan-(sum,-
average,-count,-min,-max)-tren-datatable-su-dung-DataTable-Compute-function-va-
Linq/3facc22040fd8ce6.html
[2] http://cnttthanhdokhoa6nhom12.blogspot.com/2015/10/bai-tap-lon-csdl-quan-ly-iem.html
[3] http://gockinhnghiem.com/2011/03/18/dung-ham-select-de-loc-du-lieu-tu-datatable-trong-
csharp/

Trang 74

You might also like