Professional Documents
Culture Documents
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
An Giang, 2020
PHÂN CÔNG CÔNG VIỆC
Bùi Nhật Trường Linh DH19TH1 DTH185460 Thiết kế code, sửa 100%
lỗi
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.
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
Trang 7
- Bảng môn học
- Bảng Khoa
Trang 8
- Bảng Lớp
SiSo Int Sỉ số
Trang 9
- Bảng người dùng
namespace QLSV
{
public partial class frmDangNhap : Form
{
public frmDangNhap()
{
InitializeComponent();
}
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");
}
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();
}
//menuBarToolStripMenuItem.Checked = false;
}
Trang 12
private void btnQLKhoa_Click(object sender, EventArgs e)
{
frmQLKhoa qlsv = new frmQLKhoa();
qlsv.ShowDialog();
}
Trang 13
{
frmQLLop qll = new frmQLLop();
qll.ShowDialog();
}
Trang 14
frmQLKetQua kq = new frmQLKetQua();
kq.Hien();
kq.ShowDialog();
}
}
}
namespace QLSV
{
public partial class frmQLMonHoc : Form
{
public frmQLMonHoc()
{
InitializeComponent();
}
DataSet ds = new DataSet("dsQLMonHoc");
SqlDataAdapter daMonHoc;
Trang 15
dgDSMonHoc.Columns["TenMH"].Width = 180;
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");
}
}
Trang 17
txtTenMH.Text = d.Cells["TenMH"].Value.ToString();
txtMaMH.Enabled = true;
}
}
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();
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;
Trang 21
//Command Xóa sinh viên
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;
}
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");
}
}
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();
}
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;
}
}
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";
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;
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!!!");
}
}
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");
}
}
Trang 37
}
}
Trang 38
txtMaLop.Enabled = true;
}
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;
Trang 40
dgDSKhoa.DataSource = 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");
}
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");
}
}
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;
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";
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;
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;
}
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
}
Trang 50
this.Close();
}
}
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");
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 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");
}
}
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");
}
}
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();
}
}
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
}
}
}
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.
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.
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ộ.
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