Tải bản đầy đủ (.pdf) (66 trang)

Hướng dẫn thực hành công nghệ lập trình tiên tiến

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.42 MB, 66 trang )

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

Khối: Đại Học và Cao Đẳng
Năm 2013


Hướng dẫn:


Bài tập thực hành được chia theo Module


Mỗi Module được thiết kế cho thời lượng là 3

6 tiết thực hành tại lớp với
sự hướng dẫn của giảng viên.


Tùy theo số tiết phân bổ, mỗi tuần học có thể thực hiện nhiều Module.


Sinh viên phải làm tất cả các bài tập trong các Module ở tuần tương ứng.
Những sinh viên chưa hòan tất phần bài tập tại lớp có trách nhiệm tự làm
tiếp tục ở nhà.


Các bài có dấu (*) là các bài tập nâng cao dành cho sinh viên khá giỏi.


Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin


MỤC LỤC
Module 1: Thiết kế giao diện với Custom Component 1
Module 2: Truy suất dữ liệu với LINQ 15
Module 3: Truy suất dữ liệu với CodeSmith 33
Module 4: Thiết kế giao diện với WPF 39
Module 5: .Net Remoting 54
Module 6: Danh sách đề tài 62

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 1 -

Module 1: Thiết kế giao diện với Custom Component
Nội dung kiến thức thực hành:
- Thực hành Custom Control
- Thực hành User Control (Composite Control)
- Thực hành các control trong DotNetBar

Bài tập 1:

Mục đích:

- Tạo được Custom Control cho TextBox và xử lý sự kiện
Yêu cầu:
- Hãy tạo một MyTextBox kế thừa từ TextBox, MyTextBox này có đặc điểm sau:
 Chỉ cho phép nhập số nguyên dương
 Có Background mặc định là “whitesmoke”
 Có kích thước mặc định: Width=150
Hướng dẫn:
- Background và kích thước tự thiết lập
- Để MyTextBox chỉ cho phép nhập số nguyên dương ta override lại phương thức

KeyPress:
private void MyTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar);
}
- Sau khi biên dịch, MyTextBox sẽ xuất hiện ở trong ToolBox, ta kéo thả vào Form

- Để làm lẹ thì ta nên cho kế thừa từ User Control, sau đó sửa lại TextBox, chi tiết:
- Bấm chuột phải vào Project/ Add New / chọn User Control …
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 2 -


public partial class MyTextBox : UserControl
{
}
Ta sửa thành:
public partial class MyTextBox : TextBox
{
}
- Sau đó tiến hành xóa một dòng lệnh mà Visual sẽ tự động báo lỗi (bạn thực hành đi rồi sẽ
thấy dòng báo lỗi này, chỉ việc xóa nó đi):
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- Để thiết lập sự kiện cho MyTextBox thì tương tự như các control khác của Visual, ta làm
như sau: Chọn MyTextBox ở chế độ Design, click vào biểu tượng tia chớp có khoanh tròn
màu đỏ, sau đó chọn các kiểu sự kiện mà ta mong muốn.

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 3 -


Bài tập 2:

Mục đích:

- Tạo được Custom Control và xử lý sự kiện cho Custom Control
Yêu cầu:
- Hãy tạo một MyTextBox kế thừa từ TextBox, MyTextBox này có đặc điểm sau:
 Chỉ cho phép nhập số (số nguyên âm, số nguyên dương, số thực …)
 Có Background mặc định là “pink”
 Có kích thước mặc định: Width=150
Hướng dẫn:
- Background và kích thước tự thiết lập
- Để kiểm tra một dãy số có phải hợp lệ hay không:
bool ret = System.Text.RegularExpressions.Regex.IsMatch(dayso, @"^[+-]?\d+(\.\d+)?$");

Với dayso hợp lệ thì ret=true, dayso có thể là:
dayso= 1234.113; dayso= 0 ; dayso= 113 ; dayso= 12.13; dayso= -114; dayso= -113.1114

Bài tập 3:

Mục đích:

