Bài 8: ỨNG DỤNG QUẢN LÝ BÁN HÀNG
I. Chuẩn bị:
- Tên máy được sử dụng (SERVERNAME) là PC-PC (thay đổi cho đúng máy đang dùng!)
- Database được sử dụng (DATABASENAME) là QLHD , gồm có các table sau:
+ ThanhPho + Sanpham
+ Khachhang + Hoadon
+ Nhanvien + ChitietHoadon
- Với quan hệ (Relationship) như sau:
- Khởi động SQL Server 2012, Restore DataBase từ file QLHD.bak
- Khởi động Visual Studio 2012, tạo một project mới, lưu với tên BanHang
II. Tạo các form hiện danh sách dữ liệu
1. Thiết kế form chính như sau:
Thuộc tính form:
Text: Quản lý hóa đơn bán hàng
Size: 650, 450
Font Size: 9
MaximizeBox: False, MinimizeBox: false
2 groupbox:
Size: 270, 350
Text: như hình
Các button:
Size: 200,45
Text: như hình
Hệ thống menu: như hình
2. Tạo form nhân viên
a. Nhắp phải chuột tại tên Project è Add è New Item è Windows Form è Name: frmNhanVienè Add
b. Thuộc tính form:
Size: 650, 350
Text: Quản lý nhân viên
c. Thêm Conrol :
- Thêm datagridview vào form
Name: dgv
Dock: top
Height: 270
- Thêm button vào form
Name: Trở về
d. Khai báo thư viên tương tác với MSSQL
using System.Data.SqlClient;
e. Khai báo biến ở mức class
stringstrCon = "Data Source=SERVERNAME;Initial Catalog=QLHD;Integrated Security=True";
SqlConnection conn = null;
SqlDataAdapter da = null;
DataTable dt = null;
f. Sự kiện Formload, code
conn = new SqlConnection(strCon);
da = new SqlDataAdapter("select * from NHANVIEN", conn);
dt = new DataTable();
da.Fill(dt);
dgv.DataSource = dt;
g. Trong form 1, nhắp đúp Nhân viên, code
Form frm = new frmNhanVien();
frm.ShowDialog();
h. Trong form 1, nhắp đúp menu item Danh sách Nhân viên, code
Form frm = new frmNhanVien();
frm.ShowDialog();
i. Test: chạy chương trình và nhắp nút Nhân viênhoặc menu Danh sách nhân viên
3. Tạo form Khách hàng
a. Nhắp phải chuột tại tên Project è Add è New Item è Windows Form è Name: frmKhachHangè Add
b. Thuộc tính form:
Size: 650, 350
Text: Danh sách khách hàng
c. Thêm Conrol :
- Qua form Nhân viên, copy dgv và nút Trở về và dán vào form KhachHang
d. Khai báo thư viện tương tác với MSSQL
using System.Data.SqlClient;
e. Khai báo biến ở mức class
stringstrCon = "Data Source=SERVERNAME;Initial Catalog=QLHD;Integrated Security=True";
SqlConnection conn = null;
SqlDataAdapter da = null;
DataTable dt = null;
f. Sự kiện Formload, code
conn = new SqlConnection(strCon);
da = new SqlDataAdapter("select * from KHACHHANG", conn);
dt = new DataTable();
da.Fill(dt);
dgv.DataSource = dt;
g. Trong form 1, nhắp đúp Khách hàng, code
Form frm = new frmKhachHang();
frm.ShowDialog();
h. Trong form 1, nhắp đúp menu item Danh sách Khách hàng, code
Form frm = new frmKhachHang();
frm.ShowDialog();
i. Test: chạy chương trình và nhắp nút Khách hànghoặc menu Danh sách Khách hàng
4. Tạo form Hóa đơn
Làm tương tự form Khách hàng
5. Tạo form Sản phẩm
Làm tương tự form Khách hàng
6. Tạo form ThànhPhố
Làm tương tự form Khách hàng
7. Thoát
Nhắp đúp menu item Thoát, code:
DialogResult kq = MessageBox.Show("Thoát hả bạn?", "Hỏi lại cho chắc", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if ( kq == DialogResult.Yes) Application.Exit();
III. Tạo các chức năng thêm sửa xóa
1. Thêm-sửa-xóa thành phố
a. Mở form Thành phố
b. Chỉnh thuộc tính của dgv
Dock: none, Width: 400
c. Thêm textbox như hình
Name: txtMaThanhPho, txtTenThanhPho
d. Thêm các nút như hình
Name: btnThem, btnCapNhat, btnXoa
e. Viết code cho nút Thêm
string TenThanhPho = txtTenThanhPho.Text;
string sql = "INSERT INTO THANHPHO (TenThanhPho) VALUES(N'{0}')";
sql = string.Format(sql, TenThanhPho);
try{
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
dt.Clear();
da.Fill(dt);
MessageBox.Show("Đã thêm!");
}
catch (SqlException ex){
MessageBox.Show("Không thêm được. Lỗi : " + ex.Message);
}
conn.Close();
f. Viết code cho nút Xóa
int r = dgv.CurrentCell.RowIndex;
int MaThanhPho = int.Parse(dgv.Rows[r].Cells[0].Value.ToString());
string sql = string.Format("DELETE FROM THANHPHO WHERE MaThanhPho={0}", MaThanhPho);
try{
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
dt.Clear();
da.Fill(dt);
MessageBox.Show("Đã xóa xong!");
}
catch (SqlException ex){
MessageBox.Show("Không xóa được. Lỗi: " + ex.Message);
}
conn.Close();
g. Viết code cho sự kiện RowHeaderMouseClick của dgv (để hiện thông tin thành phố ra textbox)
int r = dgv.CurrentCell.RowIndex;
txtMaThanhPho.Text = dgv.Rows[r].Cells[0].Value.ToString();
txtTenThanhPho.Text = dgv.Rows[r].Cells[1].Value.ToString();
h. Viết code cho nút Cập Nhật
int MaThanhPho = int.Parse(txtMaThanhPho.Text);
string TenThanhPho = txtTenThanhPho.Text;
string sql = "UPDATE THANHPHO SET TenThanhPho=N'{0}' WHERE MaThanhPho='{1}'";
sql = string.Format(sql, TenThanhPho, MaThanhPho);
try {
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
dt.Clear();
da.Fill(dt);
MessageBox.Show("Đã chỉnh sửa xong!");
}
catch (SqlException ex){
MessageBox.Show("Không sửa được. Lỗi: " + ex.Message);
}
conn.Close();
2. Thêm-sửa-xóa sản phẩm
a. Mở form Sản phẩm
b. Chỉnh thuộc tính của dgv
Dock: none, Width: 400
c. Thêm textbox như hình
Name: txtMaSP, txtTenSP, txtDVT, txtDonGia
d. Các nút
Qua form Thành Phố, copy 3 nút Thêm, Cập Nhật, Xóa và paste vào form
Chỉnh kích thước và vị trí các button như hình
e. Viết code cho nút Thêm
f. Viết code cho nút Xóa
g. Viết code cho sự kiện RowHeaderMouseClick của dgv (để hiện thông tin ra textbox)
h. Viết code cho nút Cập Nhật
3. Thêm-sửa-xóa khách hàng
4. Thêm-sửa-xóa nhân viên
Làm tương tự, riêng cột Nu đang hiện dạng checkbox (rất đẹp). Nếu muốn hiện ra chữ Nam-nữ thì code trong sự kiện CellFormatting của dgv
if(e.ColumnIndex == 3) {
if (e.Value is bool) {
boolvalue = (bool)e.Value;
e.Value = (value) ? "Nữ" : "Nam";
e.FormattingApplied = true;
}
}
5. Thêm-sửa-xóa hóa đơn
a. Mở form Hóa đơn
b. Chỉnh thuộc tính form: Size: 820, 400
c. Chỉnh thuộc tính của dgv: Dock: none, Size: 580, 340
d. Thêm label và textbox như hình
Text Label: Mã hóa đơn , Ngày lập hóa đơn , Ngày nhận hàng , Khách mua , Người lập hóa đơn
Name TextBox: txtMaHD , txtMaKH , txtMaNV , txtNgayLapHD , txtNgayNhanHang
e. Thêm các nút như hình :
Name: btnThem, btnCapNhat, btnXoa
f. Viết code cho nút Thêm
string MaHD = txtMaHD.Text;
string MaNV = cboMaNV.SelectedValue.ToString();
string MaKH = cboMaKH.SelectedValue.ToString();
System.Globalization.CultureInfo c = newSystem.Globalization.CultureInfo("fr-FR");
string NgayLapHD = txtNgayLapHD.Text ;
DateTime n1 = DateTime.Parse(NgayLapHD, c);
string NgayNhanHang = txtNgayNhanHang.Text;
DateTime n2 = DateTime.Parse(NgayNhanHang, c);
string sql = "INSERT INTO HoaDon (MaHD, MaKH, MaNV, NgayLapHD, NgayNhanHang) VALUES('{0}','{1}',{2},'{3}','{4}')";
sql = string.Format(sql, MaHD, MaKH, MaNV, n1.ToString("yyyy-MM-dd"), n2.ToString("yyyy-MM-dd"));
try{
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
dt.Clear();
da.Fill(dt);
MessageBox.Show("Đã thêm!");
}
catch (SqlException ex) {
MessageBox.Show("Không thêm được. Lỗi : " + ex.Message);
}
conn.Close();
g. Viết code cho nút Xóa
int r = dgv.CurrentCell.RowIndex;
string MaHD= dgv.Rows[r].Cells[0].Value.ToString();
string sql = string.Format("DELETE FROM HOADON WHERE MaHD={0}", MaHD);
try {
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
dt.Clear();
da.Fill(dt);
MessageBox.Show("Đã xóa xong!");
}
catch (SqlException ex){
MessageBox.Show("Không xóa được. Lỗi: " + ex.Message + " , " + ex.Number);
}
conn.Close();
h. Viết code cho sự kiện RowHeaderMouseClick của dgv (để hiện thông tin thành phố ra textbox)
int r = dgv.CurrentCell.RowIndex;
txtMaHD.Text = dgv.Rows[r].Cells[0].Value.ToString();
cboMaKH.SelectedValue = dgv.Rows[r].Cells[1].Value.ToString();
cboMaNV.SelectedValue = dgv.Rows[r].Cells[2].Value.ToString();
txtNgayLapHD.Text = dgv.Rows[r].Cells[3].FormattedValue.ToString();
txtNgayNhanHang.Text = dgv.Rows[r].Cells[4].FormattedValue.ToString();
//string ng = dgv.Rows[r].Cells[3].Value.ToString(); MessageBox.Show(ng);
//DateTime ngaylapHD = DateTime.Parse(ng, System.Globalization.CultureInfo.InvariantCulture);
//txtNgayLapHD.Text = ngaylapHD.ToString("dd/MM/yyyy");
i. Viết code cho nút Cập Nhật
string MaHD = txtMaHD.Text;
string MaNV = cboMaNV.SelectedValue.ToString();
string MaKH = cboMaKH.SelectedValue.ToString();
System.Globalization.CultureInfo c = newSystem.Globalization.CultureInfo("fr-FR");
string NgayLapHD = txtNgayLapHD.Text;
DateTime n1 = DateTime.Parse(NgayLapHD, c);
string NgayNhanHang = txtNgayNhanHang.Text;
DateTime n2 = DateTime.Parse(NgayNhanHang, c);
string sql="UPDATE HoaDon SET MaKH='{0}',MaNV={1},NgayLapHD='{2}',NgayNhanHang='{3}' where MaHD= '{4}'";
sql= string.Format(sql,MaKH,MaNV,n1.ToString("yyyy-MM-dd"),n2.ToString("yyyy-MM-dd"), MaHD);
try{
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
dt.Clear();
da.Fill(dt);
MessageBox.Show("Đã cập nhật!");
}
catch (SqlException ex)
{
MessageBox.Show("Không cập nhật được. Lỗi : " + ex.Message);
}
conn.Close();
IV. Tạo các form hiện danh sách theo nhóm
1. Hóa đơn theo sản phẩm
a. Nhắp phải chuột tại tên Project è Add è New Item è Windows Form è Name: frmHoaDonTheoSPè Add
b. Thuộc tính form:
Size: 580, 450
Text: Hóa đơn theo sản phẩm
Font Size:10
c. Thêm Conrol :
- Thêm Label vào form
Text: Chọn Sản phẩm
- Thêm ComboBox vào form
Name: cboChonSP
- Thêm datagridview vào form
Name: dgv
Dock: bottom
Height: chỉnh cho thích hợp
- Thêm 3 label vào form
Name: lblSoHD, lblTongSL, lblTongTien
d. Khai báo thư viện tương tác với MSSQL
using System.Data.SqlClient;
e. Khai báo biến ở mức class
string strCon = "Data Source=SERVERNAME;Initial Catalog=QLHD;Integrated Security=True";
SqlConnection conn = null;
SqlDataAdapter daHD = null;
DataTable dtHD = null;
f. Sự kiện Formload, code
conn = new SqlConnection(strCon);
SqlDataAdapter daSP = new SqlDataAdapter("select MaSP, TenSP from SanPham ORDER BY TenSP ASC", conn);
DataTable dtSP = new DataTable();
daSP.Fill(dtSP);
cboChonSP.DataSource = dtSP;
cboChonSP.DisplayMember = "TenSP";
cboChonSP.ValueMember = "MaSP";
g. Trong sự kiện SelectionChangeCommitted của cbochonSP, code
try{
if(cboChonSP.SelectedValue == null) return;
conn = new SqlConnection(strCon);
string MaSP = cboChonSP.SelectedValue.ToString();
string sql = "SELECT * FROM ChiTietHoaDon WHERE MaSP=" + MaSP;
daHD = new SqlDataAdapter(sql, conn);
if(dtHD != null) dtHD.Clear();
dtHD = new DataTable();
daHD.Fill(dtHD);
dgv.DataSource = dtHD;
}
catch (SqlException ex){
MessageBox.Show("Không lấy được table CHITIETHOADON. Lỗi: " + ex.Message);
}
h. Trong form 1, nhắp đúp menu item Hóa đơn theo sản phẩm, code
Form frm = new frmHoaDonTheoSP();
frm.ShowDialog();
Test: chạy chương trình và nhắp menu Hóa đơn theo sản phẩm
i. Nâng cấp cách hiện các hóa đơn theo sản phẩm:
- Trong form Hóa Đơn Theo Sản Phẩm, sửa câu lện SQL trong sự kiện SelectionChangeCommitted của cbochonSP thành:
string sql = "SELECT ChiTietHoaDon.MaHD, HoaDon.NgayLapHD, HoaDon.MaKH FROM HoaDon,ChiTietHoaDon WHERE HoaDon.MaHD=ChiTietHoaDon.MaHD AND MaSP=" + MaSP;
Test thử
- Tiếp tục sửa câu lệnh SQL trên thành:
string sql = "SELECT ChiTietHoaDon.MaHD, HoaDon.NgayLapHD, KhachHang.TenCTy FROM HoaDon,ChiTietHoaDon, KhachHang WHERE HoaDon.MaHD=ChiTietHoaDon.MaHD AND HoaDon.MaKH=KhachHang.MaKH AND MaSP=" + MaSP;
Test thử
j. Thực hiện thống kê
Code ở cuối sự kiện
sql = "SELECT count(ChiTietHoaDon.MaHD) as SoHD, sum(ChiTietHoaDon.soluong) as TongSL, sum(soluong*dongia) as TongTien FROM ChiTietHoaDon, SanPham WHERE ChiTietHoaDon.MaSP=SanPham.MaSP AND ChiTietHoaDon.MaSP=" + MaSP;
SqlDataAdapter daThongKe = new SqlDataAdapter(sql, conn);
DataTable dtThongKe = new DataTable();
daThongKe.Fill(dtThongKe);
lblSoHD.Text = "Số hóa đơn: " + dtThongKe.Rows[0]["SoHD"].ToString();
lblTongSL.Text = "Tổng số lượng: " + dtThongKe.Rows[0]["TongSL"].ToString();
lblTongTien.Text = "Tổng tiền: " + string.Format("{0:0.00}", dtThongKe.Rows[0]["TongTien"].ToString()) + " USD";
2. Hóa đơn theo nhân viên
Bạn tự làm nhé
3. Hóa đơn theo khách hàng
Bạn tự làm nhé
0 comments:
Post a Comment