CHƯƠNG I CƠ SỞ LÝ THUYẾT CỦA ĐỀ TÀI 1. Phương pháp nghiên cứu Tìm hiểu thực tế Thu thập các tài liệu liên quan đến việc quản lý bán máy tính. Dựa vào công cụ hỗ trợ để xây dựng chương trình mới. Cơ sở lý thuyết Dựa trên adonet, sql sever và windowform.
7 CHƯƠNG II KHẢO SÁT PHÂN TÍCH THIẾT KẾ HỆ THỐNG 1.1 Biểu đồ usecase STT Actor Use Case Quản lý Đăng nhập Quản lý hàng hóa Quản lý nhóm hàng Quản lý phiếu nhập Quản lý phiếu bán 8 1.1 Usecase “Tổng quát hệ thống ” Tóm tắt - Người quản lý phải đăng nhập để thực hiện công việc quản lý của mình, quản lý thông tin máy tính, hóa đơn, nhà cung cấp, thêm, sửa, xóa thông tin. Dòng sự kiện - Dòng sự kiện chính Quản lý hàng hóa: Quản lý tất cả các thông tin liên quan đến hàng hóa của cửa hàng. Quản lý nhóm hàng: Quản lý các loại sản phẩm của cửa hàng Quản lý phiếu nhập: Quản lý các thông tin về hóa đơn nhập máy tính và nhà cung cấp. Quản lý phiếu bán: Quản lý các thông tin về hóa đơn bán hàng và thông tin khách hàng Nếu không đăng nhập thì không thể thực hiện các chức năng bên trong hệ thống.
- Các yêu cầu đặc biệt Bắt buộc người quản lý phải có tài khoản để đăng nhập vào hệ thống. - Trạng thái hệ thống bắt đầu khi thực hiện các use case 1.2 Use case “Đăng nhập” Tóm tắt: Chức năng này cho phép người dùng đăng nhập vào hệ thống để sử dụng các chức năng của chương trình. Dòng sự kiện: - Dòng sự kiện chính: Usecase này bắt đầu khi người sử dụng chạy chương trình. Hệ thống sẽ kiểm tra tính hợp lệ của Tài Khoản và Mật khẩu.
Nếu đúng sẽ đưa ra thông báo thành công và 9 hiện màn hình giao diện chính của chương. Ngược lại, sẽ đưa ra thông báo lỗi và yêu cầu người dùng Đăng nhập lại. - Dòng sự kiện phụ: Nếu người dùng nhấn vào nút “Thoát”, usecase kết thúc. Form được đóng lại.
- Các yêu cầu đặc biệt: không có - Điều kiện bổ sung: Nếu người dùng chưa nhập giá trị gì vào Username và Password mà nhấn chuột vào nút đăng nhập thì coi trường hơp Tên đăng nhập và Mật khẩu là không hợp lệ.3 Usecase “ Quản lý thông tin hàng hóa” và “ Quản lý thông tin nhóm hàng” Tóm tắt: - Chức năng này cho phép người dùng quản lý các thông tin của các loại hàng hóa trong cửa hàng. Dòng sự kiện: - Dòng sự kiện chính: Khi nhập xong thì nhấn nút “Thêm” thì toàn bộ các thông tin của máy tính được load lên DataGridview và đồng thời được lưu vào trong cơ sở dữ liệu. Nếu muốn “ Sửa ” thông tin của máy tính nào thì ta chỉ cần chọn nhân viên đó trên DataGridview khi đó thông tin được load trở lại các ô textbox và Combobox và người dùng có thể sửa thông tin. Tương tự như vậy với chức năng “Xoá” ta chỉ cần chọn máy tính cần xóa trên DataGridview và nhấn vào nút xóa thì sẽ xóa được thông tin của sản phẩm đó.
- Dòng sự kiện phụ: Nút “Thoát” dùng khi người dùng muốn thoát chương trình. - Các yêu cầu đặc biệt: Không có - Điều kiện tiên quyết: Người dùng chạy chương trình và phải đăng nhập thành công. - Điều kiện bổ sung: 11 Người dùng phải nhập đầy đủ các thông tin trên ô textbox và Combobox, chú ý số số lượng và đơn giá thì chỉ được nhập số.4 Usecase “Quản lý hàng hóa bán” Tóm tắt: Chức năng này cho phép người dùng quản lý các thông tin về hóa đơn bán và chi tiết hóa đơn bán. Dòng sự kiện: - Dòng sự kiện chính: Các thông tin về hóa đơn được lưu trên các ô textbox, combobox, thông tin bao gồm mã hóa đơn bán, tên KH, Email, địa chỉ, ngày bán, số điện thoại, tổng tiền, đã thu tiền hay chưa.
Khi nhập xong thì nhấn nút ” Thêm ” thì toàn bộ các thông tin về mã hóa đơn,ngày tháng,tổng tiền được load lên DataGridview và đồng thời được lưu vào trong cơ sở dữ liệu. Nếu muốn “Sửa” thông tin hóa đơn nào thì ta chỉ cần chọn hóa đơn đó trên DataGridview khi đó thông tin được load trở lại các ô textbox và người dùng có thể sửa thông tin. Tương tự như vậy với chức năng “Xoá” ta chỉ cần chọn hóa đơn cần xóa trên DataGridview và nhấn vào nút xóa thì sẽ xóa được thông tin của hóa đơn đó. Khi chọn 1 hóa đơn trong DataGridview rồi nhập nút “Chi Tiết” sẽ hiện thị ra chi tiết hóa đơn tương ứng.
Các thông tin về chi tiết hóa đơn được hiển thị qua textbox, combobox. Thông tin bao gồm: mã hóa đơn bán, tên hàng, số lượng, giá bán và bảo hành. Ngoài ra còn có buttom “Thêm - Sửa - Xóa” chức năng tương tự như mô tả trên 12 - Dòng sự kiện phụ: Nút “Thoát” dùng khi người dùng muốn thoát chương trình. - Các yêu cầu đặc biệt: Không có - Điều kiện tiên quyết: Nhân viên chạy chương trình và phải đăng nhập thành công.
- Điều kiện bổ sung: Người dùng phải nhập đầy đủ các thông tin trên ô textbox và combobox.5 Usecase “Quản lý hóa đơn nhập” Tóm tắt: Chức năng này cho phép người dùng quản lý các thông tin về hóa đơn bán và chi tiết hóa đơn bán. Dòng sự kiện: - Dòng sự kiện chính: Các thông tin về hóa đơn được lưu trên các ô textbox, combobox, thông tin bao gồm mã hóa đơn nhập, tên nhà cung cấp, địa chỉ, ngày nhập, số điện thoại. Khi nhập xong thì nhấn nút ” Thêm ” thì toàn bộ các thông tin về mã hóa đơn,ngày tháng,tổng tiền được load lên DataGridview và đồng thời được lưu vào trong cơ sở dữ liệu. 13 Nếu muốn “Sửa” thông tin hóa đơn nào thì ta chỉ cần chọn hóa đơn đó trên DataGridview khi đó thông tin được load trở lại các ô textbox và người dùng có thể sửa thông tin.
Tương tự như vậy với chức năng “Xoá” ta chỉ cần chọn hóa đơn cần xóa trên DataGridview và nhấn vào nút xóa thì sẽ xóa được thông tin của hóa đơn đó. Khi chọn 1 hóa đơn trong DataGridview rồi nhập nút “Chi Tiết” sẽ hiện thị ra chi tiết hóa đơn tương ứng. Các thông tin về chi tiết hóa đơn được hiển thị qua textbox, combobox. Thông tin bao gồm: mã hóa đơn nhập, tên hàng, số lượng, giá.
Ngoài ra còn có buttom “Thêm - Sửa - Xóa” chức năng tương tự như mô tả trên - Dòng sự kiện phụ: Nút “Thoát” dùng khi người dùng muốn thoát chương trình. - Các yêu cầu đặc biệt: Không có - Điều kiện tiên quyết: Nhân viên chạy chương trình và phải đăng nhập thành công. - Điều kiện bổ sung: Người dùng phải nhập đầy đủ các thông tin trên ô textbox và combobox. 14 CHƯƠNG III: THIẾT KẾ CƠ SỞ DỮ LIỆU 1.
Bảng Hàng Bán Hình 1-1. Bảng Hàng Hóa 15 Hình 1-2. Bảng Hàng Nhập Hình 1-3. Bảng hàng nhập 4.
Bảng Hóa Đơn Bán Hàng Hình 1-4. Bảng Hóa Đơn Nhập Hàng Hình 1-5. Bảng hóa đơn nhập hàng. Bảng Khách Hàng 16 Hình 1-6.
Bảng khách hàng 7. Bảng Nhà Cung Cấp Hình 1-7. Bảng nhà cung cấp 8. Bảng Nhóm Hàng Hình 1-8.
Bảng nhóm hàng 9. Database Diagrams 17 Hình 1-9. Sơ đồ liên kết Diagram CHƯƠNG VI: THIẾT KẾ GIAO DIỆN VÀ CODE 1. Giao diện form đăng nhập hệ thống: - Người dùng điền thông tin tài khoản vào ô Texbox.
Sau đó nhấn Đăng nhập. nếu Tài khoản, Mật khẩu đúng, sẽ chuyển đến Form Main tiếp theo. Form Đăng nhập Mã lệnh kết nối đến cơ sở dữ liệu: using System.Data; using System.SqlClient; using System; using System.Generic; using System.Linq; using System.Text; using System.Tasks; namespace Quanlicongtymaytinh_02 { class DataProvider 19 { private string connectString = @"Data Source=DESKTOP-A7J0RIH;Initial Catalog=QLCT_MayTinh_01;Integrated Security=True"; public DataTable execQuery(string query) { DataTable data = new DataTable(); using (SqlConnection con = new SqlConnection(connectString)) { con.Open(); SqlCommand cmd = new SqlCommand(query, con); data = cmd.Open(); SqlCommand cmd = new SqlCommand(query, con); data = cmd.Close(); } return data; } } } 21 Mã lệnh đăng nhập hệ thống: public partial class FormLogin : Form { private DataProvider dataProvider = new DataProvider(); public FormLogin() { InitializeComponent(); } private void bt1Login_Click(object sender, EventArgs e) { string username = tb0TenDangNhap.Text; string password = tb0MatKhau.Text; string query = $"SELECT COUNT(1) FROM tblTaikhoan WHERE Username = N'{username}' AND Password = N'{password}'"; object result = dataProvider.execScaler(query); if (Convert.Show(); } else { MessageBox.Show("Login Failed. Please check your username and password.
Giao diện form Hàng Hóa: Hình 2-2. Form quản lý hàng hóa * Mã lệnh load dữ liệu lêm form: private void loadtbHangHoa() { DataTable dt = new DataTable(); StringBuilder query = new StringBuilder("select "); query.Append(" where tblHanghoa.NhomHangID;"); dt = dataProvider.DataSource = dt; // Ẩn cột dgHangHoa.Visible = false; //dgHangHoa.Visible = false; } // Xuất nhóm hàng ra combobox private void loadDgHangHoa() { DataTable dt = new DataTable(); dt = dataProvider.execQuery("select * from tblnhomhang"); cbb1NhomHang.DisplayMember = "TenNhom"; cbb1NhomHang.ValueMember = "NhomHangID"; cbb1NhomHang.DataSource = dt; } 24 // Hiển thị cột private void dgHangHoa_CellClick(object sender, DataGridViewCellEventArgs e) { int rowID = e.RowIndex; if (rowID < 0) rowID = 0; if (rowID == dgHangHoa.RowCount - 1) rowID = rowID - 1; DataGridViewRow row = dgHangHoa.Rows[rowID]; tb1HangHoa.ToString(); cbb1NhomHang.ToString(); tb1GiaBan.ToString(); tb1MauSac.ToString(); tb1SoLuong.ToString(); tb1DacDiem.ToString(); tb1MaHangHoa.Append(" @TenHang = N'" + tb1HangHoa.Append(" @TenNhom = N'" + cbb1NhomHang.Append(" @MauSac = N'" + tb1MauSac.Append(" @DacTinhKyThuat = N'" + tb1DacDiem.Append(" @SoLuongTonKho = " + tb1SoLuong.Append(" @GiaSanPham = " + tb1GiaBan.Text + ""); int result = dataProvider.Show("Thêm linh kiện thành công !", "Thành Công", MessageBoxButtons.Asterisk); } else { MessageBox.Show("Thêm linh kiện không thành công !", "Không thành Công", MessageBoxButtons.Error); } } 26 * Mã lệnh sửa hàng hóa // Sửa tab_hanghoa private void bt1Sua_Click(object sender, EventArgs e) { StringBuilder query = new StringBuilder("EXEC sp_UpdateHanghoa"); query.Append(" @HangHoaID = " + tb1MaHangHoa.Append(" @TenHang = N'" + tb1HangHoa.Append(" @TenNhom = N'" + cbb1NhomHang.Append(" @MauSac = N'" + tb1MauSac.Append(" @DacTinhKyThuat = N'" + tb1DacDiem.Append(" @SoLuongTonKho = " + tb1SoLuong.Append(" @GiaSanPham = " + tb1GiaBan.Text + ""); int result = dataProvider.Show("Sửa linh kiện thành công !", "Thành Công", MessageBoxButtons.Asterisk); } 27 else { MessageBox.Show("Sửa linh kiện không thành công !", "Không thành Công", MessageBoxButtons.Error); } } * Mã xóa Hàng Hóa // Xóa tab_hanghoa private void bt1Xoa_Click(object sender, EventArgs e) { StringBuilder query = new StringBuilder("EXEC sp_XoaSanPham"); query.Append(" @HangHoaID = " + tb1MaHangHoa.Text + " "); int result = dataProvider.Show("Xóa linh kiện thành công !", "Thành Công", MessageBoxButtons.Asterisk); } else { MessageBox.Show("Xóa linh kiện không thành công !", "Không thành Công", MessageBoxButtons. Giao diện form Quản lí Nhóm Hàng Hình 2-3.Giao diện form Quản lý Nhóm Hàng 29 * Mã lệnh load dữ liệu lêm form: private void loadDgNhomHang() { DataTable dt = new DataTable(); StringBuilder query = new StringBuilder("select NhomHangID as [Mã Nhóm Hàng]"); query.Append(" where tblHanghoa.NhomHangID;"); dt = dataProvider.DataSource = dt; } private void dgNhomHang_CellClick(object sender, DataGridViewCellEventArgs e) { int rowID = e.