- Tạo được Custom Control cho ListBox và xử lý sự kiện
Yêu cầu:
- Hãy tạo một MyListBox kế thừa từ ListBox, MyListBox này có đặc điểm sau:
 Cho phép tô màu các phần tử tùy ý
 Ứng dụng MyListBox để làm chương trình như dưới đây:

- Nhập Text và chọn màu từ ColorDialog ListBox sẽ tô màu phần tử theo đúng yêu cầu.
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin

- 4 -

Hướng dẫn:
public class MyListBoxItem
{
public MyListBoxItem(Color c, string text)
{
ItemColor = c;
Text = text;
}
public Color ItemColor { get; set; }
public string Text { get; set; }
public override string ToString()
{
return this.Text;
}
}

public partial class MyListBox : ListBox
{
public MyListBox()
{
InitializeComponent();
this.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
}
private void MyListBox_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index < 0) return;
e.DrawBackground();
MyListBoxItem item = this.Items[e.Index] as MyListBoxItem;

if (item != null) {
e.Graphics.DrawString( // Draw the appropriate text in the ListBox
item.Text, // The message linked to the item
this.Font, // Take the font from the listbox
new SolidBrush(item.ItemColor), // Set the color
0, // X pixel coordinate
e.Index * this.ItemHeight // Y pixel coordinate. Multiply the index by the ItemHeight
defined in the listbox.
);
}
else {
// The item isn't a MyListBoxItem, do something about it
}
}

}
Trong Form:
MyListBoxItem item = new MyListBoxItem(Color.Red, "Hello teo");
myListBox1.Items.Add(item);
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 5 -

Bài tập 4:

Mục đích:

- Tạo được Custom Control cho ListBox và xử lý sự kiện
Yêu cầu:
- Hãy tạo một MyListBox kế thừa từ ListBox, MyListBox này có đặc điểm sau:
 Tự động tô màu đỏ cho những phần tử là số nguyên tố (số nguyên tố là số chỉ chia

hết cho 1 và chính nó. số 0 và số 1 không phải là số nguyên tố).
 Tự động tô màu xanh cho các số hoàn thiện (số hoàn thiện là số mà tổng các ước
số không kể nó thì bằng chính nó, ví dụ: 6=3+2+1 , 28 =14+7+4+2+1)
 Các phần tử khác (kể cả số hay là chuỗi) thì không tô màu.



Hướng dẫn:
private bool isPrime(int x) //kiểm tra số nguyên tố
{
if (x < 2) return false;
for (int i = 2; i <= Math.Sqrt(x); i++)
{
if (x % i == 0) return false;
}
return true;
}
private bool isPerfect(int x) //kiểm tra số hoàn thiện
{
int s = 0;
for (int i = 1; i < x; i++)
if (x % i == 0) s = s + i;
return s == x;
}
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 6 -

Bài tập 5:

Mục đích:


- Tạo được Custom Control cho Button và xử lý sự kiện
Yêu cầu:

- Vẽ lại các Button như hình bên dưới:

Hướng dẫn:
- Trong MyButton kế thừa từ Button, ta override OnPaint giống như bên đưới (ví dụ vẽ
Button giống hình eclipse, tương tự cho các hình khác):
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
SizeF textSize = e.Graphics.MeasureString(this.Text, base.Font);
int textX = (int)(base.Size.Width / 2) - (int)(textSize.Width / 2);
int textY = (int)(base.Size.Height / 2) - (int)(textSize.Height / 2);
Rectangle newRect = new Rectangle(ClientRectangle.X + 1, ClientRectangle.Y + 1,
ClientRectangle.Width - 3, ClientRectangle.Height - 3);
LinearGradientBrush brush=new LinearGradientBrush
(new Point(0,0),new Point(1,1),Color.Red,Color.Blue);
e.Graphics.DrawString(this.Text, base.Font, brush, textX, textY);
e.Graphics.DrawEllipse(new Pen(brush, 1), newRect);
}
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 7 -

Bài tập 6:

Mục đích:

- Tạo được Custom Control cho Button và xử lý sự kiện

