hướng dẫn viết phần mềm quản lý bằng c# Update 02/2025

Chuyên đề Tin học đại cương Tin học văn phòng Word PowerPoint Excel Access Kiểm thử phần mềm HTML CSS JavaScript GIS Google Maps Lập trình C .Net PHP SQL Python Tính toán song song Lập trình Mobile Android iOS Học Lập trình qua Project Học trực tuyến Tài liệu Sách & Bài giảng Bài báo Tổng hợp Nghiên cứu Phát triển ứng dụng Xử lý ngôn ngữ Tiện ích/Sản phẩm So sánh sự khác nhau hai văn bản Học CSS trực quan Bản đồ VNUA Bản đồ các lưu vực lớn nhất Việt Nam Bản đồ trực tuyến Ecopark Hỏi đáp
.Net / Học Lập trình qua Project / Khoá học 476
Xây dựng chương trình quản lý bán hàng bằng C#

Nội dung

Giới thiệu1. Yêu cầu2. Thiết kế cơ sở dữ liệua) Tạo ứng dụng mớib) Tạo cơ sở dữ liệuBảng tblChatLieu (chất liệu)Bảng tblKhach (khách)Bảng tblHang (hàng)Bảng tblNhanVien (nhân viên)Bảng tblHDBan (hoá đơn bán)Bảng tblChiTietHDBan (chi tiết hoá đơn bán)Quan hệ giữa các bảng (Relationship)Một số chú ý3. Thiết kế giao diệna) Form chínhXem Video hướng dẫnb) Form Danh mục chất liệuXem Video hướng dẫnc) Form Danh mục nhân viênXem Video hướng dẫnd) Form Danh mục Khách HàngXem Video hướng dẫne) Form Danh mục hàng hoáXem Video hướng dẫnf) Form Hoá đơn bán hàngXem Video hướng dẫng) Form Tìm kiếm hoá đơnXem Video hướng dẫn4. Xử lý sự kiện4.1. Lớp Functions4.2. Form frmMaina) Sự kiện frmMain_Loadb) Sự kiện mnuThoat_Clickc) Hiển thị các form khác4.3. Form Chất liệua) Khai báob) Sự kiện frmDMChatLieu_Loadc) Phương thức LoadDataGridViewd) Phương thức GetDataToTableXem Video hướng dẫne) Phương thức dgvChatLieu_Clickf) Phương thức btnThem_Clickg) Phương thức ResetValuesh) Phương thức btnLuu_Clicki) Hàm CheckKeyj) Phương thức RunSQLk) Phương thức btnSua_Clickl) Phương thức btnXoa_Clickm) Phương thức RunSQLDeln) Phương thức btnBoQua_Clicko) Phương thức dùng phím Enter thay cho phím TabXem video hướng dẫn phần trên4.4. Form Danh mục Nhân viêna) Khai báob) Phương thức frmDMNhanvien_Loadc) Phương thức LoadDataGridView – Hiển thị dữ liệu lên lướid) Phương thức dgvNhanVien_Clicke) Phương thức btnThem_Clickf) Phương thức ResetValuesg) Phương thức btnLuu_Clickh) Hàm IsDatei) Hàm ConvertDateTimej) Phương thức btnSua_Clickk) Phương thức btnXoa_Clickl) Phương thức btnBoQua_Clickn) Phương thức btnDong_ClickXem video hướng dẫn chi tiết4.5. Form Danh mục Khách hànga) Khai báob) Phương thức frmDMKhachHang_Loadc) Phương thức LoadDataGridViewd) Phương thức dgvKhachHang_Clicke) Phương thức btnThem_Clickf) Phương thức ResetValuesg) Phương thức btnLuu_Clickh) Phương thức btnSua_Clicki) Phương thức btnXoa_Clickj) Phương thức btnBoQua_Clickk) Phương thức dùng phím Enter thay cho phím TabXem video hướng dẫn Quản lý Khách Hàng4.6. Form Danh mục Hàng hóaa) Khai báob) Phương thức frmDMHang_Loadc) Phương thức FillCombod) Phương thức ResetValuese) Phương thức LoadDataGridViewf) Phương thức dgvHang_Clickh) Phương thức btnThem_Clicki) Phương thức btnLuu_Clickj) Phương thức btnSua_Clickk) Phương thức btnXoa_Clickl) Phương thức btnBoQua_Clickm) Phương thức btnOpen_Clickn) Phương thức btnTimKiem_Clicko) Phương thức btnHienThi_ClickXem Video hướng dẫn Quản lý Hàng Hoá4.7. Form Hóa đơn bána) Khai báob) Phương thức frmHoaDonBan_Loadc) Phương thức LoadDataGridViewd) Phương thức LoadInfoHoaDon()e) Phương thức btnThem_Clickf) Hàm CreateKeyg) Hàm ConvertTimeTo24 h) Phương thức ResetValuesi) Phương thức btnLuu_Clickj) Hàm ChuyenSoSangChuk) Phương thức ResetValuesHangl) Phương thức dgvHDBanHang_DoubleClickm) Phương thức btnXoa_Clickn) Phương thức cboMaNhanVien_TextChangedo) Phương thức cboMaKhach_TextChangedp) Phương thức cboMaHang_TextChangedq) Phương thức txtSoLuong_TextChangedr) Phương thức txtGiamGia_TextChangeds) Phương thức btnInHoaDon_Clickt) Phương thức btnTimKiem_Clicku) Phương thức txtSoLuong_KeyPressv) Phương thức cboMaHDBan_DropDownXem Video hướng dẫn Quản lý Hoá Đơn4.8. Form tìm kiếm Hóa đơn bána) Khai báob) Phương thức frmTimHDBan_Loadc) Phương thức ResetValuesd) Phương thức btnTimKiem_Clicke) Phương thức LoadDataGridViewf) Phương thức btnTimLai_Clickg) Phương thức txtTongTien_KeyPressh) Phương thức dgvTKHoaDon_DoubleClicki) Phương thức btnDong_Click

