Hệ thống thông tin hỗ trợ quản lý và hoạt động tác nghiệp trong nhà sách là một hệ thống nhỏ gọn, hỗ trợ hiệu quả cho việc lên các báo cáo quản lý cũng như trong các hoạt động tác nghiệp thường ngày tại các hiệu sách vừa và nhỏ tại Việt Nam.
Ngoài ra, hệ thống còn có thể được mở rộng hơn (nếu cần thiết). Ví dụ nếu nhà sách mở rộng quy mô, số lượng khách hàng tăng lên nhiều và nhà sách muốn mối quan hệ với khách hàng được thắt chặt hơn (đây là phương pháp gián tiếp nâng cao doanh số của doanh nghiệp), hệ thống có thể được mở rộng bằng việc thêm một số bảng quản lý các thông tin về khách hàng.
Đối với nhà sách Nguyễn Văn Cừ nói riêng, các nhà sách trong doanh nghiệp sách Thành Nghĩa nói chung, hệ thống này có thể được áp dụng một cách đồng bộ, từ đó có thể hỗ trợ nhiều hơn cho việc quản lý của doanh nghiệp mẹ.
Khi thực hiện luận văn này, em đã cố gắng để có thể đưa ra một sản phẩm hoàn thiện. Và sản phẩm đã có được những tính năng cơ bản như trong phân tích, thiết kế. Tuy nhiên, do hạn chế về mặt thời gian và kiến thức, luận văn vẫn còn một số thiếu sót nhất định: phần mềm chưa hoàn chỉnh (hai chức năng là phân quyền và tính lợi nhuận trước thuế chưa hoàn thiện). Em rất mong nhận được ý kiến đóng góp của các thầy cô để đề tài này có thể hoàn thiện hơn!
Em xin chân thành cảm ơn thầy giáo - TS.Trương Văn Tú đã đưa ra những ý kiến đóng góp bổ ích để em có thể thực hiện luận văn này! Tôi cũng xin gửi lời cảm ơn chân thành tới các anh chị tại Fsoft và các bạn cùng lớp đã giúp tôi hoàn thành luận văn này!
121 trang |
Chia sẻ: oanh_nt | Lượt xem: 1346 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Luận văn Xây dựng hệ thống thông tin hỗ trợ quản lý và hoạt động tác nghiệp tại hiệu sách Nguyễn Văn Cừ, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
u trữ thông tin về chúng.
Liên kết: Một thực thể trong thực tế không tồn tại độc lập với các thực thể khác mà có sự liên hệ qua lại giữa các thực thể với nhau.
Mức độ liên kết
Ngoài việc biết thực thể này liên kết với thực thể khác ra sao còn cần phải biết có bao nhiêu lần xuất thực thể A tương tác với mõi lần xuất thực thể B và ngược lại.
Liên kết một – một (1@1) là mỗi lần xuất thực thể A được liên kết với chỉ một lần xuất thực thể B và ngược lại.
Liên kết một – nhiều (1@N) là mỗi lần xuất của thực thể A được liên kết với một hoặc nhiều của thực thể B và mỗi lần xuất của thực thể B chỉ liên kết với duy nhất một lần xuất của thực thể A.
Liên kết nhiều – nhiều (N@M) là mỗi lần xuất của thực thể A được liên kết với một hoặc nhiều của thực thể B và mỗi lần xuất của thực thể B được liên kết với một hoặc nhiều lần xuất của thực thể A.
Thiết kế vật lý ngoài
Thiết kế vật lý đầu ra
Thiết kế vật lý đầu ra có hai nhiệm vụ: lựa chọn vật mang tin và bố trí thông tin trên vật mang.
Lựa chọn vật mang tin. Để truyền tải thông tin cần phải có vật mang tin, đây là yếu tố phải được lựa chọn đầu tiên vì nó quyết định dạng thức của đầu ra. Có 4 loại vật mang tin chính: giấy, màn hình, tiếng nói, vật mang tin từ tính hoặc quang tính.
Bố trí thông tin đầu ra trên vật mang. Sau khi xác định được vật mang, thiết kế viên phải lựa chọn cách thức bố trí sao cho nó thể hiện tốt nhất nội dung của thông tin. Có hai vật mang tin được dùng chủ yếu là giấy và màn hình.
Thiết kế trang in. Gồm có các thông tin cố định, không thay đổi như tên tài liệu, tên công ty,…. Nếu thông tin cần được phân nhóm thì phải thể hiện tất cả những yếu tố tên tài liệu, tên trang, tên nhóm, thân tài liệu, cuối nhóm, cuối trang, cuối tài liệu. Thông tin có thể được trình bày theo cột, theo cột trong từng nhóm, theo dòng.
Thiết kế ra trên màn hình. Sử dụng màn hình sẽ có nhiều lợi thế hơn giấy. Thiết kế sao cho người sử dụng có thể dùng các phím lùi, tiến,… để xem thông tin. Nếu có thể thì nên sử dụng cách tiếp cận Danh sách – Chi tiết.
Thiết kế vật lý đầu vào
Lựa chọn phương tiện nhập. Nhập từ một tài liệu nguồn qua một thiết bị cuối, dữ liệu vào là đầu ra của quá trình xử lý trước đó.
Quy tắc thiết kế màn hình nhập liệu. Khuôn dạng màn hình nên giống với tài liệu gốc; Nên nhóm các trường trên màn hình theo một trật tự có ý nghĩa; Không nhập các thông tin mà hệ thống có thể lấy từ kết quả tính toán; Đặt tên trường ở trên hoặc trước trường nhập; Đặt các giá trị ngầm định cho phù hợp; Sử dụng phím Tab để chuyển trường nhập.
Thiết kế giao tác với phần tin học hóa
Giao tác bằng tập hợp lệnh. Cách này có những bất lợi: khó thiết kế và lập trình; Người sử dụng phải nhớ các câu lệnh để sử dụng. Cách này sử dụng cho người có trình độ tin học cao.
Giao tác bằng các phím trên bàn phím. Dùng một vài phím nóng. Cách này làm tăng tốc độ đưa lện vào cho hệ thống và dễ dàng hơn với người sử dụng. Cách này phù hợp cho những người sử dụng thường xuyên.
Giao tác qua thực đơn (menu). Là cách được dùng phổ biến nhất hiện nay.
Thiết kế vật lý trong
Một số khái niệm. Sự kiện là một việc thực khi đến nó làm khởi sinh sự việc thực hiện của một hoặc nhiều xử lý. Công việc là một dãy các xử lý có chung một sự kiện khởi sinh. Tiến trình là một dãy các công việc mà các xử lý bên trong nó nằm cùng một lĩnh vực nghiệp vụ. Nếu tiến trình quá lớn thì nên chia cắt thành các lĩnh vực nhỏ hơn. Nhiệm vụ là một xử lý được xác định thêm các yếu tố về tổ chức: ai, ở đâu, khi nào,… Pha xử lý là tập hợp các nhiệm vụ có tính đến các yếu tố tổ chức và sự thực hiện của chúng, không phụ thuộc vào sự kiện nào khác mà chỉ phụ thuộc vào sự kiện khởi sinh ban đầu. Mô đun xử lý là một xử lý cập nhập hoặc tra cứu bên trong của một pha và thao tác với số lượng tương đối ít dữ liệu.
Thể hiện sự liên kết giữa các mô đun. Sử dụng sơ đồ phân cấp để thể hiện mối liên hệ giữa các mô đun đã được tạo ra. Xây dựng các mô đun nhỏ để dễ kiểm tra. Mô đun nhỏ có thể sử dụng trong nhiều pha. Tính đến khả năng trợ giúp của các phần mềm phát triển. Tích hợp các đặc trưng vật lý của máy tính để phân chia mô đun. Xếp theo các nhóm mô đun có sự liên thông hết cái này đến cái kia.
Thiết kế các nhiệm vụ người – máy. Các nhiệm vụ người – máy có mục đích chính nhằm tổ chức hội thoại giữa người và máy trong các pha đối thoại. Mỗi nhiệm vụ cần phải lập ra một sơ đồ gồm 3 phần: Nhiệm vụ - Người; Nhiệm vụ - Máy; Thông tin hiện ra.
Giới thiệu hệ quản trị cơ sở dữ liệu Access và ngôn ngữ lập trình Visual Basic 6.0
Giới thiệu về hệ quản trị cơ sở dữ liệu Access
HiÖn nay, nghµnh c«ng nghÖ th«ng tin ®ang rÊt ph¸t triÓn, theo ®ã lµ sù ph¸t triÓn trong c¶ lÜnh vùc phÇn cøng vµ phÇn mÒm. §Æc biÖt hiÖn nay trªn thÕ giíi ®· ph¸t triÓn rÊt nhiÒu lo¹i ng«n ng÷ lËp tr×nh ®îc dïng dÓ x©y dùng c¸c ch¬ng tr×nh phÇn mÒm øng dông trong mäi lÜnh vùc cña ®êi sèng. Do vËy, viÖc lùa chän ng«n ng÷ ®Ó viÕt ch¬ng tr×nh còng rÊt quan träng, mçi mét ng«n ng÷ cã nh÷ng ®iÓm m¹nh vµ ®iÓm yÕu riªng. Tuú thuéc vµo môc ®Ých cña ch¬ng tr×nh vµ kh¶ n¨ng cña lËp tr×nh viªn mµ lùa chän mét ng«n ng÷ lËp tr×nh phï hîp ®Ó ph¸t triÓn.
§Ó thùc hiÖn ch¬ng tr×nh nµy, em quyÕt ®Þnh sö dông hÖ qu¶n trÞ c¬ së d÷ liÖu Microsoft Access vµ ng«n ng÷ lËp tr×nh Visual Basic.
Microsoft Access lµ mét trong nh÷ng bé ch¬ng tr×nh quan träng nhÊt trong tæ hîp ch¬ng tr×nh Microsoft Office Professional do h·ng phÇn mÒm Microsoft Cooperation s¶n xuÊt. Phiªn b¶n ®Çu tiªn cña Microsoft Access ra ®êi vµo n¨m 1989 vµ kh«ng ngõng ®îc hoµn thiÖn, ®Õn nay ®· ph¸t triÓn qua n¨m phiªn b¶n ®Õn Microsoft Access 2000.
Microsoft Access 2000 cung cÊp hÖ thèng ch¬ng tr×nh øng dông rÊt m¹nh, gióp ngêi dïng mau chãng vµ dÔ dµng t¹o lËp c¸c ch¬ng tr×nh øng dông th«ng qua c¸c query, form kÕt hîp víi c¸c lÖnh cña Visual Basic.
Giới thiệu về ngôn ngữ lập trình Visual Basic 6.0
Ng«n ng÷ lËp tr×nh Visual Basic lµ mét trong nh÷ng ng«n ng÷ lËp tr×nh kh¸ m¹nh vµ phæ biÕn hiÖn nay, cã thÓ dïng cho Microsoft Access. Visual Basic ®îc dïng ®Ó liªn kÕt c¸c ®èi tîng trong mét øng dông thµnh mät hÖ thèng thèng nhÊt.
Víi Visual Basic lËp tr×nh viªn cã thÓ t¹o c¸c hµm riªng, t¹o vµ ®iÒu khiÓn c¸c ®èi tîng, xö lý tõng b¶n ghi, tiÕn hµnh c¸c hµnh ®éng ë møc hÖ thèng, c¬ së d÷ liÖu th× dÔ b¶o tr× h¬n.
Tãm l¹i, viÖc kÕt hîp hÖ qu¶n trÞ c¬ së d÷ liÖu Microsoft Access vµ ng«n ng÷ lËp tr×nh Visual Basic ®Ó thùc hiÖn ch¬ng tr×nh nµy lµ phï hîp víi môc ®Ých cña bµi to¸n ®Æt ra t¹i nhµ s¸ch NguyÔn V¨n Cõ.
PHÂN TÍCH, THIẾT KẾ HỆ THỐNG THÔNG TIN HỖ TRỢ QUẢN LÝ VÀ HOẠT ĐỘNG TÁC NGHIỆP TẠI HIỆU SÁCH
Khảo sát hệ thống
Phương pháp thu thập thông tin
Phương pháp thu thập thông tin chủ yếu trong đề tài này, như đã trình ở phần trên, chủ yếu là phỏng vấn, quan sát và thu thập tài liệu.
Phỏng vấn: Việc phỏng vấn được tiến hành với nhưng người sẽ tham gia trực tiếp vào hệ thống trong tương lai. Đó là người quản lý hiệu sách, những nhân viên giúp việc người quản lý (nhân viên giám sát, giúp việc), các nhân viên kế toán, các trưởng quầy hàng, các nhân viên đứng quầy, các nhân viên thanh toán và nhân viên gọi nhập, đặt hàng.
Người quản lý hiệu sách mong muốn có thể có những báo cáo quản lý như doanh thu (theo từng quầy hàng, từng thời điểm lựa chọn), báo cáo chi phí, và các báo cáo lợi nhuận một cách nhanh chóng nhất. Với phương pháp thủ công hiện nay, việc kết toán thu chi không thể đảm bảo yêu cầu trên.
Công việc của những người giám sát nhân viên (không chỉ là giám sát nhân viên bán hàng mà còn là chấm công nhân viên theo ca) không phức tạp dù thực hiện thủ công. Tuy nhiên, họ vẫn mong muốn có một hệ thống lưu trữ đầy đủ những thông tin về nhân viên cũng như tần suất đi làm của họ một cách tự động hoặc tự động một phần nào đó. Điều này giúp họ rất nhiều vì hiện nay, vào cuối tháng những nhân viên giám sát này phải tự tổng kết các buổi nghỉ, buổi đi làm của từng nhân viên để người quản lý lên bảng lương., trong khí đó, điều này hoàn toàn có thể thực hiện được tự động nhờ máy tính.
Các nhân viên kế toán mong muốn công việc có thể được giảm bớt nhờ một hệ thống kết chuyển tự động các hóa đơn bán, hóa đơn mua hàng vào cuối mỗi tháng. Việc này thuận lợi cho họ trong việc lên các báo cáo tài chính.
Với nhân viên đứng quầy, nhất là ở các quầy sách. Tuy các quầy sách đều đã được chia nhỏ thành từng lĩnh vực, nhưng hệ thống thông tin có thể trợ giúp khách hàng trong việc tìm kiếm sách thì sẽ tiết kiệm không chỉ thời gian cho họ, mà còn cho những người mua sách. Một hệ thống như vậy ngoài những hỗ trợ cho nhân viên, nó còn những tác dụng nhất định trong việc thu hút khách hàng. Và nó đặc biệt có ích nếu hiệu sách mở rộng thêm quy mô với nhiều đầu sách mới. Ngoài ra, các nhân viên đứng quầy còn phải thống kê số lượng hàng hóa (sách và các loại hàng khác) vào cuối mỗi tuần để xác định xem mặt hàng nào cần nhập về, với số lượng bao nhiêu, việc thống kê này là rất thủ công và mất nhiều thời gian.
Với nhân viên thanh toán, việc thanh toán hiện nay tuy đã áp dụng 03 máy tính tiền nhưng có những bất cập (như đã phân tích ở trên) khi in ra phiếu thanh toán không cụ thể rõ ràng. Tuy nhiên, sự không cụ thể rõ ràng đó mới chỉ là một điểm yếu nhỏ của hệ thống cũ. Do không có quản lý theo mã hàng hóa nên việc kết chuyển hàng bán, tính toán lượng hàng hóa tồn kho là rất khó khăn.
Nhưng điểm yếu của hệ thống thanh toán và việc thống kê hàng tồn cũng gây khó khăn cho những người làm nhiệm vụ gọi đặt hàng mới.
Vì vậy, hệ thống thông tin mới phải khắc phục tất cả những nhược điểm trên của hệ thống cũ.
Quan sát: Những quan sát trong hiệu sách cho thấy rằng, hệ thống cũ là không hiệu quả và dẫn đến việc tăng chi phí cho nhân lực. Số lượng nhân viên trong từng quầy hàng là lớn (để có thể đảm bảo hoạt động của một quầy). Nhân viên đứng quầy không tập trung vào công việc hầu hết thời gian làm và chỉ làm việc nhiều khi đến cuối mỗi ca (là thời gian để họ kiểm kê hàng hóa). Sự hỗ trợ của nhân viên với khách hàng là không lớn (nhất là tại các quầy sách). Như vậy, có thể thấy hệ thống thông tin hiện thời làm tăng chi phí của doanh nghiệp trong việc thuê nhân công. Nếu hệ thống thông tin mới thành công, số lượng nhân viên sẽ được giảm thiểu.
Thu thập, nghiên cứu tài liệu: Tài liệu thu thập được là phiếu thanh toán, các hóa đơn nhập hàng, các hóa đơn chi khác, bảng chấm công,…
Yêu cầu của hệ thống thông tin mới
Hệ thống thông tin mới phải đảm bảo những yêu quan trọng nhất về mặt chức năng và giao diện sau đây.
Yêu cầu chung về hệ thống: Hệ thống phải đáp ứng tất cả các nhu cầu của những người sẽ tham gia trong tương lai. Đồng thời phải có sự phân quyền rõ ràng.
Yêu cầu về chức năng: Với những thông tin thu thập được trong quá trình trên, một hệ thống thông tin mới phải đảm bảo có các chức năng sau đây. Thứ nhất, quản lý các mặt hàng theo mã hàng hóa; Thứ hai, quản lý quá trình bán hàng (gồm có việc thanh toán, lên các báo cáo về hàng hóa,…); Thứ ba, quản lý quá trình nhập và quản lý hàng tồn kho; Thứ tư, trợ giúp cho việc lên bảng lương và quản lý thông tin nhân viên; Thứ năm, có thể thực hiện tìm kiếm nhằm trợ giúp khách hàng đối với mặt hàng là sách; Thứ sáu, lên các báo cáo tài chính hỗ trợ cho việc quản lý của người quản lý hiệu sách.
Yêu cầu về giao diện: Giao diện hệ thống phải thân thiện với người sử dụng và phù hợp với trình độ văn hóa của nhân viên. Các mẫu cập nhật phải được bố trí một cách khoa học và không quá khác biệt với các mẫu đã từng được sử dụng trước đây.
Phân tích hệ thống
Sơ đồ luồng thông tin (IFD)
Bộ phận bán hàng
Bộ phận nhập, đặt hàng và quản lý hàng tồn kho
Bộ phận chấm công
Bộ phận kế toán
Sơ đồ chức năng (BFD)
Hình 3.1: Sơ đồ chức năng nghiệp vụ của hệ thống.
Sơ đồ luồng dữ liệu (DFD)
Sơ đồ ngữ cảnh
Hình 3.2: Sơ đồ ngữ cảnh
Sơ đồ mức 0
Hình 3.3: Sơ đồ luồng thông tin mức 0
Sơ đồ mức 1
Sơ đồ mức 1 chức năng Quản lý bán – nhập hàng
Hình 3.4: Sơ đồ DFD mức 1 chức năng Quản lý bán- nhập hàng
Sơ đồ mức 1 chức năng Quản lý nhân viên
Hình 3.5: Sơ đồ DFD mức 1 chức năng Quản lý nhân viên
Sơ đồ mức 1 chức năng Báo cáo quản lý
Hình 3.6: Sơ đồ DFD mức 1 chức năng Báo cáo quản lý
Sơ đồ mức 1 chức năng Tìm kiếm
Hình 3.7: Sơ đồ DFD mức 1 chức năng Tìm kiếm
Thiết kế logic
Thiết kế cơ sở dữ liệu từ thông tin đầu ra
Việc thiết kế cơ sở dữ liệu sau đây dựa vào cách phân tích hướng trọng tâm vào các đối tượng liên quan đến các hoạt động chính của nhà sách và dựa vào các thông tin đầu ra (là các bảng biểu)
Với đối tượng là Hàng hóa:
Tệp HANGHOA (HÀNG HÓA), MALOAI (MÃ LOẠI): MaHang đặt kiểu number, độ rộng là 5 (vì hiệu sách hiện giờ có khoảng dưới 99.999 mặt hàng). Do đặc trưng của nhà sách Nguyễn Văn Cừ là nó vừa là một nhà sách, vừa là một siêu thị thu nhỏ với rất nhiều các sản phẩm khác được bán tại. Tuy nhiên, hệ thống này có một chức năng lớn đó là tìm kiếm (riêng cho các sản phẩm sách báo). Do đó, trong tệp này ngoài các thông tin chung về hàng hóa như Mã loại, tên hàng, nhà cung cấp,… thì còn có một phần thông tin riêng dành cho sách (Nội dung tóm tắt, tác giả, số trang,…).
MaLoai (Mã loại trong tệp MALOAI) kiểu Charater, độ dài 3 là trường để chỉ loại hàng hóa. Riêng với sản phẩm sách thì có nhiều loại nhỏ hơn. Ví dụ như Sách thiếu nhi – STN, tiểu thuyết – TTH,… hay hàng thực phẩm khô – TPK, hóa mỹ phẩm – HMP,…
Trong tệp này cũng có một trường là trường Sach (Sách), kiểu Logical, độ dài 1. Trường này cho phép xác định hàng hóa có phải là Sách hay không (để phục vụ cho việc tìm kiếm), đồng thời cũng thuận tiện hơn khi cập nhật hàng hóa.
Tệp QUAYHANG, NHACUNGCAP
Trường MaQuay (trong tệp QUAYHANG) kiểu Text, độ rộng 2 dùng để chỉ các quầy hàng. Ví như quầy thực phẩm (TP), quầy sách (SA), Quầy mỹ phẩm (MP),…
Trường MaNCC (trong tệp NHACUNGCAP) kiểu Text với độ rộng 5 chỉ các nhà cung cấp. Ví dụ: Nhà xuất bản Thanh Niên (NXBTN), Công ty FPT (CTFPT),…
Trong tệp NHACUNGCAP có một số trường tương tự với các trường trong các bảng khác như SoDT (Số điện thoại) – trường này có kiểu Number, độ rộng 11 để chỉ số điện thoại bao gồm cả mã quốc tế cho điện thoại cố định. Ví dụ: 84048123123, MaST (Mã số thuế) kiểu Number độ rộng 10 để chỉ mã số thuế. Ví dụ như mã số thuế của công ty FPT: 0101248141.
Với đối tượng là Nhân viên
Tệp NHANVIEN. Trong tệp này, MaNV (Mã nhân viên) với kiểu Number, độ rộng 3 là khóa chính. Chọn độ rộng 3 là vì số lượng nhân viên của hiệu sách có thể tăng lên qua con số 999 nhân viên (trong tương lai.)
Tệp BOPHAN. Chứa các thông tin về từng bộ phận trong nhà sách. MaBP (Mã bộ phận) là khóa chính, kiểu Text, độ dài 2. Ví dụ như bộ phận kế toán (KT), Bộ phận bán hàng (BH), Bộ phận giám sát (GS),…
Tệp CALV. Chứa các thông tin về từng ca làm việc. Khóa chính là MaCaLV (Mã ca làm việc) kiểu dữ liệu Text, độ dài 1. Ví dụ ca sáng (S), chiều (C), tối (T). Và đồng thời chứa thời gian bắt đầu, kết thúc một ca. Tệp này cũng chứa mức lương trả cho nhân viên từng ca. Trường này giúp tính lương cuối tháng của nhân viên.
Tệp BANGCC. Là tệp chứa thông tin về các phiếu chấm công. Trong đó, MaBCC là khóa chính. Khóa chính này có giá trị là kiểu text, độ dài 7, được đặt theo cách mã hóa gợi nhớ ngày, tháng và ca. Ví dụ: Bảng chấm công buổi sáng ngày 06 tháng 6 năm 2006 có mã như sau: S060606. Bảng chấm công được nhân viên giám sát sử dụng ở từng ca làm việc và theo dõi tần suất đi làm của nhân viên, phục vụ cho việc lên bảng lương.
Tệp BANGTHUONG dùng để chứa thông tin thưởng cho nhân viên vào cuối tháng.
Với đối tượng là các giao dịch mua và bán
Tệp GIAODICHBAN, GIAODICHMUA. Hai tệp này là hoàn toàn tương đương nhau. Đây là hai trong ba tệp quan trọng nhất của cơ sở dữ liệu, chứa thông tin về các giao dịch mua và bán. Tệp này có thể được hiểu như là các tệp chứa thông tin về các hóa đơn và phiếu nhập kho. Trong đó, MaGDB – Mã giao dịch bán (tương tự là MaGDM – mã giao dịch mua) có kiểu Text, độ rộng 9, được mã hóa theo quy tắc mã hóa gợi nhớ, ví dụ B03030601 có nghĩa là phiếu Bán hàng thứ nhất vào ngày 03/03/2006. Trong mỗi giao dịch có thể thực hiện trao đổi nhiều hàng hóa. Và 2 tệp này có quan hệ nhiều – nhiều với tệp HANGHOA.
Tệp PHIEUTHUKHAC và PHIEUCHIKHAC dùng để chứa thông tin của các phiếu thu, phiếu chi khác (không phải cho việc bán – nhập hàng). Tệp này dùng để tính lợi nhuận sau thuế và là các tệp tự do.
Ngoài ra còn một số tệp chi tiết khác (dùng là tệp trung gian giữa hai tệp có mối quan hệ nhiều – nhiều). Phần dưới đây sẽ mô tả chi tiết các tệp cơ sở dữ liệu.
Các tệp cơ sở sở dữ liệu
LOAIHANG (LOẠI HÀNG)
Tên trường
Kiểu dữ liệu
Độ rộng
Diễn giải
MaLoai
Text
3
Mã loại
TenLoai
Text
15
Tên loại
GiaiThich
Text
60
Giải thích
QUAYHANG (QUẦY HÀNG)
Tên trường
Kiểu dữ liệu
Độ rộng
Diễn giải
MaQuay
Text
2
Mã quầy
TenQuay
Text
15
Tên quầy
Trưởng quầy
Text
30
Trưởng quầy
NHACUNGCAP (NHÀ CUNG CẤP)
Tên trường
Kiểu dữ liệu
Độ rộng
Diễn giải
MaNCC
Text
5
Mã nhà cung cấp
TenNCC
Text
30
Tên nhà cung cấp
DiaChi
Text
30
Địa chỉ
SoDT
Number
11
Số điện thoại
MaST
Number
10
Mã số thuế
HANGHOA (HÀNG HÓA)
Tên trường
Kiểu dữ liệu
Độ rộng
Diễn giải
MaHang
Number
5
Mã hàng
TenHang
Text
30
Tên hàng
MaLoai
Text
3
Mã loại hàng
MaQuay
Text
2
Mã quầy
MaNCC
Text
5
Mã nhà cung cấp
DVTinh
Text
7
Đơn vị tính
Sach
Logical
1
Là sách hay không
TacGia
Text
30
Tác Giả
SoTrang
Number
4
Số trang
TomTat
Text
100
Nội dung tóm tắt
TonDK
Number
4
Tồn đầu kỳ
GiaTDK
Currency
8
Đơn giá tồn đầu kỳ
CALV (CA LÀM VIỆC)
Tên trường
Kiểu dữ liệu
Độ rộng
Diễn giải
MaCaLV
Text
1
Mã ca làm việc
TenCLV
Text
5
Tên ca làm việc
TGBD
Date/Time
8
Thời gian bắt đầu
TGKT
Date/Time
8
Thời gian kết thúc
MucLuong
Currency
8
Mức lương
BOPHAN (BỘ PHẬN)
Tên trường
Kiểu dữ liệu
Độ rộng
Diễn giải
MaBP
Text
2
Mã bộ phận
TenBP
Text
15
Tên bộ phận
TruongBP
Text
30
Trưởng bộ phận
NhiemVu
Text
60
Nhiệm vụ
BANGCC (BẢNG CHẤM CÔNG)
Tên trường
Kiểu dữ liệu
Độ rộng
Diễn giải
MaBCC
Text
7
Mã bảng chấm công
MaCaLV
Text
1
Mã ca làm việc
Ngay
Date
8
Ngày chấm
NguoiCham
Text
30
Người chấm
NHANVIEN (NHÂN VIÊN)
Text
Kiểu dữ liệu
Độ rộng
Diễn giải
MaNV
Number
3
Mã nhân viên
TenNV
Text
30
Tên nhân viên
MaBP
Text
2
Mã bộ phận
DiaChi
Text
30
Địa chỉ
QueQuan
Text
30
Quê quán
SoDT
Number
10
Điện thoại
TGBD
Date
8
Thời gian vào làm
UserName
Text
12
Tên truy cập
PassWord
Text
12
Mật khẩu
BCCNV (BẢNG CHẤM CÔNG – NHÂN VIÊN)
Tên trường
Kiểu dữ liệu
Độ rộng
Diễn giải
MaBCC
Text
7
Mã bảng chấm công
MaNV
Number
3
Mã nhân viên
BANGTHUONG (BẢNG THƯỞNG)
Tên trường
Kiểu dữ liệu
Độ rộng
Diễn giải
MaBT
Text
7
Mã bảng thưởng
Ngay
Date
8
Ngày lập
NguoiLap
Text
30
Người lập
BANGTHUONGNV (BẢNG THƯỞNG – NHÂN VIÊN)
Tên trường
Kiểu dữ liệu
Độ rộng
Diễn giải
MaBT
Text
7
Mã bảng thưởng
MaNV
Number
3
Mã nhân viên
Ngay
Date
8
Ngày chấm
SoTien
Currency
8
Số tiền
LiDo
Text
60
Lí do
THUESUAT (THUẾ SUẤT)
Tên trường
Kiểu dữ liệu
Độ rộng
Diễn giải
LoaiThue
Text
4
Loại số thuế
TenThue
Text
15
Tên thuế
ThueSuat
Number
4,2
Thuế suất
GIAODICHBAN (GIAO DỊCH BÁN)
Tên trường
Kiểu dữ liệu
Độ rộng
Diễn giải
MaGDB
Text
7
Mã giao dịch bán
ThoiGian
Date/Time
8
Thời gian bán
NgayBan
Date/Time
8
Thời gian bán
TenKH
Text
30
Tên khách hàng
MaNV
Number
3
Mã nhân viên
GIAODICHMUA (GIAO DỊCH MUA)
Tên trường
Kiểu dữ liệu
Độ rộng
Diễn giải
MaGDM
Text
7
Mã giao dịch mua
ThoiGian
Date/Time
8
Thời gian mua
ThoiGian
Date/Time
8
Thời gian mua
MaNCC
Text
5
Mã nhà cung cấp
MaNV
Number
3
Mã nhân viên
GDBHH (GIAO DỊCH BÁN – HÀNG HÓA)
Tên trường
Kiểu dữ liệu
Độ rộng
Diễn giải
MaDGB
Text
7
Mã giao dịch bán
MaHang
Number
5
Mã hàng
SoLuong
Number
4
Số lượng
GiaBan
Currency
8
Giá bán
MaLoaiThue
Text
4
Loại thuế
GDMHH (GIAO DỊCH MUA – HÀNG HÓA)
Tên trường
Kiểu dữ liệu
Độ rộng
Diễn giải
MaDGM
Text
7
Mã giao dịch mua
MaHang
Number
5
Mã hàng
SoLuong
Number
10
Số lượng
GiaMua
Number
10
Giá bán
LoaiThue
Text
4
Loại thuế
PHIEUTHUKHAC
Tên trường
Kiểu dữ liệu
Độ rộng
Diễn giải
MaPTK
Text
10
Mã phiếu thu khác
SoTien
Currency
8
Số tiền
LiDo
Text
30
Lí do
ThoiGian
Date/Time
8
Thời gian
NgayThang
Date/Time
8
Ngày tháng
NguoiTT
Text
30
Người thanh toán
NguoiNhan
Text
30
Người nhận
PHIEUCHIKHAC
Tên trường
Kiểu dữ liệu
Độ rộng
Diễn giải
MaPCK
Text
10
Mã phiếu chi khác
SoTien
Currency
8
Số tiền
LiDo
Text
30
Lí do
ThoiGian
Date/Time
8
Thời gian
NgayThang
Date/Time
8
Ngày tháng
NguoiXuat
Text
30
Người xuất
NguoiNhan
Text
30
Người nhận
Mối quan hệ giữa các tệp dữ liệu
Một số giải thuật
Giải thuật đăng nhập
Giải thuật cập nhật dữ liệu
Giải thuật Tìm kiếm
Giải thuật In báo cáo
Giải thuật Tính lương
Giải thuật Tính nhập-xuất-tồn
Giải thuật tính doanh thu (chi phí hoàn toàn tương tự)
Thiết kế giao diện cho chương trình
Giao diện chính và các menu
Menu Hệ thống và Menu Danh mục từ điển
Menu Bán - Nhập hàng và Menu Báo cáo
Menu Tìm kiếm và Menu Nhân viên
Một số form cập nhật
Form cập nhật nhà cung cấp
Form cập nhật quầy hàng
Form cập nhật loại hàng
Form cập nhật hàng hoá
Form cập nhật bộ phận
Form cập nhật ca làm việc
Form cập nhật danh sách nhân viên
Form cập nhật danh mục thuế
Form cập nhật bảng chấm công
Form cập nhật bảng thưởng
Một số form cập nhật và xử lý
Form cập nhật và in ra hoá đơn bán hàng
Form cập nhật và in ra phiếu nhập kho
Form cập nhật và in ra phiếu thu
Form cập nhật và in ra phiếu chi
Một số form tìm kiếm
Tìm kiếm theo tên
Tìm kiếm theo tác giả
Form tìm kiếm theo nhà xuất bản
Một số thiết kế báo cáo
Hoá đơn bán hàng
Phiếu nhập kho
Báo cáo doanh thu
Báo cáo nhập-xuất-tồn
KẾT LUẬN
Hệ thống thông tin hỗ trợ quản lý và hoạt động tác nghiệp trong nhà sách là một hệ thống nhỏ gọn, hỗ trợ hiệu quả cho việc lên các báo cáo quản lý cũng như trong các hoạt động tác nghiệp thường ngày tại các hiệu sách vừa và nhỏ tại Việt Nam.
Ngoài ra, hệ thống còn có thể được mở rộng hơn (nếu cần thiết). Ví dụ nếu nhà sách mở rộng quy mô, số lượng khách hàng tăng lên nhiều và nhà sách muốn mối quan hệ với khách hàng được thắt chặt hơn (đây là phương pháp gián tiếp nâng cao doanh số của doanh nghiệp), hệ thống có thể được mở rộng bằng việc thêm một số bảng quản lý các thông tin về khách hàng.
Đối với nhà sách Nguyễn Văn Cừ nói riêng, các nhà sách trong doanh nghiệp sách Thành Nghĩa nói chung, hệ thống này có thể được áp dụng một cách đồng bộ, từ đó có thể hỗ trợ nhiều hơn cho việc quản lý của doanh nghiệp mẹ.
Khi thực hiện luận văn này, em đã cố gắng để có thể đưa ra một sản phẩm hoàn thiện. Và sản phẩm đã có được những tính năng cơ bản như trong phân tích, thiết kế. Tuy nhiên, do hạn chế về mặt thời gian và kiến thức, luận văn vẫn còn một số thiếu sót nhất định: phần mềm chưa hoàn chỉnh (hai chức năng là phân quyền và tính lợi nhuận trước thuế chưa hoàn thiện). Em rất mong nhận được ý kiến đóng góp của các thầy cô để đề tài này có thể hoàn thiện hơn!
Em xin chân thành cảm ơn thầy giáo - TS.Trương Văn Tú đã đưa ra những ý kiến đóng góp bổ ích để em có thể thực hiện luận văn này! Tôi cũng xin gửi lời cảm ơn chân thành tới các anh chị tại Fsoft và các bạn cùng lớp đã giúp tôi hoàn thành luận văn này!
DANH MỤC TÀI LIỆU THAM KHẢO
1. Giáo trình Cấu trúc dữ liệu và Giải thuật, PGS. TS Hàn Viết Thuận, NXB Thống Kê, Hà Nội 2005.
2. Giáo trình Hệ thống thông tin quản lý, TS. Trương Văn Tú – TS. Trần Thị Song Minh, NXB Hà Nội 2000.
3. Tài liệu nội bộ và công khai của công ty cổ phần phần mềm FPT (F-Soft)
4. Những bài thực hành cơ sở dữ liệu Visual Basic cơ bản, KS. Đinh Xuân Lâm, nhà xuất bản thống kê 2006
5. Crystal Report 10.0 HelpFile
6. Visual Basic 6.0 HelpFile
PHỤ LỤC
A. Hướng dẫn cài đặt chương trình
Chạy file QLCHS.exe, form sau xuất hiện, chọn lựa chọn đầu tiên
Sau khi click Next, form sau xuất hiện
Chọn Next
Click Next
Chọn Next
Click Install
Sau khi chạy xong, sẽ xuất hiện form sau và click Finish.
Trên desktop sẽ xuất hiện một icon của chương trình quản lý
B. Mã của chương trình
1. Mã của form Menu chính (dưới đây là from menu danh mục từ điển)
Private Sub cmdtk_Click()
Unload Me
frm_tk.Show
End Sub
Private Sub Form_Initialize()
Me.Left = 0
Me.Top = 0
End Sub
Private Sub Form_Load()
Me.Left = 0
Me.Top = 0
Timer1.Enabled = True
End Sub
Private Sub Image1_Click()
lblncc_Click
End Sub
Private Sub Image2_Click()
lblqh_Click
End Sub
Private Sub Image3_Click()
lblncc_Click
End Sub
Private Sub Image4_Click()
lblhh_Click
End Sub
Private Sub Image5_Click()
lblbp_Click
End Sub
Private Sub Image6_Click()
lblclv_Click
End Sub
Private Sub Image7_Click()
lblnv_Click
End Sub
Private Sub Image8_Click()
lblt_Click
End Sub
Private Sub lblbp_Click()
lblbp.FontBold = True
frm_bophan.Show vbModal
End Sub
Private Sub lblbp_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
lblncc.ForeColor = &H0&
lblncc.FontBold = False
lblqh.ForeColor = &H0&
lblqh.FontBold = False
lbllh.ForeColor = &H0&
lbllh.FontBold = False
lblhh.ForeColor = &H0&
lblhh.FontBold = False
lblbp.ForeColor = &HFF&
'lblbp.FontBold = False
lblnv.ForeColor = &H0&
lblnv.FontBold = False
lblclv.ForeColor = &H0&
lblclv.FontBold = False
lblt.ForeColor = &H0&
lblt.FontBold = False
End Sub
Private Sub lblclv_Click()
lblclv.FontBold = True
frm_calamviec.Show vbModal
End Sub
Private Sub lblclv_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
lblncc.ForeColor = &H0&
lblncc.FontBold = False
lblqh.ForeColor = &H0&
lblqh.FontBold = False
lbllh.ForeColor = &H0&
lbllh.FontBold = False
lblhh.ForeColor = &H0&
lblhh.FontBold = False
lblbp.ForeColor = &H0&
lblbp.FontBold = False
lblnv.ForeColor = &H0&
lblnv.FontBold = False
lblclv.ForeColor = &HFF&
'lblclv.FontBold = False
lblt.ForeColor = &H0&
lblt.FontBold = False
End Sub
Private Sub lblhh_Click()
lblhh.FontBold = True
frm_hanghoa.Show vbModal
End Sub
Private Sub lblhh_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
lblncc.ForeColor = &H0&
lblncc.FontBold = False
lblqh.ForeColor = &H0&
lblqh.FontBold = False
lbllh.ForeColor = &H0&
lbllh.FontBold = False
lblhh.ForeColor = &HFF&
'lblhh.FontBold = False
lblbp.ForeColor = &H0&
lblbp.FontBold = False
lblnv.ForeColor = &H0&
lblnv.FontBold = False
lblclv.ForeColor = &H0&
lblclv.FontBold = False
lblt.ForeColor = &H0&
lblt.FontBold = False
End Sub
Private Sub lbllh_Click()
lbllh.FontBold = True
frm_loaihang.Show vbModal
End Sub
Private Sub lbllh_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
lblncc.ForeColor = &H0&
lblncc.FontBold = False
lblqh.ForeColor = &H0&
lblqh.FontBold = False
lbllh.ForeColor = &HFF&
'lbllh.FontBold = False
lblhh.ForeColor = &H0&
lblhh.FontBold = False
lblbp.ForeColor = &H0&
lblbp.FontBold = False
lblnv.ForeColor = &H0&
lblnv.FontBold = False
lblclv.ForeColor = &H0&
lblclv.FontBold = False
lblt.ForeColor = &H0&
lblt.FontBold = False
End Sub
Private Sub lblncc_Click()
lblncc.FontBold = True
'kichthuocformnhap.Show
frm_nhacungcap.Show vbModal
End Sub
Private Sub lblncc_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
lblncc.ForeColor = &HFF&
'lblncc.FontBold = False
lblqh.ForeColor = &H0&
lblqh.FontBold = False
lbllh.ForeColor = &H0&
lbllh.FontBold = False
lblhh.ForeColor = &H0&
lblhh.FontBold = False
lblbp.ForeColor = &H0&
lblbp.FontBold = False
lblnv.ForeColor = &H0&
lblnv.FontBold = False
lblclv.ForeColor = &H0&
lblclv.FontBold = False
lblt.ForeColor = &H0&
lblt.FontBold = False
End Sub
Private Sub lblnv_Click()
lblnv.FontBold = True
frm_nhanvien.Show vbModal
End Sub
Private Sub lblnv_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
lblncc.ForeColor = &H0&
lblncc.FontBold = False
lblqh.ForeColor = &H0&
lblqh.FontBold = False
lbllh.ForeColor = &H0&
lbllh.FontBold = False
lblhh.ForeColor = &H0&
lblhh.FontBold = False
lblbp.ForeColor = &H0&
lblbp.FontBold = False
lblnv.ForeColor = &HFF&
'lblnv.FontBold = False
lblclv.ForeColor = &H0&
lblclv.FontBold = False
lblt.ForeColor = &H0&
lblt.FontBold = False
End Sub
Private Sub lblqh_Click()
lblqh.FontBold = True
frm_quayhang.Show vbModal
End Sub
Private Sub lblqh_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
lblncc.ForeColor = &H0&
lblncc.FontBold = False
lblqh.ForeColor = &HFF&
lbllh.ForeColor = &H0&
lbllh.FontBold = False
lblhh.ForeColor = &H0&
lblhh.FontBold = False
lblbp.ForeColor = &H0&
lblbp.FontBold = False
lblnv.ForeColor = &H0&
lblnv.FontBold = False
lblclv.ForeColor = &H0&
lblclv.FontBold = False
lblt.ForeColor = &H0&
lblt.FontBold = False
End Sub
Private Sub lblt_Click()
lblt.FontBold = True
frm_thue.Show vbModal
End Sub
Private Sub lblt_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
lblncc.ForeColor = &H0&
lblncc.FontBold = False
lblqh.ForeColor = &H0&
lblqh.FontBold = False
lbllh.ForeColor = &H0&
lbllh.FontBold = False
lblhh.ForeColor = &H0&
lblhh.FontBold = False
lblbp.ForeColor = &H0&
lblbp.FontBold = False
lblnv.ForeColor = &H0&
lblnv.FontBold = False
lblclv.ForeColor = &H0&
lblclv.FontBold = False
lblt.ForeColor = &HFF&
'lblt.FontBold = False
End Sub
Private Sub cmdbc_Click()
Unload Me
frm_bc.Show
End Sub
Private Sub cmdbnh_Click()
Unload Me
frm_bnh.Show
End Sub
Private Sub cmddmtd_Click()
Unload Me
frm_dmtd.Show
End Sub
Private Sub cmdht_Click()
Unload Me
frm_ht.Show
End Sub
Private Sub cmdnv_Click()
Unload Me
frm_nv.Show
End Sub
Private Sub cmtk_Click()
Unload Me
frm_tk.Show
End Sub
Private Sub Timer1_Timer()
lbDate.Caption = CStr(Day(Date)) & " - " & CStr(Month(Date)) & " - " & CStr(Year(Date)) & " " & CStr(Time)
Dim xau As String
xau = lbdiachi.Caption
lbdiachi.Caption = Right(xau, Len(xau) - 1) & Left(xau, 1)
End Sub
2. Mã của form cập nhật (Ở đây là cập nhật danh mục hàng hóa)
Dim f As Integer
Private Sub Cbsach_Click()
SSTab1.Tab = 2
End Sub
Private Sub cmdghi_Click()
If f = 1 Then
If txtmahang = "" And txttenhang = "" Then
MsgBox "Hãy nhập mã và tên hàng!", vbOKOnly, " Chú ý!"
txtmahang.SetFocus
End If
If txttenhang = "" And txtmahang "" Then
MsgBox "Hãy nhập tên hàng !", vbOKOnly, " Chú ý! "
txttenhang.SetFocus
End If
If txttenhang "" And txtmahang = "" Then
MsgBox "Hãy nhập mã hàng !", vbOKOnly, " Chú ý! "
txtmahang.SetFocus
End If
If txttenhang "" And txtmahang "" Then
Data1.Recordset.MoveLast
TDBGrid1.Row = TDBGrid1.Row + 1
TDBGrid1.Columns(0) = txtmahang.Text
TDBGrid1.Columns(1) = txttenhang.Text
TDBGrid1.Columns(2) = txtmaloai.Text
TDBGrid1.Columns(3) = txtmaquay.Text
TDBGrid1.Columns(4) = txtmancc.Text
TDBGrid1.Columns(5) = txttondk.Text
TDBGrid1.Columns(6) = txtgiatondk.Text
If Cbsach.Value = 1 Then
TDBGrid1.Columns(7) = "Yes"
Else
TDBGrid1.Columns(7) = "No"
End If
TDBGrid1.Columns(8) = txttacgia.Text
TDBGrid1.Columns(9) = txtsotrang.Text
TDBGrid1.Columns(10) = txttomtat.Text
TDBGrid1.Columns(11) = txtvitri.Text
TDBGrid1.Refresh
cmdghi.Enabled = False
cmdthem.Enabled = True
cmdsua.Enabled = True
cmdxoa.Enabled = True
cmdhuy.Enabled = False
cmdthoat.Enabled = True
f = 0
End If
End If
If f = 2 Then
TDBGrid1.Columns(0) = txtmahang.Text
TDBGrid1.Columns(1) = txttenhang.Text
TDBGrid1.Columns(2) = txtmaloai.Text
TDBGrid1.Columns(3) = txtmaquay.Text
TDBGrid1.Columns(4) = txtmancc.Text
TDBGrid1.Columns(5) = txttondk.Text
TDBGrid1.Columns(6) = txtgiatdk.Text
TDBGrid1.Columns(7) = Cbsach
TDBGrid1.Columns(8) = txttacgia.Text
TDBGrid1.Columns(9) = txtsotrang.Text
TDBGrid1.Columns(10) = txttomtat.Text
TDBGrid1.Columns(11) = txtvitri.Text
TDBGrid1.Refresh
cmdghi.Enabled = False
cmdthem.Enabled = True
cmdsua.Enabled = True
cmdxoa.Enabled = True
cmdhuy.Enabled = False
cmdthoat.Enabled = True
f = 0
End If
khoaphim
End Sub
Private Sub cmdhuy_Click()
If (f = 1) Or f = 2 Then
Data1.Recordset.MoveFirst
khoaphim
truyengiatri
khoaphim
TDBGrid1.Refresh
cmdhuy.Enabled = False
cmdthem.Enabled = True
cmdsua.Enabled = True
cmdxoa.Enabled = True
cmdghi.Enabled = False
cmdthoat.Enabled = True
TDBGrid1.Refresh
f = 0
Else
khoaphim
TDBGrid1.Refresh
cmdhuy.Enabled = False
cmdthem.Enabled = True
cmdsua.Enabled = True
cmdxoa.Enabled = True
cmdghi.Enabled = False
cmdthoat.Enabled = True
TDBGrid1.Refresh
Me.Refresh
f = 0
End If
End Sub
Private Sub cmdsua_Click()
mophim
txtmahang.SetFocus
cmdthem.Enabled = False
cmdsua.Enabled = False
cmdxoa.Enabled = False
cmdghi.Enabled = True
cmdhuy.Enabled = True
cmdthoat.Enabled = True
f = 2
End Sub
Private Sub cmdthem_Click()
mophim
f = 1
txtmahang.SetFocus
cmdthem.Enabled = False
cmdsua.Enabled = False
cmdxoa.Enabled = False
cmdghi.Enabled = True
cmdhuy.Enabled = True
cmdthoat.Enabled = True
txtmahang.Text = ""
txttenhang.Text = ""
txtmaloai.Text = ""
txtmaquay.Text = ""
txtmancc.Text = ""
txttondk.Text = ""
txtgiatdk.Text = ""
txttacgia.Text = ""
txtsotrang.Text = ""
txttomtat.Text = ""
End Sub
Private Sub cmdthoat_Click()
Unload Me
End Sub
Private Sub cmdxoa_Click()
If MsgBox(" Cã ch¾c ch¾n xo¸ kh«ng?", vbYesNoCancel, " Chó ý") = vbYes Then
Data1.Recordset.Edit
Data1.Recordset.Delete
Data1.Recordset.MoveNext
Else: Exit Sub
End If
TDBGrid1.Refresh
f = 0
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
SendKeys "{TAB}"
KeyAscii = 0
End If
End Sub
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case 113
If cmdthem.Enabled Then
Call cmdthem_Click
End If
Case 114
If cmdsua.Enabled = True Then
Call cmdsua_Click
End If
Case 115
If cmdxoa.Enabled = True Then
Call cmdxoa_Click
End If
Case 116
If cmdghi.Enabled = True Then
Call cmdghi_Click
End If
Case 117
If cmdhuy.Enabled = True Then
Call cmdhuy_Click
End If
Case 119
If cmdthoat.Enabled = True Then
Call cmdthoat_Click
End If
End Select
End Sub
Private Sub Form_Load()
Me.Left = frm_mother.Left + 4400
Me.Top = frm_mother.Top + 3550
f = 0
Me.KeyPreview = True
khoaphim
cmdsua.Enabled = True
cmdxoa.Enabled = True
cmdghi.Enabled = False
cmdhuy.Enabled = False
cmdthoat.Enabled = True
End Sub
Private Sub khoaphim()
txtmahang.Enabled = False
txttenhang.Enabled = False
txtmaloai.Enabled = False
txtmaquay.Enabled = False
txtmancc.Enabled = False
Cbsach.Enabled = False
txttacgia.Enabled = False
txtsotrang.Enabled = False
txttomtat.Enabled = False
txttondk.Enabled = False
txtgiatdk.Enabled = False
End Sub
Private Sub mophim()
txtmahang.Enabled = True
txttenhang.Enabled = True
txtmaloai.Enabled = True
txtmaquay.Enabled = True
txtmancc.Enabled = True
Cbsach.Enabled = True
txttacgia.Enabled = True
txtsotrang.Enabled = True
txttomtat.Enabled = True
txttondk.Enabled = True
txtgiatdk.Enabled = True
End Sub
Private Sub TDBGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
If f 1 Then
truyengiatri
End If
End Sub
Private Sub truyengiatri()
txtmahang.Text = TDBGrid1.Columns(0)
txttenhang.Text = TDBGrid1.Columns(1)
txtmaloai.Text = TDBGrid1.Columns(2)
txtmaquay.Text = TDBGrid1.Columns(3)
txtmancc.Text = TDBGrid1.Columns(4)
txttondk.Text = TDBGrid1.Columns(5)
txtgiatdk.Text = TDBGrid1.Columns(6)
If TDBGrid1.Columns(7) = "Yes" Then
Cbsach.Value = 1
Else
Cbsach.Value = 0
End If
txttacgia.Text = TDBGrid1.Columns(8)
txtsotrang.Text = TDBGrid1.Columns(9)
txttomtat.Text = TDBGrid1.Columns(10)
txtvitri.Text = TDBGrid1.Columns(11)
End Sub
3. Mã của form cập nhật và xử lý (Dưới đây là mã của form cập nhật hóa đơn bán hàng)
Dim f, g As Integer
Private Sub cmdchitiet_Click()
SSTab1.Tab = 2
TDBGrid2.AllowAddNew = True
TDBGrid2.AllowUpdate = True
TDBGrid2.AllowDelete = True
TDBGrid2.AllowArrows = True
If f = 1 Then
If txtmagdb = "" Then
MsgBox "Hãy nhập mã hoá đơn!", vbOKOnly, " Chú ý"
txtmagdb.SetFocus
End If
If txtmagdb "" Then
Data1.Recordset.MoveLast
TDBGrid1.Row = TDBGrid1.Row + 1
TDBGrid1.Columns(0) = txtmagdb.Text
TDBGrid1.Columns(1) = DTPthoigian.Value
TDBGrid1.Columns(2) = DTPngayban.Value
TDBGrid1.Columns(3) = txtmanv.Text
TDBGrid1.Columns(4) = txttenkh.Text
TDBGrid1.Refresh
cmdghi.Enabled = False
cmdthem.Enabled = True
cmdsua.Enabled = True
cmdxoa.Enabled = True
cmdhuy.Enabled = False
cmdthoat.Enabled = True
f = 0
khoaphim
TDBGrid2.SetFocus
TDBGrid2.Columns(0) = TDBGrid1.Columns(0)
End If
End If
If f = 2 Then
TDBGrid1.Columns(0) = txtmagdb.Text
TDBGrid1.Columns(1) = DTPthoigian.Value
TDBGrid1.Columns(2) = DTPngayban.Value
TDBGrid1.Columns(3) = txtmanv.Text
TDBGrid1.Columns(4) = txttenkh.Text
TDBGrid1.Refresh
cmdghi.Enabled = False
cmdthem.Enabled = True
cmdsua.Enabled = True
cmdxoa.Enabled = True
cmdhuy.Enabled = False
cmdthoat.Enabled = True
f = 0
khoaphim
TDBGrid2.SetFocus
End If
End Sub
Private Sub cmdghi_Click()
If f = 1 Then
If txtmagdb = "" Then
MsgBox "H·y nhËp m·!", vbOKOnly, " Chó ý"
txtmagdb.SetFocus
End If
If txtmagdb "" Then
Data1.Recordset.MoveLast
TDBGrid1.Row = TDBGrid1.Row + 1
TDBGrid1.Columns(0) = txtmagdb.Text
TDBGrid1.Columns(1) = DTPthoigian.Value
TDBGrid1.Columns(2) = DTPngayban.Value
TDBGrid1.Columns(3) = txtmanv.Text
TDBGrid1.Columns(4) = txttenkh.Text
TDBGrid1.Refresh
cmdghi.Enabled = False
cmdthem.Enabled = True
cmdsua.Enabled = True
cmdxoa.Enabled = True
cmdhuy.Enabled = False
cmdthoat.Enabled = True
f = 0
khoaphim
End If
End If
If f = 2 Then
TDBGrid1.Columns(0) = txtmagdb.Text
TDBGrid1.Columns(1) = DTPthoigian.Value
TDBGrid1.Columns(2) = DTPngayban.Value
TDBGrid1.Columns(3) = txtmanv.Text
TDBGrid1.Columns(4) = txttenkh.Text
TDBGrid1.Refresh
cmdghi.Enabled = False
cmdthem.Enabled = True
cmdsua.Enabled = True
cmdxoa.Enabled = True
cmdhuy.Enabled = False
cmdthoat.Enabled = True
f = 0
khoaphim
End If
End Sub
Private Sub cmdghi2_Click()
If g = 1 Then
If DBCmahang = "" Then
MsgBox "H·y nhËp m·!", vbOKOnly, " Chó ý"
DBCmahang.SetFocus
End If
If DBCmahang "" Then
Data2.Recordset.MoveLast
TDBGrid4.Row = TDBGrid4.Row + 1
TDBGrid4.Columns(0) = DBCmahang.Text
TDBGrid4.Columns(1) = txtsoluong.Text
TDBGrid4.Columns(2) = txtgiaban.Text
TDBGrid4.Columns(3) = txtdiachi.Text
TDBGrid4.Columns(4) = DBCLoaiThue.Text
TDBGrid4.Refresh
cmdghi2.Enabled = False
cmdthem2.Enabled = True
cmdsua2.Enabled = True
cmdxoa2.Enabled = True
cmdhuy2.Enabled = False
g = 0
End If
End If
If g = 2 Then
TDBGrid4.Columns(0) = txtmahang.Text
TDBGrid4.Columns(1) = txtsoluong.Text
TDBGrid4.Columns(2) = txtgiaban.Text
TDBGrid4.Columns(3) = txtdiachi.Text
TDBGrid4.Columns(4) = DBCLoaiThue.Text
TDBGrid4.Refresh
cmdghi2.Enabled = False
cmdthem2.Enabled = True
cmdsua2.Enabled = True
cmdxoa2.Enabled = True
cmdhuy2.Enabled = False
cmdthoat2.Enabled = True
g = 0
End If
khoaphim2
End Sub
Private Sub cmdhuy_Click()
If (f = 1) Or f = 2 Then
Data1.Recordset.MoveFirst
khoaphim
TDBGrid1.Refresh
cmdhuy.Enabled = False
cmdthem.Enabled = True
cmdsua.Enabled = True
cmdxoa.Enabled = True
cmdghi.Enabled = False
cmdthoat.Enabled = True
TDBGrid1.Refresh
txtmagdb.Text = TDBGrid1.Columns(0)
DTPthoigian.Value = TDBGrid1.Columns(1)
DTPngayban.Value = TDBGrid1.Columns(2)
DBCtennv.Text = TDBGrid1.Columns(3)
txttenkh.Text = TDBGrid1.Columns(4)
f = 0
Else
khoaphim
TDBGrid1.Refresh
cmdhuy.Enabled = False
cmdthem.Enabled = True
cmdsua.Enabled = True
cmdxoa.Enabled = True
cmdghi.Enabled = False
cmdthoat.Enabled = True
TDBGrid1.Refresh
Me.Refresh
f = 0
End If
End Sub
Private Sub cmdhuy2_Click()
If (g = 1) Or g = 2 Then
If Not Data2.Recordset.BOF Then
Data2.Recordset.MoveFirst
End If
khoaphim2
TDBGrid4.Refresh
cmdhuy2.Enabled = False
cmdthem2.Enabled = True
cmdsua2.Enabled = True
cmdxoa2.Enabled = True
cmdghi2.Enabled = False
TDBGrid4.Refresh
txtmagdb.Text = TDBGrid4.Columns(0)
DBCmahang.Text = TDBGrid4.Columns(1)
txtsoluong.Text = TDBGrid4.Columns(2)
txtgiaban.Text = TDBGrid4.Columns(3)
DBCLoaiThue.Text = TDBGrid4.Columns(4)
g = 0
Else
khoaphim2
TDBGrid4.Refresh
cmdhuy2.Enabled = False
cmdthem2.Enabled = True
cmdsua2.Enabled = True
cmdxoa2.Enabled = True
cmdghi2.Enabled = False
TDBGrid4.Refresh
g = 0
End If
End Sub
Private Sub cmdsua_Click()
mophim
txtmagdb.SetFocus
cmdthem.Enabled = False
cmdsua.Enabled = False
cmdxoa.Enabled = False
cmdghi.Enabled = True
cmdhuy.Enabled = True
cmdthoat.Enabled = True
f = 2
End Sub
Private Sub cmdsua2_Click()
mophim2
DBCmahang.SetFocus
cmdthem2.Enabled = False
cmdsua2.Enabled = False
cmdxoa2.Enabled = False
cmdghi2.Enabled = True
cmdhuy2.Enabled = True
txtmagdb2.Text = TDBGrid1.Columns(0)
txtmagdb2.Enabled = False
g = 2
End Sub
Private Sub cmdthem_Click()
mophim
txtmagdb.SetFocus
cmdthem.Enabled = False
cmdsua.Enabled = False
cmdxoa.Enabled = False
cmdghi.Enabled = True
cmdhuy.Enabled = True
cmdthoat.Enabled = True
txtmagdb.Text = ""
DTPthoigian.Value = Time
DTPngayban.Value = Date
DBCtennv.Text = ""
txttenkh.Text = ""
f = 1
End Sub
Private Sub cmdthem2_Click()
mophim2
DBCmahang.SetFocus
cmdthem2.Enabled = False
cmdsua2.Enabled = False
cmdxoa2.Enabled = False
cmdghi2.Enabled = True
cmdhuy2.Enabled = True
txtmagdb2.Text = TDBGrid1.Columns(0)
txtmagdb2.Enabled = False
DBCmahang.Text = ""
txtsoluong.Text = ""
txtgiaban.Text = ""
DBCLoaiThue.Text = ""
g = 1
End Sub
Private Sub cmdthoat_Click()
Unload Me
End Sub
Private Sub cmdxoa_Click()
If MsgBox(" Có chắc chắn xoá không?", vbYesNoCancel, " Chú ý") = vbYes Then
Dim a As String
a = TDBGrid1.Columns(0)
openDB
DB.Execute ("delete * from gdbhh where magdb= " & a)
Data1.Recordset.Edit
Data1.Recordset.Delete
Data1.Recordset.MoveNext
Else: Exit Sub
End If
TDBGrid1.Refresh
f = 0
End Sub
Private Sub cmdxoa2_Click()
If MsgBox(" Có chắc chắn xoá không?", vbYesNoCancel, " Chú ý") = vbYes Then
Data2.Recordset.Edit
Data2.Recordset.Delete
Data2.Recordset.MoveNext
Else: Exit Sub
End If
TDBGrid4.Refresh
g = 0
End Sub
Private Sub DBCTenNV_Change()
Data4.RecordSource = "select manv from nhanvien where tennv= '" & DBCtennv.Text & "'"
Data4.Refresh
End Sub
Private Sub Form_Load()
Me.Left = frm_mother.Left + 4400
Me.Top = frm_mother.Top + 3550
f = 0
khoaphim
khoaphim2
cmdsua.Enabled = True
cmdxoa.Enabled = True
cmdghi.Enabled = False
cmdhuy.Enabled = False
cmdthoat.Enabled = True
cmdsua2.Enabled = True
cmdxoa2.Enabled = True
cmdghi2.Enabled = False
cmdhuy2.Enabled = False
'TDBGrid1.SetFocus
End Sub
Private Sub khoaphim2()
txtmagdb2.Enabled = False
DBCmahang.Enabled = False
txtsoluong.Enabled = False
txtgiaban.Enabled = False
DBCLoaiThue.Enabled = False
End Sub
Private Sub mophim2()
txtmagdb2.Enabled = True
DBCmahang.Enabled = True
txtsoluong.Enabled = True
txtgiaban.Enabled = True
DBCLoaiThue.Enabled = True
End Sub
Private Sub TDBGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
If f 1 Then
txtmagdb.Text = TDBGrid1.Columns(0)
DTPthoigian.Value = TDBGrid1.Columns(1)
DTPngayban.Value = TDBGrid1.Columns(2)
DBCtennv.Text = TDBGrid1.Columns(3)
txttenkh.Text = TDBGrid1.Columns(4)
Dim lastname$
Dim bk1 As String, bk2 As String
If IsNull(LastRow) Then
bk1 = ""
Else
bk1 = LastRow
End If
bk2 = TDBGrid1.Bookmark
If bk1 bk2 Then
Screen.MousePointer = vbHourglass
lastname$ = Data1.Recordset("magdb")
Data2.RecordSource = "SELECT * FROM gdbhh WHERE magdb = " & lastname$
Data2.Refresh
TDBGrid2.Refresh
Screen.MousePointer = vbDefault
End If
End If
End Sub
Private Sub khoaphim()
txtmagdb.Enabled = False
DTPthoigian.Enabled = False
DTPngayban.Enabled = False
DBCtennv.Enabled = False
txttenkh.Enabled = False
End Sub
Private Sub mophim()
txtmagdb.Enabled = True
DTPthoigian.Enabled = True
DTPngayban.Enabled = True
DBCtennv.Enabled = True
txttenkh.Enabled = True
End Sub
Private Sub TDBGrid3_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
If f 1 Then
txtmagdb.Text = TDBGrid1.Columns(0)
DTPthoigian.Value = TDBGrid1.Columns(1)
DTPngayban.Value = TDBGrid1.Columns(2)
DBCtennv.Text = TDBGrid1.Columns(3)
txttenkh.Text = TDBGrid1.Columns(4)
Dim lastname$
Dim bk1 As String, bk2 As String
If IsNull(LastRow) Then
bk1 = ""
Else
bk1 = LastRow
End If
bk2 = TDBGrid1.Bookmark
If bk1 bk2 Then
Screen.MousePointer = vbHourglass
lastname$ = Data1.Recordset("magdb")
Data2.RecordSource = "SELECT * FROM gdbhh WHERE magdb = " & lastname$
Data2.Refresh
TDBGrid2.Refresh
Screen.MousePointer = vbDefault
End If
End If
End Sub
Private Sub dbcmahang_Change()
Data5.RecordSource = "SELECT tenhang FROM hanghoa WHERE mahang = '" & DBCmahang.Text & "' "
Data5.Refresh
End Sub
Private Sub TDBGrid4_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
txtmagdb2.Text = TDBGrid4.Columns(0)
DBCmahang.Text = TDBGrid4.Columns(1)
txtsoluong.Text = TDBGrid4.Columns(2)
txtgiaban.Text = TDBGrid4.Columns(3)
DBCLoaiThue.Text = TDBGrid4.Columns(4)
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
SendKeys "{TAB}"
KeyAscii = 0
End If
End Sub
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case 113
If cmdthem.Enabled Then
Call cmdthem_Click
End If
Case 114
If cmdsua.Enabled = True Then
Call cmdsua_Click
End If
Case 115
If cmdxoa.Enabled = True Then
Call cmdxoa_Click
End If
Case 116
If cmdghi.Enabled = True Then
Call cmdghi_Click
End If
Case 117
If cmdhuy.Enabled = True Then
Call cmdhuy_Click
End If
Case 119
If cmdthoat.Enabled = True Then
Call cmdthoat_Click
End If
End Select
End Sub
Private Sub CmdIn_Click()
rptControl = 1
rptparm = txtmagdb.Text
frmReport.Show 1
End Sub
4. Mã chương trình của form tính toán đưa ra báo cáo (Dưới đây là form đưa ra hoá đơn bán hàng)
Private Sub Form_Initialize()
Call CRViewer_Resize
End Sub
Private Sub Form_Load()
Dim CRXReport As Object
Dim CRXApplication As Object
Dim strPath As String
Set CRXApplication = CreateObject("CrystalRuntime.Application.10")
If rptControl = 2 Then
strPath = App.Path & "\reportQLCH\Phieunhapkho.rpt"
Set CRXReport = CRXApplication.OpenReport(strPath)
CRXReport.ParameterFields.Item(1).DiscreteOrRangeKind = 0
CRXReport.ParameterFields.Item(1).ClearCurrentValueAndRange
CRXReport.ParameterFields.Item(1).AddCurrentValue (rptparm)
End If
If rptControl = 1 Then
strPath = App.Path & "\reportQLCH\HDBH.rpt"
Set CRXReport = CRXApplication.OpenReport(strPath)
CRXReport.ParameterFields.Item(1).DiscreteOrRangeKind = 0
CRXReport.ParameterFields.Item(1).ClearCurrentValueAndRange
CRXReport.ParameterFields.Item(1).AddCurrentValue (rptparm)
End If
If rptControl = 4 Then
strPath = App.Path & "\reportQLCH\BcDoanhthu.rpt"
Set CRXReport = CRXApplication.OpenReport(strPath)
End If
If rptControl = 3 Then
strPath = App.Path & "\reportQLCH\BCDTthang.rpt"
Set CRXReport = CRXApplication.OpenReport(strPath)
CRXReport.ParameterFields.Item(1).DiscreteOrRangeKind = 0
CRXReport.ParameterFields.Item(1).ClearCurrentValueAndRange
CRXReport.ParameterFields.Item(1).AddCurrentValue (rptthang)
CRXReport.ParameterFields.Item(2).DiscreteOrRangeKind = 0
CRXReport.ParameterFields.Item(2).ClearCurrentValueAndRange
CRXReport.ParameterFields.Item(2).AddCurrentValue (rptnam)
End If
If rptControl = 5 Then
strPath = App.Path & "\reportQLCH\nxt.rpt"
Set CRXReport = CRXApplication.OpenReport(strPath)
CRXReport.ParameterFields.Item(1).DiscreteOrRangeKind = 0
CRXReport.ParameterFields.Item(1).ClearCurrentValueAndRange
CRXReport.ParameterFields.Item(1).AddCurrentValue (rptngaydau)
CRXReport.ParameterFields.Item(2).DiscreteOrRangeKind = 0
CRXReport.ParameterFields.Item(2).ClearCurrentValueAndRange
CRXReport.ParameterFields.Item(2).AddCurrentValue (rptngaycuoi)
End If
CRViewer1.ReportSource = CRXReport
CRViewer1.Refresh
CRViewer1.ViewReport
Set CRXReport = Nothing
Set CRXApplication = Nothing
End Sub
Private Sub CRViewer_Resize()
Dim X As Integer
Dim Y As Integer
On Error GoTo ErrorHandler
CRViewer1.Top = 0
CRViewer1.Left = 0
CRViewer1.Width = frmReport.ScaleWidth
CRViewer1.Height = frmReport.ScaleHeight
Exit Sub
ErrorHandler:
End Sub
5. Mã chương trình của form tìm kiếm (dưới đây là form tìm kiếm theo tên sách)
Private Sub cmdtatca_Click()
Data1.RecordSource = "select * from hanghoa"
Data1.Refresh
End Sub
Private Sub cmdtim_Click()
If txttensach.Text = "" Then
MsgBox "Nhập tên sách trước khi tìm kiếm!", vbOKOnly, "Chú ý!"
txttensach.SetFocus
Else
Data1.RecordSource = "select * from hanghoa where tenhang like '*" & txttensach.Text & "*'"
Data1.Refresh
txttensach.Enabled = True
End If
End Sub
Private Sub cmdthoat_Click()
Unload Me
End Sub
Private Sub Form_Load()
Me.Left = frm_mother.Left + 4400
Me.Top = frm_mother.Top + 3550
f = 0
Data1.RecordSource = "select * from hanghoa where sach = yes"
Data1.Refresh
End Sub
Các file đính kèm theo tài liệu này:
- 36389.doc