Thực hành kỹ thuật lập trình - 22



public MatHang(string ma, string ten, string dvt)

{

_mamh = ma;

_tenmh = ten;

_dvtinh = dvt;

}

public ListViewItem hienthi()

{

Có thể bạn quan tâm!

Xem toàn bộ 312 trang tài liệu này.

ListViewItem item = new ListViewItem(); item.Text = _mamh; item.SubItems.Add(_tenmh); item.SubItems.Add(_dvtinh);

return item;

}

public void GhiDuLieu(BinaryWriter writer)

{

writer.Write(_mamh); writer.Write(_tenmh); writer.Write(_dvtinh);

}

public MatHang DocDulieu(BinaryReader read)

{

MatHang X = new MatHang(); try

{

X.mamh = read.ReadString(); X.tenmh = read.ReadString(); X.dvtinh = read.ReadString();

}

catch (IOException)

{

Console.WriteLine("Lỗi đọc tệp");

}

return X;

}

}

- Viết mã lệnh khai báo mảng cấu trúc mặt hàng, biến nguyên n

MatHang[] A = new MatHang[100]; int n = 0;

- Viết mã lệnh cho hàm đọc tệp

void Motep_doc(ref MatHang[] A, ref int n)

{

FileStream fs = new FileStream(@"C:tblMatHang.data", FileMode.Open, FileAccess.Read);

BinaryReader reader = new BinaryReader(fs); n = reader.ReadInt32(); int cs = 0;

for (int i = 0; i < n; i++)



{

A[cs] = A[cs].DocDulieu(reader); cs++;

}

reader.Close(); fs.Close();

}

- Viết mã lệnh cho hàm ghi dữ liệu vào tệp

void Motep_ghi(MatHang[] A, int n)

{

FileStream fs = new FileStream(@"C:tblMatHang.data", FileMode.Create, FileAccess.Write);

BinaryWriter bw = new BinaryWriter(fs); bw.Write(n);

try

{

for (int i = 0; i < n; i++) A[i].GhiDuLieu(bw);

}

catch (IOException ex)

{ Console.WriteLine("Loi" + ex); } bw.Close(); fs.Close();

}

- Viết mã lệnh cho hàm vô hiệu hóa các textbox

void vohieuhoa(bool gt)

{

txt_dvtinh.Enabled = gt; txt_mamh.Enabled = gt; txt_tenmh.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_mamh.Text) || kiemtra(txt_tenmh.Text) || kiemtra(txt_dvtinh.Text)) return false;

return true;

}

- Viết mã lệnh cho hàm kiểm tra chuỗi rỗng

bool kiemtra(string s)

{

if (string.IsNullOrWhiteSpace(s)) return true; else return false;

}



- Viết mã lệnh cho hàm reset các textbox

void reset()

{

txt_dvtinh.ResetText(); txt_tenmh.ResetText(); txt_mamh.ResetText();

}

- Viết mã lệnh đưa dữ liệu vào ListView

private void Dua_DL_listview(MatHang[] A, int n)

{

listview_mathang.Items.Clear(); for (int i = 0; i < n; i++)

{

ListViewItem item = new ListViewItem(); item.Text = A[i].mamh; item.SubItems.Add(A[i].tenmh); item.SubItems.Add(A[i].dvtinh); listview_mathang.Items.Add(item);

}

}

- Viết mã lệnh cho sự kiện Form Load

private void FrmMatHang_Load(object sender, EventArgs e)

{

vohieuhoa(false); Motep_doc(ref A, ref n); Dua_DL_listview(A, n);

}

- Viết mã lệnh cho sự kiện kích chuột vào nút thêm

private void bt_them_Click_1(object sender, EventArgs e)

{

Motep_doc(ref A, ref n);

if (string.Compare(bt_them.Text, "Thêm") == 0)

{

vohieuhoa(true); txt_mamh.Focus(); bt_them.Text = "Lưu";

}

else if (kiemtra_du_lieu())

{

int i;

MatHang X = new MatHang(txt_mamh.Text, txt_tenmh.Text, txt_dvtinh.Text);

for (i = 0; i < n; i++)

if (A[i].mamh == txt_mamh.Text) { MessageBox.Show("Trùng mã khách hàng", "Thông báo"); txt_mamh.Focus(); break; }

if (i == n) { A[n] = X; n++; reset(); bt_them.Text = "Thêm"; vohieuhoa(false); }

Motep_ghi(A, n);



Motep_doc(ref A, ref n); Dua_DL_listview(A, n);

}

else { MessageBox.Show("Dữ liệu nhập vào không hợp lệ", "Thông báo lỗi"); bt_them.Text = "Lưu"; }

}

