PHÁT TRIỂN PMHĐT Ngôn ngữ lập trình C# Số tín chỉ: 2 tc Số tiết Lý thuyết: 20 tiết, Thực hành: 20 tiết 1 Ngôn ngữ lập trình C# • Là sự kết hợp C++ và Java • Hướng đối tượng • Hỗ trợ kiểm soát và xử lý ngoại lệ (exception) tốt. • Các loại ứng dụng: Console, Windows Forms, Web Forms, Windows Services, Web Services CLR trên Linux Hello.exe CLR trên Hello.cs C# Compiler hoặc Windows Hello.dll MSIL CLR trên MacOS 2 Giới thiệu .Net Framework • Có các ngôn ngữ lập trình cơ bản: C#, VB.Net, C++ • Tất cả các chương trình phát triển trên .NET sẽ được chuyển về mã trung gian - Microsoft Intermediate Language (MSIL) – Bước 1: Dịch mã nguồn MSIL – Bước 2: MSIL mã CLR thực thi • CLR: Common Language Runtime • FCL: Framework Class Library 3 Tạo ứng dụng Console 4 Cấu trúc chương trình C# • Phần chú thích (option) // Chương trình C# đầu tiên • Phần khai báo dùng namespace (option) using System; using System.Generic; using System.Text; • Phần định nghĩa namespace, lớp và các phương thức namespace HelloWorld { class Program { static void Main(string[] args){ { Console.ReadLine(); } } } 5 Vùng tên - Namespaces • Namespace là một nhóm các lớp có mối liên quan VD: using System; using System.Data; using System.Forms; • Namespace System chứa nhiều lớp giao tiếp với hệ thống • Từ khóa using dùng để khai báo namespace VD: using System.OleDb; 6 Câu lệnh • Các câu lệnh được viết trong thân của phương thức (ở đây là phương thức Main) • Thực hiện một công việc nào đó • Kết thúc bởi dấu chấm phẩy (;) namespace HelloWorld { class Program Phương thức Main { static void Main(string[] args) { Các câu lệnh Console.Write("Hello World!"); // Xuất ra câu chào Console.ReadLine(); // Chờ nhấn Enter } } } 8 Kiểu dữ liệu số nguyên Name Common Type System Description Range (min:max) sbyte System.SByte 8-bit signed integer -128:127 (-27:27-1) short System.Int16 16-bit signed integer -32,768:32,767 (-215:215-1) - int System.Int32 32-bit signed integer 2,147,483,648:2,147,483,6 47 (-231:231-1) - 9,223,372,036,854,775,808 long System.Int64 64-bit signed integer : 9,223,372,036,854,775,807 (-263:263-1) byte System.Byte 8-bit signed integer 0:255 (0:28-1) ushort System.UInt16 16-bit signed integer 0:65,535 (0:216-1) uint System.UInt32 32-bit signed integer 0:4,294,967,295 (0:232-1) 0:18,446,744,073,709,551, ulong System.UInt64 64-bit signed integer 615(0:264-1) 9 Kiểu dữ liệu số thập phân Name Common Type System Description Range (approximate) float System.9 × 1028 Kiểu Boolean bool System.Boolean true or false Kiểu Ký tự, Chuỗi char System.Char 16-bit (Unicode) character string System.String Unicode character string Kiểu đối tượng The root type, from which all other object System.Object types in the CTS derive 10 Các ký tự lệnh – Escape Sequence Escape Sequence Character \' Single quote \" Double quote \\ Backslash \0 Null \a Alert \b Backspace \f Form feed \n Newline \r Carriage return \t Tab character \v Vertical tab 11 Chuyển đổi kiểu dữ liệu • Số thành chuỗi int so = 10; string chuoi = so.ToString(); • Chuỗi thành số string chuoi = “12345”; double n = double.Parse(chuoi); double n = Convert.ToDouble(chuoi); int n = double.3}; do{ i--; foreach (double temp in arr) { Console.WriteLine(" " + i); sum += temp; } while(i>5); //thoat: false } 15 Các lệnh điều khiển • Lệnh goto: goto Label1; Console.WriteLine(“Câu lệnh 2"); Label1: Console.WriteLine(“Câu lệnh 3"); • Lệnh break: dùng câu lệnh break khi muốn thoát khỏi vòng lặp for (int i = 0; i < 10; i++) { if (i > 5) break; Console.WriteLine(" " + i); } 16 Các lệnh điều khiển • Lệnh continue: được dùng trong vòng lặp khi muốn thi hành tiếp vòng lặp nhưng không thi hành các lệnh còn lại trong vòng lặp, các lệnh sau lệnh continue. for (int i = 0; i < 10; i++) { if (i < 5) continue; Console.WriteLine(" " + i); } • Lệnh return: dùng để thoát khỏi một hàm, nếu hàm có một kiểu dữ liệu trả về thì return phải trả về một kiểu dữ liệu này. 17 Một số hàm thông dụng • Thông qua lớp Math – Lấy giá trị tuyệt đối int x = Math.Abs(-10); // kết quả x = 10 – Lũy thừa int x = Math.Pow(2,3); // kết quả x = 2^3 – Lấy căn double x = Math.Sqrt(4); // kết quả x = 2 – Làm tròn double x = Math.12 18 Một số hàm thông dụng (tt) • Lớp ký tự - char – bool char.IsDigit(char c) : có phải là ký số – bool char.IsLetter(char c) : có phải là ký tự – bool char.IsLetterOrDigit(char c) : có phải là ký tự hoặc ký số – bool char.IsLower(char c) : có phải là ký tự thường – bool char.IsUpper(char c) : có phải là ký tự hoa – char char.ToUpper(char c) : trả về ký tự hoa – char char.ToLower(char c) : trả về ký tự thường Ví dụ: string str = “123”; Console.
Do dai: “ + str.Length); bool b1 = char.WriteLine(b1); // true //Kiểm tra tất cả các ký tự của chuỗi có phải là ký tự số ? 19 Một số hàm thông dụng (tt) static void Main(string[] args) { int a = 5; int b = 10; Console.WriteLine("Truoc ham: a = " + a.WriteLine("Sau ham: a = " + a.WriteLine("Trong ham: a = " + a.ToString()); } 20 Một số hàm thông dụng (tt) • Lớp chuỗi – string – Length : Chiều dài chuỗi (số ký tự) – IndexOf(): Vị trí xuất hiện đầu tiên của một chuỗi con trong chuỗi – LastIndexOf(): Vị trí xuất hiện cuối cùng của một chuỗi con trong chuỗi – ToUpper(): Trả về chuỗi chữ hoa – ToLower(): Trả về chuỗi chữ thường – Replace(): Thay thế chuỗi con trong chuỗi bằng một chuỗi con khác – Split(): Cắt một chuỗi thành nhiều chuỗi con – SubString(): Lấy một chuỗi con 21 Một số hàm thông dụng (tt) • Ví dụ 1: string str1 = “Hello world”, str2; char c = str1[0]; // c='H'; int i = str1.Length; // i = 10 int i = str1.IndexOf(“wo”); // i = 6 str2 = str1.Replace(“w”, “W”); // str2=”Hello World” str2 = str1.ToLower(); // str2 = “hello world” str2 = str1.ToUpper(); // str2 = “HELLO WORLD” 22 Một số hàm thông dụng (tt) • Ví dụ 2: int a = 1, b = 2, tong = a+b; string str = "Tong " + a.ToString() + " la " + tong.WriteLine(str); str = string.WriteLine(str); // ----------------------------------------------------------------------------------- string str = “2,15,678”; string[] arrStr = str.Split(',') ; for (int i=0; i<arrStr.Length;i++) { sum += Convert.ToInt32(arrStr[i]); } 23 Một số hàm thông dụng (tt) • Ví dụ 3: Hàm kiểm tra MSSV có phải là 7 ký tự số không? private bool KiemTraMSSV(string mssv) { // Kiem tra mssv chi co 7 ky tu if (mssv.Length != 7) return false; // Kiem tra cac ky tu phai la chu so for (int i = 0; i < mssv.Length; i++) { if (char.IsDigit(mssv[i]) == false) return false; } return true; } 24 Bài tập – dữ liệu kiểu chuỗi • Viết hàm tách tên. Tham số truyền vào là họ và tên, hàm sẽ trả về tên. • Viết hàm tách họ. Tham số truyền vào là họ và tên, hàm sẽ trả về họ và chữ lót.
• Viết hàm chuẩn hóa chuỗi họ tên: – Không có khoảng trắng trước và sau tên – Không có hơn 1 ký tự khoảng trắng giữa các ký tự – Ký tự đầu của các từ phải viết hoa – Ví dụ: “Nguyen Y Van” là hợp lệ • Viết hàm đếm số từ trong chuỗi. – Ví dụ: “Truong Dai hoc Dong Thap” 5 • Viết hàm chuyển đổi số thành chữ. – Ví dụ: 12345 Mười hai nghìn ba trăm bốn mươi lăm 25 Mảng 1 chiều • Cú pháp: type [ ] array_name; • Ví dụ: int [ ] arrInt; // mảng kiểu số nguyên arrInt = new int[20]; // tạo mảng có 20 phần tử int [ ] arrInt = new int[20]; arrInt[0] = 30; // phần tử đầu tiên có giá trị 30 string[] arrStr = {"Hồng", "Lan", "Cúc"}; int Ien = arrStr.Length; // len = 3 26 Mảng 1 chiều • Ví dụ: class Program { static void Main(string[] args) { int [ ] mang = { 5, 4, 3, 6, 7, 2 }; Array.Reverse(mang); //sắp xếp giảm dần Console.ReadLine(); } static void hienthi(int [] a) { for (int i = 0; i < a.Write(“ “ + a[i]); } } 27 Mảng 1 chiều Bài tập: tính tổng các số nguyên của mảng int [ ] mang = {1, 5, 2, 4, 3}; • Dùng vòng lặp for ? • Dùng vòng lặp while ? • Dùng vòng lặp foreach ? 28 Mảng 2 chiều • Cú pháp: type [ , ] array_name; • Ví dụ: int[,] m = new int[2,3]; //mảng m có 2 dòng, 3 cột int[,] m = new int[,] { {1,2}, {3,4}, {5,6}, {7,8} }; Một loại thứ 2 của mảng nhiều chiều trong C# là Jagged array. Jagged là một mảng mà mỗi phần tử là một mảng với kích thước khác nhau.
Những mảng con này phải đuợc khai báo từng mảng con một. int[][] a = new int[3][]; a[0] = new int[4]; a[1] = new int[3]; a[2] = new int[1]; 29 Mảng ArrayList • Một số thao tác – Add(): Thêm phần tử vào cuối mảng – Toán tử []: Lấy phần tử trong mảng – Insert(): Chèn phần tử vào vị trí đã chọn – Count: Số lượng phần tử • Ví dụ: using System.Collections; int tong = 0; ArrayList mang = new ArrayList(); for (int i=0; i<mang.Count; i++) { int so = (int)mang[i]; mang.Add(1); tong = tong + so; mang.WriteLine(‘’Tong= ‘’ + tong.Add(4); // mang = {1, 2, 3, 4} 30 Kiểm tra dữ liệu nhập int so1, so2, tong; if (int.Text, out so1) == false) { MessageBox.Focus(); } else if (int.Text, out so2) == false) { MessageBox.Focus(); } else { tong = so1 + so2; txtTong.ToString(); } // Hãy viết bằng cách tách ra từng lệnh if riêng 31 Kiểm tra dữ liệu nhập (tt) if (KiemTraMSSV(txtMSSV.Text) == false) { MessageBox.Focus(); } else if (KiemTraHoTen(txtHoTen.Text) == false) { MessageBox. } 32 Kiểm tra dữ liệu nhập (tt) private bool KiemTraMSSV(string mssv) { // Kiem tra mssv chi co 7 ky tu if (mssv.Length != 7) return false; // Kiem tra cac ky tu phai la chu so for (int i = 0; i < mssv.Length; i++) { if (char.IsDigit(mssv[i]) == false) return false; } return true; } 33 Quản lý lỗi • C# quản lý lỗi và các trạng thái bất thường bằng biệt lệ (exception) double so1; try { so1 = Convert.Text); } catch { MessageBox.Show("Khong phai la so"); } 34 Tạo ứng dụng Windows Form Tạo project: Windows App 35 Windows control - Form • Tất cả các thành phần trên form đều là đối tượng • Các control: – System. object • Các controls là instance của các lớp trên.
object object object object 36 Giao diện làm việc – Windows Form Windows App do 2 Visual Studio khởi tạo 1 3 1: form ứng dụng 2: control toolbox 3: solution explorer 4 4: form properties 37 Windows control - Form Form1.cs Lớp Form cơ sở Control kiểu Label Thiết kế form & control Add control vào form Chạy ứng dụng với Form1 làm form chính 38 Windows control - Form • Nhóm thuộc tính hiển thị – BackColor (Màu nền) this.White; – ForeColor (Thiết lập màu chữ) this.Black; – BackgroundImage this.BackgroundImage = new Bitmap("background.jpg"); – Text (Tiêu đề của Form) this.Text = “Quan ly Hoc sinh”; – FormBorderStyle this.None; – StartPosition this.CenterScreen; – WindowState this.