Đạ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à 36 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
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
- Tạo được Custom Control cho TextBox và xử lý sự kiện
Bài tập 1: Mục đích:
- Hãy tạo một MyTextBox kế thừa từ TextBox, MyTextBox này có đặc điểm sau:
Yêu cầu:
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
- 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
Hướng dẫn:
- 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 …
KeyPress: private void MyTextBox_KeyPress(object sender, KeyPressEventArgs e) { e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar); }
- 1 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
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ẽ
- Để 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.
thấy dòng báo lỗi này, chỉ việc xóa nó đi):
- 2 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Bài tập 2: Mục đích:
- Tạo được Custom Control và xử lý sự kiện cho Custom Control
- 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
Yêu cầu:
- 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:
Hướng dẫn:
- Tạo được Custom Control cho ListBox và xử lý sự kiện
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:
- Hãy tạo một MyListBox kế thừa từ ListBox, MyListBox này có đặc điểm sau:
Yêu cầu:
- Nhập Text và chọn màu từ ColorDialog ListBox sẽ tô màu phần tử theo đúng yêu cầu. - 3 -
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:
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
this.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
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(); } 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);
- 4 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Bài tập 4: Mục đích:
- Tạo được Custom Control cho ListBox và xử lý sự kiện
- Hãy tạo một MyListBox kế thừa từ ListBox, MyListBox này có đặc điểm sau:
Yêu cầu:
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; }
- 5 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Bài tập 5: Mục đích:
- Tạo được Custom Control cho Button và xử lý sự kiện
- Vẽ lại các Button như hình bên dưới:
Yêu cầu:
- Trong MyButton kế thừa từ Button, ta override OnPaint giống như bên đưới (ví dụ vẽ
Hướng dẫn:
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); }
- 6 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Bài tập 6: Mục đích:
- Tạo được Custom Control cho Button và xử lý sự kiện
- 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):
Yêu cầu:
- Chi tiết xem trên trang: http://www.codeproject.com/Articles/9734/Custom-Bitmap-
Hướng dẫn:
Button-Using-C
- 7 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Bài tập 7: Mục đích:
- Tạo được User Control và xử lý sự kiện
- Thiết kế User Control để sử dụng như hình dưới đây:
Yêu cầu:
- 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ố
- Tạo một MyUserControl kế thừa UserControl, kéo thả một số control vào UserControl
Hướng dẫn:
- Viết sự kiện TextChanged cho 3 TextBox ở trên:
này:
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); }
- 8 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Bài tập 8: Mục đích:
- Tạo được User Control và xử lý sự kiện
- 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ẽ
Yêu cầu:
đọc ra giống như hình trên.
- Tạo một MyUserControl kế thừa UserControl, kéo thả một số control vào UserControl
Hướng dẫn:
- 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ể:
này.
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.
- 9 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
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
- 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
Yêu cầu:
- 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
DotnetBar:
- 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
tiết của sinh viên đó ở màn hình bên phải.
muốn thoát chương trình hay không.
- Sử dụng Metro Form, GroupPanel, ListViewEx, MaskedTextBoxAdv, ButtonX,
-
Hướng dẫn:
TextBoxX, CheckBoxX ImageList để hiển thị hình ảnh tương ứng với giới tính
- 10 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
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
- 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:
Yêu cầu:
- 11 -
- 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
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
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
- 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
ListViewEx mà thôi
- 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
Hướng dẫn:
- 12 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
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
- 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:
Yêu cầu:
- 13 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
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
- 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ử
Yêu cầu:
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
- 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ề
Yêu cầu:
nhà. Sinh viên làm 18 bài trong link sau bằng C#: http://www.devcomponents.com/dotnetbar/movies.aspx#
- 14 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
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: http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
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,
- 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
SortedList, SortedDictionary, LinkedList, HashSet….
có trách nhiệm tự nghiên 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
Yêu cầu:
- 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 phả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) - 15 -
Listbox bên trái
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- Thiết lập các ListBox có chế độ cho phép chọn nhiều phần tử: SelectionMode là
Hướng dẫn:
- Để List có thể chứa bất kỳ kiểu dữ liệu nào thì ta dùng List
MultiSimple hoặc MultiExtended.
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,
- 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
SortedList, SortedDictionary, LinkedList, HashSet….
có trách nhiệm tự nghiên 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
Yêu cầu:
- 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
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.
- 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ý.
vào phần Thông tin chi tiết
- 16 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- Tạo một class tên là Sinhvien - Khai báo Dictionary như sau:
Dictionary
- 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
- Để 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”);
Hướng dẫn:
Bài tập 3: Mục đích:
- Thực hành và hiểu được Implicitly Typed Variables
- Hãy khai báo và gán giá trị bất kỳ cho một biến có kiểu var
"y type = "+y.GetType() + "\n" + "z type ="+z.GetType() + "\n" + "k type = " + k.GetType();
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"+ 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?
Yêu cầu:
- 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
Hướng dẫ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ể
của nó:
sử được các Properties, method .. của sinhvien một Cách bình thường.
- 17 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Bài tập 4: Mục đích:
- Thực hành và hiểu được Anonymous Types
- 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.
Yêu cầu:
- Anonymouse Types được sử dụng khi:
Hướng dẫn:
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?
- 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
Yêu cầu:
Hướng dẫn:
- 18 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Bài tập 6: Mục đích:
- Thực hành và hiểu được Lambda Expressions
- 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:
Yêu cầu:
Tô đen số chẵn Tô đen số lẻ Tô đen số nguyên tố
- Kết hợp Extension methods với Lambda Expression để làm bài tập này:
Hướng dẫn:
- 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 } }
Listbox1.todensochan(x => x % 2 == 0);
- 19 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
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
- 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:
Yêu cầu:
- 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
Hướng dẫn:
- Lambda expression thường được sử dụng trong Method Syntax
nó đảo ngược from lên trước. Ở đâu thấy from … select đó chính là query syntax
- 20 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
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
- 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
Yêu cầu:
- Hãy viết chương trình quản lý sản phẩm đáp ứng các yêu cầu sau:
xứ, ngày hết hạn)
- Giao diện tương tự như bên dưới:
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
- Sử dụng Generic List để thao tác với toàn bộ yêu cầu đặt ra.
Hướng dẫn:
- 21 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
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
- 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
Yêu cầu:
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:
- 22 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
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…
- 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:
Yêu cầu:
- 23 -
- Có 2 loại nhân viên: Nhân viên chính thức và nhân viên thời vụ - Nhân viên chính thức thì mức lương là 1000. - Nhân viên thời vụ thì dựa vào số ngày công *30 - Thực hiện các chức năng:
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Người sử dụng checked vào “Là thời vụ” thì mới hiển thị mục ngày công, nếu không checked thì ẩn mục ngày công, mặc định khi khởi động chương trình thì unchecked “Là thời vụ”
Bấm nút “Lưu”, tự động lưu mới khi mã chưa tồn tại, tự động cập nhập khi mã đã
tồn tại. Khi lưu thành công thì cập nhật vào ListView
Bấm nút “Xóa”, cho phép xóa nhân viên hiện tại đang chọn Chỉ duyệt theo tên nhân viên: Phần ListViewEx sẽ chỉ có 2 cột là cột Thứ Tự và
cột Tên nhân viên
Thực hiện “sắp nhân viên theo tên tăng dần” cập nhật lại ListViewEx Thực hiện “sắp nhân viên theo lương giảm dần” cập nhật lại ListViewEx Thực hiện lọc nhân viên có lương từ 300 tới 500cập nhật lại ListViewEx Trong mục xem danh sách nhân viên, chọn loại nhân viên nào thì lọc các nhân
viên đó vào ListViewEx
- Tất cả phải sử dụng Generic List và các phương thức của List - Dùng tính đa hình trong hướng đối tượng để xử lý coding thật khoa học
Hướng dẫn:
Bài tập 11: 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 Single, SingleOrDefault Thực hành và hiểu được Skip, SkipWhile Thực hành và hiểu được Take, TakeWhile Và các hàm khác…
- Viết chương trình cho phép nhập vào một danh sách các số nguyên rồi thực hiện các yêu
Yêu cầu:
cầu sau:
Lấy ra một số hoàn thiện trong danh sách, yêu cầu dùng hàm Single và
SingleOrDefault (hãy cho biết chuyện gì sảy ra nếu danh sách có từ 2 số hoàn thiện trở lên)
Viết hàm cho phép bỏ qua n phần tử đầu tiên trong danh sách (dùng Skip) Viết hàm cho phép loại bỏ các phần tử là số âm liên tiếp đầu tiên trong danh sách
(dùng SkipWhile)
Viết hàm cho phép trích ra n phần tử đầu tiên trong danh sách (dùng Take) Viết hàm cho phép trích ra các phần tử lớn hơn 50 liên tiếp đầu tiên trong danh
sách (Dùng TakeWhile)
- 24 -
- Giao diện tương tự như hình dưới đây:
- Dùng BalloonTip để gắn cho checkbox Ngẫu nhiên:
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- Tất cả phải sử dụng Generic List và các phương thức của List
Hướng dẫn:
Bài tập 12: 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 ToArray Thực hành và hiểu được ToList Thực hành và hiểu được ToDictionary Và các hàm khác…
- 25 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- Thực hành lại các lệnh sau: - Kiểu int:
Yêu cầu:
List
public class Person
{
public string Id { get; set; }
public string Name { get; set; }
}
List
{ string Id = item.Key; Person p = item.Value; //Xử lý Id, p } foreach (Person p in dic.Values) { //Xử lý từng p } foreach (string id in dic.Keys) { //xử lý từng id
- Một số Extension Method trả về kiểu IEnumerable<> , ta muốn sử dụng một số hàm tiện lợi của List, Dictionary, Array… thì ta dùng các hàm ở trên: toList, toArray, toDictionary - Một số trường hợp ta muốn chuyển qua Dictionary để xử lý theo Key, Value. Dictionary rất hữu dụng ở việc tối ưu tốc độ xử lý. Khi xử lý liên quan tới CSDL hay đối tượng ta thường dùng Dictionary.
} Hướng dẫn:
- 26 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Bài tập 13: Mục đích:
- Thực hành và hiểu được LinQ to SQL, cụ thể ở một số hàm:
Thực hành và hiểu được Mapping object và Datacontext Thực hành và hiểu được Query Thực hành và hiểu được Insert, update, delete Và các hàm khác…
- Dùng LinQ để viết chương trình quản lý sản phẩm được mô tả đơn giản như sau: Danh mục sản phẩm gồm Mã và tên. Mỗi một danh mục sẽ có nhiều sản phẩm, thông tin mỗi sản phẩm bao gồm: Mã sản phẩm, tên sản phẩm, mô tả và hình ảnh.
- Thiết kế giao diện như hình bên dưới và thực hiện các yêu cầu:
Yêu cầu:
- Dùng MemoryStream và Image.FromStream để đọc hình nhị phân từ CSDL lên giao diện
- Khi khởi động chương trình sẽ tải toàn bộ danh mục sản phẩm vào listbox bên trái - Khi người sử dụng Click chuột vào từng danh mục thì hiển thị danh sách sản phẩm của danh mục đó vào ListView. - Khi người sử dụng Click chuột vào từng sản phẩm trong Listview thì hiển thị chi tiết thông tin sản phẩm vào phần bên dưới. - Double click vào Picturebox để cho phép thay đổi hình ảnh sản phẩm - Thực hiện các thao tác: New, Save, Update, Delete Hướng dẫn:
- 27 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Bài tập 14: Mục đích:
- Thực hành và hiểu được LinQ to SQL, cụ thể ở một số hàm:
Thực hành và hiểu được Mapping object và Datacontext Thực hành và hiểu được Query Thực hành và hiểu được Insert, update, delete Và các hàm khác…
- Viết chương trình quản lý sinh viên, giao diện như hình bên dưới:
- 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
Yêu cầu:
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
- 28 -
- 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 :
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
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
- 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
ListViewEx mà thôi
- Tạo 2 bảng dữ liệu trong SQL Server: Bảng Lớp (mã lớp, tên lớp). - Bảng sinh viên (mã sinh viên, tên sinh viên, điện thoại, giới tính) - Tất cả thao tác phải dùng LinQ to SQL
Hướng dẫn:
Bài tập 15: Mục đích:
- Thực hành và hiểu được LinQ to SQL, cụ thể ở một số hàm:
Thực hành và hiểu được Join Thực hành và hiểu được Stored procedure Và các hàm khác…
- Công ty XYZ chuyên kinh doanh trong lĩnh vực mua bán sản phẩm, trong những năm
Yêu cầu:
- Dưới đây là giao diện chính của chương trình:
gần đây quy mô công ty ngày càng mở rộng nên ban lãnh đạo có nhu cầu viết một phần mềm quản lý sản phẩm, sau đây là một phần nhỏ của ứng dụng:
- 29 -
- Tab Danh mục quản lý: Quản lý danh mục, quản lý sản phẩm, quản lý hóa đơn
- Tab Hệ Thống: Thoát, chọn kiểu sắp xếp các form con bên trong - Khi bấm vào nút Quản lý danh mục:
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 30 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- Bấm lưu: Nếu mã danh mục đã tồn tại thì trở thành cập nhật, còn mã danh mục chưa tồn
+ Màn hình này cho phép thêm, sửa , xóa danh mục sản phẩm.
- Bấm xóa: sẽ hóa danh mục hiện tại - Mỗi lần bấm vào từng dòng trong ListViewEx thì sẽ hiển thị thông tin chi tiết của danh
tại thì sẽ tự động thêm mới
mục đó vào phần thông tin chi tiết.
-Khi bấm vào nút Quản Lý Sản Phẩm: + ListBox cho phép liệt kê toàn bộ danh mục sản phẩm đã được nhập ở phần quản lý danh mục. + Mỗi lần chọn từng danh mục trong ListBox thì sẽ hiển thị danh sách các sản phẩm của danh mục đó vào ListViewEx bên phải màn hình + Mỗi lần chọn từng sản phẩm trong ListViewEx thì sẽ hiển thị thông tin chi tiết của sản phẩm đó vào mục chi tiết sản phẩm bên dưới. +Nút lưu: cho phép thêm mới sản phẩm nếu như mã sản phẩm chưa tồn tại, tự động cập nhật nếu như mã sản phẩm đó đã tồn tại. Chú ý là phải lưu sản phẩm vào đúng danh mục sản phẩm đang được chọn trong ListBox +Nút xóa : Cho phép xóa sản phẩm hiện tại đang chọn.
- 31 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- Khi bấm vào Quản lý hóa đơn: + Danh sách hóa đơn sẽ được tự động hiển thị vào ListBox ở màn hình bên trái + Bấm Tạo hóa đơn cho phép tạo hóa đơn mới theo đúng với thông số nhập vào, cập nhật lại ListBox khi tạo hóa đơn thành công. + Nút xóa hóa đơn: cho phép xóa hóa đơn đang chọn + Mỗi lần chọn hóa đơn nào thì sẽ hiện thị danh sách các chi tiết của hóa đơn vào mục ListViewEx ở bên phải màn hình. + Mỗi lần chọn từng dòng trong ListViewEx thì hiển thị thông tin chi tiết của từng hạng mục trong hóa đơn vào mục nhập thông tin chi tiết + Bấm lưu để thêm sản phẩm cho hóa đơn + Bấm xóa để xóa chi tiết hóa đơn đang chọn
- Cố gắng viết các nghiệp vụ bằng Store Procedure
Hướng dẫn:
- 32 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Module 3: Truy suất dữ liệu với CodeSmith
Nội dung kiến thức thực hành:
- Thực hành CodeSmith - Biết cách dùng QuickStart configuration - Biết cách dùng Manual configuration
- Sử dụng QuickStart configuration
Bài tập 1: Mục đích:
(ProductID, MadeInBy,
Hình 1
Yêu cầu: Cho cơ sở dữ liệu Sql server được mô tả như sau: tblCatalog(CatalogID, CatalogName) tblProduct Quantity, UnitPrice, CatalogID) Hãy nhập một số dữ liệu mẫu và thực hiện chương trình theo yêu cầu: 1. Trong sự kiện Form Load chương trình phải tự động đọc tất cả danh sách Categories và hiển thị ra các Button như yêu cầu (viết code để load Button động), mặc định toàn bộ danh sách sản phẩm sẽ được hiển thị theo nhóm danh mục trong Lisview. Viết các sự kiện Click chuột cho các Button động này (hình 1):
a. Khi click chuột vào Button (theo tên danh mục) thì chương trình sẽ hiển thị số lượng sản phẩm có trong danh mục này. Ví dụ khi người sử dụng click chuột vào Button có nhãn là Hàng Hóa Chất thì ta có Message bên dưới:
- 33 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
b. Button nào được click chuột thì Button đó sẽ có màu hồng, các Button còn lại sẽ có
cùng màu xám.
2) Viết sự kiện cho ListView:
Mỗi lần click chuột vào từng ListViewItem thì chương trình sẽ đọc thông tin chi tiết của Product này và đưa vào mục Detail Informations, biết rằng Cost=Quantity*UnitPrice. 3) Viết sự kiện cho các button Thêm, Lưu, Xóa, Thoát:
a. Thêm mới: Khi click chuột vào button này, chương trình chỉ cần xóa trắng toàn bộ
TextBox, đồng thời cho Textbox ProductID được Focus.
b. Lưu: Cho phép lưu thông tin Product vào bảng product và cập nhập lại giao diện sử
dụng.
c. Xóa: Cho phép xóa Product đang chọn và cập nhật lại giao diện sử dụng. d. Thoát: Khi bấm vào nút này, sẽ hiển thị MessageBox hỏi người sử dụng có muốn
thoát khỏi chương trình hay không, nếu có thì thoát.
*Chú ý trong phần Detail Information:
- Text Box Made In By: Sử dụng chức năng AutoCompleteCustomSource để hỗ trợ người sử dụng tiện lợi trong quá trình nhập liệu. - TextBox Cost: Sẽ tự động cập nhật dữ liệu =Quantity * UnitPrice khi người sử dụng rời chuột khỏi TextBox UnitPrice.
- Yêu cầu dùng CodeSmith
Hướng dẫn:
Bài tập 2: Mục đích:
- Sử dụng QuickStart configuration
Description Mã nhà xuất bản ( khóa chính) Tên nhà xuất bản Địa chỉ Điện thọai
Data Type VARCHAR NVARCHAR NVARCHAR VARCHAR
Data Size 50 150 150 20
tblPublisher Columns Name PublisherCode PublisherName Address Phone
Yêu cầu: Cho cơ sở dữ liệu SQL Server (dbLibraries) được mô tả như bên dưới, sinh viên hãy thiết kế và tạo mối quan hệ giữa các bảng dữ liệu theo đúng như yêu cầu (1đ). Bảng tblPublisher Dùng để lưu danh sách các nhà xuất bản, khóa chính là PublisherCode, Một nhà xuất bản sẽ có một hoặc nhiều đầu sách.
- 34 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Mã sách ( khóa chính) Tên sách Tên hình Tóm tắt Mã nhà xuất bản(khóa ngọai)
Data Size Description 50 150 255 MAX 50 tblBook Columns Name BookCode BookName BookImage Description PublisherCode Data Type VARCHAR NVARCHAR NVARCHAR NVARCHAR VARCHAR
Bảng tblBook dùng để lưu danh sách các đầu sách, khóa chính là BookCode, khóa ngoại là PublisherCode, Khóa ngoại này sẽ tham chiếu tới cột PublisherCode ở trong bảng tblPublisher
Chú ý: Sau khi tạo xong cơ sở dữ liệu và nhập một số dữ liệu mẫu. Sinh viên phải backup lại Cơ sở dữ liệu (có tên trùng với tên Cơ sở dữ liệu gốc), sau đó chép tập tin backup này vào thư mục bài thi. Sinh viên dùng kiến trúc đa tầng để thực hiện các yêu cầu sau: Mặc định khi chạy chương trình lên thì giao diện chính của chương trình sẽ như hình bên dưới:
1) Chương trình sẽ load toàn bộ danh sách nhà xuất bản lên Listbox. Khi người sử dụng click chọn nhà xuất bản thì toàn bộ đầu sách của nhà xuất bản này sẽ được hiển thị lên Listview(3đ).
2) Viết sự kiện cho Listview: Khi chọn từng đầu sách trong Listview, chương trình sẽ hiển
thị thông tin chi tiết từng đầu sách bao gồm cả hình ảnh (1đ).
3) Viết sự kiện cho các nút lệnh: New, Save, Remove, Shutdown (3đ):
- 35 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
a. New: Chương trình phải xóa trắng các textbox và focus tới Book Code. b. Save: Nếu Book Code đã tồn tại thì chương trình tự động cập nhật thông tin, nếu chưa tồn tại thì chương trình tự động thêm mới. Doubleclick vào hình ảnh để thay đổi hình ảnh (dùng OpenFileDialog).
c. Remove: Chương trình sẽ xóa Book đang chọn. d. Shutdown: Hiển thị messagebox hỏi người sử dụng có muốn thoát hay không, nếu
chọn thoát thì tắt chương trình.
Chú ý: Mọi thao tác làm thay đổi cơ sở dữ liệu đều phải cập nhật lại giao diện.
4) Viết sự kiện cho các nút lệnh: Search, Print (2đ):
a. Search: Khi người sử dụng chọn nút Search, chương trình sẽ hiển thị giao diện bên dưới để cho phép người sử dụng nhập tên Book vào, nhấn nút GO để hiển thị kết quả tìm kiếm vào DataGridview:
b. Print: Khi chọn chức năng này, chương trình sẽ in toàn bộ danh sách các đầu sách
(Chú ý dùng Crystal Report).
- Dùng CodeSmith
Hướng dẫn:
- 36 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Bài tập 3: Mục đích:
- Sử dụng Manual configuration
- Công ty XYZ chuyên hoạt động trong lĩnh vực xuất nhập khẩu, trong những năm gần đây quy mô công ty ngày càng mở rộng vì vậy ban lãnh đạo có nhu cầu xây dựng phần mềm quản lý nhập kho. Mỗi lần có hàng nhập về, công ty cần lưu trữ vào phiếu nhập kho bao gồm thông tin Mã phiếu, ngày lập phiếu và danh sách các hàng hóa vào phiếu nhập kho.
Yêu cầu:
Sau đây là một phần thiết kế cơ sở dữ liệu: SanPham(MaSanPham, TenSanPham, DonGia, LoaiSanPham) PhieuNhapKho(MaPhieu, NgayNhap) ChiTietPhieu(MaPhieu, MaSanPham, SoLuong) LoaiSanPham: 1 nếu là Hàng Cao Cấp, 0 nếu
Hình 1
Hình 2 là hàng Thông Thường. Câu 1 (1đ): Thiết kế cơ sở dữ liệu theo mô tả như trên (sinh viên tự chọn kiểu dữ liệu thích hợp), tạo mối quan hệ giữa các bảng. Nhập dữ liệu mẫu, mỗi bảng ít nhất 3 dòng. Câu 2 (3đ): Thiết kế giao diện chính của chương trình như hình 1. Khi màn hình chính hiện lên thì toàn bộ danh sách mã phiếu nhập kho sẽ được hiển thị vào TreeView theo ngày. Câu 3 (1.5đ): Khi bấm vào nút Tạo phiếu, chương trình sẽ hiển thị cửa sổ như hình 2. - Tại cửa sổ Tạo phiếu nhập kho, khi bấm nút Tạo phiếu chương trình sẽ kiểm tra mã phiếu đã tồn tại hay chưa, nếu đã tồn tại thì xuất thông báo “Mã phiếu đã tồn tại” (0.5đ). Nếu chưa tồn tại thì cho phép thêm Mã phiếu mới này vào cơ sở dữ liệu, đóng cửa sổ này đồng thời cập nhập lại danh sách mã phiếu trong màn hình chính (1đ).
Câu 4 (3.5đ): Khi bấm nút Chi tiết phiếu, chương trình sẽ hiển thị cửa sổ Chi Tiết Phiếu Nhập của mã phiếu đang chọn trong TreeView như hình 3.
- Hiển thị danh sách sản phẩm của mã phiếu này vào ListView (1đ). - Combobox Mã sản phẩm sẽ hiển thị toàn bộ mã sản phẩm từ cơ sở dữ liệu, khi chọn mã sản phẩm chương trình sẽ hiển thị thông tin chi tiết của sản phẩm vào các ô: Tên sản phẩm, Đơn giá và Loại sản phẩm (các ô này thiết lập thuộc tính chỉ đọc) (1.5đ).
- 37 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- Khi chọn nút Thêm, chương trình sẽ đưa sản phẩm vào bảng ChiTietPhieu tương ứng với Mã phiếu đang chọn và Số lượng nhập, đồng thời cập nhập lên ListView (1đ).
Câu 5 (1đ): Khi chọn nút Thống kê, chương trình xuất thông báo mã phiếu có số lượng sản phẩm là hàng cao cấp nhiều nhất như hình 4.
Hình 3
Hình 4
- Dùng CodeSmith
Hướng dẫn:
- 38 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Module 4: Thiết kế giao diện với WPF
Nội dung kiến thức thực hành:
- Thực hành và hiểu WPF: - WPF code và XAML - Hiểu các cú pháp - Layout - Các control căn bản - Các Property căn bản - Sinh viên có thể tham khảo tại: http://wpftutorial.net/
Bài tập 1: Mục đích:
- Thực hành và biết được cách tạo một Window - Biết cách đưa control động vào Window - Biết cách gán sự kiện động cho Button
- Hãy tạo một Cửa Sổ lúc runtime, cửa sổ này có một Button đồng thời gán sự kiện động
Yêu cầu:
cho Button này:
Hướng dẫn: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; namespace Module4_Baitap1_WPF { public class MyClass1 { [STAThread]//Must insert before Main public static void Main(string[] args) {
- 39 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- Thực hành và hiểu về Brush: - SolidColorBrush - LinearGradientBrush - RadialGradientBrush -
Window w = new Window() { Width=400, Height=200 }; Button btn = new Button(); btn.Width = btn.Height = 100; btn.Content = "Click Me!"; btn.Click+=btn_Click; w.Content = btn; w.Title = "Khoa Công Nghệ Thông Tin"; Application A = new Application(); A.Run(w); } private static void btn_Click(object sender, RoutedEventArgs e) { MessageBox.Show("Bạn vừa click"); } } } Bài tập 2: Mục đích:
ImageBrush
- Dùng các kiểu Brush để tô màu cho các Button: Dùng XAML và Coding:
Yêu cầu:
Hướng dẫn:
- 40 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Bài tập 3: Mục đích:
- Thực hành và hiểu Syntax for Object: - Object element syntax - Attribute syntax - Property Element Syntax - Attached Property Syntax
- Tạo Button theo các Syntax dưới đây:
Yêu cầu:
- Viết trong XAML
Hướng dẫn:
Bài tập 4: Mục đích:
- Thực hành và hiểu được namespace
- Cú pháp tạo namespace:
Yêu cầu:
- 41 -
- Ứng dụng namespace, hãy viết 2 class cùng tên MyButton ở 2 namespace khác nhau, có
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
định dạng như bên dưới:
- Tạo một class tên là MyButton như hình bên dưới (tương tự tạo thêm 1 class MyButton
Hướng dẫn:
khác ở 1 namespace khác):
Background = new LinearGradientBrush( Colors.Yellow,Colors.Blue, new Point(0,0),new Point(1,1));
- Ta có thể sử dụng lại nhiều lần đoạn code dùng namespace ở trên. - Namespace giúp giải quyết: Nếu lập trình viên muốn tạo các class cùng tên nằm trên các
using System; using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace StudyWPFApplication { public class MyButton:Button{ public MyButton(){ } } } Trong XAML, ứng dụng công thức namcespace:
namespace khác nhau thì có cách hành xử khác nhau.
- 42 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Bài tập 5: Mục đích:
- Thực hành và hiểu được các Layout trong WPF: - Canvas
- Dùng layout là Canvas để thiết kế màn hình đơn giản dưới đây (viết XAML và coding):
Yêu cầu:
- Canvas cho phép định dạng các control theo tọa độ
Hướng dẫn:
Bài tập 6: Mục đích:
- Thực hành và hiểu được các Layout trong WPF: - StackPanel
- Dùng layout là StackPanel để thiết kế màn hình đơn giản bên dưới (XAML và Coding):
- Hãy sắp xếp các Button theo chiều đứng. - Hãy sắp xếp các Button theo hướng từ phải qua trái
Yêu cầu:
- 43 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- Mặc định StackPanel sắp xếp các control theo chiều đứng, nếu như ta muốn sắp xếp theo
Hướng dẫn:
- Để sắp xếp các Control theo hướng từ phải qua trái: FlowDirection="RightToLeft"
chiều ngang thì:
Bài tập 7: Mục đích:
- Thực hành và hiểu được các Layout trong WPF: - WrapPanel
- Dùng layout là StackPanel để thiết kế màn hình đơn giản bên dưới (XAML và Coding):
Yêu cầu:
- WrapPanel sắp xếp các control theo dòng, khi nào hết chỗ chứa thì tự động xuống dòng:
Hướng dẫn:
- Thực hành và hiểu được các Layout trong WPF: - DockPanel
Bài tập 8: Mục đích:
Yêu cầu:
- 44 -
- Dùng layout là StackPanel để thiết kế màn hình đơn giản bên dưới (XAML và Coding):
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- DockPanel dùng để neo các phẩn tử ở các góc của lớp chứa:
Hướng dẫn:
Bài tập 9: Mục đích:
- Thực hành và hiểu được các Layout trong WPF: - Grid
- Dùng Grid layout để thiết kế giao diện đơn giản bên dưới (Dùng XAML và coding):
Yêu cầu:
- Grid cho phép sắp xếp các control theo dòng và cột - Sau khi đã có các control theo dòng và cột rồi thì việc đưa dữ liệu vào là đưa theo đúng
Hướng dẫn:
vị trí control mà ta định sẵn.
- 45 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Bài tập 10: Mục đích:
- Thực hành và hiểu được các Layout trong WPF: - UniformGrid
- Dùng UniformGrid layout để thiết kế giao diện đơn giản bên dưới (Dùng XAML và
Yêu cầu:
coding):
- UniformGrid sắp xếp các control theo dòng và cột đồng thời có kích thước giống nhau:
Hướng dẫn:
- 46 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Bài tập 11: Mục đích:
- Thực hành và hiểu được các control căn bản: - Border, Checkbox, RadioButton, TextBox, Target, UnderScore _ - ListView, Binding
- Viết chương trình quản lý nhân viên như hình bên dưới: - Yêu cầu kết nối CSDL SqlServer (1 bảng Employee: Id, Name, Gender)
- Bấm biểu tượng Save để lưu nhân viên vào CSDL, gender lấy hình theo giới tính - Bấm biểu xóa để xóa nhân viên hiện tại - Bấm thoát để tắt chương trình.
Yêu cầu:
- Dùng LinQ to SQL - XAML:
Hướng dẫn:
- 47 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- Thực hành và hiểu được các control căn bản: - TextBlock
Coding: public void loadEmployee() { EmployeeDataContext db = new EmployeeDataContext(); var listEmp = db.Employees; var listFinal = listEmp.AsEnumerable(). Select((dk, pos) => new { Order = pos + 1, Id=dk.Id, Name=dk.Name, Gender = dk.Gender == true ? "boyicon.png" :"girlicon.png" } ); foreach (var emp in listFinal) { lvemployee.Items.Add(emp); } } Bài tập 12: Mục đích:
- Viết chương trình tìm kiếm đơn giản:
- Khi nhập vào chuỗi tìm kiếm bất kỳ và nhấn “Tìm”, chương trình sẽ tô màu những chuỗi
Yêu cầu:
- Viết thêm sự kiện cho mỗi chữ được tô màu: click chuột vào chữ đang tô màu thì bỏ tô
được tìm thấy trong văn bản gốc
màu chữ này đi.
- 48 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Hướng dẫn: Run r = new Run("Hello"); r.Background = new SolidColorBrush(Colors.Red); txtblock.Inlines.Add(r);
Bài tập 13: Mục đích:
- Thực hành và hiểu được DispatcherTimer
- Dùng DispatcherTimer để viết cập nhật giao diện cho Progressbar như hình dưới:
Yêu cầu:
- Thực hành và hiểu được MediaElement
Hướng dẫn: Bài tập 14: Mục đích:
- Viết một ứng dụng sử dụng MediaElement có giao diện như hình bên dưới:
Yêu cầu:
- 49 -
- Chương trình cho phép mở danh sách các tập tin media vào ListBox - Mỗi lần click vào tập tin nào thì tự động play tập tin đó - Bên dưới màn hình có danh sách các nút: Nút Play: cho phép play file media Nút Pause: cho phép tạm ngừng file media Nút Stop: cho phép ngừng file media Progressbar Volume: cho phép tăng giảm volume Slider Speed : cho phép tăng tốc độ chạy file media Slider Seek To: cho phép di chuyển tới đoạn nào đó trong file media - Chương trình tự động lưu lại các tập tin media vừa load vào ListBox để lần sau khởi
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- Gán 1 Context Menu cho ListBox có 2 Menu Item: Xóa file ra khỏi playlist, Mở thư
động không phải chọn tập tin media nữa.
mục chứa file
- Để mở file: Microsoft.Win32.OpenFileDialog - Để tăng giảm volume: myMediaElement.Volume - Để tăng tốc độ: myMediaElement.SpeedRatio - Để chuyển đầu đọc tới vị trí nào đó: myMediaElement.Position - Dùng Image để đại diện cho: Play, Pause, Stop
Hướng dẫn:
Bài tập 15: Mục đích:
- Thực hành và hiểu được cách tạo cũng như cách sử dụng Resource trong WPF
- Hãy tạo 2 loại background sử dụng Resource với 2 cách: viết trong XAML của một
Yêu cầu:
- So sánh sự khác biệt của 2 cách viết trên. - So sánh sự khác biệt giữa cách viết dùng Static Resource và Dynamic Resource. - Tại sao ta lại nên sử dụng Resource để thiết kế giao diện?
Window, viết trọng một tập tin Resource Dictionary.
- Trường hợp 1: viết trực tiếp trong
Hướng dẫn:
ta gọi lệnh được khai báo trong Dictionary
- 50 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Bài tập 16: Mục đích:
- Thực hành và hiểu được Style trong WPF: - Named Style, Targeted Style - Properties Trigger - Event Setter
- Hãy dùng Named Style và Targeted Style để thiết kế Button như hình bên dưới:
- Sử dụng Properties Trigger để:
Yêu cầu:
Khi di chuyển chuột vào Button thì thay đổi nền thành màu vàng, màu chữ thành
màu xanh
- Dùng Event Setter để gán sự kiện click cho Button này.
Khi di chuyển chuột ra khỏi Button thì trở về định dạng cũ
- Thực hành và hiểu được Control Template
Hướng dẫn: Bài tập 17: Mục đích:
- Thiết kế một Button có dạng Template như bên dưới:
Yêu cầu:
- Thực hành và hiểu được Data Binding: - OneWay - TwoWay - OneWayToSource - UpdateSourceTrigger
Hướng dẫn: Bài tập 18: Mục đích:
- 51 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- Dùng Data Binding để truyền tải dữ liệu giữa Slider với TextBox, giữa TextBox với
Yêu cầu:
- Binding giữa ListBox và TextBlock, chọn phần tử nào (theo tên màu) trong ListBox thì
Label, mỗi lần kéo slider thì giá trị trong TextBox sẽ cập nhật theo:
- Sử dụng UpdateSourceTrigger để khi thay đổi giá trị trong TextBox, nó sẽ tự động thay
TextBlock bên dưới sẽ tự động đổi màu và đổi dữ liệu theo:
đổi giá trị trong Slider:
- Thực hành và hiểu được Graphic Object:
Hướng dẫn: Bài tập 19: Mục đích:
RotateTransform TranslateTransform SkewTransform ScaleTransform BitmapEffects Shapes
- 52 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- Dùng RotateTransform để quay Button một góc 45 độ như hình bên dưới:
- Dùng TranslateTransform để di chuyển vị trí tương đối của các đối tượng trên form:
- Dùng SkewTransform để bẻ góc các đối tượng theo x, y:
- Dùng ScaleTransform để phóng to thu nhỏ kích thước:
- Dùng BitmapEffects để thiết kế các Button như hình bên dưới:
- Dùng Shape để vẽ các hình như bên dưới:
Yêu cầu:
Hướng dẫn:
- 53 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Module 5: .Net Remoting
Nội dung kiến thức thực hành:
- Thực hành và hiểu .Net Remoting: - Tạo được Proxy Object - Hiểu Channel: TCPChannel, HTTPChannel - SingleCall, SingleTon - Activator Object - Hiểu Formatters: Binary, SOAP
Bài tập 1: Mục đích:
- Thực hành .Net Remoting với TCPChannel
- Hãy thiết kế Server lắng nghe tại port bất kỳ, giao diện như hình bên dưới:
- Server cho phép chọn WellKnowObject : SingleCall hay SingleTon (SV tự so sánh) - Bấm Start Server để đăng ký kênh truyền và lắng nghe tại Port tùy ý trên giao diện. - Nhiệm vụ của Server là lắng nghe và lưu trữ tên của bất kỳ máy client nào truyền về. - Giao diện Client như hình bên dưới:
Yêu cầu:
- 54 -
- Client cho phép bấm Connect tới Server Name tại một Port tương ứng trên Server đã
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- Đồng thời, ở Client cho phép nhập tên bất kỳ, khi nhấn “Get Infor” thì client sẽ gửi thông tin lên server. Khi Server nhận được thông tin thì sẽ trả về cho client biết: Client là người thứ mấy triệu gọi hàm và danh sách các client đã triệu gọi lên server.
đăng ký.
- Sinh viên tự so sánh sự khác biệt khi Server đăng ký SingleCall và SingleTon
Hướng dẫn:
Bài tập 2: Mục đích:
- Sử dụng .Net Remoting để viết chương trình public chat sử dụng HttpChannel
- Viết chương trình Chat, giao diện server và client như bên dưới: - Giao diện Server:
- Đặt tên các control như bảng bên dưới:
Yêu cầu:
Control Name Text
TextBox txtServerName Localhost
TextBox txtPort 9999
Button txtStart Start Server
Button txtStop Stop Server
- Server có nhiệm vụ lắng nghe mọi thông tin từ client gửi về tại port 9999. - Lưu trữ toàn bộ thông tin và trả về cho mỗi client
Label lblStatus Status
- 55 -
- Giao diện client:
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- Đặt tên các Control như bảng bên dưới:
Control Name Text
TextBox txtServer Localhost
TextBox txtPort 9999
TextBox txtName User name
RichTextBox richChat Enter chat
RichTextBox richHistory History chat
ListBox listUser List user login
Button btnLogin Login
Button btnSend Send Chat
Button btnClear Clear Chat
Button btnLogout Logout
- 56 -
-
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- Bấm “Login” để kết nối tới Server, khi kết nối thành công thì Server sẽ trả về danh sách UserName vào ListBox List User Name. - Bấm Logout để tắt kết nối khỏi server. Phải tự động cập nhật lại toàn bộ danh sách User Name ở các Client khác. - Bấm “Send Chat” để gửi thông tin lên Server, đồng thời Server sẽ trả về toàn bộ thông tin chát vào History Chat. Hướng dẫn:
Bài tập 3: Mục đích:
- Củng cố thêm các kiến thức về .Net Remoting
- Cải tiến bài tập 2, viết thêm chức năng cho Add Friend, Gửi tập tin lúc chat.
Yêu cầu:
Hướng dẫn: - …
Bài tập 4: Mục đích:
- Củng cố thêm các kiến thức về .Net Remoting
- Viết chương trình cho phép đổi năm dương lịch thành âm lịch, với dịch vụ được đặt trên server. Client chỉ việc gửi năm dương lịch lên và lấy kết quả trả về là năm âm lịch từ Server. Giao diện client như hình bên dưới:
- Viết Server để cho phép Client kết nối tại Port quy định. Mỗi lần client bấm “chuyển đổi”
Yêu cầu:
- Server không cần làm giao diện
thì sẽ gửi năm dương lịch lên Server
Hướng dẫn:
- 57 -
- Để chuyển từ năm dương lịch sang năm âm lịch bạn cần biết một số thông tin sau:
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Bài tập 5: Mục đích:
- Củng cố thêm các kiến thức về .Net Remoting
- Viết dịch vụ cho phép chuyển đổi độ F thành C và độ C thành F, Client có giao diện như
Yêu cầu:
hình bên dưới:
- 58 -
- Viết Server để cho phép Client kết nối tại Port quy định. Mỗi lần client bấm các chức
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- Server không cần làm giao diện
năng tương ứng (FC hay CF) thì sẽ gửi thông tin tương ứng lên Server, Server phải lấy được thông tin và truyền tải dữ liệu về đúng với yêu cầu từ client
Hướng dẫn:
Bài tập 6: Mục đích:
- Củng cố thêm các kiến thức về .Net Remoting
- Hãy xem Proxy Object bên dưới:
- Khi ta đăng ký với HttpChannel thì có thể truy suất với SOAP như là Webservice:
public void registerService() { HttpChannel httpChanel = new HttpChannel(8989); ChannelServices.RegisterChannel(httpChanel, false); RemotingConfiguration.RegisterWellKnownServiceType( typeof(Class1), "Class1", WellKnownObjectMode.SingleCall); }
Yêu cầu:
- 59 -
- Khi hàm trên được triệu gọi thì ta có thể lấy SOAP theo link sau:
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
http://192.168.3.102:8989/Class1?Wsdl
- Xem hình minh họa:
- Như vậy nó đã hoạt động dưới dạng Webservice. Ta có thể dùng bất kỳ ngôn ngữ nào để kết nối
tới để tương tác dữ liệu
- Ví dụ, bây giờ ta dùng C# để kết nối tới SOAP này để thực hiện hàm tong2so
với 192.168.3.102 là Ip của máy chủ 8989 là port ta đăng ký Class1 chính là ProxyObject ?wsdl là cách lấy cấu trúc SOAP
- 60 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
- 1) Bấm chuột phải vào Project: chọn Add Service Reference - 2) Màn hình Add Service Reference hiển thị lên: Chọn Advance - 3) Màn hình mới hiển thị lên: chọn Add Web Reference… - 4) màn hình bên dưới xuất hiện:
- URL: gõ link http://192.168.3.102:8989/Class1?Wsdl vào, tương ứng với mỗi máy khác
Hướng dẫn:
- Mục Web reference name: đặt tên tùy ý, ở đây đặt tên myservice - Sau đó bấm Add Reference để chấp nhận kết nối:
- 5) sử dụng như sau:
nhau thì IP sẽ khác nhau.
private void buttonX1_Click(object sender, EventArgs e) { myservice.Class1Service sr = new myservice.Class1Service(); int s=sr.tong2so(integerInput1.Value, integerInput2.Value); labelX3.Text = s + ""; } - Như vậy khi thực hiện hàm này ta cũng được kết quả từ server gửi về.
- 61 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Module 6: Danh sách đề tài
Đề tài nào cũng phải có documentation bằng CHM, có Slide báo cáo sơ lược về đề tài. Sinh viên tự nghĩ ra bối cảnh cũng như lợi ích của đề tài, từ đó đưa ra những đặc tả cho chương trình và cố gắng đáp ứng được những đặc tả này.
Đề tài 1:
- Viết chương trình Quản lý thư viện
Đề tài 2:
- Viết Chương trình quản lý chấm công cho xí nghiệp may mặc
Đề tài 3:
- Viết Chương trình xếp thời khóa biểu cho trường THPT
Đề tài 4:
- Viết Chương trình quản lý tài sản cho một trường đại học
Đề tài 5:
- Viết Chương trình Chat – Tương tự yahoo
Đề tài 6:
- Viết Chương trình trình diễn hình ảnh
Đề tài 7:
- Viết Chương trình quản lý thi bằng lái xe 2 bánh
Đề tài 8:
- Viết Chương trình quản lý vận chuyển hành khách cho các công ty Lữ hành(ví dụ
như công ty Thành Bưởi, Phương Trang, Mai Linh…)
- 62 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Đề tài 9:
- Viết Chương trình quản lý khám bệnh
Đề tài 10:
- Viết Website bán hàng qua mạng
Đề tài 11:
- Viết Website chuyên về tìm kiếm việc làm
Đề tài 12:
- Viết Website chuyên về bất động sản
Đề tài 13:
- Viết Chương trình quản lý tiệm Internet
Đề tài 14:
- Viết Chương trình quản lý khách sạn
Đề tài 15:
- Viết Chương trình quản lý Ký túc xá cho trường Đại Học
Đề tài 16:
- Viết Chương trình quản lý tiệm thuốc tây
Đề tài 17:
- Viết Chương trình quản lý sinh viên – môn học – điểm thi
Đề tài 18:
- Viết Chương trình tra cứu nhạc/ nghe nhạc/ xem phim giống như Window Media
- 63 -
Đại Học Công Nghệ Đồng Nai Khoa Công Nghệ Thông Tin
Đề tài 19:
- Viết Chương trình quản lý cho Trung Tâm Tin Học
Đề tài 20:
- Viết Chương trình quản lý cho Trung Tâm Ngoại Ngữ
Đề tài 21:
- Viết Chương trình quản lý tiệm cà phê
Đề tài 22:
- Game xếp gạch
Đề tài 23:
- Game xếp hình
- 64 -