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

Bài giảng Thực hành kỹ thuật lập trình: Phần 2 - ĐH Sư Phạm Kỹ Thuật Nam Định

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 (1.8 MB, 180 trang )

Tập bài giảng Thực hành kỹ thuật lập trình

BÀI 2. LẬP TRÌNH TRÊN FORM XỬ LÝ CÁC CẤU TRÚC DỮ LIỆU
NÂNG CAO
Mục tiêu
Sau bài học, sinh viên có khả năng:
- Kiến thức: Biết thiết kế Form và sử dụng C# lập trình trên form để thực hiện
các thao tác trên cấu trúc và trên tập tin: tạo lập, tìm kiếm, thêm, xóa,…
- Kỹ năng: Vận dụng đƣợc kiến thức thiết kế và lập trình trên form thực hiện
giải các bài toán trong thực tế.
- Thái độ:
+ Nghiêm túc, sáng tạo
+ Tích cực tập luyện
Chuẩn bị dụng cụ, vật tƣ, thiết bị
Chuẩn bị máy tính có hệ điều hành Windows XP hoặc cao hơn, phần mềm
Microsoft Office, bộ gõ Tiếng Việt, phần mềm Visual Studio 2008 hoặc cao hơn.
2.1 - Làm việc với cấu trúc
2.1.1. Tóm tắt các kiến thức cần nhớ
1. Định nghĩa một Struct
[Phạm_vi_truy_nhập] struct Tên_cấu_trúc
{
Danh_ sách _các_ biến_thành_phần;
Danh_ sách_các_thuộc_tính;
Danh_ sách_ các_phƣơng_thức;
}
2. Khai báo biến cấu trúc
Tên_cấu_ trúc
Tên_biến_cấu trúc = new Tên_cấu_trúc();
Ví dụ: Diem A= new Diem(); // Gọi hàm tạo không tham số
hoặc Diem B = new Diem(30,10); // Gọi hàm tạo hai tham số
Chú ý:


Nếu ta không tạo bộ khởi dựng (hàm tạo) thì một bộ khởi dựng mặc định ngầm
định sẽ đƣợc trình biên dịch tạo ra và giá trị mặc định của các biến thành viên là 0.
Trong ngơn ngữ C#, từ khóa new khơng phải luôn luôn tạo đối tƣợng trên bộ
nhớ Heap. Các lớp thì đƣợc tạo trên heap, trong khi các cấu trúc thì đƣợc tạo trên
stack. Ngồi ra, khi new đƣợc bỏ qua thì bộ khởi dựng sẽ khơng đƣợc gọi. Do ngơn
ngữ C# u cầu phải có phép gán trƣớc khi sử dụng, phải khởi tạo tƣờng minh tất cả
các biến thành viên trƣớc khi sử dụng chúng trong cấu trúc.
3. Truy cập đến các biến thành phần của biến cấu trúc
Tên_biến_cấu_trúc. Tên_biến_thành_phần
Ví dụ: Diem A= new Diem(20, 40);
A.x // truy cập vào thành phần x của biến A
118


Tập bài giảng Thực hành kỹ thuật lập trình

4. Sao chép biến cấu trúc
C# cho phép khởi gán hay gán một biến cấu trúc cho một biến cấu trúc khác.
Ví dụ: Diem A = new Diem(10,20); Diem B; B = A;
5. Mảng cấu trúc
a. Khai báo mảng cấu trúc:
Tên_cấu_trúc [] Tên_ mảng= new Tên_cấu_trúc [kích_thƣớc];
Ví dụ: Diem [] A= new Diem[50];
b. Truy nhập đến các biến thành phần của mảng cấu trúc:
Tên_mảng[chỉ_số].tên_biến_thành_phần;
Ví dụ: A[2].x ;
2.1.2. Bài tập mẫu
Viết chƣơng trình thực hiện các công việc sau:
1. Thiết kế Form nhƣ hình sau


Hình 2. 1. Form quản lý giáo viên tiểu học
Yêu cầu:
- Nhãn danh sách giáo viên: Font Time New Roman, cỡ chữ 16, chữ hoa, in
đậm, căn giữa Form, màu xanh.
- Nhãn mã giáo viên, họ và tên, giới tính, năm sinh, mơn giảng dạy: Font Time
New Roman, cỡ chữ 14, màu đen.
- Các ô để nhập Mã giáo viên, họ và tên, năm sinh là các TextBox.
- Điều khiển để chọn giới tính Nam và Nữ là các radioButton
- Các điều khiển “Thêm”, ”Hiển thị”, “Sửa”, “Xóa”, ”Thốt” là các Button.
- Điều khiển danh sách giáo viên là GroupBox
- Điều khiển để hiển thị danh sách giáo viên là ListView.
119


Tập bài giảng Thực hành kỹ thuật lập trình

- Điều khiển để lựa chọn môn giảng dạy là ComboBox.
2. Lập trình thực hiện các cơng việc:
- Khai báo kiểu cấu trúc giáo viên của một trƣờng tiểu học ABC có các thuộc
tính: mã giáo viên, họ và tên, giới tính, năm sinh, mơn giảng dạy. Các hàm tạo khơng
đối, có đối, hàm tạo sao chép để khởi tạo đối tƣợng
- Khi Load Form:
+ Các điều khiển “Sửa”, “Xóa”, “Hiển thị” vơ hiệu hóa.
+ Điều khiển “Thêm” và “Thốt” sáng cho phép hoạt động.
- Khi ngƣời dùng kích vào nút “Thêm”
+ Các điều khiển “Sửa”, “Xóa”, “Hiển thị” sáng cho phép hoạt động
+ Thực hiện kiểm tra sự hợp lệ của dữ liệu nhập vào (nhập đủ thông tin về một
giáo viên, năm sinh nhập vào phải là số và phải nhập đủ 4 số). Nếu dữ liệu nhập vào
không hợp lệ thì đƣa ra hộp thoại thơng báo và u cầu nhập lại.
+ Kiểm tra xem mã giáo viên đã có trong danh sách hay chƣa? Nếu trùng mã