Giới thiệu

Với sự ra đời của .Net và Visual Studio của Microsoft, việc xây dựng một chương trình quản lý với cơ sở dữ liệu đã đơn giản hơn rất nhiều. Bài này hướng dẫn bạn cách tạo ứng dụng quản lý bán hàng lưu niệm sử dụng ngôn ngữ lập trình C# và hệ quản trị cơ sở dữ liệu SQL Server. Tham khảo thêm khoá học đầy đủ lập trình .NET và khoá thành thạo với lập trình C#.

Đang xem: Hướng dẫn viết phần mềm quản lý bằng c#

1. Yêu cầu

Xây dựng chương trình quản lý cửa hàng Bán hàng lưu niệm sử dụng ngôn ngữ C# và hệ quản trị cơ sở dữ liệu SQL Server. Hệ thống có các chức năng cơ bản như quản lý mặt hàng, quản lý khách hàng, quản lý hoá đơn bán. Cửa hàng có thể có một hoặc nhiều người bán, với mỗi hoá đơn bán hàng phải có thông tin của người bán cho khách hàng cụ thể.

2. Thiết kế cơ sở dữ liệu

a) Tạo ứng dụng mới

– Tên project: QuanLyBanHang

b) Tạo cơ sở dữ liệu

– Trong cửa sổ  Solution Explorer, nháy phải chuột lên tên ứng dụng, chọn Add ->New Item… Chọn Data -> Service-based Database (hoặc SQL Database trong Visual Studio Net 2005).

– Đặt tên cơ sở dữ liệu: Quanlybanhang.mdf

*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

Các thành phần trên form

Điều khiển Name TextBox txtMaHDBan, txtThang, txtNam, txtMaNhanVien, txtMaKhach, txtTongTien. DataGridView dgvTKHoaDon Button btnTimKiem, btnTimLai, btnDong Xem Video hướng dẫn

 

Chú ý:

– Tất cả các form (trừ frmMain), thuộc tính StartPostion = CenterParent, ShowInTaskbar = False

4. Xử lý sự kiện

4.1. Lớp Functions

– Chứa các phương thức dùng chung

– Trong khung Solution Explorer, nháy phải lên tên project, chọn Add -> New Folder, đặt tên thư mục là Class

– Nháy phải thư mục Class, nháy phải chọn Add -> Class, đặt tên Functions.cs

– Trong class Functions:

+ Khai báo bổ sung các thư viện:

using System.Data; using System.Data.SqlClient; using System.Windows.Forms; // Sử dụng đối tượng MessageBox

+ Viết 2 phương thức: Connect()Disconnect()

namespace QuanLyBanHang.Class public static void Disconnect() } }

4.2. Form frmMain