Yêu cầu:
- Thiết kế lại Button như thể hiển trong Form1 dưới đây:

- Chạy thử ứng dụng (double click vào biểu tượng dưới đây):

- Soure code ở đây (demo của codeproject.com):
Hướng dẫn:
- Chi tiết xem trên trang: />Button-Using-C
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 8 -

Bài tập 7:

Mục đích:

- Tạo được User Control và xử lý sự kiện
Yêu cầu:
- Thiết kế User Control để sử dụng như hình dưới đây:

- User Control trên là tổng hợp 7 control: 3 Label, 3 TextBox và 1 Panel
- Khi người sử dụng nhập giá trị vào TextBox bất kỳ thì User Control phải tự động đổi
màu nền cho Panel theo đúng thông số
Hướng dẫn:
- Tạo một MyUserControl kế thừa UserControl, kéo thả một số control vào UserControl
này:

- Viết sự kiện TextChanged cho 3 TextBox ở trên:
txtBlue.TextChanged+=txt_TextChanged;
txtGreen.TextChanged += txt_TextChanged;
txtRed.TextChanged += txt_TextChanged;

private void txt_TextChanged(object sender, EventArgs e)
{
// Theo thứ tự : red , green, blue lấy từ 3 TextBox, ở đây là ví dụ red=190, green=50,
// blue=120
pnColor.BackColor= Color.FromArgb(190, 50, 120);
}
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 9 -

Bài tập 8:

Mục đích:

- Tạo được User Control và xử lý sự kiện
Yêu cầu:
- Thiết kế User Control để đọc tiền từ dạng số ra dạng chữ:

- User Control trên là tổng hợp 4 control: 2 Label, 2 TextBox
- Khi người sử dụng nhập giá trị vào mục Tiền bằng số thì lập tức mục Tiền bằng chữ sẽ
đọc ra giống như hình trên.
Hướng dẫn:
- Tạo một MyUserControl kế thừa UserControl, kéo thả một số control vào UserControl
này.
- Viết hàm xử lý chuyển số thành chữ.
- Trong sự kiện TextChanged của TextBox ta gọi hàm chuyển số thành chữ.
- Ta nên gán mỗi ký số riêng lẻ với một chữ số cụ thể:
int[] kyso = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
string[] kytu1 = { "không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín" };
string[] kytu2 = { "", "mốt", "hai", "ba", "bốn", "lăm", "sáu", "bảy", "tám", "chín" };
- Ta để ý rằng:

- Chỉ cần ghép các ký tự 1 và 2 lại với nhau, nhưng chú ý:
 10 đọc là Mười
 11 đọc là Mười Một (không phải Mười Mốt)
 1 đọc là một
 20 đọc là Hai Mươi
 21 đọc là Hai Mươi Mốt (không phải là Mười Một)
 5 đọc là năm
 15 đọc là Mười Lăm (không phải Mười Năm)
 Hàng Triệu, hàng hàng trăm triệu, hàng tỉ, hàng trăm tỉ, hàng nghìn tỉ… ta phải xử
lý thật khéo.
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 10 -

Bài tập 9:

Mục đích:

- Thực hành và hiểu được các control trong DotNetBar
- Thao tác với Metro Form
- Thao tác với các control cơ bản của DotnetBar
Yêu cầu:
- Viết chương trình quản lý sinh viên, dùng Metro Form và các control cở bản của
DotnetBar:

- Chương trình cho phép nhập vào danh sách sinh viên
- Mỗi lần bấm “Lưu”, thì sinh viên đó sẽ được hiển thị vào ListViewEx , hình ảnh của mỗi
sinh viên sẽ được hiển thị tương ứng với giới tính. Chú ý nếu mã sinh viên chưa tồn tại
thì tạo mới, nếu mã sinh viên đã tồn tại thì tiến hành cập nhật.
- Viết sự kiện cho ListViewEx, mỗi lần click vào sinh viên nào thì hiển thị thông tin chi
tiết của sinh viên đó ở màn hình bên phải.