giáo viên thì đƣa ra hộp thoại thơng báo và cho phép nhập lại. Nếu khơng trùng thì
thực hiện thêm giáo viên mới vào danh sách giáo viên
+ Sau khi thêm một nhân viên mới vào danh sách thì các textbox để trống
- Khi ngƣời dùng kích vào nút “Hiển thị”: Hiển thị thông tin của các giáo viên
ra ListView danh sách giáo viên.
- Khi ngƣời dùng kích chọn phần tử trên ListView thì thơng tin về giáo viên
đƣợc chọn sẽ hiển thị lên các textbox và radiobutton, combobox tƣơng ứng.
- Khi ngƣời dùng kích vào nút “Xóa”:
+ Thực hiện xóa giáo viên có mã trùng với mã giáo viên đƣợc chọn trên
ListView ra khỏi danh sách giáo viên (bắt lỗi khi ngƣời dùng chƣa chọn phần tử trên
ListView)
+ Cập nhật lại danh sách giáo viên sau khi xóa lên ListView danh sách giáo
viên.
+ Các textbox và combobox để trống.
- Khi ngƣời dùng kích vào nút “Sửa”:
+ Nếu thuộc tính Text của điều khiển này là “Sửa” thì đối tƣợng ơ để nhập mã
giáo viên vơ hiệu hóa (khơng sửa mã), thực hiện đổi lại thuộc tính Text của điều khiển
này là “Cập nhật” và đặt con trỏ vào ô nhập họ tên giáo viên.
+ Nếu thuộc tính Text của điều khiển này là “Cập nhật”: Kiểm tra xem dữ liệu
sau khi sửa có hợp lệ hay khơng? Nếu chƣa hợp lệ thì hiện lên hộp thoại thơng báo,
cho phép sửa lại và thuộc tính Text của điều khiển này vẫn là “Cập nhật”. Nếu dữ liệu
sau khi sửa hợp lệ thì:
* Thuộc tính Text của điều khiển này đổi thành “Sửa”.
120


Tập bài giảng Thực hành kỹ thuật lập trình

* Thực hiện cập nhật lại thơng tin của giáo viên có mã trùng với mã giáo viên
lựa chọn để sửa (bắt lỗi khi ngƣời dùng chƣa chọn phần tử trên ListView)

* Cập nhập danh sách giáo viên sau khi sửa lên ListView danh sách giáo viên.
* Đối tƣợng ô để nhập mã giáo viên sáng lên cho phép hoạt động.
Hướng dẫn thực hiện
1. Thiết kế Form nhƣ yêu cầu đề bài
2. Phân tích u cầu
Theo u cầu của bài tốn thì phải có một Form chứa:
- Các đối tƣợng có nội dung “Danh sách giáo viên”, “Mã giáo viên”, ”Họ và
tên”, “Giới tính”,”Năm sinh”, “Mơn giảng dạy” là các Label.
- Đối tƣợng ô nhập mã giáo viên, họ và tên, năm sinh, giới tính, mơn giảng dạy
là các Textbox.
- Điều khiển để chọn giới tính nam và nữ là các RadioButton.
- Điều khiển để hiển thị danh sách giáo viên là ListView đƣợc đặt trong một
GroupBox danh sách giáo viên.
- Điều khiển để lựa chọn môn giảng dạy là ComboBox.
- Các nút “Thêm”, “Xóa”, ”Sửa”, “Hiển thị”, “Thốt” là các Button.
- Điều khiển thông tin chi tiết giáo viên là một GroupBox.
3. Hƣớng dẫn thực hiện
- Thiết kế Form theo mẫu và gắn các điều khiển
+ Kéo điều khiển Label từ cửa sổ Toolbox
+ Kích phải chuột vào Label chọn Properties và thiết lập các thuộc tính cho
Label nhƣ sau:
Text: DANH SÁCH GIÁO VIÊN
Font: Time New Roman
Size: 16
Font style: Bold
ForeColor: Blue
Thực hiện tƣơng tự với các nhãn họ tên, mã giáo viên, giới tính, năm sinh, mơn
giảng dạy.
- Để tạo một GroupBox thông tin chi tiết giáo viên theo yêu cầu cần thực hiện:
+ Kéo điều khiển GroupBox từ cửa sổ Toolbox vào Form.

+ Kích phải chuột vào GroupBox chọn Properties và thiết lập các thuộc tính cho
GroupBox nhƣ sau:
Text: Thơng tin chi tiết giáo viên
Font: Time New Roman
121


Tập bài giảng Thực hành kỹ thuật lập trình

Size: 14
ForeColor: Black
Thực hiện tƣơng tự với GroupBox danh sách giáo viên.
- Để tạo điều khiển nhập mã giáo viên theo yêu cầu cần thực hiện:
+ Kéo điểu khiển Textbox từ cửa sổ Toolbox vào Form.
+ Kích phải chuột vào Textbox/Properties và thiết lập thuộc tính Name:
txt_magv.
Thực hiện tƣơng tự với các điều khiển nhập họ và tên, năm sinh.
- Để tạo điều khiển chọn giới tính là Nam:
+ Kéo điều khiển RadioButton từ cửa sổ Toolbox vào Form.
+ Kích phải chuột vào RadioButton/Properties và thiết lập các thuộc tính:
Name: radio_nam
checked: True
Thực hiện tƣơng tự với điều khiển chọn giới tính là Nữ.
- Để tạo điều khiển “Thêm” theo yêu cầu cần thực hiện:
+ Kéo điều khiển Button từ cửa sổ Toolbox vào Form.
+ Kích phải chuột vào Button chọn Properties và thiết lập các thuộc tính
Name: bt_them.
Thực hiện tƣơng tự với điều khiển “Xóa” , “Sửa”, “Hiển thị”, “Thốt”.
- Để tạo điều khiển liệt kê danh sách giáo viên theo yêu cầu cần thực hiện:
+ Kéo điều khiển ListView từ cửa sổ Toolbox vào Form.

+ Kích phải chuột vào ListView chọn Properties và thiết lập các thuộc tính:
Name: listview_giaovien
Columns/ kích chuột vào Collection/ kích Add 5 lần và thiết lập thuộc
tính Text cho các cột tƣơng ứng lần lƣợt là mã giáo viên, họ và tên, giới tính, năm
sinh, mơn giảng dạy.
View: Detail
GridLine: true
- Để tạo điều khiển chọn môn giảng dạy theo yêu cầu cần thực hiện:
+ Kéo điều khiển ComboBox từ cửa sổ Toolbox vào Form.
+ Kích phải chuột vào ComboBox /Properties và thiết lập các thuộc tính:
Name: combo_mongd
Items/ Collection/ Gõ tên các môn giảng dạy.
Kết quả thiết kế Form

