1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồ án Java trắc nghiệm nhanh

29 1,1K 4

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 29
Dung lượng 406,5 KB

Nội dung

Ngôn ngữ lập trình java ra đời và được các nhà nghiên cứu của Công ty Sun Microsystem giới thiệu vào năm 1995. Sau khi ra đời không lâu, ngôn ngữ lập trình này đã được sử dụng rộng rãi và phổ biến đối với các lập trình viên chuyên nghiệp cũng như các nhà phát triển phần mềm. Gần đây ngôn ngữ lập trình java đã được đưa vào giảng dạy ở các cơ sở đào tạo lập trình viên chuyên nghiệp. Một số trường đại học ở Việt Nam dạy môn lập trình java như một chuyên đề tự chọn cho các sinh viên công nghệ thông tin giai đoạn chuyên ngành. Sau thời gian học lập trình java trên lớp với kinh nghiệm thực tế mà chúng có được. Nhóm chúng em quyết định chọn đề tài “Xây dựng chương trình Trắc Nghiệm Nhanh với ngôn ngữ Java”. Nội dung báo cáo tập trung vào những kiến thức căn bản nhất của lập trình. Thi trắc nghiệm là một hình thức thi để kiểm tra tŕnh độ, kiến thức, khả năng nhạy bén của từng học sinh, sinh viên ở tất cả các trường, nơi tuyển sinh của các cơ quan ban ngành (thậm chí cả các công ty ,xí nghiệp cũng áp dụng hình thức thi trắc nghiệm để tuyển nhân viên ) dựa trên nhiều đề khác nhau và việc ra đề cũng ít gặp khó khăn hơn cũng như việc đánh giá kết quả ít tốn thời gian hơn.

Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân LỜI NÓI ĐẦU Ngôn ngữ lập trình java đời nhà nghiên cứu Công ty Sun Microsystem giới thiệu vào năm 1995 Sau đời không lâu, ngôn ngữ lập trình sử dụng rộng rãi phổ biến lập trình viên chuyên nghiệp nhà phát triển phần mềm Gần ngôn ngữ lập trình java đưa vào giảng dạy sở đào tạo lập trình viên chuyên nghiệp Một số trường đại học Việt Nam dạy môn lập trình java chuyên đề tự chọn cho sinh viên công nghệ thông tin giai đoạn chuyên ngành Sau thời gian học lập trình java lớp với kinh nghiệm thực tế mà chúng có Nhóm chúng em định chọn đề tài “Xây dựng chương trình Trắc Nghiệm Nhanh với ngôn ngữ Java” Nội dung báo cáo tập trung vào kiến thức lập trình Thi trắc nghiệm hình thức thi để kiểm tra tŕnh độ, kiến thức, khả nhạy bén học sinh, sinh viên tất trường, nơi tuyển sinh quan ban ngành (thậm chí công ty ,xí nghiệp áp dụng hình thức thi trắc nghiệm để tuyển nhân viên ) dựa nhiều đề khác việc đề gặp khó khăn việc đánh giá kết tốn thời gian Nhóm 10 – Lớp DA08TTD Trang Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân Chương I Giới thiệu Có nhiều hình thức thi khác áp dụng trường Đại học, cao đẳng, trung học, trung tâm, đào tạo từ xa nhiều lĩnh vực khác… Trong thi viết hình thức thi phổ biến từ trước đến áp dụng ngành giáo dục, tất học sinh, sinh viên làm đề giống nhau, dẫn đến việc đánh giá kết cụ thể học sinh, sinh viên không xác, không công gian lận, nhiều giống nhau, quay cóp… lúc thi Còn học sinh, sinh viên thi đề khác dẫn đến việc đề thi gặp khó khăn cho người đề việc đánh giá kết phải nhiều thời gian, lý mà Thi trắc nghiệm áp dụng vài năm gần Thi trắc nghiệm hình thức thi để kiểm tra trình độ, kiến thức, khả nhạy bén học sinh, sinh viên tất trường, nơi tuyển sinh quan ban ngành (thậm chí công ty, xí nghiệp áp dụng hình thức thi trắc nghiệm để tuyển nhân viên ) dựa nhiều đề khác việc đề gặp khó khăn việc đánh giá kết tốn thời gian Do mà hình thức thi trắc nghiệm dùng phổ biến trường dân lập, trung tâm, đào tạo từ xa vài năm gần Ngày với phát triển ngày mạnh mẽ khoa học máy tính nói chung mạng máy tính nói riêng, đáng ý mạng toàn cầu Internet Sự đời mạng Internet đă đưa người đến với giới máy tính, hoà nhập với giới Với mạng Internet trao đổi thông tin, gởi Email nước ngoài, truyền liệu, truy xuất liệu vv, cách nhanh chóng, an toàn hiệu Giáo dục ngày phát triển, có nhiều loại hình đào tạo khác công lập, dân lập, trung tâm, đào tạo từ xa nhiều trường khác Cho nên, sinh viên học nhiều trường khác nhau, sinh viên có nhu cầu học thi thông qua mạng nhằm giảm bớt thời gian đến trường Để giải vấn đề khó khăn phức tạp việc đề thi việc thi sinh viên thông qua mạng máy tính, Chương trình trắc nghiệm nhanh giúp người sử dụng quản lý số vấn đề cách tự động, nhằm trợ giúp cho người sử dụng đề thi trắc nghiệm thi cách dể dàng, nhanh gọn, an toàn hiệu qua mạng máy tính Nhóm 10 – Lớp DA08TTD Trang Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân Chương II Cơ sở lý thuyết Sơ lược mạng máy tính hệ phân tán 1.1 Mạng máy tính 1.1.1 Mạng máy tính gì? Mạng máy tính tập hợp máy tính kết nối với đường truyền vật lý theo cấu trúc để đáp ứng số yêu cầu người dùng 1.1.2 Vai trò mạng máy tính Ngày với lượng lớn thông tin, nhu cầu xử lý thông tin ngày cao Mạng máy tính trở nên quen thuộc chúng ta, lĩnh vực khoa học, quân sự, quốc phòng, thương mại, dịch vụ, giáo dục Hiện nhiều nơi mạng trở thành nhu cầu thiếu Người ta thấy việc kết nối máy tính thành mạng cho khả to lớn như: Sử dụng chung tài nguyên: tài nguyên mạng (như thiết bị, chương trình, liệu) trở thành tài nguyên chung thành viên mạng tiếp cận mà không quan tâm tới tài nguyên đâu Tăng độ tin cậy hệ thống: người ta dễ dàng bảo trì máy móc lưu trữ (backup) liệu chung có trục trặc hệ thống chúng khôi phục nhanh chóng Trong trường hợp có trục trặc trạm làm việc người ta sử dụng trạm khác thay Nâng cao chất lượng hiệu khai thác thông tin: thông tin sử dụng chung mang lại cho người sử dụng khả tổ chức lại công việc với thay đổi chất như: - Ðáp ứng nhu cầu hệ thống ứng dụng kinh doanh đại - Cung cấp thống liệu - Tăng cường lực xử lý nhờ kết hợp phận phân tán - Tăng cường truy nhập tới dịch vụ mạng khác cung cấp giới 1.1.3 Phân loại mạng máy tính Nhóm 10 – Lớp DA08TTD Trang Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân 1.1.3.1 Dựa khoảng cách địa lý: Mạng cục (Local Area Network - LAN): có phạm vi hẹp, bán kính khoảng vài chục km Mạng đô thị (Metropolitan Area Network - MAN): phạm vi rộng hơn, với bán kính nhỏ 100km Mạng diện rộng (Wide Area Network - WAN): phạm vi mạng vượt biên giới quốc gia, lục địa Mạng toàn cầu(Global Area Network - GAN): phạm vi trải rộng toàn giới 1.1.3.2 Dựa kiến trúc mạng Mạng kiểu Bus (Bus Topology) Mạng hình Sao (Star Topology) Mạng Vòng tròn (Ring Topology) 1.2 Hệ phân tán Định nghĩa Có nhiều định nghĩa hệ phân tán: Định nghĩa 1: Hệ phân tán tập hợp máy tính tự trị kết nối với mạng máy tính cài đặt phần mềm hệ phân tán Định nghĩa 2: Hệ phân tán hệ thống có chức liệu phân tán trạm (máy tính) kết nối với mạng máy tính Định nghĩa 3: Hệ phân tán tập máy tính độc lập giao tiếp với người dùng hệ thống thống nhất, toàn vẹn Như vậy, nói : Hệ phân tán = mạng máy tính + phần mềm hệ phân tán Phân loại hệ phân tán: Trước đây, hệ phân tán chia thành ba loại : hệ điều hành hệ phân tán, sở liệu hệ phân tán hệ thống tính toán hệ phân tán.Ngày nay, hệ phân tán phân chia sau: - Hệ phân tán mang tính hệ thống: hệ điều hành phân tán - Hệ phân tán mang tính ứng dụng: hệ thống truyền tin phân tán 1.2 Mục tiêu hệ phân tán 1.2.1 Kết nối người sử dụng tài nguyên Giải toán chia sẻ tài nguyên hệ thống (resource sharing) Nhóm 10 – Lớp DA08TTD Trang Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân 1.2.2 Tính suốt Ẩn giấu rời rạc nhược điểm có hệ phân tán người sử dụng (end-user ) nhà lập trình ứng dụng (application programmer) Theo tiêu chuẩn ISO cho hệ phân tán ISO / IS / 10746 tên "Open distributed processing reference model" 1995 cụ thể hóa tám dạng suốt: Trong suốt truy cập (Access transparency): che giấu khác biệt cách biểu diễn cách truy cập tài nguyên Trong suốt vị trí (Location transparency): che giấu vị trí tài nguyên Hai dạng suốt vừa trình bày gọi chung suốt mạng (network transparency) Trong suốt di trú (Migration transparency): che giấu khả chuyển vị trí tài nguyên Trong suốt việc định vị lại (Relocation transparency): che giấu việc di chuyển tài nguyên sử dụng Trong suốt nhân (Replication transparency): che giấu tình trạng tình trạng sử dụng tài nguyên Che giấu che sẻ tài nguyên tương tranh (Concurency transparency) Trong suốt cố (Failure transparency): che giấu lỗi hệ thống có Trong suốt khả di chuyển tài nguyên (Persistence transparency): che giấu việc di chuyển tài nguyên từ nhớ vào nhớ ngược lại 1.2.3 Tính mở (Openness) Hệ phân tán gọi mở cung cấp dịch vụ theo quy tắc chuẩn mô tả cú pháp ngữ nghĩa dịch vụ Thông thường hệ phân tán dịch vụ thường đặc tả qua giao diện ngôn ngữ đặc tả giao diện (Interface Definition Language- IDL) Vì quan tâm đến cú pháp Nó cho phép dịch vụ khác chung sống Nếu giao diện hệ phân tán đặc tả đầy đủ đắn Xét hai khái niệm hệ phân tán khái niệm liên tác (Interroperability) khái niệm chuyển mang (portability) Liên tác: cài đặt hệ thống thành phần hệ thống từ nhà sản xuất khác làm việc với thông qua liên tác Nhóm 10 – Lớp DA08TTD Trang Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân Chuyển mang: nhờ chuyển mang mà ứng dụng phát triển cho hệ phân tán A thực không cần thay đổi hệ phân tán B khác, với điều kiện cài đặ giao diện A 1.2.4 Tính co giãn (Scalability) Một hệ phân tán gọi có tính co giãn thích nghi với thay đổi quy mô hệ thống Thể khía cạnh sau: - Dễ bổ sung người sử dụng tài nguyên hệ thống - Khi hệ thống thay đổi quy mô mặt địa lý dẫn đến thay đổi vị trí địa lý người sử dụng tài nguyên - Hệ thống có thay đổi quy mô quản trị Nếu hệ phân tán có tính co giãn thường ảnh hưởng đến hiệu hệ thống (hiệu hệ thống hiệu lực hoạt động đối tượng) Có ba giải pháp phổ dụng để giải vấn đề co giãn hệ phân tán: - Ẩn giấu - Phân tán: phân nhỏ thành phần hệ thống phân bố chúng phạm vi hệ thống (quản lý phân cấp) Ví dụ DNS xác định theo cách phân cấp miền lớn thành miền Với phương pháp giải đề thêm người dùng hay tài nguyên vào hệ thống - Nhân bản: nhân thành phần hệ thống Ví dụ tài nguyên liệu đặt vị trí khác hệ thống 1.3 Các khái niệm phần cứng 1.3.1 Phân loại máy tính Có hai loại máy tính: - Các loại máy tính có chia sẻ nhớ (Shared memory): loại máy đa xử lý (multiproccessor) - Các máy tính không chia sẻ nhớ (Private memory): hệ thống multicomputors Trong loại lại chia mạng kết nối bus - based có đường kết nối switch-bas có nhiều đường kết nối từ máy sang máy khác 1.3.2 Hệ / hệ không Nhóm 10 – Lớp DA08TTD Trang Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân - Hệ thống nhất: mạng máy tính sử dụng công nghệ, xử lý nhau, truy cập đến nhớ giống Thường dùng hệ thống có tính toán song song - Hệ không nhất: máy tính khác kết nối với 1.4 Các khái niệm phần mềm 1.4.1 DOS (distributed OS) Là hệ điều hành cho hệ multiproccessor hệ homogenous multicomputer Mục tiêu ẩn giấu cung cấp dịch vụ quản trị tài nguyên Đặc điểm dịch vụ thực lời triệu gọi từ xa 1.4.2 NOS (Network OS) Là hệ điều hành cho hệ thống heterogenous multicomputer (LAN, WAN) Mục tiêu NOS cung cấp dịch vụ từ xa 1.4.3 Middleware Là tầng phụ nằm tầng dịch vụ NOS tầng ứng dụng phân tán 1.5 Truyền thông (Communication) 1.5.1 Các giao thức phân tầng (Layered protocols) Một mô hình phân tầng thông dụng mô hình OSI tầng Mỗi tầng có giao thức riêng cho - Tầng ứng dụng - Tầng trình diễn - Tầng phiên - Tầng vận chuyển - Tầng mạng - Tầng liên kết liệu - Tầng vật lý Một cải tiến hệ phân tán gộp tầng trình diễn tầng phiên thành tầng tầng middle ware Do ta phải xây dựng giao thức tương ứng cho tầng middleware Có mô hình dịch vụ middleware mà ta xét sau đây: - Gọi thủ tục từ xa RPC (Remote Procedure Call) - Triệu gọi đối tượng từ xa (Remote Object Invocation) - Middleware hướng thông điệp (Message - oriented Middleware) Nhóm 10 – Lớp DA08TTD Trang Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân - Middleware hướng dòng (Stream - oriented Middleware) 1.6 Gọi thủ tục từ xa (Remote procedure call - RPC) 1.6.1 Tổng quan RPC Khi tiến trình máy A muốn thực thủ tục nằm máy B khác thực lời gọi thủ tục từ xa tới máy B Thủ tục thực máy B dựa tham số truyền đến từ máy A kết truyền trở lại cho máy A tương ứng Trong mô hình client - server lời gọi thủ tục từ xa thực qua bước sau: - Tiến trình muốn thực thủ tục máy client gọi client stub - Client stub tạo tin có lời gọi đến hệ điều hành client - Hệ điều hành máy client gửi tin tới hệ điều hành máy server - Hệ điều hành server gửi tin tới server stub - Server stub lấy thông tin gói tin gọi server tương ứng - Server thực công việc yêu cầu trả kết cho server stub - Server stub đóng gói kết vào tin gọi hệ điều hành server - Hệ điều hành máy server gửi tin kết hệ điều hành máy client - Hệ điều hành máy client gửi tin cho client stub - Client stub mở gói tin kết trả cho client Trong đó, client stub server stub máy client server thành phần nhằm giảm nhẹ công việc cho client server, làm cho hệ thống hoạt động cách suốt Các giao thức mạng 2.1 Giao thức IP Giao thức IP giao thức hướng liệu sử dụng máy chủ nguồn đích để truyền liệu liên mạng chuyển mạch gói Dữ liệu liên mạng IP gửi theo khối gọi gói (packet datagram) Cụ thể, IP không cần thiết lập đường truyền trước máy chủ gửi gói tin cho máy khác mà trước chưa liên lạc với Giao thức IP cung cấp dịch vụ gửi liệu không đảm bảo, nghĩa không đảm bảo gói liệu Gói liệu đến nơi mà không nguyên Nhóm 10 – Lớp DA08TTD Trang Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân vẹn, đến không theo thứ tự (so với gói khác gửi hai máy nguồn đích đó), bị trùng lặp bị hoàn toàn Nếu phần mềm ứng dụng cần bảo đảm, cung cấp từ nơi khác, thường từ giao thức giao vận nằm phía IP Các thiết bị định tuyến liên mạng chuyển tiếp gói tin IP qua mạng tầng liên kết liệu kết nối với Việc đảm bảo gửi liệu có nghĩa chuyển mạch gói có thiết kế đơn giản (Lưu ý mạng bỏ gói tin, làm đổi thứ tự làm hỏng nhiều gói tin, người dùng thấy hoạt động mạng trở nên Hầu hết thành phần mạng cố gắng tránh để xảy tình trạng Đó lý giao thức gọi cố gắng cao Tuy nhiên, lỗi xảy không thường xuyên hiệu đủ xấu đến mức người dùng nhận thấy được.) Giao thức IP thông dụng mạng Internet công cộng ngày Giao thức tầng mạng thông dụng ngày IPv4; giao thức IP phiên IPv6 đề nghị IPv4: Internet hết dần địa IPv4, IPv4 sử dụng 32 bit để đánh địa (tạo khoảng tỷ địa chỉ); IPv6 dùng địa 128 bit, cung cấp tối đa khoảng 3.4×1038 địa Các phiên từ đến bị hạn chế, không sử dụng Phiên dùng làm giao thức dòng (stream) thử nghiệm Còn có phiên khác, chúng thường dành giao thức thử nghiệm không sử dụng rộng rãi Địa IP chia thành số giới hạn từ - 255 Mỗi số lưu byte - > IP có kích thước 4byte, chia thành lớp địa Có lớp A, B, C Nếu lớp A, ta có 16 triệu địa chỉ, lớp B có 65536 địa Phần lớn địa lớp A sở hữu công ty hay tổ chức Một ISP thường sở hữu vài địa lớp B C 2.2 Giao thức UDP TCP/IP họ giao thức gọi họ giao thức IP, bao gồm bốn tầng Cần nhớ TCP/IP giao thức mà thực họ giao thức, bao gồm giao thức mức thấp khác IP, TCP, UDP UDP nằm tầng giao vận, phía giao thức IP Tầng giao vận cung cấp khả truyền tin mạng thông qua gateway Nó sử dụng địa IP để gửi gói tin Internet Nhóm 10 – Lớp DA08TTD Trang Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân mạng thông qua trình điều khiển thiết bị khác TCP UDP phần họ giao thức TCP/IP; giao thức có ưu nhược điểm riêng Giao thức UDP giao thức đơn giản, phi liên kết cung cấp dịch vụ tầng giao vận với tốc độ nhanh Nó hỗ trợ liên kết một-nhiều thường sử dụng thường xuyên liên kết một-nhiều cách sử dụng datagram multicast unicast UDP sử dụng cổng để ánh xạ liệu đến vào tiến trình cụ thể chạy máy tính UDP định đường cho packet vị trí xác định cách sử dụng số hiệu cổng xác định header datagram Các cổng biểu diễn số 16-bit, cổng nằm dải từ đến 65535 Các cổng xem điểm cuối liên kết logic, chia thành ba loại sau: o Các cổng phổ biến: Từ đến 1023 o Các cổng đăng ký: 1024 đến 49151 o Các cổng động/dành riêng 49152 đến 65535 Khi ứng dụng dựa giao thức UDP gửi liệu tới host khác mạng, UDP thêm vào header có độ dài byte chứa số hiệu cổng nguồn đích, với tổng chiều dài liệu thông tin checksum IP thêm vào header riêng vào đâu datagram UDP để tạo lên datagram IP Rất nhiều ứng dụng Internet sử dụng UDP Dựa ưu nhược điểm UDP kết luận UDP có ích khi: • Sử dụng cho phương thức truyền broadcasting multicasting muốn truyền tin với nhiều host • Kích thước datagram nhỏ trình tự đoạn không quan trọng • Không cần thiết lập liên kết • Ứng dụng không gửi liệu quan trọng • Không cần truyền lại gói tin • Băng thông mạng đóng vai trò quan trọng Việc cài đặt ứng dụng UDP Java cần có hai lớp DatagramPacket DatagramSocket DatagramPacket đóng gói byte liệu vào gói tin UDP gọi datagram cho phép ta mở datagram nhận Một DatagramSocket đồng thời thực hai nhiệm vụ nhận gửi gói tin Để gửi liệu, ta đặt liệu DatagramPacket gửi gói tin cách sử dụng DatagramSocket Để nhận Nhóm 10 – Lớp DA08TTD Trang 10 Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân DatagramSocket: mở kết nối UDP socket, dùng để nhận gởi gói tin DatagramPacket Đọc nội dung DatagramPacket Nhóm 10 – Lớp DA08TTD Trang 15 Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân Gởi gói tin DatagramPacket Nhóm 10 – Lớp DA08TTD Trang 16 Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân Gửi liệu UDP Socket: - Tạo DatagramSocket cổng DatagramSocket socket = new DatagramSocket(8044); - Tạo DatagramPacket DatagramPacket packet = new DatagramPacket(new byte[256], 256); - Gán địa IP cổng cho Package - Ghi liệu vào Packet - Gửi packet socket socket.send(packet) Nhóm 10 – Lớp DA08TTD Trang 17 Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân Chương III MÔ TẢ ỨNG DỤNG Giới thiệu ứng dụng Ứng dụng trắc nghiệm nhanh cho phép nhiều Client kết nối đến Server chơi lúc Mỗi câu hỏi có thời gian trả lời phút Máy trả lời nhanh cộng điểm tương ứng 30, 20, 10 Nếu trả lời sai không cộng điểm Lập trình phần mềm thi trắc nghiệm nhanh kiến thức máy tính nối mạng với với yêu cầu sau: - Sử dụng kỹ thuật lập trình đối tượng - Cho phép đội chơi nhập vào tên đội, thông tin đội - Máy chủ (server) truyền nội dung câu hỏi đến máy đội chơi (client) - Các máy đội chơi (client) chọn phương án trả lời vài so sánh phương án với phương án mà máy chủ (server) gửi đến Kịch sử dụng ứng dụng - Trước tiên máy chủ (Server) chạy mở cổng kết nối 8989 máy trạm (Client) kết nối vào - Các Client kết nối vào Server thông qua cổng Server mở đăng nhập Nick Name mà không cần đăng ký Tên Client gửi đến Server để Server quản lý - Khi Client kết nối vào Server, Server bấm vào nút bắt đầu Khi câu hỏi gửi đến Clien, câu hỏi có thời gian trả lời 30 giây - Cùng lúc gửi câu hỏi đến Client, Server gửi đáp án để Client so sánh với câu trả lời Client Nếu Client trả lời 10 giây đầu cộng 30 điểm, trả lời 10 giây cộng 20 điểm trả lời 10 giây cuối cộng 10 điểm Nếu trả lời sai hết thời gian mà không trả lời không cộng điểm - Mỗi lượt chơi có câu hỏi, kết thúc lượt chơi Server tổng kết số điểm người chơi Kiến trúc ứng dụng a Mô hình tổng thể Nhóm 10 – Lớp DA08TTD Trang 18 Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân Handle Handle Thread Thread Run() Run() Server Server Server Socket Server Socket OutputStream InputStream Socket Socket incoming incoming Nghe client Nghe client run Nghe Client run Nghe Client Socket Socket Incoming Incoming Client Client Socket Server Socket Server Nghe Server Nghe Server Nghe Server Nghe Server Gửi Server Gửi Server Socket Server Socket Server Thread nghe Thread nghe Run() Run() Thread gửi Thread gửi Run() Run() Run() Run() rrsrs rrsrs b Gói server - Gởi câu hỏi xuống chotrtr clients đợi kết - Khi clients trả lời, server so sánh điểm xác nhận client trả lời nhanh c Gói client - Hiển thị câu hỏi từ Server - Chọn đáp án gởi cho Server Mô hình truyền thông điệp Client Server - Ứng với chức năng, tạo mô hình truyền thông điệp - Ví dụ: Chức Đăng nhập, chức Truyền File, chức Chơi game - Mô tả đáp ứng hệ thống nhận thông điệp Nhóm 10 – Lớp DA08TTD Trang 19 Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân Chương IV CÀI ĐẶT VÀ KẾT QUẢ THỬ NGHIỆM Cài đặt 1.1 Ngôn ngữ lập trình - SQL 2000 - Java 1.2.Mô tả lớp, phương thức quan trọng lớp - Lớp Server: Lắng nge thông diệp từ Client, gửi phản hồi cho Client Các phương thức: public class Server extends JFrame implements ActionListener { ServerSocket ss; Hashtable danhSachUser; ArrayList socketList = new ArrayList(); JTextArea textDisplay= new JTextArea(); JButton btnbatdau=new JButton("Bắt đầu"); JScrollPane jSP=new JScrollPane(textDisplay); public Server(String title) { super(title); this.setSize(400, 400); this.setVisible(true); this.setResizable(false); this.add(jSP,BorderLayout.CENTER); this.add(btnbatdau,BorderLayout.SOUTH); btnbatdau.addActionListener(this); textDisplay.setAutoscrolls(true); try{ ServerSocket ss= new ServerSocket(8989); textDisplay.append("-> Server mở cổng phục vụ 8989\n"); danhSachUser = new Hashtable(); while(true){ Socket socketMoi = ss.accept(); socketList.add(socketMoi); System.out.println("Chap nhan socket " + socketMoi.toString()); ListenToClient nghe = new ListenToClient(socketMoi, danhSachUser,this); Thread t = new Thread(nghe); t.start(); } }catch(Exception e){ e.printStackTrace(); } } public void addTextToDisplay(String str){ textDisplay.append("-> " + str + '\n'); } public void actionPerformed(ActionEvent e){ if(e.getSource()==btnbatdau){ Nhóm 10 – Lớp DA08TTD Trang 20 Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân try { SendToClient goi =new SendToClient( socketList); Thread t1=new Thread(goi); t1.start(); System.out.println("Bat dau goi cau hoi"); } catch (Exception ex) { ex.printStackTrace(); } } } public static void main(String args[]){ Server sr=new Server("Trắc nghiệm - Server"); } - Lớp SendToClient Dùng để gửi thông tiệp cho Client Các phương thức: public class SendToClient implements Runnable { Socket soc= null; ArrayList socketList =null; Hashtable danhsachUser; public SendToClient(ArrayList soclist) { socketList = soclist; } public void run() { System.out.println("Bat dau goi cau hoi cho client"); try { Connect myKN =new Connect(); ResultSet rs = myKN.docBang(); while(rs.next()) { String cauhoi=rs.getString("CauHoi"); for(Socket soc:socketList){ System.out.println("Goi cho "+ soc.toString()); System.out.println(cauhoi); PrintStream out = new PrintStream(soc.getOutputStream(),true); out.println("NEWQUESTION"); out.println(cauhoi); } Thread.sleep(32000); } myKN.Close(); } catch (Exception ex) { ex.printStackTrace(); } } } - Lớp ListenToClient Nhóm 10 – Lớp DA08TTD Trang 21 Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân Dùng để lắng nghe thông điệp từ Client, Các phương thức: public class ListenToClient implements Runnable{ Socket soc; Hashtable danhsachUser; BufferedReader in; PrintWriter out; Server sr; String winner = ""; int total = 0; int songuoi = 0; int dem = 0; public ListenToClient(Socket _soc, Hashtable _danhsachUser, Server _sr){ try{ sr=_sr; soc=_soc; danhsachUser = _danhsachUser; in = new BufferedReader(new InputStreamReader(soc.getInputStream())); out = new PrintWriter(soc.getOutputStream(),true); }catch(Exception e){ e.printStackTrace(); } } public void run(){ try{ while (true){ String caulenh = in.readLine(); System.out.println(caulenh); if (caulenh.toUpperCase().startsWith("THAMGIA")){ themUserMoi(caulenh); } if(caulenh.toUpperCase().startsWith("GOIDIEM")){ System.out.println("da goi diem sang server"); System.out.println(caulenh); StringTokenizer strToken = new StringTokenizer(caulenh); strToken.nextToken(); String user = strToken.nextToken(); String diem = strToken.nextToken(); sr.addTextToDisplay("số điểm " + user + "đạt : " + diem); dem ++; if(Integer.parseInt(diem) > total) { total = Integer.parseInt(diem); winner = user; } if(dem == songuoi) { String phanhoi = "WIN " + winner; // goi phan hoi cho tat ca user Nhóm 10 – Lớp DA08TTD Trang 22 Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân Enumeration enu2 = danhsachUser.elements(); try{ while (enu2.hasMoreElements()){ Socket mySoc = (Socket)enu2.nextElement(); PrintWriter myOut = new PrintWriter(mySoc.getOutputStream(),true); System.out.println(phanhoi); myOut.println(phanhoi); } }catch(Exception e){ e.printStackTrace(); } } } } } catch(Exception e){ e.printStackTrace(); } } public void themUserMoi(String caulenh){ StringTokenizer strToken = new StringTokenizer(caulenh); strToken.nextToken(); String nickname = strToken.nextToken(); danhsachUser.put(nickname, soc); songuoi++; System.out.println("User moi tham gia: " + nickname +" "+ soc.toString()); String str = "Nickname: "+ nickname + " Đã kết nối"; sr.addTextToDisplay(str); Enumeration enu = danhsachUser.keys(); String phanhoi = "DANHSACHUSER "; //doc danh sach nickname while (enu.hasMoreElements()){ // System.out.print((String)enu.nextElement() + " "); phanhoi += (String)enu.nextElement()+ " "; } // goi phan hoi cho tat ca user Enumeration enu2 = danhsachUser.elements(); try{ while (enu2.hasMoreElements()){ Socket mySoc = (Socket)enu2.nextElement(); PrintWriter myOut = new PrintWriter(mySoc.getOutputStream(),true); System.out.println(phanhoi); myOut.println(phanhoi); } }catch(Exception e){ e.printStackTrace(); } Nhóm 10 – Lớp DA08TTD Trang 23 Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân } } - Lớp Connect: Dùng để kết nói với sở dử liệu, phương thức: public class Connect { private Connection conn=null; public Connect() { try{ String url="sun.jdbc.odbc.JdbcOdbcDriver"; Class.forName(url); String dbUrl="jdbc:odbc:cauhoi_dn"; conn=DriverManager.getConnection(dbUrl); }catch(Exception e){ e.printStackTrace(); } } public ResultSet docBang() throws Exception{ ResultSet rs=null; try{ Statement stmt=conn.createStatement(); String query="select *from tb_cauhoi"; rs=stmt.executeQuery(query); }catch(Exception e){ e.printStackTrace(); } return rs; } public void Close()throws Exception{ conn.close(); } } - Lớp Client: Dùng để gửi thông diệp nhập phản hồi từ Server, phương thức: public class Client extends JFrame implements ActionListener{ JList myList; int diemTong; String temp; DefaultListModel model; Socket soc; String curUser; boolean ketthuc = false; public Client() { initComponents(); buttonGroup1.add(jRadioButton1); buttonGroup1.add(jRadioButton2); buttonGroup1.add(jRadioButton3); Nhóm 10 – Lớp DA08TTD Trang 24 Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân buttonGroup1.add(jRadioButton4); try{ soc = new Socket("localhost",8989); ListenToServer nghe = new ListenToServer(soc, this); Thread t = new Thread(nghe); t.start(); //GetFromServer nhan=new GetFromServer(soc, this); //Thread t1=new Thread(nhan); //t1.start(); }catch (Exception e){ e.printStackTrace(); } model = new DefaultListModel(); model.add(0, "Danh sách người chơi"); myList = new JList(model); this.jScrollPane1.setViewportView(myList); // -setDefaultCloseOperation(EXIT_ON_CLOSE); } - Lớp ListenToserver: Dùng để lắng nge thông điệp từ Server, phương thức: public class ListenToServer extends JOptionPane implements Runnable { Socket soc; BufferedReader in; PrintWriter out; Client giaodien; boolean flag=false; public ListenToServer(Socket _soc , Client _giaodien ){ try{ soc=_soc; giaodien = _giaodien; in = new BufferedReader(new InputStreamReader(soc.getInputStream())); out = new PrintWriter(soc.getOutputStream(),true); }catch(Exception e){ e.printStackTrace(); } } public void run(){ try{ while(true){ String caulenh = in.readLine(); System.out.println(caulenh); if (caulenh.toUpperCase().startsWith("DANHSACHUSER")){ capnhatDanhSachUser(caulenh); } if(caulenh.toUpperCase().startsWith("NEWQUESTION")){ String laycauhoi = in.readLine(); System.out.println(laycauhoi); Nhóm 10 – Lớp DA08TTD Trang 25 Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân if(laycauhoi.trim()=="COMPLETE"){ JOptionPane.showMessageDialog(this, "congio cau hoi nua kohng"); String thongbao="COMPLETE"; CatCauHoi cch=new CatCauHoi(thongbao); giaodien.capnhatCauHoi(cch); } else{ CatCauHoi cch=new CatCauHoi(laycauhoi); giaodien.capnhatCauHoi(cch); Thread t = new Thread(new BoDemNguoc(giaodien.getTimeText())); t.start(); } } if(caulenh.toUpperCase().startsWith("WIN")) { giaodien.xuLiWin(caulenh); } } }catch(Exception e){ e.printStackTrace(); } } public void capnhatDanhSachUser(String caulenh){ giaodien.capNhatDanhSachUser(caulenh); } - Lớp SendToServer Dùng để gửi thông điệp cho Server, phương thức: class SendToServer implements Runnable{ Socket socket = null; Client giaodien; public SendToServer(Socket _s,Client _giaodien){ socket = _s; giaodien=_giaodien; } public void run(){ try { //Nhap tu ban phim mot dong PrintWriter out = new PrintWriter(socket.getOutputStream(), true); out.println("GOIDIEM " + giaodien.curUser + " " + giaodien.getDiem()); //out.println(giaodien.getDiem()); System.out.println(giaodien.getDiem()); } catch (Exception e) { System.err.println("Socket closed"); } } } Nhóm 10 – Lớp DA08TTD Trang 26 Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân Kết thử nghiệm: Các giao diện chương trình - Giao diện Server - Giao diện Client Nhóm 10 – Lớp DA08TTD Trang 27 Xây dựng chương trình trắc nghiệm nhanh Java Nhóm 10 – Lớp DA08TTD GVHD: Nguyễn Bảo Ân Trang 28 Xây dựng chương trình trắc nghiệm nhanh Java GVHD: Nguyễn Bảo Ân Chương V KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Ưu điểm - Nắm cách tạo thành phần xử lí đối tượng - Biết cách kết hợp đối tượng để tạo giao diện - Nắm vững câu lệnh Java - Có thể chơi lúc với nhiều máy - Có thể tổng kết điểm người chơi, đưa người thắng - Được hướng dẫn tận tình thầy - Thành viên nhóm nhiều, tích cực làm - Thời gian làm tương đối nhiều - Tài liệu hướng dẫn phong phú Khuyết điểm - Các đoạn mã chưa thực tối ưu - Do hạn chế kinh nghiệm kiến thức nên chương trình nhiều thiếu sót chúng em mong bảo thầy đóng gớp ý kiến bạn để báo cáo hoàn thiện - Chưa hiều sâu ngôn ngữ Java nên gặp khó khăn viết code - Giao diện chưa tiện dụng Hướng phát triển - Cần bổ sung nhiều chức để chương trình trắc nghiệm hoàn thiện - Tìm hiểu thêm ngôn ngữ java - Mở rộng chương trình đưa chương trình vào thực tế Nhóm 10 – Lớp DA08TTD Trang 29 [...]... DA08TTD Trang 26 Xây dựng chương trình trắc nghiệm nhanh bằng Java GVHD: Nguyễn Bảo Ân 2 Kết quả thử nghiệm: Các giao diện chính của chương trình - Giao diện Server - Giao diện Client Nhóm 10 – Lớp DA08TTD Trang 27 Xây dựng chương trình trắc nghiệm nhanh bằng Java Nhóm 10 – Lớp DA08TTD GVHD: Nguyễn Bảo Ân Trang 28 Xây dựng chương trình trắc nghiệm nhanh bằng Java GVHD: Nguyễn Bảo Ân Chương V KẾT LUẬN... dựng chương trình trắc nghiệm nhanh bằng Java GVHD: Nguyễn Bảo Ân DatagramSocket: mở kết nối UDP socket, dùng để nhận hoặc gởi gói tin DatagramPacket Đọc nội dung DatagramPacket Nhóm 10 – Lớp DA08TTD Trang 15 Xây dựng chương trình trắc nghiệm nhanh bằng Java GVHD: Nguyễn Bảo Ân Gởi gói tin DatagramPacket Nhóm 10 – Lớp DA08TTD Trang 16 Xây dựng chương trình trắc nghiệm nhanh bằng Java GVHD: Nguyễn Bảo... DatagramPacket packet = new DatagramPacket(new byte[256], 256); - Gán địa chỉ IP và cổng cho Package - Ghi dữ liệu vào Packet - Gửi packet đi bằng socket socket.send(packet) Nhóm 10 – Lớp DA08TTD Trang 17 Xây dựng chương trình trắc nghiệm nhanh bằng Java GVHD: Nguyễn Bảo Ân Chương III MÔ TẢ ỨNG DỤNG 1 Giới thiệu ứng dụng Ứng dụng trắc nghiệm nhanh cho phép nhiều Client kết nối đến Server chơi cùng lúc Mỗi... 10 – Lớp DA08TTD Trang 20 Xây dựng chương trình trắc nghiệm nhanh bằng Java GVHD: Nguyễn Bảo Ân try { SendToClient goi =new SendToClient( socketList); Thread t1=new Thread(goi); t1.start(); System.out.println("Bat dau goi cau hoi"); } catch (Exception ex) { ex.printStackTrace(); } } } public static void main(String args[]){ Server sr=new Server( "Trắc nghiệm - Server"); } - Lớp SendToClient Dùng để... File, chức năng Chơi game - Mô tả đáp ứng của hệ thống khi nhận được một thông điệp Nhóm 10 – Lớp DA08TTD Trang 19 Xây dựng chương trình trắc nghiệm nhanh bằng Java GVHD: Nguyễn Bảo Ân Chương IV CÀI ĐẶT VÀ KẾT QUẢ THỬ NGHIỆM 1 Cài đặt 1.1 Ngôn ngữ lập trình - SQL 2000 - Java 1.2.Mô tả các lớp, các phương thức quan trọng của mỗi lớp - Lớp Server: Lắng nge các thông diệp từ Client, và gửi các phản hồi cho... sau đó bạn gửi và nhận dữ liệu ( dưới dạng âm thanh) bằng cách nói và nghe qua điện thoại của bạn -TCP đảm bảo chuyển giao dữ liệu tới nơi nhận một cách đáng tin cậy và đúng Nhóm 10 – Lớp DA08TTD Trang 12 Xây dựng chương trình trắc nghiệm nhanh bằng Java GVHD: Nguyễn Bảo Ân thứ tự -UDP là giao thức không cần "kết nối" giữa máy gửi và máy nhận Chính vì vậy được gọi là connectionless Trong giao thức UDP... liên kết dữ Nhóm 10 – Lớp DA08TTD Trang 11 Xây dựng chương trình trắc nghiệm nhanh bằng Java GVHD: Nguyễn Bảo Ân liệu của mạng mà máy tính đang nằm trong đó) Sau đó, TCP chuyển các gói tin thu được tới giao thức IP để gửi nó qua một liên mạng tới mô đun TCP tại máy tính đích TCP kiểm tra để đảm bảo không có gói tin nào bị thất lạc bằng cách gán cho mỗi gói tin một "số thứ tự" (sequence number) Số thứ tự... các đội chơi nhập vào tên đội, thông tin về đội - Máy chủ (server) truyền nội dung câu hỏi đến các máy của các đội chơi (client) - Các máy của các đội chơi (client) chọn phương án trả lời vài so sánh phương án đó với phương án mà máy chủ (server) gửi đến 2 Kịch bản sử dụng của ứng dụng - Trước tiên máy chủ (Server) sẽ chạy và mở ra cổng kết nối 8989 để cho các máy trạm (Client) kết nối vào - Các Client... Mỗi lượt chơi sẽ có 5 câu hỏi, kết thúc lượt chơi Server sẽ tổng kết số điểm của các người chơi 3 Kiến trúc ứng dụng a Mô hình tổng thể Nhóm 10 – Lớp DA08TTD Trang 18 Xây dựng chương trình trắc nghiệm nhanh bằng Java GVHD: Nguyễn Bảo Ân Handle Handle Thread Thread Run() Run() Server Server Server Socket Server Socket OutputStream InputStream Socket Socket incoming incoming Nghe client Nghe client run...Xây dựng chương trình trắc nghiệm nhanh bằng Java GVHD: Nguyễn Bảo Ân dữ liệu, ta nhận một đối tượng DatagramPacket từ DatagramSocket và sau đó đọc nội dung của gói tin UDP không có bất kỳ khái niệm nào về liên kết giữa hai host Một socket

Ngày đăng: 06/10/2016, 13:54

TỪ KHÓA LIÊN QUAN

w