- Viết mã lệnh cho sự kiện kích chuột vào nút xóa

private void bt_xoa_Click_1(object sender, EventArgs e)

{

if (MessageBox.Show("Bạn có muốn xóa không?", "Thông báo", MessageBoxButtons.YesNo) == DialogResult.Yes)

{

Motep_doc(ref A, ref n);

for (int i = 0; i < listview_mathang.SelectedItems.Count; i++) for (int j = 0; j < n; j++)

if (string.Compare(A[j].mamh, listview_mathang.SelectedItems[i].SubItems[0].Text) == 0)

{

for (int k = j; k < n - 1; k++) A[k] = A[k + 1]; n--; break;

}

Motep_ghi(A, n); Motep_doc(ref A, ref n); listview_mathang.Items.Clear(); Dua_DL_listview(A, n);

reset();

}

}

- Viết mã lệnh cho sự kiện kích chuột vào nút sửa

private void bt_sua_Click_1(object sender, EventArgs e)

{

Motep_doc(ref A, ref n);

if (string.Compare(bt_sua.Text, "Sửa") == 0)

{

vohieuhoa(true); txt_mamh.Enabled = false; txt_tenmh.Focus(); bt_sua.Text = "Cập nhật";

}

else if (kiemtra_du_lieu())

{

for (int i = 0; i < n; i++)

if (string.Compare(A[i].mamh, txt_mamh.Text) == 0)

{



MatHang X = new MatHang(txt_mamh.Text, txt_tenmh.Text, txt_dvtinh.Text);

A[i] = X;

break;

}

Motep_ghi(A, n); Motep_doc(ref A, ref n);

Dua_DL_listview(A, n); bt_sua.Text = "Sửa"; vohieuhoa(false);

reset();

}

else { MessageBox.Show("Dữ liệu sửa không hợp lệ"); bt_sua.Text = "Cập nhật"; }

}

- Viết mã lệnh cho sự kiện kích chuột vào nút tìm kiếm

private void bt_timkiem_Click_1(object sender, EventArgs e)

{

Motep_doc(ref A, ref n);

string ma = Microsoft.VisualBasic.Interaction.InputBox("Nhập mã khách hàng cần tìm kiếm", "Tìm kiếm");

int i = 0;

while (i < n && string.Compare(A[i].mamh, ma) != 0) i++;

if (i == n) MessageBox.Show("Tìm kiếm không thấy", "Thông báo tìm kiếm");

else

{

listview_mathang.Items.Clear(); ListViewItem item = new ListViewItem(); item.Text = A[i].mamh; item.SubItems.Add(A[i].tenmh); item.SubItems.Add(A[i].dvtinh);

}

}

- Viết mã lệnh cho sự kiện chọn phần tử trên ListView

private void listview_mathang_SelectedIndexChanged(object sender, EventArgs e)

{

try

{

for (int i = 0; i < listview_mathang.SelectedItems.Count; i++)

{

txt_mamh.Text =



listview_mathang.SelectedItems[i].SubItems[0].Text; txt_tenmh.Text =

listview_mathang.SelectedItems[i].SubItems[1].Text; txt_dvtinh.Text =

listview_mathang.SelectedItems[i].SubItems[2].Text;

}

}

catch { MessageBox.Show("Bạn chưa chọn phần tử để xóa"); }

}

Kết quả chạy chương trình

Hình 2 14 Form Thông tin mặt hàng 2 2 3 Bài tập thực hành Bài 1 Viết chương 1

Hình 2. 14. Form Thông tin mặt hàng

2.2.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 15 Form Quản lý giáo viên Yêu cầu Nhãn quản lý giáo viên Microsoft Sans 2

Hình 2. 15. Form Quản lý giáo viên

Yêu cầu:

- Nhãn quản lý giáo viên: Microsoft Sans Serif, cỡ chữ 16, chữ hoa, căn giữa Form, màu xanh.



- Nhãn mã giáo viên, họ tên, tuổi, giới tính, hệ số lương, thâm niên: Font Time New Roman, cỡ chữ 14, màu đen.

- Các ô để nhập mã giáo viên, họ tên, tuổi, hệ số lương, thâm niên là các TextBox.

- Điều khiển để chọn giới tính nam hay nữ là các Radiobutton.

- Các điều khiển “Danh sách giáo viên”, ”Thêm”, “Sửa”, “Xóa”, “Thâm niên”,”Thoát” là các Button.

