Đề tài Xây dựng chương trình thi trắc nghiệm môn Tin học Đại cương cho các Trường Trung Học Quân Sự

Tài liệu Đề tài Xây dựng chương trình thi trắc nghiệm môn Tin học Đại cương cho các Trường Trung Học Quân Sự: LỜI MỞ ĐẦU Ngày nay, ứng dụng máy tính cá nhân đang là vấn đề sôi động của toàn thế giới. Không chỉ trong hoạt động khoa học kỹ thuật, lao động sản xuất mà đặc biệt trong lĩnh vực đào tạo giáo dục, máy tính cũng đã trở thành công cụ trợ giúp đắc lực. Vượt ra ngoài các ứng dụng chính như giải các bài tập, phân tích, tính toán thiết kế, học trên máy tính, mô phỏng, tra cứu..., máy tính còn là công cụ để đánh giá kết quả đào tạo thông qua các chương trình thi trắc nghiệm. Trong quá trình đào tạo, đánh giá kết quả học tập bằng các kỳ thi, kiêm tra là công việc phải tiến hành thường xuyên, không kém phần nặng nhọc cho người quản lý và khó bảo đảm độ chính xác, tính công bằng khách quan đối với người học. Do đó, việc cải tiến hệ thống thi, kiểm tra đã và đang dược nhiều người quan tâm. Một trong những xu hướng chung và đầy triển vọng, được nhiều cơ sở đào tạo trên thế giới cũng như trong nước đầu tư nghiên cứu là áp dụng thi trắc nghiệm khách quan trên máy vi tính. Đề tài luận văn của e...

