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ừ

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!

doc121 trang | Chia sẻ: oanh_nt | Lượt xem: 1263 | Lượt tải: 0download
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:

  • doc36389.doc
Tài liệu liên quan