Quản lý sinh viên bằng winform c#

     

Trong nội dung bài viết này mình sẽ hướng dẫn các bạn xây dựng 1 phần mềm thống trị điểm dễ dàng và đơn giản với C# Winforms và SQL Server. Chưa đến các thao tác làm việc như hiển thị điểm, cập nhật điểm cùng xóa bảng điểm.

Bạn đang xem: Quản lý sinh viên bằng winform c#

*


*

Qua bài bác này bạn sẽ biết cách liên kết CSDL, cách sử dụng những form controls cũng như các đối tượng ADO .NET dùng làm truy vấn và xử lý tài liệu trong C#.

1. Yêu ước của phần mềm làm chủ điểm vào C# Winforms

Để có thể xây dựng 1 phần mềm thống trị điểm hoàn chỉnh yên cầu rất nhiều yếu tố cùng kỹ thuật với những ràng buộc chặc chẽ. Ở đây mình chỉ hướng dẫn với 1 số tính năng cơ phiên bản nhưng rất quan trọng đặc biệt như sau:

Hiển thị list mã số học viên (MaHS) vào ComboBox "Mã số học tập sinh" để người dùng lựa chọn. Danh sách này được lấy từ bảng "Student" trong database StudentDB.Hiển thị list môn học tập vào ComboBox "Môn học" để người dùng lựa chọn. List này được rước từ bảng "MonHoc" trong database StudentDB.Hiển thị các thông tin tương ứng với các TextBox cùng ComboBox khi người dùng chọn vào bảng dữ liệu (sử dụng sự khiếu nại CellClick).Hiển thị list bảng điểm sinh hoạt DataGridView với các trường tương ứng như: STT, Mã số, họ Tên, Môn Học, Điểm.Khi người dùng chọn vào button "Cập nhật điểm" sẽ có được hai trường hợp xảy ra. Nếu mã số học viên (MaHS) với mã môn học tập (MaMH) vẫn tồn tại trong bảng "Diem" thì update điểm. Ngược lại nếu như không tồn tại 1 trong những hai thì thêm mới một hàng dữ liệu trong bảng "Diem".Khi người tiêu dùng chọn vào button "Xóa" thì xóa hàng tài liệu được lựa chọn khỏi database.Có điều kiện ràng buộc khi nhập dữ liệu như: Không nhằm trống dữ liệu hoặc điểm phải >=0 và Sau mỗi thao tác làm việc đều update lại bảng tài liệu DataGridView.

2. Xây dựng hình ảnh form cai quản điểm vào C# Winforms

Chúng ta sẽ bắt đầu thiết kế hình ảnh form quản lý điểm theo yêu cầu ở trên. Cụ thể với các control như sau:

Bài viết này được đăng tại

Hai ComboBox hiển thị mã học sinh và môn học cho những người dùng chọn.Một TextBox để nhập điểm cùng hiển thị điểm của học tập sinh.Button "Cập nhật điểm", "Thoát", "Reset", "Xóa" cùng với các tác dụng tương ứng.DataGridView nhằm hiển thị list điểm với những Columns: STT, Mã số, bọn họ tên, Môn học, Điểm.

3. Chế tạo ra database cùng Stored Procedure trong SQL Server


Trong ứng dụng cai quản điểm này mình yêu cầu 3 bảng dữ liệu: "Student", "MonHoc", "Diem" với những trường dữ liệu tương ứng. Các bạn cũng có thể tự tạo new database hoặc sử dụng đoạn code sau đây để tạo nên database tiếp đến thêm những trường dữ liệu.


Bây giờ sẽ tạo các Stored Procedure vào SQL server với tính năng như yêu thương cầu.

Proc lấy danh sách học sinh và danh sách môn học


create proc .asbegin select * from Studentend---------------------------------create proc .asbeginselect * from MonHocend

create proc .asbeginselect MaHS,Name,TenMH,Diem from Student, Diem, MonHoc where Student.Id = Diem.MaHS & MonHoc.MaMH = Diem.MaMHend

4. Xử lý các sự khiếu nại trên form