docx71 trang | Chia sẻ: hunglv | Lượt xem: 1587 | Lượt tải: 1download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Xây dựng chương trình thi trắc nghiệm môn Tin học Đại cương cho các Trường Trung Học Quân Sự, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
LỜI MỞ ĐẦU Ngày nay, ứng dụng máy tính cá nhân đang là vấn đề sôi động của toàn thế giới. Không chỉ trong hoạt động khoa học kỹ thuật, lao động sản xuất mà đặc biệt trong lĩnh vực đào tạo giáo dục, máy tính cũng đã trở thành công cụ trợ giúp đắc lực. Vượt ra ngoài các ứng dụng chính như giải các bài tập, phân tích, tính toán thiết kế, học trên máy tính, mô phỏng, tra cứu..., máy tính còn là công cụ để đánh giá kết quả đào tạo thông qua các chương trình thi trắc nghiệm. Trong quá trình đào tạo, đánh giá kết quả học tập bằng các kỳ thi, kiêm tra là công việc phải tiến hành thường xuyên, không kém phần nặng nhọc cho người quản lý và khó bảo đảm độ chính xác, tính công bằng khách quan đối với người học. Do đó, việc cải tiến hệ thống thi, kiểm tra đã và đang dược nhiều người quan tâm. Một trong những xu hướng chung và đầy triển vọng, được nhiều cơ sở đào tạo trên thế giới cũng như trong nước đầu tư nghiên cứu là áp dụng thi trắc nghiệm khách quan trên máy vi tính. Đề tài luận văn của em là: "Xây dựng chương trình thi trắc nghiệm môn Tin học Đại cương cho các Trường Trung Học Quân Sự" Hệ thống thi trắc nghiệm khách quan sẽ giúp cho việc tổ chức kỳ thi một cách nhanh chóng, hiệu quả, tiết kiệm và đặc biệt là có tính khách quan cao trong đánh giá kết quả của các học viên. Ngoài ra nó cũng hỗ trợ cho việc kiểm tra kiến thức học viên nhắm nâng cao chất lượng học tập. Xuất phát từ thực tế đó, cùng với sự gợi ý và hướng dẫn tận tình của thầy giáo Nguyễn Văn Côn, em quyết định viết luận văn này với mục đích áp dụng thử nghiệm hệ thống thi trắc nghiệm khách quan về tin học đại cương cho các Trường Trung Học Quân Sự, với mong muốn đóng góp một phần kiến thức nhỏ bé của mình vào công cuộc đổi mới của nền giáo dục nước nhà.Do trình độ kiến thức còn hạn chế, nên chương trình không tránh khỏi những thiếu sót. Em hy vọng được sự giúp đỡ của thầy cô và các bạn để hệ thống thi trắc nghiệm khách quan được hoàn thiện dần và có thể được áp dụng trong thực tiễn. Em xin chân thành cảm ơn thầy giáo Nguyễn Văn Côn và các thầy cô giáo, trong khoa Công Nghệ Thông Tin đã tận tình hướng dẫn, chỉ bảo, giúp đỡ và động viên em hoàn thành đề tài này. Chương I TỔNG QUAN VỀ TRẮC NGHIỆM 1. Trắc nghiệm là gì? Trắc nghiệm là một hoạt động để đo lường năng lực của đối tượng nào đó nhằm những mục đích xác định. Thi trắc nghiệp là hình thức thi mà một đề thi thường gồm rất nhiều câu hỏi, mỗi câu nên ra một vấn đề cùng với những thông tin cần thiết sao cho học viên chỉ phải trả lời vắn tắt cho từng câu. Trắc nghiệm là một phương pháp đánh giá kết quả học tập của học viên, trong đó ảnh hưởng của các yếu tố chủ quan đã được giảm thiểu đến mức tối ưu. Điểm nổi bật của phương pháp này là số lượng câu hỏi trong mỗi đề thi lớn. Số câu hỏi càng lớn, độ chính xác của việc đánh giá càng cao. Câu hỏi trắc nghiệm sẽ gồm một khái niệm, một nội dung đã có trong chương trình, kèm theo gợi ý để học viên trả lời. Từ cách gợi ý trả lời, ta sẽ có nhiều câu hỏi trắc nghiệm khác nhau. Đồng thời trắc nghiệm khách quan cũng được áp dụng cho nhiều mục đích đánh giá : - Trắc nghiệm về khả năng riêng biệt của học viên nhằm mục đích phân nhóm học viên theo sở trường riêng của họ. - Trắc nghiệm xếp hạng : nhằm mục đích phân loại học viên theo mức thành tích học tập (khá,giỏi,trung bình....) - Trắc nghiệm chuẩn đoán : nhằm mục đích chuẩn đoán những khâu yếu của quá trình đào tạo. - Trắc nghiệm kiến thức : để dánh giá kết quả học tập của học viên. Trong đề tài này ta chỉ quan tâm chủ yếu đến trắc nghiệm kiến thức. Có 2 phương pháp thường được áp dụng trong thi cử đó là trắc nghiệm vấn đáp và trắc nghiệm khách quan. 1.1. Phương pháp trắc nghiệm vấn đáp: Với phương pháp này, người dự thi phải trả lời câu hỏi trực tiếp của giáo viên. Trong thời gian kiểm tra vấn đáp, giáo viên có thể hỏi bất kỳ một vấn đề nào trong lĩnh vực đã học, qua đó giáo viên sẽ đánh giá được trình độ kiến thức của học viên. Hình thức này có ưu điểm nổi bật là loại bỏ hoàn toàn việc gian lận, quay cóp trong kỳ thi. Tuy vậy phương pháp này còn có một số hạn chế: - Quá trình tổ chức thi rất mất công sức và thời gian. Bởi một giáo viên chỉ hỏi được một học viên tại một thời điểm. - Thời gian cho học viên ít, vì vậy số lượng câu hỏi trong một đề thì không nhiều. Do đó khó mà kiểm tra được kiến thức của toàn bộ môn thi với học viên. - Điểm của học viên được chấm ngay sau khi kết thúc vấn đáp học viên đó. Vì vậy nó cũng không hoàn toàn chính xác, phụ thuộc vào cảm quan của người chấm. 1.2. Phương pháp trắc nghiệm khách quan: Đây là một hình thức trắc nghiệm, trong đó đề thi bao gồm nhiều câu hỏi, được lấy từ ngân hàng câu hỏi có sẵn. Mỗi câu hỏi nêu ra một vấn đề với những thông tin cần thiết cho phép học viên trả lời thật vắn tắt từng câu hỏi, phương pháp này có một số ưu điểm nổi bật. - Bài thi trải đều mọi lĩnh vực đã học, do đó loại bỏ hoàn toàn tình trạng học lệch, học tủ của học viên. - Lĩnh vực ra đề rộng, thời gian trả lời ngắn nên học viên không thể quay cóp, tra cứu tài liệu. - Công tác chấm điểm dễ dàng, chính xác, khách quan. - Đề thi được ra một cách khách quan, tin cậy. - Việc xây dựng ngân hàng câu hỏi có tác dụng chuẩn hoá chương trình giảng dạy. Khi ra đề giáo viên phải đối chiếu theo nội dung chương trình để đặt câu hỏi cho phù hợp. - Tiết kiệm được lao động trong các khâu xử lý trước và sau thi, giảm được chi phí văn phòng phẩm phục vụ thi. - Tránh được hoạt động tiêu cực trước, trong và sau khi thi cử. Nhược điểm của trắc nghiệm khách quan: Cũng như phương pháp thi khác, trắc nghiệm khách quan vẫn không tránh khỏi được một số nhược điểm. Đó là: - Việc biên soạn bộ đề thi trắc nghiệm là rất khó. Đòi hỏi nhiều công sức của các giáo viên. Mặt khác, muốn có một bộ đề chất lượng người soạn phải là các giáo viên có kiến thức sâu sắc về môn học liên quan và giàu kinh nghiệm giảng dạy. - Không phát huy được tư duy, năng lực sáng tạo của học viên và do đó khó phát hiện được các học viên xuất sắc. - Khối lượng trắc nghiệm phải đủ lớn. 2. Một số dạng câu hỏi trắc nghiệm: Hình thức kiểm tra trắc nghiệm khách quan có rất nhiều dạng câu hỏi khác nhau. Mỗi loại có những ưu điểm của nó. Vì vậy chúng ta sẽ nghiên cứu từng loại câu hỏi để tìm dạng câu hỏi phù hợp cho hệ thống thi. 2.1. Câu hỏi trắc nghiệm kiểu điền khuyết: Đây là một dạng câu hỏi được đưa ra dưới dạng một mệnh đề thiếu một bộ phận nhất định, nhiệm vụ của học viên là tìm ra một nội dung thích hợp để điều vào chỗ trống. Ưu điểm: - Loại bỏ hoàn toàn được việc học viên lựa chọn hú hoạ, ngẫu nhiên một phương án trả lời bất kỳ, như trong các dạng câu hỏi trắc nghiệm khách quan khác. Học viên phải nắm vững được kiến thức mới có thể trả lời được câu hỏi. Nhược điểm: - Nội dung câu hỏi thường không thể bao quát được toàn bộ kiến thức môn học. Các câu hỏi thường không mang tính tư duy thường dựa vào sự thuộc bài của học viên. - Công việc chấm thi tương đối vất vả do mỗi học viên có một phương án trả lời khác nhau. Người chấm thi phải sử dụng kiến thức chuyên môn của mình để xem xét, phán đoán ý tưởng của học viên trong những câu hỏi phức tạp hay mập mờ, chưa rõ ràng. 2.2. Câu hỏi trắc nghiệm đúng sai: Đây là dạng câu hỏi được xây dựng bằng cách đưa ra một nhận định, học viên phải lựa chọn một trong hai phương án trả lời để khẳng định nhận định đó là đúng hay sai. Ví dụ: 1. Khi đang chạy trong môi trường WINDOWS, muốn tắt máy ta ấn vào nút POWER trên case . a-đúng; b-sai. 2. Trong bộ nhớ máy tính các thông tin được mã hoá bằng các số 0,1 . a-đúng; b-sai. trả lời: a. Ưu điểm: - Công việc xây dựng các câu hỏi dạng này tương đối đơn giản, thích hợp với các câu hỏi nhận biết sự kiện. Trong trường hợp bài thi với số lượng câu hỏi nhiều, phương pháp này có thể kiểm tra kiến thức học viên trong nhiều lĩnh vực. Đồng thời công việc chấm điểm cũng hết sức đơn giản mà lại chính xác và khách quan. Nhược điểm: - Xác suất trả lời đúng đối với câu hỏi này là rất cao đến 50%. Vì vậy, học viên dù không nắm vững kiến thức vẫn trả lời đúng được nhiều câu hỏi. Nội dung câu hỏi không thể phản ánh đúng yêu cầu của đề thi bởi vì một số câu hỏi có thể có nhiều phương án trả lời. 2.3. Câu hỏi trắc nghiệm kiểu trả lời ngắn gọn: Đây là dạng câu hỏi đưa ra dưới dạng từng câu hỏi ngắn đòi hỏi học viên trả lời bằng nội dụng rất ngắn. Ví dụ: Bộ phận lưu trữ thông tin là gì? Trả lời: Bộ nhớ Ưu điểm: - Bởi vì phương pháp này sử dụng các câu hỏi theo lối hỏi trực tiếp, ngắn gọn, xúc tích vì thế học viên dễ hiểu và nắm bắt được nội dung của đề bài. Học viên không thể chọn hú hoạ, ngẫu nhiên các phương án trả lời như trong các câu hỏi kiểu khác, mà phải nắm vững được kiến thức môn thi mới trả lời được. Nhược điểm: - Bởi vì các câu hỏi này phải hết sức ngắn gọn, xúc tích, rõ ràng, đồng thời câu trả lời cũng hết sức ngắn gọn, đủ ý. Vì vậy công việc ra đề thi rất vất vả, phải là người giáo viên có trình độ chuyên môn cao và phương pháp lý luận tốt mới có thể xây dựng được những câu hỏi dạng này. Đặc thù này cũng làm cho nội dung câu hỏi rất tóm lược, không thể bao trùm được toàn bộ kiến thức đã học. - Công việc chấm điểm cũng tương đối khó do cùng một phương án trả lời nhưng mỗi học viên có một cách diễn đạt khác nhau, điều này gây ra sự phiền hà đối với người chấm do đó mà điểm thi cũng bị mất đi sự chính xác. 2.4. Câu hỏi trắc nghiệm kiểu ghép đôi: Trong loại hình này, một câu hỏi thi được tạo thành từ 2 vế thông tin, một vế chứa câu dẫn, một vế chứa câu trả lời. Yêu cầu học viên phải ghép các câu ở hai vế lại với nhau sao cho thích hợp. Trong nhiều trường hợp người ta thường cho số câu ở hai vế là không bằng nhau để tránh việc học viên ghép các cặp câu hỏi cuối cùng bằng cách loại trừ các câu đã trả lời. Một hình thức câu hỏi kiểu khác cũng gần giống phương pháp này đó là hình thức câu hỏi xác định thứ tự. Ở loại hình này, mỗi câu hỏi là một tập các bước mô tả một quy trình thực hiện một công việc nào đó nhưng không được sắp xếp theo thứ tự, yêu cầu học viên phải sắp xếp lại các bước này sao cho đúng thứ tự ban đầu của nó. Ưu điểm: Công việc xây dựng câu hỏi cũng như chấm điểm theo hình thức này rất đơn giản và chính xác. Quá trình ghép đôi từng câu hỏi một với nhau hay sắp xếp một dãy câu theo một trình tự phù hợp làm cho độ may rủi trong việc trả lời ngẫu nhiên của học viên bị giảm bớt. Nhược điểm: Mỗi một câu hỏi gồm một dãy các câu khác nhau với lượng thông tin rất lớn, điều này làm cho các học viên không khỏi bối rối, nhầm lẫn. Vì vậy mà chất lượng bài thi không được đảm bảo. 2.5. Câu hỏi trắc nghiệm kiểu nhiều phương án chọn: Đây là một dạng câu hỏi được sử dụng rất phổ biến, đặc biệt trong những môn học đòi hỏi sự tư duy logic và trí nhớ của người học như: Ngoại ngữ, toán học, tin học... Mỗi câu hỏi được xây dựng dưới dạng: Đưa ra một nhận định cùng với một số phương án trả lời (thường là 4 phương án trở lên), học viên chỉ được chọn một phương án đúng nhất trong các phương án đó làm phương án chọn. Ví dụ: Đơn vị nhỏ nhất để đo thông tin là gì? 1. Byte 2. Kilobyte. 3. Bit. 4. Megabyte. trả lời: 3 Ưu điểm: - Với số lượng phương án chọn lớn, yếu tố may rủi trong việc trả lời câu hỏi của học viên được giảm đi rất nhiều. - Mỗi câu hỏi được đi kèm với một lượng lớn các phương án chọn. Do đó nội dung câu hỏi thi có thể bao trùm được toàn bộ môn học. Vì thế học viên phải sử dụng tối đa kiến thức cùng với sự phán đoán logic của mình để trả lời câu hỏi. - Cho dù học viên không trả lời được đúng câu hỏi, thì các dạng câu kiểu này cũng giúp cho học viên nắm vững hơn kiến thức chuyên môn của mình. - Công việc chấm điểm hết sức đơn giản, điểm được chấm một cách hết sức khách quan và chính xác. Nhược điểm: - Công việc biên soạn câu hỏi rất khó khăn và nặng nhọc, yêu cầu người viết câu hỏi phải am hiểu sâu sắc về lĩnh vực chuyên môn của mình cũng như phải biết được một số kiến thức về văn phạm. Bởi vì nội dung câu phải rõ ràng mạch lạc, giúp cho học viên có thể hiểu được ý tưởng của câu, đồng thời không cho họ có thể đoán trước được phương án trả lời đúng. Từ việc phân tích những ưu, nhược điểm của từng dạng câu hỏi trong phương pháp trắc nghiệm khách quan. Ta nhận thấy kiểu câu hỏi nhiều phương pháp chọn là dạng câu hỏi có nhiều ưu thế nổi bật, nó đã giảm đến mức tối đa yếu tố may rủi trong thi cử, giúp cho người làm bài nâng cao kiến thức, giúp cho chúng ta điều tra và đánh giá được trình độ của học viên, qua đó sẽ cải tiến từng bước phương pháp học tập, giảng dạy. Do đó trắc nghiệm khách quan nhiều phương án chọn được lựa chọn trong việc thiết kế chương trình. 3. Trắc nghiệm khách quan trên máy vi tính: Có nhiều hình thức trắc nghiệm khách quan, do con người thực hiện toàn bộ công việc trắc nghiệm hoặc nhờ máy tính hỗ trợ từng phần hoặc phần lớn công việc. Ngày nay, nhờ thành tựu công nghệ thông tin, hầu hết các công đoạn trong một kỳ thi đều có thể nhờ máy tính giúp đỡ, ngoại trừ việc biên soạn đề thi. Đây là hình thức thi trắc nghiệm rất thích hợp cho các trường kỹ thuật, vì đối với môn học kỹ thuật giáo viên dễ soạn đề thi trắc nghiệm lớn. Mặt khác, trong giai đoạn hiện nay các trường kỹ thuật thường được trang bị nhiều máy vi tính. Ngoài các ưu điểm chung, trắc nghiệm khách quan trên máy vi tính còn có thêm một số ưu điểm, nhược điểm sau: - Thông thường, việc soạn bộ đề bắt buộc phải sử dụng lao động của giáo viên. Tuy nhiên máy tính lại giúp ta lưu trữ các đề thi này, biến thành tài sản kế thừa cho nhiều năm, thậm chí cho nhiều thế hệ giáo viên. Khi cần thiết, giáo viên dễ dàng gọi bộ đề ra để chỉnh lý, cập nhật làm cho bộ đề ngày càng phong phú. - Tiện lợi cho các khâu xử lý trước và sau khi thi. Nhờ có máy tính việc quản lý và tổ chức thi sẽ trở nên hết sức dễ dàng, không chỉ có giáo viên có thể tổ chức thi mà các bộ phận quản lý cũng tham gia trực tiếp vào công việc này. - Tiết kiệm được nhiều học liệu trong thi. Học viên chủ yếu chỉ sử dụng chuột và bàn phím để trả lời mà không cần đến giấy bút . Ta thử làm một phép tính đơn giản như sau cũng có thể hình dung ra hiệu quả của vấn đề. Giả sử một trường nào đó tổ chức thi 5 môn vào cuối học kỳ cho 1000 học viên bằng phương pháp trắc nghiệm trên máy vi tính, ít nhất họ cũng tiết kiệm được cho xã hội 5000 tờ giấy, tương đương với 250 xếp giấy.Nếu lấy kết quả này mà nhân với nhiều học kỳ thì thật sự đây không phải là một số nhỏ. Trong khi đó chất lượng thi lại được đảm bảo. - Nhược điểm của hình thức thi này là cần phải có đủ máy vi tính và yêu cầu học viên phải có kiến thức về tin học. Tuy nhiên với sự phát triển về tin học hoá mạnh mẽ như hiện nay thì điều này không phải là một trở ngại lớn. - Xuất phát từ các lợi ích do trắc nghiệm khách quan trên máy vi tính mang lại, hình thức thi này đã và đang được nghiên cứu áp dụng. Phạm vi và khả năng áp dụng của trắc nghiệm khách quan. Đối với các nước phát triển, viêc áp dụng hình thức thi trắc nghiệm khách quan là vấn đề không còn bàn cãi. Tuy vậy, ở nước ta đây lại là vấn đề còn có nhiều ý kiến khác nhau. Về phạm vi áp dụng có ý kiến cho rằng trắc nghiệm khách quan chỉ phù hợp với các môn học thuộc lĩnh vực tự nhiên như toán, lý, tin học và các môn kỹ thuật còn đối với các môn xã hội không thể áp dụng cho hình thức thi này. Trong khi đó, một số trường đã tổ chức thi trắc nghiệm thí điểm cho cả môn triết học. Theo quan điểm của chúng tôi sẽ không có sự hạn chế nào trong sự áp dụng của thi trắc nghiệm đối với các môn học xã hội. Đương nhiên, việc soạn đề thi trắc nghiệm cho các môn học này sẽ khó hơn, đòi hỏi giáo viên phải bỏ công sức nhiều hơn. Trước đây vài năm, một số người còn do dự về khả năng áp dụng trắc nghiệm khách quan, nhất là trắc nghiệm khách quan trên máy vi tính. Sự hỗ trợ của máy vi tính là yếu tố quyết định chất lượng kỳ thi, đặc biệt là tính khách quan. Sự do dự lại chủ yếu tập trung ở khả năng trang bị máy vi tính một cách rộng rãi. Tuy nhiên, ngày nay giá và chất lượng máy vi tính đang được cải thiện nhanh chóng. Việc trang bị máy vi tính cho các đơn vị trường học đã là một hiện thực hiển nhiên . Đây chính là yếu tố quyết định khả năng áp dụng rộng rãi trắc nghiệm khách quan. 4. Vấn đề an ninh của hệ thống: Do đặc thù của hệ thống được áp dụng cho các kỳ thi hết chương kết thúc môn, một môi trường giáo dục hết sức nghiêm túc, lành mạnh. Vì lẽ đó mà công việc đảm bảo an toàn cho các dữ liệu thông tin trong hệ thống, tránh bị xâm hại một cách bất hợp pháp là yếu tố rất quan trọng. Có rất nhiều nguy cơ có thể gây thiệt hại về thông tin cho hệ thống như thông tin đưa vào không chuẩn xác, thuật toán xử lý không chính xác... Các nguy cơ này có thể khắc phục được bằng cách yêu cầu sự kiểm tra cẩn thận của người lập dữ liệu khi đưa thông tin vào. Đối với người lập trình thì phải đưa vào sự kiểm tra tính toàn vẹn dữ liệu và bẫy lỗi các thao tác, lỗi tính toán, giải quyết hết các khả năng có thể xảy ra. Còn nguy cơ thông tin bị xoá sửa, thất thoát là những nguy cơ rất dễ xảy ra và gây tổn hại rất nhiều cho hệ thống, làm cho hệ thống không đáng tin cậy. Vì vậy, việc khắc phục các nguy cơ này là rất quan trọng. Để khắc phục được những nguy cơ trên ta phải dựa vào việc phân quyền truy cập hệ thống cho từng đối tượng một cách nghiêm ngặt. Làm sao cho hệ thống đảm bảo được việc thi cử của học viên diễn ra nghiêm túc, công bằng, hợp lý, điểm thi được chấm một cách khách quan và chính xác. Chương II NGHIÊN CỨU HỆ THỐNG THI TRẮC NGHIỆM KHÁCH QUAN 1. Các khái niệm: Trước khi đi vào tìm hiểu hoạt động của hệ thống thi trắc nghiệm cũ để xây dựng hệ thống mới, ta hãy làm rõ một số khái niệm sẽ sử dụng sau: Điểm công tác: là các điểm đầu mối phát sinh hay thu nhận thông tin đồng thời cũng là nơi lưu trữ (có thể là tạm thời) các thông tin và xử lý nó. Tài liệu: là mọi giá trị mang thông tin sử dụng trong hệ thống. Nhiệm vụ: là một hoặc nhiều công việc nhằm thực hiện một chức năng của hệ thống. 2. Mô tả hệ thống thi trắc nghiệm trong trường Trung học Quân sự: Bài toán của tôi nhằm thiết kế hệ thống thi trắc nghiệm môn Tin học Đại Cương cho các trường Trung học Quân Sự dựa trên giáo trình Tin học đại cương, áp dụng cho các kỳ thi kiểm tra hết chương, hết môn. Vì vậy, trước khi xây dựng mô hình hệ thống thi trắc nghiệm kiểu mới, ta hãy khảo sát hệ thống trắc nghiệm kiểu cũ. 2.1. Hệ thống tổ chức thi trắc nghiệm khách quan kiểu cũ. Bắt đầu vào mỗi kỳ thi học kỳ cuối năm, sau khi xác định được nội dung môn học thi trắc nghiệm, cũng như mức độ kiến thức đề thi cần đưa ra. Người giáo viên phụ trách môn thi đó sẽ lập ra đề thi trắc nghiệm bằng cách xây dựng một số câu hỏi khác nhau, cùng số điểm cho từng câu và thời gian làm bài. Tuỳ vào cách thức ra đề của mỗi một người, các câu hỏi này có thể được lấy ra từ ngân hàng câu hỏi đã có hoặc được viết mới trực tiếp. Phụ thuộc vào quy mô của kỳ thi mà người ra đề sẽ xác định số lượng đề cần thiết, với yêu cầu trong hai đề thi bất kỳ có thể có những câu hỏi giống nhau nhưng không được hoàn toàn trùng nhau, đồng thời phải đảm bảo mức độ kiến thức ở các đề là tương đương nhau. Quá trình thi được tiến hành như sau: Sau khi xác định số lượng học viên đủ tư cách thi, văn phòng khoa sẽ gửi danh sách học viên được thi lên phòng đào tạo. Sau đó phòng đào tạo sẽ bố trí lịch thi cho môn học đó. Đến đúng ngày thi các học viên có đủ điều kiện thi sẽ đến đúng phòng thi để làm bài. Người giám thị sẽ kiểm tra thẻ của từng học viên để đảm bảo tính hợp lệ của học viên đó cũng như đề phòng tình trạng thi hộ. Đến giờ thi, giám thị sẽ phát đề thi cho từng học viên với bố trí chỗ ngồi sao cho những học viên gần kề nhau không có đề thi trùng nhau. Học viên làm bài thi trên giấy bằng cách chọn các phương án hợp lệ để điền vào trong bài. Hết giờ thì học viên nộp bài làm của mình cho giám thị, sau khi đã điền đầy đủ các thông tin cần thiết của mình vào trong bài làm. Sau khi tiến hành thi xong, văn phòng khoa sẽ tiến hành tổ chức chấm thi. Điểm của bài thi được tính bằng cách đối chiếu với đáp án trong ngân hàng câu hỏi, điểm của bài làm chỉ được tính nếu phương án chọn của học viên trùng với đáp án của câu hỏi đó. Sau khi chấm xong khoa sẽ gửi kết quả lên phòng đào tạo để công bố lên trên trường. Toàn bộ các khâu trong các quá trình này đều được làm bằng tay do những người phụ trách công tác thi cử làm. Đối tượng tìm thấy: Học viên, Môn thi, Đề thi, Câu hỏi Phương án chọn. Điểm công tác: Học viên, Giáo viên ra đề. Nhiệm vụ của hệ thống: Lập đề thi, tổ chức thi, chấm điểm và báo cáo kết quả. Chi tiết từng nhiệm vụ. 2.1.1. Nhiệm vụ lập đề thi: Điều kiện khởi động: - Cuối mỗi học kỳ khi có yêu cầu cần có đề thi trắc nghiệm cho môn học. Kết quả: Một số lượng đề thi trắc nghiệm được tạo ra. Tần xuất: Vào cuối mỗi học kỳ, đối với từng môn học nhiệm vụ này được xây dựng cho các bài thi. Quy tắc: Quy tắc quản lý: Đề thi phải được tổ chức từ những câu hỏi của môn thi đó, mức độ của câu hỏi phải phù hợp với trình độ chung của học viên, thời gian thi phải không vượt quá thời gian yêu cầu. Quy tắc tổ chức: Giáo viên được chỉ định ra đề thi mới được quyền ra đề. 2.1.2. Nhiệm vụ tổ chức thi: Điều kiện khởi động: - Khi có lịch thi của văn phòng khoa. - Khi học viên đã vào phòng thi đầy đủ. Kết quả: những học viên có đủ điều kiện sẽ được thi. Quy tắc: Quy tắc quản lý: Học viên không được nghỉ quá 20% học phần của môn thi mới được thi. Học viên không vi phạm kỷ luật. Quy tắc tổ chức: Những học viên trước khi vào phòng thi phải được kiểm tra xem có trong danh sách thi hay không mới được vào thi. 2.1.3. Nhiệm vụ chấm điểm và lên kết quả: Điều kiện khởi động: - Khi các học viên đã làm xong bài thi. - Khi có yêu cầu phúc tra hay thắc mắc về bài thi. - Khi kết thúc một học kỳ. Quy tắc: Quy tắc quản lý: Sau khi chấm điểm các môn thi xong điểm thi của môn đó sẽ được công bố. Hoặc sau khi kết thúc một học kỳ, khi đã giải quyết những thắc mắc, phúc tra điểm, điểm tổng kết tất cả các môn học của từng học viên sẽ được công bố. 2.2. Những nhược điểm và hạn chế của hệ thống cũ: - Quá trình xây dựng đề thi được làm thủ công gây lãng phí thời gian, mất công sức đối với giáo viên ra đề. - Đề thi được xây dựng dựa trên chủ quan của người ra đề, do đó sẽ không mang tính khách quan, số lượng đề thi lớn nhưng phải đảm bảo nội dung giữa các đề phải khác nhau vì vậy dễ gây sự nhầm lẫn cho người ra đề. Bài thi được làm trên giấy phát đến từng học viên sẽ không tránh khỏi những hiện tượng tiêu cực xảy ra như: quay copy, trao đổi bài, hay nội dung đề thi có thể bị lộ từ trước. Giáo viên mất rất nhiều thời gian kiểm tra số lượng bài của học viên, khó phát hiện những trường hợp học viên không nộp bài. Giáo viên mất thời gian đánh dấu những bài học viên nộp muộn. Quá trình chấm điểm gây mất nhiều thời gian và công sức của người chấm, với số lượng đề lớn công việc chấm thi dễ xảy ra những sai sót. Học viên không biết điểm ngay để sau khi kiêm tra để điều chỉnh phương pháp học tập, khắc phục kịp thời các sai sót về kiến thức. Giáo viên không nắm bắt được ngay lập tức kết quả học tập của học viên để điều chỉnh phương pháp giảng dạy cho phù hợp, khắc phục các sai sót của học viên. * Việc lưu kết quả kiểm tra vào sổ điểm cũng như lập các báo cáo, thống kê mất rất nhiều thời gian mà thường gây ra sự nhầm lẫn. Đây là những nhược điểm và hạn chế của hệ thống thi trắc nghiệm thủ công. Do đó, yêu cầu đặt ra đối với hệ thống mới được tin học hoá là phải giải quyết những nhược điểm nêu trên và hoàn chỉnh tất cả các khâu trong kỳ thi một cách khép kín và tự động hoá. 2.3. Hệ thống thi trắc nghiệm khách quan kiểu mới trên máy vi tính: Qua việc khảo sát mô hình hệ thống thi trắc nghiệm kiểu cũ. Từ những đối tượng, quy tắc tìm thấy, đồng thời nghiên cứu những nhược điểm và hạn chế của hệ thống cũ đã vấp phải. Ta có thể xây dựng một hệ thống thi kiểu mới được tin học hoá, sẽ gồm những phần công việc chính được tin học hoá sau: Quản lý hệ thống: phần này chỉ dành cho giáo viên phụ trách việc ra đề, giáo vụ khoa của trường, người quản trị hệ thống mới có quyền được trực tiếp thực hiện. Nó gồm có những công việc chính sau: Cập nhật hệ thống: Việc cập nhật danh sách học viên thi thường được làm trước mỗi kỳ thi học kỳ, sau khi phòng đào tạo đưa ra danh sách học viên được thi học kỳ, người có trách nhiệm cập nhật hệ thống sẽ căn cứ vào những thông tin, mà lên danh sách học viên thi. Biên soạn ngân hàng đề: Bao gồm việc cập nhật, sửa đổi các phương hướng đề thi trong ngân hàng đề thi. Dạng đề thi sẽ gồm thông tin về số lượng các loại câu hỏi khác nhau cùng với điểm số cho từng loại câu hỏi đó. Công việc được tiến hành thường xuyên khi có nhu cầu cập nhật, đồng thời nội dung các dạng đề thi cũng được bảo mật tuyệt đối, chỉ có giáo viên bộ môn phụ trách thi trắc nghiệm mới được quyền biết. Biên soạn ngân hàng câu hỏi: Tạo lập sửa đổi nội dung các thông tin về các câu hỏi trong ngân hàng câu hỏi: Các thông tin này bao gồm: nội dung câu hỏi, các phương án trả lời, phương án trả lời đúng, thời gian thi. Công việc này được làm thường xuyên do các giáo viên phụ trách các môn học có thi trắc nghiệm viết. Nội dung các câu hỏi được bảo mật chỉ cho phép các giáo viên có quyền ra đề mới được phép biết. Phần thi kiểm tra trắc nghiệm: Phần công việc này chỉ dành cho các học viên tham gia vào kỳ thi. Khi các học viên đã vào phòng thi đầy đủ, học viên bật máy tính để đăng nhập vào hệ thống chương trình, nhập mã số học viên của mình. Sau đó khi kiểm tra tính hợp lệ của mã học viên nhập vào, hệ thống sẽ tự động sinh ra ngẫu nhiên một đề thi cho học viên làm thi. Công việc thi kiểm tra trắc nghiệm: Theo lịch thi đã công báo trên trường, đến đúng ngày thi các học viên dự thi vào phòng thi. Sau khi kiểm tra thẻ học viên, xem học viên có quyền được thi hay không. Sau đó các học viên được phép bật máy tính của mình lên và chạy chương trình thi đó, trước khi vào bài làm chương trình yêu cầu học viên nhập mã số học viên của mình vào, sau khi kiểm tra tính hợp lệ của mã số này chương trình sẽ tự động sinh một đề cho học viên bằng cách lấy ngẫu nhiên các câu hỏi ngân hàng câu hỏi đã có. Đồng thời số lượng của các câu hỏi cũng như thời gian làm bài thi phải thoả mãn yêu cầu của phương hướng đề đã sinh ra. Khi bài thi được tạo ra, mỗi học viên bắt đầu làm bài của mình trên máy, thời gian làm bài bắt đầu được tính từ lúc bài thi được tạo ra. Thời gian làm bài được xác định bằng đồng hồ máy tính, đảm bảo tính khách quan và chính xác về thời gian làm bài thi. Học viên làm bài bằng cách chọn các phương án trả lời tương ứng cho từng câu hỏi. Khi kết thúc thời gian làm bài học viên có thể tắt máy tính của mình. Học viên có thể nộp bài thi sớm nếu cần. Công việc chấm điểm và lên kết quả: Khi các môn thi trắc nghiệm được tiến hành xong, hoặc thời gian thi đã hết, hệ thống sẽ tự động chấm điểm và lên kết quả thi cho tất cả học viên, sau khi cân nhắc và xét duyệt bảng điểm này sẽ được gửi lên ban giáo vụ để công bố. 3. Sự cần thiết để xây dựng hệ thống mới Những công nghệ mới về thông tin và truyền thông đã và đang tiếp tục ứng dụng vào giáo dục, tạo ra một cuộc cách mạng thực sự trong nghành giáo dục. Nó trở thành một cuộc cách mạng mang tính toàn cầu. Cuộc cách mạng này không những làm thay đổi phương pháp dạy học truyền thống mà còn đổi mới cả nội dung dạy và học, mở rộng khả năng lĩnh hội tri thức khoa học với chất lượng cao và tốc độ nhanh. Hiện nay, ở nhiều nước tiên tiến trên thế giới người ta đã và đang nghiên cứu việc đưa nền công nghệ thông tin vào quá trình giảng dạy các môn học. Với khả năng lưu trữ một lượng thông tin rất lớn và khả năng tính toán một cách chính xác, nó là một phương tiện quan trọng trong việc khai thác và xử lý thông tin với hiệu quả cao . Việc xây dựng hệ thống kiểm tra bằng trắc nghiệm trên máy vi tính đã được áp dụng rộng rãi ở nhiều nước trên thế giới như Mỹ, Anh, Pháp, Nga.... và đạt kết quả rất tốt. Ở nước ta hình thức trắc nghiệm đã được đưa vào sử dụng rộng rãi trong việc thi ngoại ngữ, thi lấy bằng lái xe.......và hiện nay, kiểm tra trắc nghiệm bước đầu được đưa vào sử dụng trong các kỳ thi của một số trường đại học như Đại học dân lập quản lý kinh doanh...và trong các bài kiểm tra theo chưong,phần ở các trường trung học, trong đó có môn Tin học đại cương. Trên thực tế các công việc của hệ thống kiểm tra đánh giá kết quả học tập các môn học nói chung và môn Tin học đại cương nói riêng rất phức tạp, mất rất nhiều thời gian mà hiệu quả công việc lại không cao. Mặt khác, nước ta hiện nay đang trong thời kỳ của khoa học kỹ thuật, việc đưa máy tính và áp dụng các thành tựu khoa học kỹ thuật vào các trường học, cụ thể là từng môn học đang là vấn đề mà mọi người quan tâm. Việc xây dựng phần mềm hỗ trợ đổi mới phương pháp kiểm tra , đánh giá kết quả học tập môn Tin học đại cương bằng hình thức thi trắc nghiệm cũng là góp phần vào việc đưa các thành tựu của khoa học kỹ thuật vào trường học, đồng thời nó cũng góp phần thực hiện tốt việc cải cách giáo dục ở bậc trung học. Chính từ sự phân tích tình hình thực tế như vậy, việc xây dựng một hệ thống hỗ trợ việc đổi mới phương pháp kiểm tra, đánh giá môn Tin học đại cương ngày càng cần thiết. Hệ thống được xây dựng nhằm giảm bớt các công việc thủ công, tăng hiệu quả làm việc, tăng tính chính xác, công bằng, khách quan trong quá trình kiểm tra của học viên, đồng thời giúp giáo viên có thể điều chỉnh phương pháp dạy và học viên có thể điều chỉnh phương pháp học kịp thời, nhằm đạt được kết quả cao trong việc dạy và học, góp phần nâng cao chất lượng giáo dục - đào tạo. Chương III PHÂN TÍCH HỆ THỐNG THI TRẮC NGHIỆM KHÁCH QUAN TRÊN MÁY VI TÍNH 1. Phân tích và nắm bắt những yêu cầu của bài toán thi trắc nghiệm: Bước đầu trong việc phân tích một hệ thống là xác định các chức năng nghiệp vụ cần phải được tiến hành bởi hệ thống dự định xây dựng. Chức năng nghiệp vụ là một khái niệm logic, nó mô tả nghiệp vụ cần thực hiện mà không đề cập đến nghiệp vụ đó được thực hiện ở đâu, như thế nào và do ai làm. Quan điểm “chức năng” chỉ là một trong nhiều quan điểm xem xét của hệ thống trong giai đoạn phân tích nhưng đặc biệt có ích trong lúc bắt đầu tiến trình. Nó phản ánh được cái nhìn hệ thống của toàn bộ công việc, chứa đựng một trong các kỹ thuật lập mô hình được sử dụng trong bất kỳ một phương pháp luận nào. 1.1. Đặc tả yêu cầu: Đặc tả yêu cầu sẽ là mô tả vì những yêu cầu mà ta mong muốn có trong sản phẩm, một bản đặc tả yêu cầu phải bao gồm những tác phẩm cơ bản sau đây: 1.1.1. Mô tả khái quát chung về bài toán: - Bài toán đặt ra là phải xây dựng một chương trình thi trắc nghiệm khách quan về môn tin học đại cương. Chương trình này được áp dụng tổ chức cho một kỳ thi, kiểm tra theo chương, kiểm tra hết môn cho học viên trong các trường Trung học Quân Sự dựa trên giáo trình tin học đại cương của trường, có chức năng quản lý ngân hàng câu hỏi, ngân hàng đề. 1.1.2. Mục tiêu của chương trình: Chương trình sẽ giúp cho việc tổ chức kỳ thi một cách nhanh chóng, hiệu quả, tiết kiệm và đặc biệt có tính khách quan cao trong đánh giá kết quả thi của các học viên. 1.2. Xây dựng sơ đồ chức năng nghiệp vụ cho hệ thống mới: Sơ đồ chức năng nghiệp vụ là việc phân rã có thứ bậc đơn giản chức năng của hệ thống trong miền khảo cứu. Mỗi chức năng được ghi trong một khung và nếu cần thì sẽ được bẻ ra thành các chức năng con, số mức bẻ này phụ thuộc vào kích cỡ và độ phức tạp của hệ thống. Mục tiêu của sơ đồ: - Để giúp xác định phạm vi của hệ thống cần phân tích. - Để tăng cường cách tiếp cận "logic" tới việc phân tích hệ thống. - Để chỉ ra vị trí của miền khảo cứu hệ thống trong toàn bộ hệ thống tổ chức. Điều đó làm rõ trách nhiệm, giúp tránh được sự trùng lặp công việc và xác định các tiến trình trùng lặp, dư thừa trong hệ thống hiện tại. Từ quy trình hoạt động của hệ thống thực, hệ thống mới được xây dựng nhằm đáp ứng nhu cầu học hỏi, sử dụng thuận tiện, dễ tiếp cận, phân chia kiến thức thành từng mảng cụ thể, dễ kiểm soát, sửa đổi. 2. Các chức năng chính của hệ thống: 2.1. Quản trị hệ thống. Login. Quyền sử dụng. Cập nhật hệ thống Thoát 2.2. Quản lý ngân hàng câu hỏi. Soạn câu hỏi. Tạo bộ đề thi. 2.3. Tổ chức thi. Thi hết chương. Thi kết thúc môn. Xoá kết quả thi. In kết quả thi 2.4. Trợ giúp và in Report theo yêu cầu. 3. Mục tiêu của hệ thống mới: - Hệ chương trình sau khi thiết kế phải có tính khả thi, cung cấp một cách đầy đủ thông tin và dễ sử dụng. - Lưu trữ ngân hàng câu hỏi. - Lưu trữ danh sách học viên. - Tự động hoá các công việc tạo đề và xử lý kết qủa kiểm tra. - Có khả năng cập nhật, bổ sung, sửa đổi hoặc huỷ bỏ thông tin. - Lập các báo cáo, thống kê nhanh chóng, kịp thời, chính xác. - Giảm nhẹ được công việc của giáo viên, gây hứng thú cho học viên và đảm bảy đầy đủ các yêu cầu cần có của kiểm tra trắc nghiệm. - Đóng vai trò tích cực nâng cao hiệu quả, chất lượng giáo dục, đào tạo trong nhà trường. - Dễ phát triển: Khi cần có thể thay đổi một số chi tiết nào đó mà ít ảnh hưởng đến hệ thống. 4. Mô tả hệ thống mới: Khi giáo viên hoặc học viên truy cập vào hệ thống, hệ thống sẽ kiểm tra quyền người dùng, sau đó sẽ trao quyền và các tài nguyên của hệ thống cho người đó. Giáo viên sau khi đã được kiểm tra quyền sử dụng có thể cập nhật ngân hàng câu hỏi, xem, xoá, sửa hay bổ xung ngân hàng câu hỏi. Các câu hỏi kiểm tra phải phù hợp với nội dung, yêu cầu của môn Tin học đại cương, theo đúng tiêu chuẩn quy định của Bộ Giáo dục và giáo trình tin học đại cương của trường đề ra. Việc soạn thảo câu hỏi và tọ bộ đề thi sẽ được tiến hành trước khi cho học viên vào thi, các công đoạn đó bao gồm: + Nhập nội dung câu hỏi (dựa theo giáo trình tin học đại cương của trường) + Nhập các phương án (có 4 phương án trong đó có một phương án đúng) + Nhập đáp án + Nhập điểm và thời gian làm bài + Tạo bộ đề thi ngẫu nhiên Sau khi dữ liệu được cập nhật đầy đủ thì giáo viên tổ chức thi.Công việc thi được tiến hành như sau : Sau khi vào phong thi, giáo viên có thê lựa chọn đề thi cho học viên, nếu không học viên có thể tự động điền các thông tin để vào thi với bộ câu hỏi ngẫu nhiên. Trong quá trình điền thông tin máy sẽ kiểm tra tính hợp lệ của thông tin của học viên đảm bảo không có học viên nào được phép làm hai bài trong một lần thi Sau khi đề được tạo, học viên bắt đầu làm bài kiểm tra. Học viên trả lời các câu hỏi mà hệ thống đưa ra. Với mỗi câu hỏi có 4 phương án trả lời, học viên sẽ chọn một phương án đúng trong 4 phương án. Học viên có thể quan sát được toàn bộ các câu hỏi trong bộ đề của mình và có thể làm câu nào trước cũng được. Nếu làm xong học viên có thể CLICK kết thúc để máy ghi kết quả, nếu quá thời gian qui định thì máy sẽ tự động tính điểm theo thang điểm qui định và thoát khỏi chương trình. Mọi truy nhập vào hoạt động làm bài ở thời điểm này đều bị ngăn cấm. Sau khi thi xong đợt thi giáo viên sẽ in kết quả ra giấy có thể xoá toàn bộ kết quả thi để đảm bảo tính khách quan cho những lần thi sau. Nếu số máy tính không đủ cho học viên, hệ thống cho phép giáo viên in đề thi ra giấy theo dạng trắc nghiệm cho học viên làm bài trên giấy Chương IV CÁC SƠ ĐỒ THỂ HIỆN MÔ HÌNH DỮ LIỆU HỆ THỐNG 1. Sơ đồ chức năng hệ thống thi trắc nghiệm: Sơ đồ chức năng hệ thống thể hiện tổng quan về các chức năng của hệ thống giúp cho người đọc dễ hình dung trong qúa trình thiết kế chương trình. Chương trình thi trắc nghiệm TH Quản lý ngân hàng câu hỏi Soạn câu hỏi Trợ giúp Tra cứu HDSD Tổ chức thi Thi hết chương Thi kết thúc môn Xoá kết quả thi Quản trị hệ thống Login Cập nhật hệ thống Quyền sử dụng Thoát Tạo bộ đề thi In kết quả thi 2. Sơ đồ luồng dữ liệu vào, ra của hệ thống 2.1. Xác định dòng thông tin nghiệp vụ: Bước tiếp theo trong tiến trình phân tích là xem xét chi tiết hơn về các thông tin cần cho việc thực hiện các chức năng đã được nêu còn những thông tin cần cung cấp để hoàn thiện hệ thống. Công cụ mô hình được sử dụng cho mục đích này là sơ đồ dòng dữ liệu. Sơ đồ dòng dữ liệu là một công cụ dùng để trợ giúp các hoạt động chính của nhà phân tích, sơ đồ dữ liệu nêu ra một mô hình về hệ thống có quan điểm cân xứng cho cả dữ liệu và tiến trình. Nó chỉ ra cách thông tin chuyển vận từ một tiến trình hoặc từ chưc năng này trong hệ thống sang một hệ thống khác. 2.2. Mục đích của sơ đồ chức năng nghiệp vụ: - Giúp người phân tích viên xác định giới hạn, phạm vi hoạt động của hệ thống cần phân tích. - Giúp tăng cường cách tiếp cận "logic" tới việc phân tích hệ thống. - Chỉ ra vị trí của nền khảo cứu trong toàn bộ hệ thống tổ chức, nó làm rõ ràng trách nhiệm, giúp tránh được sự trùng lặp và dư thừa trong hệ thống. Một số khái niệm và ký hiệu dùng trong sơ đồ dòng dữ liệu: 2.3. Tiến trình : Là quá trình biến đổi thông tin,tức là nó làm thay đổi thông tin theo một cách nào đó như tổ chức lại thông tin ,bổ sung thông tin hoặc tạo ra thông tin mới. Ký hiệu : 2.4. Dòng dữ liệu : Là việc chuyển thông tin vào hoặc ra khỏi một tiến trình,hướng mũi tên chỉ ra hướng của dòng thông tin Ký hiệu : 2.5. Kho dữ liệu : Biểu diễn cho thông tin cần phải lưu giữ trong một khoảng thời gian để một hoặc nhiều quá trình hoặc tác nhân thâm nhập vào. Ký hiệu : 2.6. Tác nhân ngoài : Là một người, một nhóm người hoặc một tổ chức ở bên ngoài hệ thống có trao đổi thông tin với hệ thống. Ký hiệu : 3. Sơ đồ dòng dữ liệu mức đỉnh: Thi trắc nghiệm Câu hỏi TT Học viên Kết quả 3.1. Sơ đồ dòng dữ liệu mức dưới đỉnh Quản lý ngân hàng câu hỏi Câu hỏi Câu hỏi Bộ đề Tổ chức thi Bộ đề TT Học viên Kết quả 3.2. Sơ đồ dòng dữ liệu mức 2 Soạn câu hỏi TT câu hỏi Câu hỏi Tạo bộ đề Bộ đề Thi hết chương phần TT học viên Kết quả thi Kết thúc môn Bộ đề 4. Mô hình các bảng dữ liệu Do tính chất của chương trình chỉ lưu trữ các câu hỏi, tổ chức thi và in kết quả do vậy bảng dữ liệu không cần nhiều và các mối quan hệ không có, chương trình chủ yếu đi sâu vào thuật toán, thuật giải, để giải quyết trong quá trình tạo bộ đề và thi cử. 4.1 Các bảng dữ liệu Bộ đề Mã bộ đề Câu hỏi P.án 1 P.án 2 P.án 3 P.án 4 P.án đúng Câu hỏi ID Chương phần Câu hỏi P.án 1 P.án 2 P.án 3 P.án 4 P.án đúng Kết qủa Mã học viên Họ tên Ngày sinh Lớp Điểm 4.2. Mô tả chi tiết các bảng 4.2.1. Bảng câu hỏi Cauhoi STT Tên trường Kiểu trường Độ rộng Mô tả 1 ID Autonumber Long Integer Số thứ tự 2 Chuong_phan Number Integer Số thứ tự của chương 3 Cau_hoi Text 255 Nội dung câu hỏi 4 Pa1 Text 255 Phương án 1 5 Pa2 Text 255 Phương án 2 6 Pa3 Text 255 Phương án 3 7 Pa4 Text 255 Phương án 4 8 Pa đúng Number Byte Phương án đúng 4.2.2. Bảng bộ đề Bode STT Tên trường Kiểu trường Độ rộng Mô tả 1 Sobode Number Integer Số bộ đề 2 Cau_hoi Text 255 Nội dung câu hỏi 3 Pa1 Text 255 Phương án 1 4 Pa2 Text 255 Phương án 2 5 Pa3 Text 255 Phương án 3 6 Pa4 Text 255 Phương án 4 7 Pa đúng Number Byte Phương án đúng 4.2.3. Bảng kết quả Hocvien STT Tên trường Kiểu trường Độ rộng Mô tả 1 Mahocvien Text 5 Mã học viên 2 Hoten Text 35 Họ và tên 3 Ngaysinh Data/time 8 Ngày sinh 4 Lop Text 50 Lớp 5 Diem Text 10 Điểm Chương V XÂY DỰNG CHƯƠNG TRÌNH Chương trình được xây dựng trên ngôn ngữ VISUAL BASIC và cơ sở dữ liệu từ ACCESS. 1. Cơ sở lý thuyết về ngôn ngữ lập trình VISUAL BASIC 1.1. Tìm hiểu ngôn ngữ lập trình Visual Basic 1.1.1. Tổng quan về ngôn ngữ lập trình Visual Basic Visual Basic, con đường nhanh nhất và đơn giản nhất để tạo những ứng dụng cho Microsoft Windows. Bất kể bạn là một nhà chuyên nghiệp hay là một người mới lập trình Windows, Visual Basic cung cấp cho bạn một tập hợp các công cụ hoàn chỉnh để nhanh chóng phát triển các ứng dụng. Vậy Visual Basic là gì? Thành phần “Visual” nói đến các phương thức dùng để tạo giao diện đồ họa người sử dụng (GUI). Thay vì viết những dòng mã để mô tả sự xuất hiện và vị trí của những thành phần giao diện, ta chỉ cần thêm vào những đối tượng đã được định nghĩa trước ở vị trí nào đó trên màn hình. Thành phần “Basic” nói đến ngôn ngữ “BASIC” (Beginners All-Purpose Symbolic Instruction Code) một ngôn ngữ được dùng bởi nhiều nhà lập trình hơn bất cứ một ngôn ngữ nào khác trong lịch sử máy tính. Visual Basic được phát triển dần dần dựa trên ngôn ngữ BASIC, và bây giờ chứa đựng hàng trăm điều lệnh, hàm, và từ khóa… có quan hệ trực tiếp với giao diện đồ họa của Windows. Ngôn ngữ lập trình Visual Basic không chỉ là Visual Basic. Hệ thống lập trình Visual Basic, những ứng dụng bao gồm Microsoft Excel, Microsoft Access, và nhiều ứng dụng Windows khác đều dùng cùng một ngôn ngữ. Mặc dù mục đích của chúng ta là tạo ra những ứng dụng nhỏ cho bản thân hay một nhóm, một hệ thống các công ty lớn, hoặc thậm chí phân phối những ứng dụng ra toàn cầu qua Internet. Visual Basic là cung cụ mà bạn cần. - Những chức năng truy xuất dữ liệu cho phép ta tạo ra những cơ sở dữ liệu, những ứng dụng front-end, và những thành phần phạm vi server-side cho hầu hết các dạng thức cơ sở dữ liệu phổ biến, bao gồm Microsoft SQL Server và những cơ sở dữ liệu mức enterprise khác. - Những kỹ thuật ActiveX cho phép ta dùng những chức năng được cung cấp từ những ứng dụng khác, như là chương trình xử lý văn bản Microsoft Word, bảng tính Microsoft Excel và những ứng dụng Windows khác. - Khả năng Internet làm cho nó dễ dàng cung cấp cho việc thêm vào những tài liệu và ứng dụng qua Internet hoặc intranet từ bên trong ứng dụng của bạn, hoặc tạo những ứng dụng Internet server. - Ứng dụng của bạn kết thúc là một file .exe thật sự. Nó dùng một máy ảo Visual Basic để bạn tự do phân phối ứng dụng. 1.1.2. Cấu trúc của một ứng dụng Visual Basic Một ứng dụng thật ra là một tập hợp các chỉ dẫn trực tiếp đến máy tính để thi hành một hay nhiều tác vụ. Cấu trúc của một ứng dụng là phương pháp trong đó các chỉ dẫn được tổ chức, đó là nơi chỉ dẫn được lưu giữ và thi hành những chỉ dẫn trong một trình tự nhất định. Vì một ứng dụng Visual Basic, trên cơ bản là những đối tượng, cấu trúc mã đóng để tượng trưng cho những mô hình vật lý trên màn hình. Bằng việc định nghĩa, những đối tượng chứa mã và dữ liệu. Form, cái mà chúng ta nhìn thấy trên màn hình là tượng trưng cho những thuộc tính, quy định cách xuất hiện và cách cư xử. Cho mỗi form trong một ứng dụng, có một quan hệ module form (với tên file mở rộng là .frm) dùng để chứa đựng mã của nó. Mỗi module chứa những thủ tục sự kiện – những đoạn mã, nơi đặt những chỉ dẫn, cái sẽ được thi hành trong việc đáp ứng những sự kiện chỉ định. Form có thể chứa những điều khiển. Tương ứng với mỗi điều khiển trên form, có một tập hợp những thủ tục sự kiện trong module form đó. Mã không chỉ quan hệ với một form chỉ định hay điều khiển có thể được đặt trong một loại module khác, một module chuẩn (.bas). Một thủ tục được dùng để đáp ứng những sự kiện trong những đối tượng khác nhau phải được đặt trong cùng một chuẩn, thay vì tạo những bản sao mã trong những thủ tục sự kiện cho mỗi đối tượng. Một lớp module (.cls) được dùng để tạo những đối tượng, cái mà có thể được gọi từ những thủ tục bên trong ứng dụng của bạn. Trong khi một module chuẩn chỉ chứa mã, một lớp module chứa đựng cả mã và dữ liệu. Ta có thể nghĩ nó như một điều khiển. 1.2. Chúng ta có thể làm gì với Visual Basic 1.2.1. Tạo giao diện người sử dụng Giao diện người sử dụng có lẽ là thành phần quan trọng nhất của một ứng dụng. Đối với người sử dụng, giao diện chính là ứng dụng ; họ không cần chú ý đến thành phần mã thực thi bên dưới. ứng dụng của chúng ta có thể phổ biến được hay không phụ thuộc vào giao diện. 1.2.2. Sử dụng những điều khiển chuẩn của Visual Basic Ta dùng những điều khiển để lấy thông tin mà người sử dụng nhập vào, và để hiển thị và kết xuất. Những điều khiển mà ta có thể dùng trong ứng dụng bao gồm hộp văn bản, nút lệnh, và hộp danh sách,…. Những điều khiển khác cho ta truy xuất những ứng dụng khác, xử lý dữ liệu của nó như là một thành phần mã trong ứng dụng của bạn. 1.2.3. Lập trình với những đối tượng Những đối tượng là thành phần chủ yếu để lập tình Visual Basic. Những đối tượng có thể là form, những điều khiển hay cơ sở dữ liệu. 1.2.4. Lập trình với phần hợp thành Chúng ta đôi khi cần sử dụng khả năng tính toán của Microsoft Excel trong ứng dụng Visual Basic, hay định dạng một tài liệu sử dụng thanh công cụ định dạng của Microsoft Word, hoặc lưu trữ và xử lý dữ liệu dùng Microsoft Jet… Tất cả những điều này có thể thực hiện được bằng cách xây dựng những ứng dụng của chúng ta sử dụng những thành phần ActiveX. Thêm vào đó, Visual Basic có thể giúp chúng ta tạo ra những điều khiển ActiveX riêng. 1.2.5. Đáp ứng những sự kiện chuột và bàn phím Những ứng dụng Visual Basic có thể đáp ứng một lượng lớn sự kiện chuột và bàn phím. Ví dụ form, hộp ảnh, và những điều khiển ảnh có thể phát hiện vị trí con trỏ chuột, có thể quyết định phím trái hay phím phải được nhấn, và có thể đáp ứng những tổ hợp của phím chuột với phím Shift, Ctrl, hay Alt. Sử dụng những điều khiển phím, ta có thể lập trình những điều khiển và form để đáp ứng các hành động phím hoặc phiên dịch và xử lý mã Ascii của ký tự. Thêm vào đó, những ứng dụng Visual Basic có thể hỗ trợ sự kiện rê và thả cũng như tính năng rê và thả OLE. 1.2.6. Làm việc với văn bản và đồ họa Visual Basic cung cấp khả năng đồ họa và văn bản phức tạp trong ứng dụng. Những thuộc tính văn bản có thể giúp ta nhấn mạnh các khái niệm quan trọng và các chi tiết cần quan tâm. Thêm vào đó, Visual Basic cung cấp khả năng đồ họa cho phép ta linh động trong thiết kế, bao hàm các hình ảnh động bằng cách hiển thị một loạt các hình ảnh liên tiếp nhau. 1.2.7. Gỡ rối mã và quản lý lỗi Đôi khi có những lỗi xảy ra bên trong mã của ứng dụng. Những lỗi nghiêm trọng có thể là nguyên nhân một ứng dụng không đáp ứng lệnh, thông thường yêu cầu người sử dụng khởi động lại ứng dụng, và không lưu lại những gì ta đã làm. Quá trình tìm ra và sửa lỗi gọi là gỡ rối. Visual Basic cung cấp nhiều công cụ giúp chúng ta phân tích ứng dụng làm việc như thế nào. Những công cụ gỡ rối đặt biệt hữu ích trong việc tìm ra nguồn gốc lỗi, nhưng chúng ta cũng có thể dùng những công cụ này để kiểm tra chương trình hoặc tìm hiểu những ứng dụng khác nhau làm việc như thế nào. 1.2.8. Xử lý ổ đĩa, thư mục và file Khi lập trình trong Windows, nó rất quan trọng để có khả năng thêm, di chuyển, tạo mới hoặc xóa những thư mục và file, lấy thông tin về và xử lý ổ đĩa. Visual Basic cho phép chúng ta xử lý ổ đĩa, thư mục và file bằng hai phương pháp : qua những phương htức cũ như là điều lệnh Open, Write#, và qua một tập hợp các công cụ mới như FSO (File System Object) 1.2.9. Thiết kế cho việc thi hành và tính tương thích Visual Basic chia xẻ hầu hết những tính năng ngôn ngữ trong Visual Basic cho những ứng dụng, bao gồm trong Microsoft Office và nhiều ứng dụng khác. Visual Basic, VBScript, một ngôn ngữ script Internet, đều là tập hợp con của ngôn ngữ Visual Basic. 1.2.10. Phân phối những ứng dụng Sau khi tạo một ứng dụng Visual Basic, ta có thể tự do phân phối bất kỳ ứng dụng nào đã tạo bằng Visual Basic đến bất cứ ai dùng Microsoft Windows. Ta có thể phân phối ứng dụng trên đĩa, trên CD, qua mạng, trên intranet hoặc Internet. 1.3. Tóm tắt ngôn ngữ 1.3.1. Biến Biến được dùng để lưu tạm thời các giá trị tính toán trong quá trình xử lý chương trình. - Cách khai báo biến Visual Basic dùng cách khai báo biến trong chương trình như sau : Dim As Ta cũng có thể không cần khai báo kiểu biến (tức bỏ mệnh đề As phía sau), trong trường hợp này, biến có thể được dùng để lưu giữ một giá trị bất kỳ. - Quy tắc đặt tên biến Tên biến có chiều dài tối đa 255 ký tự. Phải bắt đầu bằng một chữ cái. Không đặt các khoảng trống và các ký hiệu (+ - * /…) trong tên biến. Không được trùng với từ khóa của ngôn ngữ. Tránh đặt tên trùng nhau. - Phạm vi sử dụng biến Phạm vi sử dụng biến tùy thuộc cách ta khai báo và chỗ ta đặt dòng lệnh khai báo biến. Nếu ta khai báo trong phần General, biến có thể được dùng ở bất kỳ đoạn lệnh nào trong from và cũng chỉ mất đi khi from được giải phóng khỏi bộ nhớ. Nếu ta khai báo biến trong phần viết lệnh cho một sự kiện của một đối tượng (tức khai báo giữa hai dòng Sub và End Sub của mã lệnh đó) thì biến chỉ tồn tại và dùng được trong phạm vi hai dòng Sub và End Sub đó mà thôi. Biến như vậy gọi là biến riêng hay biến nội bộ. Nếu ta dùng từ khóa Public thay cho Dim để khai báo biến , biến sẽ tồn tại trong suốt thời gian thực hiện chương trình và có thể dùng được trong bất cứ đoạn lệnh nào của chương trình. Biến như vậy gọi là biến chung hay biến toàn cục. 1.3.2. Thủ tục Cách định nghĩa thủ tục Một thủ tục trước khi muốn sử dụng nó phải định nghĩa nó. Dùng từ khóa Sub để khai báo thủ tục như thế này. Private/Pulic Sub … End Sub ‘Chỗ kết thúc thủ tục. Nếu ta khai báo bằng từ khóa Public, thủ tục có thể được gọi để sử dụng trong bất kỳ form nào trong chương trình. Nếu ta khai báo bằng từ khóa Private, thủ tục chỉ có thể dùng được trong form có chứa nó mà thôi - Thủ tục có truyền tham số Khi một thủ tục được gọi mà có truyền thêm một số giá trị vào, các giá trị này được gọi là các tham số của thủ tục đó. Để làm điều này, khi khai báo thủ tục ta cần ghi thêm nó sẽ nhận bao nhiêu tham số bằng cú pháp như sau : Private/Public Sub ( As ,…) 2. Tổng quan về cơ sở dữ liệu ACCESS Một cách tổng quát, một cơ sở dữ liệu của Microsoft Access bao gồm các thành phần dưới đây : 2.1. Table: Bảng dữ liệu Là thành phần cơ bản quan trọng của cơ sở dữ liệu, nó dùng để ghi nhận các số liệu cơ sở, cần thiết của cơ sở dữ liệu. Có thể nói tất cả quá trình xử lý dữ liệu đều dựa trên cơ sở các dữ liệu thô được lưu trữ trong các table. Trong 1 table số liệu được tổ chức thành các cột (fields or columns) và dòng (records). Mỗi cột ứng với một mục dữ liệu cần lưu trữ. Mỗi dòng chứa dữ liệu về một người hay vật cụ thể mà ta cần lưu trữ. Khi thiết kế các cột cho table, ta có thể ràng buộc điều kiện để Access kiểm tra các record nhập vào không bị sai sót. 2.2. Query : Bảng truy vấn Query là công cụ dùng để tính tóan và xử lý dữ liệu từ các table và các query khác có sẵn trong Cơ Sở Dữ Liệu. Dạng Query thường được sử dụng nhiều nhất là Select Query. Bằng lọai Query này ta có thể lọc ra những thông tin cần quan tâm từ nhiều bảng dữ liệu khác nhau của cơ sở dữ liệu, có thể phân tích và hiệu chỉnh dữ liệu ngay trên bản thân Query hay sử dụng làm cơ sở cho công việc khác. Ngoài ra còn có các lọai Query khác như Update Query để cập nhật, chỉnh sữa dữ liệu cho table, Crosstab Query tổng hợp số liệu, Make Table Query nhằm phục hồi dữ liệu nếu có sơ sót xảy ra cho table. Ráp nối dữ liệu vào table có Append Query, xóa dữ liệu Delete Query … Query như là một nền tảng để tạo ra các báo biểu có đặc tính định dạng cao hơn Table Sau khi đã tìm hiểu thế nào là hoạt động theo kiểu điều khiển bởi sự kiện và các hổ trợ của Access vàVisual Basic mà phiên bản mới nhất là Visual Basic 6.0, chúng ta sẽ thấy đây là một công cụ lập trình dễ chịu và có xu hướng trở thành môi trường lập trình hoàn hảo cho những năm sắp tới. 3. Thiết kế giao diện Có nhiều kiểu thiết kế đã được tạo ra nhằm phục vụ cho giao diện. Mỗi kiểu đều có khả năng và đặc tính khác nhau. Song một điều quan trọng là kiểu thiết kế phải phù hợp với nhiệm vụ được giao và với người sử dụng, người sẽ tham gia vào đối thoại với máy. Chỉ tiêu quan trọng cần có để đánh giá cho mỗi đối thoại là : Dễ sử dụng : Giao diện đó dễ sử dụng ngay cả với người sử dụng thiếu kinh nghiệm. Dễ học : Các lệnh và chức năng của giao diện dễ học. Tốc độ thao tác : Giao diện có hiệu quả trong hạn định của các bước thao tác, nhấn phím và thời gian trả lời. Kiểm soát : Người sử dụng thực hiện hoặc bắt đầu kiểm soát đàm thoại. Dễ phát triển : Phát triển các yêu cầu phải có kết quả như thế nào ? Việc thiết kế đối thoại bắt đầu bằng việc chia các chức năng giao diện hệ thống từ dạng sơ đồ dòng dữ liệu hệ thống sang dạng đơn thể. Nội dung của mỗi đơn thể được xác định bằng các thuật ngữ tiêu đề “Một giao diện chỉ thực một và chỉ một việc” Ví dụ : một sữ liệu được đưa vào, màn hình chấp nhận dữ liệu, nhưng nó không chấp nhận thao tác soạn thảo. Điều này sẽ được thực hiện bằng việc link đến một màn hình khác. Việc đơn thể hoá này cho phép thay đổi các giao diện được dễ dàng hơn và làm giảm các khó khăn trong bảo trì. 4. Các form chương trình và các sơ đồ thuật giải Chương trình được thiết kế bằng các sử dụng các FORM để cập nhật hay hiển thị dữ liệu. 4.1. FORM đăng nhập: Hình 1 Khi đăng nhập thì giáo viên phải nhập mật khẩu Kiểm tra Mật khẩu Vào hệ thống T F Báo lỗi 4.2. FORM cập nhật ngân hàng câu hỏi Hình 2 4.3.Tạo bộ đề ngẫu nhiên Hình 3 Sơ đồ thuật giải Ngân hàng câu hỏi N=Số bộ đề ,số câu Số câu=0 A1()=câu hỏi chương 1 ................................. An()=câu hỏi chương n Tạo câu hỏi Câu hỏi trùng nhau N> Số bộ đề Báo lỗi Tiếp tục chương trình F T T F F T 4.4.FORM nhập thông tin vào thi Hình 4 Kiểm tra TT Thông tin học viên Vào thi T F Báo lỗi Khi học viên chọn vào thi thì sẽ điền thông tin vào FORM trên, nếu giáo viên muốn có thể chọn thêm một số thông tin bằng cách CLICK vào nút CHI TIẾT ở trên, nếu không khi học viên vào thi máy sẽ tự động lấy bộ đề ngẫu nhiên và tham số mặc định, khi vào thi máy sẽ kiểm tra thêm mã học viên xem đúng không, nếu mã học viên trùng nhau máy sẽ thông báo. 4.5. FORM thi hết chương phần Hình 5 F T Vào thi Thông tin học viên Kiểm tra TT Báo lỗi Khi học viên chọn vào thi thì sẽ điền thông tin vào FORM trên, nếu giáo viên muốn có thể chọn thêm một số thông tin bằng cách CLICK vào nút CHI TIẾT ở trên, nếu không khi học viên vào thi máy sẽ tự động lấy bộ đề ngẫu nhiên và tham số mặc định, khi vào thi máy sẽ kiểm tra thêm mã học viên xem đúng không, nếu mã học viên trùng nhau máy sẽ thông báo.Nếu số câu hỏi thi lớn hơn số câu có trong chương thì máy sẽ thông báo. 4.6. FORM thi Hình 6 Khi vào thi, tất cả các câu hỏi được đưa ra thành từng cập trên các trang, mỗi trang thể hiện hai câu, mỗi câu có 4 phương án lựa chọn, học viên lựa chọn phương án nào thì tích vào một trong 4 câu hỏi đó. Để chuyển qua các câu khác học viên click chuột vào số câu được hiển thị phía trên, khi chuyển qua các trang kết quả của các câu đã làm đã được ghi lại, khi quay lại các trang đã làm nó vẫn thể hiện các câu đã chọn. Thời gian được đếm giật lùi được thể hiện phía trên. Nếu học viên làm xong mà chưa hết thời gian thì có thể thoát ra và máy sẽ tự động ghi kết quả. Trường hợp chưa làm xong mà hết thời gian thì máy sẽ tự động ghi và thoát. 4.7. In đề thi Khi cần thiết ta có thể in ra đề thi theo dạng dưới đây Hình 7 4.8. In danh sách kết quả thi Hình 8 Sau khi lựa chọn máy sẽ đưa ra kết quả bảng điểm dưới đây Hình 9 PHỤ LỤC MODULE CHƯƠNG TRÌNH TẠO BỘ CÂU HỎI NGẪU NHIÊN THEO TỈ LỆ PHẦN TRĂM CÁC CHƯƠNG Dim m1() As cauhoi Dim m2() As cauhoi Dim m3() As cauhoi Dim m4() As cauhoi Dim m5() As cauhoi Dim m6() As cauhoi Dim m7() As cauhoi Dim m8() As cauhoi Dim m9() As cauhoi Dim m10() As cauhoi Dim m11() As cauhoi Dim m12() As cauhoi Dim m13() As cauhoi Dim m14() As cauhoi Dim m15() As cauhoi Dim m16() As cauhoi Dim g(15) As Integer Dim tong() As Long Dim phantram(15) As Integer Dim i As Integer Dim xuly As Integer Dim dem As Long Private Sub cmdtao_Click() On Error GoTo ends datade.Recordset.MoveLast dem = datade.Recordset.RecordCount If dem 0 Then If MsgBox("Các đề cũ còn bạn có muốn xoá không?, nếu không muốn xoá, hay nhập số thứ tự của đề để khỏi trùng nhau", vbYesNo + 32, "Thông báo") = vbYes Then datade.Recordset.MoveFirst Do While Not datade.Recordset.EOF datade.Recordset.Delete datade.Recordset.MoveNext Loop dem = 0 End If End If dem = 0 prg.Max = CInt(Text1.Text) - CInt(txtsobode.Text) + 1 Label1.Caption = "Đang tạo...." xuly = 0 Call taobongaunhien(CInt(txtsobode.Text), CInt(Text1.Text), CInt(txtpt.Text), 5) Label1.Caption = "Kết thúc" Exit Sub ends: dem = 0 prg.Max = CInt(Text1.Text) - CInt(txtsobode.Text) + 1 Label1.Caption = "Đang tạo...." xuly = 0 Call taobongaunhien(CInt(txtsobode.Text), CInt(Text1.Text), CInt(txtpt.Text), 5) Label1.Caption = "Kết thúc" End Sub Private Sub cmdtrove_Click() Unload Me End Sub Private Sub cmdxem_Click() frmhienthide.Show End Sub Private Sub Text1_LostFocus() If Trim(Text1.Text) = Empty Then Text1.Text = str(CInt(txtsobode.Text) + 1) End If End Sub Private Sub txtpt_LostFocus() If Trim(txtpt.Text) = Empty Then txtpt.Text = "20" End If If CInt(txtpt.Text) Mod 2 0 Then txtpt.Text = str(CInt(txtpt.Text) + 1) End If End Sub Private Sub txtsobode_LostFocus() If Trim(txtsobode.Text) = Empty Then txtsobode.Text = "1" End If End Sub Private Sub txtsocau_Change() End Sub 'Private Sub txtsocau_LostFocus() ' If Trim(txtsocau.Text) = Empty Then ' txtsocau.Text = "5" ' End If 'End Sub Private Sub UpDown1_DownClick() On Error GoTo ends If CInt(Text1.Text) > (CInt(txtsobode.Text) + 1) Then Text1.Text = str(CInt(Text1.Text) - 1) End If Exit Sub ends: Text1.Text = str(CInt(txtsobode.Text) + 1) End Sub Private Sub UpDown1_UpClick() On Error GoTo ends If (CInt(Text1.Text) - CInt(txtsobode.Text)) < 60 Then Text1.Text = str(CInt(Text1.Text) + 1) End If Exit Sub ends: str (CInt(txtsobode.Text) + 1) End Sub Private Sub Form_Load() ' Set bode.txt = txtsobode ' Set cau.txt = txtsocau ' Set pt.txt = txtpt Me.Height = 3740 Me.Width = 5130 End Sub Private Sub UpDown3_DownClick() On Error GoTo ends If CInt(txtsocau.Text) > 1 Then txtsocau.Text = str(CInt(txtsocau.Text) - 1) End If Exit Sub ends: txtsocau.Text = "5" End Sub Private Sub UpDown3_UpClick() On Error GoTo ends If CInt(txtsocau.Text) < 20 Then txtsocau.Text = str(CInt(txtsocau.Text) + 1) End If Exit Sub ends: txtsocau.Text = "5" End Sub Private Sub UpDown5_DownClick() On Error GoTo ends If CInt(txtsobode.Text) > 1 Then txtsobode.Text = str(CInt(txtsobode.Text) - 1) End If Exit Sub ends: txtsobode.Text = "1" End Sub Private Sub UpDown5_UpClick() On Error GoTo ends If CInt(txtsobode.Text) < 100 Then txtsobode.Text = str(CInt(txtsobode.Text) + 1) If CInt(Text1.Text) <= CInt(txtsobode.Text) Then Text1.Text = str(CInt(txtsobode.Text) + 1) End If End If Exit Sub ends: txtsobode.Text = "1" End Sub Private Sub UpDown6_DownClick() On Error GoTo ends: If CInt(txtpt.Text) > 11 Then txtpt.Text = str(CInt(txtpt.Text) - 2) End If Exit Sub ends: txtpt.Text = "20" End Sub Private Sub UpDown6_UpClick() On Error GoTo ends If CInt(txtpt.Text) < 39 Then txtpt.Text = str(CInt(txtpt.Text) + 2) End If Exit Sub ends: txtpt.Text = "20" End Sub Private Sub taobongaunhien(Y As Integer, z As Integer, socau As Integer, phantram1 As Integer) Dim i As Long Dim n As Integer Dim tam As Integer Dim kt01 As Boolean Dim tam1 As Long '''''''''''''''''''''''''''''''''''''''''''''''''''' 'On Error Resume Next databien.Recordset.MoveFirst For i = 0 To 15 If databien.Recordset.Fields(i).Value 0 Then g(i) = databien.Recordset.Fields(i).Value End If Next i ''''''''''''''''''''''''''''''''''''''''''''''''''''''' For i = 0 To 15 If g(i) 0 Then phantram(i) = Round(((g(i) / 100) * socau), 1) End If Next i ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Call laygiatri '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Randomize ''''''''''' For i = Y To z If phantram(0) 0 Then n = 1 Do While n <= phantram(0) tam1 = 0 tam = UBound(m1) * Rnd() kt01 = False If n > 1 Then datade.Refresh datade.Recordset.MoveFirst Do While Not datade.Recordset.EOF tam1 = tam1 + 1 If Trim(datade.Recordset![cau_hoi]) = Trim(m1(tam).ch) And tam > dem Then kt01 = True Exit Do End If datade.Recordset.MoveNext Loop End If If kt01 = False Then datade.Recordset.AddNew datade.Recordset![sobode] = i datade.Recordset![cau_hoi] = m1(tam).ch datade.Recordset![pa1] = m1(tam).pa1 datade.Recordset![pa2] = m1(tam).pa2 datade.Recordset![pa3] = m1(tam).pa3 datade.Recordset![pa4] = m1(tam).pa4 datade.Recordset![pa đúng] = m1(tam).pad datade.Recordset.Update n = n + 1 End If Loop End If ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If phantram(1) 0 Then n = 1 Do While n <= phantram(1) tam1 = 0 tam = UBound(m2) * Rnd() kt01 = False If n > 1 Then datade.Refresh datade.Recordset.MoveFirst Do While Not datade.Recordset.EOF tam1 = tam1 + 1 If Trim(datade.Recordset![cau_hoi]) = Trim(m2(tam).ch) And tam1 > dem Then kt01 = True Exit Do End If datade.Recordset.MoveNext Loop End If If kt01 = False Then datade.Recordset.AddNew datade.Recordset![sobode] = i datade.Recordset![cau_hoi] = m2(tam).ch datade.Recordset![pa1] = m2(tam).pa1 datade.Recordset![pa2] = m2(tam).pa2 datade.Recordset![pa3] = m2(tam).pa3 datade.Recordset![pa4] = m2(tam).pa4 datade.Recordset![pa đúng] = m2(tam).pad datade.Recordset.Update n = n + 1 End If Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If phantram(2) 0 Then n = 1 Do While n <= phantram(2) tam1 = 0 tam = UBound(m3) * Rnd() kt01 = False If n > 1 Then datade.Refresh datade.Recordset.MoveFirst Do While Not datade.Recordset.EOF tam1 = tam1 + 1 If Trim(datade.Recordset![cau_hoi]) = Trim(m3(tam).ch) And tam1 > dem Then kt01 = True Exit Do End If datade.Recordset.MoveNext Loop End If If kt01 = False Then datade.Recordset.AddNew datade.Recordset![sobode] = i datade.Recordset![cau_hoi] = m3(tam).ch datade.Recordset![pa1] = m3(tam).pa1 datade.Recordset![pa2] = m3(tam).pa2 datade.Recordset![pa3] = m3(tam).pa3 datade.Recordset![pa4] = m3(tam).pa4 datade.Recordset![pa đúng] = m3(tam).pad datade.Recordset.Update n = n + 1 End If Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If phantram(3) 0 Then n = 1 Do While n <= phantram(3) tam1 = 0 tam = UBound(m4) * Rnd() kt01 = False If n > 1 Then datade.Refresh datade.Recordset.MoveFirst Do While Not datade.Recordset.EOF tam1 = tam1 + 1 If Trim(datade.Recordset![cau_hoi]) = Trim(m4(tam).ch) And tam1 > dem Then kt01 = True Exit Do End If datade.Recordset.MoveNext Loop End If If kt01 = False Then datade.Recordset.AddNew datade.Recordset![sobode] = i datade.Recordset![cau_hoi] = m4(tam).ch datade.Recordset![pa1] = m4(tam).pa1 datade.Recordset![pa2] = m4(tam).pa2 datade.Recordset![pa3] = m4(tam).pa3 datade.Recordset![pa4] = m4(tam).pa4 datade.Recordset![pa đúng] = m4(tam).pad datade.Recordset.Update n = n + 1 End If Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If phantram(4) 0 Then n = 1 Do While n <= phantram(4) tam1 = 0 tam = UBound(m5) * Rnd() kt01 = False If n > 1 Then datade.Refresh datade.Recordset.MoveFirst Do While Not datade.Recordset.EOF tam1 = tam1 + 1 If Trim(datade.Recordset![cau_hoi]) = Trim(m5(tam).ch) And tam1 > dem Then kt01 = True Exit Do End If datade.Recordset.MoveNext Loop End If If kt01 = False Then datade.Recordset.AddNew datade.Recordset![sobode] = i datade.Recordset![cau_hoi] = m5(tam).ch datade.Recordset![pa1] = m5(tam).pa1 datade.Recordset![pa2] = m5(tam).pa2 datade.Recordset![pa3] = m5(tam).pa3 datade.Recordset![pa4] = m5(tam).pa4 datade.Recordset![pa đúng] = m5(tam).pad datade.Recordset.Update n = n + 1 End If Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If phantram(5) 0 Then n = 1 Do While n <= phantram(5) tam1 = 0 tam = UBound(m6) * Rnd() kt01 = False If n > 1 Then datade.Refresh datade.Recordset.MoveFirst Do While Not datade.Recordset.EOF tam1 = tam1 + 1 If Trim(datade.Recordset![cau_hoi]) = Trim(m6(tam).ch) And tam1 > dem Then kt01 = True Exit Do End If datade.Recordset.MoveNext Loop End If If kt01 = False Then datade.Recordset.AddNew datade.Recordset![sobode] = i datade.Recordset![cau_hoi] = m6(tam).ch datade.Recordset![pa1] = m6(tam).pa1 datade.Recordset![pa2] = m6(tam).pa2 datade.Recordset![pa3] = m6(tam).pa3 datade.Recordset![pa4] = m6(tam).pa4 datade.Recordset![pa đúng] = m6(tam).pad datade.Recordset.Update n = n + 1 End If Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If phantram(6) 0 Then n = 1 Do While n <= phantram(6) tam1 = 0 tam = UBound(m7) * Rnd() kt01 = False If n > 1 Then datade.Refresh datade.Recordset.MoveFirst Do While Not datade.Recordset.EOF tam1 = tam1 + 1 If Trim(datade.Recordset![cau_hoi]) = Trim(m7(tam).ch) And tam1 > dem Then kt01 = True Exit Do End If datade.Recordset.MoveNext Loop End If If kt01 = False Then datade.Recordset.AddNew datade.Recordset![sobode] = i datade.Recordset![cau_hoi] = m7(tam).ch datade.Recordset![pa1] = m7(tam).pa1 datade.Recordset![pa2] = m7(tam).pa2 datade.Recordset![pa3] = m7(tam).pa3 datade.Recordset![pa4] = m7(tam).pa4 datade.Recordset![pa đúng] = m7(tam).pad datade.Recordset.Update n = n + 1 End If Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If phantram(7) 0 Then n = 1 Do While n <= phantram(7) tam1 = 0 tam = UBound(m8) * Rnd() kt01 = False If n > 1 Then datade.Refresh datade.Recordset.MoveFirst Do While Not datade.Recordset.EOF tam1 = tam1 + 1 If Trim(datade.Recordset![cau_hoi]) = Trim(m8(tam).ch) And tam1 > dem Then kt01 = True Exit Do End If datade.Recordset.MoveNext Loop End If If kt01 = False Then datade.Recordset.AddNew datade.Recordset![sobode] = i datade.Recordset![cau_hoi] = m8(tam).ch datade.Recordset![pa1] = m8(tam).pa1 datade.Recordset![pa2] = m8(tam).pa2 datade.Recordset![pa3] = m8(tam).pa3 datade.Recordset![pa4] = m8(tam).pa4 datade.Recordset![pa đúng] = m8(tam).pad datade.Recordset.Update n = n + 1 End If Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If phantram(8) 0 Then n = 1 Do While n <= phantram(8) tam1 = 0 tam = UBound(m9) * Rnd() kt01 = False If n > 1 Then datade.Refresh datade.Recordset.MoveFirst Do While Not datade.Recordset.EOF tam1 = tam1 + 1 If Trim(datade.Recordset![cau_hoi]) = Trim(m9(tam).ch) And tam1 > dem Then kt01 = True Exit Do End If datade.Recordset.MoveNext Loop End If If kt01 = False Then datade.Recordset.AddNew datade.Recordset![sobode] = i datade.Recordset![cau_hoi] = m9(tam).ch datade.Recordset![pa1] = m9(tam).pa1 datade.Recordset![pa2] = m9(tam).pa2 datade.Recordset![pa3] = m9(tam).pa3 datade.Recordset![pa4] = m9(tam).pa4 datade.Recordset![pa đúng] = m9(tam).pad datade.Recordset.Update n = n + 1 End If Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If phantram(9) 0 Then n = 1 Do While n <= phantram(9) tam1 = 0 tam = UBound(m10) * Rnd() kt01 = False If n > 1 Then datade.Refresh datade.Recordset.MoveFirst Do While Not datade.Recordset.EOF tam1 = tam1 + 1 If Trim(datade.Recordset![cau_hoi]) = Trim(m10(tam).ch) And tam1 > dem Then kt01 = True Exit Do End If datade.Recordset.MoveNext Loop End If If kt01 = False Then datade.Recordset.AddNew datade.Recordset![sobode] = i datade.Recordset![cau_hoi] = m10(tam).ch datade.Recordset![pa1] = m10(tam).pa1 datade.Recordset![pa2] = m10(tam).pa2 datade.Recordset![pa3] = m10(tam).pa3 datade.Recordset![pa4] = m10(tam).pa4 datade.Recordset![pa đúng] = m10(tam).pad datade.Recordset.Update n = n + 1 End If Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If phantram(10) 0 Then n = 1 Do While n <= phantram(10) tam1 = 0 tam = UBound(m11) * Rnd() kt01 = False If n > 1 Then datade.Refresh datade.Recordset.MoveFirst Do While Not datade.Recordset.EOF tam1 = tam1 + 1 If Trim(datade.Recordset![cau_hoi]) = Trim(m11(tam).ch) And tam1 > dem Then kt01 = True Exit Do End If datade.Recordset.MoveNext Loop End If If kt01 = False Then datade.Recordset.AddNew datade.Recordset![sobode] = i datade.Recordset![cau_hoi] = m11(tam).ch datade.Recordset![pa1] = m11(tam).pa1 datade.Recordset![pa2] = m11(tam).pa2 datade.Recordset![pa3] = m11(tam).pa3 datade.Recordset![pa4] = m11(tam).pa4 datade.Recordset![pa đúng] = m11(tam).pad datade.Recordset.Update n = n + 1 End If Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If phantram(11) 0 Then n = 1 Do While n <= phantram(11) tam1 = 0 tam = UBound(m12) * Rnd() kt01 = False If n > 1 Then datade.Refresh datade.Recordset.MoveFirst Do While Not datade.Recordset.EOF tam1 = tam1 + 1 If Trim(datade.Recordset![cau_hoi]) = Trim(m12(tam).ch) And tam1 > dem Then kt01 = True Exit Do End If datade.Recordset.MoveNext Loop End If If kt01 = False Then datade.Recordset.AddNew datade.Recordset![sobode] = i datade.Recordset![cau_hoi] = m12(tam).ch datade.Recordset![pa1] = m12(tam).pa1 datade.Recordset![pa2] = m12(tam).pa2 datade.Recordset![pa3] = m12(tam).pa3 datade.Recordset![pa4] = m12(tam).pa4 datade.Recordset![pa đúng] = m12(tam).pad datade.Recordset.Update n = n + 1 End If Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If phantram(12) 0 Then n = 1 Do While n <= phantram(12) tam1 = 0 tam = UBound(m13) * Rnd() kt01 = False If n > 1 Then datade.Refresh datade.Recordset.MoveFirst Do While Not datade.Recordset.EOF tam1 = tam1 + 1 If Trim(datade.Recordset![cau_hoi]) = Trim(m13(tam).ch) And tam1 > dem Then kt01 = True Exit Do End If datade.Recordset.MoveNext Loop End If If kt01 = False Then datade.Recordset.AddNew datade.Recordset![sobode] = i datade.Recordset![cau_hoi] = m13(tam).ch datade.Recordset![pa1] = m13(tam).pa1 datade.Recordset![pa2] = m13(tam).pa2 datade.Recordset![pa3] = m13(tam).pa3 datade.Recordset![pa4] = m13(tam).pa4 datade.Recordset![pa đúng] = m13(tam).pad datade.Recordset.Update n = n + 1 End If Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If phantram(13) 0 Then n = 1 Do While n <= phantram(13) tam1 = 0 tam = UBound(m14) * Rnd() kt01 = False If n > 1 Then datade.Refresh datade.Recordset.MoveFirst Do While Not datade.Recordset.EOF tam1 = tam1 + 1 If Trim(datade.Recordset![cau_hoi]) = Trim(m14(tam).ch) And tam1 > dem Then kt01 = True Exit Do End If datade.Recordset.MoveNext Loop End If If kt01 = False Then datade.Recordset.AddNew datade.Recordset![sobode] = i datade.Recordset![cau_hoi] = m14(tam).ch datade.Recordset![pa1] = m14(tam).pa1 datade.Recordset![pa2] = m14(tam).pa2 datade.Recordset![pa3] = m14(tam).pa3 datade.Recordset![pa4] = m14(tam).pa4 datade.Recordset![pa đúng] = m14(tam).pad datade.Recordset.Update n = n + 1 End If Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If phantram(14) 0 Then n = 1 Do While n <= phantram(14) tam1 = 0 tam = UBound(m15) * Rnd() kt01 = False If n > 1 Then datade.Refresh datade.Recordset.MoveFirst Do While Not datade.Recordset.EOF tam1 = tam1 + 1 If Trim(datade.Recordset![cau_hoi]) = Trim(m15(tam).ch) And tam1 > dem Then kt01 = True Exit Do End If datade.Recordset.MoveNext Loop End If If kt01 = False Then datade.Recordset.AddNew datade.Recordset![sobode] = i datade.Recordset![cau_hoi] = m15(tam).ch datade.Recordset![pa1] = m15(tam).pa1 datade.Recordset![pa2] = m15(tam).pa2 datade.Recordset![pa3] = m15(tam).pa3 datade.Recordset![pa4] = m15(tam).pa4 datade.Recordset![pa đúng] = m15(tam).pad datade.Recordset.Update n = n + 1 End If Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If phantram(15) 0 Then n = 1 Do While n <= phantram(15) tam1 = 0 tam = UBound(m16) * Rnd() kt01 = False If n > 1 Then datade.Refresh datade.Recordset.MoveFirst Do While Not datade.Recordset.EOF tam1 = tam1 + 1 If Trim(datade.Recordset![cau_hoi]) = Trim(m16(tam).ch) And tam1 > dem Then kt01 = True Exit Do End If datade.Recordset.MoveNext Loop End If If kt01 = False Then datade.Recordset.AddNew datade.Recordset![sobode] = i datade.Recordset![cau_hoi] = m16(tam).ch datade.Recordset![pa1] = m16(tam).pa1 datade.Recordset![pa2] = m16(tam).pa2 datade.Recordset![pa3] = m16(tam).pa3 datade.Recordset![pa4] = m16(tam).pa4 datade.Recordset![pa đúng] = m16(tam).pad datade.Recordset.Update n = n + 1 End If Loop End If dem = dem + socau ''''''''''''' xuly = xuly + 1 prg.Value = xuly Next i End Sub Private Sub laygiatri() Dim k As Integer ''''''''''''''''''''''''''''''''''''''''''''''''''''''' If g(0) 0 Then k = 0 Data1.Recordset.MoveLast ReDim m1(Data1.Recordset.RecordCount - 1) Data1.Recordset.MoveFirst Do While Not Data1.Recordset.EOF m1(k).ch = Data1.Recordset![cau_hoi] m1(k).pa1 = Data1.Recordset![pa1] m1(k).pa2 = Data1.Recordset![pa2] m1(k).pa3 = Data1.Recordset![pa3] m1(k).pa4 = Data1.Recordset![pa4] m1(k).pad = Data1.Recordset![pa đúng] k = k + 1 Data1.Recordset.MoveNext Loop End If ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If g(1) 0 Then k = 0 Data2.Recordset.MoveLast ReDim m2(Data2.Recordset.RecordCount - 1) Data2.Recordset.MoveFirst Do While Not Data2.Recordset.EOF m2(k).ch = Data2.Recordset![cau_hoi] m2(k).pa1 = Data2.Recordset![pa1] m2(k).pa2 = Data2.Recordset![pa2] m2(k).pa3 = Data2.Recordset![pa3] m2(k).pa4 = Data2.Recordset![pa4] m2(k).pad = Data2.Recordset![pa đúng] k = k + 1 Data2.Recordset.MoveNext Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If g(2) 0 Then k = 0 Data3.Recordset.MoveLast ReDim m3(Data3.Recordset.RecordCount - 1) Data3.Recordset.MoveFirst Do While Not Data3.Recordset.EOF m3(k).ch = Data3.Recordset![cau_hoi] m3(k).pa1 = Data3.Recordset![pa1] m3(k).pa2 = Data3.Recordset![pa2] m3(k).pa3 = Data3.Recordset![pa3] m3(k).pa4 = Data3.Recordset![pa4] m3(k).pad = Data3.Recordset![pa đúng] k = k + 1 Data3.Recordset.MoveNext Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If g(3) 0 Then k = 0 Data4.Recordset.MoveLast ReDim m4(Data4.Recordset.RecordCount - 1) Data4.Recordset.MoveFirst Do While Not Data4.Recordset.EOF m4(k).ch = Data4.Recordset![cau_hoi] m4(k).pa1 = Data4.Recordset![pa1] m4(k).pa2 = Data4.Recordset![pa2] m4(k).pa3 = Data4.Recordset![pa3] m4(k).pa4 = Data4.Recordset![pa4] m4(k).pad = Data4.Recordset![pa đúng] k = k + 1 Data4.Recordset.MoveNext Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If g(4) 0 Then k = 0 Data5.Recordset.MoveLast ReDim m5(Data5.Recordset.RecordCount - 1) Data5.Recordset.MoveFirst Do While Not Data5.Recordset.EOF m5(k).ch = Data5.Recordset![cau_hoi] m5(k).pa1 = Data5.Recordset![pa1] m5(k).pa2 = Data5.Recordset![pa2] m5(k).pa3 = Data5.Recordset![pa3] m5(k).pa4 = Data5.Recordset![pa4] m5(k).pad = Data5.Recordset![pa đúng] k = k + 1 Data5.Recordset.MoveNext Loop '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If g(5) 0 Then k = 0 Data6.Recordset.MoveLast ReDim m6(Data6.Recordset.RecordCount - 1) Data6.Recordset.MoveFirst Do While Not Data6.Recordset.EOF m6(k).ch = Data6.Recordset![cau_hoi] m6(k).pa1 = Data6.Recordset![pa1] m6(k).pa2 = Data6.Recordset![pa2] m6(k).pa3 = Data6.Recordset![pa3] m6(k).pa4 = Data6.Recordset![pa4] m6(k).pad = Data6.Recordset![pa đúng] k = k + 1 Data6.Recordset.MoveNext Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If g(6) 0 Then k = 0 Data7.Recordset.MoveLast ReDim m7(Data7.Recordset.RecordCount - 1) Data7.Recordset.MoveFirst Do While Not Data7.Recordset.EOF m7(k).ch = Data7.Recordset![cau_hoi] m7(k).pa1 = Data7.Recordset![pa1] m7(k).pa2 = Data7.Recordset![pa2] m7(k).pa3 = Data7.Recordset![pa3] m7(k).pa4 = Data7.Recordset![pa4] m7(k).pad = Data7.Recordset![pa đúng] k = k + 1 Data7.Recordset.MoveNext Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If g(7) 0 Then k = 0 Data8.Recordset.MoveLast ReDim m8(Data8.Recordset.RecordCount - 1) Data8.Recordset.MoveFirst Do While Not Data8.Recordset.EOF m8(k).ch = Data8.Recordset![cau_hoi] m8(k).pa1 = Data8.Recordset![pa1] m8(k).pa2 = Data8.Recordset![pa2] m8(k).pa3 = Data8.Recordset![pa3] m8(k).pa4 = Data8.Recordset![pa4] m8(k).pad = Data8.Recordset![pa đúng] k = k + 1 Data8.Recordset.MoveNext Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If g(8) 0 Then k = 0 Data9.Recordset.MoveLast ReDim m9(Data9.Recordset.RecordCount - 1) Data9.Recordset.MoveFirst Do While Not Data9.Recordset.EOF m9(k).ch = Data9.Recordset![cau_hoi] m9(k).pa1 = Data9.Recordset![pa1] m9(k).pa2 = Data9.Recordset![pa2] m9(k).pa3 = Data9.Recordset![pa3] m9(k).pa4 = Data9.Recordset![pa4] m9(k).pad = Data9.Recordset![pa đúng] k = k + 1 Data9.Recordset.MoveNext Loop End If '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If g(9) 0 Then k = 0 Data10.Recordset.MoveLast ReDim m10(Data10.Recordset.RecordCount - 1) Data10.Recordset.MoveFirst Do While Not Data10.Recordset.EOF m10(k).ch = Data10.Recordset![cau_hoi] m10(k).pa1 = Data10.Recordset![pa1] m10(k).pa2 = Data10.Recordset![pa2] m10(k).pa3 = Data10.Recordset![pa3] m10(k).pa4 = Data10.Recordset![pa4] m10(k).pad = Data10.Recordset![pa đúng] k = k + 1 Data10.Recordset.MoveNext Loop End If ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If g(10) 0 Then k = 0 Data11.Recordset.MoveLast ReDim m11(Data11.Recordset.RecordCount - 1) Data11.Recordset.MoveFirst Do While Not Data11.Recordset.EOF m11(k).ch = Data11.Recordset![cau_hoi] m11(k).pa1 = Data11.Recordset![pa1] m11(k).pa2 = Data11.Recordset![pa2] m11(k).pa3 = Data11.Recordset![pa3] m11(k).pa4 = Data11.Recordset![pa4] m11(k).pad = Data11.Recordset![pa đúng] k = k + 1 Data11.Recordset.MoveNext Loop End If ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If g(11) 0 Then k = 0 Data12.Recordset.MoveLast ReDim m10(Data12.Recordset.RecordCount - 1) Data12.Recordset.MoveFirst Do While Not Data12.Recordset.EOF m12(k).ch = Data12.Recordset![cau_hoi] m12(k).pa1 = Data12.Recordset![pa1] m12(k).pa2 = Data12.Recordset![pa2] m12(k).pa3 = Data12.Recordset![pa3] m12(k).pa4 = Data12.Recordset![pa4] m12(k).pad = Data12.Recordset![pa đúng] k = k + 1 Data12.Recordset.MoveNext Loop End If ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If g(12) 0 Then k = 0 Data13.Recordset.MoveLast ReDim m13(Data13.Recordset.RecordCount - 1) Data13.Recordset.MoveFirst Do While Not Data13.Recordset.EOF m13(k).ch = Data13.Recordset![cau_hoi] m13(k).pa1 = Data13.Recordset![pa1] m13(k).pa2 = Data13.Recordset![pa2] m13(k).pa3 = Data13.Recordset![pa3] m13(k).pa4 = Data13.Recordset![pa4] m13(k).pad = Data13.Recordset![pa đúng] k = k + 1 Data13.Recordset.MoveNext Loop End If ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If g(13) 0 Then k = 0 Data14.Recordset.MoveLast ReDim m14(Data14.Recordset.RecordCount - 1) Data14.Recordset.MoveFirst Do While Not Data10.Recordset.EOF m14(k).ch = Data14.Recordset![cau_hoi] m14(k).pa1 = Data14.Recordset![pa1] m14(k).pa2 = Data14.Recordset![pa2] m14(k).pa3 = Data14.Recordset![pa3] m14(k).pa4 = Data14.Recordset![pa4] m14(k).pad = Data14.Recordset![pa đúng] k = k + 1 Data14.Recordset.MoveNext Loop End If ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If g(14) 0 Then k = 0 Data15.Recordset.MoveLast ReDim m15(Data15.Recordset.RecordCount - 1) Data15.Recordset.MoveFirst Do While Not Data10.Recordset.EOF m15(k).ch = Data15.Recordset![cau_hoi] m15(k).pa1 = Data15.Recordset![pa1] m15(k).pa2 = Data15.Recordset![pa2] m15(k).pa3 = Data15.Recordset![pa3] m15(k).pa4 = Data15.Recordset![pa4] m15(k).pad = Data15.Recordset![pa đúng] k = k + 1 Data15.Recordset.MoveNext Loop End If ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If g(15) 0 Then k = 0 Data16.Recordset.MoveLast ReDim m16(Data16.Recordset.RecordCount - 1) Data16.Recordset.MoveFirst Do While Not Data16.Recordset.EOF m16(k).ch = Data16.Recordset![cau_hoi] m16(k).pa1 = Data16.Recordset![pa1] m16(k).pa2 = Data16.Recordset![pa2] m16(k).pa3 = Data16.Recordset![pa3] m16(k).pa4 = Data16.Recordset![pa4] m16(k).pad = Data16.Recordset![pa đúng] k = k + 1 Data16.Recordset.MoveNext Loop End If End If End Sub KẾT LUẬN Sau một thời gian nỗ lực thiết kế và hoàn thiện hệ thống chương trình, đề tài "Xây dựng chương trình thi trắc nghiệm môn Tin học Đại cương cho các Trường Trung Học Quân Sự" đã được hoàn thành. Qua quá trình áp dụng thử nghiệm trong thực tế, hệ thống đã đạt được một số kết quả nhất định sau: + Hệ thống đã tin học hoá phần lớn các khâu trong kỳ thi trắc nghiệm Tin học Đại cương tổ chức theo chương, phần và hết môn. Các quá trình từ việc tổ chức thi, ra đề thi, thu bài thi và chấm điểm đã được chương trình xử lý một cách nhanh chóng, chính xác. + Giao diện của chương trình được thiết kế bằng một hệ thống FORM thao tác tương tự trong WINDOWS, rất thân thiện với người dùng. Giúp cho người chưa thành thạo về tin học cũng sử dụng chương trình một cách dễ dàng. Tuy vậy do trình độ kiến thức còn hạn chế, thời gian xây dựng chương trình lại không nhiều, nên hệ thống chương trình còn nhiều sai sót và chưa được hoàn chỉnh. Em rất mong được sự chỉ bảo của thầy cô và các bạn để hệ thống chương trình trong tương lai sẽ được hoàn thiện hơn. Định hướng phát triển chương trình trong tương lai: Trong thời gian tới, hệ thống chương trình sẽ cho phép cùng một lúc, có thể tiến hành nhiều môn thi trắc nghiệm, với nhiều dạng đề thi khác nhau, áp dụng cho các loại học viên thi. Đồng thời các dạng câu hỏi trắc nghiệm sẽ phong phú hơn, không chỉ có một loại câu hỏi dạng nhiều phương án trả lời như trong bài khoá đã đề cập. TÀI LIỆU THAM KHẢO Giáo trình Tin Học Đại Cương dành cho các trường Quân Sự - Nguyễn Văn Xuất – Lê Xuân Đình Cơ sở dữ liệu - Đỗ Trung Tuấn - NXB Giáo dục 1998. Lý thuyết cơ sở dữ liệu – TS Nguyễn Bá Tường. Phân tích và thiết kế hệ thống - Đào Thanh Tĩnh - Giáo trình Học viện Kỹ thuật Quân sự. Quản trị dữ liệu với Access 97 - Nhà xuất bản Thống kê. Microsoft Visual Basic - TS Nguyễn Hữu Mộng - Khoa Công nghệ Thông tin - Học viện Kỹ thuật Quân sự. Trắc nghiệm và đo lường đánh giá thành quả học tập - Dương Thiệu Tốn - Bộ Giáo dục và Đào tạo 1995. Những cơ sở kỹ thuật trắc nghiệm - Lâm Quang Thiệp - Vụ Đại học năm 1994. Tham khảo trên Internet của các Trường Đại học.

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

  • docxTin04.docx