122


Tập bài giảng Thực hành kỹ thuật lập trình

Hình 2. 2 - Kết quả thiết kế Form quản lý giáo viên tiểu học
Viết mã lệnh cho các công việc
-Viết mã lệnh khai báo cấu trúc Giáo viên
public struct Giaovien
{
string _magiaovien;
string _hoten;
bool _gioitinh;
int _namsinh;
string _mon_gday;
public string maGV

{
get { return _magiaovien; }
set { _magiaovien = value; }
}
public string hoten
{
get { return _hoten; }
set { _hoten = value; }
}
public bool gioitinh
{
get { return _gioitinh; }
set { _gioitinh = value; }
}
public int namsinh
{
get { return _namsinh; }
set { _namsinh = value; }
123


Tập bài giảng Thực hành kỹ thuật lập trình

}
public string mon_gday
{
get { return _mon_gday; }
set { _mon_gday = value; }
}
-Viết mã lệnh cho hàm tạo có tham số

public Giaovien(string magv, string hoten, bool gt, int ns, string mongd)
{
_magiaovien = magv;
_hoten = hoten;
_gioitinh = gt;
_namsinh = ns;
_mon_gday = mongd;
}
-Viết mã lệnh cho hàm tạo sao chép
public Giaovien(Giaovien a)
{
_magiaovien = a._magiaovien;
_hoten = a._hoten;
_gioitinh = a._gioitinh;
_namsinh = a._namsinh;
_mon_gday = a._mon_gday;
}
}
-Viết mã lệnh khai báo mảng giáo viên, biến nguyên n
Giaovien[] A = new Giaovien[100]; int n = 0;
-Viết mã lệnh cho sự kiện Form Load
private void Form1_Load(object sender, EventArgs e)
{
vohieuhoa(false);
txt_magv.Focus();
}
-Viết mã lệnh cho hàm vơ hiệu hóa các nút
void vohieuhoa(bool gt)
{
bt_hienthi.Enabled = gt;

bt_sua.Enabled = gt;
bt_xoa.Enabled = gt;
}
-Viết mã lệnh cho hàm kiểm tra dữ liệu nhập vào
bool kiemtra_du_lieu()
{
if (kiemtra(txt_magv.Text)||kiemtra(txt_hoten.Text)||
kiemtra(txt_namsinh.Text)|| kiemtra(combo_mongd.Text)) return false;
124


Tập bài giảng Thực hành kỹ thuật lập trình

int namsinh;
if (txt_namsinh.Text.Length < 4 || txt_namsinh.Text.Length > 4) return
false;
if (!int.TryParse(txt_namsinh.Text, out namsinh) || namsinh <= 0)
return false;
return true;
}
-Viết mã lệnh cho hàm kiểm tra xâu rỗng
bool kiemtra(string s)
{
if (string.IsNullOrWhiteSpace(s)) return true;
else return false;
}
-Viết mã lệnh cho hàm reset lại các textbox
void Reset()
{
txt_magv.ResetText();

txt_hoten.ResetText();
txt_namsinh.ResetText();
combo_mongd.Text = "";
txt_magv.Focus();
}
-Viết mã lệnh cho sự kiện kích chuột vào nút thêm
private void bt_them_Click(object sender, EventArgs e)
{
if (kiemtra_du_lieu())
{
bool gt; int i; vohieuhoa(true);
if (radio_nam.Checked) gt=false;
else gt = true;
Giaovien X = new Giaovien(txt_magv.Text, txt_hoten.Text, gt,
int.Parse(txt_namsinh.Text), combo_mongd.Text);
for (i= 0; i < n; i++)
if (A[i].maGV == txt_magv.Text) { MessageBox.Show("Trùng
mã giáo viên", "Thông báo"); txt_magv.Focus(); break; }
if (i == n) { A[n] = X; n++; Reset(); }
}
}
-Viết mã lệnh cho sự kiện SelectedIndexChanged của Listview danh sách giáo viên
private void listview_giaovien_SelectedIndexChanged(object sender,
EventArgs e)
{
string gt;
try
{
for (int i = 0; i < listview_giaovien.SelectedItems.Count; i++)
125



Tập bài giảng Thực hành kỹ thuật lập trình

{
txt_magv.Text =
listview_giaovien.SelectedItems[i].SubItems[0].Text;
txt_hoten.Text =
listview_giaovien.SelectedItems[i].SubItems[1].Text;
gt= listview_giaovien.SelectedItems[i].SubItems[2].Text;
if (string.Compare(gt, "Nam") == 0) radio_nam.Checked = true;
else radio_nu.Checked = true;
txt_namsinh.Text =
listview_giaovien.SelectedItems[i].SubItems[3].Text;
combo_mongd.Text =
listview_giaovien.SelectedItems[i].SubItems[4].Text;
}
}
catch { MessageBox.Show("Bạn chƣa chọn phần tử"); }
}
-Viết mã lệnh cho sự kiện kích chuột vào nút xóa
private void bt_xoa_Click(object sender, EventArgs e)
{
try
{
string ma = txt_magv.Text;
for (int i = 0; i < n;i++ )
if (String.Compare(A[i].maGV, ma) == 0)
{
for (int j = i; j < n - 1; j++) A[j] = A[j + 1];

n--;
break;
}
Reset();
Dua_DL_listview();
}
catch { MessageBox.Show("Chƣa chọn mã nhân viên"); }
}
-Viết mã lệnh cho sự kiện kích chuột vào nút sửa
private void bt_sua_Click(object sender, EventArgs e)
{
if (string.Compare(bt_sua.Text, "Sửa")!= 0) // nút cập nhật
{ if (kiemtra_du_lieu())
{
bt_sua.Text = "Sửa";
for (int i = 0; i < n; i++)
if (string.Compare(A[i].maGV, txt_magv.Text) == 0)
{
A[i].hoten = txt_hoten.Text;
A[i].namsinh = int.Parse(txt_namsinh.Text);
126


Tập bài giảng Thực hành kỹ thuật lập trình

A[i].mon_gday = combo_mongd.Text;
if (radio_nam.Checked) A[i].gioitinh = false;
else A[i].gioitinh = true;
Dua_DL_listview();
break;

}
txt_magv.Enabled = true;
}
else { bt_sua.Text = "Cập nhật"; MessageBox.Show("Du lieu sua
chua hop le"); }
}
else // Sửa
{
txt_magv.Enabled = false; txt_hoten.Focus();
bt_sua.Text = "Cập nhật";
}
}
-Viết mã lệnh cho sự kiện kích chuột vào nút hiển thị
private void bt_hienthi_Click(object sender, EventArgs e)
{
Dua_DL_listview();
}
-Viết mã lệnh cho hàm đƣa dữ liệu vào ListView mã giáo viên
private void Dua_DL_listview()
{
listview_giaovien.Items.Clear();
for (int i = 0; i < n; i++)
{
ListViewItem item = new ListViewItem();
item.Text = A[i].maGV;
item.SubItems.Add(A[i].hoten);
item.SubItems.Add(A[i].gioitinh.ToString());
item.SubItems.Add(A[i].namsinh.ToString());
item.SubItems.Add(A[i].mon_gday);
listview_giaovien.Items.Add(item);

}
}
-Viết mã lệnh cho sự kiện kích chuột vào nút thoát
private void bt_thoat_Click(object sender, EventArgs e)
{
this.Close();
}
Kết quả chạy chƣơng trình

127


Tập bài giảng Thực hành kỹ thuật lập trình

Hình 2. 3. Kết quả chạy chƣơng trình quản lý giáo viên tiểu học
2.1.3. Bài tập thực hành
Bài 1
Viết chƣơng trình thực hiện các cơng việc sau:
1. Thiết kế Form nhƣ hình sau

Hình 2. 4. Form quản lý bán xe mơ tơ
u cầu:
- Nhãn quản lý bán xe mô tô: Font Time New Roman, cỡ chữ 16, chữ hoa, in
đậm, căn giữa Form, màu đỏ.
- Nhãn biển kiểm soát, hãng xe, chủ xe, năm đăng ký: Font Time New Roman,
cỡ chữ 14, màu đen.
- Các ơ để nhập biển kiểm sốt, chủ xe, năm đăng ký là các TextBox.
- Điều khiển để chọn hãng xe là ComboBox.
- Các điều khiển “Nhập”, ”Xe đăng ký tại Nam định”, “Xe đăng ký năm 2014”,
“Xe quá hạn” là các Button.

128


Tập bài giảng Thực hành kỹ thuật lập trình

- Điều khiển để hiển thị thông tin chi tiết của xe là ListView và đƣợc đặt trong
một GroupBox thông tin chi tiết.
2. Lập trình thực hiện các cơng việc:
- Khai báo cấu trúc xe mô tô bao gồm các thành phần:
+ Các thuộc tính: biển kiểm sốt, hãng xe, chủ xe, năm đăng ký.
+ Các hàm tạo khơng đối, có đối để khởi tạo đối tƣợng lớp xe máy.
+ Phƣơng thức kiểm tra xe quá hạn sử dụng (xe quá hạn là xe có số năm sử
dụng tính đến năm kiểm tra vƣợt quá 15 năm).
- Khi Load Form:
+ Các điều khiển ”Xe đăng ký tại Nam định”, “Xe đăng ký năm 2014”, “Xe q
hạn” vơ hiệu hóa.
+ Điều khiển “Nhập” sáng cho phép hoạt động.
- Khi ngƣời dùng kích vào nút “Nhập”
+ Các điều khiển ”Xe đăng ký tại Nam định”, “Xe đăng ký năm 2014”, “Xe quá
hạn” sáng lên cho phép hoạt động.
+ Thực hiện kiểm tra sự hợp lệ của dữ liệu nhập vào (nhập đủ thông tin về một
xe mơ tơ, nhập đúng biển kiểm sốt (ví dụ biển kiểm soát hợp lệ: 18F83256), năm
đăng ký là số và phải nhập đủ 4 số. Nếu dữ liệu nhập vào khơng hợp lệ thì đƣa ra hộp
thoại thơng báo và yêu cầu nhập lại.
+ Kiểm tra xem biển kiểm sốt nhập vào đã có trong danh sách xe hay chƣa?
Nếu trùng biển kiểm sốt thì đƣa ra hộp thoại thông báo và cho phép nhập lại. Nếu
không trùng thì thực hiện thêm thơng tin xe mới đó vào danh sách xe, đồng thời hiển
thị xe đó lên ListView thông tin chi tiết xe.
+ Sau khi thêm một xe mới vào danh sách xe thì reset lại các textbox.
- Khi ngƣời dùng kích vào nút “Xe đăng ký tai Nam định ”: Hiển thị ra

ListView thông tin chi tiết những xe đăng ký tại nam định (tức những xe có biển kiểm
sốt bắt đầu là 18).
- Khi ngƣời dùng kích vào nút “Xe đăng ký năm 2014”: Hiển thị ra ListView
thơng tin chi tiết những xe có năm đăng ký là 2014.
- Khi ngƣời dùng kích vào nút “Xe quá hạn”: Hiển thị ra ListView thông tin chi
tiết những xe đã quá hạn sử dụng.
Hướng dẫn thực hiện
1. Thiết kế Form nhƣ yêu cầu đề bài
2. Phân tích yêu cầu
Theo u cầu của bài tốn thì phải có một Form chứa:

129


Tập bài giảng Thực hành kỹ thuật lập trình

- Các đối tƣợng có nội dung “Quản lý bán xe mơ tơ”, “Biển kiểm sốt”, ”Hãng
xe”, “Chủ xe”, “Năm đăng ký” là các Label.
- Đối tƣợng ơ nhập biển kiểm sốt, chủ xe, năm đăng ký là các Textbox.
- Điều khiển để chọn hãng xe là ComboBox.
- Điều khiển để hiển thị danh sách xe mô tô là ListView đƣợc đặt trong một
GroupBox thông tin chi tiết.
- Điều khiển nhập thông tin chi tiết là một GroupBox.
- Các nút “Nhập”, ”Xe đăng ký tại Nam định”, “Xe đăng ký năm 2014”, “Xe
quá hạn”là các Button.
3. Hƣớng dẫn thực hiện
- Thiết kế Form theo mẫu và gắn các điều khiển
+ Kéo điều khiển Label từ cửa sổ Toolbox
+ Kích phải chuột vào Label chọn Properties và thiết lập các thuộc tính cho
Label nhƣ sau:

Text: QUẢN LÝ BÁN XE MÔ TÔ
Font: Time New Roman
Size: 16
Font style: Bold
ForeColor: Red
Thực hiện tƣơng tự với các nhãn biển kiểm soát, hãng xe, chủ xe, năm đăng ký.
- Để tạo một GroupBox nhập thông tin theo yêu cầu cần thực hiện:
+ Kéo điều khiển GroupBox từ cửa sổ Toolbox vào Form.
+ Kích phải chuột vào GroupBox chọn Properties và thiết lập các thuộc tính cho
GroupBox nhƣ sau:
Text: Nhập thông tin
Font: Time New Roman
Size: 14
ForeColor: Black
Thực hiện tƣơng tự với GroupBox thông tin chi tiết
- Để tạo điều khiển nhập biển kiểm soát theo yêu cầu cần thực hiện:
+ Kéo điểu khiển Textbox từ cửa sổ Toolbox vào Form.
+ Kích phải chuột vào Textbox/Properties và thiết lập thuộc tính Name:
txt_bienks.
Thực hiện tƣơng tự với các điều khiển nhập chủ xe, năm đăng ký.
- Để tạo điều khiển chọn hãng xe theo yêu cầu cần thực hiện:
+ Kéo điều khiển ComboBox từ cửa sổ Toolbox vào Form.
+ Kích phải chuột vào ComboBox /Properties và thiết lập các thuộc tính:
130


Tập bài giảng Thực hành kỹ thuật lập trình

Name: combo_hangxe
Items/ Collection/ Gõ tên các hãng xe (ví dụ: Hondan, Yamaha, Suzuki,…)

- Để tạo điều khiển “Nhập” theo yêu cầu cần thực hiện:
+ Kéo điều khiển Button từ cửa sổ Toolbox vào Form.
+ Kích phải chuột vào Button chọn Properties và thiết lập các thuộc tính
Name: bt_nhap.
Thực hiện tƣơng tự với điều khiển “Xe đăng ký tại Nam định” , “Xe đăng ký
năm 2014”, “Xe quá hạn”.
- Để tạo điều khiển liệt kê chi tiết các xe mô tô theo yêu cầu cần thực hiện:
+ Kéo điều khiển ListView từ cửa sổ Toolbox vào Form.
+ Kích phải chuột vào ListView chọn Properties và thiết lập các thuộc tính:
Name: listview_chitiet
Columns/ kích chuột vào Collection/ kích Add 4 lần và thiết lập thuộc
tính Text cho các cột tƣơng ứng lần lƣợt là biển kiểm soát, hãng xe, chủ xe, năm
đăng ký.
View: Detail
GridLine: true
-Viết mã lệnh cho các sự kiện
-Viết mã lệnh khai báo cấu trúc xe mô tô
Public struct Moto
{
string _bienks;
string _hangxe;
string _chuxe;
int _namdk;
public string bienks
{
get { return _bienks; }
set { _bienks = value; }
}
public string hangxe
{

get { return _hangxe; }
set { _hangxe = value; }
}
public string chuxe
{
get { return _chuxe; }
set { _chuxe = value; }
}
public int namdk
131


Tập bài giảng Thực hành kỹ thuật lập trình

{
get { return _namdk; }
set { _namdk = value; }
}
public Moto(string bienks, string hangxe, string chuxe, int namdk)
{
_bienks = bienks;
_hangxe = hangxe;
_chuxe = chuxe;
_namdk = namdk;
}
public bool qua_han_sd()
{
if (DateTime.Now.Year - namdk > 15) return true;
else return false;
}

}
-Viết mã lệnh khai báo mảng cấu trúc xe mô tô và biến nguyên n
Moto[] A = new Moto[100]; int n = 0;
-Viết mã lệnh cho hàm vơ hiệu hóa các nút
void vohieuhoa(bool gt)
{
bt_dk2014.Enabled = gt;
bt_dknamdinh.Enabled = gt;
bt_quahan.Enabled = gt;
}
-Viết mã lệnh cho sự kiện Load Form
private void Form1_Load(object sender, EventArgs e)
{
vohieuhoa(false);
txt_bienks.Focus();
}
-Viết mã lệnh cho hàm kiểm tra xâu rỗng
bool kiemtra(string s)
{
if (string.IsNullOrWhiteSpace(s)) return true;
else return false;
}
-Viết mã lệnh cho hàm kiểm tra dữ liệu nhập vào
bool kiemtra()
{
int nam;
if (kiemtra(txt_bienks.Text)||kiemtra(
txt_chuxe.Text)||kiemtra(combo_hangxe.Text)||kiemtra(txt_namđk.Text))
return false;
132



Tập bài giảng Thực hành kỹ thuật lập trình

if (txt_namđk.Text.Length < 4 || txt_namđk.Text.Length > 4) return
false;
if (!int.TryParse(txt_namđk.Text, out nam)) return false;
return true;
}
-Viết mã lệnh cho hàm lại các textbox
void reset()
{
txt_bienks.ResetText();
txt_chuxe.ResetText();
combo_hangxe.Text = "";
txt_namđk.Text = "";
}
-Viết mã lệnh cho hàm kiểm tra biển kiểm soát hợp lệ
bool kt_bienso(string s)
{
if (s.Length < 8 || s.Length > 9) return false;
if ((s[0] >= '0' && s[0] <= '9') && (s[1] >= '0' && s[1] <= '9'))
if((s[2]>='a'&&s[2]<='z') || (s[2]>='A'&&s[2]<='Z'))
{
bool kt;
kt=true;
for(int i=3;iif (s[i]<'0'||s[i]>'9')
{
kt=false;

break;
}
if (kt) return true;
else return false;
}
return false;
}
-Viết mã lệnh cho sự kiện kích chuột vào nút nhập
private void bt_nhap_Click(object sender, EventArgs e)
{
int i;
if (kiemtra())
{
vohieuhoa(true);
if (kt_bienso(txt_bienks.Text))
{ Moto X = new Moto(txt_bienks.Text, combo_hangxe.Text,
txt_chuxe.Text, int.Parse(txt_namđk.Text));
for (i = 0; i < n; i++)
if (string.Compare(A[i].bienks, txt_bienks.Text) == 0) {
MessageBox.Show("Trung bien kiem soat"); txt_bienks.Focus(); return; }
133


Tập bài giảng Thực hành kỹ thuật lập trình

if (i == n) { A[n] = X; n++; reset(); }
Dua_dulieu_listview(A, n); reset(); txt_bienks.Focus();
}
else { MessageBox.Show("Nhập sai biển số xe", "Thông báo");}
}

else { MessageBox.Show("Dữ liệu chƣa hợp lệ", "Thông báo");
return; }
}
-Viết mã lệnh cho hàm đƣa dữ liệu vào listview
private void Dua_dulieu_listview( Moto [] A, int n)
{
list_chitiet.Items.Clear();
for (int i = 0; i < n;i++)
{
ListViewItem item = new ListViewItem();
item.Text = A[i].bienks;
item.SubItems.Add(A[i].hangxe);
item.SubItems.Add(A[i].chuxe);
item.SubItems.Add(A[i].namdk.ToString());
list_chitiet.Items.Add(item);
}
}
-Viết mã lệnh cho sự kiện kích chuột vào nút xe đăng ký tại Nam định
private void bt_dknamdinh_Click(object sender, EventArgs e)
{
Moto[] b = new Moto[100]; int i, m = 0;
for(i=0;iif (string.Compare(A[i].bienks.Substring(0,2), "18") == 0)
{
Moto x = new Moto(A[i].bienks, A[i].hangxe, A[i].chuxe,
A[i].namdk);
b[m] = x; m++;
}
Dua_dulieu_listview(b, m);
}

-Viết mã lệnh cho sự kiện kích chuột vào nút xe đăng ký năm 2014
private void bt_dk2014_Click(object sender, EventArgs e)
{
Moto [] b = new Moto[100];
int i, m = 0;
for (i = 0; i < n;i++)
if (A[i].namdk == 2014)
{ Moto x = new Moto(A[i].bienks, A[i].hangxe, A[i].chuxe,
A[i].namdk);
b[m] = x;
m++;
}
Dua_dulieu_listview(b,m);
}
-Viết mã lệnh cho sự kiện kích chuột vào nút quá hạn
134


Tập bài giảng Thực hành kỹ thuật lập trình

private void bt_quahan_Click(object sender, EventArgs e)
{
Moto[] b = new Moto[100];
int i, m = 0;
for (i = 0; i < n; i++)
if (A[i].qua_han_sd())
{ Moto x = new Moto(A[i].bienks, A[i].hangxe, A[i].chuxe,
A[i].namdk);
b[m] = x;
m++;

}
Dua_dulieu_listview(b, m);
}
Kết quả chạy chƣơng trình

Hình 2. 5. Kết quả chạy chƣơng trình quản lý bán xe mơ tơ
Bài 2
1. Thiết kế Form nhƣ hình sau:

Hình 2. 6. Form danh sách sinh viên
135


Tập bài giảng Thực hành kỹ thuật lập trình

Yêu cầu:
- Nhãn danh sách sinh viên: Microsoft Sans Serif, cỡ chữ 16, chữ hoa, in đậm,
căn giữa Form, màu xanh.
- Nhãn mã sinh viên, họ tên sinh viên, năm sinh, điểm nhập mơn tin học, điểm
tốn rời rạc: Font Time New Roman, cỡ chữ 14, màu đen.
- Các ô để nhập mã sinh viên, họ tên sinh viên, năm sinh, điểm nhập mơn tin
học, điểm tốn rời rạc là các TextBox.
- Các điều khiển “Nhập”, ”DS sinh viên lên lớp”, “Sửa”, “Xóa”, ”Sinh viên có
tổng điểm lớn nhất” là các Button.
- Điều khiển thông tin chi tiết sinh viên là GroupBox
- Điều khiển để hiển thị danh sách sinh viên là ListView.
2. Lập trình thực hiện các cơng việc:
- Khai báo cấu trúc sinh viên gồm các thành phần:
+ Các thuộc tính: Mã sinh viên, tên sinh viên, năm sinh, điểm nhập mơn tin học,
điểm tốn rời rạc.

+ Các phƣơng thức: hàm tạo khơng đối, hàm tạo có đối để khởi tạo một đối
tƣợng, phƣơng thức xét lên lớp (sinh viên đƣợc lên lớp nếu khơng có điểm mơn nào
dƣới 5).
- Khi Load Form:
+ Các điều khiển ”DS sinh viên lên lớp”, “Sửa”, “Xóa”, ”Sinh viên có tổng
điểm lớn nhất” vơ hiệu hóa.
+ Điều khiển “Nhập” sáng cho phép hoạt động.
- Khi ngƣời dùng kích vào nút “Nhập”:
+ Các điều khiển ”DS sinh viên lên lớp”, “Sửa”, “Xóa”, ”Sinh viên có tổng
điểm lớn nhất” sáng lên cho phép hoạt động.
+ Thực hiện kiểm tra sự hợp lệ của dữ liệu nhập vào (nhập đủ thông tin về một
sinh viên, năm sinh nhập vào phải là số và phải nhập đủ 4 số, điểm mơn tốn rời rạc,
điểm nhập mơn tin học phải là số). Nếu dữ liệu nhập vào không hợp lệ thì đƣa ra hộp
thoại thơng báo và u cầu nhập lại.
+ Kiểm tra xem mã sinh viên đã có trong danh sách hay chƣa? Nếu trùng mã
sinh viên thì đƣa ra hộp thoại thông báo và cho phép nhập lại. Nếu khơng trùng thì
thực hiện thêm sinh viên mới vào danh sách sinh viên
+ Sau khi thêm một nhân viên mới vào danh sách thì reset lại các textbox.
+ Hiển thị danh sách sinh viên lên ListView sinh viên.
- Khi ngƣời dùng kích vào nút “Xóa”:
+ Kiểm tra xem ngƣời dùng đã chọn sinh viên cần xóa trên ListView sinh viên
hay chƣa? Nếu chƣa chọn thì đƣa ra hộp thoại thông báo yêu cầu chọn lại, đồng thời
136


Tập bài giảng Thực hành kỹ thuật lập trình

thơng. Ngƣợc lại thông tin về sinh viên đƣợc chọn sẽ hiển thị lên các Textbox tƣơng
ứng.
+ Khi ngƣời dùng kích chọn vào nút “Xóa” thì hiện lên hộp thoại có 2 nút

Yes/No. Nếu ngƣời dùng chọn Yes thì thực hiện xóa sinh viên ra khỏi danh sách và
cập nhật lại danh sách sinh viên lên ListView sinh viên đồng thời reset lại các textbox
trong groupbox nhập thông tin sinh viên. Nếu ngƣời dùng chọn No thì khơng thực hiện
xóa.
- Khi ngƣời dùng kích vào nút “Sửa”:
+ Kiểm tra xem ngƣời dùng đã chọn sinh viên cần xóa trên ListView sinh viên
hay chƣa? Nếu chƣa chọn thì đƣa ra hộp thoại thơng báo yêu cầu chọn lại, đồng thời
thông. Ngƣợc lại thông tin về sinh viên đƣợc chọn sẽ hiển thị lên các Textbox tƣơng
ứng.
+ Nếu Text của điều khiển này là “Sửa” thì đối tƣợng ơ để nhập mã sinh viên
vơ hiệu hóa (khơng sửa mã), thực hiện đổi lại Text của điều khiển này là “Cập nhật”
và đặt con trỏ vào ô nhập họ tên sinh viên.
+ Nếu Text của điều khiển này là “Cập nhật”: Kiểm tra xem dữ liệu sau khi sửa
có hợp lệ hay khơng? Nếu chƣa hợp lệ thì hiện lên hộp thoại thơng báo, cho phép sửa
lại và Text của điều khiển này vẫn là “Cập nhật”. Nếu dữ liệu sau khi sửa hợp lệ thì:
* Text của điều khiển này đổi thành “Sửa”
* Textbox để nhập mã sinh viên sáng lên cho phép hoạt động.
* Thực hiện cập nhật lại thông tin của sinh viên có mã trùng với mã
sinh viên lựa chọn để sửa.
* Cập nhập danh sách sinh viên sau khi sửa lên ListView sinh viên.
- Khi ngƣời dùng kích vào nút “Danh sách sinh viên lên lớp”:Hiển thị lên
ListView danh sách sinh viên những sinh viên đủ điều kiện lên lớp.
- Khi ngƣời dùng kích vào nút “Sinh viên có tổng điểm lớn nhất”: Hiển thị lên
ListView danh sách sinh viên những sinh viên có tổng điểm mơn tốn rời rạc và môn
nhập môn tin học lớn nhất.
Hướng dẫn thực hiện
1. Thiết kế Form nhƣ yêu cầu đề bài
2. Phân tích u cầu
Theo u cầu của bài tốn thì phải có một Form chứa:
- Các đối tƣợng có nội dung “Danh sách sinh viên”, “Mã sinh viên”, ”Họ tên

SV”, ”Năm sinh”, “Điểm nhập mơn tin học”, “Điểm tốn rời rạc” là các Label.
- Đối tƣợng ô nhập mã sinh viên, họ tên sinh viên, năm sinh, điểm nhập môn tin
học, điểm mơn tốn rời rạc là các Textbox.
137


Tập bài giảng Thực hành kỹ thuật lập trình

- Điều khiển để hiển thị danh sách sinh viên là ListView đƣợc đặt trong một
GroupBox thông tin chi tiết sinh viên.
- Đối tƣợng nhập thông tin sinh viên là GroupBox.
- Các nút “Nhập”, ”DS sinh viên lên lớp”, “Sửa”, “Xóa”, ”Sinh viên có tổng
điểm lớn nhất” là các Button.
3. Hƣớng dẫn thực hiện
Thiết kế Form theo mẫu và gắn các điều khiển
- Để tạo điểu khiển DANH SÁCH SINH VIÊN theo yêu cầu cần thực hiện:
+ Kéo điều khiển Label từ cửa sổ Toolbox
+ Kích phải chuột vào Label chọn Properties và thiết lập các thuộc tính cho
Label nhƣ sau:
Text: DANH SÁCH SINH VIÊN
Font: Microsoft Sans Serif
Size: 16
Font style: Bold
ForeColor: Blue
Thực hiện tƣơng tự với các nhãn họ tên SV, mã sinh viên, năm sinh, điểm nhập
mơn tin học, điểm tốn rời rạc.
- Để tạo một GroupBox thông tin chi tiết sinh viên theo yêu cầu cần thực hiện:
+ Kéo điều khiển GroupBox từ cửa sổ Toolbox vào Form.
+ Kích phải chuột vào GroupBox chọn Properties và thiết lập các thuộc tính cho
GroupBox nhƣ sau:

Text: Thơng tin chi tiết sinh viên
Font: Time New Roman
Size: 14
ForeColor: Black
Thực hiện tƣơng tự với GroupBox nhập thông tin sinh viên.
- Để tạo điều khiển nhập mã sinh viên theo yêu cầu cần thực hiện:
+ Kéo điểu khiển Textbox từ cửa sổ Toolbox vào Form.
+ Kích phải chuột vào Textbox/Properties và thiết lập thuộc tính Name:
txt_masv.
Thực hiện tƣơng tự với các điều khiển nhập họ tên SV, năm sinh, điểm tốn rời
rạc, điểm nhập mơn tin học.
- Để tạo điều khiển “Nhập” theo yêu cầu cần thực hiện:
+ Kéo điều khiển Button từ cửa sổ Toolbox vào Form.
+ Kích phải chuột vào Button chọn Properties và thiết lập các thuộc tính
Name: bt_nhập.
138


Tập bài giảng Thực hành kỹ thuật lập trình

Thực hiện tƣơng tự với điều khiển ”DS sinh viên lên lớp”, “Sửa”, “Xóa”, ”Sinh
viên có tổng điểm lớn nhất”.
- Để tạo điều khiển liệt kê danh sách sinh viên theo yêu cầu cần thực hiện:
+ Kéo điều khiển ListView từ cửa sổ Toolbox vào Form.
+ Kích phải chuột vào ListView chọn Properties và thiết lập các thuộc tính:
Name: listview_sinhvien
Columns/ kích chuột vào Collection/ kích Add 5 lần và thiết lập thuộc tính Text
cho các cột tƣơng ứng lần lƣợt là mã sinh viên, họ và tên, năm sinh, điểm nhập môn
tin học, điểm toán rời rạc.
View: Detail

GridLine: true
Kết quả thiết kế Form

Hình 2. 7. Kết quả thiết kế Form quản lý sinh viên
Viết mã lệnh cho các công việc
- Viết mã lệnh khai báo cấu trúc sinh viên
public struct SV
{
string _masv;
string _tensv;
int _namsinh;
double _diemnmth;
double _diemtrr;
public string Masv
{
get { return _masv; }
set { _masv = value; }
}
public string Tensv
139


Tập bài giảng Thực hành kỹ thuật lập trình

{
get { return _tensv; }
set { _tensv = value; }
}
public int Namsinh
{

get { return _namsinh; }
set { _namsinh = value; }
}
public double NMTH
{
get { return _diemnmth; }
set { _diemnmth = value; }
}
public double TRR
{
get { return _diemtrr; }
set { _diemtrr = value; }
}
public SV(string ma, string ten, int namsinh, double nmth, double trr)
{
_masv = ma;
_tensv = ten;
_namsinh = namsinh;
_diemnmth = nmth;
_diemtrr = trr;
}
public bool xetlenlop()
{
if (_diemtrr > 5 && _diemnmth > 5) return true;
else return false;
}
}
- Viết mã lệnh khai báo mảng cấu trúc sinh viên và biến nguyên n
SV[] A = new SV[100]; int n = 0;
- Viết mã lệnh cho hàm vơ hiệu hóa các button

void vohieuhoa(bool gt)
{
bt_sua.Enabled = gt;
bt_SVmax.Enabled = gt;
bt_xoa.Enabled = gt;
bt_dslenlop.Enabled = gt;
}
- Viết mã lệnh cho sự kiện Load Form
private void Form1_Load(object sender, EventArgs e)
{
vohieuhoa(false);
140


Tập bài giảng Thực hành kỹ thuật lập trình

txt_masv.Focus();
}
- Viết mã lệnh cho hàm kiểm tra xâu rỗng
bool kiemtra(string s)
{
if (string.IsNullOrWhiteSpace(s)) return true;
else return false;
}
- Viết mã lệnh cho hàm kiểm tra sự hợp lệ của dữ liệu nhập vào
bool kiemtra_dulieu()
{
int nam; double diem;
if (kiemtra(txt_hoten.Text)||kiemtra(txt_masv.Text)||
kiemtra(txt_namsinh.Text)||kiemtra(txt_diemNMTH.Text)||kiemtra(txt_diemT

RR.Text)) return false;
if (txt_namsinh.Text.Length < 4 || txt_namsinh.Text.Length > 4) return
false;
if (!int.TryParse(txt_namsinh.Text, out nam)) return false;
if (!double.TryParse(txt_diemNMTH.Text, out diem)) return false;
if (diem < 0 || diem > 10) return false;
if (!double.TryParse(txt_diemTRR.Text, out diem)) return false;
if (diem < 0 || diem > 10) return false;
return true;
}
- Viết mã lệnh cho hàm reset lại các textbox
void reset()
{
txt_hoten.ResetText();
txt_masv.ResetText();
txt_namsinh.ResetText();
txt_diemTRR.ResetText();
txt_diemNMTH.ResetText();
}
- Viết mã lệnh cho hàm đƣa dữ liệu vào Listview sinh viên
private void Dua_dulieu_listview()
{
list_sinhvien.Items.Clear();
for (int i = 0; i < n;i++ )
{
them_mothang_listview(A[i]);
}
}
- Viết mã lệnh cho hàm thêm một hàng vào ListView danh sách sinh viên
private void them_mothang_listview(SV x)

{
141


Tập bài giảng Thực hành kỹ thuật lập trình

ListViewItem item = new ListViewItem();
item.Text = x.Masv;
item.SubItems.Add(x.Tensv);
item.SubItems.Add(x.Namsinh.ToString());
item.SubItems.Add(x.NMTH.ToString());
item.SubItems.Add(x.TRR.ToString());
list_sinhvien.Items.Add(item);
}
- Viết mã lệnh cho sự kiện kích chuột vào nút nhập
private void bt_nhap_Click(object sender, EventArgs e)
{ int i;
if (kiemtra_dulieu())
{ vohieuhoa(true);
SV X = new SV(txt_masv.Text, txt_hoten.Text,
int.Parse(txt_namsinh.Text), double.Parse(txt_diemNMTH.Text),
double.Parse(txt_diemTRR.Text));
for(i=0;iif (string.Compare(A[i].Masv, txt_masv.Text) == 0) {
MessageBox.Show("Trung ma sv"); txt_masv.Focus(); return; }
if (i == n) { A[i] = X; n++; }
Dua_dulieu_listview(); reset(); txt_masv.Focus();
}
else { MessageBox.Show("Dữ liệu chƣa hợp lệ", "Thông báo"); return;
}

}
- Viết mã lệnh cho sự kiện kích chuột vào nút danh sách sinh viên lên lớp
private void bt_dslenlop_Click(object sender, EventArgs e)
{
list_sinhvien.Items.Clear();
for (int i = 0; i < n;i++ )
if (A[i].xetlenlop())
them_mothang_listview(A[i]);
}
- Viết mã lệnh cho sự kiện kích chọn phần tử trên ListView
private void list_sinhvien_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
for (int i = 0; i < list_sinhvien.SelectedItems.Count; i++)
{
txt_masv.Text = list_sinhvien.SelectedItems[i].SubItems[0].Text;
txt_hoten.Text = list_sinhvien.SelectedItems[i].SubItems[1].Text;
142


×