Ở phần này bọn chúng ta ban đầu xử lý những sự kiện theo yêu ước đã đề ra lúc đầu. Rõ ràng sẽ xử lý lần lượt những yêu ước như sau.

Hiển thị danh sách mã học viên vào ComboBox "Mã số học tập sinh".

Khi bắt đầu chương trình thì ComboBox "Mã số học sinh" đang hiển thị danh sách mã số của các học viên có trong bảng "Student". Ta sẽ call proc "SP_LayDSHS" tự SQL Server để mang dữ liệu tự bảng "Student".

Sau đó thực hiện DataTable nhằm đổ tài liệu vào ComboBox trải qua thuộc tính DataSource. Để hiển thị được mã học viên trong ComboBox ta sử dụng thuộc tính DisplayMember với cái giá trị nhưng "Id", tức là mã số học sinh.

Bây giờ bọn họ muốn hiển thị ngay khi chương trình khởi chạy thì hotline hàm này sinh hoạt sự khiếu nại Form_Load.


private void LayDSHS() SqlConnection conn = new SqlConnection(); conn.ConnectionString = ConfigurationManager.ConnectionStrings<"conStr">.ConnectionString; SqlCommand cmd = new SqlCommand("SP_LayDSHS", conn); cmd.CommandType = CommandType.StoredProcedure; DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter(cmd); da.SelectCommand.Connection = conn; conn.Open(); da.Fill(dt); cboMaHS.DataSource = dt; cboMaHS.DisplayMember = "Id"; cboMaHS.Text = ""; conn.Close(); private void Diem_Load(object sender, EventArgs e) //hiển thị ds môn học LayDSMonHoc(); //hiển thị ds điểm LayDiem(); //hiển thị ds học sinh LayDSHS();
Kết quả:

Hiển thị list môn học tập vào ComboBox "Môn học".

Tương trường đoản cú như hiển thị danh sách mã học tập sinh, ta chỉ cần gọi proc "SP_DSMonHoc" và gán quý hiếm "TenMH" mang đến thuộc tính DisplayMember.

Xem thêm: Google Analytics Là Gì Wikipedia, Google Analytics Là Gì

Ở phía trên ta cần chú ý thêm là áp dụng thuộc tính SelectedValue để nhận giá trị trả về khi người dùng chọn vào ComboBox. Ví dụ người tiêu dùng chọn vào tên môn học mà lại giá trị trả về vẫn là mã số của môn học tập đó.


private void LayDSMonHoc() SqlConnection conn = new SqlConnection(); conn.ConnectionString = ConfigurationManager.ConnectionStrings<"conStr">.ConnectionString; SqlCommand cmd = new SqlCommand("SP_DSMonHoc", conn); cmd.CommandType = CommandType.StoredProcedure; DataTable dt = new DataTable(); SqlDataAdapter domain authority = new SqlDataAdapter(cmd); da.SelectCommand.Connection = conn; conn.Open(); da.Fill(dt); cboMaMH.DataSource = dt; cboMaMH.DisplayMember = "TenMH"; cboMaMH.ValueMember = "MaMH"; cboMaMH.SelectedValue = 0; conn.Close();
Kết quả:

Hiển thị danh sách điểm vào DataGridView.

Lúc thi công giao diện ta sẽ thêm các Columns STT, Mã số, bọn họ tên, Môn học, Điểm trong DataGridView. Vậy nên những lúc hiển thị tài liệu ta cũng trở thành hiển thị tương ứng với những columns trên DataGridView. Để làm cho được điều đó ta áp dụng phương thức ExecuteReader() của class SqlDataReader kèm thêm 1 vòng lặp while.

*Lưu ý: Proc "SP_LayDiem" sẽ trả về các trường tài liệu Mã số, bọn họ tên, Môn học, Điểm. Vậy nên bọn họ gán mang đến đúng kiểu tài liệu nhé.

Ví dụ: Mã số là số int và ở vị trí số 0 thì ta gán như sau: dr.GetInt32(0).


