Phát triển phần mềm quản lý hợp đồng tại Công ty cổ phần phần mềm kế toán BRAVO

Tài liệu Phát triển phần mềm quản lý hợp đồng tại Công ty cổ phần phần mềm kế toán BRAVO: ... Ebook Phát triển phần mềm quản lý hợp đồng tại Công ty cổ phần phần mềm kế toán BRAVO

doc154 trang | Chia sẻ: huyen82 | Lượt xem: 1425 | Lượt tải: 0download
Tóm tắt tài liệu Phát triển phần mềm quản lý hợp đồng tại Công ty cổ phần phần mềm kế toán BRAVO, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LỜI NÓI ĐẦU Ngày nay cùng với sự phát triển của xã hội đặc biệt là sự phát triển như vũ bão của khoa học công nghệ thì thông tin đóng một vai trò vô cùng quan trọng quyết định sự thành công hay thất bại trong mọi lĩnh vực. Vì thế trong bối cảnh toàn cầu hoá và nhân loại đang bước vào ngưỡng cửa của nền kinh tế tri thức thì thông tin chính là cơ sở quyết định đối với sự phát triển của một quốc gia. Chỉ khi thu thập được những thông tin chính xác thì các nhà quản lý, hoạch định kế hoạch mới cho ra được những quyết định và các kế hoạch đúng đắn đem lại năng suất và hiệu quả cao trong công việc. Để thực hiện được điều này một trong những giải pháp đề ra đó là tin học hoá công tác quản lý trong hoạt động của các doanh nghiệp. Vì vậy xây dựng một hệ thống thông tin tốt là điều cần thiết cho sự phát triển của doanh nghiệp nói riêng và của nền kinh tế nói riêng. Đặc biệt đối với Việt Nam khi vừa mới gia nhập vào tổ chức thương mại thế giới WTO thì công tác quản lý càng cần phải có sự đổi mới trong quá trình ứng dụng tin học hoá khi đó chúng ta mới có thể thành công khi tham gia vào nền kinh tế thế giới. Qua thời gian tìm hiểu và nghiên cứu thực tế tại Công ty cổ phần phần mềm kế toán BRAVO, với sự giúp đỡ tận tình của các cán bộ tại cơ quan, em đã tìm hiều sâu sắc hơn về hoạt động xây dựng và quản lý hợp đồng, vì vậy em đã chọn đề tài: “Phát triển phần mềm quản lý hợp đồng tại công ty cổ phần phần mềm kế toán BRAVO”. Với đề tài trên em đã có cơ hội được tìm hiểu về hoạt động quản lý và theo dõi hợp đồng phần mềm công ty phần mềm chuyên nghiệp. Đối với các doanh nghiệp hiện nay nói chung và công ty BRAVO nói riêng việc quản lý hợp đồng một cách khoa học sẽ làm giảm thiểu các phát sinh không cần thiết, qua đó làm tăng khả năng kinh doanh của doanh nghiệp. Kết cấu của đề tài: Đề tài được chia thành 3 chương: Chương 1: Tổng quan về cơ sở thực tập và cơ sở khảo sát thực tập. Chương 2: Cơ sở phương pháp luận về hệ thống thông tin quản lý. Chương 3: Phát triển chương trình quản lý hợp đồng cho công ty cổ phần phần mềm kế toán BRAVO. Tuy đã có một thời gian tìm hiểu và nghiên cứu cùng với sự giúp đỡ tận tình nhưng do còn sự hạn chế về kiến thức và kinh nghiệm thực tế nên nội dung của chuyên đề không tránh khỏi sai sót, em mong nhận được sự đóng góp ý kiến của thầy cô và các bạn để tiếp tục đề tài được hoàn thiện hơn. Em xin chân thành cảm ơn PGS.TS Hàn Viết Thuận đã trực tiếp hướng dẫn, chỉ bảo em trong quá trình thực hiện đề tài này, anh Ninh Ngọc Hiếu cùng các anh chị trong Công ty cổ phần phần mềm kế toán BRAVO trong quá trình thực tập. Và em cũng xin cảm ơn sự giúp đỡ của các bạn lớp Tin học 45B đã giúp đỡ em trong quá trình hoàn thành đề tài. Sinh viên Lê Bá Khánh Duy Chương 1 GIỚI THIỆU VỀ CÔNG TY CỔ PHẦN PHẦN MỀM KẾ TOÁN BRAVO 1.1- Lịch sử hình thành và phát triển 1.1.1 Giới thiệu công ty CÔNG TY CỔ PHẦN PHẦN MỀM KẾ TOÁN BRAVO Tên giao dịch quốc tế: Accounting Software Company. Gọi tắt : BRAVO Địa chỉ : 48 Láng Hạ - Quận Đống Đa - Hà Nội Điện thoại : (04)7762472 Fax : (04)7762472 Email : bravo@fpt.vn Website : Logo : 1.1.2 Lịch sử phát triển Công ty cổ phần phần mềm kế toán BRAVO được thành lập theo giấy phép số 4667/GP-UB ngày 07 tháng 10 năm 1999 của UBND thành phố Hà Nội. Được sở Kế hoạch và Đầu tư Hà Nội cấp giấy chứng nhận đăng ký kinh doanh số: 056682 ngày 18 tháng 10 năm 1999 và cục thuế Hà Nội cấp mã số đăng ký thuế: 0100947771 ngày 05 tháng 11 năm 1999. Ngành nghề kinh doanh chính của công ty là: Sản xuất phần mềm máy tính (chủ yếu là phần mềm kế toán). Công ty hình thành cơ cấu tổ chức gồm: Ban giám đốc, Phòng kinh doanh, Phòng kế toán, Phòng kỹ thuật, Phòng bảo hành và Phòng hành chính nhân sự. Năm 2000 thành lập văn phòng đại diện tại Thành phố Hồ Chí Minh và được sở kế hoạch - Đầu tư Thành phố Hồ Chính Minh cấp giấy phép số 0300017 ngày 15 tháng 12 năm 2000. + Địa chỉ 97 Nguyễn Công Trứ - phường Nguyễn Thái Bình - Quận 1 TP. Hồ Chí Minh. + Điện thoại (08) 9142636 + Fax (08) 9142636 + Email bravo@hcm.fpt.vn Năm 2003 thành lập văn phòng đại diện tại TP. Đà Nẵng, được sở kế hoạch - Đầu tư TP. Đà Nẵng cấp giấy phép số 3223000021 ngày 14 tháng 04 ngăm 2003. + Địa chỉ 111 Hàm Nghi - Thanh Khê - TP. Đà Nẵng. + Điện thoại (0511) 650 834 + Fax (0511) 650 834 + Email bravo@dng.vnn.vn 1.2 Sản phẩm Sản phẩm của công ty hiện nay có tên gọi là Phần mềm kế toán Bravo®. Định hướng của công ty BRAVO là chuyên sâu vào việc sản xuất phần mềm kế toán Bravo® cho các doanh nghiệp sản xuất. Mong muốn của BRAVO là luôn mang lại cho khách hàng những sản phẩm tốt có chất lượng. Chính vì vậy trong quá trình hoạt động và phát triển Công ty không ngừng nâng cao chất lượng sản phẩm: Từ phiên bản Bravo 3.2 lên Bravo 4.0, Bravo 4.1, Bravo 5.0, Bravo 6.0 và hiện nay là phiên bản Bravo 6.3. Chương trình này được xây dựng trên ngôn ngữ lập trình Visual Foxpro 8.0 kết hợp hợp với cơ sở dữ liệu SQL-Server 2000, hiện nay công ty đang dần chuyển sang xây dựng bằng ngôn ngữ .Net và cơ sở dữ liệu SQL-Server 2005 nhằm cung cấp cho khách hàng một sản phẩm phần mềm kế toán Bravo hoàn thiện nhất. Điều này cũng xuất phát từ chính mục tiêu phát triển của công ty là: "Trở thành nhà cung cấp phần mềm kế toán số 1 trong lĩnh vực kế toán sản xuất". Phần mềm kế toán Bravo® đã được đăng ký, chứng nhận: + Giấy chứng nhận Bản quền tác giả số 321/2001/QTG do Cục Bản quền tác giả - Bộ Văn hóa thông tin cấp ngày 24 tháng 10 năm 2001 về phần mềm kế toán BRAVO. + Giấy chứng nhận bản quền tác giả số 246/2003/QTG do Cục Bản quền tác giả - Bộ Văn hóa thông tin cấp ngày 27 tháng 03 năm 2003 về phần mềm BRAVO. +Giấy chứng nhận đăng ký nhãn hiệu hàng hóa số 39080 theo quết định số: 3209/QĐ-ĐK ngày 30 tháng 11 năm 2001 của Cục Sở hữu công nghiệp - Bộ Khoa học công nghệ và môi trường về việc bảo hộ nhãn hiệu hàng hóa: phần mềm kế toán BRAVO. +Giấy chứng nhận đăng ký nhãn hiệu hàng hóa số 53916 theo quết định số A1794/QĐ-ĐK ngày 28 tháng 04 năm 2004 của Cục Sở hữu công nghiệp và môi trường về việc bảo hộ nhãn hiệu hàng hóa: Phần mềm kế toán BRAVO. 1.3 Khách hàng Từ khi thành lập đến nay (08 năm) Công ty đã không ngừng phát triển và lớn mạnh, hiện công ty đã có hơn 500 khách hàng đang sử dụng phần mềm kế toán Bravo trên cả nước, bao gồm các doanh nghiệp nhà nước, doanh nghiệp có vốn đầu tư nước ngoài, doanh nghiệp tư nhân… Các khách hàng đang sử dụng chương trình Phần mềm kế toán Bravo đều hài lòng về chất lượng sản phẩm và các dịch vụ mà công ty cung cấp. Dưới đây là một số khách hàng tiêu biểu của công ty: Một số công ty có vốn đầu tư nước ngoài: 1. Công ty liên doanh sứ vệ sinh INAX - Giảng Võ. 2. Công ty TNHH NICHIAS - Nhật Bản. 3. Công ty TNHH URAI PHANIC VIET NAM. 4. Công ty liên doanh Hisong Vina. 5. Công ty Fusheng Industrial Co.Ltd. 6. … Một số công ty trong nước: 1. Công ty Gang thép Thái Nguyên. 2. Công ty Thực phẩm và đầu tư công nghệ Miền Trung FOCOSEV. 3. Công ty Công nghiệp thực phẩm miền trung FOODINCO. 4. Công ty Nhựa thiếu niên Tiền Phong - Hải Phòng. 5. Công ty Công viên phần mềm Quang Trung. 6. Công ty kiểm toán Việt Nam VACO. 7. …. 1.4 Chính sách chất lượng Công ty BRAVO chuyên sâu trong lĩnh vực sản xuất, triển khai ứng dụng phần mềm kế toán và quản trị doanh nghiệp. BRAVO luôn định hướng: + Mỗi thành viên của Công ty phải đứng về phía khách hàng, coi trọng khách hàng, lợi ích của công ty. + Luôn cung cấp cho khách hàng những phần mềm và dịch vụ có chất lượng cao đáp ứng yêu cầu của khách hàng. + Luôn xây dựng và cải tiến chất lượng song song với việc ứng dụng công nghệ mới vào phần mềm nhằm đáp ứng nhu cầu của khách hàng. 1.5- Bộ máy công ty 1.5.1 Hệ thống quản lý chất lượng Công ty BRAVO xây dựng, lập văn bản, thực hiện, duy trì hệ thống quản lý chất lượng và thường xuyên nâng cao hiệu lực của hệ thống và quản lý các quá trình theo yêu cầu của tiêu chuẩn TCVN ISO 9001:2000/ISO 9001:2000. Công ty thực hiện 1. Nhận biết quá trình cần thiết trong hệ thống quản lý chất lượng và áp dụng chúng trong toàn bộ Công ty. 2. Xác định trình tự và sự tương tác của các quá trình này. 3. Xác định chuẩn mực và các phương pháp cần thiết để đảm bảo việc tác nghiệp và kiểm soát các quá trình có hiệu lực. 4. Đảm bảo sự sẵn có các nguồn lực và thông tin cần thiết để hỗ trợ hoạt động tác nghiệp và theo dõi các quá trình. 5. Đo lường, theo dõi và phân tích các quá trình. 6. Thực hiện các hành động cần thiết để đạt được kết quả dự định và cải tiến liên tục các quá trình này. Khi chọn nguồn lực bên ngoài cho quá trình nào ảnh hưởng đến sự phù hợp của sản phẩm đối với các yêu cầu. Công ty đảm bảo kiểm soát những quá trình đó. 1.5.2 Sơ đồ cơ cấu bộ máy quản lý trong công ty. Cơ cấu tổ chức bộ máy quản lý trong Công ty cổ phần phần mềm kế toán BRAVO được tổ chức theo sơ đồ sau: Hình 1.1 Sơ đồ cơ cấu bộ máy quản lý 1.5.3 Các phòng ban và chức năng tương ứng Các phòng ban trong công ty được tổ chức theo sơ đồ sau Hình 1.2 Sơ đồ tổ chức của công ty - Ban Giám đốc: Thông tin chung Chức năng, nhiệm vụ - Điều hành và quản lý, giám sát toàn bộ hoạt động của công ty, Chức năng và nhiệm vụ được quy định trong điều lệ của công ty. Chế độ làm việc - 1 ngày 8 tiếng nghỉ chiều thứ 7 và chủ nhật. Chế độ báo cáo - Chỉ đạo công ty họp 1 tuần/1 lần. Mô tả công việc STT Công việc Mức 1 Mức 2 1 - Lãnh đạo hoạt động chung của Công ty để thực hiện các mục tiêu, chính sách và kế hoạch đã đặt ra. x 2 - Điều phối nhiệm vụ, quyền hạn và phân công trách nhiệm cho các phòng, cá nhân để đảm bảo hoàn thành và vượt chỉ tiêu công việc X 3 - Kiểm tra đánh giá và tổng kết hiệu quả công việc của từng phòng, từng cá nhân X X 4 - Đánh giá và xét duyệt năng lực cán bộ trong toàn công ty X x Công tác chuyên môn 1 - Xây dựng chiến lược kế hoạch mục tiêu và chính sách cho từng thời kỳ của công ty X X 2 - Đưa ra các quyết định mệnh lệnh cụ thể để giải quyết các công việc theo kế hoạch X X 3 - Tuyển dụng, đào tạo và sắp xếp nhân sự X X 4 - Giám sát đôn đốc các phòng ban thực hiện theo theo chức năng, nhiệm vụ và mục tiêu từng phòng X X 5 - Báo cáo tình hình hoạt động kinh doanh của công ty cho Giám đốc X X 6 - Chỉ đạo toàn thể công ty họp cuối tuần X x Yêu cầu năng lực Năng lực Nội dung Mức 1 Mức 2 Trình độ học vấn - Tốt nghiệp Đại học X Trình độ chuyên môn - Có kiến thức tốt về quản lý X - Hiểu biết tôt về quản trị nguồn nhân lực và kinh doanh sản phẩm phần mềm X X - Nắm vững các quá trình hoạt động của công ty x Trình độ ngoại ngữ - Có khả năng đọc và giao tiếp tiếng Anh X X Kinh nghiệm - Giải quyết các vấn đề tốt: Phân tích nói và viết văn bản thành thạo, biết lập kế hoạch chiến lược kinh doanh, lãnh đạo tốt X Yêu cầu khác - Kiến thức: Biết nghiệp vụ quản trị nhân sự và điều hành X X - Kỹ năng: giao tiếp tốt, xử lý công việc nhanh X X - Thái độ hòa nhã, lịch sự và có quan hệ tốt với mọi người X x Mức 1: Giám đốc Mức 2: Phó giám đốc -Nhân viên kinh doanh Thông tin chung Chức năng, nhiệm vụ - Ký kết hợp đồng, nghiên cứu phát triển thị trường Chế độ làm việc - 1 ngày 8 tiếng nghỉ chiểu T7 và CN Chế độ báo cáo - Báo cáo công việc cho ban giám đốc công ty 1 tuần /1 lần Mô tả công việc STT Công việc Mức 1 Mức 2 1 - Lãnh đạo phòng kinh doanh theo phân công của ban Giám đốc để phòng kinh doanh thực hiện các mục tiêu và kế hoạch được giao, X 2 - Trực tiếp nhận nhiệm vụ từ ban Giám đốc Công ty. Trên cơ sở đó tổ chức điều phối công việc giữa các thành viên để hoàn thành chỉ tiêu công việc đúng hạn X 3 - Kiểm tra kiểm soát tình hình và tiến độ thực hiện công việc của các thành viên trong phòng X 4 - Xây dựng kế hoạch năm và đánh giá năng lực cán bộ trong phòng X 5 - Báo cáo tổng kết về tình hình hoạt động và kế hoạch tuần tới của phòng. X X Công tác chuyên môn 1 - Sử dụng các biện pháp nghiệp vụ để ký kết hợp đồng: Giới thiệu, khảo sát báo giá thảo luận làm hợp đồng X X 2 - Xúc tiến việc phát triển thị trường: Quảng cáo, hội chợ, gửi thư. X X 3 - Tổ chức thu thập các tài liệu, thông tin cần thiết phục vụ cho hoạt động phân tích thống kê X X 4 - Hỗ trợ cán bộ kỹ thuật trong việc triển khai phần mềm: Thảo luận với khách hàng để tìm phương pháp ứng dụng phần mềm phù hợp X X 5 - Chăm sóc khách hàng sau khi ký hợp đồng X X 6 - Báo cáo hàng tuần về tình hình thực hoạt động tuần cho trưởng phòng X Yêu cầu năng lực Năng lực Nội dung Mức 1 Mức 2 Trình độ học vấn - Tốt nghiệp Đại học X X Trình độ chuyên môn - Có kiến thức về quản lý X - Hiểu biết tốt về kinh doanh sản phẩm phần mềm X X - Nắm vững các quá trình hoạt động của công ty X X Trình độ ngoại ngữ - Có khả năng đọc và giao tiếp tiếng Anh X X Kinh nghiệm thực tế - Làm việc tại công ty tư 01 năm trơ lên, có ít nhất 02 năm kinh nghiệm trong lĩnh vực kinh doanh X Đào tạo ban đầu - Sổ tay chất lượng X X Yêu cầu khác - Kinh nghiệm: Giải quyết các vấn đề tốt; phân tích, nói và viết văn bản thành thạo, biết thiết lập kế hoạch chiến lược kinh doanh, có khả năng lãnh đạo X - Kiến thức: Biết nghiệp vụ kế toán, Marketing X X - Kỹ năng: Giao tiếp tốt, xử lý công việc nhanh X X - Thái độ: Hòa nhã, lịch sự và có quan hệ tốt với mọi người X X Mức 1 Trưởng phòng kinh doanh Mức 2 Nhân viên - Nhân viên kỹ thuật Thông tin chung Chức năng, nhiệm vụ - Cài đặt, đào tạo, hỗ trợ sử dụng và lập trình trong giai đoạn triển khai Chế độ làm việc - 1 ngày làm 8 tiếng, nghỉ chiều T7 và CN Chế độ báo cáo - Báo cáo theo công việc cho ban giám đốc công ty 1 tuần / 1 lần Mô tả công việc STT Công việc Mức 1 Mức 2 1 - Lãnh đạo phòng kỹ thuật theo phân công của ban Giám đốc để phòng kỹ thuật thực các mục tiêu và kế hoạch được giao. X 2 - Trực tiếp nhận nhiệm vụ từ ban Giám đốc Công ty. Trên cơ sở đó tổ chức điều phối công việc giữa Trưởng nhóm và các thành viên để đảm bảo hoàn thành các chỉ tiêu công việc đúng hạn X 3 - Kiểm tra kiểm soát tình hình và tiến độ thực hiện công việc của các thành viên trong phòng kỹ thuật. X 4 - Xây dựng kế hoạch năm, đánh giá năng lực cán bộ trong phòng X 5 - Báo cáo tổng kết và lập kế hoạch tuần tới của phòng cho Ban Giám đốc X Công tác chuyên môn 1 - Cài đặt và đào tạo hỗ trợ sử dụng và lập trình X X 2 - Thường xuyên cập nhật sửa đổi, thăm hỏi khách hàng và báo cáo cá nhân vào chương trình Quản lý khách hàng của công ty X X 3 - Xác định thời gian để lấy: Biên bản xác nhận đào tạo; biên bản nghiệm thu; Biên bản thanh lý và lập phiếu chuyển bảo hành X X 4 - Phối hợp với các phòng ban trong công ty trong việc triển khai phần mềm: Thảo luận với khách hàng để tìm phương pháp ứng dụng phần mềm phù hợp X X 5 - Chăm sóc khách hàng thường xuyên để trợ giúp kịp thời các nghiệp vụ, lỗi phát sinh và mức độ sử dụng chương trình X X 6 - Báo cáo công việc và kế hoạch cho Trưởng phòng/Trưởng nhóm X Yêu cầu năng lực Năng lực Nội dung Mức 1 Mức 2 Trình độ học vấn - Tốt nghiệp Đại học/Cao đẳng X X Trình độ chuyên môn - Có kiến thức về quản lý X - Hiểu biết về lập trình và sản phẩm phần mềm, có khả năng làm việc độc lập hoặc theo nhóm, có khả năng tự test sản phẩm. X X - Nắm vững các quá trình hoạt động của công ty X Trình độ ngoại ngữ Kinh nghiệm thực tế - Làm việc tại công ty tư 02 năm trở lên, có ít nhất 01 năm kinh nghiệm trong lĩnh vực triển khai phần mềm kế toán X Đào tạo ban đầu - Sổ tay chất lượng X X Yêu cầu khác - Kinh nghiệm: Giải quyết các vấn đề tốt; phân tích, nói và viết văn bản thành thạo, biết thiết lập kế hoạch chiến lược kinh doanh, có khả năng lãnh đạo X - Kiến thức: Biết nghiệp vụ kế toán. X X - Kỹ năng: Giao tiếp tốt, xử lý công việc nhanh X X - Thái độ: Hòa nhã, lịch sự và có quan hệ tốt với mọi người X X Mức 1 Trưởng phòng kỹ thuật/ Trưởng nhóm Mức 2 Nhân viên - Nhân viên phát triển sản phẩm Thông tin chung Chức năng, nhiệm vụ - Phát triển và test sản phẩm. Chế độ làm việc - 1 ngày làm 8 tiếng, nghỉ chiều T7 và CN Chế độ báo cáo - Báo cáo công việc cho ban giám đốc công ty 1 tuần / 1 lần Mô tả công việc STT Công việc Mức 1 Mức 2 1 - Lãnh đạo phòng phát triển theo phân công của ban Giám đốc để phòng phát triển thực các mục tiêu và kế hoạch được giao. X 2 - Trực tiếp nhận nhiệm vụ từ ban Giám đốc Công ty. Trên cơ sở đó tổ chức điều phối công việc giữa Trưởng nhóm và các thành viên để đảm bảo hoàn thành các chỉ tiêu công việc đúng hạn X 3 - Kiểm tra kiểm soát tình hình và tiến độ thực hiện công việc của các thành viên trong phòng phát triển sản phẩm X 4 - Xây dựng kế hoạch năm, đánh giá năng lực cán bộ trong phòng X 5 - Báo cáo tổng kết và lập kế hoạch tuần tới của phòng cho Ban Giám đốc X Công tác chuyên môn 1 - Phát triển sản phẩm X X 2 - Cập nhật công việc phát triển, sửa đổi, test sản phẩm và báo cáo cá nhân vào chương trình quản lý khách hàng của công ty. X X 3 - Test sản phẩm của phòng kỹ thuật trước khi chuyến sang phòng bảo hành X X 4 - Phối hợp với các phòng ban trong công ty trong việc: Thảo luận trao đổi công nghệ và phát triển sản phẩm mới. X X 5 - Chăm sóc khách hàng thường xuyên để trợ giúp kịp thời các nghiệp vụ, lỗi phát sinh và mức độ sử dụng chương trình X X 6 - Báo cáo công việc và kế hoạch cho Trưởng phòng X Yêu cầu năng lực Năng lực Nội dung Mức 1 Mức 2 Trình độ học vấn - Tốt nghiệp Đại học/Cao đẳng X X Trình độ chuyên môn - Có kiến thức về quản lý X - Hiểu biết về lập trình và sản phẩm phần mềm X X - Nắm vững các quá trình hoạt động của công ty X Trình độ ngoại ngữ Kinh nghiệm thực tế - Làm việc tại công ty tư 02 năm trở lên, có ít nhất 01 năm kinh nghiệm trong lĩnh vực triển khai phần mềm kế toán X Đào tạo ban đầu - Sổ tay chất lượng X X Yêu cầu khác - Kinh nghiệm: Giải quyết các vấn đề tốt; phân tích, nói và viết văn bản thành thạo, biết thiết lập kế hoạch chiến lược kinh doanh, có khả năng lãnh đạo X - Kiến thức: Biết nghiệp vụ kế toán. X X - Kỹ năng: Giao tiếp tốt, xử lý công việc nhanh X X - Thái độ: Hòa nhã, lịch sự và có quan hệ tốt với mọi người X X Mức 1: Trưởng phòng phát triển sản phẩm Mức 2: Nhân viên - Nhân viên kế toán Thông tin chung Chức năng, nhiệm vụ - Chịu trách nhiệm trước ban Giám đốc về hạch toán kinh doanh của toàn công ty, giao dịch với cơ quan thuế, ngân hàng và các tổ chức khác. Chế độ làm việc - 1 ngày làm 8 tiếng, nghỉ chiều T7 và CN Chế độ báo cáo - Theo chế độ của Bộ Tài chính, cơ quan thuế, thống kê và phòng đăn ký kinh doanh. Báo cáo công việc cho Ban Giám đốc Công ty 1 tuần/ 1 lần Mô tả công việc STT Công việc Mức 1 Mức 2 1 - Thực hiện kế hoạch được giao theo sự phân công của ban giám đốc X 2 - Trực tiếp nhận nhiệm vụ từ ban Giám đốc Công ty. Trên cơ sở đó tổ chức điều phối công việc để đảm bảo hoàn thành các chỉ tiêu công việc đúng hạn X 3 - Kiểm tra kiểm soát tình hình và tiến độ thực hiện công việc của các thành viên trong nhóm X 4 - Đánh giá năng lực cán bộ trong phòng X 5 - Báo cáo tổng kết và lập kế hoạch tuần tới của phòng cho Ban Giám đốc X Công tác chuyên môn 1 - Bảo đảm hoàn thành các báo cáo tài chính đúng hạn và bảo mật. Bảo đảm các nguyên tắc kế toán và các chính sách kiểm tra nội bộ. Bảo đảm các quy trình kế toán chuẩn, ghi chép và lưu trữ chứng từ X X 2 - Bảo đảm các quy định của các cơ quan thuế và Nhà Nước: Cập nhật mới; đăng ký, quy trình và báo cáo. X X 3 - Phối hợp với các phòng khác trong việc thực hiện các điều khoản thanh toán thu chi và chính sách tài chính của công ty. X X 4 - Giải quyết các vấn đề liên quan đến mua sắm và quản lý tài sản, thuế, kiểm toán BHXH, BHYT… X X 5 - Báo cáo công việc và kế hoạch cho Trưởng phòng X Yêu cầu năng lực Năng lực Nội dung Mức 1 Mức 2 Trình độ học vấn - Tốt nghiệp Đại học/Cao đẳng X X Trình độ chuyên môn - Có kiến thức về quản lý X - Hiểu biết về chế độ tài chính kế toán và các chính sách hiện hành của nhà nước. X X - Nắm vững các quá trình hoạt động của công ty, VPĐD X Trình độ ngoại ngữ Kinh nghiệm thực tế - Làm việc tại công ty tư 02 năm trở lên, có ít nhất 02 năm kinh nghiệm trong lĩnh vực tài chính kế toán. X Đào tạo ban đầu - Sổ tay chất lượng X X Yêu cầu khác - Kinh nghiệm: Giải quyết các vấn đề tốt; phân tích, nói và viết văn bản thành thạo, biết thiết lập kế hoạch chiến lược kinh doanh, có khả năng lãnh đạo X - Kỹ năng: Giao tiếp tốt, xử lý công việc nhanh X X - Thái độ: Hòa nhã, lịch sự và có quan hệ tốt với mọi người X X Mức 1: Trưởng phòng Mức 2: Nhân viên( Nếu có) - Nhân viên bảo hành Thông tin chung Chức năng, nhiệm vụ - Trợ giúp chăm sóc khách hàng sử dụng phần mềm trong giai đoạn bảo hành, bảo trì sản phẩm. Chế độ làm việc - 1 ngày làm 8 tiếng, nghỉ chiều T7 và CN Chế độ báo cáo - Báo cáo công việc cho Ban Giám đốc Công ty 1 tuần/ 1 lần Mô tả công việc STT Công việc Mức 1 Mức 2 Công tác quản lý 1 - Lãnh đạo phòng bảo hảnh theo phân công của Ban Giám đốc X 2 - Trực tiếp nhận nhiệm vụ từ ban Giám đốc Công ty. Trên cơ sở đó tổ chức điều phối công việc để đảm bảo hoàn thành các chỉ tiêu công việc đúng hạn X 3 - Kiểm tra kiểm soát tình hình và tiến độ thực hiện công việc của các thành viên trong nhóm X 4 - Xây dựng kế hoạch năm và đánh giá năng lực cán bộ trong phòng. X 5 - Báo cáo tổng kết về tình hình hoạt động và lập kế hoạch tuần tới của phòng cho Ban Giám đốc X Công tác chuyên môn 1 - Khắc phục lỗi phát sinh, hỗ trợ sử dụng chương trình và nghiệp vụ kế toán trong quá trình khách hàng sử dụng phần mềm. X X 2 - Thực hiện cập nhật thay đổi của chế độ kế toán mới, hiệu chỉnh chương trình theo yêu cầu của khách hàng. X X 3 - Thực hiện việc chăm sóc khách hàng. Theo dõi tình trạng hợp đồng thuộc phạm vi theo dõi của phòng bảo hành. X X 4 - Tiếp nhận hợp đồng từ phòng kinh doanh và triển khai. Trao đổi thông tin với các phòng ban liên quan. X X 5 - Thực hiện cập nhật thông tin các giao dịch vào phần mềm quản lý khách hàng, trao đổi kinh nghiệm giao dịch, kiến thức chuyên môn. Báo cáco hàng tuần về tình hình công việc trong tuần và kế hoạch tuần. X X Yêu cầu năng lực Năng lực Nội dung Mức 1 Mức 2 Trình độ học vấn - Tốt nghiệp Đại học/Cao đẳng X X Trình độ chuyên môn - Có kiến thức về quản lý X - Hiểu biết tôt về lập trình và sản phẩm phần mềm. X X - Nắm vững các quá trình hoạt động của công ty. X Trình độ ngoại ngữ Kinh nghiệm thực tế - Có kiến thức về tiếng Anh trong kế toán, làm việc tại công ty tư 02 năm trở lên. X Đào tạo ban đầu - Sổ tay chất lượng X X Yêu cầu khác - Kinh nghiệm: Giải quyết các vấn đề tốt; phân tích, nói và viết văn bản thành thạo, biết thiết lập kế hoạch chiến lược kinh doanh, có khả năng lãnh đạo X - Kiến thức: Biết nghiệp vụ kế toán. X X - Kỹ năng: Giao tiếp tốt, xử lý công việc nhanh. X X - Thái độ: Hòa nhã, lịch sự và có quan hệ tốt với mọi người X x Mức 1: Trưởng phòng Mức 2: Nhân viên - Nhân viên hành chính nhân sự Thông tin chung Chức năng, nhiệm vụ - Tuyển dụng, lưu trữ hồ sơ và làm công việc văn phòng khác. Chế độ làm việc - 1 ngày làm 8 tiếng, nghỉ chiều T7 và CN Chế độ báo cáo - Báo cáo công việc cho Ban Giám đốc Công ty 1 tuần/ 1 lần Mô tả công việc STT Công việc Mức 1 Mức 2 1 - Lãnh đạo phòng hành chính nhân sự theo phân công của Ban Giám đốc để phòng hành chính nhân sự thực hiện theo chính sách mục tiêu và kế hoạch. X 2 - Trực tiếp nhận nhiệm vụ từ ban Giám đốc Công ty. Trên cơ sở đó tổ chức điều phối công việc để đảm bảo hoàn thành các chỉ tiêu công việc đúng hạn X 3 - Kiểm tra kiểm soát tình hình và tiến độ thực hiện công việc của các thành viên trong nhóm X 4 - Xây dựng kế hoạch năm và đánh giá năng lực cán bộ trong phòng. X 5 - Báo cáo tổng kết về tình hình hoạt động và lập kế hoạch tuần tới của phòng cho Ban Giám đốc X Công tác chuyên môn 1 - Trực tổng đài điện thoại lưu giữ, ghi lại tin nhắn. X 2 - Thực hiện và kiểm tra công tác vệ sinh văn phòng, an toàn cháy nổ và lưu trữ hồ sơ tài liệu (Công văn đi, công văn đến, fax…) X X 3 - Thực hiện việc tiếp nhận nhân sự để đảm bảo quyền lợi và nghĩa vụ của người lao động. X X 4 - Giám sát thời gian làm việc hàng ngày và đề nghị xét tăng lương cho cán bộ nhân vien theo đúng quy định của công ty. 5 - Phối hợp với ban Giám đốc và các phòng ban trong việc thực hiện hệ thống quản lý chất lượng theo tiêu chuẩn ISO 9001:2000. X X 6 - Mua sắm đồ dùng văn phòng phẩm, nước uống, đặt ăn trưa cho văn phòng. Kiểm soát các chi phí hành chính văn phòng X 7 - Báo cáo hàng tuần về tình hình hoạt động trong tuần và kế hoạch tuần tới cho Trưởng phòng X Yêu cầu năng lực Năng lực Nội dung Mức 1 Mức 2 Trình độ học vấn - Tốt nghiệp Đại học/Cao đẳng X X Trình độ chuyên môn - Có kiến thức về nguồn nhân lực X - Hiểu biết tôt về sản phẩm phần mềm. X X - Nắm vững các quá trình hoạt động của công ty/VPĐD. X Trình độ ngoại ngữ - Có khả năng đọc và giao tiếp tiếng Anh. X X Kinh nghiệm thực tế - Làm việc tại công ty tư 02 năm trở lên. X Đào tạo ban đầu - Sổ tay chất lượng X X Yêu cầu khác - Kinh nghiệm: Giải quyết các vấn đề tốt; phân tích, nói và viết văn bản thành thạo, biết thiết lập kế hoạch chiến lược kinh doanh, có khả năng lãnh đạo X - Kiến thức: Biết nghiệp vụ văn thư, lưu trữ. X X - Kỹ năng: Giao tiếp tốt, xử lý công việc nhanh. X X - Thái độ: Hòa nhã, lịch sự và có quan hệ tốt với mọi người X x Mức 1: Trưởng phòng Mức 2: Nhân viên 1.6 Quy trình sản xuất sản phẩm Là một Công ty phần mềm chuyên nghiệp, BRAVO đã xây dựng một quy trình sản xuất phần mềm được phân chia thành các công việc cụ thể và được thực hiện theo các công đoạn sau: 1.6.1 Hoạch định quá trình tạo sản phẩm Lập kế hoạch chất lượng thực hiện cho việc tạo sản phẩm và xác định các điều kiện cần thiết để thực hiện. Các mục tiêu chất lượng và yêu cầu đối với sản phẩm được hoạch định tại từng thời kỳ kế hoạch, công ty lại xác định từng mục tiêu và kế hoạch cụ thể nhằm đạt được mục tiêu chất lượng chung cho cả hệ thống Nhu cầu thiết lập các quá trình và hệ thống văn bản cung cấp các nguồn lực và vật chất cụ để thiết kế sản phẩm. Các hoạt động kiểm tra xác nhận và các tiêu chuẩn chấp nhận sản phẩm. Duy trì hệ thống hồ sơ cần thiết để cung cấp bằng chứng khách quan về sự phù hợp của các quá trình và sản phẩm tạo thành, đáp ứng các yêu cầu. Xác định sản phẩm, các yêu cầu liên quan đến sản phẩm của khách hàng; xem xét các yêu cầu để đảm bảo rằng sản phẩm đã đáp ứng được các mục tiêu chất lượng đã thiết lập Kết quả kinh doanh của kỳ kế hoạch trước Năng lực con người, tài sản và nguồn vốn hiện tại của công ty Khả năng thị trường tiêu thụ sản phẩm Hình 1.3 Quy trình sản xuất sản phẩm 1.6.2 Các vấn đề liên quan đến khách hàng Xác định các yêu cầu liên quan đến sản phẩm - Những yêu cầu liên quan đến sản phẩm - Những yêu cầu luật định có liên quan Xem xét các yêu cầu liên quan đến sản phẩm Công ty xem xét các yêu cầu liên quan đến sản phẩm trước khi cam kết cung cấp sản phẩm và dịch vụ đến khách hàng, bao gồm: + Những yêu cầu liên quan đến sản phẩm được định rõ. Những yêu cầu trong hợp đồng hoặc đơn đặt hàng khác biệt so với thỏa thuận trước đó cần phải giải quyết Khả năng công ty đáp ứng những yêu cầu của khách hàng liên quan đến sản phẩm phải được duy trì. Khi khách hàng cung cấp những yêu cầu không được lập thành văn bản thì những yêu cầu đó phải được xác nhận trước khi chấp nhận. * Trao đổi thông tin với khách hàng Công ty xem xét, xác định và sắp xếp có hiệu quả việc liên lạc với khách hàng liên quan đến: Tuyên truyền các thông tin về sản phẩm. Các giao dịch với khách hàng thông qua hoạt định tiếp thị, ký hợp đồng với khách hàng…. Các ý kiến của khách hàng bao gồm cả những khiếu nại của khách hàng đều được xem xét giải quyết nhằm cải tiến sản phẩm, cải tiến hệ thống. 1.6.3 Thiết kế sản phẩm Hoạch định Căn cứ trên yêu cầu thiết kế của khách hàng hoặc của các đơn vị khác trong công ty. Phòng phát triển sản phẩm có trách nhiệm phân tích và hoạch định các nội dung công việc liên quan đến toàn bộ quá trình thiết kế bao gồm việc khảo sát, phân công tiến hành thiết kế, xem xét kiểm tra và phê duyệt. Việc phân công trách nhiệm thiết kế được ghi cụ thể trong kế hoạch thiết kế và trưởng nhóm thiết kế có trách nhiệm quản lý sự tương giao giữa các thành viên trong nhóm nhằm đảm bảo sự trao đổ thông tin có hiệu quả. Đầu vào của thiết kế Phòng phát triển sản phẩm có trách nhiệm xác định đầy đủ các thông tin đầu vào của thiết kế bao gồm: + Các yêu cầu của khách hàng + Loại sản phẩm phần mềm được thiết kế + Thông số kỹ thuật: Cấu trúc các bảng, tên, tóm tắt các hàm chính… + Mục đích sử dụng + Phiếu khảo sát số liệu đầu vào, thông tin khảo sát hiện trường về môi trường và điều kiện lắp đặt sử dụng + Các tiêu chuẩn, tài liệu kỹ thuật và quy định hiện hành + Các tài liệu của khách hàng cung cấp + Tất cả các thông tin đầu vào đều được xem xét thỏa đáng trước khi triển khai Đầu ra của thiết kế Đầu ra của thiết kế dưới dạng văn bản thiết kế và quy trình công nghệ Bản thiết kế và các yêu cầu kỹ thuật trên đó còn viện dẫn đến các tiêu chuẩn kỹ thuật áp dụng để làm chuẩn mực chấp nhận sản phẩm khi thiết kế. Xem xét thiết kế Trưởng phòng hoặc phụ trách thiết kế phải xem xét, kiểm duyệt hồ sơ thiết kế trước khi trình Giám đốc nhằm đảm bảo hồ sơ thiết kế đáp ứng được các yêu cầu và kế hoạch của thiết kế Khi xem xét thiết kế, nếu có yêu cầu cần sửa đổi, trưởng phòng phát triển sản phẩm hoặc phụ trách thiết kế phải cập nhật lại kế hoạch thiết kế, tiến độ thiết kế cho phù hợp với tiến độ chung Quy trình thiết kế Hình 1.4 Quy trình thiết kế sản phẩm 1.7. Tình trạng tin học hóa công tác quản lý hợp đồng 1.7.1 Chương trình quản lý khách hàng của công ty. Công ty đã trang bị một phầm mềm quản lý khách hàng nhằm quản lý khách hàng, nhân viên, các giao dịch với khách hàng…. Được cài đặt bằng Visual Foxpro 8.0 và hiện nay đang có nhu cầu chuyển đổi sang cài đặt bằng: cơ sở dữ liệu Microsoft SQL Server 2005 và ngôn ngữ lập trình Microsoft Studio.Net 2005 để có thể đáp ứng được đầy đủ nhu cầu quản lý của công ty. Do nhu cầu quản lý của công ty là rất lớn, và việc quản lý các hợp đồng xây dựng phần mềm của công ty là vô cùng quan trọng, nắm bắt vấn đề này Em sẽ phát triển một chương trình quản lý hợp đồng, phát triển song song cùng với công ty trên cơ sở chương trình đã được xây dựng, chương trình được cài đặt trên cơ sở dữ liệu MS SQL Server 2005 và ngôn ngữ lập trình MS Visual C# 2005. 1.7.2 Yêu cầu của đề tài ._.Phát triển một chương trình quản lý, theo dõi tình hình thực hiện hợp đồng, tình trạng của các hợp đồng, các chức năng tương ứng với các chức năng của các phòng ban trong công ty. Theo dõi được việc thực hiện hợp đồng của từng nhân viên trong công ty: Nhân viên kinh doanh - Ký kết hợp đồng, Nhân viên triển khai - Tìm hiểu nhu cầu của khách hàng và cài đặt phần mềm hoàn thiện cho khách hàng, Nhân viên lập trình - Viết các thủ tục, module chương trình theo các yêu cầu của phân tích viên, Nhân viên bảo hành - Thực hiện kiểm thử chương trình ghi nhận các kết quả kiểm thử và nhận các sản phẩm bảo hành của khách hàng, nhân viên kế toán - Theo dõi tình hình thanh toán và thanh lý hợp đồng, Nhân viên bảo hành - Theo dõi tình hình bảo hành của các hợp đồng…. Chương 2 CƠ SỞ PHƯƠNG PHÁP LUẬN VỀ HỆ THỐNG THÔNG TIN QUẢN LÝ 2.1 Thông tin quản lý và Hệ thống thông tin quản lý 2.1.1 Hệ thống trong phân tích thiết kế phần mềm Hệ thống là một tổ hợp phần cứng, phần mềm cung cấp giải pháp cho vấn đề cần giải quyết. Ngày nay trong khi hệ thống quá phức tạp mà tri thức lại quá chuyên ngành cho nên một người không thể biết mọi khía cạnh tác nghiệp. Một người khó có thể hiểu được đồng thời mọi vấn đề của hệ thống: Từ thiết kế giải pháp, viết mã chương trình, triển khai trên nền phần cứng đến đảm bảo chắc chắn mọi thành phần phần cứng làm việc tốt với nhau. Tiến trình phần mềm phức tạp phải được nhiều người thự hiện. Trước hết là khách hàng, đó là người đưa ra vấn đề cần giải quyết. Phân tích viên làm tài liệu vấn đề của khách hàng và chuyển nó tới người phát triển, đó là những lập trình viên xây dựng phần mềm để giải quyết, kiểm tra và triển khai nó trên phần cứng. Phát triển phần mềm có thể được thực hiện bằng nhiều con đường khác nhau. Các dự án có thể tuân thủ một trong các loại tiến trình phát triển, bao gồm từ tiến trình thác nước tới tiến trình lặp và tăng dần. Mỗi loại có ưu nhược điểm riêng. 2.1.2 Thông tin trong quản lý Quản lý được hiểu là tập hợp các quá trình biến đổi thông tin thành hành động, một việc tương đương với quá trình ra quyết định. Hình vẽ dưới đây là sự thể hiện một tổ chức do R.N Anthony đưa ra, Anthony trình bày tổ chức như là một thực thể cấu thành từ ba mức quản lý: Thông tin Thông tin Thông tin Quyết định Quyết định Quyết định Cấp chiến thuật Cấp tác nghiệp Xử lý giao dịch Cấp chiến lược Dữ liệu Dữ liệu Dữ liệu Hình 2.1 Tháp quản lý Các quyết định của một tổ chức chia làm ba loại: quyết định chiến lược, quyết định chiến thuật và quyết định tác nghiệp. + Quyết định chiến lược là những quyết định xác định mục tiêu và những quyết định xây dựng nguồn lực cho tổ chức. + Quyết định chiến thuật là những quyết định cụ thể hóa mục tiêu thành nhiệm vụ, những quyết định kiểm soát và khai thác tối ưu nguồn lực. + Quyết định tác nghiệp là những quyết định nhằm thực thi nhiệm vụ. Tính chất của thông tin + Tính tương đối    + Tính định hướng    + Tính thời điểm   + Tính cục bộ 2.1.3 Khái quát về hệ thống thông tin Định nghĩa về hệ thống thông tin Hệ thống thông tin là một tập hợp những con người, các thiết bị phần cứng, phần mềm, dữ liệu ... thực hiện hoạt động thu thập, lưu trữ, xử lí và phân phối thông tin trong một tập các ràng buộc được gọi là môi trường. Hệ thống thông tin của mỗi tổ chức là khác nhau nhưng đều tuân thủ theo quy tắc sau: nó được thể hiện bởi con người, các thủ tục, dữ liệu và thiết bị tin học. Đầu vào (Inputs) của hệ thống thông tin được lấy từ nguồn (Sources) và được xử lý bởi hệ thống sử dụng nó cùng với các dữ liệu đã được lưu trữ từ trước. Kết quả xử lý (Outputs) được chuyển đến các đích (Destination) hoặc cập nhật vào kho lưu trữ dữ liệu (Storage). Nguồn Thu thập Xử lý và lưu giứ Kho dữ liệu Phân phát Đích Hình 2.2 Mô hình hệ thống thông tin 2.2 Phân loại hệ thống thông tin trong tổ chức doanh nghiệp 2.2.1 Phân loại Các thông tin trong một tổ chức được phân chia theo cấp quản lý và trong mỗi cấp quản lý, chúng lại được chia theo nghiệp vụ mà chúng phục vụ. Tài chính chiến lược Marketing chiến lược Nhân lực chiến lược Kinh doanh và sản xuất chiến lược Hệ thông thông tin văn phòng Tài chính chiến thuật Marketing chiến thuật Nhân lực chiến thuật Kinh doanh và sản xuất chiến thuật Tài chính tác nghiệp Marketing tác nghiệp Nhân lực tác nghiệp Kinh doanh và sản xuất tác nghiệp 2.2.2 Tầm quan trọng của hệ thống thông tin hoạt động tốt Quản lý có hiệu quả của một tổ chức dựa phần lớn vào chất lượng thông tin do các hệ thống thông tin chính thức sản sinh ra. Sự hoạt động kém của một hệ thống thông tin sẽ là nguồn gốc gây ra những hậu quả xấu nghiêm trọng. Hoạt động tốt hay xấu của một hệ thống thông tin được đánh giá thông qua chất lượng của thông tin mà nó cung cấp. Tiêu chuẩn chất lượng của thông tin như sau: + Độ tin cậy: thể hiện các mặt về độ xác thực và độ chính xác. + Tính đầy đủ: thể hiện sự bao quát các vấn đề đáp ứng yêu cầu của nhà quản lý. + Tính thích hợp và dễ hiểu. + Tính được bảo vệ: thông tin là một nguồn lực quý báu của tổ chức, do vậy nó phải được bảo vệ, những người có quyền mới được tiếp nhận. + Tính kịp thời: thông tin nhanh nhạy, gửi tới người sử dụng vào lúc cần thiết. 2.2.3 Các công cụ mô hình hóa hệ thống thông tin Có hai công cụ tương đối chuẩn dùng để mô hình hóa và xây dựng tài liệu cho hệ thống, đó là sơ đồ luồng thông tin (IFD), sơ đồ luồng dữ liệu (DFD). Sơ đồ luồng thông tin IFD Sơ đồ luồng thông tin ( IFD ) được dùng để mô tả hệ thống thông tin theo cách thức động. Tức là mô tả sự di chuyển của dữ liệu, việc xử lý, việc lưu trữ trong thế giới vật lý bằng các sơ đồ. Các kí pháp của sơ đồ luồng thông tin: Hình 2.3 các công cụ thiết kế mô hình hóa luồng thông tin Các phíc vật lý là những mô tả chi tiết hơn bằng lời cho các đối tượn được biểu diễn trên sơ đồ. Rất nhiều các thông tin không thể hiện trên sơ đồ như hình dạng của các thông tin vào – ra, thủ tục xử lý, phương tiện thực hiện xử lý… sẽ được ghi trên các phíc vật lý này. Có 3 loại phíc: Phíc luồng thông tin, phíc kho chứa dữ liệu, phíc xử lý. Sơ đồ luồng dữ liệu (DFD). Sơ đồ luồng dữ liệu dùng để mô tả cũng chính hệ thống thông tin như sơ đồ luồng thông tin nhưng trên góc độ trừu tượng. Trên sơ đồ chỉ bao gồm các luồng dữ liệu, các xử lý, các lưu trữ dữ liệu, nguồn và đích nhưng không hề quan tâm tới nơi, thời điểm và đối tượng chịu trách nhiệm xử lý. Sơ đồ luồng dữ liệu chỉ mô tả đơn thuần hệ thống thông tin làm gì và để làm gì. Ký pháp dùng cho sơ đồ luồng dữ liệu Ngôn ngữ sơ đồ luồng dữ liệu DFD sử dụng 4 loại ký pháp cơ bản: Thực thể, tiến trình, kho dữ liệu và dòng dữ liệu. Hình 2.4 Các công cụ mô hình hóa luồng dữ liệu Các mức của sơ đồ luồng dữ liệu Sơ đồ mức ngữ cảnh: Thể hiện rất khái quát nội dung chính của hệ thống thông tin. Sơ đồ này không đi vào nội dung chi tiết, mà mô tả sao cho chỉ cần một lần nhìn là nhận ra nội dung chính của hệ thống. Phân rã sơ đồ: Để mô tả hệ thống chi tiết hơn người ta dùng kỹ thuật phân rã sơ đồ. Bắt đầu từ sơ đồ ngữ cảnh, người ta phân rã thành sơ đồ mức 0, tiếp theo là mức 1…. Các phíc logic Giống như phic vật lý, phic logic hoàn chỉnh tài liệu cho hệ thống. Có 5 loại phíc logic. Chúng được dùng mô tả thêm cho luồng dữ liệu, xử lý, kho dữ liệu, tệp dữ liệu và phần tử thông tin: Phíc xử lý thông tin, phíc luồng dữ liệu, phíc phần tử thông tin, phíc kho dữ liệu, phíc tệp dữ liệu. Một số quy ước và quy tắc liên quan tới DFD 1. Mỗi luồng dữ liệu phải có một tên trừ luồng giữa xử lý và kho dữ liệu. 2. Dữ liệu chứa trên hai vật mang khác nhau nhưng luôn đi cùng nhau thì có thể tạo ra một luồng duy nhất. 3. Xử lý luôn được đánh mã số. 4. Vẽ lại các kho dữ liệu để các luồng dữ liệu không cắt nhau. 5. Tên cho một xử lý phải là một động từ. 6. Xử lý buộc phải thực hiện một biến đổi dữ liệu. Luồng vào phải khác với luồng ra của một xử lý. 7. Thông thường một xử lý mà logic xử lý của nó được trình bày bằng ngôn ngữ có cấu trúc thì chỉ chiếm một trang giấy thì không phân rã tiếp. 8. Cố gắng chỉ để tối đa 7 xử lý trên một trang DFD. 9. Tất cả các xử lý trên một DFD phải thuộc cùng một mức phân rã. 10. Luồng vào của một DFD mức cao phải là luồng vào của một DFD con mức thấp nào đó. Luồng ra tới đích của một DFD con phải là luồng ra tới đích của một DFD mức lớn hơn nào đó. 11. Xử lý thông tin không phân rã thêm thì gọi là xử lý nguyên thủy. Mỗi xử lý nguyên thủy phải có một phíc xử lý logic trong từ điển của hệ thống. 2.3 Công cụ mô hình hoá cơ sở dữ liệu logic Hình 2.5 Công cụ mô hình hóa cơ sở dữ liệu logic Các loại quan hệ Liên kết 1@1: Một lần xuất của thực thể A được liên kết chỉ vởi một lần xuất hiện của thực thể B và ngược lại. Ví dụ Hình 2.6 Mối liên kết 1@1 Liên kết 1@N: 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í dụ Hình 2.6 Mối liên kết 1@N Liên kết N@N: 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 lần xuất hiện của thực thể B và ngược lại. Ví dụ Hình 2.7 Mối liên kết N@N 2.4 Công nghệ phần mềm Công nghệ phần mềm là một tổ hợp các công cụ, phương pháp và thủ tục làm cho người quản trị viên dự án nắm được xu thế tổng quát phát triển phần mềm và giúp cho kỹ sư lập trình có một nền tảng để triển khai các định hướng của phần mềm. Hình 2.8 Cấu trúc công nghệ phần mềm Quá trình phát triển của một dự án phần mềm đều trải qua ba giai đoạn: + Giai đoạn 1: Trả lời cho câu hỏi cái gì? tức là nhóm sản xuất phần mềm phải xác định cụ thể và chi tiết sản phẩm phần mềm mà mình cần tạo ra. Đây là công đoạn cực kỳ quan trọng trong sản xuất phần mềm ở quy mô công nghiệp vì chỉ có xác định rõ ràng phạm vi của sản phẩm và các ràng buộc liên quan ta mới có thể tiến hành được kết quả của các công đoạn sau. Giai đoạn 1 phải giải quyết 3 vấn đề mấu chốt là tiến hành phân tích hệ thống một cách toàn diện theo quan điểm một phần mềm là một thành phần của hệ thống quản lý do đó nó phải được đặt trong tổng thể hệ thống đó và xem xét trong mối quan hệ ràng buộc các yếu tố quản lý khác. + Giai đoạn 2: Trả lời cho câu hỏi thế nào? tức là định hướng phần mềm sẽ phát triển như thế nào trong đó có 3 công việc cơ bản cần làm: Thiết kế, mã hoá và kiểm thử. Mã hoá trong công nghệ phần mềm là viết mã chương trình: biên dịch chương trình từ ngôn ngữ thiết kế sang một ngôn ngữ mà máy tính có thể hiểu. + Giai đoạn 3: Trả lời cho câu hỏi Thay đổi ra sao? Có 3 loại hình bảo trì là bảo trì sửa đổi, bảo trì thích nghi và bảo trì hoàn thiện hay bảo trì nâng cao. Bảo trì sửa đổi tức là sửa lỗi của phần mềm, thông thường là lỗi chi tiết, đơn giản, không phải là lỗi hệ thống. Bảo trì thích nghi là làm cho phần mềm hoàn thiện trong môi trường của người sử dụng. Bảo trì hoàn thiện: Làm cho phần mềm có thể hoạt động tốt trong các môi trường khác nhau. Hình 2.9 Các giai đoạn của quy trình phát triển phần mềm 2.5 Khái niệm phần mềm Theo Roger Pressman Phần mềm là một tập hợp gồm ba yếu tố là các chương trình máy tính, cấu trúc dữ liệu và hệ thống tài liệu hướng dẫn. Các công đoạn phát triển của phần mềm Thời kỳ 1950-1960 1960-1970 1970-1990 1990-Nay Chậm Xử lý theo lô Phần mềm đơn chiếc -Sản xuất cho nhóm người sử dụng. - Xử lý theo chế độ thời gian thực - Thương mại hoá - Hệ thống phân tán. - Tính tới hiệu quả thương mại - Phần mềm thông minh. - Hệ thống để bàn. - Lập trình hướng đối tượng. -Xử lý song song. 2.5.1 Vòng đời phát triển của phần mềm Trong công nghiệp phần mềm người ta đặc biệt quan tâm tới vấn đề là vòng đời phát triển phần mềm. Vòng đời phát triển của một phần mềm được hiểu là quy trình từ khi phần mềm ra đời cho đến khi đưa vào sử dụng và quá trình nâng cấp bảo trì. Mục đích của công việc nghiên cứu vòng đời phát triển của phần mềm là phân ra thành các giai đoạn trên cơ sở đó tìm các giải pháp và công cụ thích hợp để tác động vào mỗi giai đoạn. 2.5.2 Mô hình thác nước. Hình 2.10.a Mô hình thác nước Công đoạn đầu tiên là công nghệ hệ thống: Nó bao trùm lên toàn bộ các quy trình tiếp theo trong công nghệ phần mềm vì phần mềm là một thành phần của hệ thống quản lý do đó nó phải được xem xét trong mốt liên hệ tổng thể về kinh tế - kỹ thuật - tổ chức của toàn bộ guồng máy quản lý. Công đoạn tiếp theo là phân tích: Với mục đích xác định rõ ràng và cụ thể các yêu cầu của phần mềm, phần thiết kế trong công nghệ phần mềm hướng tới các vấn đề sau: Thiết kế kiến trúc hệ thống Thiết kế kỹ thuật Phần thiết kế hệ thống là quan trọng nhất vì nó cho ta một cái nhìn tổng thể về phần mềm cần xây dựng. Còn thiết kế kỹ thuật đi vào các vấn đề cụ thể bao gồm thiết kế dữ liệu, thiết kế thủ tục, thiết kế chương trình, thiết kế giao diện màn hình, thiết kế công cụ cài đặt. Người ta dùng mô hình thác nước để biểu diễn vòng đời phát triển của phần mềm với hai ý nghĩa: Khẳng định đây là các giai đoạn của một quy trình thống nhất, không tách rời và có mối quan hệ mật thiết với nhau. Trong mô hình này các công đoạn càng ở phía dưới thì càng phải chịu sự tác động của các giai đoạn phía trên, chỉ trừ có công đoạn công nghệ hệ thống là không chịu sự tác động của công đoạn nào. Để xây dựng được hệ thống phần mềm ta phải mô tả được vấn đề và yêu cầu của khách hàng bằng trả lời các câu hỏi như vấn đề của hệ thống là gì? Và hệ thống cần phải làm gì?. Pha phân tích của tiến trình tập trung vào việc điều tra vấn đề thay cho việc tìm ra giải pháp. Để có tài liệu phân tích đầy đủ và đúng đắn thì phải phân tích lĩnh vực vấn đề. Lĩnh vực vấn đề là khu vực tác nghiệp của con người trong đó phần mềm được xây dựng. Những người tham gia vào xây dựng hệ thống phần mềm như khách hàng, phân tích viên, lập trình viên… theo phương pháp thác nước rất ít khi làm việc cùng với nhau để chia sẻ các hiểu biết sâu sắc về vấn đề đang giải quyết. Do vậy họ mất nhiều thời gian để xây dựng được hệ thống phần mềm. Mô hình thác nước còn được biểu diễn dưới dạng chữ V trong đó quy trình kiểm tra được thực hiện đồng thời với các quy trình phát triển khác ví dụ kiểm tra chức năng được thực hiện trong quá trình phân tích, kiểm tra tích hợp được thực hiện trong quá trình thiết kế, kiểm tra module trong quy trình lập trình. Hình 2.10.b Mô hình thác nước 2.5.3 Mô hình lặp và tăng dần Mô hình thác nước không cho ta đi ngược lại chuỗi trình tự phát triển phần mềm, theo mô hình này thì phải xác định toàn bộ yêu cầu, nó được thực hiện thông qua bàn bạc với người sử dụng hệ thống và khảo sát các chi tiết tiến trình tác nghiệp. Thực tế thì khi kết thúc công việc, may mắn lắm chỉ 80% nhu cầu của hệ thống là được thu thập trong quy trình phân tích do khi đặt hàng bản thân khách hàng chỉ mới liệt kê ra các mong muốn và nguyện vọng của mình về phần mềm mà chưa hình dung được một cách cụ thể những khả năng mà phần mềm sẽ đạt được, đồng thời kỹ sư phần mềm ngay từ đầu nhận đơn đặt hàng cũng không thể hình dung hết kiến trúc tổng quát của phần mềm mà mình xây dựng. Tiếp theo là quy trình thiết kế, nơi kiến trúc hệ thống sẽ được xác định, quy trình này tập trung vào những nhiệm vụ như đặt chương trình ở đâu, cần phần cứng nào… trong khi thực hiện công việc này, chúng ta có thể tìm ra một số nhiệm vụ mới của hệ thống của hệ thống. Do đó xuất hiện nhu cầu đi ngược lại người sử dụng để trao đổi bàn bạc về nó; có nghĩa là chúng ta phải trở lại quy trình phân tích. Sau khi lặp lại vài lần như vậy chúng ta mới chuyển đến quy trình lập trình hệ thống. Khi mã hoá chương trình, chúng ta phát hiện ra một vài quyết định khi thiết kế là không thể cài đặt. Vậy ta phải quay trở lại quy trình phân tích để xem xét lại yêu cầu. Sau quy trình lập trình, quy trình kiểm thử bắt đầu. Trong khi kiểm thử chúng ta nhận thấy một vài yêu cầu chưa đủ chi tiết, giải thích nhầm lẫn có thể xảy ra. Vậy ta phải trở lại quy trình phân tích để xem xét lại yêu cầu. Sau một vài lần lặp lại như vậy ta có được hệ thống hoàn chỉnh và bàn giao cho khách hàng. Vấn đề về luật pháp, quy trình kinh doanh có thể thay đổi theo thời gian khi xây dựng hệ thống, người sử dụng có thể phàn nàn về các vấn đề này, sản phẩm làm ra không đúng như họ mong đợi. Nguyên nhân có thể là sự thay đổi của pháp luật, môi trường kinh doanh; người sử dụng không truyền đạt đúng cái họ muốn; đội ngũ dự án không tuân thủ tiến trình… Đội ngũ phát triển thường lập ra các biểu đồ và vô số tài liệu, văn bản, nhưng người dùng không phải lúc nào cũng hiểu cái mà đội ngũ phát triển cung cấp cho họ. Giải pháp nào để tránh các vấn đề này? Câu trả lời là mô hình hoá trực quan có thể giúp họ. Phát triển phần mềm là tiến trình phức tạp. Nếu bỏ qua khả năng quay trở lại của các bước thực hiện trước đó thì thiết kế hệ thống có thể sai lầm và thiếu sót nhu cầu. Để có thể đi ngược lại các bước phát triển hệ thống phần mềm chúng ta có phương pháp mới, phương pháp phát triển lặp. Phát triển lặp là làm đi làm lại việc gì đó. Trong phương pháp này ta sẽ đi qua các bước phân tích, thiết kế, phát triển, kiểm thử và triển khai phần mềm theo từng bước nhỏ nhiều lần. Bởi chúng ta khó có thể thu thập được đầy đủ mọi yêu cầu vào công đoạn đầu tiên của dữ án. Các vấn đề mới nảy sinh, vậy ta phải lập kế hoạch lặp trong dự án. Theo quan niệm này thì dự án được coi là các thác nước nhỏ, mỗi thác nước được thiết kế đủ lới để sao cho có thể hoàn thiện từng bộ phận quan trọng của của dự án và đủ nhỏ để tối thiểu nhu cầu đi trở lại. Hình 2.11 Mô hình lặp và tăng dần Theo mô hình lặp và tăng dần thì mỗi chu kỳ lặp là một vòng đời thác nước nhỏ. Vòng lặp sau được hình thành trên cơ sở tiến hoá của vòng lặp trước đó. Như vậy các quy trình truyền thống được lặp đi lặp lại và tăng dần. Trong phương pháp này, phân tích viên, người thiết kế, người lập trình… hợp tác làm việc với nhau để hiểu biết sâu sắc hệ thống, chia sẻ các ý tưởng mới dẫn đến xây dựng được một hệ thống mạnh, phức tạp hơn. 2.6 Cấp bậc kiến trúc phần mềm Cấp bậc kiến trúc của phần mềm được hiểu là thứ bậc trình tự các khối và mối liên kết giữa chúng với nhau. Như vậy đứng trước một vấn đề thực tiễn người kỹ sư phần mềm có thể đưa ra nhiều giải pháp khác nhau để giải quyết vấn đề đó, cấp bậc kiến trúc phần mềm hoàn toàn phụ thuộc vào trình độ chuyên môn của mỗi người. Yêu cầu của mỗi kiến trúc phần mềm là phải đạt được hai vấn đề + Đảm bảo tính chặt chẽ trong kiến trúc để không xảy ra những lỗ hổng trong phần mềm. + Kiến trúc phải đảm bảo không quá phức tạp để khi dịch thành chương trình thì quy mô của chương trình không quá lớn và khi thực hiện mỗi chức năng. Mô hình chuyển từ bài toán thực tế sang bài toán logic (problem -solution). Hình 2.12 Mô hình chuyển đổi từ vấn đề thành các giải pháp Mô hình này cho ta thấy với một vấn đề thực tế nhưng qua bàn tay chế tác của kỹ sư phần mềm có thể trở lên rất nhiều kiến trúc phần mềm khác nhau. Tiêu chuẩn duy nhất để lựa chọn một kiểu kiến trúc nào đó là không quá phức tạp nhưng vẫn đảm bảo tính năng hoạt động của phần mềm. Đây chính là quá trình cấu trúc hóa các vấn đề phi cấu trúc. 2.7 Một số khái niệm về lập trình hướng đối tượng Phương thức (method): Phương thức hay (Phương pháp) là cách thức cấu trúc các suy nghĩ và hành động của cong người. Nó cho biết chúng ta phải làm cái gì, làm như thế nào, làm khi nào và tại sao lại phải làm như vậy để hình thành hệ thống phần mềm. Đối tượng (object): Theo nghĩa thông thường thì đối tượng là một người, mội vật hay hiện tượng mà con người nhằm vào trong suy nghĩ, trong hành động; là bất cứ cái gì nhìn thấy được và sờ mó được. Trong phương pháp hướng đối tượng thì đối tượng là trừu tượng cái gì đó trong lĩnh vực vấn đề hay trong cài đặt của nó, phản ánh khả năng hệ thống lưu giữ thông tin về nó và tương tác với nó; gói các giá trị thuộc tính và các dịch vụ (các phương thức). Lớp (class): Theo nghĩa thông thường thì lớp là nhóm của một nhiều người hay vật có tính tương tự nhất định hay đặc điểm chung. Trong phương pháp hướng đối tượng thì lớp là một mô tả hay nhiều đối tượng, mô tả tập thống nhất các thuộc tính và phương thức. Nó còn mô tả cách tạo đối tượng mới trong lớp như thế nào. Theo đó mỗi một đối tượng là một instance của một lớp. Trừu tượng (abstract): Trừu tượng là nguyên lý bỏ qua những khía cạnh của chủ thể không liên quan đến mục đích hiện tại để tập trung đầy đủ hơn vào các khía cạnh còn lại. Như vậy có thể nói rằng trừu tượng là đơn giản hoá vấn đề đang xem xét. Chúng loại bỏ đi các chi tiết dư thừa mà chỉ tập trung vào các điểm chính cơ bản. Mô hình (model): Trong lĩnh vực phần mềm, mô hình là kế hoạch chi tiết của hệ thống, nó giúp ta lập kế hoạch trước khi xây dựng hệ thống. Mô hình giúp ta khẳng định tính đúng đắn của thiết kế, phù hợp yêu cầu, hệ thống vẫn giữ vững khi yêu cầu người dùng thay đổi. Phương pháp hướng đối tượng xem xét một phần của thế giới thực như các đối tượng. Máy điện thoại, con người, ô tô …. Là các đối tượng. Các đối tượng này bao gồm nhiều đối tượng khác như: ô tô có tay lái, bánh xe…, con người có tay chân, mắt mũi… Đối tượng thế giới thực có cấu trúc phức tạp làm con người khó nhận thức chúng. Trong cuộc sống hàng ngày chúng ta đơn giản hoá đối tượng khi suy nghĩ, hay nói cách khác chúng ta làm việc với mô hình. Mô hình chỉ cho phép lựa chọn một vài khía cạnh có ý nghĩa cho việc thực hiện công việc cụ thể nào đó. Chúng cho phép dự đoán, hiểu các khía cạnh của vấn đề đang quan tâm. Như vậy mô hình là bức tranh hauy mô tả của vấn đề đang được cố gắng giải quyết hay biểu diễn. Mô hình còn có thể là mô tả chính giải pháp. Trong phát triển phần mềm thay cho đối tương thực chúng ta sẽ làm việc với biểu tượng. Tiến trình phát triển phần mềm là làm giảm một số đặc trưng của đối tượng để hình thành mô hình: Làm giảm độ phức tạp bằng mô hình trừu tượng. Phương pháp luận (methodlogy): Phương pháp luận mô tả cách thức suy nghĩ về phần mềm và phát triển phần mềm. Nó bao gồm ngôn ngữ mô hình hoá, và tiến trình. Phương pháp luận khác với phương pháp. Phương pháp luận là nghiên cứu phương pháp. Phương pháp luân mô tả hình thức các phần tử mô hình, cú pháp và ngữ nghĩa của các ký pháp trong mô hình. Lĩnh vực vấn đề (domain prolem): Mục tiêu của tiếp cận hướng đối tượng là mô hình hoá các đặc tính tĩnh và động của môi trường, nơi xác định yêu cầu phần mềm. Môi trường này được gọi là lĩnh vực vấn đề. Vấn đề là câu hỏi đặt ra để giải quyết hoặc xem xét. Lĩnh vực là không gian của các hoạt động hoặc ảnh hưởng. Nó là vùng tác nghiệp hay kinh nghiệm của con người trong đó phần mềm được sử dụng. Vậy lĩnh vực vấn đề là vùng mà ta đang cố gẵng xem xét. Phân tích: Phân tích là tách, chia nhỏ tổng thể thành các phần để tìm ra đặc tính, chức năng, quan hệ… của chúng. Khái niệm phân tích trong tiếp cận hướng đối tượng là thực hiện nghiên cứu lĩnh vực vấn đề, dẫn tới đặc tả hành vi quan sát từ ngoài và các thông báo nhất quán, hoàn chỉnh, khả thi của những cái cần. Phân tích hướng đối tượng tập trung vào tìm kiếm, mô tả các đối tượng trong lĩnh vực vấn đề. Thiết kế (design): Là lập tài liệu kỹ thuật toàn bộ, gồm có bản tính toán, bản vẽ… để có thể theo đó mà xây dựng công trình, sản xuất thiết bị, làm sản phẩm,… Khái niệm phân tích trong tiếp cận hướng đối tượng là thực hiện đặc tả các hành vi bên ngoài, bổ sung chi tiết nếu cần thiết để cài đặt hệ thống trên máy tính bao gồm tương tác người – máy, quản lý nhiệm vụ quản lý dữ liệu. Thiết kế hướng đối tượng tập trung vào xác định đối tượng phần mềm logic sẽ được cài đặt bằng ngôn ngữ hướng đối tượng. Lập trình hướng đối tượng: Là thiết kế các module sẽ được cài đặt trên một ngôn ngữ lập trình hướng đối tượng như thế nào (trên java, .Net…). Mô hình hoá (modeling): Khái niệm mô hình hoá thường được sử dụng đồng nghĩa với phân tích. Đó là việc thực hiện tách hệ thống thành các phần tử đơn giản dễ hiểu. Trong khoa học máy tính, mô hình hoá bắt đầu từ mô tả vấn đề sau đó là mô tả giải pháp vấn đề. Các hoạt động này còn được gọi là phân tích và thiết kế. Khi thu thập yêu cầu cho hệ thống, chúng ta phải tìm ra nhu cầu tác nghiệp của người dùng và ánh xạ chúng thành yêu cầu phần mềm sao cho đội ngũ phát triển phần mềm hiểu được và sử dụng được chúng (Chuyển các vấn đề thành giải pháp). Tiếp theo là khả năng sinh mã trình từ các yêu cầu này, đồng thời đảm bảo rằng yêu cầu phải được phù hợp với mã trình vừa phát sinh và dễ dàng chuyển đổi mã trình ngược lại thành yêu cầu. Tiến trình này gọi là mô hình hoá. Mô hình hoá trực quan: Là tiến trình lấy thông tin từ mô hình và hiển thị đồ hoạ bằng tập các phần tử đổ hoạ chuẩn. Tiêu chuẩn là cốt lõi để thực hiện một trong các lợi thế của mô hình trực quan, đó là vấn đề giao tiếp. Giao tiếp giữa người dùng, người phát triển, phân tích viên, kiểm thử viên, người quản lý và người khác tham gia dự án là mục tiêu quan trọng nhất của mô hình hoá trực quan. Tương tác này có thể được thực hiện bằng văn bản nhưng con người có khả năng hiểu tốt hơn độ phức tạp trên đồ hoạ thay cho văn bản. Nhờ mô hình trực quan mà chúng ta có thể chỉ ra các tầng mà hệ thống làm việc, bao gồm tương tác giữa người dùng với hệ thống, tương tác giữa các đối tượng có trong hệ thống hay giữa các hệ thống với nhau. Sau khi tạo ra mô hình ta có thể chỉ ra từng phần quan tâm. Các nhà tin học đã rất cố gắng để hình thành một số ký pháp mô hình hoá trực quan. Nói chung việc sử dụng các ký pháp là để xây dựng mô hình, để hiểu sâu sắc hơn về mô hình đang xây dựng. Chúng ta sử dụng mô hình cho các hệ thống phức tạp vì ta không thể hiểu nó như tổng thể. Nhờ mô hình hóa ta sẽ đạt được các mục tiêu sau + Mô hình giúp ta hiển thị hệ thống như chính nó hay như cách mà ta muốn nó hiển thị. + Mô hình cho phép ta đặc tả cấu trúc hay hành vi hệ thống. + Mô hình cho ta mẫu để hướng dẫn trong việc xây dựng hệ thống. + Mô hình giúp ta làm tài liệu cho các quyết định khi phân tích thiết kế hệ thống. 2.8 Giới thiệu về cơ sở dữ liệu Microsoft SQL-Server 2005 SQL Server là một hệ thống quản lý cơ sở dữ liệu (Relational Database Management System (RDBMS) ) sử dụng Transact-SQL để trao đổi dữ liệu giữa Client computer và SQL Server computer. Một RDBMS bao gồm databases, database engine và các ứng dụng dùng để quản lý dữ liệu và các bộ phận khác nhau trong RDBMS. SQL Server được tối ưu để có thể chạy trên môi trường cơ sở dữ liệu rất lớn (Very Large Database Environment) lên đến Tera-Byte và có thể phục vụ cùng lúc cho hàng ngàn user. SQL Server 2000 có thể kết hợp "ăn ý" với các server khác như Microsoft Internet Information Server (IIS), E-Commerce Server, Proxy Server.... SQL Server có 7 editions: Enterprise : Chứa đầy đủ các đặc trưng của SQL Server và có thể chạy tốt trên hệ thống lên đến 32 CPUs và 64 GB RAM. Thêm vào đó nó có các dịch vụ giúp cho việc phân tích dữ liệu rất hiệu quả (Analysis Services) Standard : Rất thích hợp cho các công ty vừa và nhỏ vì giá thành rẻ hơn nhiều so với Enterprise Edition, nhưng lại bị giới hạn một số chức năng cao cấp (advanced features) khác, edition này có thể chạy tốt trên hệ thống lên đến 4 CPU và 2 GB RAM. Personal: được tối ưu hóa để chạy trên PC nên có thể cài đặt trên hầu hết các phiên bản windows kể cả Windows 98. Developer : Có đầy đủ các tính năng của Enterprise Edition nhưng được chế tạo đặc biệt như giới hạn số lượng người kết nối vào Server cùng một lúc.... Ðây là edition mà các bạn muốn học SQL Server cần có. Chúng ta sẽ dùng edition này trong suốt khóa học. Edition này có thể cài trên Windows 2000 Professional hay Win NT Workstation. Desktop Engine (MSDE): Ðây chỉ là một engine chạy trên desktop và không có user interface (giao diện). Thích hợp cho việc triển khai ứng dụng ở máy client. Kích thước database bị giới hạn khoảng 2 GB. Win CE : Dùng cho các ứng dụng chạy trên Windows CE Trial: Có các tính năng của Enterprise Edition, download free, nhưng giới hạn thời gian sử dụng. Người dùng tương tác với cơ sở dữ liệu SQL-Server thông qua ngôn ngữ truy vấn có cấu trúc Transact Struct Query Language (T-SQL). T-SQL là ngôn ngữ SQL mở rộng dựa trên SQL chuẩn của ISO (International Organization for Standardization) và ANSI (American National Standards Institute) được sử dụng trong SQL-Server. Chúng được chia thành 3 nhóm: + Data Definition Language (DLL): Đây là những lệnh dùng để quản lý các thuộc tính của một database như định nghĩa các hàng hoặc cột của một bảng biểu, hay vị trí file dữ liệu của một cơ sở dữ liệu… thường có dạng: CREATE TenDoiTuong ALTER TenDoiTuong DROP TenDoiTuong Trong đó TenDoiTuong có thể là một table, view, stored procedure, indexes… + Data Control Language (DCL): Đây là những lệnh quản lý quyền truy cập lên từng đối tượng. Thường có dạng: GRANT TenDoiTuong REVOKE TenDoiTuong DENY TenDoiTuong + Data Manipulation Language (DML): Đây là những lệnh phổ biến dùng để xử lý dữ liệu như SELECT, INSERT, UPDATE, DELETE. 2.9 Giới thiệu về Microsof Studio.Net và ngôn ngữ lập trình Visual C# 2005 2.9.1 Microsof Studio.Net Microsoft .NET gồm 2 phần chính : Framework và Integrated Development Environment (IDE). Framework cung cấp những gì cần thiết và căn bản, chữ Framework có nghĩa là khung hay khung cảnh trong đó ta dùng những hạ tầng cơ sở theo một qui ước nhất định để công việc được trôi chảy. IDE thì cung cấp một môi trường giúp chúng ta triển khai dễ dàng, và nhanh chóng các ứng dụng dựa trên nền tảng .NET. Nếu không có IDE chúng ta cũng có thể dùng một trình soạn thảo ví như Notepad hay bất cứ trình soạn thảo văn bản nào và sử dụng command line để biên dịch và thực thi, tuy nhiên việc này mất nhiều thời gian. Tốt nhất là chúng ta dùng IDE phát triển các ứng dụng, và cũng là cách dễ sử dụng nhất. Thành phần Framework là quan trọng nhất .NET là cốt lõi và tinh hoa của môi trường, còn IDE chỉ là công cụ để phát triển dựa trên nền tảng đó thôi. Trong .NET toàn bộ các ngôn ngữ C#, Visual C++ hay Visual Basic.NET đều dùng cùng một IDE. Tóm lại Microsoft .NET là nền tảng cho việc xây dựng và thực thi các ứng dụng phân tán thế hệ kế tiếp. Bao gồm các ứng dụng từ client đến server và các dịch vụ khác. Một số tính năng của Microsoft .NET cho phép những nhà phát triển sử dụng như sau: + Một mô hình lập trình cho phép nhà phát triển xây dựng các ứng dụng dịch vụ web và ứng dụng client với Extensible Markup Language (XML). + Tập ._.D') begin SELECT NhanVienTheoDoi, TenNV, SoHieuHD, TenHD, NgayKy, GiaTri, DaiDienKH, TenKH, SoDuCongNo, ThanhLy FROM V_NhanVien_HopDong where MaNVTheoDoi=@MaNVTheoDoi return end if(@param='selectbyNVKy') begin SELECT NhanVienTheoDoi, TenNV, SoHieuHD, TenHD, NgayKy, GiaTri, DaiDienKH, TenKH, SoDuCongNo, ThanhLy FROM V_NhanVien_HopDong where MaNV=@MaNV return end if(@param='DaThanhLy') begin select SoHieuHD,TenHD,TenPhienBan,GiaTri,NgayKy,TenKH,TenNV,NgayHTDK,NgayHT,TNKH,TNBravo,DaiDienKH,A.MaKH,A.MaNV,A.MaNVTheoDoi,SoDuCongNo,QLTienMat,MuaHangCNPT,BanHangCNPT,QLHangTonKho,QLTSCD,TinhGia,KTTongHop,HeThong,D.ID from tblHopDong A,tblNhanVien B,tblKhachHang C,tblPhienBan D where A.MaNV=B.MaNV and A.MaKH=C.MaKH and D.ID=A.PhienBan and ThanhLy=1 return end if(@param='ChuaThanhLy') begin select SoHieuHD,TenHD,TenPhienBan,GiaTri,NgayKy,TenKH,TenNV,NgayHTDK,NgayHT,TNKH,TNBravo,DaiDienKH,A.MaKH,A.MaNV,A.MaNVTheoDoi,SoDuCongNo,QLTienMat,MuaHangCNPT,BanHangCNPT,QLHangTonKho,QLTSCD,TinhGia,KTTongHop,HeThong,D.ID from tblHopDong A,tblNhanVien B,tblKhachHang C,tblPhienBan D where A.MaNV=B.MaNV and A.MaKH=C.MaKH and D.ID=A.PhienBan and ThanhLy=1 and HuyHD=1 return end if(@param='DaHuy') begin select SoHieuHD,TenHD,TenPhienBan,GiaTri,NgayKy,TenKH,TenNV,NgayHTDK,NgayHT,TNKH,TNBravo,DaiDienKH,A.MaKH,A.MaNV,A.MaNVTheoDoi,SoDuCongNo,QLTienMat,MuaHangCNPT,BanHangCNPT,QLHangTonKho,QLTSCD,TinhGia,KTTongHop,HeThong,D.ID from tblHopDong A,tblNhanVien B,tblKhachHang C,tblPhienBan D where A.MaNV=B.MaNV and A.MaKH=C.MaKH and D.ID=A.PhienBan and ThanhLy=0 and HuyHD=1 return end Tầng DAL –Data Access Layer using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; namespace DAL { public class HopDong { private const string PARAM = "@Param"; private const string SO_HIEU_HD = "@SoHieuHD"; private const string TEN_HD = "@TenHD"; private const string NGAY_KY = "@NgayKy"; private const string MA_NV = "@MaNV"; private const string MA_KH = "@MaKH"; private const string NGAY_HTDK = "@NgayHTDK"; private const string NGAY_HT = "@NgayHT"; private const string TN_KH = "@TNKH"; private const string TN_BRAVO = "@TNBravo"; private const string SO_LUONG = "@SoLuong"; private const string GIA_TRI = "@GiaTri"; private const string MANV_THEO_DOI = "@MaNVTheoDoi"; private const string DAI_DIEN_KH = "@DaiDienKH"; private const string SO_DU_CONG_NO = "@SoDuCongNo"; private const string KEY = "@Key"; private const string GHI_CHU = "@GhiChu"; private const string QLTIEN_MAT = "@QLTienMat"; private const string MUA_HANG_CNPT = "@MuaHangCNPT"; private const string BAN_HANG_CNPT = "@BanHangCNPT"; private const string QLHANG_TON_KHO = "@QLHangTonKho"; private const string QLTSCD = "@QLTSCD"; private const string TINH_GIA = "@TinhGia"; private const string KT_TONG_HOP = "@KTTongHop"; private const string HE_THONG = "@HeThong"; private const string PHIEN_BAN = "@PhienBan"; SqlConnection conn = null; public HopDong() { conn = new SqlConnection(new Connection().getConnectionString()); } public DataSet selectALl(ref string error) { DataSet _ds = new DataSet(); SqlDataAdapter _adt = new SqlDataAdapter("sp_HopDong", conn); _adt.SelectCommand.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _adt.SelectCommand.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "selectall"; try { _adt.Fill(_ds); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } return _ds; } public SqlDataReader selectByID(ref string error, string SoHieuHD) { SqlDataReader _rd = null; SqlCommand _cmd = new SqlCommand("SP_HopDong", conn); _cmd.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _cmd.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "selectByID"; _para = _cmd.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = SoHieuHD; try { conn.Open(); _rd = _cmd.ExecuteReader(CommandBehavior.CloseConnection); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } return _rd; } public DataSet selectByNhanVien(ref string error, string MaNhanVien) { DataSet _ds = new DataSet(); SqlDataAdapter _adt = new SqlDataAdapter("sp_HopDong", conn); _adt.SelectCommand.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _adt.SelectCommand.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "selectByNV"; _para = _adt.SelectCommand.Parameters.Add(MA_NV, SqlDbType.NChar); _para.Value = MaNhanVien; try { _adt.Fill(_ds); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } return _ds; } public DataSet selectByKhachHang(ref string error, string MaKhachHang) { DataSet _ds = new DataSet(); SqlDataAdapter _adt = new SqlDataAdapter("sp_HopDong", conn); _adt.SelectCommand.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _adt.SelectCommand.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "selectByKH"; _para = _adt.SelectCommand.Parameters.Add(MA_KH, SqlDbType.NChar); _para.Value = MaKhachHang; try { _adt.Fill(_ds); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } return _ds; } public DataSet daThanhLy(ref string error) { DataSet _ds = new DataSet(); SqlDataAdapter _adt = new SqlDataAdapter("sp_HopDong", conn); _adt.SelectCommand.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _adt.SelectCommand.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "DaThanhLy"; try { _adt.Fill(_ds); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } return _ds; } public DataSet dsTinhTrang(ref string error, string soHieuHD) { DataSet _ds = new DataSet(); SqlDataAdapter _adt = new SqlDataAdapter("sp_HopDong", conn); _adt.SelectCommand.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _adt.SelectCommand.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "TinhTrang"; _para = _adt.SelectCommand.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = soHieuHD; try { _adt.Fill(_ds); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } return _ds; } public void insert(ref string error, string SoHieuHD, string TenHD,int GiaTri, DateTime NgayKy, string MaNV,string MaKH,DateTime NgayHTDK,DateTime NgayHT,string TNKH,string TNBravo,string MaNVTheoDoi,string DaiDienKH,int SoDuCongNo,bool QLTienMat,bool MuaHang,bool BanHang,bool HangTonKho,bool TSCD,bool TinhGia,bool KTTongHop,bool HeThong,int phienban) { SqlCommand _cmd = new SqlCommand("Sp_HopDong", conn); _cmd.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _cmd.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "insert"; _para = _cmd.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = SoHieuHD; _para = _cmd.Parameters.Add(TEN_HD, SqlDbType.NVarChar); _para.Value = TenHD; _para = _cmd.Parameters.Add(NGAY_KY, SqlDbType.SmallDateTime); _para.Value = NgayKy; _para = _cmd.Parameters.Add(MA_NV, SqlDbType.NChar); _para.Value = MaNV; _para = _cmd.Parameters.Add(MA_KH, SqlDbType.NChar); _para.Value = MaKH; _para = _cmd.Parameters.Add(NGAY_HTDK, SqlDbType.SmallDateTime); _para.Value = NgayHTDK; _para = _cmd.Parameters.Add(NGAY_HT, SqlDbType.SmallDateTime); _para.Value = NgayHT; _para = _cmd.Parameters.Add(TN_KH, SqlDbType.NVarChar); _para.Value = TNKH; _para = _cmd.Parameters.Add(TN_BRAVO, SqlDbType.NVarChar); _para.Value = TNBravo; _para = _cmd.Parameters.Add(GIA_TRI, SqlDbType.Int); _para.Value = GiaTri; _para = _cmd.Parameters.Add(MANV_THEO_DOI, SqlDbType.NChar); _para.Value = MaNVTheoDoi; _para = _cmd.Parameters.Add(DAI_DIEN_KH, SqlDbType.NVarChar); _para.Value = DaiDienKH; _para = _cmd.Parameters.Add(SO_DU_CONG_NO, SqlDbType.Int); _para.Value = SoDuCongNo; _para = _cmd.Parameters.Add(QLTIEN_MAT, SqlDbType.Bit); _para.Value = QLTienMat; _para = _cmd.Parameters.Add(MUA_HANG_CNPT, SqlDbType.Bit); _para.Value = MuaHang; _para = _cmd.Parameters.Add(BAN_HANG_CNPT, SqlDbType.Bit); _para.Value = BanHang; _para = _cmd.Parameters.Add(QLHANG_TON_KHO, SqlDbType.Bit); _para.Value = HangTonKho; _para = _cmd.Parameters.Add(QLTSCD, SqlDbType.Bit); _para.Value = TSCD; _para = _cmd.Parameters.Add(TINH_GIA, SqlDbType.Bit); _para.Value = TinhGia; _para = _cmd.Parameters.Add(KT_TONG_HOP, SqlDbType.Bit); _para.Value = KTTongHop; _para = _cmd.Parameters.Add(HE_THONG, SqlDbType.Bit); _para.Value = HeThong; _para = _cmd.Parameters.Add(PHIEN_BAN, SqlDbType.Int); _para.Value = phienban; try { conn.Open(); _cmd.ExecuteNonQuery(); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } finally { if (conn.State == ConnectionState.Open) conn.Close(); } } public void update(ref string error, string SoHieuHD, string TenHD, int GiaTri, DateTime NgayKy, string MaNV, string MaKH, DateTime NgayHTDK, DateTime NgayHT, string TNKH, string TNBravo, string MaNVTheoDoi, string DaiDienKH, int SoDuCongNo, bool QLTienMat, bool MuaHang, bool BanHang, bool HangTonKho, bool TSCD, bool TinhGia, bool KTTongHop, bool HeThong,int phienban) { SqlCommand _cmd = new SqlCommand("Sp_HopDong", conn); _cmd.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _cmd.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "update"; _para = _cmd.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = SoHieuHD; _para = _cmd.Parameters.Add(TEN_HD, SqlDbType.NVarChar); _para.Value = TenHD; _para = _cmd.Parameters.Add(NGAY_KY, SqlDbType.SmallDateTime); _para.Value = NgayKy; _para = _cmd.Parameters.Add(MA_NV, SqlDbType.NChar); _para.Value = MaNV; _para = _cmd.Parameters.Add(MA_KH, SqlDbType.NChar); _para.Value = MaKH; _para = _cmd.Parameters.Add(NGAY_HTDK, SqlDbType.SmallDateTime); _para.Value = NgayHTDK; _para = _cmd.Parameters.Add(NGAY_HT, SqlDbType.SmallDateTime); _para.Value = NgayHT; _para = _cmd.Parameters.Add(TN_KH, SqlDbType.NVarChar); _para.Value = TNKH; _para = _cmd.Parameters.Add(TN_BRAVO, SqlDbType.NVarChar); _para.Value = TNBravo; _para = _cmd.Parameters.Add(GIA_TRI, SqlDbType.Int); _para.Value = GiaTri; _para = _cmd.Parameters.Add(MANV_THEO_DOI, SqlDbType.NChar); _para.Value = MaNVTheoDoi; _para = _cmd.Parameters.Add(DAI_DIEN_KH, SqlDbType.NVarChar); _para.Value = DaiDienKH; _para = _cmd.Parameters.Add(SO_DU_CONG_NO, SqlDbType.Int); _para.Value = SoDuCongNo; _para = _cmd.Parameters.Add(QLTIEN_MAT, SqlDbType.Bit); _para.Value = QLTienMat; _para = _cmd.Parameters.Add(MUA_HANG_CNPT, SqlDbType.Bit); _para.Value = MuaHang; _para = _cmd.Parameters.Add(BAN_HANG_CNPT, SqlDbType.Bit); _para.Value = BanHang; _para = _cmd.Parameters.Add(QLHANG_TON_KHO, SqlDbType.Bit); _para.Value = HangTonKho; _para = _cmd.Parameters.Add(QLTSCD, SqlDbType.Bit); _para.Value = TSCD; _para = _cmd.Parameters.Add(TINH_GIA, SqlDbType.Bit); _para.Value = TinhGia; _para = _cmd.Parameters.Add(KT_TONG_HOP, SqlDbType.Bit); _para.Value = KTTongHop; _para = _cmd.Parameters.Add(HE_THONG, SqlDbType.Bit); _para.Value = HeThong; _para = _cmd.Parameters.Add(PHIEN_BAN, SqlDbType.Int); _para.Value = phienban; try { conn.Open(); _cmd.ExecuteNonQuery(); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } finally { if (conn.State == ConnectionState.Open) conn.Close(); } } public void delete(ref string error, string SoHieuHD) { SqlCommand _cmd = new SqlCommand("Sp_HopDong", conn); _cmd.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _cmd.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "delete"; _para = _cmd.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = SoHieuHD; try { conn.Open(); _cmd.ExecuteNonQuery(); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } finally { if (conn.State == ConnectionState.Open) conn.Close(); } } public void thanhLy(ref string error, string SoHieuHD,DateTime NgayTL,string GhiChu) { SqlCommand _cmd = new SqlCommand("Sp_HopDong", conn); _cmd.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _cmd.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "ThanhLy"; _para = _cmd.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = SoHieuHD; _para = _cmd.Parameters.Add(NGAY_HT, SqlDbType.SmallDateTime); _para.Value = NgayTL; _para = _cmd.Parameters.Add(GHI_CHU, SqlDbType.NVarChar); _para.Value = GhiChu; try { conn.Open(); _cmd.ExecuteNonQuery(); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } finally { if (conn.State == ConnectionState.Open) conn.Close(); } } public void huyThanhLy(ref string error, string SoHieuHD) { SqlCommand _cmd = new SqlCommand("Sp_HopDong", conn); _cmd.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _cmd.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "huyThanhLy"; _para = _cmd.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = SoHieuHD; try { conn.Open(); _cmd.ExecuteNonQuery(); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } finally { if (conn.State == ConnectionState.Open) conn.Close(); } } public void huyHopDong(ref string error, string SoHieuHD, string GhiChu) { SqlCommand _cmd = new SqlCommand("Sp_HopDong", conn); _cmd.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _cmd.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "huyHD"; _para = _cmd.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = SoHieuHD; _para = _cmd.Parameters.Add(GHI_CHU, SqlDbType.NVarChar); _para.Value = GhiChu; try { conn.Open(); _cmd.ExecuteNonQuery(); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } finally { if (conn.State == ConnectionState.Open) conn.Close(); } } public int count(ref string error, string SoHieuHD) { int _SoLuong = 0; SqlCommand _cmd = new SqlCommand("sp_HopDong", conn); _cmd.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _cmd.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "count"; _para = _cmd.Parameters.Add(SO_HIEU_HD, SqlDbType.NChar); _para.Value = SoHieuHD; _para = _cmd.Parameters.Add(SO_LUONG, SqlDbType.Int); _cmd.Parameters[SO_LUONG].Direction = ParameterDirection.Output; try { conn.Open(); _cmd.ExecuteNonQuery(); _SoLuong = Convert.ToInt32(_cmd.Parameters[SO_LUONG].Value.ToString()); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } finally { if (conn.State == ConnectionState.Open) conn.Close(); } return _SoLuong; } public DataSet find(ref string error,string key) { DataSet _ds = new DataSet(); SqlDataAdapter _adt = new SqlDataAdapter("sp_HopDong", conn); _adt.SelectCommand.CommandType = CommandType.StoredProcedure; SqlParameter _para = null; _para = _adt.SelectCommand.Parameters.Add(PARAM, SqlDbType.NVarChar); _para.Value = "find"; _para = _adt.SelectCommand.Parameters.Add(KEY, SqlDbType.NChar); _para.Value = key; try { _adt.Fill(_ds); } catch (SqlException _ex) { error = _ex.StackTrace + _ex.Message; } return _ds; } public DataSet timKiem(ref string error, string tuyChon, string tuKhoa, string giaTri, string kieuSoSanh, DateTime ngayKy, string thang, string nam, int quy, DateTime tuNgay, DateTime denNgay,bool TheoTuKhoa,bool TheoGiaTri,string phamViTK,ref string queryString) { string Sql; Sql = "select SoHieuHD,TenHD,TenPhienBan,GiaTri,NgayKy,TenKH,TenNV,NgayHTDK,NgayHT,TNKH,TNBravo,DaiDienKH,A.MaKH,A.MaNV,A.MaNVTheoDoi,SoDuCongNo,QLTienMat,MuaHangCNPT,BanHangCNPT,QLHangTonKho,QLTSCD,TinhGia,KTTongHop,HeThong,D.ID from tblHopDong A,tblNhanVien B,tblKhachHang C,tblPhienBan D where (A.MaNV=B.MaNV and A.MaKH=C.MaKH and A.PhienBan=D.ID) "; if (phamViTK.Equals("Chưa thanh lý")) { Sql = Sql + " and ( ThanhLy=0) and (HuyHD=0)"; } else if(phamViTK.Equals("Đã thanh lý")) { Sql = Sql + " and (ThanhLy=1) and (HuyHD=0)"; } else if(phamViTK.Equals("Bị hủy bỏ")) { Sql = Sql + " and (HuyHD=1) "; } if (tuyChon.Equals("Theo ngày")) { Sql = Sql + " and (NgayKy='"+ngayKy.ToShortDateString()+"') " ; } else if (tuyChon.Equals("Theo tháng")) { Sql = Sql + " and ( MONTH(NgayKy)="+thang+" and YEAR(NgayKy)="+nam+" )"; } else if (tuyChon.Equals("Theo quý")) { if (quy ==1) { Sql = Sql + " and (MONTH(NgayKy)<=3 and YEAR(NgayKy)="+nam+" ) "; } else if (quy == 2) { Sql = Sql + " and (MONTH(NgayKy) >3 and MONTH(NgayKy)<=6 and YEAR(NgayKy)=" + nam + " ) "; } else if(quy==3) { Sql = Sql + " and (MONTH(NgayKy) >6 and MONTH(NgayKy)<=9 and YEAR(NgayKy)=" + nam + " ) "; } else { Sql = Sql + " and ((MONTH(NgayKy) >9 and MONTH(NgayKy)<=12) and YEAR(NgayKy)=" + nam + " ) "; } } else if (tuyChon.Equals("Theo năm")) { Sql = Sql + " and ( YEAR(NgayKy)="+nam+" )"; } else if (tuyChon.Equals("Từ ngày")) { Sql = Sql + " and (NgayKy BETWEEN '"+tuNgay.ToString()+"' and '"+denNgay.ToString()+"' )"; } if (TheoTuKhoa == true) { Sql = Sql + " and (SoHieuHD like " + tuKhoa + " or TenHD like " + tuKhoa + " or TenKH like " + tuKhoa + " or TenNV like " + tuKhoa + " or TNKH like " + tuKhoa + " or TNBravo like " + tuKhoa + " or DaiDienKH like " + tuKhoa + " or tenPhienBan like " + tuKhoa + ")"; } if (TheoGiaTri == true) { Sql = Sql + " and GiaTri " + kieuSoSanh + " " + giaTri; } DataSet ds = new DataSet(); queryString = Sql; SqlDataAdapter adt = new SqlDataAdapter(Sql, conn); adt.SelectCommand.CommandType = CommandType.Text; try { adt.Fill(ds); } catch(SqlException ex) { error = Sql + "; " + ex.StackTrace + " ; " + ex.Message; } return ds; } } } Tầng Bussiness Rules using System; using System.Collections.Generic; using System.Text; using DAL; using System.Data; using System.Data.SqlClient; namespace BussinessRules { public class HopDongRules { private HopDong hd = null; public HopDongRules() { hd = new HopDong(); } #region public method public DataSet selectAll(ref string error) { return hd.selectALl(ref error); } public DataSet find(ref string error, string key) { return hd.find(ref error, key); } public SqlDataReader selectByID(ref string error, string SoHieuHD) { return hd.selectByID(ref error, SoHieuHD); } public DataSet selectByNhanVien(ref string error, string MaNhanVien) { return hd.selectByNhanVien(ref error, MaNhanVien); } public DataSet selectByKhachHang(ref string error, string MaKhachHang) { return hd.selectByKhachHang(ref error, MaKhachHang); } public DataSet daThanhLy(ref string error) { return hd.daThanhLy(ref error); } public DataSet dsTinhTrang(ref string error, string sohieuHopDong) { return hd.dsTinhTrang(ref error, sohieuHopDong); } public void huyThanhLy(ref string error, string SoHieuHD) { hd.huyThanhLy(ref error, SoHieuHD); } public void insert(ref string error, string SoHieuHD, string TenHD, DateTime NgayKy, int GiaTri, string MaNV, string MaKH, DateTime NgayHTDuKien, DateTime NgayHT, string TrachNhiemKH, string TNBravo, string MaNhanVienTheoDoi, string DaiDienKhachHang, int SoDuCongNo, bool QLTienMat, bool MuaHang, bool BanHang, bool HangTonKho, bool TSCD, bool TinhGia, bool KTTongHop, bool HeThong,int phienban) { if(!CheckIDExist(ref error,SoHieuHD)) hd.insert(ref error, SoHieuHD, TenHD, GiaTri, NgayKy, MaNV, MaKH, NgayHTDuKien, NgayHT, TrachNhiemKH, TNBravo,MaNhanVienTheoDoi,DaiDienKhachHang,SoDuCongNo,QLTienMat,MuaHang,BanHang,HangTonKho,TSCD,TinhGia,KTTongHop,HeThong,phienban); } public void update(ref string error, string SoHieuHD, string TenHD, DateTime NgayKy, int GiaTri, string MaNV, string MaKH, DateTime NgayHTDuKien, DateTime NgayHT, string TrachNhiemKH, string TNBravo, string MaNhanVienTheoDoi, string DaiDienKhachHang, int SoDuCongNo, bool QLTienMat, bool MuaHang, bool BanHang, bool HangTonKho, bool TSCD, bool TinhGia, bool KTTongHop, bool HeThong,int phienban) { hd.update(ref error, SoHieuHD, TenHD, GiaTri, NgayKy, MaNV, MaKH, NgayHTDuKien, NgayHT, TrachNhiemKH, TNBravo, MaNhanVienTheoDoi, DaiDienKhachHang, SoDuCongNo, QLTienMat, MuaHang, BanHang, HangTonKho, TSCD, TinhGia, KTTongHop, HeThong,phienban); } public void delete(ref string error, string SoHieuHD) { if (!CheckDelete(ref error, SoHieuHD)) hd.delete(ref error, SoHieuHD); } public void thanhLy(ref string error, string SoHieuHD,DateTime NgayTL,string GhiChu) { hd.thanhLy(ref error, SoHieuHD,NgayTL,GhiChu); } public DataSet timKiem(ref string error, string tuyChon, string tuKhoa, string giaTri, string kieuSoSanh, DateTime ngayKy, string thang, string nam, int quy, DateTime tuNgay, DateTime denNgay, bool TheoTuKhoa, bool TheoGiaTri,string phamViTK,ref string queryString) { return hd.timKiem(ref error, tuyChon, tuKhoa, giaTri, kieuSoSanh, ngayKy, thang, nam, quy, tuNgay, denNgay, TheoTuKhoa, TheoGiaTri, phamViTK,ref queryString); } #endregion #region private method private bool CheckIDExist(ref string error, string SoHieuHD) { SqlDataReader _rd = hd.selectByID(ref error, SoHieuHD); bool _flag = false; if (_rd.Read()) { _flag = true; error = "Thưa ngài số hiệu hợp đồng\""+SoHieuHD+"\" đã tồn tại"; } _rd.Close(); return _flag; } private bool CheckDelete(ref string error, string SoHieuHD) { int _SoLuong = 0; bool _flag = false; _SoLuong = hd.count(ref error, SoHieuHD); if (_SoLuong > 0) { error = "Thưa ngài đã có phát sinh tới hợp đồng này, Ngài không được phép xóa"; _flag = true; } return _flag; } #endregion } } Tầng giao diện người sử dụng WinUI –Window User Interface using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using BussinessRules; using WinUI.library; namespace WinUI.form { public partial class frmdsHopDong : WinUI.form.root { public event CloseForm FormClose; string SoHieuHD; HopDongRules hd; frmdsDieuKhoanTT dk; frmdsTinhTrang tt; frmdsNhanVien_TrienKhai nvtk; frmdsLanThanhToan ltt; public frmdsHopDong() { InitializeComponent(); hd = new HopDongRules(); } public frmdsHopDong(frmdsTinhTrang _dk) { InitializeComponent(); hd = new HopDongRules(); tt = _dk; } public frmdsHopDong(frmdsDieuKhoanTT _dk) { InitializeComponent(); hd = new HopDongRules(); dk = _dk; } public frmdsHopDong(frmdsNhanVien_TrienKhai _nvtk) { InitializeComponent(); hd = new HopDongRules(); nvtk = _nvtk; } public frmdsHopDong(frmdsLanThanhToan _ltt) { InitializeComponent(); hd = new HopDongRules(); ltt = _ltt; } private void frmdsHopDong_Load(object sender, EventArgs e) { //string SoHieuHD,TenHD,GiaTri,NgayKy,TenKH,TenNV,NgayHTDK,NgayHT,TNKH,TNBravo,DaiDienKH,A.MaKH,A.MaNV,A.MaNVTheoDoi,SoDuCongNo; try { dataGridView1.Columns[0].HeaderText = "Số HHD"; dataGridView1.Columns["TenHD"].HeaderText = "Tên HĐ"; dataGridView1.Columns["GiaTri"].HeaderText = "Giá trị"; dataGridView1.Columns["NgayKy"].HeaderText = "Ngày ký"; dataGridView1.Columns["TenKh"].HeaderText = "Khách hàng"; dataGridView1.Columns["TenNV"].HeaderText = "Người ký"; dataGridView1.Columns["NgayHTDK"].HeaderText = "Ngày HT"; dataGridView1.Columns["NgayHT"].Visible = false; dataGridView1.Columns["TNKH"].Visible = false; dataGridView1.Columns["TNBRAVO"].Visible = false; dataGridView1.Columns["DaiDienKH"].HeaderText = "Đại diện KH"; dataGridView1.Columns["MaKH"].Visible = false; dataGridView1.Columns["MaNV"].Visible = false; dataGridView1.Columns["MaNVTHeoDoi"].Visible = false; dataGridView1.Columns["SoDuCongNo"].HeaderText = "Còn nợ"; dataGridView1.Columns["QLTienMat"].HeaderText = "Tiền mặt"; dataGridView1.Columns["MuaHangCNPT"].HeaderText = "Mua hàng"; dataGridView1.Columns["BanHangCNPT"].HeaderText = "Bán hàng"; dataGridView1.Columns["QLHangTonKho"].HeaderText = "Tồn kho"; dataGridView1.Columns["QLTSCD"].HeaderText = "TSCĐ"; dataGridView1.Columns["TinhGia"].HeaderText = "Tính giá"; dataGridView1.Columns["KTTOngHop"].HeaderText = "KT Tổng hợp"; dataGridView1.Columns["HeThong"].HeaderText = "Hệ thống"; dataGridView1.Columns["TenPhienBan"].HeaderText = "Phiên bản"; dataGridView1.Columns["id"].Visible = false; } catch { } } public override void loadDatagrid() { base.loadDatagrid(); string _error = ""; DataSet _ds; _ds = hd.selectAll(ref _error); //if (LoaiForm.ToLower().Equals("dshopdong")) //{ //} //else if (LoaiForm.ToLower().Equals("")) //{ //} //else if (LoaiForm.ToLower().Equals("")) //{ //} //else if (LoaiForm.ToLower().Equals("")) //{ //} //else if (LoaiForm.ToLower().Equals("")) //{ //} //else //{ // _ds = hd.selectAll(ref _error); //} if (_error == "") { TableSourceGrid = _ds.Tables[0]; dataGridView1.DataSource = TableSourceGrid; } } public override void loadDatagrid(string maNguonGrid) { base.loadDatagrid(maNguonGrid); } public override void insert() { base.insert(); frmHopDong _hd = new frmHopDong(TITLE, null); _hd.setCaption = "CẬP NHẬT HỢP ĐỒNG"; if (_hd.ShowDialog() == DialogResult.OK) { loadDatagrid(); SoHieuHD = _hd.txtSoHieuHD.Text; if (dk != null) { dk.loadDatagrid(SoHieuHD); dk.soHieuHopDong = SoHieuHD; dk.insert(); } } } public override void update(DataRow row) { base.update(row); frmHopDong _hd = new frmHopDong(TITLE, row); _hd.setCaption = "SỬA ĐỔI HỢP ĐỒNG"; if (_hd.ShowDialog() == DialogResult.OK) { loadDatagrid(); if (dk != null) { dk.Activate(); } } } public override void delete() { base.delete(); DataRow _row = new WinUI.library.utility().getDataRow(dataGridView1); string _error = ""; DialogResult _re = MessageBox.Show("Thưa ngài có thực sự muốn xóa hợp đồng này không?", TITLE, MessageBoxButtons.YesNo); if (_re == DialogResult.Yes) { hd.delete(ref _error, _row[0].ToString()); if (_error != "") MessageBox.Show(_error, TITLE); else loadDatagrid(); } } public override void delete(string maDoiTuong) { base.delete(maDoiTuong); } public override void print() { base.print(); //DataRow row = new WinUI.library.utility().getDataRow(dataGridView1); //if (row != null) //{ WinUI.report.frmShowReport _re = new WinUI.report.frmShowReport("danhsachhopdong"); //_re.QueryString = row["SoHieuHD"].ToString(); _re.ShowDialog(); //} } public override void loadDatagridInOrtherForm() { base.loadDatagridInOrtherForm(); DataRow row = new utility().getDataRow(dataGridView1); if (row != null) { if (dk != null) { dk.loadDatagrid(row[0].ToString()); dk.soHieuHopDong = row[0].ToString(); } if (tt != null) { tt.loadDatagrid(row[0].ToString()); } if (nvtk != null) { nvtk.loadDatagrid(row[0].ToString()); } if (ltt != null) { ltt.loadDatagrid(row[0].ToString()); } } } public override void showOrtherForm() { base.showOrtherForm(); loadDatagridInOrtherForm(); int _temp = 0; frmdsNhanVien_TrienKhai tk; frmdsTinhTrang tt; foreach (Form f in ((frmMain)this.MdiParent).MdiChildren) { if (f.GetType() == typeof(frmdsTinhTrang)) { tt = (frmdsTinhTrang)f; tt.Show(); _temp = 1; } if (f.GetType() == typeof(frmdsNhanVien_TrienKhai)) { tk = (frmdsNhanVien_TrienKhai)f; tk.Show(); _temp++; } } } private void frmdsHopDong_FormClosing(object sender, FormClosingEventArgs e) { FormClose(); } public override void thanhLyHD() { base.thanhLyHD(); DataRow _row = new WinUI.library.utility().getDataRow(dataGridView1); if (_row != null) { frmThanhLyHopDong _tl = new frmThanhLyHopDong(TITLE); _tl.SoHieuHopDong = _row["SoHieuHD"].ToString().Trim(); if (_tl.ShowDialog() == DialogResult.OK) loadDatagrid(); } } public override void huyHopDong() { base.huyHopDong(); } public void GanThanhToan(int SoNgay) { DataTable _reTable = TableSourceGrid; DataTable table = _reTable.Clone(); ; int _numRow = _reTable.Rows.Count; DataRow _row; int _NumCol = _reTable.Columns.Count; string _soHieuHD = ""; bool flag = false; for(int i=0;i<_numRow;i++) { _row = _reTable.Rows[i]; _soHieuHD = _row["SoHieuHD"].ToString(); if (checkDate(_soHieuHD, SoNgay) == true) { object[] _obj = new object[_NumCol]; for (int j = 0; j < _NumCol; j++) { _obj[j] = _row[j].ToString(); } table.Rows.Add(_obj); } } table.AcceptChanges(); dataGridView1.DataSource = table; } private bool checkDate(string SoHieuHD,int SoNgay) { bool _re = false; DataSet _ds; DataTable _table; DataRow _row; DateTime _NgayTT, _Now; _Now = DateTime.Now; DieuKhoanTTRules _dk = new DieuKhoanTTRules(); string _error = ""; double _dnow, _dtt; int _NumDay; int _numRow; _dnow = _Now.ToOADate(); _ds = _dk.selectALl(ref _error); _table = _ds.Tables[0]; _numRow = _table.Rows.Count; for(int i = 0;i <_numRow;i++) { _row = _table.Rows[i]; _NgayTT = Convert.ToDateTime(_row["NgayThucHien"].ToString()); _dtt = _NgayTT.ToOADate(); _dnow = _dnow - _dtt; _NumDay = Convert.ToInt32(_dnow); MessageBox.Show(_NumDay.ToString()); if (_NumDay <= SoNgay) _re = true; break; } return _re; } } } ._.

Các file đính kèm theo tài liệu này:

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