Đồ án Tìm hiểu ngôn ngữ C# và viết một ứng dụng minh họa
Đề tài này tập trung tìm hiểu toàn bộ các khái niệm liên quan đến ngôn ngữ C#.
Bởi vì C# được Microsoft phát triển như là một thành phần của khung ứng dụng
.NET Framework và hướng Internet nên đề tài này bao gồm hai phần sau:
Phần 1: Tìm hiểu về ngôn ngữ C#
Việc tìm hiểu bao gồm cả các kiến thức nền tảng về công nghệ .NET Framework,
chuẩn bị cho các khái niệm liên quan giữa C# và .NET Framework. Sau đó tìm
hiểu về bộ cú pháp của ngôn ngữ này, bao gồm toàn bộ tập lệnh, từ khóa, khái
niệm về lập trình hướng đối tượng theo C#, các hỗ trợ lập trình hướng
component . Sau cùng là cách lập trình C# với ứng dụng Window cho máy để
bàn và C# với các công nghệ hiện đại như ASP.NET. ADO.NET, XML cho lập
trình Web.
Phần 2: Xây dựng một ứng dụng
Phần này là báo cáo về ứng dụng minh họa cho việc tìm hiểu ở trên. Tên ứng
dụng là Xây dựng một Website dạy học C#. Đây là ứng dụng Web 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. Ứng dụng
có thao tác cơ sở dữ liệu (Microsoft SQL Server) thông quan mô hình
ADO.NET.
Tóm tắt nội dung tài liệu: Đồ án Tìm hiểu ngôn ngữ C# và viết một ứng dụng minh họa
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN CÔNG NGHỆ PHẦN MỀM PHẠM VĂN VIỆT - TRƯƠNG LẬP VĨ TÌM HIỂU NGÔN NGỮ C# VÀ VIẾT MỘT ỨNG DỤNG MINH HỌA ĐỒ ÁN TỐT NGIỆP GIÁO VIÊN HƯỚNG DẪN NGUYỄN TẤN TRẦN MINH KHANG TP. HCM 2002 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN CÔNG NGHỆ PHẦN MỀM PHẠM VĂN VIỆT - TRƯƠNG LẬP VĨ TÌM HIỂU NGÔN NGỮ C# VÀ VIẾT MỘT ỨNG DỤNG MINH HỌA GIÁO VIÊN HƯỚNG DẪN NGUYỄN TẤN TRẦN MINH KHANG TP. HCM 2002 Lời cám ơn Để có thể hoàn tất được bài đồ án này, trước tiên phải kể đến công sức của thầy Nguyễn Tấn Trần Minh Khang. Chúng em kính lời cảm ơn đến thầy đã tận tình hướng dẫn và giúp đỡ trong thời gian thực hiện đồ án này. Chúng em xin tỏ lòng biết ơn sâu sắc đối với gia đình đã động viên, tạo điều kiện để thực hiện tốt bài đồ án. Xin cám ơn cha, mẹ, anh, chị, em! Chúng em cũng xin chân thành cảm ơn đến các thầy cô khoa Công nghệ thông tin trường Đại học Khoa học Tự nhiên Thành phố Hồ Chí Minh đã truyền đạt những kiến thức, kinh nghiệm quí báu cho chúng em trong quá trình học tập tại trường. Chúng em cũng xin chân thành cảm ơn đến các bạn bè đã giúp đỡ tài liệu, trao đổi học thuật mới có thể thực hiện đồ án này. Xin gởi lời cảm ơn đến các bạn Hồ Ngọc Huy, Trần Thế Anh, Bùi Thanh Tuấn... Thành phố Hồ Chí Minh, ngày 03 tháng 8 năm 2002 Sinh viên Phạm Văn Việt Trương Lập Vĩ Mục lục Lời cám ơn.......................................................................................................................3 Mục lục ............................................................................................................................4 Tóm tắt.............................................................................................................................1 Phần 1 Tìm hiểu ngôn ngữ C#.........................................................................................1 Chương 1 C# và .Net Framework................................................................................2 1.1 Nền tảng của .NET.............................................................................................2 1.2 .NET Framework ...............................................................................................3 1.3 Biên dịch và ngôn ngữ trung gian (MSIL).........................................................4 1.4 Ngôn ngữ C# ......................................................................................................5 Chương 2 Khởi đầu......................................................................................................6 2.1 Lớp, đối tượng và kiểu.......................................................................................6 2.2 Phát triển “Hello World”....................................................................................8 Chương 3 Những cơ sở của ngôn ngữ C# .................................................................12 3.1 Các kiểu............................................................................................................12 3.2 Biến và hằng.....................................................................................................14 3.3 Biểu thức ..........................................................................................................16 3.4 Khoảng trắng....................................................................................................16 3.5 Câu lệnh ...........................................................................................................16 3.6 Toán tử .............................................................................................................19 3.7 Tạo vùng tên.....................................................................................................21 3.8 Chỉ thị tiền xử lý ..............................................................................................22 Chương 4 Lớp và đối tượng.......................................................................................24 4.1 Định nghĩa lớp..................................................................................................24 4.2 Tạo đối tượng ...................................................................................................25 4.3 Sử dụng các thành viên tĩnh.............................................................................27 4.4 Hủy đối tượng ..................................................................................................29 4.5 Truyền tham số.................................................................................................30 4.6 Nạp chồng phương thức và hàm dựng .............................................................32 4.7 Đóng gói dữ liệu với property..........................................................................33 Chương 5 Thừa kế và Đa hình...................................................................................35 5.1 Đặc biệt hoá và tổng quát hoá..........................................................................35 5.2 Sự kế thừa.........................................................................................................35 5.3 Đa hình .............................................................................................................37 5.4 Lớp trừu tượng .................................................................................................38 5.5 Lớp gốc của tất cả các lớp: Object...................................................................39 5.6 Kiểu Boxing và Unboxing ...............................................................................40 5.7 Lớp lồng ...........................................................................................................42 Chương 6 Nạp chồng toán tử .....................................................................................44 6.1 Cách dùng từ khoá operator .............................................................................44 6.2 Cách hổ trợ các ngôn ngữ .Net khác ................................................................44 6.3 Sự hữu ích của các toán tử ...............................................................................44 6.4 Các toán tử logic hai ngôi ................................................................................45 6.5 Toán tử so sánh bằng........................................................................................45 6.6 Toán tử chuyển đổi kiểu (ép kiểu) ...................................................................45 Chương 7 Cấu trúc.....................................................................................................48 7.1 Định nghĩa cấu trúc ..........................................................................................48 7.2 Cách tạo cấu trúc..............................................................................................49 Chương 8 Giao diện...................................................................................................50 8.1 Cài đặt một giao diện .......................................................................................50 8.2 Truy xuất phương thức của giao diện ..............................................................52 8.3 Nạp chồng phần cài đặt giao diện ....................................................................54 8.4 Thực hiện giao diện một cách tường minh ......................................................55 Chương 9 Array, Indexer, and Collection .................................................................58 9.1 Mảng (Array) ...................................................................................................58 9.2 Câu lệnh foreach ..............................................................................................59 9.3 Indexers ............................................................................................................62 9.4 Các giao diện túi chứa......................................................................................65 9.5 Array Lists........................................................................................................65 9.6 Hàng đợi ...........................................................................................................65 9.7 Stacks ...............................................................................................................66 9.8 Dictionary.........................................................................................................66 Chương 10 Chuỗi.......................................................................................................67 10.1 Tạo chuỗi mới ................................................................................................67 10.2 Phương thức ToString() .................................................................................67 10.3 Thao tác chuỗi ................................................................................................68 10.4 Thao tác chuỗi động.......................................................................................70 Chương 11 Quản lý lỗi...............................................................................................72 11.1 Ném và bắt biệt lệ ..........................................................................................73 11.2 Đối tượng Exception ......................................................................................80 11.3 Các biệt lệ tự tạo ............................................................................................82 11.4 Ném biệt lệ lần nữa. .......................................................................................83 Chương 12 Delegate và Event ...................................................................................87 12.1 Delegate (ủy thác, ủy quyền) .........................................................................87 12.2 Event (Sự kiện) ............................................................................................101 Chương 13 Lập trình với C#....................................................................................109 13.1 Ứng dụng Windows với Windows Form.....................................................109 Chương 14 Truy cập dữ liệu với ADO.NET ...........................................................144 14.1 Cơ sở dữ liệu và ngôn ngữ truy vấn SQL ....................................................144 14.2 Một số loại kết nối hiện đang sử dụng .........................................................144 14.3 Kiến trúc ADO.NET ....................................................................................145 14.4 Mô hình đối tượng ADO.NET.....................................................................146 14.5 Trình cung cấp dữ liệu (.NET Data Providers)... ... hỗ trợ chức năng hiệu chỉnh ( Admin ). 23.1.2.1 Yêu cầu chức năng Ứng dụng dự định sẽ có 5 chức năng chính sau : 1. Hiển thị lý thuết 2. Minh họa lý thuyết qua ví dụ 3. Tổ chức thi trắc nghiệm 4. Cho phép quảng cáo, giới thiệu sách và Link tới các Site liên quan khác 5. Cho phép chức năng hiệu chỉnh ( thêm, xóa, sửa ) các thành phần trên Mô tả chi tiết về các yêu cầu chức năng trên : Lưu trữ • Lý thuyết về từng chủ đề, các chương thuộc chủ đề và từng mục chính, ý chính của chương, các tập tin đính kèm. • Các ví dụ minh họa của mỗi chủ đề, tập tin đính kèm nếu có. Website dạy học ngôn ngữ C# Gvhd: Nguyễn Tấn Trần Minh Khang 257 • Danh sách các bài trắc nghiệm và các câu hỏi, không lưu trữ bài làm • Các địa chỉ Web-Site để tham chiếu, các hình ảnh và thông tin về việc quảng cáo sách ứng với mỗi chủ đề. • Một số thông tin khác : thông tin người dùng Admin, các tham số hiệu chỉnh Tra cứu • Thông tin về mỗi chủ đề, chương, mục chính và các ý chính thuộc chương. • Thông tin về các bài ví dụ minh họa lý thuyết. • Thông tin về các bài thi trắc nghiệm. • Một số thông tin khác liên quan nếu cần thiết. Tính toán • Số câu đúng cho các bài trắc nghiệm và tính điểm cho chúng. Kết xuất • Hiển thị theo cấu trúc phân cấp dạng cây về lý thuyết theo chủ đề, chương, mục chính, ý chính. • Ví dụ minh họa lý thuyết • Các bài trắc nghiệm và kết quả tương ứng • Danh sách các tham chiếu đến các Web-Site, các hình ảnh và thông tin về sách cần quảng cáo. • Các thông tin về lý thuyết, ví dụ, trắc nghiệm, sách cần để hiệu chỉnh. • Các báo cáo thống kê về các mục trên nếu có. 23.1.2.2 Yêu cầu chất lượng 2. Ứng dụng phải hiển thị thông tin một cách súch tích, ngắn gọn, trực quan đối với người dùng, phải giúp người dúng nắm bắt thông tin được nhanh nhất. 3. Phải cho phép hiệu chỉnh (Admin) trực tiếp trên ứng dụng. 4. Nội dung phải chất lượng, phù hợp với từng chủ đề, dễ hiểu. Website dạy học ngôn ngữ C# Gvhd: Nguyễn Tấn Trần Minh Khang 258 23.2 Phân tích hướng đối tượng 23.2.1 Sơ đồ lớp đối tượng Hình 23-6 Lớp đối tượng 23.2.2 Ý nghĩa các đối tượng chính 23.2.2.1 CHỦ ĐỀ Ứng dụng có thể có nhiều chủ đề, mỗi chủ đề sẽ lưu trữ các thông tin về chính nó như : các thành phần thuộc chủ đề, giới thiệu về chủ đề, có nhiều chương. 23.2.2.2 CHƯƠNG Chương thuộc về một chủ đề nào đó, mỗi chương có một hay nhiều mục chính, ví dụ, trắc nghiệm. 23.2.2.3 MỤC CHÍNH Mục chính thuộc về một chương nào đó, mỗi mục chính có một hay nhiều ý chính con và một tập tin mô tả chi tiết cho mục chính này nếu có. 23.2.2.4 VÍ DỤ Ví dụ thuộc về một chương nào đó, mỗi ví dụ sẽ có phần mã nguồn và kết xuất tương ứng với mã nguồn này, có thể sẽ có một tập tin mô tả chi tiết về ví dụ nếu cần thiết. 23.2.2.5 CÂU TRẮC NGHIỆM Trắc nghiệm thuộc về một chương, một bài trắc nghiệm sẽ có nhiều câu hỏi, mỗi câu hỏi sẽ có một đáp án và các chọn lựa tương ứng với câu hỏi đó. 23.2.3 Bảng thuộc tính các đối tượng chính Thuộc tính đối tượng : CHỦ ĐỀ Stt Tên thuộc tính Loại Kiểu dữ liệu Ý nghĩa 1 MACHUDE PK VARCHAR(50) Mỗi chủ đề có một mã chủ đề duy nhất Website dạy học ngôn ngữ C# Gvhd: Nguyễn Tấn Trần Minh Khang 259 2 TEN VARCHAR(50) Tên chủ đề 3 NOIDUNG VARCHAR(1000) Nội dung của chủ đề 4 SOCHUONG INT Số chương có trong chủ đề 5 TENTP VARCHAR(50) Tên thành phần : Lý thuyết, Vì dụ, Trắc nghiệm, Quản trị 6 NOIDUNGTP VARCHAR(500) Nội dung tổng quan của thành phần thuộc chủ đề Thuộc tính đối tượng : CHƯƠNG Stt Tên thuộc tính Loại Kiểu dữ liệu Ý nghĩa 1 MACHUONG PK INT Mỗi chương có một mã duy nhất 2 TEN VARCHAR(50) Tên của chương 3 NOIDUNG VARCHAR(1000) Nội dung của chương 4 SOMUCCHINH INT Số mục chính trong một chương Thuộc tính đối tượng : MỤC CHÍNH Stt Tên thuộc tính Loại Kiểu dữ liệu Ý nghĩa 1 MAMUCCHINH PK INT Mã mục chính 2 TENMC VARCHAR(100) Tên mục chính 3 GIOITHIEUMC VARCHAR(2000) Giới thiệu tổng quan tổng quan về mục chính 4 TAPTIN VARCHAR(50) Tên tập tin mô tả chi tiết về mục chính nếu có 5 NOIDUNGCTMC VARCHAR(1000) Nội dung của một ý chính con thuộc mục chính Thuộc tính đối tượng : VÍ DỤ Stt Tên thuộc tính Loại Kiểu dữ liệu Ý nghĩa 1 MAVD PK INT Mã ví dụ 2 TENVIDU VARCHAR(100) Tên của ví dụ 3 MANGUON VARCHAR(1000) Mã nguồn của một ví dụ 4 KETQUA VARCHAR(1000) Kết xuất của mã ví dụ 5 TAPTIN VARCHAR(50) Tên tập tin mô tả chi tiết về một ví dụ Website dạy học ngôn ngữ C# Gvhd: Nguyễn Tấn Trần Minh Khang 260 Thuộc tính đối tượng : CÂU TRẮC NGHIỆM Stt Tên thuộc tính Loại Kiểu dữ liệu Ý nghĩa 1 MACAUTRACNGHIEM PK INT Mã câu trắc nghiệm 2 TEN VARCHAR(500) Tên của câu trắc nghiệm 3 NOIDUNG VARCHAR(1000) Nội dung của câu trắc nghiệm 4 TRALOI1, TRALOI2, TRALOI3, TRALOI4 VARCHAR(500) Một câu hỏi có 4 câu trả lời, ứng với 4 thuộc tính 5 DAPAN INT Đáp án của câu hỏi, có 4 giá trị : 1, 2, 3, 4 23.2.4 Các xử lý trên các đối tượng chính Xử lý trên đối tượng : CHỦ ĐỀ Stt Tên xử lý Loại Ý nghĩa 1 Hiển thị thông tin về chủ đề Qui định Hiển thị thông tin về các thành phần trong chủ đề 2 Thêm chủ đề mới Qui định Dữ liệu nhập là tên và nội dung 3 Xóa chủ đề đã có sẵn Qui định Xóa toàn bộ thông tin về chủ đề 4 Sửa đổi thông tin về chủ đề Qui định Hiệu chỉnh tên, nội dung chủ đề 5 Kiểm tra hợp lệ việc thay đổi chủ đề Qui định Kiểm tra các ràng buộc và tính hợp lệ khi thêm, xóa, sửa chủ đề 6 Lập báo cáo, thống kê Qui định Tổng kết toàn bộ thông tin về số chương, ví dụ, câu trắc nghiệm Xử lý trên đối tượng : CHƯƠNG Stt Tên xử lý Loại Ý nghĩa 1 Hiển thị thông tin về chương Qui định Hiển thị danh sách tên chương theo từng chủ đề và nội dung 2 Thêm chương mới Qui định Dữ liệu nhập là tên và nội dung 3 Xóa chương đã có sẵn Qui định Xóa toàn bộ thông tin về chương : các mục chính, ý chính 4 Sửa đổi thông tin về chương Qui định Hiệu chỉnh tên, nội dung chương 5 Kiểm tra hợp lệ việc thay đổi chương Qui định Kiểm tra các ràng buộc và tính hợp lệ khi thêm, xóa, sửa Website dạy học ngôn ngữ C# Gvhd: Nguyễn Tấn Trần Minh Khang 261 Xử lý trên đối tượng : MỤC CHÍNH Stt Tên xử lý Loại Ý nghĩa 1 Hiển thị thông tin về mục chính thuộc chương Qui định Hiển thị danh sách các ý chính con của mục chính 2 Thêm mục chính mới Qui định Dữ liệu nhập là tên, nội dung mục chính và các ý chính con, và cả tên tập tin mô tả mục chính nếu cần thiết 3 Xóa mục chính đã có sẵn Qui định Xóa toàn bộ thông tin về mục chính : các ý chính, tên tập tin 4 Sửa đổi thông tin về mục chính Qui định Hiệu chỉnh tên, nội dung nội dung mục chính và các ý chính con nếu cần thiết 5 Kiểm tra hợp lệ việc thay đổi mục chính Qui định Kiểm tra các ràng buộc và tính hợp lệ khi thêm, xóa, sửa Xử lý trên đối tượng : VÍ DỤ Stt Tên xử lý Loại Ý nghĩa 1 Hiển thị thông tin về ví dụ Qui định Hiển thị danh sách các ví dụ của chương 2 Thêm ví dụ mới Qui định Dữ liệu nhập là tên, giới thiệu sơ về ví dụ, mã nguồn, kết xuất tương ứng và cả tên tập tin mô tả ví dụ nếu cần thiết 3 Xóa ví dụ đã có sẵn Qui định Xóa toàn bộ thông tin về ví dụ : tên, mã nguồn, kết xuất và tên tập tin 4 Sửa đổi thông tin về ví dụ Qui định Hiệu chỉnh tên, giới thiệu ví dụ, mã nguồn, kết xuất và tên tập tin nếu có. 5 Kiểm tra hợp lệ việc thay đổi ví dụ Qui định Kiểm tra các ràng buộc và tính hợp lệ khi thêm, xóa, sửa Xử lý trên đối tượng : CÂU TRẮC NGHIỆM Stt Tên xử lý Loại Ý nghĩa 1 Hiển thị thông tin về câu trắc nghiệm thuộc chương Qui định Hiển thị danh sách các câu trắc nghiệm, các câu trả lời và đáp án tương ứng của câu. 2 Thêm câu trắc nghiệm mới Qui định Dữ liệu nhập là tên, câu hỏi trắc Website dạy học ngôn ngữ C# Gvhd: Nguyễn Tấn Trần Minh Khang 262 nghiệm, các câu chọn lựa và đáp án của câu. 3 Xóa câu trắc nghiệm đã có sẵn Qui định Xóa toàn bộ thông tin về câu trắc nghiệm : tên, câu hỏi trắc nghiệm, các câu chọn lựa và đáp án của câu. 4 Sửa đổi thông tin về câu trắc nghiệm Qui định Hiệu chỉnh tên, câu hỏi trắc nghiệm, các câu chọn lựa và đáp án của câu. 5 Kiểm tra hợp lệ việc thay đổi câu trắc nghiệm Qui định Kiểm tra các ràng buộc và tính hợp lệ khi thêm, xóa, sửa 23.3 Thiết kế hướng đối tượng 23.3.1 Thiết kế dữ liệu 23.3.1.1 Sơ đồ logic Hình 23-7 Sơ đồ logic 23.3.1.2 Bảng thuộc tính các đối tượng phụ Thuộc tính đối tượng : THAM SỐ Stt Tên thuộc tính Loại Kiểu dữ liệu Ý nghĩa 1 MATHAMSO PK INT Mã tham số 2 TEN VARCHAR(100) Tên tham số 3 GIATRI INT Giá trị tham số 4 DIENGIAI VARCHAR(100) Ý nghĩa của tham số Thuộc tính đối tượng : NGƯỜI DÙNG Stt Tên thuộc tính Loại Kiểu dữ liệu Ý nghĩa Website dạy học ngôn ngữ C# Gvhd: Nguyễn Tấn Trần Minh Khang 263 MÀN HÌNH CHÍNH Tổng quan lý thuết Tổng quan Ví dụ Tổng quan Trắc nghiệm Quản trị Đăng nhập Lý thuyết theo chương Ví dụ theo chương Trắc nghiệm theo chương Lý thuyết Ví dụ Trắc nghiệm Thông báo lỗi Báo cáo Thống kê 1 TENNGUOIDUNG PK VARCHAR(100) Tên người dùng 2 MATMA VARCHAR(100) Mật mã 3 EMAIL VARCHAR(100) Địa chỉ mail 4 DIENTHOAI VARCHAR(100) Điện thoại 5 FAX VARCHAR(100) Số fax 23.3.2 Thiết kế giao diện 23.3.2.1 Tổng quan Sơ đồ màn hình Website dạy học ngôn ngữ C# Gvhd: Nguyễn Tấn Trần Minh Khang 264 23.3.2.2 Một số giao diện của ứng dụng Giao diện chính Hình 23-8 Trang chủ ứng dụng dạy học CSharp • Website dạy học ngôn ngữ C# Gvhd: Nguyễn Tấn Trần Minh Khang 265 Giao diện chi tiết lý thuyết từng chương Hình 23-9 Liệt kê chi tiết các mục chính, ý chính con trong chương số 1 Website dạy học ngôn ngữ C# Gvhd: Nguyễn Tấn Trần Minh Khang 266 Giao diện tổng quan về ví dụ Hình 23-10 Liệt kê tất cả ví dụ trong mỗi chương Website dạy học ngôn ngữ C# Gvhd: Nguyễn Tấn Trần Minh Khang 267 Giao diện mô tả chi tiết ví dụ Hình 23-11 Minh họa lý thuyết bằng mã ví dụ và kết xuất của nó Website dạy học ngôn ngữ C# Gvhd: Nguyễn Tấn Trần Minh Khang 268 Giao diện các câu trắc nghiệm kiến thức Hình 23-12 Trắc nghiệm kiến thức chương số 1 Website dạy học ngôn ngữ C# Gvhd: Nguyễn Tấn Trần Minh Khang 269 Kết quả bài làm trắc nghiệm Hình 23-13 Kết quả chấm điểm bài làm trắc nghiệm Website dạy học ngôn ngữ C# Gvhd: Nguyễn Tấn Trần Minh Khang 270 Giao diện hiệu chỉnh chủ đề Hình 23-14 Cho phép thêm, xóa và sử chủ đề Website dạy học ngôn ngữ C# Gvhd: Nguyễn Tấn Trần Minh Khang 271 Giao diện tổng quan hiệu chỉnh nội dung chi tiết của từng chủ đề Hình 23-15 Tổng quan về hiệu chỉnh lý thuyết, ví dụ và trắc nghiệm Website dạy học ngôn ngữ C# Gvhd: Nguyễn Tấn Trần Minh Khang 272 Giao diện hiệu chỉnh chi tiết nội dung lý thuyết chương Hình 23-16 Cho phép thêm, xóa và sửa nội dung lý thuyết theo từng chương Website dạy học ngôn ngữ C# Gvhd: Nguyễn Tấn Trần Minh Khang 273 Giao diện hiệu chỉnh chi tiết Trắc nghiệm Hình 23-17 Giao diện thêm, xóa và sửa câu trắc nghiệm
File đính kèm:
- do_an_tim_hieu_ngon_ngu_c_va_viet_mot_ung_dung_minh_hoa.pdf