Thiết kế chương trình quản lý sinh viên nội trú trường Đại học Kinh tế Quốc dân tại Công ty cổ phần Phần mềm kế toán và quản trị Doanh nghiệp CyberSoft (Foxpro)

LỜI MỞ ĐẦU Trong thời đại công nghệ thông tin ngày nay, tất cả mọi hoạt động đều có sự trợ giúp của máy tính. Trong lĩnh vực quản lý, tin học đóng vai trò đặc biệt quan trọng, bởi sự nhanh chóng, chính xác, khả năng phân tích và tổng hợp thông tin rất cao của các phần mềm. Lợi ích của việc tin học hóa công tác quản lý đã được chứng minh trong thực tế. Một giám đốc muốn biết về tình hình tài chính, tình hình kinh doanh của công ty có thể được cung cấp thông tin một cách nhanh chóng qua hệ thống

doc159 trang | Chia sẻ: huyen82 | Lượt xem: 1678 | Lượt tải: 0download
Tóm tắt tài liệu Thiết kế chương trình quản lý sinh viên nội trú trường Đại học Kinh tế Quốc dân tại Công ty cổ phần Phần mềm kế toán và quản trị Doanh nghiệp CyberSoft (Foxpro), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
thông tin kế toán, hệ thống thông tin bán hàng, hệ thống thông tin marketting. Ngược lại một khách hàng có thể muốn biết thông tin về các sản phẩm mình muốn mua thông qua một hệ thống thông tin bán hàng trực tuyến của công ty, sẽ được cung cấop thông tin một cách nhanh chóng và chính xác. Hiện nay tại trung tâm dịch vụ trường Đại học Kinh tế Quốc dân có một phần quản lý là quản lý sinh viên nội trú, hiện tại hầu hết các công việc đều làm thủ công rất phức tạp và mất thời gian. Chính vì vậy mà đề tài này được chọn để đề xuất một giải pháp quản lý mới – tin học hóa hệ thống quản lý, đề tài mang tên “Quản lý sinh viên nội trú trường đại học Kinh tế Quốc dân”. Em xin chân thành cảm ơn các thầy cô giáo trong khoa tin học kinh tế nói chung và thầy Bùi Thế Ngũ nói riêng đã tận tình giúp đỡ em hoàn thành tốt đề tài thực tập tốt nghiệp này. I. TỔNG QUAN VỀ CƠ SỞ THỰC TẬP – CÔNG TY CYBERSOFT CyberSoft là Công ty Cổ phần Phần mềm kế toán và quản trị doanh nghiệp được thành lập từ năm 1999 với sự tham gia của các kỹ sư đã từng xây dựng dự án công nghệ thông tin hàng đầu tại Việt Nam. Ngay từ khi thành lập, CyberSoft đã tham gia vào lĩnh vực lập trình phần mềm ứng dụng trong công tác quản lý. Sau đây là một vài nét tiêu biểu về công ty CyberSoft: Tên tiếng Việt: Công ty Cổ Phần Phần Mềm Quản trị Doanh nghiệp Cybersoft. Tên tiếng Anh: CYBERSOFT SOFTWARE SOLUTION PROVIDER Giám đốc : Nguyễn Cảnh Toàn Trụ sở chính: 413 Nguyễn Khang – Cầu Giấy – Hà Nội. Tel: 84-4-7847223 Fax: 84-4-784223 VPĐD: 38 Đinh Công Tráng – TP.Vinh – Nghệ An. Tel: 84-38-598575 Fax: 84-38-598565 E-mail: Cyber-Soft@hn.vnn.vn Website: www.CyberSoft.com.vn 1. Chức năng và nhiệm vụ cơ bản của CyberSoft. CyberSoft là công ty chuyên cung cấp các phần mềm quản lý tài chính kế toán và sản xuất kinh doanh để phục vụ mục tiêu phát triển của từng doanh nghiệp. 2. Mục tiêu của CyberSoft. CyberSoft đặt mục tiêu cho mình sẽ là nhà cung cấp hàng đầu tại Việt Nam về giải pháp tổng thể cho doanh nghiệp trong việc ứng dụng công nghệ thông tin vào quản trị doanh nghiệp và sản xuất kinh doanh. Khẩu hiệu của CyberSoft là “ cùng khách hàng đi đến thành công”, vì thế CyberSoft luôn sẵn sàng cung cấp những sản phẩm, dịch vụ tốt nhất, thỏa mãn tối đa nhu cầu của khách hàng. CyberSoft luôn luôn và không ngừng cố gắng phát triển để tạo ra những sản phẩm ngày càng đáp ứng tốt hơn về yêu cầu ngày càng cao của thị trường đặc biệt là trong lĩnh vực nghiên cứu của mình. 3. Cơ cấu tổ chức của CyberSoft. Hiện nay CyberSoft có khoảng hơn 30 nhân viên có trình độ đại học với các chuyên ngành toán, tin, kế toán, kinh tế và ngoại ngữ. Cơ cấu tổ chức của công ty được mô tả sơ đồ dưới đây: Ban giám đốc Phòng kinh doanh, kế toán Phòng dự án và phát triển sản phẩm Phòng tư vấn và hỗ trợ khách hàng Phòng đào tạo Sơ đồ tổ chức của Công ty CyberSoft Phòng kinh doanh: nhiệm vụ của phòng này là thực hiện các nghiệp vụ kế toán của công ty, bao gồm một kế toán, hai nhân viên kinh doanh chuyên thực hiện công việc quảng cáo, giới thiệu sản phẩm, giao dịch với các khách hàng hiện tại và khách hàng tiềm năng nhằm phát triển thị trường. Phòng dự án và phát triển sản phẩm: làm nhiệm vụ nghiên cứu và phát triển sản phẩm mới, nâng cao khả năng phân tích quản trị của sản phẩm. Phòng này chuyên thực hiện công việc bao gồm xác định yêu cầu, phân tích thiết kế và phát triển sản phẩm, mọi thành viên đều tham gia vào tất cả các công đoạn của công việc mà không phân ra trách nhiệm cụ thể của từng thành viên nào, để tham gia vào được công việc của phòng này, ngoài kiến thức chuyên môn tốt đòi hỏi mỗi thành viên phải là người có kiến thức cơ bản về kinh tế, quản lý và đồng thời thông thạo các nghiệp vụ kinh tế, quản lý, kế toán. Phòng tư vấn và hỗ trợ khách hàng: làm nhiệm vụ tư vấn và có thể tham gia cùng phòng nghiên cứu và phát triển sản phẩm để phân tích, thiết kế các hệ thống lớn như hệ thống thông tin tài chính kế toán, hệ thống thông tin bán hàng, hệ thông thông tin marketing, hệ thông thông tin quản lý nhân sự và lương, hệ thống thông tin lập kế hoạch, dự toán, hệ thống thông tin quản lý chung tòan doanh nghiệp… đồng thời cài đặt, hướng dẫn sử dụng, bảo hành và nâng cấp sản phẩm theo yêu cầu, tư vấn cho doanh nghiệp khi nhu cầu quản lý phát sinh để họ có thể chọn giải pháp tối ưu nhất cho công tác quản lý của mình, công việc chính là làm nhiệm vụ giải đáp thắc mắc, hướng dẫn chi tiết cách khắc phục những tình huống bất thường xảy ra như nhầm lẫn nghiệp vụ, phần mềm có vấn đề… cho khách hàng, khách hàng có thể liên hệ với phòng này qua điện thoại, email, fax và nếu cần thì nhân viên của công ty phải trực tiếp đích thân đến tại trụ sở của họ. Phòng đào tạo: Phòng này chuyên về công việc đào tạo mới, đào tạo lại cho các doanh nghiệp, đồng thời đạo tạo mới và đào tạo lại nhằm nâng cao trình độ để đáp ứng nhu cầu phát triển nguồn nhân lực và tuyển chọn nhân viên mới cho nhu cầu nguồn nhân lực của công ty, hàng năm phòng này vẫn tiếp đón và tuyển chọn những nhân viên mới từ những sinh viên thực tập từ các trường đại học ngành công nghệ thông tin và kế toán. 5. Các lĩnh vực hoạt động của CyberSoft. Lĩnh vực kinh doanh chủ yếu của CyberSoft là về tài chính kế toán và quản trị doanh nghiệp, tuy nhiên nhìn vào sơ đồ tổ chức của công ty có thể thấy công ty chủ yếu đáp ứng các dịch vụ sau: Dịch vụ phát triển phần mềm “may đo”: CyberSoft thực hiện khảo sát và xây dựng các phần mềm “may đo” với các doanh nghiệp có quy mô lớn theo đặc thù riêng có của doanh nghiệp. Dịch vụ tư vấn: Trên cơ sở khảo sát thực trạng và yêu cầu của từng doanh nghiệp, CyberSoft sẽ đưa ra các đề xuất, các phương án về xây dựng hệ thống thông tin của doanh nghiệp. Với các chuyên gia đầy nhiệt tình và trách nhiệm công việc, với sự hiểu biết sâu sắc về nghiệp vụ và kinh nghiệm triển khai ứng dụng cho rất nhiều doanh nghiệp sẽ đưa ra giải pháp tối ưu cho khách hàng. Dịch vụ hỗ trợ và bảo trì: theo yêu cầu của khách hàng, CyberSoft ký kết và thực hiện hợp đồng dịch vụ về hỗ trợ và bảo trì hệ thống thông tin quản trị doanh nghiệp. CyberSoft có riêng một hệ thống thông tin “CyberSoft Assistant” làm nhiệm vụ lưu trữ các vấn đề vướng mắc thường gặp và cách thức giải quyết những vấn đề đó, các nhân viên của CyberSoft luôn sẵn sàng hỗ trợ và giải quyết khó khăn cho khách hàng. Việc đó làm cho những khó khăn của khách hàng được giải quyết một cách nhanh nhất. Dịch vụ đào tạo: CyberSoft thực hiện đào tạo lại và đào tạo mới cho các đơn vị doanh nghiệp, với những doanh nghiệp có quy mô lớn CyberSoft mở hẳn trung tâm đào tạo cho các nhân viên kế toán. Ngoài ra CyberSoft còn tham gia đào tạo kế toán trên máy cho các trường đại học và trung học chuyên nghiệp, các trung tâm đào tạo kế toán và quản lý, hỗ trợ trong việc cung cấp các phần mềm, bài giảng và số liệu thực hành về kế toán. 7. Các đối tác chủ yếu. Công ty xi măng Hoàng Mai Công ty xi măng Hải Phòng Công ty Hưng Long Công ty cổ phần xây dựng đường bộ số 1 Hà Tĩnh Kinh doanh nhà Thanh Hóa Nhà máy thuốc lá Thanh Hóa Công ty đường Bình Định Tổng công ty vận tải Hà Nội Tổng công ty chè Tổng công ty Sông Mã Viện dầu khí (HN, SG) Công  ty dệt Nam Định Công ty dệt kim đông xuân Công ty cơ khí dệt may Nam Định Nhà máy chăn len Nam Định Công ty cao su Đà Nẵng Công ty phụ tùng xe máy GMN Công ty Takanichi Công ty NCI Công ty TS-ARI Công ty Cp dịch vụ giải trí Hà nội Xí nghiệp TOYOTA Hoàn Kiếm Công ty CP đại lý Ford Hà Nội Công ty CP đại lý Ford Thăng Long Công ty CP đại lý Ford Thủ đô Nhà xuất bản bản đồ Công ty dược Vĩnh Phúc Công ty CP dược phẩm Hà Nội Công ty công nghiệp tàu thủy Nam Triệu Công ty hợp tác kinh tế (8 đơn vị) Sở giáo dục Nam Định (38 trường PTTH) Công ty môi trường đô thị Hạ Long Công ty cổ phần GasPetrolimex (SG,HN,DN,HP) Hà nội Transerco (Bus Hà Nội) Truyền hình kỹ thuật số (VTC) Tổng công ty xây dựng miền trung II. ĐỊNH HƯỚNG CHUYÊN ĐỀ THỰC TẬP. Tên đề tài : Ứng dụng tin học vào công tác quản lý sinh viên Ký túc xá trường đại học Kinh tế quốc dân. 1. Giới thiệu đề tài thực tập Sau một thời gian dài tìm hiểu, quan sát đồng thời sống và học tập trong KTX, thấy có rất nhiều bất cập trong công tác quản lý KTX cũng như của trung tâm dịch vụ trường đại học Kinh tế Quốc dân ảnh hưởng đến công tác xử lý thông tin, dữ liệu quản lý, làm giảm hiệu suất làm việc làm mất thời gian của nhân viên trung tâm dịch vụ và tăng thời gian cũng như mức độ phức tạp của sinh viên khi đăng kí và làm thủ tục để nội trú trong KTX và nhiều bất cập khác nên người viết đã quyết định chọn đề tài này, tuy nhiên do thời gian không cho phép nên đề tài này chỉ gói gọn trong công tác quản lý việc nhập liệu, sắp xếp phòng, thu tiền, báo cáo danh sách sinh viên KTX và một số báo cáo có liên quan…Đề tài này được lựa chọn là nhằm mục đích cung cấp một giải pháp riêng biệt cho công tác quản lý sinh viên nội trú trong KTX trường Đại học Kinh tế Quốc dân. Giảm thiểu những sai sót không đáng có và giảm gánh nặng cho người nhâp liệu đồng thời nâng cao năng suất làm việc của nhân viên quản lý cũng như cung cấp các thông tin cần thiết một cách kịp thời cho ban giám đốc và những người có trách nhiệm liên quan . Tuy gói gọn như vậy nhưng nội dung bao hàm nhiều mảng kiến thức được học như CSDL, cấu trúc dữ liệu và giải thuật, Hệ thống thông tin quản lý, tin học quản lý, kinh tế thông tin cũng như kiến thức được tổng hợp từ thực tế khi người viết thực tập tại một công ty chuyên cung cấp phần mềm quản lý, kế toán…Đồng thời bao hàm một số kiến thức về kinh tế và quản lý. Phần mềm này được viết trên nền hệ quản trị cơ sở dữ liệu Visual Foxpro 7.0 – là một hệ quản trị cơ sở dữ liệu mạnh và thuận tiện cho các bài toán trong quản lý kinh tế, quản lý phân tích, tổng hợp cơ sở dữ liệu cho các doanh nghiệp từ nhỏ đến lớn. 2. Tính cấp bách của đề tài: Hiện nay, do nhu cầu ngày càng mở rộng về quy mô đào tạo, nhu cầu sinh viên ở KTX ngày càng cao do chất lượng dịch vụ của KTX ngày càng đáp ứng đầy đủ về vật chất cũng như tinh thần cho sinh viên. Toàn bộ khu KTX có tổng cộng 5 nhà là nhà 1, 2, 3, 4 và nhà 11. Từ nhà 1 đến nhà 4 mỗi nhà có 56 phòng, mỗi phòng có 10 sinh viên. Nhà 11 cũng có số phòng tương đương với số lượng sinh viên tương tự. Đầu năm học, ban quản lý KTX đều tổ chức đăng ký chỗ ở, sắp xếp lại phòng ở và thu tiền. Việc thu tiền là dùng phần mềm chung của nhà trường. Còn việc sắp xếp bố trí phòng ở thì làm trên Excel với nhiều hạn chế không đáp ứng được đặc thù quản lý của KTX,việc thêm, bớt, xóa sửa khi có thay đổi về chỗ ở là phải làm thủ công. Vì vậy đã có rất nhiều sai lỗi trong quá trình thực hiện công việc, và những sai lầm đã từng thấy là sắp xếp sinh viên các khóa ở lộn xộn, khóa này với khóa khác, thậm chí đã từng sắp xếp sinh viên nữ và nam ở chung phòng, đến lúc sinh viên đi xem phòng ở mới phát hiện ra và báo cáo lại thì ban quản lý mới biết. Ngoài ra trong quá trình ở cũng có nhiều vấn đề phát sinh như sinh viên bỏ dở ra ngoài, sinh viên ngoài xin vào, sinh viên xin chuyển từ phòng này sang phòng khác, cuối năm học phải sắp xếp lại chỗ ở, đến tháng phải thu tiền điện nước, phát giấy vệ sinh, tất cả đều phải báo cáo lại cho ban quản lý KTX biết….Vậy với đề tài này, người viết hy vọng sẽ ứng dụng tin học vào công tác quản lý sinh viên KTX nhằm đáp ứng phần nào những bất cập nêu trên để phục vụ công tác quản lý sinh viên nội trú một cách có hiệu quả, tránh lầm lẫn, sai sót, nâng cao chất lượng dịch vụ KTX, tự động xử lý một số công việc đòi hỏi mất nhiều thời gian và gặp nhiều sai sót khi làm thủ công, đặc biệt là việc xếp phòng cho sinh viên, tổng hợp báo cáo để báo cáo lại với cấp quản lý của KTX mà cụ thể là giám đốc trung tâm dịch vụ trường Đại học Kinh tế Quốc dân. Chương II: Cơ sở phương pháp luận cơ bản cho việc nghiên cứu đề tài Chương này tập trung giới thiệu cơ sở lý luận chung cho việc nghiên cứu đề tài, bao gồm những vấn đề chủ yếu sau: -Một số lý thuyết cơ bản về cơ sở dữ liệu quan hệ -Các thuộc tính cơ sở dữ liệu quan hệ -Các mô hình quan hệ thực thể -Giới thiệu các hệ quản trị cơ sở dữ liệu, giới thiệu kỹ về Foxpro 7.0 -Quy trình phân tích thiết kế hệ thống, các mô hình BFD, DFD -Mô hình hóa và chuẩn hóa dữ liệu I. Giới thiệu về mô hình thực thể - quan hệ 1. Giới thiệu các khái niệm cơ bản Những khái niệm liên quan đến mô hình dữ liệu quan hệ Trong mô hình cơ sở dữ liệu quan hệ có những thuật ngữ sau làm cơ sở cho việc thiết kế cơ sở dữ liệu : -Table (bảng): như bang thống kê, bảng danh mục tài khoản kế toán, bảng danh sách cán bộ, bảng lương, bảng điểm sinh viên, bảng niêm yết giá chứng khoán…thực hiện việc ghi chép về một nhóm phần tử nào đó gọi là entity ( thực thể). -Entity(Thực thể): là một nhóm người, đồ vật, sự kiện hay,hiện tượng hay khái niệm bất kì với các đặc điểm và thuộc tính sẵn có và đặc trưng cần được ghi chép lại. Một số thực thể có thể là vật chất như hàng hóa, máy móc, xe cộ, khách hàng, sinh viên, cán bộ, hóa đơn…Một số khác lại mang tính khái niệm như giá cả, tài khoản kế toán, dự án, nhiệm vụ công tác…Như trên các thực thể đó có thể là các chỉ tiêu thống kê, các tài khoản kế toán, cán bộ, lương, điểm của các sinh viên, giá của các loại chứng khoán trên thị trường chứng khoán. 2. Thuộc tính • Attribute(Thuộc tính): là những đặc điểm và tính chất của thực thể, mỗi thuộc tính là một yếu tố dữ liệu tách biệt, thường không chia nhỏ được nữa. Các thuộc tính góp phần mô tả thực thể và là những dữ liệu về thực thể mà ta muốn lưu trữ. Ví dụ, thực thể tài khoản kế toán được đặc trưng bởi những đặc điểm như mã tài khoản, tài khoản mẹ, tên tài khoản, nhóm tài khoản… • Mỗi bảng bao gồm các dòng (row), mỗi dòng như thế ghi chép dữ liệu về một cá thể (instance) là một biểu hiện riêng biệt của một thực thể nên còn được gọi là một record (bản ghi) . Ví dụ mỗi dòng của một tài khoản kế toán dùng để ghi chép thông tin về một tài khoản kế toán chẳng hạn như tài khoản 111 có mã tài khoản là 111, tên tài khoản là tiền gửi ngân hàng, tài khoản mẹ (rỗng), nhóm tài khoản là tài sản lưu động… • Các bảng lại có những cột (colum): chúng còn được gọi là field (Trường), đó là thuộc tính của thực thể như với thực thể sinh viên thì có mã sinh viên, tên sinh viên, ngày sinh, quê quán… mỗi thuộc tính như vậy được phản ánh trên các trường và ô ghi thông tin chính là ô giao nhau giữa cột và dòng của một cá thể riêng biệt nào đó. II. Cơ sở dữ liệu và hệ quản trị cơ sở dữ liệu Trong phần này sẽ giới thiệu khái niệm cơ bản về cơ sở dữ liệu và hệ quản trị cơ sở dữ liệu: A. Khái niệm chung 1. Cơ sở dữ liệu và hệ cơ sở dữ liệu • Khái niệm CSDL (Database): là một nhóm gồm một hay nhiều bảng liên quan với nhau. Ví dụ như cơ sở dữ liệu sinh viên bao gồm nhiều bảng như bảng sinh viên, bảng dan sách khoa, bảng danh sách lớp,… Hoặc cơ sở dữ liệu quản lý nhân sự có các bảng như bảng cán bộ, bảng danh sách phòng ban, bảng lương… • Hệ cơ sở dữ liệu (Database system): là một tập hợp các cơ sở dữ liệu có liên quan với nhau kết hợp lại, chúng còn được gọi là một ngân hang dữ liệu (Databank), ví dụ như tất cả các CSDL trong trường ĐHKTQD tập hợp lại thành một hệ cơ sở dữ liệu, các cơ sở dữ liệu của một cơ quan nào đó như quản lý nhân sự, quản lý lương, cơ sở dữ liệu quản lý kho,.. hợp lại thành một hệ cơ sở dữ liệu của cơ quan đó. 2. Hệ quản trị cơ sở dữ liệu • Hệ quản trị cơ sở dữ liệu ( Database Management Systems): viết tắt là HQTCSDL hay DBMS là một hệ thống chương trình máy tính giúp tạo lập thiểt kế, duy trì, sử dụng, quản lý các hệ cơ sở dữ liệu. Một số DBMS thông dụng hiện nay như Oracle, SQL Server, Foxpro, Access, MySql, R:Base… 3. Hệ quản trị cơ sở dữ liệu Foxpro 7.0 Foxpro là hệ quản trị cơ sở dữ liệu hướng đối tượng, nó có khả năng giúp bạn có thể tạo lập và lựa chọn các giải pháp cơ sở dữ liệu phục vụ cho công tác quản trị kinh doanh của doanh nghiệp, đây là hệ quản trị cơ sở dữ liệu chuyên phục vụ để giải quyết các bài toán trong quản lý. Đặc điểm khác biệt của foxpro là sự đơn giản, bạn có thể nhanh chóng nắm bắt các kĩ thuật của nó, nó bao gồm một tập hợp khổng lồ các hàm giúp cho người phát triển không phải mất công viết lại hàm hay thủ tục cho những công việc thông thường và như vật tiết kiệm công sức cũng như chi phí cho cả người phát triển và cả các doanh nghiệp khi lựa chọn giải pháp quản trị doanh nghiệp của mình bằng hệ quản trị cơ sở dữ liệu này. Đi theo bộ cài đặt hệ quản trị cơ sở dữ liệu Foxpro là các công cụ phát triển, tài liệu hướng dẫn, các ví dụ minh họa để bạn có thể nắm bắt và áp dụng nhanh chóng các phương pháp để xây dựng, phát triển và quản trị ứng dụng cơ sở dữ liệu của mình. Hiện tại Visual Foxpro có bản mới nhất là 9.0, tuy nhiên đề tài này được viết trên nền phiên bản Visual Foxpro 7.0, bản này có những cải thiện đáng kể so với bản 6.0 trước đó và hiện tại đang được sử dụng tại nhiều doanh nghiệp phần mềm chuyên viết các phần mềm quản lý và kế toán. B. Mô hình quan hệ thực thể Khi phản ánh thực tế vào một cơ sở dữ liệu, thì các thực thể thường không độc lập mà có mối liên quan chặt chẽ với nhau chứ không cô lập một cách tuyệt đối. Chính vì vật mà người thiết kế thường sử dụng những mô hình quan hệ để xây dựng các mối quan hệ giữa các thực thể nhằm tối ưu quá trình thiết kế cơ sở dữ liệu cũng như xây dựng ứng dụng phục vụ quản lý. Sau đây xin giới thiệu ba mô hình quan hệ phổ biến và thường được các nhà phát triển ứng dụng cơ sở dữ liệu sử dụng trong quá trình thiết kế hệ thống. 1. Mô hình quan hệ 1-1 Có hai thực thể A và B được phản ánh vào hai bảng là A và B, khi đó ta nói là hai bảng A và B có mối quan hệ 1-1 (one to one) khi ứng với mỗi dòng trong bản A thì cũng chỉ có một dòng tương ứng với nó trong bảng B và ngược lại, ứng với mỗi dòng trong bảng B cũng chỉ có một dòng trong bang A. Trong thực tế thì mô hình quan hệ 1-1 thường ít khi sử dụng, vì luôn luôn có thể ghép hai bảng A và B thành một. Nếu có sử dụng là do người ta muốn tách một bảng có quá nhiều cột thành hai bảng tương ứng có số cột ít hơn cho dễ nhìn và đỡ cồng kềnh, hoạc người ta muốn nhóm các trường hay biến động sang một bảng khác để cập nhật khi cần, khi cần cập nhật người dùng không cần phải mở tất cả các trường trong bảng lớn để cập nhật mà chỉ cần mở bảng có các trường hay biến động để cập nhật mà thôi. Ví dụ như bảng hàng hóa thì có thể tách thành bảng chứa các thông tin về hàng hóa như mã hàng, tên hàng, hãng sản xuất, còn bảng thứ hai thì dùng để lưu những thông tin hay biến động hơn như ngày sản xuất, số lượng, đơn giá. 2. Mô hình quan hệ 1-m Giữa hai bảng A và B là có mối quan hệ 1-m (one to many) nếu ứng với một dòng trong bảng A thì sẽ có nhiều dòng tương ứng với nó trong bảng B và ngược lãi mỗi dòng trong bảng B chỉ ứng với một dòng trong bảng A. Bảng A còn gọi là bảng chủ, còn bảng B là bảng kết hợp hay là bảng quan hệ. Ví dụ như hình sau: Trong hình trên ta có hai thực thể là Nhà và Phòng, một nhà có nhiều phòng, nhưng mỗi phòng chỉ thuộc về một nhà mà thôi, ở bản nhà ta có Primary Key (PK) là Ma_nha, ở bảng Phong có PK là Ma_phong, có Foreign Key (FK) hay còn gọi là khóa ngoại lai là Ma_nha, hai bảng này có quan hệ với nhau thông qua khóa chính ở bảng Nha và khóa ngoại ở bảng Phong, mũi tên chỉ từ Phong sang Nha để chỉ rằng mỗi phòng trong bảng Phong chỉ thuộc về một nhà trong bảng Nha. Mô hình quan hệ một nhiều có thể coi là mô hình ứng dụng nhiều nhất và cũng xuất hiện nhiều nhất trong thực tế, một khoa có nhiều sinh viên nhưng mỗi sinh viên chỉ thuộc về một khoa, một mặt hàng có nhiều món hàng nhưng mỗi món hàng chỉ thuộc về một mặt hàng mà thôi… 3. Mô hình quan hệ m-m Hai bảng A và B có mối quan hệ nhiều- nhiều (many to many) khi ứng với một dòng trong bảng A thì cũng có nhiều dòng trong bảng B và ngược lại ứng với mỗi dòng trong bảng B thì cũng có nhiều dòng trong bảng A. Ví dụ một hóa đơn ghi nhiều mặt hàng nhưng mỗi mặt hàng cũng có thể xuất hiện trên nhiều hóa đơn khác nhau. Tuy nhiên mối quan hệ này thường được chuyển về mô hình quan hệ 1-nhiều. Khi gặp mô hình quan hệ nhiều - nhiều ta thường tạo ra một thực thể thứ ba là giao của hai thực thể ban đầu, giả sử là thực thể C. Ví dụ như trên ta có thể thêm một thực thể thứ ba là món hàng giao của hóa đơn và mặt hàng, một hóa đơn có nhiều món hàng, một mặt hàng cũng có nhiều món hàng, như vậy thông qua bảng giao này mà giữa hóa đơn và mặt hàng có mối quan hệ với nhau. C. Nội dung của việc thiết kế và tạo lập CSDL 1. Xác định mục đích của cơ sở dữ liệu Là một người phát triển ứng dụng cơ sở dữ liệu thì trước hết bạn phải xác định được là cơ sở dữ liệu này dùng để làm gì. Muốn vậy phải trải qua một quá trình điều tra, xác định yêu cầu, từ đó phân tích và thiết kế cho hợp lý, bạn phải hỏi người trực tiếp sử dụng và người quản lý của hệ thống để biết rõ những thông tin nào thì cần thiết cho cơ sở dữ liệu, hình thức báo cáo đầu ra như thế nào để có thể thiết kế một cách hợp lý. Phải xác định một cách rõ ràng, chính xác và đầy đủ nếu không cơ sở dữ liệu sẽ trở nên vô dụng và như vậy ứng dụng của bạn khó có thể đáp ứng được yêu cầ sử dụng của người dùng và yêu cầu quản lý của người quản lý. 2. Phác họa mô hình dữ liệu a. Xác định thực thể và thuộc tính của mỗi thực thể Công việc đầu tiên của quá trình xây dựng ứng dụng cơ sở dữ liệu là xác định xem có những thực thể nào cần phản ánh và những thuộc tính nào cần có để đưa vào cơ sở dữ liệu, thực chất của quá trình này là xây dựng các bảng và trong các bảng đó thì cần có những trường nào nhằm đáp ứng được yêu cầu đặt ra khi phân tích và xác định yêu cầu. Một số nguyên tắc khi chọn lựa xây dựng các bảng và các cột trong bảng: - Giảm thiểu sự trùng lặp: hoàn toàn không nên để những thông tin trùng lặp trong một bảng và cũng không nên để thông tin trùng lặp giữa các bảng với nhau. Ví dụ trong một bảng sinh viên thì không nên có đồng thời hai trường cùng lưu thông tin về một thuộc tính nào đó của sinh viên, cũng không nên lưu thông tin ngày sinh và giới tính hoặc lớp của sinh viên vào hai bảng nào đó, như vậy khi cập nhật thì chỉ cần thực hiện trên một bảng là được tránh phải cập nhật chỗ này xong rồi lại cập nhật trong một bảng khác, tránh được sự không nhất quán dữ liệu khi không cập nhật kịp thời, như thế sẽ rất mất thời gian và công sức cho người lập trình, và người sử dụng sẽ cảm thấy khó khăn khi xử lý những vấn đề bất thường có thể xảy ra trong quá trình sử dụng. - Tránh dữ liệu dư thừa : một bảng thì phải chứa những thông tin vừa và đủ về một thực thể, không nên đưa những thông tin không cần thiết vào bảng sẽ làm rối cơ sở dữ liệu và làm cho dung lượng của cơ sở dữ liệu tăng lên. Cũng không nên đưa những thông tin mà có thể tính toán từ những bảng khác hoặc từ các cột khác trong cùng một bảng. Ví dụ không nên đưa vào cột điểm trung bình vì máy có thể tính toán điểm đó dựa trên thông tin về điểm của từng môn học của sinh viên, hoặc không cần cột thành tiền vì máy cũng có thể tính được kết quả dựa vào thông tin đơn giá và số lượng. Tất nhiên cũng có thể đưa những thông tin này vào cơ sở dữ liệu nhưng sẽ thực hiện việc tính toán bàng việc lập trình mà người dùng không phải can thiệp gì. - Tăng cường tính độc lập giữa các bảng : khi thiết kế cơ sở dữ liệu làm sao cố gắng đến mức tối đa tách những thông tin độc lập về từng thực thể giữa các bảng, như vật khi cần thay đổi cập nhật thông tin trong một bảng nào đó sẽ không ảnh hưởng đến những bảng khác. Ví dụ như thông tin về khách hàng như họ tên, số điện thoại, địa chỉ thì nên để trong bảng tách biệt với đơn đặt hàng của khách hàng đó, như vật khi cần thay đổi thông tin hay loại bỏ đơn đặt hàng thì cũng không ảnh hưởng gì đến thông tin của khách hàng ở bảng thông tin khách hàng. - Dữ liệu nguyên tố: mỗi một cột trong bảng cần phải chứa được thông tin nguyên tố tức là thông tin ma không hoặc ít khi phải chia nhỏ hơn nữa. Ví dụ như trường họ tên thì nên tách thành trường họ đệm và trường tên, vì thường người ta hay sắp xếp theo theo vần abc của tên chứ ít khi người ta sắp xếp theo thứ tự của họ đệm. b. Xác định các mối quan hệ Khi xác định xong các thực thể và các thuộc tính của mỗi thực thể thì người thiết kế cần phải xác định các mối quan hệ giữa các thực thể đó, nhằm sau này có thể trích rút và tổng hợp thông tin giữa các bảng khác nhau nhằm đáp ứng nhanh chóng và đầy đủ những yêu cầu của người dùng. Ví dụ thông tin về hàng hóa có thể phải tổng hợp từ nhiều bảng khác nhau của cơ sở dữ liệu hàng hóa. 3. Duyệt lại mô hình dữ liêu Kiểm tra và duyệt lại cơ sở dữ liệu một lần nữa nhằm phát hiện tránh những sai sót ngay từ lúc sau khi thiết kế, vì sửa ngay lúc này thì dễ dàng hơn nhiều so với lúc các bảng đã chứa đầy dữ liệu và ứng dụng đang được xây dựng dở dang. 4. Xây dựng CSDL Công việc lúc này là sẽ dùng đến một hệ quản trị cơ sở dữ liệu để “biên dịch” mô hình thiết kế thành một cơ sở dữ liệu thực trên máy tính, tiến hành tạo bảng, điền dữ liệu, tạo các truy vấn, module chương trình, các form nhập, báo cáo… để xây dựng một ứng dụng hoàn chỉnh. III. Quy trình phân tích hệ thống thông tin quản lý 1. Quy trình Một số nguyên nhân dẫn đến việc phát triển một hệ thống thông tin - Những vấn đề về quản lý. - Những yêu cầu mới của nhà quản lý. - Sự thay đổi của công nghệ. - Thay đổi sách lược chính trị. Những yêu cầu mới của quản lý cũng có thể dẫn đến sự cần thiết của một dự án phát triển một hệ thống thông tin mới. Những luật mới của Chính phủ mới ban hành, việc ký kết một hiệp tác mới, đa dạng hóa các hoạt động của doanh nghiệp bằng sản phẩm mới hoặc dịch vụ mới. Các hành động mới của doanh nghiệp cạnh tranh cũng có một tác động mạnh vào động cơ buộc doanh nghiệp phải có những hành động đáp ứng. Việc xuất hiện các công nghệ mới cũng có thể dẫn đến việc một tổ chức phải xem lại những thiết bị hiện có trong hệ thống thông tin của mình. Khi các HQTCSDL ra đời nhiều tổ chức phải rà soát lại các hệ thống thông tin của mình để quyết định những gì họ phải cài đặt lại khi muốn sử dụng những công nghệ mới này. Cuối cùng, vai trò của những thách thức chính trị cũng không nên bỏ qua. Nó cũng có thể là nguyên nhân dẫn đến việc phát triển một hệ thống thông tin. Phương pháp phát triển hệ thống thông tin Mục đích chính xác của dự án phát triển một hệ thống thông tin là có được một sản phẩm đáp ứng nhu cầu của người sử dụng, mà nó được hòa hợp vào trong các hoạt động của tổ chức, chính xác về mặt kỹ thuật, tuân thủ các giới hạn về tài chính và thời gian định trước. Không nhất thiết phải theo đuổi một phương pháp để phát triển một hệ thống thông tin, tuy nhiên không có phương pháp ta có nguy cơ không đạt những mục tiêu định trước. Tại sao lại như vậy? Một hệ thống thông tin là là một đối tượng phức tạp, vận động trong một môi trường cũng rất phức tạp. Để làm chủ sự phức tạp đó, phân tích viên cần phải có một cách tiến hành nghiêm túc, một phương pháp. Một phương pháp được định nghĩa như một tập hợp các bước và các công cụ cho phép tiến hành một quá trình phát triển hệ thống chặt chẽ nhưng dễ quản lý hơn. Phương pháp được đề nghị ở đây dựa vào ba nguyên tắc cơ sở chung của nhiều phương pháp hiện đại có cấu trúc để phát triển hệ thống thông tin. Ba nguyên tắc đó là: Sử dụng các mô hình. Chuyển từ cái chung sang cái riêng. Chuyển từ mô hình vật lý sang mô hình logic khi phân tích và từ mô hình logic sang mô hình vật lý khi thiết kế. Nguyên tắc đi từ chung đến riêng là một nguyên tắc của sự đơn giản hóa. Thực tế người khẳng định rằng để hiểu tốt một hệ thống thì trước hết phải hiểu các mặt chung trước khi xem xét chi tiết. Sự cần thiết áp dụng nguyên tắc này là hiển nhiên. Tuy nhiên những công cụ đầu tiên được sử dụng để phát triển ứng dụng tin học cho phép tiến hành mô hình hóa một hệ thống bằng các khía cạnh chi tiết hơn. Nhiệm vụ lúc đó sẽ khó khăn hơn. Nhiệm vụ phát triển cũng sẽ đơn giản hơn bằng cách ứng dụng nguyên tắc thứ ba, có nghĩa là đi từ vật lý sang logic khi phân tích và đi từ logic sang vật lý khi thiết kế. Ta thấy, phân tích bắt đầu từ thu thập dữ liệu về hệ thống thông tin đang tồn tại và về khung cảnh của nó. Nguồn dữ liệu chính là những người sử dụng, các tài liệu và quan sát. Cả ba nguồn này cung cấp chủ yếu sự mô tả mô hình vật lý ngoài của hệ thống. Tuy nhiên vấn đề sẽ khác đi khi ta tiến hành thiết kế hệ thống mới. Các công đoạn của quá trình phát triển hệ thống thông tin Phát triển hệ thống thông tin có 7 công đoạn chủ yếu, mỗi công đoạn lại bao gồm một dãy các công đoạn được liệt kê kèm theo. Cuối mỗi giai đoạn là phải kèm theo việc ra quyết định về việc tiếp tục hay chấm dứt sự phát triển của hệ thống. Quyết định này được trợ giúp dựa vào nội dung báo cáo mà phân tích viên hoặc nhóm phân tích viên trình bày cho các nhà sử dụng. a.Giai đoạn 1: Đánh giá yêu cầu. Đánh giá yêu cầu có mục đích cung cấp cho lãnh đạo tổ chức hoặc hội đồng giám đốc những dữ liệu đích thực để ra quyết định về thời cơ, tính khả thi và hiệu quả của một dự án phát triển hệ thống. Giai đoạn này được thực hiện tương đối nhanh và không đòi hỏi chi phí lớn. Nó bao gồm các công đoạn sau: Lập kế hoạch đánh giá yêu cầu. Mỗi giai đoạn của quá trình phát triển hệ thống cần phải được lập kế hoạch cẩn thận. Trong giai đoạn thẩm định dự án thì chúng ta phải làm quen với hệ thống đang xem xét và xác định các thông tin phải thu thập cũng như các nguồn, các phương pháp thu thập thông tin. Thông tin cần thu thập ít hay nhiều phụ thuộc vào kích thước và độ phức tạp của hệ thống mà ta đang nghiên cứu. Chẳng hạn, thẩm định yêu cầu phát triển hệ thống lập hóa đơn bán hàng cho một doanh nghiệp nhỏ sẽ yêu cầu tư vấn với số lượng nguồn thông tin ít hơn so với hệ thống quản lý nhan sự của một doanh nghiệp lớn. Đối với những dự án lớn và có nhiều thành tham gia vào công việc thẩm định dự án thì cần phải xác định nhiệm vụ cho từng thành viên và xác định phương tiện kết hợp giữa các nhiệm vụ. Làm rõ yêu cầu. Trong khâu này thì mục đích chính là làm cho phân tích hiểu đúng và hiểu rõ yêu cầu của người xác định yêu cầu. Cần xác định được chính xác đối tượng yêu cầu và thu thập những thông tin cơ bản của môi trường hệ thống và xác định khung cảnh nghiên cứu. Yêu cầu phát triển hệ thống của khách hàng có thể được thông báo một cách chun._.g chung do đó có thể dẫn đến sự nhầm lẫn. Chẳng hạn, một nhà quản lý yêu cầu “Làm lại hệ thống quản lý đơn đặt hàng”. Nhưng thực ra ông ta muốn sửa chữa hệ thống thu nhận đơn đặt hàng vì việc sử dụng nó chưa có hiệu quả. Như vậy phân tích viên có thể hiểu theo nghĩa là nhà quản lý muốn làm lại toàn bộ hệ thống nhưng thực ra thì đó là một cách hiểu sai bởi vì đơn giản chỉ là nhà quản lý muốn thay thế hệ thống đơn đặt hàng cũ mà thôi. Vì vậy chính giai đoạn đánh giá yêu cầu và cụ thể là công đoạn làm rõ yêu cầu cho phép xác định được đúng yêu cầu của nhà quản lý. Khi làm rõ yêu cầu thì đầu tiên là phân tích viên phải xác định chính xác xem người sử dụng muốn gì? Tiếp theo là phân tích viên phải đánh giá xem liệu yêu cầu đúng như đề nghị hay có thể giảm xuống hoặc phải tăng cường mở rộng thêm? Làm sáng tỏ yêu cầu được thực hiện chủ yếu qua những cuộc gặp gỡ với những người yêu cầu sau đó là với những người quản lý chính mà bộ phận của họ bị tác động hoặc bị hệ thống nghiên cứu ảnh hưởng tới. Chúng ta cần xây dựng lên bản phác họa đầu tiên về khung cảnh của hệ thống nghiên cứu. Xác định khung cảnh nghiên cứu không phải là một công việc dễ dàng vì nếu phân tích viên xác định nó quá hẹp thì sẽ có thể dẫn đến một số thành phần quan trọng không được đưa vào trong hệ thống còn nếu xác định nó quá rộng thì có thể lại dẫn đến những hậu quả tiêu cực mặc dù nó đảm bảo cho nhà phân tích tính hết tới các yếu tố quan trọng của hệ thống. Nhưng mà nếu như xác định rộng như vậy thì liệu có đủ thời gian và tiền bạc để phát triển hệ thống trong tương lai. Các phân tích viên phải tận dụng các cơ hội được gặp gỡ cũng như tham khảo từ các tài liệu khác nhau có trong tổ chức của mình để có thể hoàn thiện thêm về hệ thống. Trên thực tế thì phỏng vấn, quan sát, nghiên cứu tài liệu và sử dụng phiếu điều tra là những công cụ được tin dùng của nhà phân tích. Chúng cũng được dùng trong suốt quá trình phát triển dự án nhưng đặc biệt là trong giai đoạn đánh giá yêu cầu. Tại sao lại như vậy? Bởi vì một lý do đơn giản đó là cần phải đánh giá được khả năng thực thi của dự án, nếu trong giai đoạn đánh giá yêu cầu mà không đánh giá được hết các khả năng có thể xảy ra của hệ thống cũng như những yếu tố tác động bên ngoài tới hệ thống thì có thể gây ra rất nhiều lãng phí cả về tài chính cũng như nhân lực. Đánh giá khả năng thực thi. Đánh giá khả năng thực thi của dự án là tìm xem có yếu tố nào ngăn cản nhà phân tích thực hiện, cài đặt một cách thành công giải pháp đã đề xuất hay không? Nhưng trong thực tế quá trình phát triển hệ thống luôn luôn phải tiến hành việc đánh giá lại. Trong đánh giá khả năng thực thi của dự án thì cần quan tâm đến các vấn đề chính như sau: + Khả thi về tổ chức: đó là đòi hỏi bắt buộc phải có của mỗi hệ thống thông tin quản lý, nếu không đáp ứng được yêu cầu này thì dự án phát triển thông tin đó coi như không khả thi bởi vì một hệ thống thông tin quản lý luôn luôn phải kết hợp hài hòa với môi trường tổ chức. Ngoài ra chúng ta còn phải xem xét các ảnh hưởng của quản lý nhân sự của Nhà nước, ảnh hưởng tới quan hệ khách hàng, ảnh hưởng xảy ra với sự trợ giúp của hệ thống thông tin mới … + Khả thi về mặt kỹ thuật: đòi hỏi này được đánh giá bằng cách so sánh công nghệ hiện có hoặc có thể mua sắm được với yêu cầu kỹ thuật của hệ thống đề xuất. Chúng ta phải đánh giá khả thi về mặt kỹ thuật bởi vì đòi hỏi về mặt kỹ thuật là quan trọng nếu như các đòi hỏi khác đều đáp ứng được nhưng lại không đáp ứng được yêu cầu này thì hệ thống đó không thể sử dụng được và không thể tiếp tục phát triển được. + Khả thi về mặt tài chính: chúng ta xem xét khả thi về mặt tài chính đó là đánh giá xem lợi ích thu được của hệ thống (cả về mặt hữu hình và vô hình) có lớn hơn được chi phí đã bỏ ra để xây dựng hệ thống hay không? Nếu lợi ích thu được từ hệ thống mà nhỏ hơn chi phí đã bỏ ra thì ta không nên tiếp tục phát triển hệ thống. Chuẩn bị và trình bày báo cáo đánh giá yêu cầu. Báo cáo cho phép các nhà quyết định cho phép dự án tiếp tục hay ngừng lại. Báo cáo phải cung cấp một bức tranh sáng sủa và đầy đủ về tình hình và khuyến nghị những hành động tiếp theo. Báo cáo thường được trình bày để các nhà quyết định có thể yêu cầu làm rõ thêm các vấn đề. Sau đó là quyết định tiếp tục hay loại bỏ dự án. b.Giai đoạn 2: Phân tích chi tiết Phân tích chi tiết được tiến hành sau khi có sự đánh giá thuận lợi về yêu cầu. Những mục đích chính của phân tích chi tiết là hiểu rõ các vấn đề của hệ thống đang nghiên cứu, xác định những nguyên nhân đích thực của những vấn đề đó, xác định những đòi hỏi và những ràng buộc áp đặt đối với hệ thống và xác định mục tiêu mà hệ thống thông tin mới phải đạt được. Trên cơ sở nội dung báo cáo chi tiết sẽ quyết định tiếp tục tiến hành hay thôi phát triển một hệ thống mới. Để làm những việc đó giai đoạn phân tích chi tiết bao gồm các công đoạn sau đây: Lập kế hoạch phân tích chi tiết. Trong khi lập kế hoạch phân tích chi tiết thì ta cần phải thành lập nhóm phân tích, phân chia nhiệm vụ, chon phương pháp, công cụ và kỹ thuật sẽ dùng và xây dựng thời hạn cho các công việc. + Thành lập đội ngũ: để thành lập đội ngũ phân tích thì ta cần căn cứ vào các yếu tố như quy mô của hệ thống, kích cỡ của tổ chức, cách thức quản lý dự án trong tổ chức, sự sẵn sàng và kinh nghiệm của các thành viên tham gia. Với một hệ thống lớn và phức tạp thì cần có một đội ngũ phân tích viên lớn mạnh và dày dạn kinh nghiệm nhưng đối với các hệ thống nhỏ thì có thể là chỉ có một phân tích viên chịu toàn bộ trách nhiệm phát triển hệ thống. Trong quá trình phân tích chi tiết thì không thể thiếu được sự cộng tác của đại diện người sử dụng vì đó là những người cho sử dụng cuối cùng. Điều tất nhiên là người sử dụng hệ thống sẽ đóng vai trò quan trọng trong dự án vì chính họ sẽ sử dụng hệ thống trong tương lai và họ có yêu cầu bảo đảm rằng hệ thống đó sẽ đáp ứng yêu cầu của họ. Vì vậy có một số tổ chức đã cho một số người sử dụng trở thành thành viên của nhóm phát triển hệ thống, tuy nhiên điều này không phải lúc nào cũng xảy ra do điều kiện về tài chính cũng như nhân sự của công ty. + Lựa chọn phương pháp và công cụ: hiện nay tồn tại bốn phương pháp thu thập thông tin chính là phỏng vấn, phiếu điều tra, quan sát và nghiên cứu tài liệu của tổ chức. Các công cụ này không phải lúc nào cũng có thể sử dụng được vì nó còn phụ thuộc vào hệ thống ta đang phát triển có lớn hay không? Trong một số trường hợp thì phỏng vấn tỏ ra rất có ích nhưng trong một số trường hợp nó lại tỏ ra không có hiệu quả. Chính vì vậy chúng ta cần lựa chọn phương pháp và công cụ thu thập thông tin một cách đúng đắn. + Xác định thời hạn: người sử dụng luôn luôn yêu cầu hệ thống được hoàn tất ngay sau ngày bắt đầu xây dựng hệ thống. Vì vậy chúng ta cần đảm bảo thời hạn hoàn tất của dự án, muốn như vậy thì chúng ta cần phải phân chia công việc một cách hiệu quả và yêu cầu cần phải tuân thủ đúng thời hạn để hệ thống có thể đưa vào sử dụng đúng hạn. Nghiên cứu môi trường của hệ thống đang tồn tại. Một hệ thống thông tin luôn luôn chịu sự ràng buộ của các yếu tố bên ngoài và bên trong, nó không phát triển một cách độc lập. Chúng ta cần phải thu thập những yếu tố ràng buộc đó để có thể phát triển hệ thống được nhanh chóng và chính xác. + Môi trường ngoài. + Môi trường tổ chức. + Môi trường vật lý. Nghiên cứu hệ thống hiện tại. Muốn phát triển dự án được tốt thì ta phải có sự hiểu biết về hệ thống đang tồn tại đầy đủ và chi tiết. Để làm được điều này thì đội ngũ phát triển hệ thống phải làm việc một cách nghiêm túc và hiệu quả, họ phải làm các công việc sau: + Thu thập thông tin về hệ thống đang tồn tại: trong công đoạn này thì đội ngũ phát triển hệ thống phải làm đó là mô tả các bộ phận và hoạt động của chúng và các vấn đề có liên quan như: hệ thống, vấn đề của hệ thống. + Xây dựng mô hình vật lý ngoài: mô hình vật lý ngoài mô tả hệ thống như những người sử dụng nhìn thấy. Mô hình này tạo thành tư liệu về hệ thống như nó đang tồn tại, nó cũng là công cụ để phân tích viên kiểm tra sự hiểu biết của mình về hệ thống với người sử dụng. Xây dựng một mô hình hệ thống cần phải có rất nhiều thông tin chi tiết. Cho dù là bao nhiêu thời gian dành cho phỏng vấn, quan sát và nghiên cứu tài liệu và làm việc cùng với người sử dụng thì vẫn cứ luôn tồn tại những câu hỏi mà phân tích viên chưa có câu trả lời. Chính vì vậy phân tích viên luôn luôn phải bám sát với người sử dụng và không được tự mình đưa ra câu trả lời mà phải lấy thông tin từ người sử dụng. + Xây dựng mô hình logic: mô hình logic sẽ được xây dựng từ mô hình vật lý ngoài và từ các dữ liệu thu thập được trước đây. Sơ đồ luồng dữ liệu và từ điển dữ liệu là tại liệu về hệ thống. Khi cần thiết thì sơ đồ cấu trúc dữ liệu (DSD) sẽ hoàn chỉnh tài liệu đã thu thập được. Cũng như mô hình vật lý ngoài thì mô hình logic mô tả hệ thống thực tại cho phép nhà phân tích hợp lệ hóa sự hiểu biết của mình về hệ thống với người sử dụng và là công cụ để xác định một số vấn đề của hệ thống cũng như nguyên nhân của chúng. Đưa ra chuẩn đoán và xác định các yếu tố giải pháp. Trong công đoạn này thì bao gồm ba công việc chính mà phân tích viên phải thực hiện đó là: + Đưa ra chuẩn đoán: công việc mà phân tích phải làm trong giai đoạn này không phải là đơn giản nhưng nó lại là một công đoạn rất quan trọng để biết được hệ thống đang phát triển có bị mắc các lỗi không? Phân tích viên chỉ nên đưa ra các chuẩn đoán mà không nên sửa chữa nó vì nó không nằm trong lĩnh vực chuyên môn của mình. Trong đại đa số các trường hợp nghiên cứu hệ thống, nguyên nhân của các vấn đề là hỗn hợp. Có một số trường hợp liên quan đến hệ thống thông tin, một số khác gắn liền với nhiều lĩnh vực, cả quản trị nhân lực cũng như quản trị tác nghiệp quản lý. Việc đưa ra chuẩn đoán là một hoạt động phức tạp đòi hỏi một cách tiếp cận chặt chẽ. Phân tích viên phải biết tận dụng mọi công cụ để thực hiện nhiệm vụ này. + Xác định mục tiêu mới của hệ thống: các nguyên nhân và các vấn đề của hệ thống đã được xác định thì phân tích viên sẽ tiến hành cùng với người sử dụng xác định mục tiêu của hệ thống mới hay hệ thống đã được sửa chữa. Mục đích chính của công việc này đó là hướng dẫn cho việc thiết kế hệ thống mới và đánh giá hệ thống mới sau khi được cài đặt. + Xác định các yếu tố của giải pháp: các mục tiêu của hệ thống mới gắn chặt với các vấn đề của hệ thống còn các yếu tố giải pháp lại gắn chặt với nguyên nhân của các vấn đề. Nếu thời gian trả lời của hệ thống là quá lâu vì vấn đề năng lự của máy tính thì yếu tố giải pháp trước nhất là phải nâng cao năng lực đó. Đánh giá lại tính khả thi. Sau khi các công đoạn trên hoàn thành thì ta đã có rất nhiều thông tin về hệ thống cũng như những nguyên nhân và giải pháp cho các vấn đề mắc phải của hệ thống. Trong công đoạn này thì mục đích chính vẫn là đánh giá tính khả thi trong tổ chức, tài chính, kỹ thuật và thời hạn. Đối với mỗi một yếu tố trong giải pháp thì phân tích viên phải xác định loại công nghệ cần có để thực thi giải pháp. Việc đánh giá lại tính khả thi của dự án được thực hiện bằng việc so sánh những thông tin đó với những ràng buộc về tổ chức, kỹ thuật, tài chính và thời hạn đã được xác định trước đây. Thay đổi đề xuất của dự án. Trong khi thực hiện đánh giá lại tính khả thi của dự án thì nhóm phân tích viên đã phác họa một đề xuất của dự án và đã được người sử dụng chấp nhận. Với những thông tin đã thu thập được qua các công đoạn trên và việc đánh giá lại tính khả thi của dự án thì chúng ta cần xem xét và sửa đổi lại để xuất của dự án. Chúng ta cần phải cố gắng cung cấp cho những người ra quyết định những thông tin và bức tranh rõ nhất có thể được về dự án, về nhiệm vụ phải thực hiện, về chi phí và về các ràng buộc về thời gian thực hiện hệ thống thông tin mới. Chuẩn bị và trình bày báo cáo phân tích chi tiết. Báo cáo chi tiết là một tài liệu rất quan trọng nó sẽ phục vụ cho việc ra quyết định tiếp tục hay ngừng dự án. Báo cáo chi tiết phải thể hiện được những điều căn bản mà nhóm phân tích đã tìm thấy được, nó không thể được thể hiện để đến khi người nghe không nắm rõ được ý nghĩa. Báo cáo phải được thể hiện rõ ràng và có thể đính kèm các trang phụ lục mô tả tình hình chi tiết hơn. c.Giai đoạn 3: Thiết kế logic Giai đoạn này nhằm xác định tất cả các thành phần logic của một hệ thống thông tin, cho phép loại bỏ được các vấn đề của hệ thống thực tế và đạt được những mục tiêu đã được thiết lập ở giai đoạn trước. Mô hình logic của hệ thống mới sẽ sản sinh ra (nội dung của Output), nội dung của cơ sở dữ liệu (các tệp, các quan hệ giữa các tệp), các xử lý và hợp thức hóa sẽ phải thực hiện (các xử lý) và các dữ liệu sẽ được nhập (các Input). Mô hình logic sẽ phải được những người sử dụng xem xét và chuẩn y. Thiết kế logic bao gồm những công đoạn sau: Thiết kế cơ sở dữ liệu. Thiết kế cơ sở dữ liệu là việc xác định yêu cầu thông tin của người sử dụng hệ thống thông tin mới. Công việc này rất phức tạp do đó cần phải có những kinh nghiệm trong thiết kế cơ sở dữ liệu thì mới có thể thiết kế cơ sở dữ liệu một cách chính xác được. Muốn thiết kế cơ sở dữ liệu chính xác thì phân tích viên phải xác định được phương pháp thiết kế hợp lý, nhưng mà trong thực tế thì không tồn tại một phương pháp nào thật sự hữu ích cho mọi hoàn cảnh. Những nguyên nhân để giải thích cho sự khó khăn về thiết kế cơ sở dữ liệu được chia thành bốn loại chính sau: + Đặc trưng của nhiệm vụ mà hệ thống thông tin phải trợ giúp. + Đặc trưng của hệ thống thông tin. + Đặc trưng của người sử dụng. + Đặc trưng của những người phát triển hệ thống. Trong thiết kế cơ sở dữ liệu thì việc xác định các yêu cầu của thông tin là hết sức quan trọng và có bốn cách thức để xác định yêu cầu thông tin: + Hỏi người sử dụng cần những thông tin gì? + Phương pháp đi từ hệ thống thông tin đang tồn tại. + Tổng hợp từ đặc trưng của nhiệm vụ mà hệ thống thông tin trợ giúp. + Phương pháp thực nghiệm. Thực tế thì khi thiết kế cơ sở dữ liệu sử dụng hai phương pháp tiếp cận phổ biến hiện nay đó là phương pháp mô hình hóa và phương pháp đi từ các đầu ra. Thiết kế xử lý. Công đoạn này là làm rõ thêm những quan hệ của các dữ liệu bằng những xử lý trong hệ thống thông tin trợ giúp. Thiết kế xử lý logic chỉ quan tâm đến các mô hình ngoài. Thiết kế các luồng dữ liệu vào. Từ những thông tin đầu vào mà ta đã thu thập được bằng các phương pháp và các dữ liệu về hệ thống. Chúng ta thiết kế các luồng dữ liệu vào nhằm cụ thể hóa các dữ liệu cho quá trình phát triển dự án được tiến hành theo đúng thời hạn cả về mặt kỹ thuật cũng như thời gian. Chỉnh sửa tài liệu cho mức logic. Mức logic là mức mà các quan hệ trong hệ thống đã được cụ thể hóa bằng các mô hình và thông tin về hệ thống cần được chỉnh sửa sao cho có thể diễn đạt được hết các khả năng của hệ thống mới. Hợp thức hóa mô hình logic. d.Giai đoạn 4: Đề xuất các phương án của giải pháp Mô hình logic của hệ thống mới mô tả cái mà hệ thống này sẽ làm. khi mô hình này được xác định và chuẩn y bởi người sử dụng, thì phân tích viên hoặc nhóm phân tích viên phải nghiêng về các phương tiện để thực hiên hệ thống này. Đó là việc xây dựng các phương ác khác nhau để cụ thể hóa mô hình logic. Mỗi một phương án là một phác họa của mô hình vật lý ngoài của hệ thống nhưng chưa phải là một mô tả chi tiết. Tất nhiên là người sử dụng sẽ thấy dễ dàng hơn khi lựa chọn dựa trên những mô hình vật lý ngoài được xây dụng chi tiết nhưng chi phí cho việc tạo ra chúng là rất lớn. Để giúp cho những người sử dụng lựa chọn giải pháp vật lý thỏa mãn tốt hơn các mục tiêu đã định ra trước đây, nhóm phân tích viên phải đánh giá các chi phí và lợi ích (hữu hình và vô hình) cả mỗi phương án và phải có những khuyến nghị cụ thể. Một báo cáo sẽ được trình lên những người sử dụng và một buổi trình bày sẽ được thực hiện. Những người sử dụng sẽ chọn lấy một phương án tỏ ra đáp ứng tốt nhất các yêu cầu của họ mà vẫn tôn trọng các ràng buộc của tổ chức. Sau đây là các công đoạn của giai đoạn đề xuất các phương án giải pháp: Xác định các ràng buộc tin học và ràng buộc tổ chức. Các ràng buộc của hệ thống là rất lớn và rất phức tạp, ta phải xác định được các ràng buộc đó nếu không xác định được thì hệ thống khó lòng tồn tại được. Trong thực tế thì có những điều đúng cho mô hình logic nhưng lại không đúng cho mô hình vật lý. Tất cả có các ràng buộc liên quan tới việc thiết kế hệ thống như sau: + Các ràng buộc có liên quan tới tổ chức. + Các ràng buộc về tin học. Xây dựng các phương án của giải pháp. Ở các công đoạn trước nhóm phân tích viên đã đưa ra các đề xuất cho việc phát triển hệ thống. Trong công đoạn này thì nhóm phân tích viên phải tìm được giải pháp phù hợp cho hệ thống thông tin và công đoạn này được bắt đầu từ các khâu sau: xác định biên giới cho phần tin học hóa, xác định cách thức xử lý. Đánh giá các phương án của giải pháp. Nhóm phân tích viên phải đánh giá các phương án của giải pháp trong khâu trước nhằm chọn ra phương án giải pháp tốt nhất cho hệ thống. Để đánh giá các phương án của giải pháp thì có các tiêu thức đánh giá sau: + Phân tích chi phí lợi ích. + Phân tích đa tiêu chuẩn. Chuẩn bị và trình bày báo cáo của giai đoạn đề xuất các phương án giải pháp. Sau mỗi công đoạn thì nhóm phân tích viên luôn luôn phải báo cáo lại công việc của mình. Trong giai đoạn này cũng không ngoại lệ, báo cáo của giai đoạn này tập trung vào các phương án đã được đề xuất và đưa ra những lý luận để có thể thuyết phục được người sử dụng chấp nhận phương án giải pháp đó. e.Giai đoạn 5: Thiết kế vật lý ngoài Giai đoạn này được tiến hành sau khi một phương án giải pháp được lựa chọn. Thiết kế vật lý bao gồm hai tài liệu kết quả cần có: trước hết là một tài liệu bao chứa tất cả các đặc trưng của hệ thống mới sẽ cần cho việc thực hiện kỹ thuật; và tiếp đó là tài liệu dành cho người sử dụng và nó mô tả cả phần thủ công và cả những giao diện với những phần tin học hóa. Những công đoạn chính của thiết kế vật lý ngoài là: Lập kế hoạch thiết kế vật lý ngoài. Phân tích viên trong giai đoạn này phải lựa chọn phương tiện, khuôn dạng của các dòng vào ra, xác định cách thức hội thoại với phần tin học hóa của hệ thống và các cách thức thực hiện các thủ tục thủ công. Phân bố thời gian và lập các danh mục sản phẩm. Thiết kế chi tiết các giao diện (vào/ra). Thiết kế chi tiết vào ra là một công việc quan trọng vì những nhận xét đánh giá về hệ thống thông tin của người sử dụng là chủ yếu dựa vào những yếu tố vào ra này. Công đoạn này cần phải thực hiện qua các bước: + Thiết kế vật lý cho các đầu ra: trong thiết kế này thì chúng ta cần lựa chọn vật mang tin, bố trí thông tin trên vật mang, thiết kế trang in ra, thiết kế ra trên màn hình. + Thiết kế vào: mục đích của việc thiết kế vào là thiết kế các thủ tục nhập dữ liệu có hiệu quả và giảm thiểu sai sót. Thiết kế vào bao gồm lựa chọn phương tiện, thiết kế khuôn dạng cho thông tin nhập. Thiết kế cách thức tương tác với phần tin học hóa. Một hệ thống thường phải thực hiện các nhiệm vụ khác nhau. Hệ thống cần phải được chỉ thị của người sử dụng thì mới có thể thực thi được, muốn như vậy thì cần phải thiết kế hệ thống sao cho khi tương tác với phần tin học hóa phải thật dễ dàng. Có bốn cách thức để thực hiện việc tương tác với hệ thống tin học hóa đó là: + Giao tác bằng tập hợp lệnh. + Giao tác bằng các phím trên bàn phím. + Giao tác qua thực đơn. + Giao tác dựa vào các biểu tượng. Thiết kế các thủ tục thủ công. Chuẩn bị và trình bày báo cáo về thiết kế vật lý ngoài. f.Giai đoạn 6: Triển khai kỹ thuật hệ thống Kết quả quan trọng nhất của giai đoạn thực hiện kỹ thuật là phần tin học hóa của hệ thống thông tin, có nghĩa là phần mềm. Những người chịu trách nhiệm về giai đoạn này phải cung cấp các tài liệu như các bản hướng dẫn sử dụng và thao tác cũng như các tài liệu mô tả về hệ thống. Các hoạt động chính của việc triển khai thực hiện kỹ thuật hệ thống là: Lập kế hoạch thực hiện kỹ thuật. Công việc quan trọng nhất của việc lập kế hoạch đó là việc lựa chọn công cụ. Công việc lựa chọn này liên quan đến việc thiết kế vật lý trong cũng như những hoạt động lập trình sau này. Việc chọn ngôn ngữ lập trình tùy thuộc vào tình hình thực tế của hệ thống. Một ứng dụng do một cán bộ không chuyên tin học thì rõ ràng là nên chọn ngôn ngữ thế hệ 4. Tuy nhiên những ứng dụng lớn thì cần phải có nhiều ngôn ngữ kết hợp và cần những nhà chuyên môn thực hiện. Thiết kế vật lý trong. Thiết kế vật lý trong có mục đích đảm bảo độ chính xác của thông tin và làm hệ thống mềm dẻo, ít chi phí. Có hai bộ phận cơ bản của thiết kế vật lý trong đó là: thiết kế cơ sở dữ liệu vật lý trong, thiết kế vật lý trong các xử lý. Lập trình. Là quá trình chuyển đổi các yêu cầu về đặc tả thiết kế vật lý của các nhà phân tích thành phần mềm máy tính do các lập trình viên đảm nhận. Khi tiến trình lập trình bắt đầu thì cũng có thể tiến hành tiến trình thử nghiệm và có thể tiến hành chúng song song với nhau. Thử nghiệm hệ thống. Là quá trình tìm lỗi của hệ thống, nó là một đánh giá cuối cùng về các đặc tả, thiết kế và mã hóa. Mục đích của việc thử nghiệm chương trình là nhằm bảo đảm rằng tất cả các thành phần của chương trình đều được triển khai và thiết kế đúng với các yêu cầu đã được đặt ra. Chuẩn bị tài liệu. Đây là công đoạn cần thiết trước khi các phân tích viên kết thúc một dự án tin học hóa để bắt đầu chuyển sang một dự án khác, nhằm tập hợp các thông tin quan trọng mà họ có được về hệ thống trong quá trình phát triển và triển khai hệ thống. Các loại tài liệu cần có trong quá trình này đó là “tài liệu hệ thống” và “tài liệu hương dẫn sử dụng”. g.Giai đoạn 7: Cài đặt và khai thác Cài đặt hệ thống là pha trong đó việc chuyển từ hệ thống cũ sang hệ thống mới được thực hiện. Để việc chuyển đổi này được thực hiện với những va chạm ít nhất, cần phải lập kế hoạch một cách cẩn thận. Giai đoạn này bao gồm các công đoạn: Lập kế hoạch cài đặt. Trước khi tiến hành cài đặt hệ thống thì cần phải tiến hành lập kế hoạch chi tiết. Có thể áp dụng các phương pháp cài đặt sau đây: cài đặt trực tiếp, cài đặt song song, cài đặt thí điểm cục bộ. + Cài đặt trực tiếp: theo phương pháp này thì người ta dừng toàn bộ hệ thống cũ và thay thế bằng hệ thống mới. + Cài đặt song song: theo phương pháp này thì cả hai hệ thống cũ và mới cùng tồn tại song song cho tới khi có thể quyết định dừng hệ thống cũ. + Cài đặt thí điểm cục bộ: theo phương pháp này thì việc cài đặt chỉ diễn ra trên phạm vi hẹp có thể là một hoặc một vài bộ phận. Chuyển đổi. Mỗi chiến lược chuyển đổi hệ thống chỉ bao gồm việc chuyển đổi phần mềm mà cả chuyển đổi dữ liệu, phần cứng, tài liệu, các phương pháp làm việc, các mô tả công việc, các phương tiện làm việcm các tài liệu đào tạo, các biểu mẫu nghiệp vụ … Khai thác và bảo trì. Khi đưa hệ thống vào hoạt động thì đây là giai đoạn chiếm chi phí lớn nhất trong chu kỳ sống của hệ thống đối với phần lớn các tổ chức. Quá trình này có thể bắt đầu ngay sau khi hệ thống được cài đặt. Sau khi hệ thống được cài đặt thì vấn đề bảo trì được đặt ra. Quá trình này là quá trình cuối cùng trong chu kỳ sống của hệ thống và nó cũng là mắt xích cuối cùng sẽ dẫn trở lại mắt xích ban đầu để bắt đàu một chu kỳ mới. Đánh giá. Đánh giá sau dự án chủ yếu là việc so sánh thời gian thực sự để có được hệ thống mới với thời gian dự kiến và xác định xem dự án này có tuân thủ ngân sách đã xác định hay không? Đánh giá chất lượng công việc giao cho các thành viên có hoàn thành tốt hay không, đánh giá quản lý dự án chủ yếu là việc xem dự án có được tiến hành tuân thủ về thời gian đã định hay không? Đánh giá về hệ thống là việc xem xét xem hệ thống có đạt được các mục tiêu đã đề ra hay không. Điều này không thể thực hiện ngay sau khi cài đặt mà cần phải sau một thời gian khai thác nhất định. 2. Mô hình IFD Sơ đồ luồng thông tin ( Information Flow Diagram) là một trong hai công cụ thường dùng để phân tích và thiết kế hệ thống thông tin, nó đượ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ý và 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 như sau: -Xử lý: -Kho lưu trữ dữ liệu: -Dòng thông tin: -Điều khiển: Ví dụ: Sơ đồ luồng thông tin thể hiện hoạt động chấm thi, nhập điểm vào máy tính và in bảng thông báo điểm cho sinh viên cuối mỗi kì học. Sơ đồ luồng thông tin trong hệ thống chấm, nhập và lên điểm Các phích vật lý là những mô tả chi tiết hơn bằng lời cho các đối tượng được biểu diễn trên sơ đồ. Rất nhiều thông tin không thể hiện sơ đồ như hình dạng (Format) 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ích vật lý này. Co 3 loại phích : phích luồng thông thin, phích kho dữ liệu, phích xử lý. Loại thứ nhất: phích luồng thông tin có mẫu: Loại thứ hai: Phích kho chứa dữ liệu Loại thứ 3: Phích xử lý Mối liên hệ giữa IFD và các phích vật lý của từ điển hệ thống 3.Mô hình 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 DFD 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. Các ký pháp cơ bản của ngôn ngữ DFD Ví dụ: Sơ đồ DFD mức 0 : tính và lên bảng điểm cho sinh viên Các mức của DFD Sơ đồ ngữ cảnh ( Context Diagram) 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 chi tiết, mà mô tả sao cho một lần nhìn là có thể nhận ra nội dung chính của hệ thống. Để cho sơ đồ ngữ cảnh sáng sủa, dễ nhìn có thể bỏ qua các kho dữ liệu; bỏ qua các xử lý cập nhật. Sơ đồ khung cảnh còn được gọi là sơ đồ mức 0. Ví dụ: Sơ đò khung cảnh hệ thống tính lương của một công ty nước ngoài như sau: Sơ đồ ngữ cảnh hệ thống tính lươ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ơ đồ khung cảnh, người ta phân ra thành sơ đồ mức 0,mức một, mức hai… Ví dụ sau là sơ đồ DFD mức 0 của hệ thống tính lương. Sau mức này nếu thấy cần thiết người ta có thể phân rã thành mức 1, mức hai nếu thấy cần thiết. Sơ đồ DFD mức 0 hệ thống tính lương Các phích logic Giống như phích vật lý, phích logic hoàn chỉnh tài liệu cho hệ thống. Có 5 loại phic 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. -Mẫu phíc xử lý logic -Mẫu phíc luồng dữ liệu -Mẫu phíc phần tử thông tin -Mẫu phíc kho dữ liệu -Mẫu phíc tệp dữ liệu Ngôn ngữ cấu trúc dùng để mô tả xử lý logic trên phích xử lý Ngôn ngữ này chứa các động từ như đọc, ghi, sắp xếp, chuyển sang, trộn, cộng, trừ, nhân, chia, hãy thực hiện…Các phép toán số học và logic thường dùng. Ngôn ngữ cũng dùng các danh từ được dùng để mô tả dữ liệu trong từ điển hệ thống. Ngôn ngữ cấu trúc không dùng các trạng từ và tính từ. Ngôn ngữ cấu trúc chỉ dùng các cấu trúc sau để viết các câu: 1.Tiếp theo (Sequence) 2.Nếu …thì…(If…Then) 3.Nếu..thì..Nếu không …Thì (If…Then…Else…End if) 4.Trong khi mà (While…) 5.Cho đến khi (Do..Until) 6.Câu phức hợp bắt đầu kết thúc (Begin…End) 7.Theo các trường hợp (Do…Case) Ngôn ngữ cấu trúc tiếng Anh cũng có thể dùng khi thiết kế. Ngôn ngữ này chứa các động từ như: Read, Write, Sort, Move, Merge, Add, Substract, Multily, Division, Do… Các phép toán số học và logic thường dùng. Ngôn ngữ cũng dùng các danh từ được dùng để mô tả dữ liệu trong từ điển hệ thống. Ngôn ngữ cấu trúc không dùng các trạng từ và tính từ. Ví dụ 1 : Đọc số lượng trong kho Chọn trường hợp: Trường hợp 1: Nếu số lượng trong kho lớn hơn hạn mức dự trữ Thực hiện: Không làm gì Trường hợp 2: Nếu số lượng trong kho nhỏ hơn hạn mức lưu kho Thực hiện : Tạo một đơn đặt hàng Trường hợp 3: Hết hàng trong kho Thực hiện: Đặt hàng khẩn cấp Hết trường hợp Một số quy ước quy tắc liên quan đến DFD Mỗi luồng dữ liệu phải có một tên trừ luồng xử lý và kho dữ liệu Dữ liệu chứa trên hai vật mang khác nhau nhưng luôn đi đôi cùng nhau thì có thể tạo ra một luồng duy nhất. Xử lý luôn phải được đánh mã số. Vẽ lại các kho dữ liệu để các luồng dữ liệu không cắt nhau. Tên cho xử lý phải là một động từ. 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 từ một xử lý. Đối với việc phân rã DFD 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 chỉ chiếm một trang giấy thì không phân rã tiếp. Cố gắng chỉ để tối đa 7 xử lý trên một trang DFD. Tất cả các xử lý trên một trang DFD phải thuộc cùng một mức phân rã. Luồng vào của một DFD mức cao phải là luồng vào của một DFD mức con nào đó. Luồng ra tới đích của một DFD phải là luồng ra của một DFD mức cao hơn nào đó. Đây gọi là nguyên tắc cân đối của DFD. Xử lý không phân ra tiếp thêm thì được gọi là xử lý nguyên thủy. Mỗi xử lý nguyên thủy phải có một phích logic trong từ điển hệ thống. Sơ đồ luồng thông tin và sơ đồ luồng dữ liệu là hai công cụ thường dùng nhất để phân tích và thiết kế HTTT. Chúng thể hiện hai mức mô hình và hai góc nhìn động và tĩnh về hệ thống. Những công cụ này được phần lớn các nhà phân tích thiết kế sử dụng bất luận là quy mô dự án lớn hay nhỏ hay kích thước hệ thống lớn hay nhỏ. Ngày nay một số công cụ được tin học hóa, vì vậy có nhiều phần mềm cho phép xây dựng sơ đồ luồng dữ liệu của một hệ thống. Một số phần mềm tinh tế hơn cho tạo ra cả sơ đồ luồng dữ liệu và từ điển hệ thống. Tuy nhiên các công cụ chỉ giúp các nhà phân tích tạo nhanh hơn các sơ đồ hoặc mối liên quan giữa sơ đồ và các yếu tố trong từ điển, chứ nó không thực hiện thay công việc của nhà phân tích và việc phát hiện lỗi trên sơ đồ vẫn thuộc trách nhiệm nhà phân tích. Đông Tĩnh Vật lý IFD ( Information Flow Diagram) – Sơ đồ luồn thông tin SD ( System Dictionary) Từ điển hệ thống Các phích vật lý. Logic DFD (Data Flow Diagram) Sơ đồ luồng dữ liệu. SD (System Dictionary) Từ điển hệ thống Các phích logic. Các công cụ phân tích và thiết kế hệ th._..ten_tinh="" M_moi=.T. ENDIF ENDIF PUSH KEY CLEAR DO FORM (p_screen+'dmTinh-f3') NAME _form LINKED &&_form.show(1) &&HIEN THI FORM O CHE DO MODAL POP KEY RETURN ************************************************************* PROCEDURE Nhan_Huy PARAMETERS M_nhan_huy IF M_moi==.F. IF M_nhan_huy=.T. GO rec_no GATHER MEMVAR FLUSH _form="" ENDIF ELSE IF M_nhan_huy=.T. APPEND BLANK GATHER MEMVAR FLUSH _form="" ENDIF ENDIF RETURN **************** Kiem tra *************************************** PROCEDURE Kiem_tra IF EMPTY(m.ma_tinh) MESSAGEBOX("Ban phai vao ma tinh") _form.txtma_tinh.setfocus RETURN ENDIF IF EMPTY(m.ten_tinh) MESSAGEBOX("Ban phai vao ten tinh") _form.txtten_tinh.setfocus RETURN ENDIF LOCATE FOR ALLTRIM(ma_tinh)=ALLTRIM(m.ma_tinh) IF FOUND() mESSAGEBOX("Ma nay da co, hay chon ma khac") _form.txtma_tinh.setfocus RETURN ENDIF *!* IF NOT LEN(ALLTRIM(m.ma_tinh ))==2 *!* MESSAGEBOX("Ma nha phai co hai chu so") *!* _form.txtma_tinh.setfocus *!* RETURN *!* ENDIF DO Nhan_huy WITH .T. RETURN ****************************************************************** PROCEDURE xoa PRIVATE _rec_no SCATTER MEMVAR _rec_no=RECNO() IF !eof() IF Messagebox(m_Suredele, 36+256, M_TencTy) = 6 GO _rec_no GATHER MEMVAR FLUSH DELETE PACK DO batdau ENDIF ENDIF ENDPROC PROCEDURE form_init PARAMETERS oForm,cCaption oForm.setall('FontName',M_font_name) oForm.Caption=cCaption ENDPROC do_dung.prg PUBLIC m.Nhan_thang m.Nhan_thang=.F. DO FORM P_screen+'Chon_thang' IF M.nhan_thang=.F. RETURN ENDIF IF !USED('do_dung') SELECT 0 USE P_data+'do_dung' ALIAS do_dung SET ORDER TO sap_xep ELSE SELECT 0 SELECT do_dung ENDIF SCATTER MEMVAR m.thang=M_thang_QL m.nam=M_Nam_QL DO FORM P_screen+'do_dung' NAME _form1 PROCEDURE V_nhan SELECT do_dung LOCATE FOR ALLTRIM(ma_phong)=ALLTRIM(m.ma_phong) IF FOUND() GATHER MEMVAR replace nam WITH ALLTRIM(M_nam_QL),thang WITH ALLTRIM(M_thang_QL) IF M_IsCheck='T' replace da_nhan WITH 'R' ELSE replace da_nhan WITH 'C' ENDIF ENDIF ENDPROC DS_user DO FORM P_screen+'DS_user' form_init PROCEDURE form_init PARAMETERS oForm,cCaption oForm.setall('FontName',M_font_name) oForm.setall('FontSize',M_font_size) oForm.Caption=cCaption ENDPROC inivar if !used('inivar') select 0 USE (p_system)+'inivar' alias inivar SET SAFETY OFF INDEX ON stt TO stt set order to stt ELSE select 0 select inivar set order to stt ENDIF SCAN IF NOT EMPTY(Name) bien=inivar.name kieu=alltrim(inivar.type) giatri=ALLTRIM(value) *giatri=inivar.value1 PUBLIC (bien) if kieu=='C' &&neu kieu bien la char STORE giatri TO (bien) ENDIF if kieu=='N' &&neu kieu bien la nummeric STORE VAL(giatri) TO (bien) ENDIF if kieu=='D' &&neu kieu bien la datatime STORE ctod(giatri) TO (bien) ENDIF if kieu=='Y' &&neu kieu bien la currency STORE val(substr(giatri,1)) TO (bien) ENDIF if kieu=='T' &&neu kieu bien la kieu datetime STORE ctot(alltrim(giatri)) TO (bien) ENDIF if kieu=='L' &&neu kieu bien la kieu logical STORE alltrim(giatri) TO (bien) ENDIF ****************************** ENDIF ENDSCAN ky_luat ************** ************************************ IF !USED('ky_luat') SELECT 0 USE p_data+'ky_luat' ALIAS ky_luat ELSE SELECT ky_luat ENDIF INDEX ON stt TO order_kl SET ORDER TO order_kl ************************************************** PRIVATE M_moi,_rec_no,m_nhan, m_huy,_form,objBrow PUBLIC lcFileName ********************************************************************* lcFileName="" M_moi=.F. DO batdau PROCEDURE batdau ON KEY LABEL F3 do _moi_sua with [S] ON KEY LABEL F4 do _moi_sua with [M] ON KEY LABEL F8 do xoa ON KEY LABEL f7 do (P_prog+"report_kl") SELECT ky_luat SCATTER MEMVAR BROWSE NAME oBrowse ; NOAPPEND NODELETE NOMODIFY NOWAIT NOMENU ; TITLE "Danh sach sinh vien ky luat: F3-Sua, F4-Them moi, Ctrl+F-Tim kiem, F7-Bao cao, F8-Xoa, ESC-Thoat" ; FONT M_Font_name, M_font_Size; WINDOW M_WinBrw ; when Change_Color_Of_Browse(RECNO(),,oBrowse) DO HookObjectBrowse WITH oBrowse IN P_prog+'S_lib' BROWSE LAST FOR ALLTRIM(Ma_nha)=ALLTRIM(M_nha_QL) ON KEY LABEL F3 ON KEY LABEL F4 ON KEY LABEL F8 ON KEY LABEL f7 IF USED('ky_luat') USE IN ky_luat ENDIF ENDPROC **------------------------------------------------------- PROCEDURE _moi_sua PARAMETERS _moi_sua _oldSelectKL=SELECT() _oldRecnoKL=RECNO() SELECT ky_luat IF _moi_sua==[S] _rec_no=RECNO() IF _rec_noRECCOUNT('ky_luat') RETURN GO _rec_no ENDIF GO _rec_no SCATTER MEMVAR M_moi=.F. ELSE IF _moi_sua=[M] SCATTER MEMVAR BLANK M_moi=.T. ENDIF ENDIF PUSH KEY CLEAR DO FORM (p_screen+'ky_luat') NAME _form LINKED POP KEY SELECT (_oldSelectKL) RETURN ************************************************************* PROCEDURE Nhan_Huy PARAMETERS M_nhan_huy SELECT ky_luat IF M_moi==.F. IF EMPTY(ALLTRIM(m.ma_phong)) OR EMPTY(ALLTRIM(m.ma_nha)) OR EMPTY(ALLTRIM(m.ma_sv)) RETURN ENDIF IF M_nhan_huy=.T. GO _rec_no GATHER MEMVAR FLUSH _form="" ENDIF ELSE IF EMPTY(ALLTRIM(m.ma_phong)) OR EMPTY(ALLTRIM(m.ma_nha)) OR EMPTY(ALLTRIM(m.ma_sv)) RETURN ENDIF CALCULATE MAX(stt) TO m.stt m.stt=m.stt+1 m.ngay_thang=DATE() IF M_nhan_huy=.T. GO BOTTOM APPEND BLANK GATHER MEMVAR FLUSH _form="" ENDIF ENDIF lcFileName="" RETURN **************** Kiem tra *************************************** PROCEDURE xoa PRIVATE _rec_no SCATTER MEMVAR _rec_no=RECNO() IF RECCOUNT()<=0 MESSAGEBOX("Khong con ban ghi nao de xoa") RETURN ELSE IF Messagebox(m_Suredele, 36+256, M_TencTy) = 6 GO _rec_no IF (RECCOUNT()>0) DELETE ELSE ENDIF GATHER MEMVAR FLUSH pacK DO batdau ENDIF ENDIF ENDPROC *********************************** login ***************************mo bang*************************** if !USED('userinfor') select 0 use p_system + "userinfor" alias userinfor ORDER user_id ENDIF ************************************************************** DO P_prog+"mahoa_pass" SELECT userinfor m.user_id="" m.Pass="" SELECT DISTINCT Ma_nha from P_Cod+'dmNha' INTO TABLE dmNhaTmp USE IN dmnha SELECT dmNhaTmp DO FORM P_Screen+"Dang_nhap" M_Skey=M_nha_QL **Kiem tra neu nguoi dung click chon 'Thoat' tren form dang nhap IF ALLTRIM(M_thoat)='T' ON SHUTDOWN QUIT RETURN ENDIF *____________________________________________________________^-^ M.user_id=ALLTRIM(M.user_id) SELECT userinfor IF SEEK(M.user_id) AND !EMPTY(m.user_id) IF ALLTRIM(mahoa(ALLTRIM(m.pass)))==ALLTRIM(userinfor.pass) OK=.T. if userinfor.Is_Admin==.F. STORE ALLTRIM(userinfor.right) TO M_menu_id endif ELSE OK=.F. USE IN userinform ENDIF ENDIF USE IN dmNhaTMP DELETE FILE dmNhaTMP.DBF logout DO End IN (P_prog+'start') *CLEAR ALL _shell="DO ..\WS\C.fxp" _shell="DO ..\WS\C.fxp" mahoa_pass FUNCTION MAHOA *-------------------------------------- PARAMETERS cMatma PRIVATE i,j j=0 FOR i=1 TO LEN(cMatma) j=j+ASC(SUBSTR(cMatma,i,1))*(i+1) ENDFOR cMatma=ALLTRIM(STR(j,LEN(cMatma)+3,0)) RETURN cMatma mainmenu if !used('command') SELECT 0 use P_system + "command.dbf" alias command ORDER menuid0 NOUPDATE endif ******************************************************* SET SYSMENU ON DO HideToolBar select Command _menu_idOld0="" *SET FILTER TO ALLTRIM(menuid)$ ALLTRIM(M_menu_id) IN command i=0 SCAN _menu_idOld0=Alltrim(command.Menuid0) IF empty(_menu_idOld0) ** Dinh nghi menu_lon menu_name='p'+alltrim(menuid) IF m_lan'1' DEFINE PAD &menu_name OF _mSysmenu PROMPT alltrim(bar) ELSE DEFINE PAD &menu_name OF _mSysmenu PROMPT alltrim(bar2) endif *________________________________________________________________________________________^-^ ON PAD &menu_name OF _msysmenu ACTIVATE POPUP &menu_name define popup &menu_name MARGIN RELATIVE COLOR SCHEME 4 *________________________________________________________________________________________- ELSE i=i+1 dieukien=ALLTRIM('M_'+ALLTRIM(STR(i))) PUBLIC (dieukien)&& dung de kiem tra xem nguoi dung hien tai co duoc phep truy cap vao bar nay hay khong if userinfor.Is_Admin==.F. STORE (ALLTRIM(menuid0)$ ALLTRIM(M_menu_id)) to (dieukien) else store .T. to (dieukien) endif IF m_lan'1' define bar i of &menu_name prompt alltrim(bar) PICTURE ALLTRIM(command.images) FONT M_font_name,M_font_size; SKIP FOR !(&dieukien) ELSE define bar i of &menu_name prompt alltrim(bar2) PICTURE ALLTRIM(command.images) FONT M_font_name,M_font_size; SKIP for !(&dieukien) ENDIF tt=alltrim(pro) ON Selection bar i OF &menu_name &tt ENDIF ENDSCAN PROCEDURE HideToolBar *-- Releases all Visual FoxPro toolbars LOCAL i TB_FORMDESIGNER_LOC = "Form Designer" TB_STANDARD_LOC = "Standard" TB_LAYOUT_LOC = "Layout" TB_QUERY_LOC = "Query Designer" TB_VIEWDESIGNER_LOC = "View Designer" TB_COLORPALETTE_LOC = "Color Palette" TB_FORMCONTROLS_LOC = "Form Controls" TB_DATADESIGNER_LOC = "Database Designer" TB_REPODESIGNER_LOC = "Report Designer" TB_REPOCONTROLS_LOC = "Report Controls" TB_PRINTPREVIEW_LOC = "Print Preview" WIN_COMMAND_LOC = "Command" && Command Window WIN_PROJECT_MAN = "Project Manager" DIMENSION aToolBars (13,2) aToolBars(1,1) = TB_FORMDESIGNER_LOC aToolBars(2,1) = TB_STANDARD_LOC aToolBars(3,1) = TB_LAYOUT_LOC aToolBars(4,1) = TB_QUERY_LOC aToolBars(5,1) = TB_VIEWDESIGNER_LOC aToolBars(6,1) = TB_COLORPALETTE_LOC aToolBars(7,1) = TB_FORMCONTROLS_LOC aToolBars(8,1) = TB_DATADESIGNER_LOC aToolBars(9,1) = TB_REPODESIGNER_LOC aToolBars(10,1) = TB_REPOCONTROLS_LOC aToolBars(11,1) = TB_PRINTPREVIEW_LOC aToolBars(12,1) = WIN_COMMAND_LOC aToolBars(13,1) = WIN_PROJECT_MAN FOR i = 1 TO ALEN(aToolBars, 1) aToolBars(i,2) = WVISIBLE(aToolBars(i,1)) IF aToolBars(i,2) HIDE WINDOW (aToolBars(i,1)) ENDIF ENDFOR RELEASE PAD _MTable OF _MSYSMENU RELEASE PAD _MEdit OF _MSYSMENU RELEASE PAD _MFile OF _MSYSMENU RELEASE PAD _MView OF _MSYSMENU RELEASE PAD _MSm_WINDO OF _MSYSMENU RELEASE PAD _MSm_FORMAT OF _MSYSMENU RELEASE PAD _MSm_TOOLS OF _MSYSMENU RELEASE PAD _MSm_PROG OF _MSYSMENU RELEASE PAD _MSm_SYSTM OF _MSYSMENU RELEASE PAD _MSm_TEXT OF _MSYSMENU ENDPROC NODEPRG procedure Fill_node(oForm,oNode,T_F) PRIVATE _oForm,_oNode,_T_F _oForm=oForm _oNode=oNode _T_F=T_F IF !Isnull(_oNode.child) THEN _oNode.checked=_T_F _oNode=_oNode.Child DO WHILE !ISNULL(_oNode) _oNode.checked=_T_F Fill_Node (_oForm,_oNode,_T_F) _oNode=_oNode.Next ENDDO ELSE _oNode.checked=_T_F ENDIF Endpro Options M_nhan_huy=.F. IF !USED('inivar') USE P_System+'inivar' ALIAS inivar INDEX ON Stt TO stt SET ORDER TO stt ELSE SELECT inivar ENDIF DELETE ALL FOR EMPTY(Diengiai) GO TOP SCATTER MEMVAR DO FORM (P_screen+'Options') USE IN inivar phan_quyen IF M_regOCX='F' WAIT WINDOW "Dang dang ki OCX cho chuc nang nay..." TIMEOUT 2 RUN /n REGSVR32 MSComctl.ocx M_regOCX='T' ENDIF DO FORM P_Screen+'Phan_quyen' RETURN select bar,menuid, menuid0 ; from P_system+"tblcommand" ; into curs phanquyen ; where empty(alltrim(menuid0)) order by menuid SELECT phanquyen _NumArray = RECCOUNT() _GT1 = "" _GT = "" DIMENSION Arraymenuid(2,_NumArray) i = 0 SCAN i = i + 1 IF i = 1 _GT = ALLTRIM(phanquyen.Bar) _GT1 = ALLTRIM(phanquyen.menuid) ENDIF Arraymenuid(1,i) = ALLTRIM(phanquyen.bar) Arraymenuid(2,i) = ALLTRIM(phanquyen.menuid) ENDSCAN select bar,menuid, menuid0,1 AS Quyen ; from P_system+"tblcommand" ; INTo TABLE ("C:\phanquyen1") ; where alltrim(menuid) = _GT1 AND !EMPTY(Menuid0); order by menuid,menuid0 REPL ALL Quyen WITH IIF(ALLTRIM(Menuid0) $ M_menu_id,1,0) DO FORM P_Screen+"Phanquyen" USE IN phanquyen report_kl push key clear if !used("ky_luat") oldSelect=select() oldRecno=recno() do usedTBL with "../data/","ky_luat" INDEX ON stt TO order_kl SET ORDER TO order_kl SELECT * from ky_luat WHERE ALLTRIM(ma_nha)=ALLTRIM(M_nha_QL) ORDER BY stt INTO TABLE ky_luatTMPrp SELECT ky_luatTMPrp INDEX ON stt TO order_klTMP SET ORDER TO order_klTMP REPORT FORM (P_Repo+"ky_luat") preview USE IN ky_luat SELECT (oldSelect) if oldRecno0 go oldRecno endif USE IN ky_luatTMPrp DELETE FILE order_klTMP.idx ELSE oldSelect=select() oldRecno=recno() SELECT * from ky_luat WHERE ALLTRIM(ma_nha)=ALLTRIM(M_nha_QL) ORDER BY stt INTO TABLE ky_luatTMPrp SELECT ky_luatTMPrp INDEX ON stt TO order_klTMP SET ORDER TO order_klTMP SET ORDER TO order_klTMP report form (P_Repo+"ky_luat") preview USE IN ky_luatTMPrp DELETE FILE order_klTMP.idx SELECT (oldSelect) if oldRecno0 go oldRecno endif ENDIF POP KEY report_sv push key clear if !used("sinh_vien") oldSelect=select() oldRecno=recno() do usedTBL with "../data/","sinh_vien" INDEX ON nam+Ma_sv+gioi_tinh+khoa+nganh+lop+ma_phong+ma_nha TO order_sv SET ORDER TO order_sv scatter memvar report form (P_Repo+"sinh_vien") preview use in sinh_vien select (oldSelect) if oldRecno0 go oldRecno endif else oldSelect=select() oldRecno=recno() select sinh_vien INDEX ON nam+Ma_sv+gioi_tinh+khoa+nganh+lop+ma_phong+ma_nha TO order_sv SET ORDER TO order_sv scatter memvar report form (P_Repo+"sinh_vien") preview select (oldSelect) if oldRecno0 go oldRecno endif endif pop key report_td push key clear if !used("tien_dien") oldSelect=select() oldRecno=recno() do usedTBL with "../data/","tien_dien" INDEX ON nam+thang+ma_phong+ma_nha TO order_td SET ORDER TO order_td SELECT DISTINCT * from tien_dien WHERE ALLTRIM(thang)=ALLTRIM(M_thang_QL) AND ALLTRIM(ma_nha)=ALLTRIM(M_nha_QL) AND ALLTRIM(nam)=ALLTRIM(M_nam_QL) ORDER BY nam,thang,ma_phong INTO TABLE tien_dienTMPrp SELECT tien_dienTMPrp INDEX ON ALLTRIM(nam)+ALLTRIM(thang)+ma_phong+ma_nha TO order_tdTMP SET ORDER TO order_tdTMP SCATTER MEMVAR REPORT FORM (P_Repo+"tien_dien") preview USE IN tien_dien SELECT (oldSelect) if oldRecno0 go oldRecno endif USE IN tien_dienTMPrp DELETE FILE order_tdTMP.idx ELSE oldSelect=select() oldRecno=recno() SELECT DISTINCT * from tien_dien WHERE ALLTRIM(thang)=ALLTRIM(M_thang_QL) AND ALLTRIM(ma_nha)=ALLTRIM(M_nha_QL) AND ALLTRIM(nam)=ALLTRIM(M_nam_QL) ORDER BY nam,thang,ma_phong INTO TABLE tien_dienTMPrp SELECT tien_dienTMPrp INDEX ON ALLTRIM(nam)+ALLTRIM(thang)+ma_phong+ma_nha TO order_tdTMP SET ORDER TO order_tdTMP SET ORDER TO order_tdTMP scatter memvar report form (P_Repo+"tien_dien") preview USE IN tien_dienTMPrp DELETE FILE order_tdTMP.idx SELECT (oldSelect) if oldRecno0 go oldRecno endif ENDIF POP KEY S_lib &&_____________________ Brow lai Table &&_____________________ && PROCEDURE HookObjectBrowse PARAMETERS oBrwTbl PRIVATE cControlSource oBrwTbl.Tag = ORDER() oBrwTbl.Comment = FILTER() oBrwTbl.DeleteMark = .F. oBrwTbl.RecordMark = .F. FOR i =1 TO oBrwTbl.ColumnCount WITH oBrwTbl.Columns(i) .BackColor = RGB(255, 255, 255) cCaption = .Header1.Caption .Header1.forecolor=16777215 .Header1.Backcolor=128 oBrwTbl.top=_screen.top-40 oBrwTbl.left=_screen.Left oBrwTbl.height=_screen.Height-10 oBrwTbl.width=_screen.Width ENDWITH ENDFOR IF oBrwTbl.Partition > 0 oBrwTbl.Panellink = .F. oBrwTbl.Panel = 0 oBrwTbl.ScrollBars = 0 oBrwTbl.Panel = 1 oBrwTbl.DeleteMark = .F. oBrwTbl.RecordMark = .F. oBrwTbl.Panellink = .T. oBrwTbl.Partition = oBrwTbl.Partition - 36 ENDIF oBrwTbl.gridlinecolor=12632235 oBrwTbl.forecolor=16711680 ENDPROC &&_____________________ Brow lai Table &&_____________________ && PROCEDURE BrowTable PARAMETERS tblTable,priKey,_fieldName,_path _oldSelect=SELECT() _oldRecno=RECNO() tmp= '&tblTable' pathTMP='&_path' IF !USED(tmp) SELECT 0 USE &pathTMP&tmp ALIAS &tblTable ELSE SELECT 0 SELECT &tblTable ENDIF GO RECNO() SCATTER MEMVAR ON KEY LABEL enter do Takerecord ON KEY LABEL ESC do TakeRecord BROWSE NOWAIT NAME oBrowse1; TITLE "Bang danh sach sinh vien trong KTX: F3-Sua, F4-Them moi, Ctrl+F-Tim kiem, F8-Xoa, ESC-Thoat" ; FONT M_Font_name, M_font_Size; WINDOW M_WinBrw DO HookObjectBrowse WITH oBrowse1 IN P_prog+'s_lib' BROWSE LAST ON KEY LABEL ESC ON KEY LABEL ENTER SELECT (_oldSelect) IF _oldRecno<=RECCOUNT() GO _oldRecno ENDIF _oldSelect='' _oldRecno=0 ENDPROC PROCEDURE takeRecord PUBLIC _m_ma PUBLIC _m_ten PUBLIC _m_ho_dem IF RECCOUNT()>0 _recno=RECNO() SCATTER MEMVAR GO _recno _m_ma=&PriKey _m_ten=&_fieldName _m_ten=ALLTRIM(_m_ten)+" " +ALLTRIM(m.ten) ENDIF USE IN &tblTable ENDPROC &&_____________________ Mo mot TABLE _______________________&& PROCEDURE UsedTBL PARAMETERS _path,tblTable &&Tham so duong dan va ten bang( tat ca deu nam trong ngoac nhay) tmp= '&tblTable' pathTMP='&_path' IF !USED(tmp) SELECT 0 USE &pathTMP&tmp ALIAS &tblTable ELSE SELECT 0 SELECT &tblTable ENDIF ENDPROC &&_____________________ Thiet lap thuoc tinh form _______________________&& PROCEDURE form_init PARAMETERS oForm,cCaption oForm.setall('FontName',M_font_name) oForm.setall('FontSize',M_font_size) oForm.Caption=cCaption oForm.setall('SpecialEffect',1,'Textbox') oForm.setall('BorderColor',RGB(0,128,255),'Textbox') oForm.setall('BorderColor',RGB(0,128,255),'Combobox') ENDPROC PROCEDURE BrowTableSV PARAMETERS tblTable,priKey,_fieldName,_path _oldSelect=SELECT() _oldRecno=RECNO() tmp= '&tblTable' pathTMP='&_path' IF !USED(tmp) SELECT 0 USE &pathTMP&tmp ALIAS &tblTable ELSE SELECT 0 SELECT &tblTable ENDIF GO RECNO() ON KEY LABEL enter do TakerecordSV ON KEY LABEL ESC do TakeRecordSV BROWSE NOWAIT NAME oBrowse1; TITLE "Bang danh sach sinh vien trong KTX: F3-Sua, F4-Them moi, Ctrl+F-Tim kiem, F8-Xoa, ESC-Thoat" ; FONT M_Font_name, M_font_Size; WINDOW M_WinBrw DO HookObjectBrowse WITH oBrowse1 IN P_prog+'s_lib' BROWSE LAST FOR &M_skey ON KEY LABEL ESC ON KEY LABEL ENTER SELECT (_oldSelect) IF _oldRecno<=RECCOUNT() GO _oldRecno ENDIF _oldSelect='' _oldRecno=0 m_skey=oldSkey ENDPROC PROCEDURE takeRecordSV PUBLIC _m_ma PUBLIC _m_ten PUBLIC _m_ho_dem IF RECCOUNT()>0 _recno_sv=RECNO('&tblTable') SCATTER MEMVAR IF(recno('&tblTable')>0 and recno('&tblTable')<=RECCOUNT('&tblTable')) GO _recno_sv ENDIF _m_ma=&PriKey _m_ten=&_fieldName _m_ten=ALLTRIM(_m_ten)+" " +ALLTRIM(m.ten) ENDIF USE IN &tblTable ENDPROC &&_____________________ Mo mot TABLE _______________________&& sinh_vien ************** ************************************ IF !USED('sinh_vien') SELECT 0 USE p_data+'sinh_vien' ALIAS sinh_vien ELSE SELECT sinh_vien ENDIF INDEX ON nam+Ma_sv+gioi_tinh+khoa+nganh+lop+ma_phong+ma_nha TO order_sv SET ORDER TO order_sv ************************************************** PRIVATE M_moi,_rec_no,m_nhan, m_huy,_form,objBrow PUBLIC lcFileName ********************************************************************* lcFileName="" M_moi=.F. DO batdau PROCEDURE batdau ON KEY LABEL F3 do _moi_sua with [S] ON KEY LABEL F4 do _moi_sua with [M] ON KEY LABEL F8 do xoa ON KEY LABEL f7 do (P_prog+"report_sv") SELECT sinh_vien BROWSE NAME oBrowse ; NOAPPEND NODELETE NOMODIFY NOWAIT NOMENU ; TITLE "Bang danh sach sinh vien trong KTX: F3-Sua, F4-Them moi, Ctrl+F-Tim kiem, F7-Bao cao, F8-Xoa, ESC-Thoat" ; FONT M_Font_name, M_font_Size; WINDOW M_WinBrw ; when Change_Color_Of_Browse(RECNO(),,oBrowse) DO HookObjectBrowse WITH oBrowse IN P_prog+'S_lib' BROWSE LAST FOR ALLTRIM(nam)=ALLTRIM(M_nam_QL) AND ALLTRIM(Ma_nha)=ALLTRIM(M_nha_QL) ON KEY LABEL F3 ON KEY LABEL F4 ON KEY LABEL F8 ON KEY LABEL f7 IF USED('sinh_vien') USE IN sinh_vien ENDIF ENDPROC **------------------------------------------------------- PROCEDURE _moi_sua PARAMETERS _moi_sua SELECT sinh_vien IF _moi_sua==[S] _rec_no=RECNO() GO _rec_no SCATTER MEMVAR M_moi=.F. ELSE IF _moi_sua=[M] SCATTER MEMVAR BLANK M_moi=.T. ENDIF ENDIF PUSH KEY CLEAR DO FORM (p_screen+'sinh_vien') NAME _form LINKED POP KEY RETURN ************************************************************* PROCEDURE Nhan_Huy PARAMETERS M_nhan_huy SELECT sinh_vien IF M_moi==.F. IF M_nhan_huy=.T. GO _rec_no GATHER MEMVAR FLUSH _form="" ENDIF ELSE IF M_nhan_huy=.T. GO BOTTOM APPEND BLANK GATHER MEMVAR REPLACE sinh_vien.photo_file WITH lcFileName FLUSH _form="" ENDIF ENDIF lcFileName="" RETURN **************** Kiem tra *************************************** PROCEDURE Kiem_tra PUBLIC sv_count_phong _oldSelect2=SELECT() _oldRecno2=RECNO() sv_count_phong=0 SELECT sinh_vien IF EMPTY(ALLTRIM(m.ma_sv)) MESSAGEBOX("Ban phai vao ma sinh vien") _form.txtma_sv.setfocus RETURN ENDIF IF EMPTY(ALLTRIM(m.ho_dem)) MESSAGEBOX("Ban phai vao ho dem") _form.txtho_dem.setfocus RETURN ENDIF IF EMPTY(ALLTRIM(m.ten)) MESSAGEBOX("Ban phai vao ten sinh vien") _form.txtten.setfocus RETURN ENDIF IF EMPTY(ALLTRIM(DTOC(m.ngay_sinh))) MESSAGEBOX("Ban phai vao ngay sinh") _form.txtngay_sinh.setfocus RETURN ENDIF IF EMPTY(ALLTRIM(m.ten_bo)) MESSAGEBOX("Ban phai vao ho ten bo sinh vien") _form.txtten_bo.setfocus RETURN ENDIF IF EMPTY(ALLTRIM(m.nghe_bo)) MESSAGEBOX("Ban phai vao nghe nghiep cua bo sinh vien") _form.txtnghe_bo.setfocus RETURN ENDIF IF EMPTY(ALLTRIM(m.ten_me)) MESSAGEBOX("Ban phai vao ten me sinh vien") _form.txtten_me.setfocus RETURN ENDIF IF EMPTY(ALLTRIM(m.nghe_me)) MESSAGEBOX("Ban phai vao nghe me sinh vien") _form.txtnghe_me.setfocus RETURN ENDIF IF EMPTY(ALLTRIM(m.so_cmnd)) MESSAGEBOX("Ban phai vao so CMTND") _form.txtso_cmnd.setfocus RETURN ENDIF IF EMPTY(ALLTRIM(m.lop)) MESSAGEBOX("Ban phai vao ten lop cua sinh vien") _form.txtlop.setfocus RETURN ENDIF IF EMPTY(ALLTRIM(m.nganh)) MESSAGEBOX("Ban phai vao ten nganh") _form.txtten_nganh.setfocus RETURN ENDIF IF EMPTY(ALLTRIM(m.khoa)) MESSAGEBOX("Ban phai vao khoa hoc") _form.txtkhoa_hoc.setfocus RETURN ENDIF IF SEEK(ALLTRIM(m.ma_sv)) AND M_moi==.T. MESSAGEBOX("Ma sinh vien nay da co, hay chon ma khac") _form.txtma_sv.setfocus RETURN ENDIF SCAN FOR ALLTRIM(ma_phong)=ALLTRIM(m.ma_phong) sv_count_phong=sv_count_phong+1 IF sv_count_phong>10 AND !EMPTY(ALLTRIM(m.ma_phong)) MESSAGEBOX("Da du nguoi trong phong, hay chon phong khac") _form.txtma_phong.setfocus RETURN ENDIF IF sv_count_phong<10 LOCATE FOR ALLTRIM(gioi_tinh)=ALLTRIM(m.gioi_tinh) AND ALLTRIM(ma_phong)=ALLTRIM(m.ma_phong) IF !FOUND() &&AND ALLTRIM(ma_sv)ALLTRIM(m.ma_sv) MESSAGEBOX("Khong duoc de nam nu o chung phong") _form.txtma_phong.setfocus RETURN ENDIF ENDIF ENDSCAN SELECT (_oldSelect2) IF _oldRecno2<=RECCOUNT() GO _oldRecno2 ENDIF DO Nhan_huy WITH .T. RETURN ****************************************************************** PROCEDURE xoa PRIVATE _rec_no SCATTER MEMVAR _rec_no=RECNO() IF RECCOUNT()<=0 MESSAGEBOX("Khong con ban ghi nao de xoa") RETURN ELSE IF Messagebox(m_Suredele, 36+256, M_TencTy) = 6 GO _rec_no IF (RECCOUNT()>0) DELETE ELSE ENDIF GATHER MEMVAR FLUSH pacK DO batdau ENDIF ENDIF ENDPROC *********************************** PROCEDURE Add_photo CD &P_img lcFileName = GETFILE("JPG","Ten anh","Chon",2,M_tencty) CD &P_ws lcFileName=SUBSTR(lcFileName,RAT('\',lcFileName,1),LEN(ALLTRIM(lcFileName))-RAT('\',lcFileName,1)+2) lcFileName=P_img+lcFileName IF !EMPTY(lcFileName) AND FILE(lcFileName) IF M_moi=.F. SELECT sinh_vien REPLACE sinh_vien.photo_file WITH lcFileName ENDIF flag=1 _form.Image.Picture=lcFileName _form.Refresh() ENDIF ENDPROC *********************************** PROCEDURE test_photo RETURN *!* SET MULTILOCKS ON *!* lSuccess=CURSORSETPROP("Buffering", 5, "sinh_vien") *!* IF lSuccess=.T. *!* IF "3" $ GETFLDSTATE(-1) OR "4" $ GETFLDSTATE(-1) *!* _form.Caption = M_tencty *!* ELSE *!* _form.Caption = M_tencty *!* ENDIF *!* ENDIF ENDPROC PROCEDURE sinh_vien_refresh LOCAL lcFile IF FILE(sinh_vien.photo_file) AND M_moi=.F. lcFile = sinh_vien.photo_file _form.Image.Picture=lcFile RETURN ENDIF IF FILE(lcFileName) AND M_moi=.T. _form.image.picture=lcFileName ENDIF ENDPROC PROCEDURE testphong _oldSelect1=SELECT() _oldRecno1=RECNO() IF !USED('dmphong') SELECT 0 USE p_cod+'dmphong' ALIAS dmphong INDEX ON ma_phong TO ma_phong SET ORDER TO ma_phong ELSE SELECT dmPhong ENDIF LOCATE FOR ALLTRIM(ma_phong)=ALLTRIM(m.ma_phong) IF !FOUND() _form.txtma_phong.value="" _form.txtma_nha.value="" _form.txtma_phong.setfocus _form.refresh MESSAGEBOX("Khong co phong nay",0+256) USE IN dmphong RETURN ENDIF m.ma_nha='0'+ALLTRIM(SUBSTR(m.ma_phong,1,1)) USE IN dmphong SELECT (_oldSelect1) IF _oldRecno1<=RECCOUNT() GO _oldRecno1 ENDIF _oldRecno1=0 _oldSelect1='' ENDPROC PROCEDURE form_init PARAMETERS oForm,cCaption oForm.setall('FontName',M_font_name) oForm.setall('FontSize',M_font_size) oForm.Caption=cCaption ENDPROC start Do SetEnv PUBLIC P_COD,P_DATA,P_Screen,P_system,P_Prog,P_Img,P_Repo, P_WS, OK DO Setpath DO (P_prog + "sysvar") DO (P_prog + "inivar") DO DEFINE_WINDOW SET PROCEDURE TO (P_prog+'S_Lib') ADDITIVE DO HideToolBar IN p_prog+"mainmenu" _screen.Caption=M_tencty _screen.Icon=P_img+"A13.ICO" _screen.Picture=P_img+'3.JPG' _screen.Closable= .T. _vfp.StatusBar="Chuong trinh quan ly" ON KEY LABEL ALT+Q do end DO P_prog+"login.fxp" IF NOT OK MESSAGEBOX("Sai mat khau") DO (P_prog+'logout') RETURN ENDIF SET SYSMENU ON DO P_prog+'mainmenu' READ EVENTS ON KEY LABEL ALT+Q RETURN READ EVENTS RETURN **Thiet lap duong dan PROCEDUR Setpath P_COD ='..\cod\' P_DATA ='..\data\' P_Screen ='..\Screen\' P_system ='..\System\' P_Prog ='..\Prog\' P_Img ='..\Img\' P_Repo ='..\Repo\' P_WS ='..\WS\' return PROCEDURE End CLOSE DATABASES CLEAR CLEAR ALL CLEAR EVENTS RELEASE ALL SET SYSMENU TO DEFAULT do A return PROCEDURE SetEnv CLOSE DATABASES CLEAR ALL CLEAR EVENTS CLEAR SET DATE french _vfp.StatusBar="" SET SYSMENU ON HIDE WINDOW all SET DElETED ON SET AUTO off SET DEVELO ON SET SAFETY OFF RETURN FUNCTION Change_Color_Of_Browse(nRecord,cOldDynamicBackColor,oBrw) RETURN oBrw.SetAll("DynamicBackColor","IIF(RECNO()="+STR(nRecord)+",13172190,"+; IIF(EMPTY(cOldDynamicBackColor),"''",cOldDynamicBackColor)+")","Column") ENDFUNC ******************* KHAI BAO WINDOW KHI BROW MOT DANH MUC HOAC ******************* PROCEDURE DEFINE_WINDOW m_ScrRow = SROW() m_ScrCol = SCOL() DEFINE WINDOW m_WinBrw FROM 2, 0 TO FLOOR(m_ScrRow) - 2, FLOOR(m_ScrCoL) COLOR SCHEME 10 ; CLOSE FLOAT GROW MINIMIZE ZOOM SYSTEM FONT m_Font_Name, m_Font_Size - 2 ; ICON FILE LOCFILE(P_Img+ "A33.Ico") ENDPROC sysvar if !used('sysvar') select 0 USE (p_system)+'sysvar' order stt alias sysvar ELSE select 0 select sysvar set order to stt ENDIF SCAN bien=sysvar.name kieu=alltrim(sysvar.type) giatri=ALLTRIM(value) *giatri=sysvar.value1 PUBLIC (bien) if kieu=='C' &&neu kieu bien la char STORE giatri TO (bien) ENDIF if kieu=='N' &&neu kieu bien la nummeric STORE VAL(giatri) TO (bien) ENDIF if kieu=='D' &&neu kieu bien la datatime STORE ctod(giatri) TO (bien) ENDIF if kieu=='Y' &&neu kieu bien la currency STORE val(substr(giatri,1)) TO (bien) ENDIF if kieu=='T' &&neu kieu bien la kieu datetime STORE ctot(alltrim(giatri)) TO (bien) ENDIF if kieu=='L' &&neu kieu bien la kieu logical STORE ALLTRIM(giatri) TO (bien) ENDIF ****************************** ENDSCAN tien_dien if !used('tien_dien') USE (P_data+'tien_dien') ALIAS tien_dien ELSE SELECT tien_dien endif INDEX ON ma_phong TO ma_phong SET ORDER TO ma_phong SCAN FOR EMPTY(thang) replace thang WITH MONTH(DATE()) ENDSCAN M_skey=M_Nha_QL oldM_skey=M_skey M_skey="alltrim(ma_nha)='"+alltrim(M_sKey)+"' AND alltrim(thang)='"+alltrim(M_thang_QL)+"' AND alltrim(nam)='"+alltrim(M_nam_QL)+"'" select * from tien_dien where &M_skey into table tien_dienTMP select tien_dienTMP GO TOP SCATTER MEMVAR m.ma_nha=M_Nha_QL LOCATE FOR ma_phong=ALLTRIM(m.ma_phong) on key label f7 do (P_prog+"report_td") DO form (P_screen+'tien_dien') on key label f7 M_skey=oldM_skey if used('tien_dienTMP') USE IN tien_dienTMP endif if used('tien_dien') USE IN tien_dien endif delete file tien_dienTMP.dbf delete file ma_phong.idx &&alltrim(M_thang_QL) KẾT LUẬN Vì thời gian có hạn nên báo cáo thực tập chuyên đề vẫn còn nhiều thiếu sót chưa kịp hoàn thành và sửa đổi . Em rất mong nhận được sự góp ý, nhận xét của các thầy cô khoa tin học kinh tế nói chung và thầy Bùi Thế Ngũ nói riêng. Xin chân thành cảm ơn thầy Bùi Thế Ngũ, đã hướng dẫn em tận tình trong quá trình chọn đề tài và trong quá trình thực tập tổng hợp. Em rất mong sự chỉ bảo tận tình hơn nữa của thầy để đề tài thực tập này được hoàn thành tốt. Tài liệu tham khảo Cơ sở dữ liệu ( TS Trần Công Uẩn) Hệ thống thông tin quản lý (TS. Trương Văn Tú) Các tài liệu dự án của Công ty cổ phần phần mềm quản trị doanh nghiệp CyberSoft Mục lục ._.

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

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