- Bấm “Xóa” để xóa sinh viên đang chọn ra khỏi ListViewEx
- Bấm “Thoát” chương trình sẽ hiển thị MessageBox hỏi người sử dụng có chắc chắn
muốn thoát chương trình hay không.

Hướng dẫn:
- Sử dụng Metro Form, GroupPanel, ListViewEx, MaskedTextBoxAdv, ButtonX,
TextBoxX, CheckBoxX
- ImageList để hiển thị hình ảnh tương ứng với giới tính

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 11 -

Bài tập 10:

Mục đích:

- Thực hành và hiểu được các control trong DotNetBar
- Thao tác với Metro Form
- Thao tác với ComboBoxX
- Thao tác với ContextMenuBar
- Thao tác với ListViewEx
- Thao tác với Adv Tree
Yêu cầu:
- Viết chương trình quản lý sinh viên, giao diện như hình bên dưới:

- Thực hiện các chức năng trong ContextMenuBar cho Adv Tree:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 12 -


- Nút “Tạo Lớp Mới” cho phép tạo lớp mới và đưa vào Adv Tree
- ListViewEx cho phép gom nhóm sinh viên theo lớp, mỗi lần click vào từng phần tử trong
ListViewEx thì sẽ hiển thị thông tin chi tiết của sinh viên vào mục bên dưới
- Nút Lưu cho phép lưu thông tin sinh viên theo đúng như tên lớp đã chọn trong
ComboBoxX: Cập nhật đồng thời lên ListViewEx và AdvTree

- Sinh viên tự tạo ImageList để gán hình ảnh tương ứng với giới tính.
- Mỗi lần click chuột vào từng phần tử trong Adv Tree :
 Nếu chọn vào Node gốc là “Khoa CNTT” thì liệt kê toàn bộ lớp và sinh viên gom
nhóm theo lớp vào ListViewEx
 Nếu chọn vào Node là Lớp nào đó thì liệt kê toàn bộ sinh viên của lớp đó vào
ListViewEx mà thôi
 Nếu chọn vào Node là sinh viên thì chỉ hiển thị thông tin của sinh viên đó vào
ListViewEx mà thôi
- Nút “Xóa” cho phép xóa sinh viên hiện tại, cập nhật lại ListViewEx và Adv Tree
Hướng dẫn:
- Viết theo hướng đối tượng:
- Class Sinh Viên : Mã , tên, số điện thoại, giới tính
- Class Lớp : Mã lớp, tên lớp
- Dùng Dictionary hoặc ArrayList để lưu trữ danh sách
- Để lấy màu vừa chọn trong ContextMenuBar:
- colorPickerDropDown1.SelectedColor
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 13 -

Bài tập 11:

Mục đích:
- Thực hành và hiểu được các control trong DotNetBar
- Thao tác với Ribbon control, MDI Form

- Và các control khác trong DotNetBar
Yêu cầu:
- Thiết kế giao diện như hình bên dưới:

- Trong MDI Tab tạo 2 nút lệnh cho phép mở các Form con ở bên trong
- Tương ứng với mỗi form con, hãy tạo lệnh như hình bên dưới:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 14 -

Bài tập 12:

Mục đích:
- Thực hành và hiểu được các control trong DotNetBar
- Thao tác Với BubbleBar
Yêu cầu:
- Thiết kế giao diện như hình dưới đây, sử dụng BubbleBar trong DotNetBar:

- Mỗi lần di chuyển chuột tới phần tử nào thì sẽ có Animation ở phần tử đó và các phần tử
lân cận.

Bài tập 13:

Mục đích:
- Thực hành và hiểu được các control trong DotNetBar
- Thao tác Với các control khác trong Dotnetbar
Yêu cầu:
- Sinh viên tự thực hành và làm toàn bộ các control khác của Dotnetbar, đây là bài tập về
nhà. Sinh viên làm 18 bài trong link sau bằng C#:


Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 15 -