private void LayDiem() dtgDiem.Rows.Clear(); SqlConnection conn = new SqlConnection(); conn.ConnectionString = ConfigurationManager.ConnectionStrings<"conStr">.ConnectionString; SqlCommand cmd = new SqlCommand("SP_LayDiem", conn); cmd.CommandType = CommandType.StoredProcedure; SqlDataReader dr; conn.Open(); dr = cmd.ExecuteReader(); int STT = 0; while (dr.Read()) STT = STT + 1; dtgDiem.Rows.Add(STT, dr.GetInt32(0), dr.GetString(1), dr.GetString(2), dr.GetDouble(3)); dr.Close();
Xử lý sự kiện CellClick trên DataGridView.

Khi người tiêu dùng chọn vào trong 1 trường dữ liệu nào đó trên DataGridView thì các thông tin sẽ tiến hành hiển thị tương ứng trên ComboBox với TextBox để hoàn toàn có thể xem và chuyển đổi nó.


private void dtgDiem_CellClick(object sender, DataGridViewCellEventArgs e) DataGridViewRow row = new DataGridViewRow(); row = dtgDiem.Rows; txtDiem.Text = Convert.ToString(row.Cells<"DiemMH">.Value); cboMaHS.Text = Convert.ToString(row.Cells<"MaHS">.Value); cboMaMH.Text = Convert.ToString(row.Cells<"TenMH">.Value);
Xử lý sự kiện trên button "Reset".

Ta đang viết một hàm Reset() nhằm xóa các thông tin sẽ hiển thị trên ComboBox cùng TextBox. Sở dĩ đề xuất viết một hàm Reset() nguyên nhân là ta sẽ sử dụng nó sau khi thực hiện nay một thao tác chuyển đổi dữ liệu như thêm, sửa, xóa.


public void Reset() txtDiem.Text = ""; cboMaHS.Text = ""; cboMaMH.Text = ""; //button Resetprivate void btnReset_Click(object sender, EventArgs e) Reset();
Xử lý sự kiện trên button "Cập nhật điểm".

Ở proc "SP_CapNhatDiem" ta đã chia tạo ra sự trường vừa lòng thêm new hoặc sửa điểm. Vậy nên chỉ việc gọi nó sinh hoạt C# và truyền vào đúng những tham số cơ mà thôi. Để đảm rằng người dùng nhập không thiếu thông tin ta sẽ viết một hàm soát sổ thông tin.


private bool KiemTraThongTin() if(cboMaHS.Text == "") MessageBox.Show("Vui lòng nhập mã học tập sinh", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); cboMaHS.Focus(); return false; if (cboMaMH.Text == "") MessageBox.Show("Vui lòng lựa chọn môn học", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); cboMaMH.Focus(); return false; if (txtDiem.Text == "") MessageBox.Show("Vui lòng nhập điểm học sinh", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); txtDiem.Focus(); return false; if(Convert.ToDouble(txtDiem.Text) 10) MessageBox.Show("Vui lòng nhập điểm từ bỏ 0 cho 10", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); txtDiem.Focus(); txtDiem.SelectAll(); return false; return true;
Ta sẽ call hàm kiểm tra tin tức này vào sự khiếu nại button_click của button "Cập nhật điểm" nhằm kiểm tra. Nếu khá đầy đủ và đúng chuẩn thì ta mới gọi proc "SP_CapNhatDiem" và cập nhật dữ liệu vào SQL Server.


private void btnCapNhat_Click(object sender, EventArgs e) if (KiemTraThongTin()) try SqlConnection conn = new SqlConnection(); conn.ConnectionString = ConfigurationManager.ConnectionStrings<"conStr">.ConnectionString; SqlCommand cmd = new SqlCommand(); cmd.CommandText = "SP_CapNhatDiem"; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("
Diem", SqlDbType.Float).Value = Convert.ToDouble(txtDiem.Text); cmd.Connection = conn; conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); MessageBox.Show("Cập nhật thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); Reset(); LayDiem(); catch (Exception ex) MessageBox.Show(ex.Message);
Kết quả:

Xử lý sự khiếu nại trên button "Xóa".

Để xóa một trường dữ liệu trong bảng "Diem" ta cần phải có hai tin tức MaHS (mã số học sinh) cùng MaMH (mã môn học). Đây cũng là hai khóa thiết yếu của bảng "Diem", vậy nên lúc muốn xóa ta vẫn yêu cầu người dùng nhập nhì tham số này.

