Professional Documents
Culture Documents
LỜI CẢM ƠN
Em xin chân thành cảm ơn quý thầy, cô trong khoa CNTT, Bộ môn Tin học Mỏ
trường Đại Học Mỏ-Địa chất đã tận tình giảng dạy, truyền đạt những kiến thức quý
báu và tạo điều kiện cho em thực hiện đồ án này. Trong quá trình làm đồ án tốt
nghiệp, cũng như là trong quá trình làm bài báo cáo, khó tránh khỏi sai sót, rất
mong nhận được những ý kiến đóng góp của thầy, cô và các bạn để đồ án tốt nghiệp
của em ngày một hoàn thiện hơn.
Dưới sự hướng dẫn và chỉ đạo tận tình của thầy giáo Đặng Văn Nam đã giúp em
hoàn thành đồ án tốt nghiệp này. Trong thời gian làm việc với thầy, em không
ngừng tiếp thu thêm nhiều kiến thức bổ ích mà còn học tập được tinh thần làm việc,
thái độ nghiên cứu khoa học nghiêm túc, hiệu quả, đây là những điều rất cần thiết
cho em trong quá trình học tập và công tác sau này. Em xin chân thành cảm ơn thầy
đã chỉ bảo tận tình giúp em hoàn thành đồ án tốt nghiệp trong thời gian qua.
Xin chân thành cám ơn sự giúp đỡ của anh Đặng Văn Bắc và gia đình đã hỗ trợ,
cung cấp tài liệu liên quan và tạo điều kiện để em có thể tìm hiểu sâu sát nghiệp vụ
bán hàng nói riêng và bài toán quản lý bán hàng nói chung.
Qua đây xin chân thành cám ơn sự động viên của gia đình cũng như sự giúp đỡ tận
tình của tất cả các bạn đã tạo điều kiện thuận lợi cho tôi trong cuộc sống cũng như
trong học tập.
Sinh viên thực hiện
Vũ Văn Lịch
MỤC LỤC
LỜI MỞ ĐẦU
Ra đời vào những năm 50 của thế kỷ XX máy tính và công nghệ đã có những bước
phát triển vượt bậc về cả chất lượng và số lượng. Nó đã trở thành một nhân tố
không thể thiếu trong đời sống hiện đại của nhân loại trong thời đại hiện nay- thời
đại công nghệ số.
Ngày nay cùng với sự phát triển của khoa học công nghệ, công nghệ thông tin đã
trở thành một phần không thể thiếu trong mọi lĩnh vực hoạt động đời sống của con
người. Đặc biệt tại các nước phát triển thì tin học đã được đưa vào ứng dụng trong
quản lí từ rất lâu và đúng một vai trò quan trọng trong các nghành công nghiệp và
dịch vụ, trong khi tại Việt Nam điều này vẫn còn khá mới mẻ đối với các tổ chức,
doanh nghiệp.
Trước đây, việc quản lí chủ yếu dựa trên giấy tờ sổ sách, thực hiện một cách thủ
công, mất thời gian, thiếu chính xác, gây ảnh hưởng tới việc kinh doanh, sản xuất
thì trong những năm gần đây, với sự bùng nổ công nghệ thông tin, tin học đã và
đang dần thay thế những việc làm thủ công và ngày càng khẳng định vai trò quan
trọng của mình. Với việc phát triển kinh tế như hiện nay, hàng ngày, hàng giờ các
doanh nghiệp luôn phải xử lí một khối lượng dữ liệu khổng lồ, nếu như không áp
dụng một phần mềm quản lí thì sẽ không thể đưa ra được các báo cáo chính xác và
kịp thời để hỗ trợ trong việc đưa ra các quyết định kinh doanh.
Là một sinh viên công nghệ thông tin em hiểu rất rõ vai trò của tin học trong cuộc
sống hiện nay. Đặc biệt là trong lĩnh vực tin học hóa công tác quản lý. Trong đợt
thực tập tốt nghiệp lần này em lựa chọn tìm hiểu về ngôn ngữ lập trình C#, là ngôn
ngữ thông được sử dụng rộng rãi, hỗ trợ xây dựng phần mềm quản lý được dùng
phổ biến ở các cơ quan hiện nay để quản lý các cơ sở dữ liệu, đồng thời nó cũng là
một ngôn ngữ lập trình tiện dụng.
Được sự đồng ý của trường Đại học Mỏ Địa Chất, Khoa Công nghệ thông tin, Bộ
môn Tin học mỏ, cùng sự ủng hộ, động viên và giúp đỡ tận tình của thầy giáo Đặng
Văn Nam, em đã chọn đề tài: “Xây dựng chương trình quản lý bán hàng cho cửa
hàng gia dụng Xuân Bắc”.
Chương trình này được thiết kế nhằm đáp ứng được các yêu cầu: quản lý nhập
hàng, bán hàng, báo cáo thống kê doanh thu, công nợ, quản lý công nợ…
Ngoài phần lời cảm ơn, mở đầu, kết luận và phụ lục nội dung báo cáo của em được
chia làm 4 chương:
Chương 1: GIỚI THIỆU CHUNG VỀ ĐỀ TÀI.
Chương 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG VỀ XỬ LÝ VÀ DỮ LIỆU.
Thực hiện các báo cáo - thống kê theo yêu cầu của nghiệp vụ bán hàng chính xác và
nhanh chóng như: Thống kê lượng hàng hoá tồn đọng theo mặt hàng hoặc loại hàng;
Thống kê doanh thu của cửa hàng theo theo gian
Hệ thống giúp phân quyền cho người sử dụng nên mang tính bảo mật. Tránh được
sự xâm nhập phá hoại từ bên ngoài.
Giao diện tiếng việt, trực quan đáp ứng được yêu cầu của một phần mềm ứng dụng
nói chung, chương trình hoạt động tốt, ổn định trên môi trường Windown.
Báo cáo đồ án tốt nghiệp hoàn thành đầy đủ chương, mục và các nội dung liên quan
đúng thời gian quy định và theo yêu cầu trình bày của Bộ môn Tin học Mỏ.
Nội dung nghiên cứu. (1.5)
Để hoàn thành được các mục tiêu như đã đặt ra ở trên, em sẽ tập trung nghiên cứu
vào các nội dung sau:
Khảo sát hiện trạng của bài toán, thu thập tài liệu có liên quan từ cửa hàng xây dựng
bài toán sát với yêu cầu thực tế.
Thu thập dữ liệu thực tế bao gồm các hóa đơn bán hàng, phiếu nhập hàng… phục
vụ việc chạy và kiểm thử hệ thống phần mềm và các bảng dữ liệu khác có liên quan.
Phân tích và thiết kế hệ thống: Xây dựng các sơ đồ phân cấp chức năng, biểu đồ
luồng dữ liệu, biểu đồ thực thể liên kết và thiết kế cơ sở dữ liệu của hệ thống.
Lập trình và chạy kiểm thử: Trên cơ sở kết quả thực hiện các công việc ở trên tiến
hành lập trình phần mềm và chạy các bộ dữ liệu đã thu thập để phát hiện các lỗi
phát sinh và kiểm tra tính đúng đắn của các kết quả tính toán tổng hợp.
Viết báo cáo kết quả thực hiện đề tài.
Cài đặt chạy chương trình tại đơn vị sử dụng.
Phạm vi nghiên cứu. (1.6)
Bài toán quản lý bán hàng là một bài toán rất rộng với nhiều công việc như quản lý
hàng tồn hàng còn, công nợ, hóa đơn bán hàng, quản lý thu chi... do đó để giải
quyết triệt để bài toán thì cần phải có kiến thức chuyên sâu và nhiều thời gian mới
có thể giải quyết được. Do thời gian làm đồ án có hạn và kiến thức còn hạn chế nên
em không thể thực hiện hết được tất cả mọi vấn đề. Do đó, đề tài được giới hạn lại,
quản lý đơn giản theo yêu cầu thực tế của cửa hàng. Các chức năng hạn chế như
sau:
Phần mềm chỉ quản lý bán đồ gia dụng nhà bếp, không quản lý đổi trả ga
Phần mềm không quản lý đơn vị nhập hàng, lịch sử nhập hàng.
Phần mềm không quản lý công nợ với nhà cung cấp.
Phần mềm không thống kê sản phẩm bán chạy...
Chức năng 1
Chức năng 2
Chức năng 3 Thao tác hệ thống
Chức năng 4 Quản lý hệ thống
Chức năng 5
Thao tác cơ sở dữ liệu
Chức năng 6
Chức năng 7
Thao tác bán hàng
Chức năng 8
Chức năng 11
Chức năng 12 Quản lý kho
Chức năng 13
Quản lý kho hàng
Chức năng 14
Quản lý trả hàng
Chức năng 15
Chức năng 17
Quản lý bảo hành
Chức năng 18
Chức năng 19
Thống kê sản phẩm
Chức năng 20
Chức năng 21
Chức năng 22 Thống kê doanh thu Báo cáo thống kê
Chức năng 23
Chức năng 25
Trợ giúp
Chức năng 26
Xây dựng biểu đồ phân cấp chức năng của hệ thống. (2.1.3)
Từ quá trình phân tích ở trên ta xây dựng được biểu đồ phân cấp chức năng của
phần mềm quản lý bán hàng cửa hàng gia dụng Xuân Bắc như sau:
Xây dựng các biểu đồ luồng dữ liệu mức dưới đỉnh. (2.2.3)
Biểu đồ mức dưới đỉnh của chức năng hệ thống. (a)
Hình 2.4: Biểu đồ luồng dữ liệu mức dưới đỉnh của chức năng “Hệ thống”.
Hình 2.5: Biểu đồ luồng dữ liệu mức dưới đỉnh của chức năng “Bán hàng”.
Hình 2.6: Biểu đồ luồng dữ liệu mức dưới đỉnh của chức năng “Kho hàng”.
Biểu đồ mức dưới đỉnh của chức năng tra cứu sản phẩm.
Hình 2.7: Biểu đồ luồng dữ liệu mức dưới đỉnh của chức năng “Tra cứu”.
Biểu đồ mức dưới đỉnh của chức năng bảo hành.
BẢO HÀNH
NGƯỜI DÙNG
Hình 2.8: Biểu đồ luồng dữ liệu mức dưới đỉnh của chức năng “Bảo hành”.
Hình 2.9: Biểu đồ luồng dữ liệu mức dưới đỉnh của chức năng “Báo cáo”.
TRỢ GIÚP
NGƯỜI DÙNG
NGƯỜI DÙNG
Hình 2.10: Biểu đồ luồng dữ liệu mức dưới đỉnh của chức năng “Trợ giúp”.
Phân tích thiết kế hệ thống về dữ liệu. (2.3)
Dữ liệu đóng một vai trò vô cùng quan trọng trong hệ thống. Tất cả các hoạt động
của hệ thống đều liên quan đến cơ sở dữ liệu: dữ liệu vào, dữ liệu ra. Mỗi một chức
năng của hệ thống khi hoạt động đều cần đến dữ liệu liên quan. Vì vậy việc thiết kế
cơ sở dữ liệu là một công việc quan trọng quyết định đến chất lượng của cả hệ
thống.
Dữ liệu được tổ chức theo mô hình quan hệ vì những lý do sau:
Đơn giản: các dữ liệu được biểu diễn dưới 1 dạng duy nhất là quan hệ, chính là các
bảng giá trị, nó khá tự nhiên và gần gũi với người dùng.
Chặt chẽ: các khái niệm được hình thức hóa cao, cho phép áp dụng các công cụ toán
học, thuật toán.
Trừu tượng hóa cao: mô hình chỉ dừng lại ở mức quan niệm, nghĩa là độc lập với
mức vật lý, với sự cài đặt, với các thiết bị, nhờ đó làm tăng tính độc lập giữa dữ liệu
và chương trình.
Cung cấp các ngôn ngữ truy vấn ở mức cao như SQL, dễ sử dụng và đã trở thành
chuẩn.
Vì vậy em lựa chọn mô hình quan hệ để thiết kế dữ liệu cho chương trình.
Mô tả cơ sở dữ liệu. (2.3.1)
Trong hệ thống có các tài nguyên sau:
Admin: bao gồm các thông tin chi tiết về tài khoản đăng nhập hệ thống.
BaoHanh: bao gồm thông tin về khách hàng và sản phẩm đem đến bảo hành.
ChiTietDonHang: bao gồm thông tin chi tiết về các đơn hàng .
KhachHangMua: thông tin về khách hàng mua hàng tại cửa hàng.
DonHang: thông tin các đơn hàng mua hàng.
LoaiHang: thông tin về các loại hàng.
NhomHang: thông tin về nhóm hàng.
SanPham: bao gồm thông tin chi tiết về sản phẩm của cửa hàng..
TraHang: bao gồm thông tin về trả hàng.
LichSuThanhToan: bao gồm thông tin về thanh toán nợ của khách hàng.
Thiết kế cấu trúc cơ sở dữ liệu. (2.3.2)
Bảng 2.1: Bảng Admin.
BẢNG DỮ LIỆU ADMIN
Tên trường Kiểu dữ liệu Ghi chú
TaiKhoan Char(25) Tài khoản – khóa chính
MatKhau Char(25) Mật khẩu
Bảng 2.2: Bảng Bảo hành.
BẢNG DỮ LIỆU BẢO HÀNH
Tên trường Kiểu dữ liệu Ghi chú
TenKH Char(50) Tên khách hàng - khóa chính
MaSP Char(15) Mã sản phẩm – khóa chính
NgayBH DATE Ngày bảo hành – khóa chính
NgayHen DATE Ngày hẹn trả sản phẩm
DiaChi TEXT Địa chỉ khách hàng
DienThoai INT Số điện thoại khách hàng
LoiBH TEXT Lỗi sản phẩm bảo hành
TrangThai TINYINT Trạng thái bảo hành của sản phẩm
Bảng 2.3: Bảng Đơn hàng.
BẢNG DỮ LIỆU ĐƠN HÀNG
Tên trường Kiểu dữ liệu Ghi chú
MaDH Char(15) Mã đơn hàng – khóa chính
NgayBan DATE Ngày bán – khóa chính
TongTien INT Tổng giá trị đơn hàng
ThanhToan INT Số tiền thanh toán
ConNo INT Số tiền còn nợ
DonHang có quan hệ 1-N với ChiTietDonHang: Mỗi một đơn hàng có thể có nhiều
chi tiết đơn hàng.
SanPham có quan hệ 1-N với TraHang: Mỗi một sản phẩm có thể cónhiều trả hàng.
DonHang có quan hệ 1-1 với KhachHangMua: Mỗi một đơn hàng có một khách
hàng mua.
DonHang có quan hệ 1-N với LichSuThanhToan: Mỗi một đơn hàng có thể thanh
toán nhiều lần.
LoaiHang có quan hệ 1-N với SanPham: Mỗi một loại hàng có nhiều sản phẩm.
LoaiHang có quan hệ 1-N với SanPham: Mỗi một loại hàng có nhiều sản phẩm.
LoaiHang có quan hệ 1-N với SanPham: Mỗi một loại hàng có nhiều sản phẩm.
LoaiHang có quan hệ 1-N với SanPham: Mỗi một loại hàng có nhiều sản phẩm.
Hệ quản trị cơ sở dữ liệu (2.3.4).
Cơ sở dữ liệu là tập hợp các bản ghi (record) thông tin. Một trong những nhiệm vụ
quan trọng của hệ thống máy tính là lưu trữ và xử lý dữ liệu.
Hệ quản trị cơ sở dữ liệu (Database Management Systems DBMS) được thiết kế để
quản lý khối lượng dữ liệu lớn. Mục đích chính của hệ quản trị cơ sở dữ liệu là:
Cung cấp môi trường và công cụ để lưu trữ và truy xuất dữ liệu từ cơ sở dữ liệu một
cách hiệu quả.
Lưu giữ thông tin về người dùng của hệ quản trị cơ sở dữ liệu và những tác vụ mà
người dùng này có thể tương tác với dữ liệu được lưu trữ
Có 3 loại người dùng cho hệ quản trị CSDL:
Người lập trình ứng dụng: Là người phát triển ứng dụng để người dùng cuối có thể
tương tác với cơ sở dữ liệu.
Người dùng cuối: Người dùng cuối có thể tương tác với cơ sở dữ liệu thông qua
chương trình ứng dụng.
Người quản trị cơ sở dữ liệu: Là người có nhiệm vụ thiết kế CSDL, thu thập thông
tin về dữ liệu cần được lưu trữ, bảo trì CSDL hoặc bảo mật cho hệ thống.
Dùng hệ quản trị CSDL để lưu trữ có những ưu điểm sau:
Giảm thiểu sự dư thừa dữ liệu.
Tránh được sự không đồng nhất về dữ liệu.
Dữ liệu được chia sẻ.
Dữ liệu được bảo mật an toàn hơn.
Tính nhất quán của dữ liệu sẽ được đảm bảo.
Xây dựng cơ sở dữ liệu. (2.3.5)
Dựa trên sự thiết kế cơ sở dữ liệu phần (2.2.3) và sự lựa chọn hệ quản trị cơ sở dữ
liệu SQLite(Chương III) ta đi xây dựng cơ sở dữ liệu cho chương trình. Bộ dữ liệu
của chương trình được tạo ra với tên “QuanLyCHXB.db”bao gồm 9 bảng sau:
Admin: bao gồm các thông tin chi tiết về tài khoản đăng nhập hệ thống.
BaoHanh: bao gồm thông tin về khách hàng và sản phẩm đem đến bảo hành.
ChiTietDonHang: bao gồm thông tin chi tiết về các đơn hàng bao gồm mã sản
phẩm, số lượng, giá...
KhachHangMua: thông tin về khách hàng mua hàng tại cửa hàng.
DonHang: thông tin các đơn hàng mua hàng.
LoaiHang: thông tin về các loại hàng.
NhomHang: thông tin về nhóm hàng.
SanPham: bao gồm thông tin chi tiết về sản phẩm của cửa hàng..
TraHang: bao gồm thông tin về trả hàng.
LichSuThanhToan: bao gồm thông tin về lịch sử thanh toán nợ của khách hàng.
Các bảng này được xây dựng theo cấu trúc được thiết kế ở phần (2.2.2). Dưới đây là
cơ sở dữ liệu dùng trong chương trình.
.NET Framework là một thư viện class có thể được sử dụng với một ngôn ngữ .NET
để thực thi các việc từ thao tác chuỗi cho đến phát sinh ra các trang web động
(ASP.NET), phân tích XML và reflection. .NET Framework được tổ chức thành tập
hợp các namespace, nhóm các class có cùng chức năng lại với nhau, thí dụ như
System.Drawing cho đồ hoạ, System.Collectionscho cấu trúc dữ liệu và
System.Windows.Forms cho hệ thống Windows Forms.
Cấp cao hơn nữa được cung cấp bởi khái niệm này là assembly. Một assembly là
một file hoặc nhiều file được liên kết với nhau (thông qua file al.exe), chứa đựng
nhiều namespace và object. Các chương trình cần các các lớp để thực thi một chức
năng đặc biệt nào đó sẽ tham chiếu các assembly chẳng hạn như
System.Drawing.dll và System.Windows.Forms.dll cũng như các core library (lưu
trong file mscorlib.dll).
Đặc trưng của .NET
.NET Framework là cơ sở hạ tầng cho việc xây dựng, triển khai và chạy các ứng
dụng và dịch vụ Web. Nó cung cấp một môi trường đa ngôn ngữ, dựa trên nền các
chuẩn với hiệu nǎng cao, cho phép tích hợp những đầu tư ban đầu với các ứng dụng
và dịch vụ thế hệ kế tiếp và giải quyết những thách thức của việc triển khai và vận
hành các ứng dụng trên quy mô Internet. Cơ sở hạ tầng NET Framework bao gồm
ba phần chính là Bộ thực hiện ngôn ngữ chung (Common Language Runtime), một
tập phân cấp các thư viện lớp hợp nhất (Unified Class Libraries) và ASP.NET.
Thực tế .NET Framework là kết quả của hai dự án lớn của Microsoft:
Dự án đầu tiên nhằm mục đích cải tiến công việc phát triển các ứng dụng trên nền
Windows, hãy nhìn cụ thể vào công việc cải tiến COM (Component Object Model -
Mô hình Đối tượng Thành phần) của Microsoft.
Dự án thứ hai tập trung tạo ra nền tảng cho việc chuyển giao phần mềm như một
dịch vụ. Sản phẩm này đã cải thiện đáng kể nǎng suất cho người phát triển, đơn giản
hóa công việc triển khai và thực thi ứng dụng một cách đáng tin cậy.
Dự án cũng đưa ra một khái niệm hoàn toàn mới trong việc tính toán: khái niệm của
các dịch vụ Web (các ứng dụng được "ghép nối lỏng") và các thành phần được thiết
kế cho mô hình tính toán hỗn tạp hiện tại thông qua truyền thông có sử dụng các
giao thức Internet chuẩn như XML và SOAP.
Ưu điểm của .NET.
Dùng chung cho nhiều ngôn ngữ lập trình như VB, C#.
Tạo ứng dụng độc lập với môi trường phần cứng bên dưới.
Cho phép viết ứng dụng bằng nhiều ngôn ngữ tương thích .NET.
Tự động quản lý tài nguyên.
C# hỗ trợ tất cả những đặc tính trên. Phần hướng đối tượng của C# sẽ được trình
bày chi tiết trong một chương riêng ở phần sau.
C# là ngôn ngữ mạnh mẽ và cũng mềm dẻo.
Như đã đề cập trước, với ngôn ngữ C# chúng ta chỉ bị giới hạn ở chính bởi bản thân
hay là trí tưởng tượng của chúng ta. Ngôn ngữ này không đặt những ràng buộc lên
những việc có thể làm. C# được sử dụng cho nhiều các dự án khác nhau như là tạo
ra ứng dụng xử lý văn bản, ứng dụng đồ họa, bản tính, hay thậm chí những trình
biên dịch cho các ngôn ngữ khác.
C# là ngôn ngữ ít từ khóa.
C# là ngôn ngữ sử dụng giới hạn những từ khóa. Phần lớn các từ khóa được sử dụng
để mô tả thông tin. Chúng ta có thể nghĩ rằng một ngôn ngữ có nhiều từ khóa thì sẽ
mạnh hơn. Điều này không phải sự thật, ít nhất là trong trường hợp ngôn ngữ C#,
chúng ta có thể tìm thấy rằng ngôn ngữ này có thể được sử dụng để làm bất cứ
nhiệm vụ nào. Bảng sau liệt kê các từ khóa của ngôn ngữ C#.
Bảng 3.1: Từ khóa của ngôn ngữ C#.
abstract Default foreach object sizeof unsafe
as delegate goto operator stackalloc ushort
base do if out static using
bool double implicit override string virtual
break else in params struct volatile
enum int private switch void case
event interface protected this while catch
explicit internal public throw char extern
is readonly true checked false lock
ref try class finally long return
typeof const fixed sbyte uint continue
null short unchecked
float new sealed ulong decimal for
trữ trong 1 tập tin trên đĩa duy nhất. Hỗ trợ CSDL lên tới hằng TetraByte, trong đó
các kiểu dữ liệu chuỗi và blobs lên tới hằng GigaByte.
Bộ thư viện quản lý rất nhỏ, gọn: dưới 500 KB cho bản đầy đủ tính năng, và có thể
ít hơn nếu loại bớt một số đặc tính. Cụ thể, kích thước phiên bản SQLite 3.7.17
(Phiên bản hiện tại, mới nhất của SQLite) ít hơn 350 KB trên hệ điều hành 32 bit và
ít hơn 409 KB trên các hệ thống 64 bit.
Hầu hết các thao tác trên dữ liệu thông thường đều chạy nhanh hơn các Database
Engine theo kiểu Client/Server phổ biến khác. Đơn giản và dễ sử dụng bộ API
tương ứng. Mã nguồn mở được viết bằng ANSI-C, được comment rất tốt và có thể
tái sử dụng với bất cứ mục đích gì.
SQLite có thể được tải về và nhúng vào các dự án khác nhau dưới hình thức một
Single ANSI-C source-code file. Tự tổ chức lưu trữ (self-contained) mà không phải
phụ thuộc vào các thư viện bên ngoài. Đây là một đặc điểm khá quan trọng khiến
SQLite trở thành CSDL phù hợp để nhúng vào các thiết bị di động hoặc tích hợp
vào các ứng dụng muốn chạy mà không cần phải điều chỉnh cấu hình hệ thống.
Trong bộ thư viện SQLite có sẵn 1 client đơn giản giao tiếp theo chế độ dòng lệnh
(Command-Line Interface – CLI) tên là sqlite3 (trên môi trường Windows là tiện
ích sqlite3.exe) để có thể được dùng để quản trị CSDL SQLite
Ứng dụng cơ sở dữ liệu SQLite:
Do đặc điểm được thiết kế của SQLite ngay từ đầu, nên CSDL nhúng này phù hợp
với một số tình huống sử dụng như sau:
SQLite có thể sử dụng như định dạng tập tin thích hợp cho các ứng dụng: trước đây
các tập tin cấu hình có thể được lưu dưới dạng file .ini, rồi sau đó là .xml,... tuy
nhiên chúng ta sẽ cần phải viết hoặc phụ thuộc vào việc sử dụng các parser phù hợp.
Sử dụng SQLite không những giúp chúng ta khắc phục được yếu điểm này mà
chương trình của chúng ta lại còn có thể chạy trên nhiều nền tảng khác nhau.
SQLite có thể sử dụng làm CSDL cho các thiết bị điện tử. Quả thật SQLite đang là
sự lựa chọn phổ biến về Database Engine cho các thiết bị điện tử như PDA, điện
thoại di động, MP3 Player, các hộp set-top box và nhiều loại thiết bị điện tử khác.
SQLite nhỏ, sử dụng bộ nhớ, không gian lưu trữ và băng thông đĩa hiệu quả, tin cậy
mà không cần phải quản trị bởi các quản trị viên chuyên nghiệp. Nếu bạn đang viết
ứng dụng trên các thiết bị chạy iOS như iPhone, iPad,... hay các thiết bị chạy
Android hoặc Windows Mobile,... thì SQLite chính là CSDL phù hợp cho các thiết
bị di động này.
SQLite có thể sử dụng như CSDL cho các website. Do SQLite không cần phải cấu
hình và dữ liệu được lưu trữ thành các tập tin trên đĩa thật sự nên nó đang trở thành
lựa chọn phổ biến cho các website vừa và nhỏ.
SQLite có thể thay thế cho các CSDL quan hệ tầm doanh nghiệp trong một số tình
huống như kiểm thử, demo minh họa,... do SQLite chạy khá nhanh và không cần cài
đặt
Một số điểm hạn chế của SQLite:
Ngoài các ưu điểm được ca tụng nhiều trên website của SQLite, nếu đem so với các
CSDL mạnh khác như Oracle Dabase, SQL Server,... thì SQLite sẽ bọc lộ một số
yếu điểm sau:
Tính đồng thời: SQLite sử dụng cơ chế khóa coarse-gained locking có thể hỗ trợ
nhiều người đọc dữ liệu, nhưng chỉ có 1 người có thể ghi dữ liệu một lúc mà thôi.
Nối kết mạng: mặc dù SQLite có thể được chia sẻ thông qua các network file
systems, tuy nhiên độ trễ giữa các hệ thống tập tin này sẽ ảnh hưởng nghiêm trọng
tới hiệu suất thực hiện của SQLite. Tệ hại hơn nữa là, các lỗ hỏng trong việc triển
khai các hệ thống tập tin trong môi trường mạng có thể gây ra nhiều lỗi do các tập
tin có thể bị mở và điểu chỉnh từ xa
Phù hợp với các ứng dụng có qui mô dữ liệu nhỏ: trong thời đại bùng nổ thông tin
như hiện nay, SQLite không phải là lựa chọn lý tưởng để đáp ứng các nhu cầu xử lý
trên 1 khối lượng dữ liệu lớn, phát sinh liên tục
Một số công cụ làm việc với SQLite:
SQLite3 (http://www.sqlite.org)
SQLite Database Browser (http://sqlitebrowser.sourceforge.net/index.html)
SQLite Expert Professional (www.sqliteexpert.com)
SharpPlus Sqlite Developer (http://www.sqlitedeveloper.com)
SQLite Man (http://www.sqliteman.com)
SQLiteManager (http://www.sqlabs.net/sqlitemanager.php)
Navicate (http://www.navicate.com)
...
Trên trang chủ của CSDL SQLite ở địa chỉ http://www.sqlite.org, các bạn có thể
tham khảo các tài liệu chính thức của SQLite và tải về mã nguồn, thư viện SQLite
đã được biên dịch cho các hệ điều hành khác nhau của SQLite.
Giới thiệu về Crystal Report. (3.4)
Crystal Report là phần mềm thiết kế báo cáo chuyên nghiệp được tích hợp trong các
phiên bản của Visual Studio. Phiên bản Studio .Net của Microsoft được tích hợp
Crystal Report 8.5.
Bản thân Crystal Report là một phần mềm tạo báo cáo độc lập với rất nhiều chức
năng thiết kế báo biểu và dịch vụ. Người dùng có thể kết nối đến nhiều nguồn dữ
liệu khác nhau bằng các ODBC Driver. Báo biểu khi tạo ra có thể được lưu trữ bằng
file .rpt 1 cách độc lập, ở dạng có dữ liệu hoặc không có dữ liệu. Sau đó, file .rpt có
thể được chuyển tới người dùng khác và mở bằng Crystal Report hay có thể kết hợp
với các ứng dụng được viết bằng VB.Net,C++ hay C#...
Xét về mặt thiết kế báo biểu, Crystal Report cung cấp đầy đủ các chức năng định
dạng dữ liệu và các chức năng phân nhóm, tính toán, sub – report và kể cả khả năng
lập trình formula dựa trên các formula field. Người dùng ngoài việc sử dụng
formula field còn có thể tự xây dựng bộ thư viện hàm của riêng mình và đưa vào
Crystal Report thông qua các DLL. Bên cạnh khả năng thiết kế các báo biểu thông
thường, Crystal Report còn cung cấp chức năng thiết kế biểu đồ dựa trên nguồn
CSDL lấy từ chương trình.
Xét về mặt sử dụng báo biểu, công cụ hiển thị của Crystal Report cho phép người
dùng tương tác rất linh hoạt. Báo biểu hiển thị có thể được lọc lại các dữ liệu cần
thiết hay xem một phần báo biểu bằng cách sử dụng hiển thị dữ liệu dạng cây. Các
Section trong báo biểu cũng có thể mở rộng hay thu hẹp để hiển thị hay che bớt
những dữ liệu không cần thiết. Một khi báo cáo đã được cây dựng, người dùng còn
có thể Export sang các dạng khác như Word, Excel,HTML…
Bằng cách tích hợp Crystal Report, Visual Studio .Net đem lại cho người dùng một
công cụ tạo báo biểu hiệu quả, tiết kiệm nhiều thời gian so với việc sử dụng đối
tượng in ấn để tự phát sinh báo biểu.
Đảm bảo sự tương tác giữa người và máy một cách trực quan, đơn giản, thuận lợi,
dễ nhìn và dễ đọc.
Đầy đủ những chức năng mà hệ thống đảm nhận.
Đảm bảo sự ràng buộc chặt chẽ về trình tự giải toán trên máy tính. Nghĩa là phải có
trật tự logic hợp lý.
Các chức năng có thể tham chiếu và gọi được lẫn nhau theo một tương quan hợp lý,
logic và thuận lợi cho người dùng.
Tương tác người - máy thông qua các cửa sổ hỏi đáp sao cho thuận tiện, dễ dùng,
tránh rườm rà, lặp lại các thao tác. Có khả năng thoát ra dễ dàng.
Thân thiện với môi trường Window.
Trên tinh thần đó, cùng với đề mục các chức năng không nhiều lắm, chương trình
được thiết kế với các giao diện dạng cửa sổ và các nút bấm. Các form cửa sổ được
thiết kế nhìn rất trực quan, chức năng của từng nút được thể hiện bằng tiếng Việt
trên bề mặt nút. Các hình thức giao tiếp khác là dạng các hộp thoại với những câu
nhắc hợp lý, phù hợp với ngữ cảnh, có đề xuất các giá trị ngầm định để người sử
dụng dễ hiểu và không nhầm lẫn.
Dưới đây là một số Form giao diện chính của chương trình:
được hiển thị qua các button. Để sử dụng các chức năng quản lý người dùng phải
đăng nhập tài khoản quản trị. Dưới đây là giao điện khi người dùng đăng nhập hệ
thống.
Hình 4.3: Giao diện của hệ thống sau khi đăng nhập.
Sau khi lựa chọn các chức năng từ thanh Menu, chương trình sẽ giao tiếp với người
sử dụng qua các form, mỗi form có nhiệm vụ và chức năng khác nhau. Dưới đây em
đưa ra một số form của chương trình.
Hình 4.16: Một số thông báo kiểm soát của chương trình.
Chạy chương trình và kiểm thử. (4.4)
Sau quá trình phân tích thiết kế hệ thống và các bước lập trình hoàn tất, hệ thống
phần mềm cần phải được chạy và kiểm tra kết quả. Quá trình chạy và kiểm thử phần
mềm được thực hiện nhiều lần và theo các yêu cầu của kiểm thử hệ thống phần
mềm nói chung. Đây là khâu cuối cùng trước khi sử dụng phần mềm, nhằm kiểm
tra, phát hiện những sai sót trong quá trình lập trình và đánh giá độ chính xác các
kết quả tính toán của phần mềm. Trong phần mềm này với mỗi một chức năng sau
khi hoàn thành đều được chạy kiểm thử bằng nhiều bộ dữ liệu khác nhau. Sau nhiều
lần chạy thử và chỉnh sửa, phần mềm đã chạy ổn định và kết quả thu được là chính
xác, đáp ứng được các yêu cầu đặt ra.
Thêm chức năng báo cáo mặt hàng bán chạy. Thêm quản lý nhà cung cấp, công nợ
nhà cung cấp khi cửa hàng mở rộng quy mô.
Thêm chức năng quản lý đổi trả Gas.
Trong khoảng thời gian thực hiện đồ án tốt nghiệp, em đã thu nhận được rất nhiều
kiến thức quý báu. Đó là những kiến thức về nghiệp vụ quản lý bán hàng, những
kiến thức về lập trình C#, cũng như quy trình xây dựng và phát triển hệ thống phần
mềm ứng dụng trong thực tế v.v. Đây là dịp để em có điều kiện tổng hợp và ôn lại
những kiến thức đã được trang bị trong suốt 5 năm qua. Kinh nghiệm mà bản thân
em thu được trong khoảng thời gian thực hiện đồ án là vô cùng quan trọng. Đó là
những kinh nghiệm đúc rút trong quá trình nghiên cứu và lập trình một phần mềm
ứng dụng, đó là những kinh nghiệm trong việc tìm kiếm và chọn lọc các tài liệu liên
quan trên mạng, trên sách báo, giáo trình.….
Để hoàn thành được đề tài và đạt được kết quả như mong muốn thì ngoài sự nỗ lực,
cố gắng của bản thân, em còn nhận được sự giúp đỡ tận tình của các thầy cô và của
các bạn sinh viên. Một lần nữa em xin chân thành cảm ơn những ý kiến đóng góp,
sự giúp đỡ nhiệt tình của thầy cô giáo và các bạn sinh viên trong suốt thời gian vừa
qua.
Hà Nội, ngày 06 tháng 06 năm 2014
Sinh viên thực hiện
Vũ Văn Lịch
PHỤ LỤC
MÃ MỘT SỐ MODULE CHÍNH CỦA CHƯƠNG TRÌNH (A)
Mã module tạo số đơn hàng (1)
public void TaoSoHoaDon()
{
DataTable dem = QuanLyBanLeDAL.TaoSoHoaDon();
foreach (DataRow row in dem.Rows)
{
string date;
date = DateTime.Now.ToShortDateString().Substring(0, 2) +
DateTime.Now.ToShortDateString().Substring(3, 2) +
DateTime.Now.ToShortDateString().Substring(6, 4);
labSoHoaDon.Text = "BHL." + date + "." + row["Dem"].ToString();
}
}
Mã module tính tiền đơn hàng (2)
private void TinhTien()
{
int tongcong = 0;
for (int i = 0; i < dataGridBanHangLe.RowCount - 1; i++)
{
tongcong = tongcong +
int.Parse(dataGridBanHangLe.Rows[i].Cells["ThanhTien"].Value.ToString());
}
labeTongCongBHL.Text = ChuyenSo1(tongcong.ToString());
}
Mã module sao lưu cơ sở dữ liệu (3)
if (Kt == true && progressBarX1.Value ==100)
{
string str = Application.StartupPath + @"\QuanLyCHXB.db";
System.IO.File.Copy(str, textBox1.Text, true);
Kt = false;
MessageBox.Show("Sao lưu dữ liệu thành công. Vui lòng kiểm tra tại thư
mục vừa chọn!");
}
Kt = false;
MessageBox.Show("Phục hồi dữ liệu thành công. Hệ thống sẽ tự khởi
động lại. Anh / Chị vui lòng chờ trong giây lát!");
Application.Restart();
System.IO.File.Copy(textBox1.Text, str, true);
}
Mã module thanh toán đơn hàng (5)
public void ThanhToanDH(Boolean f, string thanhtoan, string tienno, string tenkh,
string diachi, string sdt)
{
if (f == true)
{
string ngaybh1 = dateTimePicker1.Value.ToString("yyyy-MM-dd");
DonHang dh = new DonHang(labSoHoaDon.Text, ngaybh1 ,
int.Parse(ChuyenSo2(labeTongCongBHL.Text)),
int.Parse(ChuyenSo2(labeTongCongBHL.Text)), 0);
QLBLDAL.ThemDonHang(dh);
for (int i = 0; i < dataGridBanHangLe.RowCount; i++)
{
if (dataGridBanHangLe.Rows[i].Cells[1].Value != null)
{
ChiTietDonHang ct = new ChiTietDonHang(labSoHoaDon.Text,
dataGridBanHangLe.Rows[i].Cells["MaSP"].Value.ToString(),
int.Parse(dataGridBanHangLe.Rows[i].Cells["SoLuong"].Value.ToString()),
int.Parse(dataGridBanHangLe.Rows[i].Cells["DonGia"].Value.ToString()));
QLBLDAL.ThemChiTietDonHang(ct);
DataTable sp =
SanPhamDAL.GetListSPMaSP(dataGridBanHangLe.Rows[i].Cells["MaSP"].Value
.ToString());
int soluong = 0;
foreach (DataRow row in sp.Rows)
{
soluong = int.Parse(row["SoLuong"].ToString());
}
QLBLDAL.TruKhoSP((soluong -
int.Parse(dataGridBanHangLe.Rows[i].Cells["SoLuong"].Value.ToString())),
dataGridBanHangLe.Rows[i].Cells["MaSP"].Value.ToString());
}
}
if (tenkh != "")
{
if (sdt == null)
{
sdt = "0";
}
KhachHangMua kh = new KhachHangMua(labSoHoaDon.Text, tenkh,
diachi, sdt);
QLBLDAL.ThemKhachHangMua(kh);
}
TaoSoHoaDon();
HoaDonMoi();
}
else
{
string ngaybh1 = dateTimePicker1.Value.ToString("yyyy-MM-dd");
DonHang dh = new DonHang(labSoHoaDon.Text, ngaybh1,
int.Parse(ChuyenSo2(labeTongCongBHL.Text)), int.Parse(thanhtoan),
int.Parse(tienno));
QLBLDAL.ThemDonHang(dh);
for (int i = 0; i < dataGridBanHangLe.RowCount; i++)
{
if (dataGridBanHangLe.Rows[i].Cells[1].Value != null)
{
ChiTietDonHang ct = new ChiTietDonHang(labSoHoaDon.Text,
dataGridBanHangLe.Rows[i].Cells["MaSP"].Value.ToString(),
int.Parse(dataGridBanHangLe.Rows[i].Cells["SoLuong"].Value.ToString()),
int.Parse(dataGridBanHangLe.Rows[i].Cells["DonGia"].Value.ToString()));
QLBLDAL.ThemChiTietDonHang(ct);
DataTable sp =
SanPhamDAL.GetListSPMaSP(dataGridBanHangLe.Rows[i].Cells["MaSP"].Value
.ToString());
int soluong = 0;
foreach (DataRow row in sp.Rows)
{
soluong = int.Parse(row["SoLuong"].ToString());
}
QLBLDAL.TruKhoSP((soluong -
int.Parse(dataGridBanHangLe.Rows[i].Cells["SoLuong"].Value.ToString())),
dataGridBanHangLe.Rows[i].Cells["MaSP"].Value.ToString());
}
}
if (sdt == null)
{
sdt = "0";
}
KhachHangMua kh = new KhachHangMua(labSoHoaDon.Text, tenkh,
diachi, sdt);
QLBLDAL.ThemKhachHangMua(kh);
TaoSoHoaDon();
HoaDonMoi();
}
}
Mã module thanh toán nợ (6)
private void butThanhToan_Click(object sender, EventArgs e)
{
ngay1 = ngay1.Substring(6, 4) + "-" + ngay1.Substring(3, 2) + "-" +
ngay1.Substring(0, 2);
int thanhtoan = 0;
foreach (DataRow row in
QuanLyBanLeDAL.GetHoaDonMaHD(labeDonHang.Text).Rows)
{
thanhtoan = int.Parse(row["ThanhToan"].ToString());
}
}
else if (txtGiaNhap.Text == "")
{
MessageBox.Show("Anh/Chị chưa cung cấp giá nhập của sản phẩm!");
txtGiaNhap.Focus();
}
else if (comboLoaiHang.SelectedIndex == -1)
{
MessageBox.Show("Vui lòng chọn loại hàng hóa");
comboLoaiHang.Focus();
}
else
{
if (QuanLyKhoDAL.CheckSP("", txtMaSP.Text).Rows.Count > 0)
{
MessageBox.Show("Mã sản phẩm đã tồn tại. Vui lòng kiểm tra
lại!");
txtMaSP.Focus();
}
else
{
SanPhamDAL n = new SanPhamDAL();
string MaNH = "";
foreach(DataRow row in
QuanLyKhoDAL.MaNhom(comboLoaiHang.SelectedValue.ToString()).Rows)
{
MaNH = row["MaNhom"].ToString();
}
SanPham sp = new
SanPham(txtMaSP.Text.ToUpper(),txtTenSP.Text,richTextMoTa.Text,richTextBox
ThongSo.Text,MaNH,comboLoaiHang.SelectedValue.ToString(),int.Parse(txtSoLu
ong.Text),txtDonViTinh.Text,int.Parse(ChuyenSo2(txtGiaNhap.Text)),1);
if (n.ThemSP(sp))
{
MessageBox.Show("Thêm mới sản phẩm thành công ");
//this.Close();
}
}
}
}
else
{
if (txtTenSP.Text == "")
{
MessageBox.Show("Anh/Chị chưa cung cấp tên sản phẩm!");
txtTenSP.Focus();
}
else if (txtSoLuong.Text == "")
{
MessageBox.Show("Anh/Chị chưa điền số lượng!");
txtSoLuong.Focus();
}
else if (txtDonViTinh.Text == "")
{
MessageBox.Show("Anh/Chị chưa điền đơn vị tính!");
txtDonViTinh.Focus();
}
else if (txtGiaNhap.Text == "")
{
MessageBox.Show("Anh/Chị chưa cung cấp giá nhập của sản phẩm!");
txtGiaNhap.Focus();
}
else if (comboLoaiHang.SelectedIndex == -1)
{
MessageBox.Show("Vui lòng chọn loại hàng hóa");
comboLoaiHang.Focus();
}
else
{
SanPhamDAL n = new SanPhamDAL();
string MaNH = "";
foreach(DataRow row in
QuanLyKhoDAL.MaNhom(comboLoaiHang.SelectedValue.ToString()).Rows)
{
MaNH = row["MaNhom"].ToString();
}
SanPham sp = new
SanPham(txtMaSP.Text,txtTenSP.Text,richTextMoTa.Text,richTextBoxThongSo.T
ext,MaNH,comboLoaiHang.SelectedValue.ToString(),int.Parse(txtSoLuong.Text),t
xtDonViTinh.Text,int.Parse(ChuyenSo2(txtGiaNhap.Text)),1);
if (n.SuaSP(sp))
{
MessageBox.Show("Thay đổi thông tin sản phẩm thành công ");
this.Close();
}
}
}
}