Module 2: Truy suất dữ liệu với LINQ
Nội dung kiến thức thực hành:
- Thực hành LINQ:
- Hiểu được Generic
- Hiểu được Implicitly Typed Variables
- Hiểu được Anonymous Types
- Hiểu được Extension Methods
- Hiểu được Lambda Expressions
- Hiểu được LinQ to Object
- Hiểu được LinQ to SQL
- Sinh viên có thể tải toàn bộ ví dụ liên quan tới LINQ từ trang chính thống của Microsoft
để tham khảo:
Bài tập 1:

Mục đích:
- Hiểu được Generic
- Trong System.Collections.Generic; cung cấp rất nhiều class: List, Dictionary,
SortedList, SortedDictionary, LinkedList, HashSet….
- Nhưng ở đây chúng ta chỉ quan tâm tới List và Dictionary, các class khác sinh viên phải
có trách nhiệm tự nghiên cứu.
Yêu cầu:
- Sử dụng List để viết chương trình như bên dưới:

- Mỗi lần click “Nhập số”: Sẽ đưa số trong TextBox vào Listbox bên trái.
- Click “>>” sẽ chuyển tất cả các phần tử đang được chọn trong ListBox bên trái sang
Listbox bên phải
- Click “<<” sẽ chuyển tất cả các phần tử đang được chọn trong ListBox bên phải sang

Listbox bên trái
- Cải tiến lại chương trình: cho phép đưa bất kỳ kiểu dữ liệu nào vào Listbox (xem hình)
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 16 -

Hướng dẫn:
- Thiết lập các ListBox có chế độ cho phép chọn nhiều phần tử: SelectionMode là
MultiSimple hoặc MultiExtended.
- Để List có thể chứa bất kỳ kiểu dữ liệu nào thì ta dùng List<object>. Mọi class sinh ra
đều kế thừa từ object, nên khi ta để object thì nó sẽ có thể lưu bất kỳ kiểu dữ liệu nào.
Bài tập 2:

Mục đích:

- Hiểu được Generic
- Trong System.Collections.Generic; cung cấp rất nhiều class: List, Dictionary,
SortedList, SortedDictionary, LinkedList, HashSet….
- Nhưng ở đây chúng ta chỉ quan tâm tới List và Dictionary, các class khác sinh viên phải
có trách nhiệm tự nghiên cứu.
Yêu cầu:
- Sử dụng Dictionary để viết chương trình như bên dưới:

- Mỗi lần bấm Lưu: Đưa thông tin sinh viên vào Dictionary rồi cập nhật lên ListView. Nếu
mã đã tồn tại thì tự động cập nhật, nếu mã chưa tồn tại thì thêm mới.
- Mỗi lần click vào từng phần tử trong ListView thì hiển thị thông tin chi tiết của sinh viên
vào phần Thông tin chi tiết
- Nút Xóa: cho phép xóa sinh viên hiện tại
- Chú ý là tất cả các thao tác phải sử dụng Dictionary.
- Khi thao tác với CSDL thì Dictionary là một class rất hữu hiệu, cải tiến tốc độ xử lý.


Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 17 -

Hướng dẫn:
- Tạo một class tên là Sinhvien
- Khai báo Dictionary như sau:
Dictionary<string,sinhvien> dic = new Dictionary<string, sinhvien>();
Với đối số thứ nhất là key, đối số thứ 2 là value
- Ta có thể đưa dữ liệu vào bằng phương thức dic.Add(“010203”,sinhvien nào đó)
- Để duyệt toàn bộ các phần tử trong Dictionary có nhiều cách, ở đây ta thường dùng:
foreach (KeyValuePair<string, sinhvien> item in dic)
{
sinhvien sv = item.Value;
}

- Để lấy sinh viên theo đúng mã ta chỉ cần: dic[“010203”]
- Để xóa sinh viên ta làm như sau: dic.Remove(“010203”);
Bài tập 3:

Mục đích:

- Thực hành và hiểu được Implicitly Typed Variables
Yêu cầu:
- Hãy khai báo và gán giá trị bất kỳ cho một biến có kiểu var
var x = 113;
var y = "1/1/2012";
var z = 1.7;
var k = new DateTime(2012, 1, 1);
string msg = "x type="+x.GetType() + "\n"+
"y type = "+y.GetType() + "\n" +