a) Sự kiện frmMain_Load private void frmMain_Load(object sender, EventArgs e) b) Sự kiện mnuThoat_Click private void mnuThoat_Click(object sender, EventArgs e) c) Hiển thị các form khác

Cú pháp:

<Tên lớp form> <Tên đối tượng> = new <Tên lớp form>(); //Khởi tạo đối tượng

<Tên đối tượng>.ShowDialog(); //Hiển thị dưới dạng hộp thoại

Hoặc <Tên đối tượng>.Show(); //Hiện thị dạng thông thường

+ Hiển thị form frmChatLieu

private void mnuChatLieu_Click(object sender, EventArgs e)

4.3. Form Chất liệu

a) Khai báo

– Khai báo

using System.Data.SqlClient; //Sử dụng thư viện để làm việc SQL server using QuanLyBanHang.Class; //Sử dụng class Functions.cs

– Khai báo biến toàn cục

DataTable tblCL; //Chứa dữ liệu bảng Chất liệu b) Sự kiện frmDMChatLieu_Load private void frmDMChatLieu_Load(object sender, EventArgs e)

Trong đó, phương thức LoadDataGridView có tác dụng lấy dữ liệu từ bảng tblChatLieu đổ vào DataGridView

c) Phương thức LoadDataGridView private void LoadDataGridView()

Với GetDataToTable được viết trong lớp Functions có tác dụng thực hiện câu lệnh SQL truy vấn dữ liệu từ CSDL đổ vào đối tượng bảng.

d) Phương thức GetDataToTable

Mở cửa sổ lớp Class Functions viết mã lệnh như sau:

//Lấy dữ liệu vào bảng public static DataTable GetDataToTable(string sql)

Hoặc có thể thực hiện ngắn gọn bằng cách gán tham số khi khai báo đối tượng như sau:

//Lấy dữ liệu vào bảng public static DataTable GetDataToTable(string sql) Xem Video hướng dẫn
e) Phương thức dgvChatLieu_Click

Phương thức này có tác dụng lấy nội dung dòng dữ liệu người dùng chọn trong lưới DataGridView và hiển thị lên các điều khiển trên Form.

private void dgvChatLieu_Click(object sender, EventArgs e) if (tblCL.Rows.Count == 0) //Nếu không có dữ liệu txtMaChatLieu.Text = dgvChatLieu.CurrentRow.Cells.Value.ToString(); txtTenChatLieu.Text = dgvChatLieu.CurrentRow.Cells.Value.ToString(); btnSua.Enabled = true; btnXoa.Enabled = true; btnBoQua.Enabled = true; } f) Phương thức btnThem_Click private void btnThem_Click(object sender, EventArgs e)

Với ResetValues là phương thức của form frmDMChatLieu có tác dụng xóa hết dữ liệu trong các điều khiển trên Form.

g) Phương thức ResetValues private void ResetValue() h) Phương thức btnLuu_Click

Phương thức này có tác dụng kiểm tra thông tin người dùng nhập vào các điều khiển trên Form trong trường hợp thêm mới và lưu các thông tin đó vào CSDL.

private void btnLuu_Click(object sender, EventArgs e) if(txtTenChatLieu.Text.Trim().Length==0) //Nếu chưa nhập tên chất liệu sql = “Select MaChatLieu From tblChatLieu where MaChatLieu=N”” + txtMaChatLieu.Text.Trim() + “””; if (Class.Functions.CheckKey(sql)) sql = “INSERT INTO tblChatLieu VALUES(N”” + txtMaChatLieu.Text + “”,N”” + txtTenChatLieu.Text +””)”; Class.Functions.RunSQL(sql); //Thực hiện câu lệnh sql LoadDataGridView(); //Nạp lại DataGridView ResetValue(); btnXoa.Enabled = true; btnThem.Enabled = true; btnSua.Enabled = true; btnBoQua.Enabled = false; btnLuu.Enabled = false; txtMaChatLieu.Enabled = false; }

Với CheckKeyRunSQL là các phương thức được viết trong lớp Functions.

Xem thêm: Cách Om Gà Chọi Tốt Nhất – Cách Om Gà Chọi Chiến Bằng Công Thức Độc Quyền

CheckKey có tác dụng kiểm tra khóa trùng, RunSQL có tác dụng thực thi các câu lệnh SQL.

i) Hàm CheckKey

Mở cửa sổ lớp Class Functions viết mã lệnh:

//Hàm kiểm tra khoá trùng public static bool CheckKey(string sql) j) Phương thức RunSQL

Mở cửa sổ lớp Class Functions viết mã lệnh như sau:

//Hàm thực hiện câu lệnh SQL public static void RunSQL(string sql) catch (Exception ex) cmd.Dispose();//Giải phóng bộ nhớ cmd = null; }

Chú ý: Đối tượng SqlCommand có hai phương thức để thực thi câu lệnh SQL, trong đó:

ExecuteReader: thực thi câu lệnh SQL có dữ liệu trả về, ví dụ SELECT. ExecuteNoneQuery: thực thi các câu lệnh SQL không yêu cầu trả về tập dữ liệu, ví dụ: INSERT, UPDATE, DELETE. k) Phương thức btnSua_Click

Khi người dùng nháy chuột vào một dòng bản ghi bất kỳ trên lưới để hiển thị dữ liệu của bản ghi đó lên Form thì người dùng có thể chỉnh sửa các thông tin đó.

Phương thức btnSua_Click có tác dụng lưu các thông tin người dùng đã sửa vào CSDL.

private void btnSua_Click(object sender, EventArgs e) if (txtMaChatLieu.Text == “”) //nếu chưa chọn bản ghi nào if (txtTenChatLieu.Text.Trim().Length==0) //nếu chưa nhập tên chất liệu sql = “UPDATE tblChatLieu SET TenChatLieu=N”” + txtTenChatLieu.Text.ToString() + “” WHERE MaChatLieu=N”” + txtMaChatLieu.Text + “””; Class.Functions.RunSQL(sql); LoadDataGridView(); ResetValue(); btnBoQua.Enabled = false; } l) Phương thức btnXoa_Click private void btnXoa_Click(object sender, EventArgs e) if (txtMaChatLieu.Text == “”) //nếu chưa chọn bản ghi nào if (MessageBox.Show(“Bạn có muốn xoá không?”, “Thông báo”, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) } m) Phương thức RunSQLDel

Phương thức RunSQLDel tương tự như RunSQL nhưng trong trường hợp xóa dữ liệu nếu dữ liệu đang được dùng bởi một đối tượng khác thì không được phép xóa.

Mở cửa sổ lớp Class Functions viết mã lệnh như sau:

public static void RunSqlDel(string sql) catch (Exception ex) cmd.Dispose(); cmd = null; } n) Phương thức btnBoQua_Click

Phương thức này được gọi khi người dùng muốn hủy bỏ các chức năng Thêm mới hoặc Sửa dữ liệu.

private void btnBoQua_Click(object sender, EventArgs e) o) Phương thức dùng phím Enter thay cho phím Tab private void txtMaChatLieu_KeyUp(object sender, KeyEventArgs e) “); }

Thực hiện tương tự cho txtTenChatLieu_KeyUp
p) Phương thức btnDong_Click

private void btnDong_Click(object sender, EventArgs e) Xem video hướng dẫn phần trên

4.4. Form Danh mục Nhân viên

a) Khai báo

– Thư viện:

using System.Data; using System.Data.SqlClient; using QuanLyBanHang.Class;

– Biến:

DataTable tblNV; //Lưu dữ liệu bảng nhân viên b) Phương thức frmDMNhanvien_Load private void frmDMNhanvien_Load(object sender, EventArgs e) c) Phương thức LoadDataGridView – Hiển thị dữ liệu lên lưới public void LoadDataGridView() d) Phương thức dgvNhanVien_Click private void dgvNhanVien_Click(object sender, EventArgs e) if (tblNV.Rows.Count == 0) txtMaNhanVien.Text = dgvNhanVien.CurrentRow.Cells.Value.ToString(); txtTenNhanVien.Text = dgvNhanVien.CurrentRow.Cells.Value.ToString(); if (dgvNhanVien.CurrentRow.Cells.Value.ToString() == “Nam”) chkGioiTinh.Checked = true; else chkGioiTinh.Checked = false; txtDiaChi.Text = dgvNhanVien.CurrentRow.Cells.Value.ToString(); mtbDienThoai.Text = dgvNhanVien.CurrentRow.Cells.Value.ToString(); mskNgaySinh.Text = dgvNhanVien.CurrentRow.Cells.Value.ToString(); btnSua.Enabled = true; btnXoa.Enabled = true; btnXoa.Enabled = true; } e) Phương thức btnThem_Click private void btnThem_Click(object sender, EventArgs e) f) Phương thức ResetValues private void ResetValues() g) Phương thức btnLuu_Click private void btnLuu_Click(object sender, EventArgs e) if (txtTenNhanVien.Text.Trim().Length == 0) if (txtDiaChi.Text.Trim().Length == 0) if (mtbDienThoai.Text == “( ) -“) if (mskNgaySinh.Text == ” / /”) if (!Functions.IsDate(mskNgaySinh.Text)) if (chkGioiTinh.Checked == true) gt = “Nam”; else gt = “Nữ”; sql = “SELECT MaNhanVien FROM tblNhanVien WHERE MaNhanVien=N”” + txtMaNhanVien.Text.Trim() + “””; if (Functions.CheckKey(sql)) sql = “INSERT INTO tblNhanVien(MaNhanVien,TenNhanVien,GioiTinh, DiaChi,DienThoai, NgaySinh) VALUES (N”” + txtMaNhanVien.Text.Trim() + “”,N”” + txtTenNhanVien.Text.Trim() + “”,N”” + gt + “”,N”” + txtDiaChi.Text.Trim() + “”,”” + mtbDienThoai.Text + “”,”” + Functions.ConvertDateTime(mskNgaySinh.Text) + “”)”; Functions.RunSQL(sql); LoadDataGridView(); ResetValues(); btnXoa.Enabled = true; btnThem.Enabled = true; btnSua.Enabled = true; btnBoQua.Enabled = false; btnLuu.Enabled = false; txtMaNhanVien.Enabled = false; }

Với IsDateConvertDateTime là các hàm được viết trong lớp Functions

IsDate có tác dụng kiểm tra một biến có ở dạng ngày tháng không, ConvertDateTime có tác dụng đổi một chuỗi ngày tháng do người dùng nhập có dạng dd/mm/yyyy thành chuỗi ngày tháng có dạng mm/dd/yyyy để lưu vào CSDL.

Xem thêm: Cách Chơi Game Mượt Trên Win 10 Giúp Chơi Game “Mượt” Hơn, +8 Cách Tối Ưu Hóa Win 10 Để Chơi Game Mượt Hơn

h) Hàm IsDate

Soạn thảo trong lớp Functions:

public static bool IsDate(string date) i) Hàm ConvertDateTime

Soạn thảo hàm trong lớp Functions:

public static string ConvertDateTime(string date) //”, elements, elements, elements); return dt; } j) Phương thức btnSua_Click private void btnSua_Click(object sender, EventArgs e) if (txtMaNhanVien.Text == “”) if (txtTenNhanVien.Text.Trim().Length == 0) if (txtDiaChi.Text.Trim().Length == 0) if (mtbDienThoai.Text == “( ) -“) if (mskNgaySinh.Text == ” / /”) if (!Functions.IsDate(mskNgaySinh.Text)) if (chkGioiTinh.Checked == true) gt = “Nam”; else gt = “Nữ”; sql = “UPDATE tblNhanVien SET TenNhanVien=N”” +txtTenNhanVien.Text.Trim().ToString() + “”,DiaChi=N”” + txtDiaChi.Text.Trim().ToString() + “”,DienThoai=”” + mtbDienThoai.Text.ToString() + “”,GioiTinh=N”” + gt + “”,NgaySinh=”” + Functions.ConvertDateTime(mskNgaySinh.Text) + “” WHERE MaNhanVien=N”” + txtMaNhanVien.Text + “””; Functions.RunSQL(sql); LoadDataGridView(); ResetValues(); btnBoQua.Enabled = false; } k) Phương thức btnXoa_Click private void btnXoa_Click(object sender, EventArgs e) if (txtMaNhanVien.Text == “”) if (MessageBox.Show(“Bạn có muốn xóa không?”, “Thông báo”,MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) } l) Phương thức btnBoQua_Click private void btnBoQua_Click(object sender, EventArgs e)

m) Phương thức dùng phím Enter thay cho phím Tab

private void txtMaNhanVien_KeyUp(object sender, KeyEventArgs e) “); }

Thực hiện tương tự cho txtTenNhanVien.KeyUp, txtDiaChi.KeyUp, mtbDienThoai.KeyUp, mskNgaySinh.KeyUp.

n) Phương thức btnDong_Click private void btnDong_Click(object sender, EventArgs e) Xem video hướng dẫn chi tiết