Proc "SP_XoaDiem" sẽ sở hữu được hai tham số nên truyền vào chính là MaHS và MaMH. Để đảm bảo an toàn rằng chắc chắn rằng người dùng nhập đầy đủ, ta vẫn thêm điều kiện nếu người tiêu dùng chưa nhập thì vẫn thông báo.


private void btnXoa_Click(object sender, EventArgs e) if (cboMaHS.Text == "") MessageBox.Show("Vui lòng nhập mã học tập sinh", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); cboMaHS.Focus(); else if (cboMaMH.Text == "") MessageBox.Show("Vui lòng chọn môn học", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); cboMaMH.Focus(); else try SqlConnection conn = new SqlConnection(); conn.ConnectionString = ConfigurationManager.ConnectionStrings<"conStr">.ConnectionString; SqlCommand cmd = new SqlCommand(); cmd.CommandText = "SP_XoaDiem"; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("
MaMH", SqlDbType.Int).Value = Convert.ToInt32(cboMaMH.SelectedValue); cmd.Connection = conn; conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); MessageBox.Show("Xóa thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); Reset(); LayDiem(); catch (Exception ex) MessageBox.Show(ex.Message);
Kết quả:

Xử lý sự khiếu nại trên button "Thoát".

Để chắc chắn là người dùng ý muốn thoát, ta mang lại hiển thị hộp thoại yêu cầu người tiêu dùng xác nhận. Nếu lọc OK thì thoát, trái lại sẽ hủy quăng quật lệnh.