"z type ="+z.GetType() + "\n" +
"k type = " + k.GetType();
MessageBox.Show(msg);
- Hãy thử trường hợp không gán giá trị mặc định cho biến có kiểu var, cho nhận xét
- Hãy thử gán giá trị có kiểu dữ liệu khác cho biến đã khai báo kiểu var, cho nhận xét
- Hãy cho biết var thường được ứng dụng trong trường hợp nào?
- Trong trường hợp đã biết chính xác kiểu dữ liệu thì có nên khai báo kiểu var hay không?
Hướng dẫn:
- var được .net framework hỗ trợ cơ chế nội suy kiểu dữ liệu
- do đó nó sẽ tự động lấy đúng kiểu dữ liệu khi ta gán vào cho nó.
- Bất kỳ kiểu dữ liệu nào, kể cả kiểu object, var cũng tự động nội suy ra đúng kiểu dữ liệu
của nó:
- var s=new sinhvien(); thì s cũng được nội suy ra là đối tượng sinh viên, do đó ta có thể
sử được các Properties, method của sinhvien một Cách bình thường.
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 18 -

Bài tập 4:

Mục đích:

- Thực hành và hiểu được Anonymous Types
Yêu cầu:
- Hãy kiểm tra một số đoạn lệnh sau:
var teo = new { ID=1234, Name="Tèo Hả Tèo"};
MessageBox.Show(teo.ID +"-"+teo.Name);
- Sinh viên tự tạo thêm nhiều Anonymous Types để hiểu thêm về nó.
- Anonymous Types được sử dụng trong nhiều tình huống khác nhau.
Hướng dẫn:
- Anonymouse Types được sử dụng khi:

 Ta cần một đối tượng tạm thời để lưu trữ dữ liệu
 Khi ta không cần định nghĩa phương thức
 Khi chúng ta muốn tạo thêm các Properties khác ngoài class đã định nghĩa
 Khi ta muốn thay đổi thứ tự các properties…
Bài tập 5:

Mục đích:

- Thực hành và hiểu được Extension Methods:
 Quy tắc tạo extension methods như thế nào?
 Cách sử dụng chúng ra sao?
Yêu cầu:
- Hãy cài một hàm tính tổng các số từ 1 tới N vào kiểu số nguyên
- Hãy cài một hàm kiểm tra số nguyên tố vào kiểu số nguyên
- Hãy cài một hàm xuất danh sách các số nguyên tố vào kiểu số nguyên
- Hãy cài một hàm xuất danh sách dãy số Fibonacci vào kiểu số nguyên
- Hãy cài một hàm cho phép nối 2 chuỗi vào kiểu chuỗi
- Hãy cài một hàm cho phép tô màu đỏ vào Button
- Hãy cài một hàm cho phép tô đen các số chẵn vào ListBox
- Hãy cài một hàm cho phép tô đen các số lẻ vào ListBox
- Hãy cài một hàm cho phép tô đen các số nguyên tố vào ListBox
- Dùng delegate làm mặt nạ để thực hiện tô số chẵn, tô số lẻ, tô số nguyên tố cho ListBox
Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 19 -

Bài tập 6:

Mục đích:


- Thực hành và hiểu được Lambda Expressions
Yêu cầu:
- Sử dụng Lambda Expressions để làm bài tập như hình dưới đây:

- Thực hiện 3 chức năng:
 Tô đen số chẵn
 Tô đen số lẻ
 Tô đen số nguyên tố
Hướng dẫn:
- Kết hợp Extension methods với Lambda Expression để làm bài tập này:
Listbox1.todensochan(x => x % 2 == 0);
- Với hàm todensochan, viết theo kỹ thuật Extension methods
public static class MyExt
{
public static void todensochan(this ListBox lb)
{
//viết code tô đen ở đây
}
}


Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 20 -

Bài tập 7:

Mục đích:

- Thực hành và hiểu được Query Syntax và Method Syntax

- So sánh được Query Syntax với Method Syntax
- Hiểu được Deferred execution và lazy loading
Yêu cầu:
- Sinh viên hãy thực hành lại các đoạn lệnh bên dưới đây:
- Lệnh số 1:

- Lệnh số 2:

- Lệnh số 3:

Hướng dẫn:
- Tương tự như câu truy vấn SQL, Query Syntax cũng dùng quy tắc tương tự nhưng ở đây
nó đảo ngược from lên trước. Ở đâu thấy from … select đó chính là query syntax
- Lambda expression thường được sử dụng trong Method Syntax
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 21 -

Bài tập 8:

Mục đích:
- Thực hành và hiểu được LinQ to Object, cụ thể ở một số hàm:
 Thực hành và hiểu được ForEach, Exists, TrueForAll
 Thực hành và hiểu được Find, FindAll, FindIndex, FindLast, FindLastIndex
 Thực hành và hiểu được RemoveAll
 Và các hàm khác…
- Hiểu được Generic List
Yêu cầu:
- Một sản phẩm cần có các thông tin (mã sản phẩm, tên sản phẩm, số lượng, đơn giá, xuất
xứ, ngày hết hạn)
- Hãy viết chương trình quản lý sản phẩm đáp ứng các yêu cầu sau:

 Cho phép thêm/ sửa/ xóa sản phẩm
 Cho phép duyệt danh sách sản phẩm
 Kiểm tra xem trong kho có chứa bất kỳ sản phẩm nào quá hạn hay không?
 Tìm 1 sản phẩm có đơn giá cao nhất
 Tìm 1 sản phẩm có xuất xứ từ Nhật Bản
 Xuất tất cả các sản phẩm bị quá hạn trong kho
 Xuất tất cả các sản phẩm có đơn giá trong đoạn [a…b]
 Xóa các sản phẩm có xuất xứ bất kỳ
 Xóa toàn bộ sản phẩm trong kho
- Giao diện tương tự như bên dưới:

Hướng dẫn:
- Sử dụng Generic List để thao tác với toàn bộ yêu cầu đặt ra.
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 22 -

Bài tập 9:

Mục đích:

- Thực hành và hiểu được LinQ to Object, cụ thể ở một số hàm:
 Thực hành và hiểu được Select
 Thực hành và hiểu được Where
 Thực hành và hiểu được OrderBy/OrderByDescending
 Thực hành và hiểu được All, Any, Max, Min
 Sử dụng Metro Form và một số control khác của DotnetBar
Yêu cầu:
- Viết chương trình cho phép nhập vào một danh sách N số ngẫu nhiên có giá trị từ -500
tới 500 rồi thực hiện các tác vụ giống như giao diện dưới đây:


 Select: Lấy ra số hàng đơn vị của mỗi số trong danh sách
 Where: Trích ra danh sách các số nguyên tố trong danh sách
 OrderBy: Sắp xếp danh sách tăng dần
 OrderyDescending: Sắp xếp danh sách giảm dần
 All: Kiểm tra xem có phải tất cả các phần tử trong danh sách là số âm hay không?
 Any: Kiểm tra xem danh sách có bất kỳ một phần tử nào là số hoàn thiện hay
không? (số hoàn thiện là số có tổng các ước số không kể nó thì bằng chính nó, ví
dụ 6=1+2+3, 28=1+2+4+7+14)
 Max: xuất ra số lớn nhất trong danh sách
 Min: xuất ra số nhỏ nhất trong danh sách
Hướng dẫn:

Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 23 -

Bài tập 10:

Mục đích:

- Thực hành và hiểu được LinQ to Object, cụ thể ở một số hàm:
 Thực hành và hiểu được Select, Where
 Thực hành và hiểu được OrderBy/OrderByDescending
 Thực hành và hiểu được OfType, All, Any, Max, Min
 Và các hàm khác…
Yêu cầu:
- Viết chương trình quản lý nhân viên theo mô hình class dưới đây:

- Giao diện chương trình:


×