- Đối tượng thông tin chi tiết giáo viên và danh sách giáo viên là các GroupBox.

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ó các thuộc tính: Mã giáo viên, họ và tên, tuổi, giới tính, hệ số lương, thâm niên, phương thức hàm tạo có tham số, phương thức xét thâm niên (giáo viên có kinh nghiệm giảng dạy từ 5 năm trở lên). Danh sách giáo viên được lưu trữ trong tệp “Hoso.Data”.

- Khi người dùng kích vào nút “Danh sách giáo viên”: thực hiện đọc dữ liệu lưu trong tệp “Hoso.Data”. Nếu tệp chưa tồn tại thì đưa ra thông báo lỗi, ngược lại hiển thị dữ liệu trong tệp đó ra ListView danh sách giáo viên.

- Khi người dùng kích vào nút “Thêm”:

+ Đọc dữ liệu trong tệp “Hoso.Data” ra ListView danh sách giáo viên.

+ Kiểm tra dữ liệu nhập vào (tuổi, hệ số lương, thâm niên phải là số). Nếu không hợp lệ thì hiện lên hộp thoại thông báo và yêu cầu nhập lại. Nếu dữ liệu nhập vào hợp lệ thì thực hiện thêm giáo viên mới đó vào cuối tệp “Hoso.Data” và hiển thị lại danh sách giáo viên sau khi thêm lên ListView giáo viên.

- Khi người dùng kích vào nút “Sửa”:

+ Đọc dữ liệu trong tệp “Hoso.Data” ra ListView danh sách giáo viên.

+ Chọn giáo viên cần sửa trên ListView danh sách giáo viên. Nếu người sử dụng chưa chọn giáo viên để sửa thì hiện lên hộp thoại thông báo và yêu cầu chọn. Thông tin chi tiết của giáo viên chọn để sửa sẽ hiện lên các Textbox và radiobutton tương ứng.

+ Kiểm tra nếu thuộc tính Text của nút là “Sửa”:

* Textbox để nhập mã giáo viên vô hiệu hóa

* Text của nút đổi thành “Cập nhật”

* Đặt con trỏ vào Textbox nhập họ và tên giáo viên.

+ Nếu thuộc tính Text của nút 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 không hợp lệ thì đưa ra hộp thoại thông báo và yêu cầu sửa lại, thuộc tính Text của nút vẫn là “Cập nhật”. Ngược lại, nếu dữ liệu hợp lệ thì thực hiện sửa thông tin của giáo viên có mã trùng với mã chọn và lưu lại thông tin đó, đồng


thời hiển thị lại danh sách giáo viên sau khi sửa ra ListView danh sách giáo viên, thuộc tính Text của nút lại chuyển thành “Sửa”, textbox mã giáo viên sáng cho phép hoạt động và reset lại các textbox, radiobutton tương ứng.

- Khi người dùng kích vào nút “Xóa”:

+ Đọc dữ liệu trong tệp “Hoso.Data” ra ListView danh sách giáo viên.

+ Chọn giáo viên cần sửa trên ListView danh sách giáo viên. Nếu người sử dụng chưa chọn giáo viên để sửa thì hiện lên hộp thoại thông báo và yêu cầu chọn. Thông tin chi tiết của giáo viên chọn để sửa sẽ hiện lên các Textbox và radiobutton tương ứng.

+ Đưa ra hộp thoại có hai nút Yes/No để hỏi người dùng có chắc chắn muốn xóa hay không? Nếu người dùng chọn Yes thì thực hiện xóa giáo viên đó ra khỏi danh sách, đồng thời cập nhật lại danh sách sau khi xóa ra ListView danh sách giáo viên. Ngược lại, nếu người dùng chọn No thì không xóa giáo viên đó. Reset lại các textbox và radiobutton tương ứ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 yêu cầu của bài toán thì phải có một Form chứa:

- Các đối tượng có nội dung “quản lý giáo viên”, “mã giáo viên”, “họ tên”, “tuổi”, “giới tính”, “hệ số lương”, “thâm niên” là các Label.

- Đối tượng ô để nhập mã giáo viên, họ tên, tuổi, hệ số lương, thâm niên là các Textbox.

- Đối tượng để lựa chọn giới tính là Nam/Nữ là các Radiobutton.

- Đối tượng thông tin chi tiết giáo viên, danh sách giáo viên là các GroupBox.

- Các nút “Đọc tệp”, “Thêm” , “Sửa”, “Xóa”, “ Thâm niên”, “Thoát” là các Button.

- Điều khiển để hiển thị danh sách giáo viên là ListView.

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 Quản lý giáo 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: QUẢN LÝ GIÁO VIÊN

Font: Microsoft Sans Serif Size: 16

ForeColor: Blue

..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 16/07/2022