Tra Từ Điển

Thời gianTiếtThứ 2Thứ 3Thứ 4Thứ 5Thứ 6
8g40 - 9g101Tiếng Việt
Tiếng Anh
Tiếng Việt
Tiếng Việt
9g10 - 9g302Nghỉ giải lao
Tiếng Anh
Nghỉ giải lao
Nghỉ giải lao
9g30 - 10g3Toán
Toán
Toán

Thursday, April 8, 2021

Ứng dụng quản lý bán hàng

 

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