private void btnThoat_Click(object sender, EventArgs e) DialogResult dg = MessageBox.Show("Bạn tất cả chắc hy vọng thoát?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); if (dg == DialogResult.OK) Application.Exit();
using System;using System.Collections.Generic;using System.ComponentModel;using System.Configuration;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace ExampleStudent public partial class Diem : form public Diem() InitializeComponent(); //button bay private void btnThoat_Click(object sender, EventArgs e) DialogResult dg = MessageBox.Show("Bạn có chắc mong thoát?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); if (dg == DialogResult.OK) Application.Exit(); public void Reset() txtDiem.Text = ""; cboMaHS.Text = ""; cboMaMH.Text = ""; //button Reset private void btnReset_Click(object sender, EventArgs e) Reset(); //hàm lấy danh sách môn học cùng hiển thị ra ComboBox Môn học tập private void LayDSMonHoc() SqlConnection conn = new SqlConnection(); conn.ConnectionString = ConfigurationManager.ConnectionStrings<"conStr">.ConnectionString; SqlCommand cmd = new SqlCommand("SP_DSMonHoc", conn); cmd.CommandType = CommandType.StoredProcedure; DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter(cmd); da.SelectCommand.Connection = conn; conn.Open(); da.Fill(dt); cboMaMH.DataSource = dt; cboMaMH.DisplayMember = "TenMH"; cboMaMH.ValueMember = "MaMH"; cboMaMH.SelectedValue = 0; conn.Close(); //hàm rước danh sách học sinh và hiển thị ra ComboBox học viên private void LayDSHS() SqlConnection conn = new SqlConnection(); conn.ConnectionString = ConfigurationManager.ConnectionStrings<"conStr">.ConnectionString; SqlCommand cmd = new SqlCommand("SP_LayDSHS", conn); cmd.CommandType = CommandType.StoredProcedure; DataTable dt = new DataTable(); SqlDataAdapter domain authority = new SqlDataAdapter(cmd); da.SelectCommand.Connection = conn; conn.Open(); da.Fill(dt); cboMaHS.DataSource = dt; cboMaHS.DisplayMember = "Id"; cboMaHS.Text = ""; conn.Close(); //hàm kiểm tra thông tin nhập vào có không hề thiếu hay ko private bool KiemTraThongTin() if(cboMaHS.Text == "") MessageBox.Show("Vui lòng nhập mã học sinh", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); cboMaHS.Focus(); return false; if (cboMaMH.Text == "") MessageBox.Show("Vui lòng lựa chọn môn học", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); cboMaMH.Focus(); return false; if (txtDiem.Text == "") MessageBox.Show("Vui lòng nhập điểm học tập sinh", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); txtDiem.Focus(); return false; if(Convert.ToInt32(txtDiem.Text) 10) MessageBox.Show("Vui lòng nhập điểm trường đoản cú 0 cho 10", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); txtDiem.Focus(); txtDiem.SelectAll(); return false; return true; //sự khiếu nại khi bước đầu chạy chương trình private void Diem_Load(object sender, EventArgs e) LayDSMonHoc(); LayDiem(); LayDSHS(); //hàm mang điểm tự SQL hệ thống private void LayDiem() dtgDiem.Rows.Clear(); SqlConnection conn = new SqlConnection(); conn.ConnectionString = ConfigurationManager.ConnectionStrings<"conStr">.ConnectionString; SqlCommand cmd = new SqlCommand("SP_LayDiem", conn); cmd.CommandType = CommandType.StoredProcedure; SqlDataReader dr; conn.Open(); dr = cmd.ExecuteReader(); int STT = 0; while (dr.Read()) STT = STT + 1; dtgDiem.Rows.Add(STT, dr.GetInt32(0), dr.GetString(1), dr.GetString(2), dr.GetDouble(3)); dr.Close(); //sự kiện khi người dùng nhấp chuột vào datagridview private void dtgDiem_CellClick(object sender, DataGridViewCellEventArgs e) DataGridViewRow row = new DataGridViewRow(); row = dtgDiem.Rows; txtDiem.Text = Convert.ToString(row.Cells<"DiemMH">.Value); cboMaHS.Text = Convert.ToString(row.Cells<"MaHS">.Value); cboMaMH.Text = Convert.ToString(row.Cells<"TenMH">.Value); //button cập nhật với hai chức năng là thêm bắt đầu và sửa điểm private void btnCapNhat_Click(object sender, EventArgs e) if (KiemTraThongTin()) try SqlConnection conn = new SqlConnection(); conn.ConnectionString = ConfigurationManager.ConnectionStrings<"conStr">.ConnectionString; SqlCommand cmd = new SqlCommand(); cmd.CommandText = "SP_CapNhatDiem"; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("
Diem", SqlDbType.Float).Value = Convert.ToDouble(txtDiem.Text); cmd.Connection = conn; conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); MessageBox.Show("Cập nhật thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); Reset(); LayDiem(); catch (Exception ex) MessageBox.Show(ex.Message); //button xóa điểm private void btnXoa_Click(object sender, EventArgs e) if (cboMaHS.Text == "") MessageBox.Show("Vui lòng nhập mã học sinh", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); cboMaHS.Focus(); else if (cboMaMH.Text == "") MessageBox.Show("Vui lòng lựa chọn môn học", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); cboMaMH.Focus(); else try SqlConnection conn = new SqlConnection(); conn.ConnectionString = ConfigurationManager.ConnectionStrings<"conStr">.ConnectionString; SqlCommand cmd = new SqlCommand(); cmd.CommandText = "SP_XoaDiem"; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("
MaMH", SqlDbType.Int).Value = Convert.ToInt32(cboMaMH.SelectedValue); cmd.Connection = conn; conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); MessageBox.Show("Xóa thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); Reset(); LayDiem(); catch (Exception ex) MessageBox.Show(ex.Message);
Trên đây là ứng dụng cai quản học sinh trong C# winforms cùng với các tác dụng đơn giản. Để hoàn toàn có thể đưa ra sử dụng thì nên thêm tương đối nhiều các ràng buộc cùng chức năng. Tuy nhiên để học thì bản thân nghĩ từ các tác dụng cơ bạn dạng này các các bạn sẽ phát triển thêm các tác dụng khác nữa, chúc chúng ta thành công nhé !!!



trường đoản cú viết ứng dụng quản lý xe ra vào C# Winforms cùng Firebase

Trong nội dung bài viết này film1streaming.com phân tách sẽ cho các bạn một áp dụng khá thú…



Factory design Pattern trong C# - Cách tiến hành và lấy một ví dụ

họ sẽ tò mò về Factory kiến thiết Pattern trong C# là gì? phương pháp triển…