Khóa luận Xây dựng website dạy ngôn ngữ lập trình c# dành cho người mới bắt đầu

ĐẠI HỌC HUẾ TRƢỜNG ĐẠI HỌC KINH TẾ KHOA HỆ THỐNG THÔNG TIN KINH TẾ  KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC XÂY DỰNG WEBSITE DẠY NGÔN NGỮ LẬP TRÌNH C# DÀNH CHO NGƢỜI MỚI BẮT ĐẦU Sinh viên thực hiện: Trƣơng Thị Hồng Nhung Giảng viên hƣớng dẫn Lớp: K46 Tin học kinh tế ThS. Lê Viết Mẫn Niên khóa: 2012 – 2016 Huế, tháng 05 năm 2016 LỜI CÁM ƠN Để thực hiện khóa luận này, em xin gửi lời cảm ơn chân thành đến Trường Đại học Kinh tế - Đại học Huế, toàn bộ thầy cô giáo, bạn bè đã

pdf113 trang | Chia sẻ: huong20 | Ngày: 08/01/2022 | Lượt xem: 370 | Lượt tải: 0download
Tóm tắt tài liệu Khóa luận Xây dựng website dạy ngôn ngữ lập trình c# dành cho người mới bắt đầu, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
giúp đỡ em thực hiện đề tài này một cách thuận lợi nhất. Trước tiên, em xin cảm ơn Nhà trường đã tạo điều kiện thuận lợi nhất để em hoàn thành chương trình khóa luận của mình. Đây là cơ hội để em có dịp được học hỏi, tìm hiểu và quan trọng nhất là so sánh được sự khác biệt giữa lý thuyết được học ở nhà trường và thực tế. Điều này sẽ giúp cho em rất nhiều trong tương lai, khi em ra trường và muốn tìm kiếm nhiều cơ hội để phát huy khả năng. Em cũng xin gửi lời cảm ơn chân thành đến Thạc sĩ Lê Viết Mẫn, giảng viên Khoa Hệ thống Thông tin Kinh tế đã tận tình hướng dẫn, giúp đỡ em rất nhiều từ những bước ban đầu cho đến khóa luận được hoàn thành tốt nhất có thể. Cuối cùng em xin cảm ơn đến tất cả các thầy cô giáo trong Khoa Hệ thống Thông tin Kinh tế, đến gia đình người thân và tất cả bạn bè đã đóng góp ý kiến và giúp đỡ cho đề tài của em được hoàn thành tốt đẹp. Em xin chân thành cảm ơn! Huế, tháng 05 năm 2016 Sinh viên: Trương Thị Hồng Nhung Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 1 MỤC LỤC MỤC LỤC ...................................................................................................................... 1 DANH MỤC CÁC CHỮ VIẾT TẮT VÀ KÝ HIỆU .................................................. 3 DANH MỤC CÁC BẢNG BIỂU .................................................................................. 3 DANH MỤC CÁC HÌNH VẼ ....................................................................................... 4 MỞ ĐẦU ......................................................................................................................... 5 1. Lý do chọn đề tài ........................................................................................................ 5 2.Mục tiêu của đề tài ..................................................................................................... 5 3.Đối tƣợng và phạm vi nghiên cứu ............................................................................. 6 3.1.Đối tƣợng nghiên cứu .............................................................................................. 6 3.2.Phạm vi nghiên cứu ................................................................................................. 6 4.Phƣơng pháp nghiên cứu ........................................................................................... 6 5.Nội dung khoá luận .................................................................................................... 7 CHƢƠNG 1: THỰC TRẠNG GIẢNG DẠY NGÔN NGỮ LẬP TRÌNH C# VÀ PHƢƠNG PHÁP GIẢNG DẠY ĐIỆN TỬ ................................................................. 8 1.1.Ngôn ngữ lập trình C# ............................................................................................ 8 1.2.Thực trạng việc giảng dạy ngôn ngữ lập trình C# ............................................. 12 1.3.Phƣơng pháp giảng dạy điện tử ........................................................................... 13 CHƢƠNG 2: THIẾT KẾ BÀI GIẢNG NGÔN NGỮ LẬP TRÌNH C# DÀNH CHO NGƢỜI MỚI BẮT ĐẦU ................................................................................... 18 2.1.Mục tiêu và nguyên tắc thiết kế bài giảng ........................................................... 18 2.2.Kết cấu loạt bài giảng ............................................................................................ 19 2.3.Nội dung một số bài giảng ..................................................................................... 22 2.3.1.Phần 1 – Giới thiệu ............................................................................................. 22 2.3.2.Phần 2 – Các khái niệm cơ bản ......................................................................... 23 Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 2 2.3.3.Phần 3 – Biến số .................................................................................................. 24 2.3.4.Phần 4 – Kiểu logic ............................................................................................. 26 2.3.5.Phần 5 – Lệnh if else ........................................................................................... 27 2.3.6.Phần 6 – Mảng .................................................................................................... 29 2.3.7.Phần 7 – Chuỗi (string) ...................................................................................... 30 2.3.8.Phần 8 – Hàm ...................................................................................................... 31 2.3.9.Phần 9 – Vòng lặp ............................................................................................... 32 2.3.10.Phần 10: Cấu trúc ............................................................................................. 33 2.3.11.Phần 11: Kiểu liệt kê ........................................................................................ 35 CHƢƠNG 3: PHÂN TÍCH, THIẾT KẾ VÀ XÂY DỰNG WEBSITE DẠY NGÔN NGỮ LẬP TRÌNH C# DÀNH CHO NGƢỜI MỚI BẮT ĐẦU ............................... 37 3.1.Mô tả website dạy ngôn ngữ lập trình C# dành cho ngƣời mới bắt đầu .......... 37 3.2.Phân tích website dạy ngôn ngữ lập trình C# dành cho ngƣời mới bắt đầu ... 39 3.2.1.Sơ đồ chức năng kinh doanh (BFD – Business Function Diagram) .............. 40 3.2.2.Sơ đồ ngữ cảnh (CD – Context Diagram) ........................................................ 41 3.2.3.Sơ đồ luồng dữ liệu (DFD – Data Flow Diagram) ........................................... 42 3.2.4.Tích hợp ASPNETDB vào CSDL của website dạy ngôn ngữ lập trình C# dành cho ngƣời mới bắt dầu ....................................................................................... 44 3.3.Thiết kế và xây dựng website dạy ngôn ngữ lập trình C# dành cho ngƣời mới bắt đầu .......................................................................................................................... 46 KẾT LUẬN .................................................................................................................. 55 TÀI LIỆU THAM KHẢO ........................................................................................... 56 PHỤ LỤC ..................................................................................................................... 57 Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 3 DANH MỤC CÁC CHỮ VIẾT TẮT VÀ KÝ HIỆU Ký hiệu Diễn giải CSDL Cơ sở dữ liệu IDE Integrated Development Environment SQL Structured Query Language DANH MỤC CÁC BẢNG BIỂU Bảng 1.1: Những điểm giống và khác nhau giữa C# với Java và C++ ........................... 9 Bảng 1.2: Từ khóa của ngôn ngữ C# ............................................................................. 11 Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 4 DANH MỤC CÁC HÌNH VẼ Hình 2.1: Giao diện tương tác với người dùng .............................................................. 19 Hình 2.2: Giao diện bố cục nội dung bài giảng ............................................................. 20 Hình 2.3: Giao diện bố cục phần trắc nghiệm ............................................................... 21 Hình 3.1: Sơ đồ chức năng kinh doanh ......................................................................... 40 Hình 3.2: Sơ đồ ngữ cảnh .............................................................................................. 41 Hình 3.3: Sơ đồ luồng dữ liệu mức 0 ............................................................................ 42 Hình 3.4: Sơ đồ phân rã chức năng 1.0 ......................................................................... 42 Hình 3.5: Sơ đồ phân rã chức năng 2.0 ......................................................................... 43 Hình 3.6: Công cụ ASP.NET SQL Server Registration Tool ....................................... 45 Hình 3.7: Mô hình dữ liệu quan hệ (diagram) ............................................................... 46 Hình 3.8: Giao diện trang chủ ....................................................................................... 47 Hình 3.9: Giao diện trang đăng ký ................................................................................ 47 Hình 3.10: Giao diện trang đăng nhập........................................................................... 49 Hình 3.11: Giao diện trang nội dung bài học (1) ........................................................... 51 Hình 3.12: Giao diện trang nội dung bài học (2) ........................................................... 51 Hình 3.13: Giao diện trang trắc nghiệm vui (1) ............................................................ 52 Hình 3.14: Giao diện trang trắc nghiệm vui (2) ............................................................ 52 Hình 3.15: Giao diện trang trắc nghiệm vui (3) ............................................................ 53 Hình 3.16: Giao diện bảng thành tích ............................................................................ 53 Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 5 MỞ ĐẦU 1. Lý do chọn đề tài Trong thời đại ngày nay, sự phát triển như vũ bão của công nghệ thông tin đang ảnh hưởng tới mọi mặt của đời sống xã hội. Trong đó, giáo dục cũng chịu mọi sự tác động mạnh mẽ của công nghệ thông tin. Sự phát triển của công nghệ thông tin làm cho lượng tri thức của nhân loại tăng lên rất nhiều. Chính vì vậy, các phương pháp giáo dục truyền thống không thể nào truyền tải được hết nội dung tri thức. Do đó, việc thay đổi phương pháp dạy và học cho phù hợp với xu hướng phát triển của xã hội là rất cần thiết. Trong bối cảnh đó, nền giáo dục nước ta cần được đổi mới phương pháp dạy học theo hướng vận dụng công nghệ thông tin và các thiết bị dạy học nhằm phát huy kỹ năng thực hành và tăng hứng thú học tập của học sinh, sinh viên nhằm nâng cao chất lượng dạy học. Với sự phát triển của công nghệ thông tin, kỹ năng lập trình và các công việc liên quan đến lập trình hiện nay đang rất phổ biến. Đã có nhiều website được xây dựng nhằm dạy ngôn ngữ lập trình nhưng với ngôn ngữ lập trình C# thì chưa phổ biến. Việc học ngôn ngữ lập trình C# với học sinh, sinh viên vẫn còn nhiều khó khăn. Khối lượng kiến thức tương đối nhiều, thời gian trên lớp học lý thuyết, thời gian thực hành hạn chế nên thường ít thu hút sự tập trung học tập của học sinh, sinh viên. Chính vì những lý do trên, tôi chọn “Xây dựng website dạy ngôn ngữ lập trình C# dành cho ngƣời mới bắt đầu” làm hướng nghiên cứu cho đề tài. 2. Mục tiêu của đề tài Mục đích của đề tài này là xây dựng một website dạy ngôn ngữ lập trình C# cho học sinh, sinh viên, những người mới bắt đầu học lập trình. Website giúp học sinh, sinh viên, những người mới bắt đầu học khám phá những kiến thức cơ bản của ngôn ngữ lập trình C# theo cách tương tác, trực quan và thú vị. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 6  Mục tiêu cụ thể: + Nghiên cứu tổng hợp ngôn ngữ lập trình C#, thực trạng giảng dạy ngôn ngữ lập trình C# và phương pháp giảng dạy điện tử. + Thiết kế hệ thống bài giảng ngôn ngữ lập trình C# theo hướng tương tác, trực quan và thú vị. + Xây dựng website dạy ngôn ngữ lập trình C# dựa trên các bài giảng đã thiết kế được. 3. Đối tƣợng và phạm vi nghiên cứu 3.1. Đối tƣợng nghiên cứu Đối tượng nghiên cứu của đề tài là phương pháp giảng dạy ngôn ngữ lập trình C#. 3.2. Phạm vi nghiên cứu Các cú pháp, kỹ thuật cơ bản của ngôn ngữ lập trình C#. 4. Phƣơng pháp nghiên cứu - Phương pháp nghiên cứu tài liệu: chủ động tìm kiếm, nghiên cứu các tài liệu, sách liên quan đến đề tài, các website tương tự để đánh giá những ưu nhược điểm, học hỏi cách thức hoạt động của website. Từ đó đề ra một mô hình website dạy ngôn ngữ lập trình C# có nội dung chính xác, khách quan. - Phương pháp phân tích, đánh giá: quan sát, nhìn nhận vấn đề, sàng lọc những kiến thức cần thiết từ cơ bản đến nâng cao, từ đó hoàn thiện khoá luận. - Phương pháp phân tích, thiết kế hệ thống: tiến hành tổng hợp, phân loại thông tin. Dựa trên những thông tin thu thập được, kiến thức và nền tảng công nghệ có sẵn, tiến hành xây dựng website dạy ngôn ngữ lập trình C# dành cho người mới bắt đầu. - Phương pháp lập trình hướng đối tượng: sau khi tiến hành phân tích, thiết kế website sẽ lựa chọn ngôn ngữ lập trình C# và ASP.NET với hệ quản trị CSDL Microsoft SQL Server để quản lý. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 7 - Phương pháp tổng hợp: hoàn thiện khoá luận dựa trên những kiến thức cơ bản đã thu nhận được trong quá trình học tập và những tài liệu, kiến thức tích luỹ được trong quá trình chủ động học hỏi, tìm kiếm. 5. Nội dung khoá luận Khóa luận này tập trung tìm hiểu thực trạng giảng dạy ngôn ngữ lập trình C#, phương pháp giảng dạy điện tử, các khái niệm liên quan đến ngôn ngữ lập trình C#, thiết kế bài giảng ngôn ngữ lập trình C# cho người mới bắt đầu, phân tích, thiết kế và xây dựng website dạy ngôn ngữ lập trình C# dành cho người mới bắt đầu. Ngoài phần mở đầu và kết luận, khoá luận này gồm 3 chương: Chƣơng 1: Thực trạng giảng dạy ngôn ngữ lập trình C# và phƣơng pháp giảng dạy điện tử. Cụ thể, chương này trình bày khái quát khái niệm lập trình, ngôn ngữ lập trình, ngôn ngữ lập trình C#, lịch sử hình thành và phát triển của ngôn ngữ lập trình C#, các đặc điểm của ngôn ngữ lập trình C#, thực trạng giảng dạy ngôn ngữ lập trình C# và phương pháp giảng dạy điện tử. Chƣơng 2: Thiết kế bài giảng ngôn ngữ lập trình C# dành cho ngƣời mới bắt đầu. Cụ thể, chương này trình bày nội dung các bài giảng ngôn ngữ lập trình C# dựa trên ngôn ngữ lập trình C#. Chƣơng 3: Phân tích, thiết kế và xây dựng website dạy ngôn ngữ lập trình C# dành cho ngƣời mới bắt đầu. Đây là nội dung chính của khoá luận. Cụ thể, chương này trình bày các bước mô phỏng mô hình website, phân tích, thiết kế giao diện website và chạy thử website. Tên website là “Website dạy ngôn ngữ lập trình C# dành cho người mới bắt đầu”. Đây là website được cài đặt bằng ngôn ngữ C# và ASP.NET. Trong đó, ASP.NET được dùng để xây dựng giao diện tương tác với người dùng; còn C# là ngôn ngữ lập trình bên dưới. Website có thao các CSDL sử dụng Microsoft SQL Server. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 8 CHƢƠNG 1 THỰC TRẠNG GIẢNG DẠY NGÔN NGỮ LẬP TRÌNH C# VÀ PHƢƠNG PHÁP GIẢNG DẠY ĐIỆN TỬ 1.1. Ngôn ngữ lập trình C# 1.1.1. Khái niệm lập trình Lập trình máy tính (gọi tắt là lập trình; tiếng Anh: programming) là kỹ thuật cài đặt một hoặc nhiều thuật toán trừu tượng có liên quan với nhau bằng một hoặc nhiều ngôn ngữ lập trình để tạo ra một chương trình máy tính. 1.1.2. Khái niệm ngôn ngữ lập trình Ngôn ngữ lập trình (tiếng Anh: programming language) là một tập con của ngôn ngữ máy tính. Ngôn ngữ lập trình là một hệ thống được ký hiệu hoá để miêu tả những tính toán (qua máy tính) trong một dạng mà cả con người và máy đều có thể đọc và hiểu được. Một ngôn ngữ lập trình phải thỏa mãn được hai điều kiện cơ bản là: 1. Phải dễ hiểu và dễ sử dụng đối với người lập trình, để con người có thể dùng nó giải quyết các bài toán khác. 2. Phải miêu tả một cách đầy đủ và rõ ràng các tiến trình (tiếng Anh: process), để có thể chạy được trên các máy tính khác. 1.1.3. Ngôn ngữ lập trình C# Ngôn ngữ lập trình C# là ngôn ngữ hướng đối tượng đơn giản, trong sáng, chỉ gồm khoảng 80 từ khoá và hơn 10 kiểu dữ liệu cơ sở. C# bao gồm tất cả những hỗ trợ cho cấu trúc, thành phần (component), lập trình hướng đối tượng. C# được xây dựng dựa trên nền tảng của ngôn ngữ C++ và Java. Ngôn ngữ lập trình C# được phát triển bởi đội ngũ kỹ sư của Microsoft, trong đó, người dẫn đầu là Anders Hejlsberg và Scott Wiltamuth. Anders Hejlsberg là một kiến trúc sư website nổi tiếng với các sản phẩm Turbo Pascal, Delphi, J++, WFC. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 9 C# được phê chuẩn bởi European Computer Manufacturers Association (ECMA) và International Standards Organization (ISO). C# được thiết kế cho Common Language Infrastructure (CLI), mà gồm Executable Code và Runtime Environment, cho phép chúng ta sử dụng các ngôn ngữ cấp độ cao (high-level) đa dạng trên các nền tảng và cấu trúc máy tính khác nhau. Ngôn ngữ lập trình C# được phát triển dựa trên nền tảng của ngôn ngữ C++ và Java. Trong đó 70% giống Java, 10% giống C++, 5% giống Visual Basic, 15% là mới. Bảng 1.1: Những điểm giống nhau giữa C# với Java và C++ - Giống Java  Object-orientation (single inheritance)  Interfaces  Generics  Exceptions  Threads  Namespaces  Strong typing  Garbage collections  Reflection  Dynamic loading of code  ... - Giống C++  Struct types  Operator oveloading  Pointer arithmetic in unsafe  Some syntactic details Nguồn: Pro C# 2010 and the .NET 4 Platform (Andrew Troelsen): Ch. 1: The Philosophy of .NET 1.1.4. Các đặc điểm của ngôn ngữ lập trình C# Ngôn ngữ lập trình C# có các đặc điểm sau đây: - C# là ngôn ngữ đơn giản Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 10 C# loại bỏ một vài sự phức tạp và rối rắm của những ngôn ngữ như Java và C++, bao gồm việc loại bỏ những macro, những template, đa kế thừa, và lớp cơ sở ảo (virtual base class). Ngôn ngữ C# đơn giản vì nó dựa trên nền tảng Java và C++ nhưng nó đã được cải tiến để làm cho ngôn ngữ đơn giản hơn. Một vài trong các sự cải tiến là loại bỏ các dư thừa, hay là thêm vào những cú pháp thay đổi. - C# là ngôn ngữ hiện đại C# có các đặc tính của một ngôn ngữ hiện đại như là xử lý ngoại lệ, thu gom bộ nhớ tự động, những kiểu dữ liệu mở rộng và bảo mật mã nguồn. Con trỏ được tích hợp vào ngôn ngữ C++. Chúng là nguyên nhân gây ra những rắc rối của ngôn ngữ này. C# loại bỏ những phức tạp và rắc rối phát sinh bởi con trỏ dựa trên bộ thu gom bộ nhớ tự động và kiểu dữ liệu an toàn được tích hợp vào ngôn ngữ C#. - C# là ngôn ngữ hướng đối tượng C# hỗ trợ các đặc tính của ngôn ngữ hướng đối tượng (Object-oriented language) như là sự đóng gói (encapsulation), sự kế thừa (inheritance), và đa hình (polymorphism). - C# là ngôn ngữ mạnh mẽ và mềm dẻo Với ngôn ngữ C#, chúng ta chỉ bị giới hạn ở chính bởi bản thân hay là trí tưởng tượng của chúng ta. Ngôn ngữ này không đặt những ràng buộc lên những việc có thể làm. C# được sử dụng cho nhiều các dự án khác nhau như là tạo ra ứng dụng xử lý văn bản, ứng dụng đồ họa, bản tính, hay thậm chí những trình biên dịch cho các ngôn ngữ khác. - C# là ngôn ngữ ít từ khóa C# là ngôn ngữ sử dụng giới hạn những từ khóa (77 từ khoá). Phần lớn các từ khóa được sử dụng để mô tả thông tin. Bảng sau liệt kê các từ khóa của ngôn ngữ C#: Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 11 Bảng 1.2: Từ khóa của ngôn ngữ C# abstract default foreach object sizeof unsafe as delegate goto operator stackalloc ushort base do if out static using bool double implicit override string virtual break else in params struct volatile byte enum int private switch void case event interface protected this while catch explicit internal public throw char extern is readonly true checked false lock ref try class finally long return typeof const fixed namespace sbyte uint continue float new sealed ulong decimal for null short unchecked Nguồn: https://vi.wikipedia.org - C# là ngôn ngữ hướng module Mã nguồn C# có thể được viết trong các lớp, những lớp này chứa các phương thức thành viên của nó. Lớp và phương thức có thể được sử dụng lại trong ứng dụng hay các chương trình khác. Bằng cách truyền các mẫu thông tin đến những lớp hay phương thức chúng ta có thể tạo ra những mã nguồn dùng lại có hiệu quả. - C# là một ngôn ngữ phổ biến C# là một trong những ngôn ngữ lập trình mới nhất. Nhưng ngôn ngữ này có một số lý do để trở thành một ngôn ngữ phổ biến. Một trong những lý do chính là Microsoft và sự cam kết của .NET. Nhiều sản phẩm của công ty này đa chuyển đổi và viết lại bằng C#. Bằng cách sử dụng ngôn ngữ này, Microsoft đã xác nhận khả năng Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 12 của C# cần thiết cho những người lập trình. .NET là một sự thay đổi trong cách tạo và thực thi những ứng dụng. Ngoài hai lý do trên, ngôn ngữ C# phổ biến do những đặc tính của ngôn ngữ này được đề cập trong mục trước như: đơn giản, hướng đối tượng, mạnh mẽ. Ngoài các đặc điểm trên, C# còn có các đặc điểm tiến bộ sau: - Không yêu cầu con trỏ. - Quản lý bộ nhớ tự động thông qua trình gom rác (Garbage Collector). - Cấu trúc cú pháp hình thức cho kiểu dữ liệu liệt kê (enumeration), cấu trúc (structure) và thuộc tính lớp (class properties). - Cho phép chồng hàm cho các kiểu dữ liệu tự tạo. - Sử dụng cú pháp tương tự khuôn mẫu trong C++ để lập trình các generic. - Hỗ trợ hoàn toàn cho các kỹ thuật lập trình dựa trên giao diện. 1.2. Thực trạng việc giảng dạy ngôn ngữ lập trình C# Hiện nay, nhu cầu nhân lực ngành công nghệ thông tin rất lớn. Đây là ngành rất hấp dẫn và có nhiều trường đào tạo. Nhưng việc học ngôn ngữ lập trình C# với học sinh, sinh viên, những người mới bắt đầu học lập trình vẫn còn nhiều khó khăn. Việc dạy, truyền tải nội dung lý thuyết trên lớp chiếm nhiều thời gian, chủ yếu về nhà thực hành nên chưa thực sự hiệu quả, giảm sự hứng thú học tập của học sinh, sinh viên, những người mới bắt đầu học lập trình. Có rất nhiều trường lớp, trung tâm dạy ngôn ngữ lập trình C# với nhiều hình thức (học trên lớp, học trực tuyến, ) hay các phần mềm ứng dụng, các website ra đời hỗ trợ việc dạy ngôn ngữ lập trình C#. Theo thống kê của Blog TopDev, trang web lớn về tìm kiếm cơ hội việc làm CNTT ở Việt Nam, có 15 nguồn học C# dành cho người mới bắt đầu là: Tutorial Point, C# Station, LearnCS.org, ZetCode, Microsoft C# Training, Udemy, Eduonix, EDX, O‟Reilly School of Technology, Channel9.msdn.com, Những nền tảng Programming with C#, Free Book Center, BookBoon, C# Programming, C# Essentials. Đây là các nguồn học rất nổi tiếng và hiệu quả. Tuy nhiên, những người Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 13 mới bắt đầu học sẽ cảm thấy nhàm chán, bất tiện và khó khăn khi đọc các nguồn tiếng Anh, đặc biệt là người Việt Nam. Vậy nên, các nguồn học trên chưa thực sự gây hứng thú học tập cho học sinh, sinh viên, những người mới bắt đầu học ngôn ngữ lập trình C#. Nhiều tài liệu, sách, giáo trình tiếng Việt được biên soạn nhưng chúng chưa thực sự đầy đủ như các tài liệu tiếng Anh. Hơn nữa, việc đọc hay tìm kiếm theo từng nội dung cũng làm giảm sự hứng thú với môn học và mất nhiều thời gian. Các tài liệu điển hình như: - Đặng Quế Vinh, Giáo trình Kỹ thuật lập trình 1, Nhà xuất bản Thống kê, năm 2005. - Dương Quang Thiện, Lập trình Visual C# thế nào? – Tập 1: C# Căn bản và Visual Studio .NET IDE, Nhà xuất bản Tổng hợp TP.HCM, năm 2005. - Dương Quang Thiện, Lập trình Visual C# thế nào? – Tập 2: C# và .NET Framework, Nhà xuất bản Tổng hợp TP.HCM, năm 2005. Bên cạnh đó, các trang web dạy ngôn ngữ lập trình C# bằng tiếng Việt (ví dụ: vietjack.com, Myclass.vn, daynhauhoc.com, ), các video hướng dẫn (ví dụ: C# 101 của thầy Nguyễn Đình Hoa Cương, ), các blog hỗ trợ học tập (ví dụ: MSDN, C# Việt Nam) cũng phát triển mạnh. Nhưng nội dung vẫn còn nặng về lý thuyết, chưa có sự tương tác tốt với người học, khả năng khám phá trực tiếp trên bài học là còn yếu.  Qua nghiên cứu các tài liệu giảng dạy trên, khóa luận nhận thấy rằng đối với học sinh, sinh viên, những người mới bắt đầu học ngôn ngữ lập trình C#, người giảng dạy phải truyền tải được các kiến thức cơ bản, đầy đủ và dễ hiểu về ngôn ngữ lập trình C#. Các nội dung giảng dạy phải là các khái niệm cơ bản, các cú pháp, kỹ thuật cơ bản của ngôn ngữ lập trình C# như: C# là gì, cấu trúc chương trình C#, cách tạo một chương trình C# cơ bản, các cú pháp cơ bản, các kiểu dữ liệu, biến, toán tử, vòng lặp, hàm, mảng, chuỗi, struct, enum, Đó chính là các nội dung được chú trọng thiết kế cho website dạy ngôn ngữ lập trình C# dành cho người mới bắt đầu trong đề tài này. 1.3. Phƣơng pháp giảng dạy điện tử Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 14 Bài giảng điện tử là một hình thức tổ chức bài lên lớp mà ở đó toàn bộ kế hoạch hoạt động dạy học đều thực hiện thông qua môi trường multimedia do máy vi tính tạo ra. Multimedia được hiểu là đa phương tiện, đa môi trường, đa truyền thông. Trong môi trường multimedia, thông tin được truyền dưới dạng: văn bản (text), đồ họa (graphics), ảnh động (animation), ảnh tĩnh (image), âm thanh (audio) và phim video (video clip). Đặc trưng cơ bản của bài giảng điện tử là toàn bộ kiến thức của bài học, mọi hoạt động điều khiển của giảng viên đều được multimedia hóa. Dạy học bằng bài giảng điện tử là cách hiệu quả để thực hiện đổi mới giáo dục. Tuy nhiên, bài giảng điện tử chỉ là công cụ, còn việc sử dụng sao cho có hiệu quả là hoàn toàn phụ thuộc vào người giảng viên đứng lớp. Thực tế cho thấy, để chuẩn bị cho một bài giảng điện tử, người giảng dạy phải mất khá nhiều thời gian để chuẩn bị từ việc xây dựng ý tưởng, soạn nội dung bài giảng, thiết kế bài giảng và thiết kế hình ảnh sao cho phù hợp với nội dung bài giảng. Ngoài kiến thức căn bản về tin học, giáo viên còn cần có niềm đam mê thật sự với việc thiết kế vốn đòi hỏi sự sáng tạo, sự nhạy bén, tính thẩm mỹ để “săn tìm” tư liệu từ nhiều nguồn, chọn giải pháp cho sử dụng công nghệ, sau đó mới đi vào thiết kế. Không lạm dụng công nghệ nếu chúng không tác động tích cực đến quá trình giảng dạy của giáo viên và kết quả học tập của học sinh, sinh viên. Công nghệ mô phỏng nếu không phản ánh đúng nội dung, giá trị nghệ thuật và thực tế thì không nên sử dụng. Với bài giảng điện tử, giáo viên được giảm nhẹ việc thuyết giảng, tăng cường đối thoại, thảo luận với học sinh, sinh viên. Học sinh, sinh viên được thu hút, kích thích khám phá tri thức, có điều kiện quan sát vấn đề, chủ động nêu câu hỏi và nhờ vậy quá trình học tập trở nên hứng thú, sâu sắc hơn. Tuy nhiên, vẫn còn không ít giáo viên gặp khó khăn trong việc thiết kế bài giảng điện tử.  Bài giảng điện tử cần đảm bảo các tiêu chí sau: - Về nội dung:  Đảm bảo tính chính xác, phù hợp với chương trình đào tạo, với nội dung và tính đặc thù bộ môn; với phương pháp, kỹ thuật và hình thức tổ chức dạy học. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 15  Đảm bảo tính khoa học (nhất là nguồn tài liệu khai thác từ internet) và phù hợp với đối tượng dạy học.  Cấu trúc chặt chẽ, logic, định hướng tư duy tích cực cho người học.  Xác định rõ kiến thức cơ bản, kiến thức trọng tâm của bài học, các vấn đề đang còn tranh luận, các nội dung mà người học cần tích cực, chủ động, sáng tạo trong nghiên cứu, nhận thức và luyện tập.  Khai thác lợi thế của công nghệ thông tin trong thiết kế các hình thức kiểm tra, đánh giá trắc nghiệm khách quan ở những mức độ khác nhau. - Về hình thức:  Đảm bảo tính trực quan, tạo sự sinh động, hấp dẫn, thu hút sự chú ý, kích thích hứng thú học tập, nghiên cứu của học sinh, sinh viên.  Thiết kế các slide phù hợp (nên từ 20 -25 slide /1 tiết); màu sắc hài hòa, giao diện thân thiện; thống nhất bảng mã Unicode, cỡ chữ vừa đủ quan sát (24 – 28), trình bày đẹp, diễn đạt ngắn gọn, làm nổi bật kiến thức trọng tâm.  Hiệu ứng chữ, hình ảnh, màu sắc, âm thanh, chuyển động được sử dụng có mức độ, hài hòa, hợp lý. Không lạm dụng kỹ thuật để thỏa mãn sự hiếu kỳ, phân tán chú ý của người học. Lưu ý: màu sắc thiếu trực quan, mờ nhạt hoặc sặc sỡ dễ gây phản cảm; âm thanh ồn ào sẽ giảm hứng thú học tập của người học. - Về kỹ thuật:  Tiện ích trong tổ chức dạy học; thích ứng với điều kiện sẵn có; đa dạng các hình thức liên kết nội dung bài học với các nguồn học liệu đa phương tiện (các file âm thanh, hình ảnh, video clip, file trình diễn bài giảng có tích hợp video, ), với phần mềm giáo khoa và các công cụ chuyên biệt khác.  Dễ tạo các mối liên hệ tương tác (giữa người dạy với người học, giữa người học với người học) dạy học với tài liệu mở, dẫn dắt người học xây dựng bài, củng cố, khắc sâu kiến thức. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 16  Giúp người học hình thành các kỹ năng tự học, tự nghiên cứu, kỹ năng hợp tác, chia sẻ thông tin, vận dụng kiến thức vào thực tế, tự đánh giá kết quả học tập, hình thành tư tưởng, thái độ học tập đúng đắn.  Thiết kế bài giảng đảm bảo cho người dạy thuận lợi, làm chủ kỹ thuật, thao tác nhuần nhuyễn, kết hợp nhịp nhàng trình chiếu với ghi chép, giữa các hoạt động dạy và học, giữa hướng dẫn nhận thức với quản lý, kiểm tra đánh giá người học. - Về hiệu quả:  Thực hiện được mục tiêu bài học, người học hiểu bài, hứng thú học tập, nghiên cứu, phát triển các kỹ năng cần thiết, có thái độ đúng đắn.  Đánh giá được kết quả học tập của người học, hiệu quả bài học của người dạy.  Phát huy được tác dụng nổi bật của bài giảng điện tử mà các bài giảng theo hình thức tổ chức khác khó đạt được.  Bài giảng điện tử cần đảm bảo các yêu cầu sau: Yêu cầu của một bài giảng điện tử là tích hợp các ứng dụng công nghệ thông tin sao cho phù hợp với nội dung, mục đích dạy học, đảm bảo đặc trưng bộ môn, góp phần tích cực hóa hoạt động học tập của học sinh, sinh viên, làm tăng hiệu quả dạy học. Có thể...ite dạy ngôn ngữ lập trình C# có giao diện thân thiện với người dùng. Website cần chạy mượt và ổn định, tốc độ tải trang nhanh và tính an toàn, bảo mật cao. - Thiết kế một website cho phép người dùng tạo tài khoản, đăng nhập vào hệ thống, chấm điểm phần trắc nghiệm. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 38 Đầu tiên, người dùng truy cập địa chỉ để vào website. Trang chủ web hiển thị trình chiếu (slide) ảnh giới thiệu và hướng dẫn các bước thao tác, các điều khiển trên website, giúp người dùng nhanh chóng nắm bắt được cách hoạt động của website. Website hỗ trợ người dùng đăng ký, đăng nhập tài khoản. Người dùng cần đăng ký một tài khoản mới; một người dùng có thể đăng ký nhiều tài khoản khác nhau. Website cần lưu giữ thông tin tài khoản người dùng thông qua: mã tài khoản, tên tài khoản, mật khẩu, email. Sau khi đã đăng ký tài khoản thành công, người dùng có thể đăng nhập ngay vào website để học. (Website vẫn hiển thị đầy đủ nội dung và chức năng khi người dùng đã hoặc chưa đăng nhập tài khoản). Website tổ chức các bài học theo từng phần. Mỗi phần gồm nhiều bài học và tập trung giải quyết một nội dung cụ thể về ngôn ngữ lập trình C#. Cấu trúc bài giảng đã được trình bày ở mục 2.2 Kết cấu loạt bài giảng ở chương 2. Người dùng có thể học các bài học theo thứ tự từ trên xuống để nắm bắt kiến thức đầy đủ và xuyên suốt hơn. Hoặc có thể lựa chọn bài học không theo một thứ tự, quy tắc nào. Điều này giúp người học chủ động, linh hoạt hơn trong quá trình học. Cuối mỗi phần là một bài “Trắc nghiệm vui” gồm nhiều câu hỏi lý thuyết theo hình thức trắc nghiệm. Người dùng trả lời các câu hỏi để ghi điểm. Mỗi câu trả lời đúng được cộng 1 điểm, trả lời sai không có điểm. Điểm số này được website lưu tự động vào “bảng thành tích”, bao gồm các thông tin: điểm test 1 (điểm bài “trắc nghiệm vui” phần C# cơ bản), điểm test 2 (điểm bài “trắc nghiệm vui” phần Biến), điểm test 3 (điểm bài “trắc nghiệm vui” phần Kiểu logic), điểm test 4 (điểm bài “trắc nghiệm vui” phần Lệnh if else), điểm test 5 (điểm bài “trắc nghiệm vui” phần Mảng), điểm test 6 (điểm bài “trắc nghiệm vui” phần Chuỗi), điểm test 7 (điểm bài “trắc nghiệm vui” phần Hàm), điểm test 8 (điểm bài “trắc nghiệm vui” phần Vòng lặp), điểm test 9 (điểm bài “trắc nghiệm vui” phần Cấu trúc), điểm test 10 (điểm bài “trắc nghiệm vui” phần Kiểu liệt kê). Tuy nhiên, điểm số này chỉ được cập nhật khi người dùng đã đăng nhập tài khoản thành công. Người dùng có thể làm lại “trắc nghiệm vui” nhiều lần để nâng cao điểm số. Website sẽ cập nhật điểm số cao nhất sau mỗi lần học. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 39 3.2. Phân tích website dạy ngôn ngữ lập trình C# dành cho ngƣời mới bắt đầu Dựa vào mô tả website ở mục 3.1 trên, website được thiết kế gồm các phần sau: - Quản lý hệ thống: quản lý tạo tài khoản mới, thông tin truy nhập hệ thống, quản lý học, quản lý kiểm tra (phần trắc nghiệm), quản lý xem điểm. - Quản lý người dùng: quản lý thông tin tài khoản. Website cho phép người dùng đăng nhập tài khoản và website tự động lưu điểm số của bài “Trắc nghiệm vui” theo từng tên tài khoản. Cụ thể, website lưu giữ những thông tin sau: o Mã tài khoản: Mỗi tài khoản có một mã tài khoản riêng dùng phân biệt các tài khoản với nhau. o Tên tài khoản: Mỗi tài khoản có một tên tài khoản riêng dùng phân biệt các tài khoản với nhau. Tên tài khoản không được trùng nhau. o Mật khẩu: Mỗi tài khoản có một mật khẩu. Mật khẩu này được mã hóa tự động để đảm bảo vấn đề bảo mật thông tin người dùng. Website có hỗ trợ tính năng đổi mật khẩu khi người dùng có nhu cầu. o Email: Mỗi tài khoản có một email xác nhận khi đăng ký tài khoản. o Điểm test 1: Điểm số cao nhất sau mỗi lần học của bài “Trắc nghiệm vui” trong phần C# cơ bản. o Điểm test 2: Điểm số cao nhất sau mỗi lần học của bài “Trắc nghiệm vui” trong phần Biến. o Điểm test 3: Điểm số cao nhất sau mỗi lần học của bài “Trắc nghiệm vui” trong phần Kiểu logic. o Điểm test 4: Điểm số cao nhất sau mỗi lần học của bài “Trắc nghiệm vui” trong phần Lệnh if else. o Điểm test 5: Điểm số cao nhất sau mỗi lần học của bài “Trắc nghiệm vui” trong phần Mảng. o Điểm test 6: Điểm số cao nhất sau mỗi lần học của bài “Trắc nghiệm vui” trong phần Chuỗi. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 40 o Điểm test 7: Điểm số cao nhất sau mỗi lần học của bài “Trắc nghiệm vui” trong phần Hàm. o Điểm test 8: Điểm số cao nhất sau mỗi lần học của bài “Trắc nghiệm vui” trong phần Vòng lặp. o Điểm test 9: Điểm số cao nhất sau mỗi lần học của bài “Trắc nghiệm vui” trong phần Cấu trúc. o Điểm test 10: Điểm số cao nhất sau mỗi lần học của bài “Trắc nghiệm vui” trong phần Kiểu liệt kê. 3.2.1. Sơ đồ chức năng kinh doanh (BFD – Business Function Diagram) Phân tích website về chức năng nhằm xác định một cách chính xác và cụ thể các chức năng chính của website. Trong giai đoạn này cần phải xác định rõ ràng những gì mà website cần phải thực hiện mà chưa quan tâm đến phương pháp thực hiện chức năng đó. Hình 3.1: Sơ đồ chức năng kinh doanh Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 41 Sơ đồ chức năng của website bao gồm 2 chức năng: Quản lý người dùng, quản lý hệ thống (hình 3.1). - Chức năng quản lý người dùng gồm 3 chức năng con: đăng nhập, đăng xuất, đổi mật khẩu. - Chức năng quản lý hệ thống gồm 5 chức năng con: tạo tài khoản người dùng, quản lý thông tin truy nhập hệ thống, quản lý học, quản lý kiểm tra, quản lý xem điểm. 3.2.2. Sơ đồ ngữ cảnh (CD – Context Diagram) Từ phân tích sơ đồ BFD ở trên, website có sơ đồ ngữ cảnh như sau: Hình 3.2: Sơ đồ ngữ cảnh Đầu tiên, người dùng truy cập vào website và tạo tài khoản mới (đăng ký tài khoản). Hoặc đăng nhập vào website (nếu đã có tài khoản). Hệ thống sẽ gửi thông tin phản hổi cho người dùng về việc đăng ký, đăng nhập tài khoản này. Người dùng yêu cầu thông tin bài học, thông tin kiểm tra hoặc xem điểm, hệ thống sẽ đưa ra kết quả của các yêu cầu trên. Tuy nhiên, đối với yêu cầu thông tin xem điểm, hệ thống chỉ đưa kết quả khi người dùng đã đăng nhập vào hệ thống. Khi người dùng đăng xuất, hệ thống sẽ đăng xuất tài khoản ra khỏi hệ thống và gửi thông tin phản hồi cho người dùng. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 42 3.2.3. Sơ đồ luồng dữ liệu (DFD – Data Flow Diagram) - Sơ đồ luồng dữ liệu mức 0 Hình 3.3: Sơ đồ luồng dữ liệu mức 0 - Sơ đồ phân rã chức năng 1.0 Hình 3.4. Sơ đồ phân rã chức năng 1.0 Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 43 Khi người dùng đưa vào thông tin tài khoản, hệ thống sẽ kiểm tra tính hợp lệ của thông tin vừa nhập, tài khoản này có tồn tại không và thông báo cho người dùng kết quả đăng nhập. Khi người dùng đăng xuất, hệ thống sẽ tiến hành đăng xuất và thông báo kết quả cho người dùng. Khi người dùng yêu cầu đổi mật khẩu, hệ thống sẽ yêu cầu người dùng nhập vào mật khẩu cũ và mật khẩu mới và tiến hành đổi mật khẩu và thông báo kết quả cho người dùng (nếu thông tin mật khẩu hợp lệ). - Sơ đồ phân rã chức năng 2.0 Hình 3.5: Sơ đồ phân rã chức năng 2.0 Khi người dùng tạo tài khoản mới, hệ thống sẽ yêu cầu nhập vào các thông tin cơ bản (tên tài khoản, mật khẩu, email) và kiểm tra tính hợp lệ của các thông tin trên rồi thông báo kết quả đăng ký tài khoản cho người dùng. Tương tự, hệ thống sẽ đưa ra thông tin kết quả mà người dùng yêu cầu như thông tin học, kiểm tra và xem điểm. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 44 3.2.4. Tích hợp ASPNETDB vào CSDL của website dạy ngôn ngữ lập trình C# dành cho ngƣời mới bắt dầu Website cần tích hợp CSDL để lưu trữ và cập nhật thông tin tài khoản người dùng. Nền tảng ASP.NET 3.5 đã hỗ trợ chức năng quản lý thành viên từ bước xây dựng sẵn các bảng CSDL lưu thông tin người dùng, đến các hàm hỗ trợ việc tạo lập tài khoản, chứng thực đăng nhập, phân quyền người dùng, thông qua một bộ thư viện API (Application Programming Interface – giao diện lập trình ứng dụng) có tên là SqlMembershipProvider (gọi là bộ cung cấp SqlMembershipProvider). SqlMembershipProvider sẽ hỗ trợ một số công việc sau: - Tạo tài khoản người dùng mới kèm theo mật khẩu. - Lưu trữ thông tin tài khoản người dùng (tên đăng nhập, mật khẩu, ). - Giúp chứng thực người dùng khi đăng nhập vào website. - Quản lý mật khẩu, thay đổi mật khẩu. Chính vì những hữu ích trên và quan trọng hơn nữa là cơ chế bảo mật an toàn nên việc ứng dụng bộ cung cấp SqlMembershipProvider là hết sức cần thiết mà không cần phải tốn công xây dựng lại. Mặc định khi tạo một ứng dụng Web Application Webform Site thì bộ SqlMembershipProvider đã được tích hợp và sẵn các lược đồ CSDL trong file ASPNETDB.mdf. Nhưng để tích hợp các lược đồ này vào CSDL của website thì phải sử dụng công cụ ASP.NET SQL Server Registration Tool của bộ SQL Server 2012. (Hình 3.6) - SqlMembershipProvider gồm 11 thực thể: 1. aspnet_Applications 2. aspnet_Membership 3. aspnet_Paths 4. aspnet_PersonalizationAllUser 5. aspnet_PersonalizationPerUser 6. aspnet_Profile Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 45 7. aspnet_Roles 8. aspnet_SchemaVersions 9. aspnet_Users 10. aspnet_UsersInRoles 11. aspnetWebEvent_Events Hình 3.6: Công cụ ASP.NET SQL Server Registration Tool - SqlMembershipProvider lưu trữ thông tin tài khoản người dùng trong 2 thực thể:  aspnet_Users: mỗi một bản ghi tương ứng với một tài khoản người dùng, trong đó UserID là khóa chính và có kiểu dữ liệu là uniqueidentifier GUID.  aspnet_Membership: có khóa chính UserID đồng thời cũng là khóa ngoại tới bảng aspnet_Users, bảng này lưu trữ các thông tin cơ bản liên quan tới người dùng như email, password (mã băm), Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 46 Hình 3.7: Mô hình dữ liệu quan hệ (diagram) 3.3. Thiết kế và xây dựng website dạy ngôn ngữ lập trình C# dành cho ngƣời mới bắt đầu Website được thiết kế gồm những giao diện chính sau: 3.3.1. Trang chủ Bố cục trang chủ (hình 3.8) gồm 5 phần: 1. Tên website: Tên này chứa link tới trang chủ. 2. Bảng thành tích: Bảng điểm của các bài “Trắc nghiệm vui” của mỗi phần học. 3. Đăng ký, đăng nhập: Người dùng chọn “Đăng ký” để tạo tài khoản mới, chọn “Đăng nhập” để đăng nhập vào website. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 47 4. Menu: Mỗi phần học (bên trái) gồm nhiều bài học (bên phải) khác nhau. 5. Trình chiếu ảnh (slide ảnh) giới thiệu cách sử dụng chương trình. Hình 3.8: Giao diện trang chủ 3.3.2. Trang đăng ký tài khoản Hình 3.9: Giao diện trang đăng ký Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 48 Trang đăng ký tài khoản (hình 3.9) gồm các thông tin cơ bản: tên tài khoản, email, mật khẩu và xác nhận mật khẩu. Trong đó: - Tên tài khoản: là kiểu chuỗi (độ dài không quá 50 ký tự) và không được trùng với tên tài khoản đã tồn tại trước đó. - Mật khẩu: độ dài tối thiểu là 7 ký tự bao gồm ít nhất một ký tự đặc biệt. Bố cục trang đăng ký gồm 7 phần: 1. Nút đăng ký: Khi người dùng bấm nút “Đăng ký”, website sẽ chuyển hướng đến trang đăng ký có giao diện như trên. 2. Toàn bộ khung đăng ký tài khoản. 3. Người dùng nhập tên tài khoản vào ô này (không được bỏ trống). 4. Người dùng nhập email vào ô này (không được bỏ trống). 5. Người dùng nhập mật khẩu vào ô này (không được bỏ trống). 6. Người dùng nhập lại mật khẩu vào ô này (không được bỏ trống). 7. Nút đăng ký: Sau khi nhập đầy đủ thông tin của các ô 3, 4, 5, 6 ở trên, người dùng bấm nút “Đăng ký” để đăng ký tài khoản mới. 3.3.3. Trang đăng nhập tài khoản Bố cục trang đăng nhập (hình 3.10) gồm 6 phần: 1. Nút đăng nhập: Khi người dùng bấm nút “Đăng nhập”, website sẽ chuyển hướng đến trang đăng nhập có giao diện như hình 3.10. 2. Người dùng nhập tên tài khoản vào ô này. 3. Người dùng nhập mật khẩu vào ô này. 4. Bấm chọn vào ô “Duy trì đăng nhập” để duy trì trạng thái đăng nhập cho lần đăng nhập sau. 5. Nút đăng nhập: Sau khi nhập đầy đủ thông tin ở các ô 2, 3, người dùng bấm nút “Đăng nhập” để đăng nhập tài khoản. 6. Nút đăng ký: Nếu bạn chưa có tài khoản, bạn có thể chọn nhanh nút đăng ký này để tạo tài khoản mới. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 49 Hình 3.10: Giao diện trang đăng nhập 3.3.4. Giao diện trang nội dung bài học Giao diện trang học gồm 4 phần chính: - Phần giới thiệu nội dung bài học nằm ở đầu trang. - Phần mã nguồn (code) minh họa cho nội dung bài học. - Phần nhóm nút lệnh để điều khiển website: nút “Chạy”, “Chạy lại”, “Tiếp theo”. Khi người dùng bấm nút “Chạy” thì “Kết quả” và “Giải thích” hiện ra (nếu có), có thể bấm nút “Chạy” lại để làm lại bài học nếu muốn, hoặc bấm nút “Tiếp theo” để đi tới bài học kế kiếp hay tự chọn bài học theo ý muốn ở menu bên trái website. - Phần kết quả chạy code minh họa. - Phần giải thích kết quả code minh họa hay nội dung bài học. Bố cục trang nội dung bài học gồm 10 phần (hình 3.11 và 3.12): 1. Cho biết bạn đang ở phần học nào. 2. Cho biết bạn đang ở bài học nào. 3. Phần giới thiệu ngắn gọn nội dung bài học. 4. Phần mã nguồn minh họa cho nội dung bài học. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 50 5. Ô nhập dữ liệu nhằm giúp người học linh động hơn trong quá trình học, tăng tính tương tác, trực quan giữa website với người dùng. 6. Nút “Chạy”: Người dùng bấm vào nút “Chạy” để tiến hành biên dịch mã nguồn. 7. Ô nhập dữ liệu (ở mục 5). 8. Kết quả: Khung này chứa kết quả biên dịch của đoạn mã nguồn minh họa trong khung 4 trên. 9. Giải thích: Khung này giải thích ngắn gọn, súc tích nội dung bài học. 10. Nút “Chạy lại” và “Tiếp theo”: Người dùng có thể chọn nút “Chạy lại” để làm lại bài học nếu muốn, hoặc chọn nút “Tiếp theo” để đi đến bài học tiếp theo. 3.3.5. Giao diện trang trắc nghiệm vui Giao diện trang trắc nghiệm vui gồm 4 phần chính: - Phần nội dung câu hỏi. - Phần các đáp án có thể có. - Phần các nút lệnh điều khiển: nút Xem, Tiếp theo. - Phần đáp án. Bố cục trang trắc nghiệm vui gồm 7 phần (hình 3.13, 3.14 và 3.15): 1. Cho biết bạn đang ở bài “Trắc nghiệm vui”. 2. Khung này chứa nội dung câu hỏi. 3. Khung này chứa các đáp án. Mỗi câu có thể chọn 1, 2, 3 hoặc cả 4 đáp án. 4. Nút “Xem”: Sau khi đã chọn đáp án, người dùng bấm vào nút “Xem” để xem kết quả. 5. Biểu tượng đáp án đúng: Sau khi người dùng bấm nút “Xem”, biểu tượng này sẽ hiển thị sau các đáp án đúng. 6. Giải thích: Giải thích đáp án. 7. Nút “Tiếp theo”: Bấm nút “Tiếp theo” để đi đến câu hỏi kế tiếp. Khi người dùng đã chọn đáp án và bấm nút “Xem” thì đáp án đúng cùng với lời giải thích sẽ hiện ra. Đáp án đã chọn là đúng hay sai thì người dùng phải bấm nút “Tiếp theo” để đi đến câu hỏi kế tiếp, không được quay lại, làm lại câu hỏi trước đó. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 51 Hình 3.11: Giao diện trang nội dung bài học (1) Hình 3.12: Giao diện trang nội dung bài học (2) Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 52 Hình 3.13: Giao diện trang trắc nghiệm vui (1) Hình 3.14: Giao diện trang trắc nghiệm vui (2) Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 53 Hình 3.15: Giao diện trang trắc nghiệm vui – (3) Sau khi trả lời hết các câu hỏi của phần trắc nghiệm, người dùng có thể chọn “Làm trắc nghiệm lại” để làm lại trắc nghiệm hoặc chọn “Tiếp tục học”. 3.3.6. Giao diện bảng thành tích Hình 3.16: Giao diện bảng thành tích Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 54 Nếu người dùng đã đăng nhập tài khoản, website sẽ tự động lưu lại điểm số cao nhất của từng bài trắc nghiệm vui đã đạt được sau mỗi lần học vào bảng thành tích. Như vậy, trong chương 3 này, khóa luận đã phân tích website qua các lưu đồ dữ liệu và thiết kế website dựa trên những kết quả phân tích trên. Từ đó, khóa luận tiến hành xây dựng website dạy ngôn ngữ lập trình dành cho người mới bắt đầu theo khung bài giảng điện tử đã được trình bày ở chương 2. Website được xây dựng theo hướng đơn giản, tương tác và trực quan. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 55 KẾT LUẬN Qua quá trình nghiên cứu đề tài, phân tích, thiết kế và xây dựng “Website dạy ngôn ngữ lập trình C# cho người mới bắt đầu”, khóa luận đã đạt được các kết quả sau: Chương 1: Khóa luận nêu rõ thực trạng giảng dạy ngôn ngữ lập trình C#. Từ đó, khóa luận đã đưa ra phương pháp giảng dạy điện tử nhằm đổi mới phương pháp giảng dạy ngôn ngữ lập trình C#. Chương này cũng trình bày rõ các khái niệm, đặc điểm về ngôn ngữ lập trình C#. Chương 2: Khóa luận đã làm rõ mục tiêu và nguyên tắc thiết kế bài giảng điện tử. Từ đó, khóa luận xây dựng kết cấu loạt bài giảng gồm 11 phần chính và giới thiệu nội một số bài giảng cụ thể cho từng phần, có các câu hỏi tổng hợp kiến thức giúp củng cố và đánh giá kiến thức của học sinh, sinh viên, những người mới bắt đầu học lập trình. Loạt bài giảng cung cấp đầy đủ, đúng đắn các kiến thức cơ bản về ngôn ngữ C#. Chương 3: Khóa luận đã phân tích website qua các sơ đồ dữ liệu. Từ đó, xây dựng website dựa trên những kết quả phân tích trên và dựa theo khung bài giảng điện tử đã được thiết kế ở chương 2. Website được xây dựng theo hướng đơn giản, tương tác và trực quan. Tuy nhiên, do thời gian thực tập và nghiên cứu đề tài có hạn và trình độ bản thân còn nhiều hạn chế nên khóa luận không thể tránh khỏi những thiếu sót, sai sót. Khóa luận có thể được tiếp tục phát triển ở những điểm sau: - Giới thiệu, cung cấp kiến thức về ngôn ngữ lập trình C# đầy đủ hơn. - Website cần có chức năng cho phép admin tạo các câu hỏi, trắc nghiệm vui. - Tăng tính tương tác giữa người dùng với website hơn. - Website cần quản lý trạng thái, quản lý tiến trình học tập của người học. - Thiết kế giao diện website thân thiện, đẹp. Luôn đổi mới website từ nội dung đến giao diện, tránh gây nhàm chán. Trên đây là những gì đạt được của đề tài và những đề xuất phát triển website trong thời gian tới. Em rất mong nhận được sự hướng dẫn, chỉ báo của các thầy, các cô và tất cả các bạn để đề tài có thể được ứng dụng tốt hơn nữa trong học tập. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 56 TÀI LIỆU THAM KHẢO 1. Dương Quang Thiện (2005), Lập trình Visual C# thế nào? – Tập 1: C# Căn bản và Visual Studio .NET IDE, Nhà xuất bản Tổng hợp TP.HCM. 2. Dương Quang Thiện (2005), Lập tình Visual C# thế nào? – Tập 2: C# và .NET Framework, Nhà xuất bản Tổng hợp TP.HCM. 3. Lập trình ứng dụng Web với ASP.NET, Trung tâm tin học – Đại học khoa học tự nhiên TP. Hồ Chí Minh, 2010. 4. Th.S Lê Viết Mẫn, Bài giảng Cơ sở lập trình. 5. Andrew Troelsen (2010), Pro C# 2010 and the .NET 4 Platform, fifth adition, Apress. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 57 PHỤ LỤC Phần này trình bày nội dung các bài giảng ngôn ngữ lập trình C# dành cho ngƣời mới bắt đầu. Phần 1: Giới thiệu 01. Cấu trúc chƣơng trình Mỗi project được đặt trong một solution. Mỗi solution có thể chứa nhiều project. Một project bao gồm một hoặc nhiều đơn vị biên dịch (compilation units) và được biên dịch thành một tập tin assembly (.exe hoặc .dll). - Mã nguồn: Program.cs using System; namespace Baitap { class Program { static void Main(string[] args) { Console.Write ("Hello World"); Console.ReadKey (); } } } - Giải thích: Các tập tin .cs là các tập tin mã nguồn C#. Mỗi tập tin nên chứa cài đặt cho một và chỉ một lớp. Program.cs là tập tin mặc định đầu tiên được tạo ra trong project để chứa đoạn chương trình, là điểm bắt đầu của chương trình. 02. Khối lệnh - Mã nguồn: using System; namespace Baitap { class Program { static void Main(string[] args) { Console.Write ("Hello World"); Console.ReadKey (); } Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 58 } } - Giải thích: Nhiều câu lệnh có thể được gộp lại thành khối và đặt trong cặp dấu ngoặc nhọn {}. 03. Thƣ viện (using) - Mã nguồn: using System; namespace Baitap { class Program { static void Main(string[] args) { Console.Write ("Hello World"); Console.ReadKey (); } } } - Giải thích: Các hướng dẫn biên dịch đặt ở đầu mỗi tập tin mã nguồn, sử dụng từ khóa using, báo cho trình biên dịch biết bạn sẽ sử dụng những kiểu dữ liệu trong namspace nào. Đây cũng là cách để bạn giảm thiểu việc gõ tên namespace trước tên lớp, tên hàm; để báo cho trình biên dịch biết, mã nguồn của bạn cần dùng assembly nào thì trong Visual Studio, trên ngăn Solution Explorer, nháy chuột lên mục References, nháy mục Add References. 04. Không gian tên (namsespace) - Mã nguồn: using System; namespace Baitap { class Program { static void Main(string[] args) { Console.Write ("Hello World"); Console.ReadKey (); } } } - Giải thích: Khai báo một namespace sử dụng từ khóa namespace. Tên namespace bắt đầu bằng ký tự viết hoa (không bắt buộc) và có thể có hoặc không. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 59 Những kiểu dữ liệu thuộc namespace nào thì đặt trong cặp dấu ngoặc nhọn của namespace đó. Có thể khai báo các namespace lồng nhau. 05. Lớp (class) - Mã nguồn: using System; namespace Baitap { class Program { static void Main(string[] args) { Console.Write ("Hello World"); Console.ReadKey (); } } } - Giải thích: Khai báo một lớp bằng tên lớp theo sau từ khóa class. Tên lớp bắt đầu bằng ký tự viết hoa. Thân lớp được đặt trong cặp dấu ngoặc nhọn {}. Đối với C#, mọi biến và hàm đều phải được đặt trong một định nghĩa kiểu nào đó. Website này chỉ đề xuất mã nguồn nằm trong lớp Program. 06. Hàm Main - Mã nguồn: using System; namespace Baitap { class Program { static void Main(string[] args) { Console.Write ("Hello World"); Console.ReadKey (); } } } - Giải thích: Trong C#, một chương trình luôn bắt đầu bằng hàm Main(). Có thể có nhiều hàm Main để xử lý cho nhiều trường hợp khởi động chương trình khác nhau. Main() là hàm tĩnh (từ khóa static) và không thuộc về một lớp nào. Người ta có thể truyền tham số cho nó, có nhiều dạng giá trị trả về của hàm này sẽ được đề cập ở phần Hàm (ở đây là void, tức là không cần giá trị trả về). 07. Các kiểu chú thích Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 60 - Mã nguồn: using System; namespace Baitap { /// /// tài liệu hướng dẫn cấp lớp /// class Program { /// /// chú thích /// /// static void Main(string[] args) { // chú thích chỉ trên một dòng /* chú thích trên nhiều dòng */ } } } - Giải thích: C# hỗ trợ 3 dạng chú thích:  // chú thích chỉ trên một dòng  /* chú thích trên nhiều dòng */  /// chú thích cho phương thức và lớp Chú thích không ảnh hưởng đến code, trình biên dịch sẽ bỏ qua nó khi biên dịch chương trình. Phần 2: Các khái niệm cơ bản 01. Giới thiệu chƣơng trình Bài này giới thiệu cách thức tạo ra một chương trình C#. - Mã nguồn: static void Main(string[] args) { string ten = "C Sharp"; Console.WriteLine("Xin chào" + ten); } - Kết quả: Xin chào C# - Giải thích: Mỗi câu lệnh trong C# được kết thúc bằng dấu chấm phẩy (;). 02. Biến Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 61 Bài này giới thiệu cách khai báo biến. Các biến đươc tạo ra bắt đầu với một kiểu dữ liệu, theo sau là tên biến và gán giá trị cho biến với phép gán „=‟. - Mã nguồn: static void Main(string[] args) { string st = "Học cách viết code"; st = "abc"; Console.WriteLine(st); } - Kết quả: abc - Giải thích: Có thể khai báo biến bất cứ đâu trong chương trình. Biến sẽ có kiểu dữ liệu và tên. Một biến sau khi đã khai báo thì có thể gán giá trị và sử dụng nó để tính toán. 03. Mã nguồn Chương trình được viết bằng mã. Với mã này, chúng ta có thể xây dựng các ứng dụng tuyệt vời, các trò chơi, các website và các công cụ. - Mã nguồn: static void Main(string[] args) { string st1 = "Tôi thích học ..."; string st2 = "C#"; Console.WriteLine(st1 + st2); } - Kết quả: Tôi thích học C# - Giải thích: Xuất dữ liệu ra màn hình sử dụng Write hoặc WriteLine của lớp System.Console. Trong đó, Write – in chuỗi văn bản chỉ định ra màn hình; WriteLine – in chuỗi văn bản chỉ định ra màn hình rồi xuống dòng. 04. Kiểu chuỗi và kiểu số Bài này cho thấy các biến có các kiểu dữ liệu khác nhau thì cách khởi tạo biến tương ứng cũng khác nhau. - Mã nguồn: static void Main(string[] args) { Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 62 string chuoi = "1"; int so = 1; } - Giải thích: Với kiểu chuỗi (string), giá trị của biến được định nghĩa bằng cách sử dụng cặp dấu ngoặc kép (“ ”). Với kiểu số (ví dụ: int, double) thì không cần. 05. Các kiểu dữ liệu số Có nhiều kiểu số khác nhau. Về cơ bản, có 2 loại kiểu số là kiểu số nguyên và kiểu số thực. - Mã nguồn: Ở mã nguồn này, tôi đưa ra 3 đáp án lựa chọn để khởi gán giá trị cho biến soNguyen, cụ thể cho dòng lệnh int soNguyen đó là “1”, 1 và 1.0. Đáp án đúng là 1. static void Main(string[] args) { int soNguyen = 1; double soThuc = 1.0; } - Giải thích: Các dữ liệu khác nhau sẽ có cách khởi gán giá trị khác nhau. Cụ thể, kiểu int sẽ chỉ có phần nguyên, kiểu double sẽ có phần nguyên và phần thập phân. 06. Toán tử Với mã, chúng ta có thể làm toán. - Mã nguồn: o static void Main(string[] args) { int so1 = 18; int so2 = 3; int ketqua = so1 + so2; Console.WriteLine(ketqua); } o static void Main(string[] args) { int so1 = 18; int so2 = 3; int ketqua = so1 - so2; Console.WriteLine(ketqua); } o static void Main(string[] args) { int so1 = 18; Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 63 int so2 = 3; int ketqua = so1 * so2; Console.WriteLine(ketqua); } o static void Main(string[] args) { int so1 = 18; int so2 = 3; int ketqua = so1 / so2; Console.WriteLine(ketqua); } - Kết quả: o 21 o 15 o 54 o 6 - Giải thích: Hoạt động cơ bản được thực hiện với các toán tử cơ bản: cộng (+, -), nhân (*, /). 07. Các kiểu dữ liệu Biến được khai báo theo cú pháp: :; - Mã nguồn: static void Main(string[] args) { string st; int soNguyen; double soThuc; } - Giải thích: Bạn có thể khai báo biến mà không gán bất cứ giá trị nào cho nó. Tuy nhiên, trước hết phải xác định kiểu dữ liệu phù hợp. Ở đây, bạn vừa tạo ra 3 biến với 3 kiểu dữ liệu khác nhau. 08. Trắc nghiệm vui Câu 1. Phát biểu nào sau đây là đúng về ngôn ngữ lập trình C#? a. C# là ngôn ngữ hướng đối tượng đơn giản, trong sáng, chỉ gồm ~80 từ khoá và hơn 10 kiểu dữ liệu cơ sở. b. C# được xây dựng dựa trên nền tảng ngôn ngữ C++ và Java. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 64 c. C# là ngôn ngữ .NET được cung cấp bởi Microsoft. d. Cả 3 đáp án trên đều đúng. - Đáp án đúng: d. - Giải thích: C# là ngôn ngữ hướng đối tượng đơn giản, trong sáng, chỉ gồm ~80 từ khoá và hơn 10 kiểu dữ liệu cơ sở. C# được xây dựng dựa trên nền tảng ngôn ngữ C++ và Java, là ngôn ngữ .NET được cung cấp bởi Microsoft. Câu 2. Những phát biểu nào sau đây là đúng về biến trong C#? a. Biến là thuộc tính hoặc thành viên dữ liệu của một lớp, được sử dụng để lưu trữ dữ liệu. b. Có thể thay đổi kiểu dữ liệu của biến bất cứ lúc nào. c. Biến có thể nhớ được nhiều giá trị cùng một lúc. d. Biến giúp chúng ta lưu trữ thông tin cho sau này. - Đáp án đúng: a và d. - Giải thích: Biến giúp chúng ta lưu trữ các giá trị cho sau này. Tuy nhiên, biến chỉ có thể nhớ được một giá trị tại một thời điểm và kiểu dữ liệu của biến là vĩnh viễn. Câu 3. Trong C#, mọi câu lệnh đều kết thúc bằng dấu? a. Dấu chấm (.) b. Dấu chấm than (!) c. Dấu chấm phẩy (;) d. Dấu ngoặc nhọn (}) - Đáp án đúng: c - Giải thích: Hãy nhớ rằng mọi câu lệnh trong C# đều được kết thúc bằng dấu chấm phẩy (;). Câu 4. Cách tạo biến nào sau đây là đúng? a. var ten = “Hoa”; b. ten = “Hoa”; c. var tuoi = 14; d. tuoi = 14; Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 65 - Đáp án đúng: a và c. - Giải thích: chúng ta có thể tạo ra biến với cú pháp var ; Câu 5. Mã (code) là gì? Chọn đáp án đúng. a. Mã chỉ có thể được đọc bằng máy tính. b. Mã xác định các hành động được thực hiện bởi máy tính. c. Với mã, chúng ta có thể xây dựng các ứng dụng, trò chơi và website. d. Mã là từ khác của danh sách các lệnh. - Đáp án đúng: b,c,d. - Giải thích: Mã là một danh sách các câu lệnh, xác định các hành động thực hiện trong các ứng dụng, trò chơi và website. Nó được thực hiện bởi các máy tính, nhưng có thể được đọc bởi bất cứ ai. Câu 6. Sự khác nhau giữa 4 và “4” là gì? a. 4 là kiểu integer trong khi ”4” là kiểu string. b. 4 có thể được sử dụng để tính toán. c. “4” có một ý nghĩa khác hơn. d. Không có gì khác nhau. - Đáp án đúng: a và b. ... giá trị thuộc kiểu số nguyên mô tả cho thứ tự trong mảng chứa nó, phần tử đầu tiên của mảng có chỉ số là 0, phần tử thứ hai có chỉ số là 1, cho đến phần tử thứ n có chỉ số là n-1. Câu 5. Chương trình sau đây in ra kết quả gì? static void Main(string[] args) { int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; for (int i = 0; i < a.Length; i++) { if (a[i] % 2 == 0) Console.Write(a[i] + " "); } } a. 0 1 2 3 4 5 6 7 8 9 b. 1 2 3 4 5 6 7 8 9 10 c. 2 4 6 8 10 d. 1 3 5 7 9 - Đáp án đúng: c. Phần 7: Chuỗi (string) 01. Khai báo chuỗi Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 88 Sử dụng từ khoá string để khai báo một chuỗi ký tự. Tất cả các chuỗi đều dẫn xuất từ lớp System.String. - Mã nguồn: static void Main(string[] args) { string st = "Chuỗi ký tự ban đầu"; st = "Chuỗi ký tự mới"; Console.WriteLine(st); } - Kết quả: Chuỗi ký tự mới - Giải thích: Bạn vừa tạo ra chuỗi st với nội dung là Chuỗi ký tự mới. 02. Độ dài chuỗi Để in ra độ dài chuỗi, chúng ta sử dụng thuộc tính Length của lớp System.String. - Mã nguồn: static void Main(string[] args) { string st1 = "Chương trình"; Console.Write(st1.Length); } - Kết quả: 12 - Giải thích: Thuộc tính length trả về độ dài của chuỗi st. Chuỗi st gồm 12 ký tự. 03. Truy xuất vào phần tử của chuỗi Chúng ta sử dụng cú pháp [chỉ_số] để truy xuất một ký tự trong chuỗi tại vị trí chỉ_số trong chuỗi. chỉ_số có giá trị từ 0 đến size – 1. - Mã nguồn: static void Main(string[] args) { string st1 = "Chương trình"; Console.Write(st1[0]); } - Kết quả: C - Giải thích: Bạn vừa truy xuất đến vị trí đầu tiên của chuỗi. 04. Nối chuỗi Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 89 Để nối chuỗi, chúng ta dùng toán tử cộng (+) như trong tính toán hoặc dùng hàm ConCat() của lớp System.String. - Mã nguồn: static void Main(string[] args) { string st1 = "Chương trình "; string st2 = "C#"; string st3 = st1 + st2; string st4 = string.Concat(st1, st2); } - Giải thích: Bạn vừa nối chuỗi st1 và st2 với nhau bằng cách sử dụng toán tử cộng và hàm Concat(). 05. So sánh bằng Để so sánh hai chuỗi có bằng nhau không, chúng ta có thể sử dụng phép so sánh bằng (==) hoặc hàm Equals(). - Mã nguồn: static void Main(string[] args) { string st1 = "C#"; string st2 = "C#"; if (st1 == st2) Console.WriteLine("Bằng nhau"); if (st1.Equals(st2)) Console.WriteLine("Bằng nhau"); if (string.Equals(st1, st2)) Console.WriteLine("Bằng nhau"); } - Kết quả: Bằng nhau - Giải thích: Bạn vừa dùng toán tử so sánh bằng và hàm Equals() để so sánh chuỗi st1 và st2. 06. Sao chép chuỗi Để sao chép chuỗi, chúng ta sử dụng phép gán trực tiếp hoặc sử dụng hàm Copy(). - Mã nguồn: static void Main(string[] args) { string st1 = "Chương trình"; string st5 = st1; string st6 = string.Copy(st1); Console.Write(st5 + ", " + st6); Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 90 } - Kết quả: Chương trình, Chương trình - Giải thích: Bạn vừa gán nội dung chuỗi st1 cho chuỗi st5 và sao chép nội dung chuỗi st1 cho chuỗi st6. 07. Chèn Chúng ta sử dụng hàm Insert() để chèn một chuỗi vào chuỗi đã cho. - Mã nguồn: static void Main(string[] args) { string st1 = "Chương trình "; string st2 = "C#"; string st3 = st1 + st2; string st7 = st3.Insert(15, " cho người mới bắt đầu"); Console.Write(st7); } - Kết quả: Chương trình C# cho người mới bắt đầu - Giải thích: Bạn vừa chèn chuỗi “ cho người mới bắt đầu” vào chuỗi st3 tại vị trí 15. 08. Trắc nghiệm vui Câu 1. Phát biểu nào sau đây đúng về kiểu chuỗi (string) trong C#? a. Kiểu chuỗi (string) được dẫn xuất từ lớp System.String b. Chuỗi chứa chuỗi các ký tự, là kiểu tham chiếu c. Giá trị khởi tạo của kiểu string là null. d. Cả 3 đáp án trên đều đúng - Đáp án đúng: d Câu 2. Hàm Contains() trong lớp System.String có chức năng gì? Chọn đáp án đúng. a. Là hàm tĩnh so sánh hai chuỗi. b. Là hàm xác định một chuỗi có chứa một chuỗi con được chỉ định. c. Là hàm tĩnh định dạng một chuỗi sử dụng các thành tố cơ sở và các token giữ chỗ. d. Đáp án khác. - Đáp án đúng: b Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 91 Câu 3. Làm cách nào để thêm một biến a vào chuỗi? a. “Câu hỏi số \(a)!”; b. “Câu hỏi số” + a + “!”; c. “Câu hỏi số $a!”; d. “Câu hỏi số $(a)!”; - Đáp án đúng: b - Giải thích: Chuỗi nội suy khá đơn giản: thêm các biến bằng cách sử dụng '+'. Câu 4. Câu lệnh nào sau đây dùng để tạo biến c có kiểu dữ liệu char? a. string c; b. char c = “a”; c. char c = „c‟; d. char c = „a‟; - Đáp án đúng: c, d. - Giải thích: Kiểu ký tự char chỉ có thể giữ một ký tự đơn. Câu 5. Làm cách nào để lấy độ dài một chuỗi st? a. st.Count; b. st.Size; c. st.Length(); d. st.Length; - Đáp án đúng: d. - Giải thích: Chúng ta có thể lấy độ dài của chuỗi hay đếm số lượng ký tự trong chuỗi bằng cách sử dụng thuộc tính Length. Câu 6. Đoạn chương trình sau in ra kết quả gì? static void Main(string[] args) { string s1 = "Bao giờ"; string s2 = "cho tới tháng 10?"; string s3 = s1.Insert(7, " "); Console.Write(string.Concat(s3, s2)); } a. cho tới tháng 10?Bao giờ Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 92 b. Bao giờcho tới tháng 10? c. Bao giờ cho tới tháng 10? d. Đáp án khác - Đáp án đúng: c - Giải thích: Chúng ta dùng hàm Insert() để chèn chuỗi “ “ vào s1 tại vị trí 7. Dùng hàm Concat() để cộng chuỗi s3 và s2. Phần 8: Hàm 01. Write Một phương thức là một nhóm lệnh cùng nhau thực hiện một tác vụ. System.Console.Write() là một phương thức được dùng khá thường xuyên. - Mã nguồn: static void Main(string[] args) { string st = "Sử dụng hàm in dữ liệu"; Console.Write(st); } - Kết quả: Sử dụng hàm in dữ liệu - Giải thích: Bạn vừa in chuỗi st ra màn hình. 02. Định nghĩa phƣơng thức Đôi lúc chúng ta muốn giảm những đoạn mã nguồn lặp lại hay sử dụng lại mã nguồn trong nhiều chương trình, chúng ta sử dụng hàm. - Mã nguồn: static void loiChao() { string ten = "Hoa"; Console.Write("Xin chào " + ten); } static void Main(string[] args) { loiChao(); } - Kết quả: Xin chào Hoa - Giải thích: Một hàm bắt đầu với kiểu trả về (đối với void thì không có kiểu trả về) và một tên, tiếp theo là dấu ngoặc đơn. Các đoạn mã giữa '{}' được thực hiện khi Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 93 chúng ta gọi phương thức. Lưu ý rằng các phương pháp này đòi hỏi các đối tượng để làm việc. 03. Tại sao sử dụng hàm? Nếu chúng ta muốn sử dụng một khối mã thường xuyên hơn, đó là một ý tưởng tốt để đặt nó trong một hàm. Một khi nó được viết, chúng ta có thể sử dụng lại bất cứ khi nào chúng ta muốn. - Mã nguồn: static void phepToan(int so) { Console.Write(so * 2); } static void Main(string[] args) { phepToan(4); } - Kết quả: 8 - Giải thích: Đối số của hàm được đặt trong dấu ngoặc đơn sau tên hàm. Trong trường hợp này, chúng ta có thể sử dụng chúng như các biến thông thường. 04. Hàm nhiều tham số Chúng ta có thể sử dụng hàm có nhiều hơn một đối số. - Mã nguồn: static void Chao(string s1, string s2) { string s = "Chào " + s1 + "! Chào " + s2 + "!"; Console.Write(s); } static void Main(string[] args) { Chao("Hoa", "Lan"); } - Kết quả: Chào Hoa! Chào Lan! - Giải thích: nếu chúng ta muốn sử dụng nhiều đối số (hay còn gọi là tham số), chúng ta cần phải tách chúng bằng dấu phẩy. 05. Kết quả trả về Đôi khi, hàm cần có kết quả trả về. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 94 - Mã nguồn: static int phepToan(int so) { int s1 = so * 2; return s1; } static void Main(string[] args) { int s2 = phepToan(20); Console.Write(s2); } - Kết quả: 40 - Giải thích: Nếu chúng ta muốn trả về một giá trị nào đó, chúng ta cần phải xác định kiểu trả về của nó. Chúng ta có thể gán giá trị trả về một biến. 06. Truyền giá trị Nhận biết rằng một phương pháp không thay đổi các biến mà nó nhận được là các đối số. - Mã: static void cong5(int so) { so += 5; Console.Write(so); } static void Main(string[] args) { int s = 6; cong5(s); Console.Write(" " + s); } - Kết quả: 11 6 - Giải thích: Khi chúng ta truyền s vào hàm cong5() như là một đối số, so sẽ mang giá trị của s. Nhưng so chỉ tồn tại trong hàm cong5(): bất cứ điều gì chúng ta làm gì với nó, s sẽ không thay đổi. 07. Trắc nghiệm vui Câu 1. Phát biểu nào sau đây sai về hàm/ phương thức trong C#? a. Một phương thức là một nhóm lệnh cùng nhau thực hiện một tác vụ. b. Mỗi chương trình C# có ít nhất một lớp với một phương thức là Main. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 95 c. Hàm là kỹ thuật cho phép chia nhỏ một chương trình lớn ra nhiều chương trình nhỏ. d. Cả 3 đáp án trên đều sai. - Đáp án đúng: d. - Giải thích: Hàm là kỹ thuật cho phép chia nhỏ một chương trình lớn ra nhiều chương trình nhỏ, cùng thực hiện một tác vụ. Mỗi chương trình C# có ít nhất một lớp với một phương thức là Main. Câu 2. Phát biểu nào sau đây sai khi nói về lợi ích của hàm/ phương thức trong C#? a. Giảm nhẹ công việc cho người lập trình. b. Một chương trình càng có nhiều hàm càng tốt. c. Giảm những đoạn mã nguồn lặp lại. d. Sử dụng lại mã nguồn trong nhiều chương trình. - Đáp án đúng: b. - Giải thích: Hàm và việc sử dụng lại hàm trong nhiều chương trình giúp giảm những đoạn mã nguồn lặp đi lặp lại, do đó tiết kiệm thời gian và công sức hơn. Câu 3. Hàm có thể thuộc vào các dạng nào? Chọn đáp án đúng nhất. a. Tính toán và trả ra một giá trị (kết quả) dựa trên các tham số đầu vào. b. Thay đổi giá trị của các tham số đầu vào và trả ra một giá trị (thông báo tình trạng). c. Không trả ra giá trị nào: thay đổi các tham số đầu vào, thay đổi giá trị toàn cục hay thực hiện một vài hành vi nào đó (in dữ liệu ra màn hình). d. Cả 3 đáp án trên đều đúng. - Đáp án đúng: d. Câu 4. Phát biểu nào sau đây đúng về tham số mặc định của hàm/ phương thức trong C#? a. Các giá trị mặc định được sử dụng khi người sử dụng cung cấp một giá trị cho tham số của hàm. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 96 b. Phải được đặt sau các tham số được xác định giá trị mặc định. c. Các giá trị mặc định được sử dụng khi người sử dụng không cung cấp một giá tị cho tham số của hàm. d. Phải được đặt sau các tham số không được xác định giá trị mặc định. - Đáp án đúng: c, d. - Giải thích: Các giá trị mặc định được sử dụng khi người sử dụng không cung cấp một giá trị cho tham số của hàm; phải được đặt sau các tham số không được xác định giá trị mặc định. Câu 5. Chương trình sau đây in ra kết quả gì? class Program { static int pheptoan(int so) { return so * 2; } static void Main(string[] args) { Console.Write(pheptoan(10 % 2 + 5)); } } a. 2 b. 5 c. 20 d. 10 - Đáp án đúng: d. Phần 9: Vòng lặp 01. While Vòng lặp là một cấu trúc hoạt động cùng nguyên lý với điều kiện (if else). Một vòng lặp cho phép thực hiện các dòng lệnh (hay các instruction) nhiều lần. Vòng lặp while được thực hiện khi biểu thức điều kiện được đưa ra là đúng (true). - Mã nguồn: static void Main(string[] args) Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 97 { int dem = 0; while (dem < 2) Console.Write(dem); } - Kết quả: 2 - Giải thích: Bạn phải đảm bảo rằng biểu thức điều kiện phải sai (false) tại một thời điểm nào đó. Nếu không chương trình sẽ chạy vòng lặp mãi mãi, hoặc xảy ra lỗi. 02. Do while Vòng lặp do while làm việc trong cùng một cách thức, ngoại trừ các khối lệnh được thực hiện ít nhất một lần trước khi điều kiện được kiểm tra. - Mã nguồn: static void Main(string[] args) { int dem = 5; do { dem++; } while (dem < 5); Console.Write(dem); } - Kết quả: 6 - Giải thích: Chương trình sẽ thực hiện vòng lặp 1 lần vì biểu thức điều kiện (dem<5) là false. Vòng lặp do while thực sự rất hữu ích trong một số trường hợp. 03. For tăng Vòng lặp for trong C# có dạng: for (statement_1; condition; statement_2) { statement_3; } Trong đó:  statement_1: được dùng để khởi tạo và chỉ được thực hiện 1 lần.  condition: là biểu thức kiểm tra điều kiện lặp lại.  statement_2: được dùng để cập nhật/ thay đổi giá trị của condition.  statement_3: là lệnh đơn hoặc lệnh kép mà ta muốn được thực hiện nhiều lần. - Mã: Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 98 static void Main(string[] args) { for (int i = 1; i <= 3; i++) Console.Write(i); } - Kết quả: 123 - Giải thích: Mỗi lần vòng lặp for được thực hiện, chương trình sẽ kiểm soát sự thay đổi giá trị của i: từ 1 đến 2, đến 3 và như vậy, cho đến khi điều kiện chạy trở thành false. 04. For giảm - Mã nguồn: static void Main(string[] args) { for (int i = 5; i > 0; i--) Console.Write(i); } - Kết quả: 54321 05. For - Mã nguồn: static void Main(string[] args) { int tong = 0; string s = "0"; for (int i = 1; i < 3; i++) { tong += i; s += "+" + i; } Console.Write(s + "=" + tong); } - Kết quả: 0+1+2=3 - Giải thích: Mỗi lần vòng lặp được thực thi, các biến điều khiển i được cộng thêm vào tong. s được dùng để ghi lại giá trị đó. 06. Fibonacci Đã bao giờ bạn nghe nói về dãy số fibonacci? Đó là một dãy số mà mỗi số là tổng của 2 số đứng trước. - Mã nguồn: Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 99 static void Main(string[] args) { int a = 1; int b = 1; Console.Write(a + "–" + b); for (int i = 1; i < 5; i++) { int c = a + b; a = b; b = c; Console.Write("–" + c); } } - Kết quả: 1 – 1 – 2 – 3 – 5 – 8 07. Vòng lặp lồng nhau - Mã nguồn: static void Main(string[] args) { for (int x = 1; x < 5; x++) { Console.Write(x + ": "); int y = x; while (y <= 4) { Console.Write(y); y++; } Console.Write("; "); } } - Kết quả: 1: 1234; 2: 234; 3: 34; 4: 4; - Giải thích: Vòng lặp for chạy một lần từ 1 đến 4. Vòng lặp while chạy 4 lần từ x tới 4. 08. Biến điều khiển - Mã nguồn: static void Main(string[] args) { int dem = 1; while (dem <= 3) { Console.Write(dem); dem++; } Console.Write(" & "); Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 100 for (int i = 3; i >= 1; i--) { Console.Write(i); } } - Kết quả: 123 & 321 - Giải thích: Biến điều khiển như dem và i được sử dụng để điều chỉnh số lần lặp được thực hiện; chúng đang tăng hoặc giảm ở mỗi lần chạy. 09. Trắc nghiệm vui Câu 1. Phát biểu nào sau đây là đúng về vòng lặp trong C#? a. Các vòng lặp khác nhau dùng cho những trường hợp khác nhau. b. Vòng lặp chạy mãi mãi, vô hạn. c. Vòng lặp giúp tiết kiệm thời gian và công sức. d. Vòng lặp tự động hóa các công việc lặp đi lặp lại. - Đáp án đúng: a, c, d. - Giải thích: Vòng lặp tự động hóa các công việc lặp đi lặp lại, do đó, tiết kiệm thời gian và công sức. Có nhiều loại vòng lặp khác nhau nhưng không có loại nào chạy vô hạn. Câu 2. Phát biểu nào sau đây đúng về vòng lặp while trong C#? a. While lặp lại một hoặc một nhóm các lệnh trong khi điều kiện đã cho là đúng (true). b. While lặp lại một hoặc một nhóm các lệnh trong khi điều kiện đã cho là sai (false). c. While kiểm tra điều kiện trước khi thực hiện thân vòng lặp. d. While kiểm tra điều kiện sau khi thực hiện thân vòng lặp. - Đáp án đúng: a, c. - Giải thích: Vòng lặp while kiểm tra điều kiện đúng trước khi thực hiện lặp đi lặp lại một hoặc một nhóm các lệnh. Câu 3. Phát biểu nào sau đây là đúng về vòng lặp do while trong C#? a. Giống vòng lặp while nhưng kiểm tra điều kiện ở cuối thân vòng lặp. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 101 b. Thực thi câu lệnh ít nhất 1 lần đến khi điều kiện không được thỏa mãn. c. Luôn luôn là vòng lặp vô hạn. d. Cả 3 đáp án trên đều đúng. - Đáp án đúng: a, b. - Giải thích: Vòng lặp do while tương tự vòng lặp while, ngoại trừ kiểm tra điều kiện ở cuối thân vòng lặp. Do đó, do while thực hiện câu lệnh ít nhất 1 lần đến khi điều kiện không được thỏa mãn. Câu 4. Tại sao việc đảm bảo rằng điều kiện chạy phải trở thành false sau một số lần lặp hữu hạn là quan trọng? a. Nếu không đảm bảo điều đó, các vòng lặp sẽ chạy vô hạn. b. Điều này không quan trọng. c. Nếu không đảm bảo điều đó, mã nguồn sẽ không được biên dịch. d. Nó quyết định khi nào thoát khỏi vòng lặp. - Đáp án đúng: a, d. - Giải thích: Nếu điều kiện chạy sai thì chương trình sẽ thoát khỏi vòng lặp, vì thế vòng lặp sẽ không chạy vô hạn. Câu 5. Chương trình sau in ra kết quả gì? static void Main(string[] args) { int x = 0; while (x < 10) { Console.Write(x + " "); x++; } } a. 0 b. 0 1 2 3 4 5 6 7 8 9 10 c. 1 2 3 4 5 6 7 8 9 10 d. 0 1 2 3 4 5 6 7 8 9 - Đáp án đúng: d. - Giải thích: Vòng lặp while sẽ chạy từ 0 đến 9 và dừng lại khi x tăng lên đến 10. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 102 Phần 10: Cấu trúc 01. Cấu trúc là gì? Trong C#, một cấu trúc (structure) là một kiểu dữ liệu. Nó giúp bạn tạo một biến đơn mà giữ dữ liệu liên quan của các kiểu dữ liệu đa dạng. Sử dụng từ khóa struct để tạo một cấu trúc. - Mã nguồn: class Program { public struct ToaDo { public int X; public int Y; }; static void Main(string[] args) { } } - Giải thích: Chương trình vừa tạo một kiểu dữ liệu mới ToaDo, nó cũng tương tự như các kiểu bình thường (int, string, float, ). Các cấu trúc được khai báo trong class Program và ngoài các hàm. Dễ thấy rằng khai báo một cấu trúc chỉ như một cái “khuôn” (không được cấp phát bộ nhớ). 02. Tạo cấu trúc Sau khi đã tạo một cấu trúc, chúng ta cần khai báo các biến. Mỗi biến được gọi là một thành viên hay trường. - Mã nguồn: class Program { public struct ToaDo { public int X; public int Y; public float p; }; static void Main(string[] args) { } } Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 103 - Giải thích: Các khai báo biến có thể có bất kỳ kiểu gì ngoại trừ kiểu struct đang được khai báo. 03. Truy xuất cấu trúc Để truy xuất thành phần của cấu trúc, chúng ta sử dụng toán tử chấm (.). Cú pháp: tên_cấu_trúc. tên_thành_phần; - Mã nguồn: class Program { public struct ToaDo { public int X; public int Y; }; static void Main(string[] args) { ToaDo toaDo; toaDo.X = 10; toaDo.Y = 12; } } - Giải thích: Khi khai báo biến, các biến (thành phần) không được khởi gán giá trị và chúng chỉ có thể được truy xuất một khi đã được gán dữ liệu. 04. Gán Sử dụng toán tử gán “=” để gán các biến có cùng kiểu cấu trúc. - Mã nguồn: class Program { public struct ToaDo { public int X; public int Y; }; static void Main(string[] args) { ToaDo toaDo; toaDo.X = 10; toaDo.Y = 12; ToaDo td = toaDo; Console.Write(td.X + ", " + td.Y); } } Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 104 - Kết quả: 10, 12 - Giải thích: Chương trình vừa gán thông tin của toaDo cho td bằng câu lệnh gán ToaDo td=toaDo; 05. Gán từng thành phần Đôi khi chúng ta chỉ muốn gán (sao chép) một số thành phần nhất định của struct. - Mã nguồn: class Program { public struct ToaDo { public int X; public int Y; }; static void Main(string[] args) { ToaDo toaDo; toaDo.X = 10; toaDo.Y = 12; ToaDo td; td.X = toaDo.X; Console.Write(td.X); } } - Kết quả: 10 - Giải thích: Chương trình vừa gán thông tin của td.X cho toaDo.X bằng câu lệnh td.X = toaDo.X; 06. Mảng kiểu struct Bây giờ chúng ta tìm hiểu cách biểu diễn mảng cấu trúc Ngày tháng gồm 3 phần tử. Hãy in ra màn hình 3 bộ giá trị sau: 1/1/2016 – 2/2/2016 – 3/3/2016 - Mã nguồn: class Program { struct NgayThang { public int ngay; public int thang; public int nam; }; Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 105 static void Main(string[] args) { NgayThang[] nt = new NgayThang[3]; nt[0].ngay = 1; nt[0].thang = 1; nt[0].nam = 2016; nt[1].ngay = 2; for (int i = 0; i < 3; i++) Console.Write(nt[i].ngay + "/ " + nt[i].thang + "/ " + nt[i].nam + " – "); } } - Kết quả: 1/1/2016 – 2/2/2016 – 3/3/2016 07. Cấu trúc lồng nhau Cấu trúc có thể chứa cấu trúc. Điều này đúng không? - Mã nguồn: class Program { struct NgayThang { public int ngay; public int thang; }; struct Lich { public NgayThang ngay; }; static void Main(string[] args) { } } - Giải thích: Tương tự lệnh điều kiện if else hay vòng lặp for, cấu trúc có thể chứa cấu trúc, hay còn gọi là cấu trúc lồng nhau. Lưu ý, cấu trúc có thể chứa cấu trúc nhưng không thể chứa chính nó. 08. Trắc nghiệm vui Câu 1. Phát biểu nào sau đây sai về kiểu cấu trúc (struct) trong C#? a. struct cho phép lưu trữ thông tin của nhiều kiểu dữ liệu khác nhau vào một nơi, chỉ đại diện bằng một tên duy nhất. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 106 b. struct cho phép lưu trữ thông tin của một kiểu dữ liệu duy nhất vào nhiều nơi khác nhau. c. struct là kiểu dữ liệu do người dùng định nghĩa. d. Kiểu struct có bản chất giống như các kiểu dữ liệu thông thường như int, char, float, - Đáp án đúng: b. - Giải thích: struct là kiểu dữ liệu do người dùng định nghĩa, cho phép lưu trữ thông tin của nhiều kiểu dữ liệu khác nhau vào một nơi. Về bản chất, struct cũng giống như các kiểu dữ liệu thông thường khác. Câu 2. Phát biểu nào sau đây đúng về struct trong C#? a. struct không được cấp phát bộ nhớ khi khai báo. b. struct luôn được cấp phát bộ nhớ khi khai báo. c. Các struct được khai báo ngoài class Program. d. Các khai báo biến (variable declarations) có thể có bất kỳ kiểu gì ngoại trừ kiểu struct đang được khai báo. - Đáp án đúng: a, d. Câu 3. Phát biểu nào sau đây là sai về struct trong C#? a. Bộ nhớ không được cấp phát cho khai báo struct, mà chỉ cấp phát cho các khai báo biến. b. Khi khai báo biến, các thành phần không được khởi gán giá trị. c. Các thành phần chỉ có thể được truy xuất một khi đã được gán dữ liệu. d. Cả 3 đáp án trên đều sai. - Đáp án đúng: d. - Giải thích: Khi khai báo struct, bộ nhớ sẽ không được cấp phát cho khai báo struct mà chỉ cho khai báo biến. Các thành phần không được khởi gán giá trị khi khai báo biến và chúng chỉ có thể được truy xuất khi đã gán dữ liệu. Câu 4. Toán tử nào được dùng để truy xuất thành phần của struct? a. Dấu hai chấm (:) Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 107 b. Dấu chấm (.) c. Dấu chấm hỏi (?) d. Dấu chấm than (!) - Đáp án đúng: b - Giải thích: Toán tử dấu chấm được dùng để truy xuất thành phần của struct. Câu 5. struct nào sau đây được khai báo đúng? a. struct A { }; b. struct B ( ) { }; c. struct C [ ] { }; d. struct D { int x; }; - Đáp án đúng: a, d. Phần 11: Kiểu liệt kê 01. Enum là gì? Kiểu liệt kê (enumeration) là một tập những hằng số nguyên được đặt tên. Cú pháp khai báo: enum identifier[:base-type] { enumeration_list }; Trong đó:  base-type: là kiểu dữ liệu của mỗi thành phần (mặc định là int).  enumeration_list: sử dụng dấu phẩy để phân cách các định danh. o Định danh đầu tiên được gán giá trị 0, sau đó tăng lên một cho những định danh sau. o Có thể xác định giá trị cho các định danh này. - Mã nguồn: class Program { enum Weekday { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; enum Month { January = 1, February = 2, March = 3, April = 4, May = 5, June = 6, July = 7, August = 8, September = 9, October = 10, November = 11, December = 12 }; static void Main(string[] args) { } } Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 108 - Giải thích: Chúng ta có thể tạo ra một kiểu liệt kê với từ khóa enum. Không có vấn đề gì nếu chúng ta tạo ra một lớp (class), một cấu trúc (struct) hoặc một liệt kê (enum) với cú pháp như nhau. 02. Khai báo enum - Mã nguồn: class Program { enum Weekday { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; static void Main(string[] args) { } } - Giải thích: enum được khai báo trong lớp class Program và ngoài các hàm. Nói cách khác, enum là thành phần của lớp. 03. Nhập liệu số kiểu enum - Mã nguồn: class Program { enum Weekday { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; static void Main(string[] args) { Weekday day; Console.Write("Nhập vào thứ dạng số : "); day = (Weekday)Convert.ToInt32(Console.ReadLine()); } } - Giải thích: Định danh đầu tiên được gán giá trị 0. Trong trường hợp này, Sunday = 0, Monday = 1, 04. Nhập liệu chuỗi kiểu enum - Mã nguồn: class Program { enum Weekday { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; static void Main(string[] args) { Weekday day; Console.Write("Nhập vào thứ dạng chuỗi: "); Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 109 day = (Weekday)Enum.Parse(typeof(Weekday), Console.ReadLine()); } } - Giải thích: Định danh đầu tiên được gán giá trị 0. Trong trường hợp này, Sunday = 0, Monday = 1, 05. Lệnh lựa chọn switch switch hoạt động giống câu lệnh if. - Mã nguồn: static void Main(string[] args) { int x = 0; switch (x) { case 0: Console.Write("x=0"); break; case 1: Console.Write("x=1"); break; default: Console.Write("x không bằng 0, cũng không bằng 1"); break; } } - Kết quả: x=0 - Giải thích: switch lựa chọn dựa trên giá trị nguyên, chuỗi, ký tự hoặc bool của một biến hay một biểu thức. 06. Switch case - Mã nguồn: class Program { enum Weekday { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; static void Main(string[] args) { Weekday d = Weekday.Sunday; switch (d) { case Weekday.Sunday: Console.Write("Chủ nhật"); break; case Weekday.Monday: Console.Write("Thứ hai"); break; case Weekday.Tuesday: Console.Write("Thứ ba"); break; case Weekday.Wednesday: Console.Write("Thứ tư"); break; case Weekday.Thursday: Console.Write("Thứ năm"); break; case Weekday.Friday: Console.Write("Thứ sáu"); break; default: Console.Write("Thứ bảy"); break; } } Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 110 } - Kết quả: Chủ nhật 07. Trắc nghiệm vui Câu 1. Phát biểu nào sau đây đúng về kiểu liệt kê (enum) trong C#? a. Kiểu liệt kê là một tập hợp các hằng số nguyên được đặt tên. b. Kiểu liệt kê là một tập hợp liên tục có thứ tự các thành phần dữ liệu cùng kiểu được tham chiếu bằng cùng một tên định danh và một chỉ số. c. Kiểu liệt kê là kỹ thuật cho phép chia nhỏ một chương trình lớn ra nhiều chương trình nhỏ. d. Cả 3 đáp án trên đều đúng. - Đáp án đúng: a. - Giải thích: Kiểu liệt kê là một tập những hằng số nguyên được đặt tên. Câu 2. Sử dụng dấu gì để phân cách các định danh của enum trong C#? a. Dấu gạch chéo (/) b. Dấu chấm (.) c. Dấu phẩy (,) d. Dấu chấm phẩy (;) - Đáp án đúng: c. - Giải thích: Sử dụng dấu phẩy để phân cách các định danh trong kiểu enum. Câu 3. Phát biểu nào sau đây là đúng về enum trong C#? a. Một biến được khai báo kiểu liệt kê luôn nhận giá trị đầu tiên trong tập các giá trị của kiểu đó. b. Một biến được khai báo kiểu liệt kê có thể nhận giá trị bất kỳ trong tập các giá trị của kiểu đó. c. Định danh đầu tiên được gán giá trị 0, sau đó tăng lên một cho những định danh sau, có thể xác định giá trị cho các định danh này. d. Định danh đầu tiên được gán giá trị 1, sau đó tăng lên một cho những định danh sau, có thể xác định giá trị cho các định danh này. - Đáp án đúng: b, c. Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 111 - Giải thích: Một biến kiểu enum có thể nhận một giá trị bất kỳ trong tập hợp các giá trị của kiểu đó. Định danh đầu tiên được gán giá trị 0 và tăng dần lên 1 đơn vị cho những định danh tiếp theo. Giá trị của các định danh có thể thay đổi được. Câu 4. Khai báo nào sau đây sai? a. enum A { }; b. enum B { mot, hai, ba }; c. enum C { mot = 1; hai = 2; ba = 3 }; d. enum D { x = 5, y = 10, z = 11 }; - Đáp án đúng: c - Giải thích: Hãy nhớ rằng các định danh trong enum được phân cách nhau bởi dấu phẩy (,). Câu 5. Phát biểu nào sau đây đúng về lệnh lựa chọn switch trong C#? a. switch lựa chọn dựa trên giá trị nguyên, chuỗi, ký tự hoặc bool của một biến hay một biểu thức. b. Một lệnh switch trong C# cho một biến được kiểm tra một cách bình đẳng trong danh sách các giá trị. c. Mỗi giá trị được gọi là một case – trường hợp và biến được chuyển tới được kiểm tra cho mỗi trường hơp switch. d. Cả 3 đáp án trên đều sai. - Đáp án đúng: a, b, c. - Giải thích: switch lựa chọn dựa trên giá trị nguyên, chuỗi, ký tự hoặc bool của một biến hay một biểu thức.Mỗi giá trị được gọi là một case - trường hợp và biến được chuyển tới được kiểm tra cho mỗi trường hợp switch.

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

  • pdfkhoa_luan_xay_dung_website_day_ngon_ngu_lap_trinh_c_danh_cho.pdf
Tài liệu liên quan