Chúng em sẽ mô tả cách mà hệ thống giúpquản lý thông tin về nhân viên, khách hàng, sản phẩm, nhà cung cấp, hóa đơn và báo cáomột cách hiệu quả và nhất quán.. Thông qua việc theo dõi doan
MÔ TẢ NGHIỆP VỤ HỆ THỐNG
Mô tả bài toán
Bài toán cần giải quyết trong hệ thống quản lý quán cafe này là quản lý và điều phối các hoạt động kinh doanh hàng ngày của quán cafe, từ việc nhập hàng, bán hàng cho khách hàng, đến quản lý nhân viên và các thông tin liên quan.
Trước hết, cần quản lý các hoá đơn nhập và hoá đơn bán hàng Đối với hoá đơn nhập, hệ thống cần ghi nhận thông tin về nhà cung cấp, ngày nhập hàng, các mặt hàng được nhập và số lượng tương ứng Trong khi đó, hoá đơn bán cần ghi nhận thông tin về khách hàng, ngày bán hàng, các mặt hàng được bán và số lượng tương ứng, cùng với các chương trình khuyến mãi nếu có. Để quản lý hàng tồn kho, hệ thống cần theo dõi số lượng hàng tồn kho của mỗi sản phẩm sau mỗi giao dịch nhập hoặc bán hàng Điều này giúp quản lý hiệu quả lượng hàng tồn kho, đảm bảo không gặp tình trạng thiếu hàng hoặc tồn kho quá mức.
Quản lý thông tin về sản phẩm cũng là một phần quan trọng trong hệ thống Hệ thống cần lưu trữ các thông tin chi tiết về sản phẩm như tên, loại sản phẩm, giá nhập, giá bán, công dụng và hình ảnh minh họa Điều này giúp quản lý và truy xuất thông tin sản phẩm một cách nhanh chóng và chính xác.
Quản lý thông tin khách hàng và nhân viên là nền tảng cho việc quản lý đối tác kinh doanh và nhân sự Thông tin này bao gồm họ tên, địa chỉ liên hệ, số điện thoại và các dữ liệu liên quan Đáng chú ý, quản lý nhân viên cần tập trung vào thông tin quê quán nhằm hỗ trợ hoạt động thống kê và quản lý nhân sự hiệu quả.
Hệ thống cần hỗ trợ các chức năng báo cáo để phân tích và đánh giá hiệu suất kinh doanh, bao gồm doanh thu, lợi nhuận, hàng tồn kho và các chỉ số khác để đưa ra các quyết định kinh doanh hiệu quả.
Database mà bài toán quản lý bao gồm các bảng sau: tbl_chitiethdn: Lưu trữ chi tiết các mặt hàng trong hóa đơn nhập, bao gồm mã hóa đơn nhập, mã sản phẩm, số lượng, đơn giá, thành tiền và chiết khấu (nếu có). tbl_chitiethoadonban: Đây là bảng chi tiết các mặt hàng trong hóa đơn bán, bao gồm mã hóa đơn bán, mã sản phẩm, số lượng, thành tiền và khuyến mãi (nếu có). tbl_congdung: Lưu trữ thông tin về công dụng của sản phẩm, bao gồm mã công dụng và tên công dụng. tbl_hoadonban và tbl_hoadonnhap: Đây là hai bảng lưu trữ thông tin về hóa đơn bán và hóa đơn nhập tương ứng, bao gồm mã hóa đơn, ngày nhập/bán, mã nhân viên, mã khách hàng hoặc nhà cung cấp và tổng tiền. tbl_khachhang và tbl_ncc: Lưu trữ thông tin về khách hàng và nhà cung cấp, bao gồm mã, tên, địa chỉ và số điện thoại.
3 tbl_loaisp và tbl_sanpham: Các bảng này lưu trữ thông tin về loại sản phẩm và sản phẩm tương ứng, bao gồm mã, tên, giá nhập, giá bán, số lượng, mã công dụng, mã loại và đường dẫn hình ảnh. tbl_nhanvien và tbl_que: Lưu trữ thông tin về nhân viên và quê quán tương ứng,bao gồm mã, tên, địa chỉ, giới tính, ngày sinh, mã quê và số điện thoại.
Mô tả nghiệp vụ hệ thống
Thông tin sản phẩm: Lưu trữ các thông tin về sản phẩm cà phê và các loại đồ uống khác như tên sản phẩm, loại sản phẩm, giá nhập, giá bán, số lượng tồn kho và các thông tin liên quan khác.
Thông tin nhà cung cấp: Bảng này chứa thông tin về các nhà cung cấp cà phê, bao gồm tên nhà cung cấp, địa chỉ, số điện thoại và các chi tiết liên quan khác.
Thông tin khách hàng: Lưu trữ các thông tin cá nhân của khách hàng như tên, địa chỉ, số điện thoại và các thông tin liên quan khác.
Bảng thông tin nhân viên lưu trữ thông tin chi tiết về các nhân viên của cửa hàng cà phê như tên, chức vụ, ngày sinh, địa chỉ, số điện thoại và thông tin liên quan.
Thông tin hóa đơn nhập: Ghi lại thông tin chi tiết về các hóa đơn nhập hàng từ nhà cung cấp, bao gồm mã hóa đơn, ngày nhập, mã nhân viên, mã nhà cung cấp và tổng tiền. Thông tin hóa đơn bán: Lưu trữ các thông tin chi tiết về các hóa đơn bán hàng cho khách hàng, bao gồm mã hóa đơn, ngày bán, mã nhân viên, mã khách hàng và tổng tiền.
Thông tin công dụng của sản phẩm
Thông tin loại sản phẩm
Thông tin nhà cung cấp
Thông tin hoá đơn nhập
Thông tin hoá đơn bán
Quản lý thông tin sản phẩm cà phê và các đồ uống khác.
Theo dõi thông tin về nhà cung cấp cà phê và các vật liệu liên quan.
Ghi lại thông tin cá nhân của khách hàng và nhân viên cửa hàng.
Thực hiện ghi chú và quản lý hóa đơn nhập và hóa đơn bán hàng.
Tạo ra báo cáo doanh số bán hàng, lợi nhuận và tồn kho.
Theo dõi hoạt động kinh doanh của cửa hàng và phân tích xu hướng tiêu thụ.
Các chức năng của hệ thống
Nhập dữ liệu từ bàn phím
Thêm và lưu thông tin vào cơ sở dữ liệu
Sửa thông tin trong cơ sở dữ liệu
Xóa thông tin trong cơ sở dữ liệu
Huỷ các thao tác đang diễn ra
Thiết kế chức năng hệ thống
1.4.1 Chức năng Thêm dữ liệu
Chức năng thêm lưu dữ liệu cho phép người dùng thao tác dữ liệu thêm mới ở hệ thống và lưu dữ liệu thêm mới đó vào cơ sở dữ liệu.
Bước 1: Nhập dữ liệu từ bàn phím
Bước 2: Kiểm tra sự chính xác của dữ liệu đã nhập nhập (kiểm tra xem có nhập thiếu và có đúng định dạng nhập hay không)
- Nếu sai hiển thị thông báo lỗi và quay lại bước 1
- Nếu đúng chuyển sang bước 3
Bước 3: Kiểm tra dữ liệu nhập với dữ liệu đã có trong cơ sở dữ liệu
- Nếu trùng dữ liệu đã có trong cơ sở dữ liệu thì thông báo lỗi và quay lại bước 1
- Nếu đúng chuyển sang bước 4
Bước 4: Cập nhật vào cơ sở dữ liệu
Bước 5: Hiển thị dữ liệu đã nhập, kết thúc quy trình
- Button Thêm: private void btnthem_Click(object sender, EventArgs e)
{ btnsua.Enabled = false; btnxoa.Enabled = false; btnboqua.Enabled = true; btnluu.Enabled = true; btnthem.Enabled = false; reset(); txtmasanpham.Enabled = true; txtmasanpham.Focus();
- Button Lưu: private void btnluu_Click(object sender, EventArgs e)
5 if (txtmasanpham.Text.Trim().Length == 0)
MessageBox.Show("Bạn phải nhập mã sản phẩm", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Warning); txtmasanpham.Focus(); return;
} if (txttensanpham.Text.Trim().Length == 0)
MessageBox.Show("Bạn phải nhập tên sản phẩm", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Warning); txttensanpham.Focus(); return;
} if (cbomaloai.Text.Trim().Length == 0)
MessageBox.Show("Bạn phải nhập loại sản phẩm", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Warning); cbomaloai.Focus(); return;
} if (cbomacongdung.Text.Trim().Length == 0)
MessageBox.Show("Bạn phải nhập công dụng của sản phẩm", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning); cbomacongdung.Focus(); return;
} if (txthinhanh.Text.Trim().Length == 0)
MessageBox.Show("Bạn phải chọn ảnh minh họa cho sản phẩm", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning); txthinhanh.Focus(); return;
} sql = "SELECT masanpham FROM tbl_sanpham WHERE masanpham=N'" + txtmasanpham.Text.Trim() + "'"; if (funtion.CheckKey(sql))
MessageBox.Show("Mã sản phẩm này đã có, bạn phải nhập mã khác", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning); txtmasanpham.Focus(); txtmasanpham.Text = ""; return;
The SQL statement is used to insert new product information into the tbl_sanpham table The statement includes the product ID, name, category, quantity, purchase price, selling price, application ID, and image The RunSql function then executes the SQL statement, resulting in the successful insertion of the new product data.
Load_DataGridView(); reset(); btnxoa.Enabled = true; btnthem.Enabled = true; btnsua.Enabled = true;
6 btnboqua.Enabled = false; btnluu.Enabled = false; txtmasanpham.Enabled = false;
1.4.2 Chức năng Sửa dữ liệu
Khi muốn thay đổi thông tin có thể sửa thông tin
Bước 1: Chọn dữ liệu cần sửa
Bước 2: Nhập lại dữ liệu cần sửa
Bước 3: Kiểm tra dữ liệu
- Nếu sai thông báo lỗi và quay lại bước 2
- Nếu đúng tiếp tục bước 4
Bước 4: Lưu dữ liệu đã sửa vào cơ sở dữ liệu
Bước 5: Hiển thị lại dữ liệu đã sửa
Code xử lý: private void btnsua_Click(object sender, EventArgs e)
{ string sql; if (tbl_sanpham.Rows.Count == 0)
MessageBox.Show("Không còn dữ liệu!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); return;
MessageBox.Show("Bạn chưa chọn bản ghi nào", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Information); return;
} if (txttensanpham.Text.Trim().Length == 0)
MessageBox.Show("Bạn phải nhập tên sản phẩm", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Warning); txttensanpham.Focus(); return;
} if (cbomaloai.Text.Trim().Length == 0)
MessageBox.Show("Bạn phải nhập loại sản phẩm", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Warning); cbomaloai.Focus(); return;
}if (cbomacongdung.Text.Trim().Length == 0)
MessageBox.Show("Bạn phải nhập công dụng của sản phẩm", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
} if (txthinhanh.Text.Trim().Length == 0)
MessageBox.Show("Bạn phải chọn ảnh minh họa cho hàng", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning); txthinhanh.Focus(); return;
} sql = "UPDATE tbl_sanpham SET tensanpham=N'" + txttensanpham.Text.Trim().ToString() + "',maloai=N'" + cbomaloai.SelectedValue.ToString() + "',macongdung=N'" + cbomacongdung.SelectedValue.ToString() + "',hinhanh='" + txthinhanh.Text + "'WHERE masanpham=N'" + txtmasanpham.Text + "'"; funtion.RunSql(sql);
Load_DataGridView(); reset(); btnboqua.Enabled = false;
1.4.3 Chức năng Xóa dữ liệu
Có thể xoá dữ liệu không dùng hoặc dữ liệu sai
Bước 1: Chọn dữ liệu cần xóa
- Nếu trong bảng không có dữ liệu sang bước 3
- Nếu có dữ liệu thì xoá dữ liệu đó
Code xử lý: private void btnxoa_Click(object sender, EventArgs e)
{ string sql; if (tbl_sanpham.Rows.Count == 0)
MessageBox.Show("Không còn dữ liệu!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); return;
MessageBox.Show("Bạn chưa chọn bản ghi nào", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Information); return;
} if (MessageBox.Show("Bạn có muốn xóa không?", "Thông báo",
MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{ sql = "DELETE tbl_sanpham WHERE masanpham=N'" + txtmasanpham.Text + "'"; funtion.RunSql(sql);
1.4.4 Chức năng Tìm kiếm dữ liệu
Chức năng tìm kiếm được sử dụng khi người dùng tra cứu thông tin nào đó
Bước 1: Nhập thông tin tìm kiếm
Bước 2: Kiểm tra thông tin có tồn tại hay không
- Nếu có thì hiển thị Thông tin cần tim
- Nếu không có thì thông báo nhập lại thông tin hoặc thoát khỏi chức năng tìm kiếm
Code xử lý: private void btntimkiem_Click(object sender, EventArgs e)
{ string sql; if ((txtmasanpham.Text == "") && (txttensanpham.Text == "") && (cbomaloai.Text == "") & (cbomacongdung.Text == ""))
MessageBox.Show("Hãy nhập một điều kiện tìm kiếm!!!", "Yêu cầu ",
MessageBoxButtons.OK, MessageBoxIcon.Warning); return;
} sql = "SELECT * FROM tbl_sanpham WHERE 1=1"; if (txtmasanpham.Text != "") sql = sql + " AND masanpham Like N'%" + txtmasanpham.Text + "%'"; if (txttensanpham.Text != "") sql = sql + " AND tensanpham Like N'%" + txttensanpham.Text + "%'"; if (cbomaloai.Text != "") sql = sql + " AND maloai Like N'%" + cbomaloai.SelectedValue + "%'"; if (cbomacongdung.Text != "") sql = sql + " AND macongdung Like N'%" + cbomacongdung.SelectedValue + "%'" tbl_sanpham = funtion.GetDataToTable(sql); if (tbl_sanpham.Rows.Count == 0)
MessageBox.Show("Không có bản ghi thỏa mãn điều kiện!!!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning); else
MessageBox.Show("Có " + tbl_sanpham.Rows.Count + " bản ghi thỏa mãn điều kiện
"Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
DataGridView.DataSource = tbl_sanpham; reset();
Bước 1: chọn 1 chức năng bất kì nào đó bước 2: Khi không muốn thực hiện chức năng đó chọn bỏ qua
Bước 3: Tất cả dữ liệu hiển thị trên form đc reset lại như ban đầu
9 private void btnboqua_Click(object sender, EventArgs e)
{ reset(); btnboqua.Enabled = false; btnthem.Enabled = true; btnxoa.Enabled = true; btnsua.Enabled = true; btnluu.Enabled = false; txtmasanpham.Enabled = false;
Bước 1: Kích chuột vào nút đóng form
Bước 2: Hiển thị thông báo:
- Đồng ý đóng form chọn Yes
- Không đồng ý đóng form chọn No
Code xử lý: private void btndong_Click(object sender, EventArgs e)
DialogResult a = MessageBox.Show("Bạn muốn đóng ứng dụng", "Thông báo",
MessageBoxButtons.YesNo, MessageBoxIcon.Question); if(a== DialogResult.Yes)
1.4.7 Chức năng In dữ liệu
Bước 1: Kết nối CSDL với excel
Bước 2: Lấy dữ liệu báo cáo từ CSDL
Bước 3: Hiển thị báo cáo lên excel
Code xử lý: private void btin_Click(object sender, EventArgs e)
MessageBox.Show("hãy chọn hoá đơn để in", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error); return;
COMExcel.Application exApp = new COMExcel.Application();
COMExcel.Range exRange; string sql; int hang = 0, cot = 0;
DataTable tblThongtinhoadon, tblThongtinsanpham; exBook = exApp.Workbooks.Add(COMExcel.XlWBATemplate.xlWBATWorksheet); exSheet = exBook.Worksheets[1]; exRange = exSheet.Cells[1, 1]; exRange.Range["A1:B3"].Font.Size = 10; exRange.Range["A1:B3"].Font.Name = "Times new roman"; exRange.Range["A1:B3"].Font.Bold = true; exRange.Range["A1:B3"].Font.ColorIndex = 5; //Màu xanh da trời exRange.Range["A1:A1"].ColumnWidth = 7; exRange.Range["B1:B1"].ColumnWidth = 15; exRange.Range["A1:B1"].MergeCells = true; exRange.Range["A1:B1"].HorizontalAlignment = COMExcel.XlHAlign.xlHAlignCenter; exRange.Range["A1:B1"].Value = "Quán cafe"; exRange.Range["A2:B2"].MergeCells = true; exRange.Range["A2:B2"].HorizontalAlignment = COMExcel.XlHAlign.xlHAlignCenter; exRange.Range["A2:B2"].Value = "12 Chùa Bộc - Hà Nội"; exRange.Range["A3:B3"].MergeCells = true; exRange.Range["A3:B3"].HorizontalAlignment = COMExcel.XlHAlign.xlHAlignCenter; exRange.Range["A3:B3"].Value = "Điện thoại: "; exRange.Range["C2:E2"].Font.Size = 16; exRange.Range["C2:E2"].Font.Name = "Times new roman"; exRange.Range["C2:E2"].Font.Bold = true; exRange.Range["C2:E2"].Font.ColorIndex = 3; //Màu đỏ exRange.Range["C2:E2"].MergeCells = true; exRange.Range["C2:E2"].HorizontalAlignment = COMExcel.XlHAlign.xlHAlignCenter; exRange.Range["C2:E2"].Value = "HÓA ĐƠN NHẬP "; sql = "SELECT a.mahdn, a.ngaynhap, a.tongtien, b.tennv, c.tenncc " + "FROM tbl_hoadonnhap AS a " + "INNER JOIN tbl_nhanvien AS b ON a.manv = b.manv " +"INNER JOIN tbl_ncc AS c ON a.mancc = c.mancc " +"WHERE a.mahdn = N'" + txtmahdn.Text + "'"; tblThongtinhoadon = funtion.GetDataToTable(sql); exRange.Range["A7:F10"].Font.Size = 12; exRange.Range["A7:A7"].Value = "Mã hoá đơn:"; exRange.Range["B7:F7"].MergeCells = true; exRange.Range["B7:F7"].Value = tblThongtinhoadon.Rows[0]["mahdn"].ToString(); exRange.Range["A8:A8"].Value = "Ngày nhập:"; exRange.Range["B8:F8"].MergeCells = true; exRange.Range["B8:F8"].Value = Convert.ToDateTime(tblThongtinhoadon.Rows[0]
["ngaynhap"]).ToShortDateString(); exRange.Range["A9:A9"].Value = "Nhân viên nhập:"; exRange.Range["B9:F9"].MergeCells = true; exRange.Range["B9:F9"].Value = tblThongtinhoadon.Rows[0]["tennv"].ToString(); exRange.Range["A10:A10"].Value = "Nhà cung cấp:"; exRange.Range["B10:F10"].MergeCells = true; exRange.Range["B10:F10"].Value = tblThongtinhoadon.Rows[0]["tenncc"].ToString(); exRange.Range["A11:A11"].Value = "Tổng tiền:"; exRange.Range["B11:F11"].MergeCells = true; exRange.Range["B11:F11"].Value = tblThongtinhoadon.Rows[0]["tongtien"].ToString(); sql = "SELECT b.tensanpham, a.soluong, a.dongia,a.thanhtien ,a.chietkhau " +
"FROM tbl_chitiethdn AS a , tbl_sanpham AS b " +
The SQL query retrieves data from tables a and b based on a specified condition The resulting dataset, tblThongtinsanpham, is formatted and displayed in an Excel range The range is formatted with bold font, centered alignment, and custom column labels The loop iterates through the rows of tblThongtinsanpham to populate the range with data.
{ exSheet.Cells[1][hang + 13] = hang + 1; for (cot = 0; cot < tblThongtinsanpham.Columns.Count; cot++)
{ exSheet.Cells[cot + 2][hang + 13] = tblThongtinsanpham.Rows[hang][cot].ToString }
} exRange = exSheet.Cells[cot][hang + 15]; exRange.Font.Bold = true; exRange.Value2 = "Tổng tiền:"; exRange = exSheet.Cells[cot + 1][hang + 15]; exRange.Font.Bold = true; exRange.Value2 = tblThongtinhoadon.Rows[0][2].ToString(); exRange = exSheet.Cells[1][hang + 16]; exRange.Range["A1:F1"].MergeCells = true; exRange.Range["A1:F1"].Font.Bold = true; exRange.Range["A1:F1"].Font.Italic = true; exRange.Range["A1:F1"].HorizontalAlignment = COMExcel.XlHAlign.xlHAlignRight; exApp.Visible = true;
STT Tên trường Kiểu dữ liệu Kích thước Khóa Giải thích
1 mahdn nvarchar 50 Khóa chính Mã hóa đơn nhập
3 manv nvarchar 10 Khóa ngoại Mã nhân viên
4 mancc nvarchar 10 Khóa ngoại Mã nhà cung cấp
Bảng 7: Bảng hóa đơn nhập
STT Tên trường Kiểu dữ liệu Kích thước Khóa Giải thích
1 mahdb nvarchar 50 Khóa chính Mã hóa đơn bán
3 manv nvarchar 10 Khóa ngoại Mã nhân viên
4 makh nvarchar 10 Khóa ngoại Mã khách hàng
Bảng 8: Bảng hóa đơn bán
Bảng Công dụng sản phẩm:
STT Tên trường Kiểu dữ liệu Kích thước Khóa Giải thích
1 macongdung nvarchar 10 Khóa chính Mã công dụng
2 tencongdung nvarchar 50 Tên công dụng
Bảng 9: Bảng công dụng sản phẩm
Bảng Chi tiết hóa đơn bán:
STT Tên trường Kiểu dữ liệu Kích thước Khóa Giải thích
1 mahdb nvarchar 50 Khóa chính Mã hóa đơn bán
2 masanpham nvarchar 10 Khóa chính Mã sản phẩm
Bảng 10: Bảng chi tiết hóa đơn bán
Bảng Chi tiết hóa đơn nhập:
STT Tên trường Kiểu dữ liệu Kích thước Khóa Giải thích
1 mahdn nvarchar 50 Khóa chính Mã hóa đơn bán
2 masanpham nvarchar 10 Khóa chính Mã sản phẩm
Bảng 11: Bảng chi tiết hóa đơn nhập
CHƯƠNG 3 GIẢI QUYẾT VẤN ĐỀ
3.1 Xây dựng Form chính cho chương trình
3.1.1 Tạo giao diện Form chính
Form được thiết kế với giao diện thân thiện, dễ sử dụng, và phản ánh đầy đủ các chức năng quan trọng như danh mục, hóa đơn và báo cáo (Khoa CNTT&KTS-Học viện Ngân hàng)
Khi mở form, người dùng sẽ được chào đón bởi một menu chính với các tùy chọn phân loại rõ ràng Trong phần "Danh mục", người dùng có thể truy cập các danh sách liệt kê như nhân viên, sản phẩm, khách hàng và nhà cung cấp Điều này giúp họ dễ dàng quản lý thông tin liên quan đến các bộ phận và đối tác quan trọng của quán (Tú, 2024)
Phần "Hóa đơn" của phần mềm quản lý quán cà phê cung cấp hai tùy chọn chính: hóa đơn bán hàng và hóa đơn nhập hàng Người dùng có thể tạo, chỉnh sửa và xem lại các hóa đơn liên quan đến doanh thu và chi phí của quán Điều này giúp họ theo dõi các giao dịch mua và bán một cách hiệu quả và chính xác.
Cuối cùng, phần "Báo cáo" cung cấp các công cụ để tạo ra các báo cáo tổng hợp và phân tích về hoạt động kinh doanh của quán Những báo cáo này có thể cung cấp thông tin chi tiết về doanh số bán hàng, lợi nhuận, cũng như các xu hướng và mô hình tiêu thụ của khách hàng.
Sửa lại một số thuộc tính của Form1 như sau:
Text Quản lý cửa hàng cafe
Icon C:\Users\Vietnam\Desktop\anhspcafe\epresso
BackgroundImage C:\Users\Vietnam\Desktop\anhspcafe\bg
Hình 2: Giao diện form chính
3.1.2 Viết mã lệnh cho Form chính
Form chính có nhiệm vụ kết nối tới cơ sở dữ liệu khi bắt đầu thực hiện dự án, đóng kết nối tới cơ sở dữ liệu khi đóng dự án và mở các form tương ứng với các mục menu. namespace quanlycafen1
{ public partial class Form1 : Form
} private void Form1_Load(object sender, EventArgs e)
} private void nhânviênToolStripMenuItem_Click(object sender, EventArgs e)
Nhanvien a = new Nhanvien(); this.Hide(); a.ShowDialog(); this.Show();
} private void hoáĐơnNhậpToolStripMenuItem_Click(object sender, EventArgs e)
{ hdn a = new hdn(); this.Hide(); a.ShowDialog();
} private void côngDụngToolStripMenuItem_Click(object sender, EventArgs e)
{ congdung a = new congdung(); this.Hide(); a.ShowDialog(); this.Show();
} private void loạiSảnPhẩmToolStripMenuItem_Click(object sender, EventArgs e)
{ loaisp a = new loaisp(); this.Hide(); a.ShowDialog(); this.Show();
} private void sảnPhẩmToolStripMenuItem_Click(object sender, EventArgs e)
{ sanpham a = new sanpham(); this.Hide(); a.ShowDialog(); this.Show();
} private void kháchHàngToolStripMenuItem_Click(object sender, EventArgs e)
{ khachhang a = new khachhang(); this.Hide(); a.ShowDialog(); this.Show();
} private void hoáĐơnToolStripMenuItem1_Click(object sender, EventArgs e)
{ frmhoadonbanhang a = new frmhoadonbanhang(); this.Hide(); a.ShowDialog(); this.Show();
} private void thoátToolStripMenuItem_Click(object sender, EventArgs e)
DialogResult a = MessageBox.Show("Bạn thức sự muốn đóng ứng dụng", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (a == DialogResult.Yes)
} private void nhàCungCấpToolStripMenuItem_Click(object sender, EventArgs e)
{ nhacungcap a = new nhacungcap(); this.Hide(); a.ShowDialog(); this.Show();
Trong cửa sổ Solution Explorer tạo một thư mục mới đặt tên là Class, kích chuột phải tại Class chọn Add/ New Item… chọn Class trong hộp thoại Add New Item và đặt tên cho class là functions.cs tại ô Name.
The code for the functions class is written as follows:To use the SQL Server object library and use the Dataset object, you must declare the 2 Data and Data.SqlClient Namespace. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; using System.Windows.Forms; using System.Data; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Math; namespace quanlycafen1
{ public static SqlConnection conn; public static string stringconn; public static void ketnoi()
{ stringconn = "Data Source=SKY-20240401VYJ\\MSSQLSERVER2;Initial Catalog=Quanlyquancafe;Integrated Security=True;Encryptse"; conn = new SqlConnection(); conn.ConnectionString = stringconn; conn.Open();
3.2 Giao diện các Form con
3.2.1 Giao diện các form Danh mục
Form nhân viên trong hệ thống quản lý quán cafe là một công cụ quan trọng giúp quản lý và theo dõi thông tin về nhân sự Giao diện của form này thường bao gồm các trường thông tin như mã nhân viên, tên nhân viên, số điện thoại, địa chỉ và các thông tin liên quan khác Người quản lý có thể thêm, sửa đổi hoặc xóa thông tin nhân viên từ form này, cũng như tạo ra các báo cáo về nhân sự để theo dõi hiệu suất làm việc và chi phí nhân viên.
Hình 3: Giao diện form nhân viên
THIẾT KẾ CƠ SỞ DỮ LIỆU MỨC KHÁI NIỆM
Sơ đồ liên kết
3.1 Xây dựng Form chính cho chương trình
3.1.1 Tạo giao diện Form chính
Giao diện biểu mẫu được tối ưu hóa với tính thân thiện và dễ thao tác, bao gồm đầy đủ các tính năng thiết yếu như danh mục, hóa đơn và báo cáo.
Khi mở form, người dùng sẽ được chào đón bởi một menu chính với các tùy chọn phân loại rõ ràng Trong phần "Danh mục", người dùng có thể truy cập các danh sách liệt kê như nhân viên, sản phẩm, khách hàng và nhà cung cấp Điều này giúp họ dễ dàng quản lý thông tin liên quan đến các bộ phận và đối tác quan trọng của quán (Tú, 2024)
Phần "Hóa đơn" cung cấp hai tùy chọn chính là hóa đơn bán và hóa đơn nhập. Người dùng có thể tạo, sửa đổi và xem lại các hóa đơn liên quan đến doanh thu và chi phí của quán Điều này giúp họ theo dõi các giao dịch mua bán một cách hiệu quả và chính xác.
Cuối cùng, phần "Báo cáo" cung cấp các công cụ để tạo ra các báo cáo tổng hợp và phân tích về hoạt động kinh doanh của quán Những báo cáo này có thể cung cấp thông tin chi tiết về doanh số bán hàng, lợi nhuận, cũng như các xu hướng và mô hình tiêu thụ của khách hàng.
Sửa lại một số thuộc tính của Form1 như sau:
Text Quản lý cửa hàng cafe
Icon C:\Users\Vietnam\Desktop\anhspcafe\epresso
BackgroundImage C:\Users\Vietnam\Desktop\anhspcafe\bg
GIẢI QUYẾT VẤN ĐỀ
Xây dựng Form chính cho chương trình
3.1.1 Tạo giao diện Form chính
Form được thiết kế với giao diện thân thiện, dễ sử dụng, và phản ánh đầy đủ các chức năng quan trọng như danh mục, hóa đơn và báo cáo (Khoa CNTT&KTS-Học viện Ngân hàng)
Khi mở form, người dùng sẽ được chào đón bởi một menu chính với các tùy chọn phân loại rõ ràng Trong phần "Danh mục", người dùng có thể truy cập các danh sách liệt kê như nhân viên, sản phẩm, khách hàng và nhà cung cấp Điều này giúp họ dễ dàng quản lý thông tin liên quan đến các bộ phận và đối tác quan trọng của quán (Tú, 2024)
Phần "Hóa đơn" bao gồm hai lựa chọn chính là hóa đơn bán hàng và hóa đơn nhập hàng Người dùng có khả năng tạo lập, chỉnh sửa và tra cứu các hóa đơn liên quan đến doanh thu và chi phí của cửa hàng Qua đó, việc theo dõi các giao dịch mua bán được thực hiện hiệu quả và chính xác hơn.
Cuối cùng, phần "Báo cáo" cung cấp các công cụ để tạo ra các báo cáo tổng hợp và phân tích về hoạt động kinh doanh của quán Những báo cáo này có thể cung cấp thông tin chi tiết về doanh số bán hàng, lợi nhuận, cũng như các xu hướng và mô hình tiêu thụ của khách hàng.
Sửa lại một số thuộc tính của Form1 như sau:
Text Quản lý cửa hàng cafe
Icon C:\Users\Vietnam\Desktop\anhspcafe\epresso
BackgroundImage C:\Users\Vietnam\Desktop\anhspcafe\bg
Hình 2: Giao diện form chính
3.1.2 Viết mã lệnh cho Form chính
Form chính có nhiệm vụ kết nối tới cơ sở dữ liệu khi bắt đầu thực hiện dự án, đóng kết nối tới cơ sở dữ liệu khi đóng dự án và mở các form tương ứng với các mục menu. namespace quanlycafen1
{ public partial class Form1 : Form
} private void Form1_Load(object sender, EventArgs e)
} private void nhânviênToolStripMenuItem_Click(object sender, EventArgs e)
Nhanvien a = new Nhanvien(); this.Hide(); a.ShowDialog(); this.Show();
} private void hoáĐơnNhậpToolStripMenuItem_Click(object sender, EventArgs e)
{ hdn a = new hdn(); this.Hide(); a.ShowDialog();
} private void côngDụngToolStripMenuItem_Click(object sender, EventArgs e)
{ congdung a = new congdung(); this.Hide(); a.ShowDialog(); this.Show();
} private void loạiSảnPhẩmToolStripMenuItem_Click(object sender, EventArgs e)
{ loaisp a = new loaisp(); this.Hide(); a.ShowDialog(); this.Show();
} private void sảnPhẩmToolStripMenuItem_Click(object sender, EventArgs e)
{ sanpham a = new sanpham(); this.Hide(); a.ShowDialog(); this.Show();
} private void kháchHàngToolStripMenuItem_Click(object sender, EventArgs e)
{ khachhang a = new khachhang(); this.Hide(); a.ShowDialog(); this.Show();
} private void hoáĐơnToolStripMenuItem1_Click(object sender, EventArgs e)
{ frmhoadonbanhang a = new frmhoadonbanhang(); this.Hide(); a.ShowDialog(); this.Show();
} private void thoátToolStripMenuItem_Click(object sender, EventArgs e)
DialogResult a = MessageBox.Show("Bạn thức sự muốn đóng ứng dụng", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (a == DialogResult.Yes)
} private void nhàCungCấpToolStripMenuItem_Click(object sender, EventArgs e)
{ nhacungcap a = new nhacungcap(); this.Hide(); a.ShowDialog(); this.Show();
Trong cửa sổ Solution Explorer tạo một thư mục mới đặt tên là Class, kích chuột phải tại Class chọn Add/ New Item… chọn Class trong hộp thoại Add New Item và đặt tên cho class là functions.cs tại ô Name.
Mã lệnh của lớp functions được viết như sau: Để sử dụng thư viện các đối tượng của SQL Server và sử dụng đối tượng Dataset ta phải khai báo 2 Namespace Data và Data.SqlClient. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; using System.Windows.Forms; using System.Data; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Math; namespace quanlycafen1
{ public static SqlConnection conn; public static string stringconn; public static void ketnoi()
{ stringconn = "Data Source=SKY-20240401VYJ\\MSSQLSERVER2;Initial Catalog=Quanlyquancafe;Integrated Security=True;Encryptse"; conn = new SqlConnection(); conn.ConnectionString = stringconn; conn.Open();
Giao diện các Form con
3.2.1 Giao diện các form Danh mục
Form nhân viên trong hệ thống quản lý quán cafe là một công cụ quan trọng giúp quản lý và theo dõi thông tin về nhân sự Giao diện của form này thường bao gồm các trường thông tin như mã nhân viên, tên nhân viên, số điện thoại, địa chỉ và các thông tin liên quan khác Người quản lý có thể thêm, sửa đổi hoặc xóa thông tin nhân viên từ form này, cũng như tạo ra các báo cáo về nhân sự để theo dõi hiệu suất làm việc và chi phí nhân viên.
Hình 3: Giao diện form nhân viên
Form khách hàng trong hệ thống quản lý quán cafe là một công cụ quan trọng để theo dõi và quản lý thông tin về khách hàng Giao diện của form này thường bao gồm các trường thông tin như tên, số điện thoại, địa chỉ, email, và các thông tin liên quan khác. Người quản lý có thể thêm mới, chỉnh sửa hoặc xóa thông tin khách hàng từ form này. Ngoài ra, form khách hàng cũng có thể được sử dụng để tạo ra các báo cáo về hành vi mua hàng của khách hàng và phân tích thị trường.
Hình 4: Giao diện form khách hàng
Form sản phẩm trong hệ thống quản lý của quán cafe là một công cụ quan trọng, giúp quản lý thông tin về các mặt hàng được bày bán Giao diện của form này thường bao gồm các trường thông tin như tên sản phẩm, giá cả, số lượng và thông tin về nhà cung cấp. Người quản lý có thể dễ dàng thêm, chỉnh sửa hoặc xoá thông tin sản phẩm từ form này. Ngoài ra, form sản phẩm cũng cung cấp các công cụ để tạo ra báo cáo về tình trạng tồn kho và doanh số bán hàng, giúp quản lý hiểu rõ hơn về hoạt động kinh doanh của quán.
Hình 5: Giao diện form sản phẩm
Form nhà cung cấp trong hệ thống quản lý của quán cafe là một phần quan trọng, giúp quản lý thông tin về các đối tác cung cấp nguyên liệu và dịch vụ Giao diện của form này cung cấp các trường thông tin như tên nhà cung cấp, địa chỉ, thông tin liên hệ và các thông tin khác cần thiết Quản lý có thể dễ dàng quản lý và cập nhật thông tin từ form này
Hình 6: Giao diện form nhà cung cấp
3.2.2 Giao diện các form Hóa đơn
Hóa đơn nhập là văn bản quan trọng ghi lại thông tin chi tiết về giao dịch mua hàng hóa, dịch vụ từ nhà cung cấp Nó đóng vai trò thiết yếu trong việc quản lý hàng tồn kho, kiểm soát chi phí và đảm bảo tính minh bạch cho hoạt động kinh doanh.
Hình 7: Giao diện hóa đơn nhập
Hóa đơn bán hàng đóng vai trò quan trọng trong việc ghi chép giao dịch bán hàng hóa, dịch vụ cho khách hàng Nó cung cấp thông tin chi tiết về giao dịch, giúp doanh nghiệp quản lý doanh thu, thanh toán, thuế một cách hiệu quả và minh bạch.
Hình 8: Giao diện hóa đơn bán
3.2.3 Giao diện các form Tìm kiếm
Việc thêm một chức năng tìm kiếm cho hóa đơn nhập sẽ giúp người dùng dễ dàng tìm nhanh thông tin cần thiết về giá trị tổng tiền của mỗi hóa đơn nhập Đồng thời, thông qua tính năng này, họ cũng có thể xác định được nhà cung cấp và nhân viên liên quan đến từng hóa đơn Điều này giúp tối ưu hóa quy trình quản lý và tra cứu thông tin trong hệ thống, giảm thiểu thời gian tìm kiếm và nâng cao hiệu suất làm việc.
Hình 9: Giao diện form tìm kiếm hóa đơn nhập
Tương tự cho hóa đơn bán:
Hình 10: Giao diện form tìm kiếm hóa đơn bán
3.2.4 Giao diện form Báo cáo
Báo cáo nhập hàng là yếu tố thiết yếu trong quản lý doanh nghiệp, cung cấp cái nhìn toàn diện về quá trình nhập hàng vào kho Theo dõi hóa đơn nhập cho phép doanh nghiệp kiểm soát tồn kho, đánh giá nhà cung cấp và kiểm soát chi phí Báo cáo còn giúp phát hiện sớm vấn đề trong quy trình nhập hàng, tối ưu hóa chuỗi cung ứng và cải thiện hiệu suất kinh doanh Ngoài ra, nó hỗ trợ tuân thủ các quy định pháp lý liên quan đến quản lý hàng hóa.
Hình 11: Giao diện báo cáo nhập hàng
Tạo báo cáo xuất hàng là một phần không thể thiếu trong quản lý hoạt động kinh doanh, bởi nó cung cấp cái nhìn tổng quan về việc xuất hàng ra khỏi kho Theo dõi các hoá đơn xuất giúp doanh nghiệp hiểu rõ lượng hàng tiêu thụ, đánh giá hiệu suất của sản phẩm, và phản ứng nhanh chóng đối với nhu cầu thị trường Báo cáo này không chỉ giúp quản lý tồn kho mà còn hỗ trợ trong việc định hình chiến lược bán hàng, tối ưu hóa quá trình cung ứng, và tăng cường sự hài lòng của khách hàng Đồng thời, việc thực hiện báo cáo xuất hàng cũng đóng vai trò quan trọng trong việc tuân thủ các quy định pháp lý liên quan đến vận chuyển và giao nhận hàng hóa.
Hình 12: Giao diện báo cáo bán hàng
Tạo báo cáo doanh thu là một phần không thể thiếu trong quá trình quản lý kinh doanh, bởi nó cung cấp cái nhìn tổng quan về lượng thu nhập mà doanh nghiệp thu được từ việc bán hàng hoặc cung cấp dịch vụ Báo cáo này giúp đánh giá hiệu suất kinh doanh, xác định nguồn thu chính và nhìn nhận được xu hướng tăng trưởng trong thời gian Nó cũng hỗ trợ quản lý trong việc đưa ra các quyết định chiến lược, điều chỉnh chiến lược tiếp thị và quảng cáo, cũng như định hình chiến lược giá cả sản phẩm và dịch vụ Bằng cách này, báo cáo doanh thu không chỉ là công cụ quan trọng để đo lường hiệu suất kinh doanh mà còn là hướng dẫn trong việc phát triển và tối ưu hóa hoạt động kinh doanh.
Hình 13: Giao diện báo cáo doanh thu
Form xử lý yêu cầu bài toán
3.3.1 Số lượng trong bảng Sản phẩm tự động cập nhật khi nhập hàng
Yêu cầu: Số lượng trong bảng Sản phẩm được tự động cập nhật khi nhập hàng Giải quyết: Khi thêm 1 sản phẩm mới vào trong bảng sản phẩm thì ban đầu mặc định số lượng của sản phẩm được thêm đó bằng 0 và không được chỉnh sửa chỉ khi nhập hàng và nhập vào dữ liệu vào hoá đơn nhập thì số lượng của sản phẩm sẽ tự động được cập nhật từ hoá đơn nhập cụ thể.
Tăng số lượng sản phẩm khi thêm dữ liệu vào hoá đơn nhập
Ban đầu khi thêm sản phẩm thì số lượng tất cả sản phẩm bằng 0 vì chưa có hoá đơn nhập nào.
Hình 14: Giao diện form sản phẩm khi mới thêm
Sau khi nhập, nhân viên sẽ tiến hành nhập vào các thông tin theo form hóa đơn nhập:
Hình 15: Giao diện hóa đơn nhập sau khi thêm mới
Sau khi thêm dữ liệu vào hoá đơn nhập thì số lượng sản phẩm của bảng sản phẩm sẽ tự động cập nhật dưới đây là kết quả:
Hình 16: Kết quả số lượng trong bảng sản phẩm được cập nhập
Code xử lý: if(funtion.CheckKey("select mahdn,masanpham from tbl_chitiethdn where mahdn=N'" + txtmahdn.Text + "' and masanpham='" + cbbmasanpham.Text + "'"))
MessageBox.Show("đã có mã hoá đơn và mã sản phẩm này hãy thay đơn hoặc mã sản phẩm ","Thông báo ",MessageBoxButtons.OK, MessageBoxIcon.Error); cbbmasanpham.SelectedIndex = -1; return;
} else { decimal tt = Convert.ToInt32(txtsoluong.Text) * Convert.ToInt32(txtdongianhap.Text); sql = "insert into tbl_chitiethdn values(N'" + txtmahdn.Text + "',N'" + cbbmasanpham.Text + "','" + txtsoluong.Text + "','" + txtdongianhap.Text + "','" + tt + "','" + txtck.Text + "')"; funtion.RunSql(sql); sql = "update tbl_sanpham set gianhap =" + txtdongianhap.Text + ",giab
="+txtdongianhap.Text+"*1.1 ,soluong= soluong+"+ txtsoluong.Text+" where masanpham
='"+cbbmasanpham.Text+"'"; funtion.RunSql(sql);
Giảm số lượng khi xóa một dòng dữ liệu trong hóa đơn nhập
Nếu mã sản phẩm trên hóa đơn nhập không chính xác, chẳng hạn như nhập sai mã hoặc mã không tồn tại, cần phải xóa mã sản phẩm đó để ngăn ngừa việc sai sót dữ liệu.
Hình 17: Giao diện khi xóa 1 hóa đơn
Sau khi xoá 1 dữ liệu trong hóa đơn nhập thì số lượng của mã sản phẩm có trong dữ liệu đó cũng sẽ tự động bị giảm ở trong bảng sản phẩm:
Hình 18: Số lượng của mã sản phẩm SP08 tự động bị giảm
Code xử lý trong event double click datagridview:
DialogResult a = MessageBox.Show("Bạn chắc chắn muốn xoá dữ liệu này","Thông báo",MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (a == DialogResult.Yes)
{ string sql; sql = "update tbl_sanpham set soluong= soluong -" + txtsoluong.Text + " where masanpham=N'" + cbbmasanpham.Text + "'"; funtion.RunSql(sql);
Giảm dữ liệu khi xóa một hóa đơn nhập
Trong quá nhập hóa đơn nhập có thông tin sai sót như tên nhà cung cấp, tên hàng hóa/dịch vụ, số lượng, đơn giá, thành tiền, v.v., cần lập hóa đơn nhập mới để sửa chữa thông tin chính xác và xóa hóa đơn sai.
Hình 19: Giao diện khi xóa 1 hóa đơn nhập
Kết quả nhận đươc sau khi xóa một hóa đơn nhập là tất cả số lượng tương ứng với các mã sản phẩm ở trong hóa đơn đã chọn tự động giảm tương ứng.
Hình 20: Số lượng sản phẩm tự động giảm khi xoá cả hoá đơn
Code xử lý trong event click xoá hoá đơn trong form hoá đơn nhập: string sql;
DataTable trusoluong = funtion.GetDataToTable("SELECT masanpham, soluong FROM tbl_chitiethdn WHERE mahdn=N'" + cbbmahdn.Text + "'"); foreach (DataRow row in trusoluong.Rows)
{ string masanpham = row["masanpham"].ToString(); float soluong = Convert.ToSingle(row["soluong"]); sql = "UPDATE tbl_sanpham SET soluong = soluong - " + soluong + " WHERE masanpha
3.3.2 Số lượng trong bảng Sản phẩm tự động cập nhật khi bán hàng
Giảm số lượng sản phẩm khi thêm dữ liệu vào hoá đơn bán
Sản phẩm trong kho khi chưa có hóa đơn bán:
Hình 21: Số lượng ban đầu khi chưa có hóa đơn bán
Thêm dữ liệu vào hóa đơn bán:
Hình 22: Giao diện khi thêm hóa đơn bán
Hình 23: Kết quả số lượng sản phẩm tự động giảm
Code xử lý trong enven clicl button lưu form hoá đơn bán: double SLcon
SLcon = sl - Convert.ToDouble(txtsoluong.Text); sql = "UPDATE tbl_sanpham SET soluong =" + SLcon + " WHERE masanpham= N'" + cbbmasanpham.SelectedValue + "'"; funtion.RunSql(sql);
Tăng số lượng sản phẩm khi xoá một dữ liệu từ hoá đơn bán
Xóa một dữ liệu trong hóa đơn bán:
Hình 24: Giao diện khi xóa một dữ liệu trong hóa đơn bán
Kết quả thu được là số lượng của mã sản phẩm bị xóa trong bảng sản phẩm tăng lên.
Hình 25: Kết quả sau khi xóa một dữ liệu trong hóa đơn bán
Code xử lý event Celldoubleclick datagridview trong form hoá đơn bán: private void DelHang(string mahdb, string masanpham)
Double s, sl, SLcon; string sql; sql = "SELECT soluong FROM tbl_chitiethoadonban WHERE mahdb = N'" + mahdb + "' A masanpham = N'" + masanpham + "'"; s = Convert.ToDouble(funtion.GetFieldValues(sql)); sql = "DELETE From tbl_chitiethoadonban WHERE mahdb=N'" + mahdb + "' AND masanpham = N'" + masanpham + "'"; funtion.RunSql(sql); sql = "SELECT soluong FROM tbl_sanpham WHERE masanpham = N'" + masanpham + "'"; sl = Convert.ToDouble(funtion.GetFieldValues(sql));
SLcon = sl + s; sql = "UPDATE tbl_sanpham SET soluong =" + SLcon + " WHERE masanpham= N'" + masanpham + "'"; funtion.RunSql(sql);
} private void dtgrvchitiet_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
Double Thanhtien; if (tblHDB.Rows.Count == 0)
MessageBox.Show("Không có dữ liệu!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information); return;
36 if ((MessageBox.Show("Bạn có chắc chắn muốn xóa không?", "Thông báo",MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes))
//Xóa hàng và cập nhật lại số lượng hàng masanpham = dtgrvchitiet.CurrentRow.Cells["masanpham"].Value.ToString(); DelHang(txtmahoadon.Text, masanpham)
Tăng số lượng sản phẩm khi một hoá đơn bán
Chọn một hóa đơn bán cần xóa:
Hình 26: Giao diện khi xóa một hóa đơn bán
Hình 27: Kết quả số lượng sản phẩm tăng lên khi xóa một hóa đơn bán
Code xử lý event click huỷ hoá đơn trong form hoá đơn bán: if (MessageBox.Show("Bạn có chắc chắn muốn xóa không?", "Thông báo",MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{ string[] masanpham = new string[20]; string sql; int n = 0; int i; sql = "SELECT masanpham FROM tbl_chitiethoadonban WHERE mahdb = N'" + txtmahoadon.Text + "'";
SqlCommand cmd = new SqlCommand(sql, funtion.conn);
SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read())
} reader.Close(); for (i = 0; i DateTime.ParseExact(mskdenngay.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture))
MessageBox.Show("Ngày bắt đầu phải nhỏ hơn ngày kết thúc", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error); mskdenngay.Text = ""; msktungay.Text = ""; return;
} sql = sql + "and (ngaynhap between'" + funtion.ConvertDateTime(msktungay.Text) + "' and '"+funtion.ConvertDateTime(mskdenngay.Text)+"')";
44 sql = sql + " and tenncc =N'" + cbbncc.Text + "'";
{ sql = sql + "and tennv=N'" + cbbnhanviennhap.Text + "'";
} load_datagrvid(sql); sql1 = " where 1=1"; if (cbbmahdn.SelectedValue != null)
{ sql1 = sql1 + " and mahdn=N'" + cbbmahdn.Text + "' ";
{ sql1 = sql1 + " and tensanpham =N'" + cbbtensp.Text + "'";
{ sql1 = sql1 + " and dongia =" + txtdongianhap.Text + "";
{ if (!funtion.IsDate(mskngaynhap.Text))
MessageBox.Show("Hãy nhập lại ngày nhập", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error); mskngaynhap.Focus(); mskngaynhap.Text = ""; return;
} sql1 = sql1 + "and ngaynhap='" + funtion.ConvertDateTime(mskngaynhap.Text) + "'"; } if (msktungay.Text != " / /" && mskdenngay.Text != " / /")
{ if (!funtion.IsDate(mskdenngay.Text))
MessageBox.Show("Hãy nhập lại đến ngày", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error); mskdenngay.Focus(); mskdenngay.Text = ""; return;
} if (!funtion.IsDate(msktungay.Text))
MessageBox.Show("Hãy nhập lại tu ngày ", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error); msktungay.Focus(); msktungay.Text = ""; return;
} if (DateTime.ParseExact(msktungay.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture) > DateTime.ParseExact(mskdenngay.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture))
MessageBox.Show("Ngày bắt đầu phải nhỏ hơn ngày kết thúc", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error); mskdenngay.Text = ""; msktungay.Text = ""; return;
} sql1 = sql1 + "and (ngaynhap between'" + funtion.ConvertDateTime(msktungay.Text) + "' and '" + funtion.ConvertDateTime(mskdenngay.Text) + "')";
{ sql1 = sql1 + " and tenncc =N'" + cbbncc.Text + "'";
{ sql1 = sql1 + "and tennv=N'" + cbbnhanviennhap.Text + "'";
} load_datagrvidsp("select tensanpham, sum(soluong) from dsnhap " + sql1 + " group by tensanpham"); if (tbhdn.Rows.Count == 0)
MessageBox.Show("Không có dữ liệu cần tìm", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error); load_datagrvid("select*from dsnhap"); reset(); return;
Ngoài việc tìm kiếm linh hoạt, việc in báo cáo và hiển thị thông tin cũng là hai yếu tố không thể thiếu trong quản lý nhập hàng Các chức năng này cung cấp cách thức hiệu quả để trực quan hóa và chia sẻ thông tin, giúp cải thiện quá trình ra quyết định và tối ưu hóa hoạt động kinh doanh In báo cáo cho phép người dùng tạo ra các tài liệu trực quan và dễ hiểu từ dữ liệu về hàng nhập, từ đó giúp họ thấy rõ hình ảnh về tình hình cung ứng và lưu trữ thông tin một cách dễ dàng Các báo cáo này có thể bao gồm thông tin chi tiết về đơn hàng, nhà cung cấp, sản phẩm, số lượng, giá cả, và các thông tin khác để phục vụ nhu cầu quản lý. Để in ra được kết quả là bảng excel này thì người dùng sẽ kích chọn button in báo cáo. Tại báo cáo này, ngoài việc xem được các thông tin cơ bản của hóa đơn nhập thì còn xem được số lượng của sản phẩm nhập nào là nhiều nhât.
Hình 34: Kêt quả in báo cáo nhập hàng
COMExcel.Application exApp = new COMExcel.Application();
COMExcel.Range exRange; string sql; int hang = 0, cot = 0;